ui: better QR switcher (#2477)

cyan committed Aug 22, 2025 at 18:27 UTC 7b600c9cd82c593075e2ebb1b32381c53d7f46fc
36 files changed +802 -152
assets/images/cupcake.svg new
+48
@@ -0,0 +1,48 @@
1 +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2 +<g clip-path="url(#clip0_7507_19175)">
3 +<g clip-path="url(#clip1_7507_19175)">
4 +<path d="M4.79224 9.67615C5.02755 9.67632 5.22899 9.84574 5.26978 10.0775L6.21411 15.4584C6.26622 15.7552 6.03791 16.0267 5.73657 16.0267H4.41431C4.19483 16.0267 4.00235 15.8796 3.94556 15.6674L2.51001 10.2865C2.42791 9.97823 2.65981 9.67615 2.97876 9.67615H4.79224ZM9.69067 9.67615C9.99206 9.6763 10.2203 9.94859 10.1682 10.2455L9.22388 15.6254C9.18312 15.8576 8.98087 16.0267 8.74536 16.0267H7.29614C7.06077 16.0266 6.85935 15.8572 6.8186 15.6254L5.87427 10.2455C5.82186 9.94851 6.05031 9.67616 6.35181 9.67615H9.69067ZM13.0647 9.67615C13.3832 9.67626 13.6155 9.97862 13.5334 10.2865L12.0979 15.6664C12.0413 15.8786 11.8491 16.0267 11.6292 16.0267H10.3069C10.0054 16.0267 9.77628 15.7544 9.82837 15.4574L10.7737 10.0775C10.8145 9.84531 11.0158 9.67617 11.2512 9.67615H13.0647Z" fill="url(#paint0_linear_7507_19175)"/>
5 +<path d="M14.1953 6.39246H1.84672C1.48938 6.39246 1.19971 6.68213 1.19971 7.03947V8.31732C1.19971 8.67466 1.48938 8.96433 1.84672 8.96433H14.1953C14.5526 8.96433 14.8423 8.67466 14.8423 8.31732V7.03947C14.8423 6.68213 14.5526 6.39246 14.1953 6.39246Z" fill="url(#paint1_linear_7507_19175)"/>
6 +<path d="M3.45658 5.81028H12.5853C12.9428 5.81028 13.2323 5.52074 13.2323 5.16327V3.64279C13.2323 3.493 13.1802 3.35131 13.09 3.2384H3.45658C3.09911 3.2384 2.80957 3.52794 2.80957 3.88542V5.16327C2.80957 5.52074 3.09911 5.81028 3.45658 5.81028Z" fill="url(#paint2_linear_7507_19175)"/>
7 +<path d="M12.8689 3.06103L6.64759 0.0268555L5.80388 1.75697C5.6473 2.07821 5.78059 2.46545 6.10183 2.62203L7.36577 3.23831H13.0902C13.0317 3.16487 12.9566 3.10373 12.8693 3.06103H12.8689Z" fill="url(#paint3_linear_7507_19175)"/>
8 +<path d="M12.8689 3.06103L6.64759 0.0268555L5.80388 1.75697C5.6473 2.07821 5.78059 2.46545 6.10183 2.62203L7.36577 3.23831H13.0902C13.0317 3.16487 12.9566 3.10373 12.8693 3.06103H12.8689Z" fill="url(#paint4_linear_7507_19175)"/>
9 +<path d="M12.8689 3.06103L6.64759 0.0268555L5.80388 1.75697C5.6473 2.07821 5.78059 2.46545 6.10183 2.62203L7.36577 3.23831H13.0902C13.0317 3.16487 12.9566 3.10373 12.8693 3.06103H12.8689Z" fill="url(#paint5_linear_7507_19175)"/>
10 +</g>
11 +</g>
12 +<defs>
13 +<linearGradient id="paint0_linear_7507_19175" x1="8.02049" y1="5.63377" x2="8.02049" y2="16.0331" gradientUnits="userSpaceOnUse">
14 +<stop offset="0.127385" stop-color="#F9F9F9"/>
15 +<stop offset="0.616334" stop-color="#EBEBF0"/>
16 +<stop offset="0.961538" stop-color="#B5AEBB"/>
17 +</linearGradient>
18 +<linearGradient id="paint1_linear_7507_19175" x1="8.29618" y1="6.3273" x2="8.29154" y2="8.96477" gradientUnits="userSpaceOnUse">
19 +<stop stop-color="#61C5FF"/>
20 +<stop offset="1" stop-color="#2A92FA"/>
21 +</linearGradient>
22 +<linearGradient id="paint2_linear_7507_19175" x1="7.5466" y1="2.9268" x2="8.01993" y2="5.8068" gradientUnits="userSpaceOnUse">
23 +<stop offset="0.0168777" stop-color="#FFC414"/>
24 +<stop offset="1" stop-color="#FF9B54"/>
25 +</linearGradient>
26 +<linearGradient id="paint3_linear_7507_19175" x1="4.98661" y1="-0.399811" x2="4.06528" y2="2.7137" gradientUnits="userSpaceOnUse">
27 +<stop stop-color="#FF7D38"/>
28 +<stop offset="0.612828" stop-color="#FE6412"/>
29 +<stop offset="1" stop-color="#F25400"/>
30 +</linearGradient>
31 +<linearGradient id="paint4_linear_7507_19175" x1="14.4635" y1="0.0280069" x2="13.1164" y2="5.329" gradientUnits="userSpaceOnUse">
32 +<stop stop-color="#FF7B34"/>
33 +<stop offset="0.578219" stop-color="#FF630F"/>
34 +<stop offset="1" stop-color="#FF3B0F"/>
35 +</linearGradient>
36 +<linearGradient id="paint5_linear_7507_19175" x1="7.36005" y1="-0.673145" x2="8.75339" y2="4.53352" gradientUnits="userSpaceOnUse">
37 +<stop stop-color="#FF7B34"/>
38 +<stop offset="0.512747" stop-color="#FF630F"/>
39 +<stop offset="1" stop-color="#FF3B0F"/>
40 +</linearGradient>
41 +<clipPath id="clip0_7507_19175">
42 +<rect width="16" height="16" fill="white"/>
43 +</clipPath>
44 +<clipPath id="clip1_7507_19175">
45 +<rect width="13.6426" height="16" fill="white" transform="translate(1.19971 0.0267334)"/>
46 +</clipPath>
47 +</defs>
48 +</svg>
assets/images/urqr_icon.svg new
+26
@@ -0,0 +1,26 @@
1 +<svg width="90" height="90" viewBox="0 0 90 90" fill="none" xmlns="http://www.w3.org/2000/svg">
2 +<path d="M34.5013 49.1421C36.1876 49.1421 37.8051 49.812 38.9974 51.0044C40.1897 52.1969 40.8597 53.8143 40.8597 55.5005V69.5005C40.8597 71.1867 40.1897 72.8041 38.9974 73.9966C37.8051 75.1889 36.1876 75.8589 34.5013 75.8589H20.5033C18.8172 75.8588 17.2004 75.1888 16.0082 73.9966C14.8159 72.8041 14.1459 71.1867 14.1459 69.5005V55.5005C14.1459 53.8143 14.8159 52.1969 16.0082 51.0044C17.2004 49.8122 18.8172 49.1422 20.5033 49.1421H34.5013ZM69.5267 49.1421C71.2128 49.1421 72.8306 49.8122 74.0228 51.0044C75.2149 52.1967 75.885 53.8145 75.8851 55.5005V69.5005C75.885 71.1865 75.215 72.8042 74.0228 73.9966C72.8306 75.1888 71.2129 75.8589 69.5267 75.8589H55.5287C53.8428 75.8587 52.2257 75.1886 51.0336 73.9966C49.8416 72.8043 49.1714 71.1864 49.1713 69.5005V55.5005C49.1714 53.8145 49.8415 52.1967 51.0336 51.0044C52.2257 49.8123 53.8427 49.1423 55.5287 49.1421H69.5267ZM20.5033 54.8589C20.3336 54.859 20.1703 54.9262 20.0502 55.0464C19.93 55.1667 19.8627 55.3303 19.8627 55.5005V69.5005C19.8627 69.6707 19.93 69.8343 20.0502 69.9546C20.1703 70.0747 20.3336 70.142 20.5033 70.1421H34.5013C34.671 70.1421 34.8343 70.0746 34.9545 69.9546C35.0747 69.8343 35.1429 69.6707 35.1429 69.5005V55.5005C35.1429 55.3302 35.0747 55.1667 34.9545 55.0464C34.8342 54.9264 34.6711 54.8589 34.5013 54.8589H20.5033ZM55.5287 54.8589C55.3591 54.8591 55.1956 54.9263 55.0756 55.0464C54.9556 55.1666 54.8882 55.3305 54.8881 55.5005V69.5005C54.8882 69.6704 54.9557 69.8345 55.0756 69.9546C55.1956 70.0745 55.3592 70.1419 55.5287 70.1421H69.5267C69.6963 70.1421 69.8597 70.0745 69.9799 69.9546C70.1 69.8344 70.1682 69.6706 70.1683 69.5005V55.5005C70.1682 55.3305 70.0999 55.1666 69.9799 55.0464C69.8597 54.9266 69.6963 54.8589 69.5267 54.8589H55.5287ZM27.5033 59.0708C29.3975 59.071 30.933 60.6062 30.933 62.5005V62.5356C30.9328 64.4297 29.3973 65.9651 27.5033 65.9653C25.609 65.9653 24.0738 64.4299 24.0736 62.5356V62.5005C24.0736 60.6061 25.6089 59.0708 27.5033 59.0708ZM62.5287 59.0698C64.4226 59.0701 65.958 60.6056 65.9584 62.4995V62.5347C65.9583 64.4289 64.4229 65.9641 62.5287 65.9644C60.6344 65.9642 59.099 64.4289 59.099 62.5347V62.4995C59.0994 60.6055 60.6347 59.07 62.5287 59.0698ZM34.5013 14.1421C36.1876 14.1421 37.8051 14.812 38.9974 16.0044C40.1897 17.1969 40.8597 18.8143 40.8597 20.5005V34.5005C40.8597 36.1866 40.1897 37.8042 38.9974 38.9966C37.8052 40.1889 36.1876 40.8589 34.5013 40.8589H20.5033C18.8173 40.8588 17.2003 40.1888 16.0082 38.9966C14.8159 37.8042 14.1459 36.1866 14.1459 34.5005V20.5005C14.1459 18.8143 14.816 17.1968 16.0082 16.0044C17.2003 14.8122 18.8172 14.1422 20.5033 14.1421H34.5013ZM69.4965 14.1421C71.1827 14.1421 72.8003 14.8121 73.9926 16.0044C75.1848 17.1968 75.8549 18.8143 75.8549 20.5005V34.5005C75.8548 36.1866 75.1848 37.8042 73.9926 38.9966C72.8003 40.1889 71.1827 40.8589 69.4965 40.8589H55.4984C53.8124 40.8588 52.1955 40.1887 51.0033 38.9966C49.811 37.8042 49.141 36.1867 49.141 34.5005V20.5005C49.141 18.8143 49.811 17.1969 51.0033 16.0044C52.1955 14.8122 53.8123 14.1422 55.4984 14.1421H69.4965ZM20.5033 19.8589C20.3336 19.859 20.1703 19.9262 20.0502 20.0464C19.93 20.1667 19.8627 20.3303 19.8627 20.5005V34.5005C19.8627 34.6707 19.93 34.8344 20.0502 34.9546C20.1703 35.0747 20.3336 35.142 20.5033 35.1421H34.5013C34.671 35.1421 34.8343 35.0746 34.9545 34.9546C35.0747 34.8344 35.1429 34.6707 35.1429 34.5005V20.5005C35.1429 20.3302 35.0747 20.1667 34.9545 20.0464C34.8342 19.9264 34.6711 19.8589 34.5013 19.8589H20.5033ZM55.4984 19.8589C55.3287 19.859 55.1654 19.9262 55.0453 20.0464C54.9251 20.1667 54.8578 20.3302 54.8578 20.5005V34.5005C54.8578 34.6707 54.9251 34.8343 55.0453 34.9546C55.1654 35.0747 55.3288 35.142 55.4984 35.1421H69.4965C69.6663 35.1421 69.8303 35.0748 69.9506 34.9546C70.0707 34.8344 70.138 34.6707 70.1381 34.5005V20.5005C70.1381 20.3303 70.0707 20.1666 69.9506 20.0464C69.8303 19.9261 69.6663 19.8589 69.4965 19.8589H55.4984ZM27.5033 24.0708C29.3975 24.071 30.933 25.6062 30.933 27.5005V27.5356C30.9329 29.4298 29.3974 30.9651 27.5033 30.9653C25.609 30.9653 24.0737 29.43 24.0736 27.5356V27.5005C24.0736 25.6061 25.6089 24.0708 27.5033 24.0708ZM62.4974 24.0708C64.3918 24.0708 65.9271 25.6061 65.9271 27.5005V27.5356C65.927 29.4299 64.3918 30.9653 62.4974 30.9653C60.6033 30.9651 59.0679 29.4298 59.0677 27.5356V27.5005C59.0677 25.6062 60.6032 24.071 62.4974 24.0708Z" fill="url(#paint0_linear_7557_11568)"/>
3 +<path d="M34.5013 49.1421C36.1876 49.1421 37.8051 49.812 38.9974 51.0044C40.1897 52.1969 40.8597 53.8143 40.8597 55.5005V69.5005C40.8597 71.1867 40.1897 72.8041 38.9974 73.9966C37.8051 75.1889 36.1876 75.8589 34.5013 75.8589H20.5033C18.8172 75.8588 17.2004 75.1888 16.0082 73.9966C14.8159 72.8041 14.1459 71.1867 14.1459 69.5005V55.5005C14.1459 53.8143 14.8159 52.1969 16.0082 51.0044C17.2004 49.8122 18.8172 49.1422 20.5033 49.1421H34.5013ZM69.5267 49.1421C71.2128 49.1421 72.8306 49.8122 74.0228 51.0044C75.2149 52.1967 75.885 53.8145 75.8851 55.5005V69.5005C75.885 71.1865 75.215 72.8042 74.0228 73.9966C72.8306 75.1888 71.2129 75.8589 69.5267 75.8589H55.5287C53.8428 75.8587 52.2257 75.1886 51.0336 73.9966C49.8416 72.8043 49.1714 71.1864 49.1713 69.5005V55.5005C49.1714 53.8145 49.8415 52.1967 51.0336 51.0044C52.2257 49.8123 53.8427 49.1423 55.5287 49.1421H69.5267ZM20.5033 54.8589C20.3336 54.859 20.1703 54.9262 20.0502 55.0464C19.93 55.1667 19.8627 55.3303 19.8627 55.5005V69.5005C19.8627 69.6707 19.93 69.8343 20.0502 69.9546C20.1703 70.0747 20.3336 70.142 20.5033 70.1421H34.5013C34.671 70.1421 34.8343 70.0746 34.9545 69.9546C35.0747 69.8343 35.1429 69.6707 35.1429 69.5005V55.5005C35.1429 55.3302 35.0747 55.1667 34.9545 55.0464C34.8342 54.9264 34.6711 54.8589 34.5013 54.8589H20.5033ZM55.5287 54.8589C55.3591 54.8591 55.1956 54.9263 55.0756 55.0464C54.9556 55.1666 54.8882 55.3305 54.8881 55.5005V69.5005C54.8882 69.6704 54.9557 69.8345 55.0756 69.9546C55.1956 70.0745 55.3592 70.1419 55.5287 70.1421H69.5267C69.6963 70.1421 69.8597 70.0745 69.9799 69.9546C70.1 69.8344 70.1682 69.6706 70.1683 69.5005V55.5005C70.1682 55.3305 70.0999 55.1666 69.9799 55.0464C69.8597 54.9266 69.6963 54.8589 69.5267 54.8589H55.5287ZM27.5033 59.0708C29.3975 59.071 30.933 60.6062 30.933 62.5005V62.5356C30.9328 64.4297 29.3973 65.9651 27.5033 65.9653C25.609 65.9653 24.0738 64.4299 24.0736 62.5356V62.5005C24.0736 60.6061 25.6089 59.0708 27.5033 59.0708ZM62.5287 59.0698C64.4226 59.0701 65.958 60.6056 65.9584 62.4995V62.5347C65.9583 64.4289 64.4229 65.9641 62.5287 65.9644C60.6344 65.9642 59.099 64.4289 59.099 62.5347V62.4995C59.0994 60.6055 60.6347 59.07 62.5287 59.0698ZM34.5013 14.1421C36.1876 14.1421 37.8051 14.812 38.9974 16.0044C40.1897 17.1969 40.8597 18.8143 40.8597 20.5005V34.5005C40.8597 36.1866 40.1897 37.8042 38.9974 38.9966C37.8052 40.1889 36.1876 40.8589 34.5013 40.8589H20.5033C18.8173 40.8588 17.2003 40.1888 16.0082 38.9966C14.8159 37.8042 14.1459 36.1866 14.1459 34.5005V20.5005C14.1459 18.8143 14.816 17.1968 16.0082 16.0044C17.2003 14.8122 18.8172 14.1422 20.5033 14.1421H34.5013ZM69.4965 14.1421C71.1827 14.1421 72.8003 14.8121 73.9926 16.0044C75.1848 17.1968 75.8549 18.8143 75.8549 20.5005V34.5005C75.8548 36.1866 75.1848 37.8042 73.9926 38.9966C72.8003 40.1889 71.1827 40.8589 69.4965 40.8589H55.4984C53.8124 40.8588 52.1955 40.1887 51.0033 38.9966C49.811 37.8042 49.141 36.1867 49.141 34.5005V20.5005C49.141 18.8143 49.811 17.1969 51.0033 16.0044C52.1955 14.8122 53.8123 14.1422 55.4984 14.1421H69.4965ZM20.5033 19.8589C20.3336 19.859 20.1703 19.9262 20.0502 20.0464C19.93 20.1667 19.8627 20.3303 19.8627 20.5005V34.5005C19.8627 34.6707 19.93 34.8344 20.0502 34.9546C20.1703 35.0747 20.3336 35.142 20.5033 35.1421H34.5013C34.671 35.1421 34.8343 35.0746 34.9545 34.9546C35.0747 34.8344 35.1429 34.6707 35.1429 34.5005V20.5005C35.1429 20.3302 35.0747 20.1667 34.9545 20.0464C34.8342 19.9264 34.6711 19.8589 34.5013 19.8589H20.5033ZM55.4984 19.8589C55.3287 19.859 55.1654 19.9262 55.0453 20.0464C54.9251 20.1667 54.8578 20.3302 54.8578 20.5005V34.5005C54.8578 34.6707 54.9251 34.8343 55.0453 34.9546C55.1654 35.0747 55.3288 35.142 55.4984 35.1421H69.4965C69.6663 35.1421 69.8303 35.0748 69.9506 34.9546C70.0707 34.8344 70.138 34.6707 70.1381 34.5005V20.5005C70.1381 20.3303 70.0707 20.1666 69.9506 20.0464C69.8303 19.9261 69.6663 19.8589 69.4965 19.8589H55.4984ZM27.5033 24.0708C29.3975 24.071 30.933 25.6062 30.933 27.5005V27.5356C30.9329 29.4298 29.3974 30.9651 27.5033 30.9653C25.609 30.9653 24.0737 29.43 24.0736 27.5356V27.5005C24.0736 25.6061 25.6089 24.0708 27.5033 24.0708ZM62.4974 24.0708C64.3918 24.0708 65.9271 25.6061 65.9271 27.5005V27.5356C65.927 29.4299 64.3918 30.9653 62.4974 30.9653C60.6033 30.9651 59.0679 29.4298 59.0677 27.5356V27.5005C59.0677 25.6062 60.6032 24.071 62.4974 24.0708Z" fill="#EFEFF8" fill-opacity="0.85"/>
4 +<path d="M34.5013 49.1421C36.1876 49.1421 37.8051 49.812 38.9974 51.0044C40.1897 52.1969 40.8597 53.8143 40.8597 55.5005V69.5005C40.8597 71.1867 40.1897 72.8041 38.9974 73.9966C37.8051 75.1889 36.1876 75.8589 34.5013 75.8589H20.5033C18.8172 75.8588 17.2004 75.1888 16.0082 73.9966C14.8159 72.8041 14.1459 71.1867 14.1459 69.5005V55.5005C14.1459 53.8143 14.8159 52.1969 16.0082 51.0044C17.2004 49.8122 18.8172 49.1422 20.5033 49.1421H34.5013ZM69.5267 49.1421C71.2128 49.1421 72.8306 49.8122 74.0228 51.0044C75.2149 52.1967 75.885 53.8145 75.8851 55.5005V69.5005C75.885 71.1865 75.215 72.8042 74.0228 73.9966C72.8306 75.1888 71.2129 75.8589 69.5267 75.8589H55.5287C53.8428 75.8587 52.2257 75.1886 51.0336 73.9966C49.8416 72.8043 49.1714 71.1864 49.1713 69.5005V55.5005C49.1714 53.8145 49.8415 52.1967 51.0336 51.0044C52.2257 49.8123 53.8427 49.1423 55.5287 49.1421H69.5267ZM20.5033 54.8589C20.3336 54.859 20.1703 54.9262 20.0502 55.0464C19.93 55.1667 19.8627 55.3303 19.8627 55.5005V69.5005C19.8627 69.6707 19.93 69.8343 20.0502 69.9546C20.1703 70.0747 20.3336 70.142 20.5033 70.1421H34.5013C34.671 70.1421 34.8343 70.0746 34.9545 69.9546C35.0747 69.8343 35.1429 69.6707 35.1429 69.5005V55.5005C35.1429 55.3302 35.0747 55.1667 34.9545 55.0464C34.8342 54.9264 34.6711 54.8589 34.5013 54.8589H20.5033ZM55.5287 54.8589C55.3591 54.8591 55.1956 54.9263 55.0756 55.0464C54.9556 55.1666 54.8882 55.3305 54.8881 55.5005V69.5005C54.8882 69.6704 54.9557 69.8345 55.0756 69.9546C55.1956 70.0745 55.3592 70.1419 55.5287 70.1421H69.5267C69.6963 70.1421 69.8597 70.0745 69.9799 69.9546C70.1 69.8344 70.1682 69.6706 70.1683 69.5005V55.5005C70.1682 55.3305 70.0999 55.1666 69.9799 55.0464C69.8597 54.9266 69.6963 54.8589 69.5267 54.8589H55.5287ZM27.5033 59.0708C29.3975 59.071 30.933 60.6062 30.933 62.5005V62.5356C30.9328 64.4297 29.3973 65.9651 27.5033 65.9653C25.609 65.9653 24.0738 64.4299 24.0736 62.5356V62.5005C24.0736 60.6061 25.6089 59.0708 27.5033 59.0708ZM62.5287 59.0698C64.4226 59.0701 65.958 60.6056 65.9584 62.4995V62.5347C65.9583 64.4289 64.4229 65.9641 62.5287 65.9644C60.6344 65.9642 59.099 64.4289 59.099 62.5347V62.4995C59.0994 60.6055 60.6347 59.07 62.5287 59.0698ZM34.5013 14.1421C36.1876 14.1421 37.8051 14.812 38.9974 16.0044C40.1897 17.1969 40.8597 18.8143 40.8597 20.5005V34.5005C40.8597 36.1866 40.1897 37.8042 38.9974 38.9966C37.8052 40.1889 36.1876 40.8589 34.5013 40.8589H20.5033C18.8173 40.8588 17.2003 40.1888 16.0082 38.9966C14.8159 37.8042 14.1459 36.1866 14.1459 34.5005V20.5005C14.1459 18.8143 14.816 17.1968 16.0082 16.0044C17.2003 14.8122 18.8172 14.1422 20.5033 14.1421H34.5013ZM69.4965 14.1421C71.1827 14.1421 72.8003 14.8121 73.9926 16.0044C75.1848 17.1968 75.8549 18.8143 75.8549 20.5005V34.5005C75.8548 36.1866 75.1848 37.8042 73.9926 38.9966C72.8003 40.1889 71.1827 40.8589 69.4965 40.8589H55.4984C53.8124 40.8588 52.1955 40.1887 51.0033 38.9966C49.811 37.8042 49.141 36.1867 49.141 34.5005V20.5005C49.141 18.8143 49.811 17.1969 51.0033 16.0044C52.1955 14.8122 53.8123 14.1422 55.4984 14.1421H69.4965ZM20.5033 19.8589C20.3336 19.859 20.1703 19.9262 20.0502 20.0464C19.93 20.1667 19.8627 20.3303 19.8627 20.5005V34.5005C19.8627 34.6707 19.93 34.8344 20.0502 34.9546C20.1703 35.0747 20.3336 35.142 20.5033 35.1421H34.5013C34.671 35.1421 34.8343 35.0746 34.9545 34.9546C35.0747 34.8344 35.1429 34.6707 35.1429 34.5005V20.5005C35.1429 20.3302 35.0747 20.1667 34.9545 20.0464C34.8342 19.9264 34.6711 19.8589 34.5013 19.8589H20.5033ZM55.4984 19.8589C55.3287 19.859 55.1654 19.9262 55.0453 20.0464C54.9251 20.1667 54.8578 20.3302 54.8578 20.5005V34.5005C54.8578 34.6707 54.9251 34.8343 55.0453 34.9546C55.1654 35.0747 55.3288 35.142 55.4984 35.1421H69.4965C69.6663 35.1421 69.8303 35.0748 69.9506 34.9546C70.0707 34.8344 70.138 34.6707 70.1381 34.5005V20.5005C70.1381 20.3303 70.0707 20.1666 69.9506 20.0464C69.8303 19.9261 69.6663 19.8589 69.4965 19.8589H55.4984ZM27.5033 24.0708C29.3975 24.071 30.933 25.6062 30.933 27.5005V27.5356C30.9329 29.4298 29.3974 30.9651 27.5033 30.9653C25.609 30.9653 24.0737 29.43 24.0736 27.5356V27.5005C24.0736 25.6061 25.6089 24.0708 27.5033 24.0708ZM62.4974 24.0708C64.3918 24.0708 65.9271 25.6061 65.9271 27.5005V27.5356C65.927 29.4299 64.3918 30.9653 62.4974 30.9653C60.6033 30.9651 59.0679 29.4298 59.0677 27.5356V27.5005C59.0677 25.6062 60.6032 24.071 62.4974 24.0708Z" fill="url(#paint1_linear_7557_11568)" fill-opacity="0.85"/>
5 +<path d="M34.5013 49.1421C36.1876 49.1421 37.8051 49.812 38.9974 51.0044C40.1897 52.1969 40.8597 53.8143 40.8597 55.5005V69.5005C40.8597 71.1867 40.1897 72.8041 38.9974 73.9966C37.8051 75.1889 36.1876 75.8589 34.5013 75.8589H20.5033C18.8172 75.8588 17.2004 75.1888 16.0082 73.9966C14.8159 72.8041 14.1459 71.1867 14.1459 69.5005V55.5005C14.1459 53.8143 14.8159 52.1969 16.0082 51.0044C17.2004 49.8122 18.8172 49.1422 20.5033 49.1421H34.5013ZM69.5267 49.1421C71.2128 49.1421 72.8306 49.8122 74.0228 51.0044C75.2149 52.1967 75.885 53.8145 75.8851 55.5005V69.5005C75.885 71.1865 75.215 72.8042 74.0228 73.9966C72.8306 75.1888 71.2129 75.8589 69.5267 75.8589H55.5287C53.8428 75.8587 52.2257 75.1886 51.0336 73.9966C49.8416 72.8043 49.1714 71.1864 49.1713 69.5005V55.5005C49.1714 53.8145 49.8415 52.1967 51.0336 51.0044C52.2257 49.8123 53.8427 49.1423 55.5287 49.1421H69.5267ZM20.5033 54.8589C20.3336 54.859 20.1703 54.9262 20.0502 55.0464C19.93 55.1667 19.8627 55.3303 19.8627 55.5005V69.5005C19.8627 69.6707 19.93 69.8343 20.0502 69.9546C20.1703 70.0747 20.3336 70.142 20.5033 70.1421H34.5013C34.671 70.1421 34.8343 70.0746 34.9545 69.9546C35.0747 69.8343 35.1429 69.6707 35.1429 69.5005V55.5005C35.1429 55.3302 35.0747 55.1667 34.9545 55.0464C34.8342 54.9264 34.6711 54.8589 34.5013 54.8589H20.5033ZM55.5287 54.8589C55.3591 54.8591 55.1956 54.9263 55.0756 55.0464C54.9556 55.1666 54.8882 55.3305 54.8881 55.5005V69.5005C54.8882 69.6704 54.9557 69.8345 55.0756 69.9546C55.1956 70.0745 55.3592 70.1419 55.5287 70.1421H69.5267C69.6963 70.1421 69.8597 70.0745 69.9799 69.9546C70.1 69.8344 70.1682 69.6706 70.1683 69.5005V55.5005C70.1682 55.3305 70.0999 55.1666 69.9799 55.0464C69.8597 54.9266 69.6963 54.8589 69.5267 54.8589H55.5287ZM27.5033 59.0708C29.3975 59.071 30.933 60.6062 30.933 62.5005V62.5356C30.9328 64.4297 29.3973 65.9651 27.5033 65.9653C25.609 65.9653 24.0738 64.4299 24.0736 62.5356V62.5005C24.0736 60.6061 25.6089 59.0708 27.5033 59.0708ZM62.5287 59.0698C64.4226 59.0701 65.958 60.6056 65.9584 62.4995V62.5347C65.9583 64.4289 64.4229 65.9641 62.5287 65.9644C60.6344 65.9642 59.099 64.4289 59.099 62.5347V62.4995C59.0994 60.6055 60.6347 59.07 62.5287 59.0698ZM34.5013 14.1421C36.1876 14.1421 37.8051 14.812 38.9974 16.0044C40.1897 17.1969 40.8597 18.8143 40.8597 20.5005V34.5005C40.8597 36.1866 40.1897 37.8042 38.9974 38.9966C37.8052 40.1889 36.1876 40.8589 34.5013 40.8589H20.5033C18.8173 40.8588 17.2003 40.1888 16.0082 38.9966C14.8159 37.8042 14.1459 36.1866 14.1459 34.5005V20.5005C14.1459 18.8143 14.816 17.1968 16.0082 16.0044C17.2003 14.8122 18.8172 14.1422 20.5033 14.1421H34.5013ZM69.4965 14.1421C71.1827 14.1421 72.8003 14.8121 73.9926 16.0044C75.1848 17.1968 75.8549 18.8143 75.8549 20.5005V34.5005C75.8548 36.1866 75.1848 37.8042 73.9926 38.9966C72.8003 40.1889 71.1827 40.8589 69.4965 40.8589H55.4984C53.8124 40.8588 52.1955 40.1887 51.0033 38.9966C49.811 37.8042 49.141 36.1867 49.141 34.5005V20.5005C49.141 18.8143 49.811 17.1969 51.0033 16.0044C52.1955 14.8122 53.8123 14.1422 55.4984 14.1421H69.4965ZM20.5033 19.8589C20.3336 19.859 20.1703 19.9262 20.0502 20.0464C19.93 20.1667 19.8627 20.3303 19.8627 20.5005V34.5005C19.8627 34.6707 19.93 34.8344 20.0502 34.9546C20.1703 35.0747 20.3336 35.142 20.5033 35.1421H34.5013C34.671 35.1421 34.8343 35.0746 34.9545 34.9546C35.0747 34.8344 35.1429 34.6707 35.1429 34.5005V20.5005C35.1429 20.3302 35.0747 20.1667 34.9545 20.0464C34.8342 19.9264 34.6711 19.8589 34.5013 19.8589H20.5033ZM55.4984 19.8589C55.3287 19.859 55.1654 19.9262 55.0453 20.0464C54.9251 20.1667 54.8578 20.3302 54.8578 20.5005V34.5005C54.8578 34.6707 54.9251 34.8343 55.0453 34.9546C55.1654 35.0747 55.3288 35.142 55.4984 35.1421H69.4965C69.6663 35.1421 69.8303 35.0748 69.9506 34.9546C70.0707 34.8344 70.138 34.6707 70.1381 34.5005V20.5005C70.1381 20.3303 70.0707 20.1666 69.9506 20.0464C69.8303 19.9261 69.6663 19.8589 69.4965 19.8589H55.4984ZM27.5033 24.0708C29.3975 24.071 30.933 25.6062 30.933 27.5005V27.5356C30.9329 29.4298 29.3974 30.9651 27.5033 30.9653C25.609 30.9653 24.0737 29.43 24.0736 27.5356V27.5005C24.0736 25.6061 25.6089 24.0708 27.5033 24.0708ZM62.4974 24.0708C64.3918 24.0708 65.9271 25.6061 65.9271 27.5005V27.5356C65.927 29.4299 64.3918 30.9653 62.4974 30.9653C60.6033 30.9651 59.0679 29.4298 59.0677 27.5356V27.5005C59.0677 25.6062 60.6032 24.071 62.4974 24.0708Z" fill="url(#paint2_linear_7557_11568)" fill-opacity="0.85"/>
6 +<path d="M2.23438 58.8057C3.46802 58.8058 4.46866 59.8064 4.46875 61.04V74.3682C4.46891 80.5371 9.4697 85.538 15.6387 85.5381H28.9629C30.1965 85.5382 31.1972 86.5388 31.1973 87.7725C31.1971 89.0061 30.1965 90.0067 28.9629 90.0068H15.6387C7.00207 90.0068 0.000156824 83.0047 0 74.3682V61.04C9.06793e-05 59.8063 1.00064 58.8057 2.23438 58.8057ZM87.7666 58.8057C89.0002 58.8059 90.0009 59.8064 90.001 61.04V74.3682C90.0008 83.0046 82.9988 90.0066 74.3623 90.0068H61.0381C59.8045 90.0067 58.8039 89.0061 58.8037 87.7725C58.8038 86.5388 59.8045 85.5382 61.0381 85.5381H74.3623C80.5311 85.5379 85.5321 80.537 85.5322 74.3682V61.04C85.5323 59.8064 86.533 58.8058 87.7666 58.8057ZM28.9629 -0.00683594C30.1965 -0.00669637 31.1972 0.993883 31.1973 2.22754C31.1973 3.46127 30.1966 4.46177 28.9629 4.46191H15.6387C9.46963 4.46191 4.46884 9.46282 4.46875 15.6318V28.96C4.46875 30.1937 3.46808 31.1942 2.23438 31.1943C1.00056 31.1943 0 30.1938 0 28.96V15.6318C9.03316e-05 6.99518 7.002 -0.00683594 15.6387 -0.00683594H28.9629ZM74.3623 -0.00683594C82.9988 -0.00662192 90.0009 6.99532 90.001 15.6318V28.96C90.001 30.1936 89.0002 31.1941 87.7666 31.1943C86.5329 31.1942 85.5322 30.1937 85.5322 28.96V15.6318C85.5321 9.46297 80.5312 4.46213 74.3623 4.46191H61.0381C59.8044 4.46176 58.8037 3.46126 58.8037 2.22754C58.8038 0.993904 59.8045 -0.00668338 61.0381 -0.00683594H74.3623Z" fill="#EFEFF8" fill-opacity="0.85"/>
7 +<path d="M2.23438 58.8057C3.46802 58.8058 4.46866 59.8064 4.46875 61.04V74.3682C4.46891 80.5371 9.4697 85.538 15.6387 85.5381H28.9629C30.1965 85.5382 31.1972 86.5388 31.1973 87.7725C31.1971 89.0061 30.1965 90.0067 28.9629 90.0068H15.6387C7.00207 90.0068 0.000156824 83.0047 0 74.3682V61.04C9.06793e-05 59.8063 1.00064 58.8057 2.23438 58.8057ZM87.7666 58.8057C89.0002 58.8059 90.0009 59.8064 90.001 61.04V74.3682C90.0008 83.0046 82.9988 90.0066 74.3623 90.0068H61.0381C59.8045 90.0067 58.8039 89.0061 58.8037 87.7725C58.8038 86.5388 59.8045 85.5382 61.0381 85.5381H74.3623C80.5311 85.5379 85.5321 80.537 85.5322 74.3682V61.04C85.5323 59.8064 86.533 58.8058 87.7666 58.8057ZM28.9629 -0.00683594C30.1965 -0.00669637 31.1972 0.993883 31.1973 2.22754C31.1973 3.46127 30.1966 4.46177 28.9629 4.46191H15.6387C9.46963 4.46191 4.46884 9.46282 4.46875 15.6318V28.96C4.46875 30.1937 3.46808 31.1942 2.23438 31.1943C1.00056 31.1943 0 30.1938 0 28.96V15.6318C9.03316e-05 6.99518 7.002 -0.00683594 15.6387 -0.00683594H28.9629ZM74.3623 -0.00683594C82.9988 -0.00662192 90.0009 6.99532 90.001 15.6318V28.96C90.001 30.1936 89.0002 31.1941 87.7666 31.1943C86.5329 31.1942 85.5322 30.1937 85.5322 28.96V15.6318C85.5321 9.46297 80.5312 4.46213 74.3623 4.46191H61.0381C59.8044 4.46176 58.8037 3.46126 58.8037 2.22754C58.8038 0.993904 59.8045 -0.00668338 61.0381 -0.00683594H74.3623Z" fill="url(#paint3_linear_7557_11568)"/>
8 +<defs>
9 +<linearGradient id="paint0_linear_7557_11568" x1="23.9765" y1="14.1476" x2="62.5586" y2="60.111" gradientUnits="userSpaceOnUse">
10 +<stop stop-color="#4EBEFF"/>
11 +<stop offset="1" stop-color="#2982FF"/>
12 +</linearGradient>
13 +<linearGradient id="paint1_linear_7557_11568" x1="45.0155" y1="14.1421" x2="56.4733" y2="75.8602" gradientUnits="userSpaceOnUse">
14 +<stop stop-color="white"/>
15 +<stop offset="1" stop-color="#EFEFF8"/>
16 +</linearGradient>
17 +<linearGradient id="paint2_linear_7557_11568" x1="45.0155" y1="14.1421" x2="56.4733" y2="75.8602" gradientUnits="userSpaceOnUse">
18 +<stop stop-color="#EFEFF8"/>
19 +<stop offset="1" stop-color="#9A9AD4"/>
20 +</linearGradient>
21 +<linearGradient id="paint3_linear_7557_11568" x1="14.3306" y1="0.00121788" x2="70.6075" y2="67.0106" gradientUnits="userSpaceOnUse">
22 +<stop stop-color="#4EBEFF"/>
23 +<stop offset="1" stop-color="#2982FF"/>
24 +</linearGradient>
25 +</defs>
26 +</svg>
cw_bitcoin/lib/pending_bitcoin_transaction.dart
+5 -3
@@ -2,6 +2,7 @@ import 'dart:typed_data';
2
3 import 'package:bbqrdart/bbqrdart.dart';
4 import 'package:cw_bitcoin/electrum_wallet.dart';
5 +import 'package:flutter/foundation.dart';
6 import 'package:grpc/grpc.dart';
7 import 'package:cw_bitcoin/exceptions.dart';
8 import 'package:bitcoin_base/bitcoin_base.dart';
@@ -228,9 +229,10 @@ class PendingBitcoinTransaction with PendingTransaction {
229 }
230
231 return Future.value({
231 - "PSBT (bcur)": values.join("\n"),
232 - "PSBT (bbqr)": bbqr.join("\n"),
233 - "PSBT (bcur legacy)": valuesLegacy.join("\n"),
232 + "Cupcake bcur": values.join("\n"),
233 + "ColdCard bbqr": bbqr.join("\n"),
234 + if (kDebugMode)
235 + "SeedSigner bcur legacy": valuesLegacy.join("\n"),
236 });
237 }
238 }
lib/src/screens/receive/widgets/qr_image.dart
+1 -1
@@ -12,7 +12,7 @@ class QrImage extends StatelessWidget {
12 this.embeddedImagePath,
13 });
14
15 - final double size;
15 + final double? size;
16 final Color foregroundColor;
17 final Color backgroundColor;
18 final String data;
lib/src/screens/ur/animated_ur_page.dart
+48 -146
@@ -6,26 +6,23 @@ import 'package:cake_wallet/entities/qr_scanner.dart';
6 import 'package:cake_wallet/generated/i18n.dart';
7 import 'package:cake_wallet/monero/monero.dart';
8 import 'package:cake_wallet/src/screens/base_page.dart';
9 -import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
9 +import 'package:cake_wallet/src/screens/ur/widgets/urqr.dart';
10 import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
11 import 'package:cake_wallet/src/widgets/primary_button.dart';
12 -import 'package:cake_wallet/utils/feature_flag.dart';
12 import 'package:cake_wallet/utils/show_pop_up.dart';
13 import 'package:cake_wallet/view_model/animated_ur_model.dart';
14 import 'package:cw_core/wallet_type.dart';
15 import 'package:flutter/material.dart';
17 -import 'package:flutter/services.dart';
18 -
19 -// ur:xmr-txunsigned - unsigned transaction
20 -// should show a scanner afterwards.
16
17 class AnimatedURPage extends BasePage {
18 final bool isAll;
24 - AnimatedURPage(this.animatedURmodel, {
19 + AnimatedURPage(
20 + this.animatedURmodel, {
21 required Map<String, String> this.urQr,
22 this.isAll = false,
23 }) {
28 - if (urQr.keys.first.startsWith("export-outputs") && animatedURmodel.wallet.type == WalletType.monero) {
24 + if (urQr.keys.first.startsWith("export-outputs") &&
25 + animatedURmodel.wallet.type == WalletType.monero) {
26 if (animatedURmodel.wallet.type == WalletType.monero) {
27 urQr = monero!.exportOutputsUR(animatedURmodel.wallet);
28 } else {
@@ -43,7 +40,6 @@ class AnimatedURPage extends BasePage {
40
41 Map<String, String> urQr = {};
42
46 -
43 final AnimatedURModel animatedURmodel;
44
45 String get urQrType {
@@ -61,20 +57,22 @@ class AnimatedURPage extends BasePage {
57 mainAxisSize: MainAxisSize.min,
58 children: [
59 Padding(
64 - padding: const EdgeInsets.only(top: 64.0),
60 + padding: const EdgeInsets.all(32.0),
61 child: URQR(
62 urqr: urQr,
63 + walletType: animatedURmodel.wallet.type,
64 ),
65 ),
69 - if (["ur:xmr-txunsigned", "ur:xmr-output", "ur:psbt", BBQR.header].contains(urQrType)) ...{
70 - SizedBox(height: 32),
66 + if (["ur:xmr-txunsigned", "ur:xmr-output", "ur:psbt", BBQR.header]
67 + .contains(urQrType)) ...{
68 + Spacer(),
69 Padding(
70 padding: const EdgeInsets.symmetric(horizontal: 16.0),
71 child: SizedBox(
72 width: double.maxFinite,
73 child: PrimaryButton(
74 onPressed: () => _continue(context),
77 - text: "Continue",
75 + text: "Scan QR Code",
76 color: Theme.of(context).colorScheme.primary,
77 textColor: Theme.of(context).colorScheme.onPrimary,
78 ),
@@ -87,140 +85,44 @@ class AnimatedURPage extends BasePage {
85
86 Future<void> _continue(BuildContext context) async {
87 try {
90 - switch (urQrType) {
91 - case "ur:xmr-txunsigned": // ur:xmr-txsigned
92 - final ur = await presentQRScanner(context);
93 - if (ur == null) return;
94 - final result = await monero!.commitTransactionUR(animatedURmodel.wallet, ur);
95 - if (result) {
96 - Navigator.of(context).pop(true);
97 - }
98 - break;
99 - case "ur:xmr-output": // xmr-keyimage
100 - final ur = await presentQRScanner(context);
101 - if (ur == null) return;
102 - final result = await monero!.importKeyImagesUR(animatedURmodel.wallet, ur);
103 - if (result) {
88 + switch (urQrType) {
89 + case "ur:xmr-txunsigned": // ur:xmr-txsigned
90 + final ur = await presentQRScanner(context);
91 + if (ur == null) return;
92 + final result =
93 + await monero!.commitTransactionUR(animatedURmodel.wallet, ur);
94 + if (result) {
95 + Navigator.of(context).pop(true);
96 + }
97 + break;
98 + case "ur:xmr-output": // xmr-keyimage
99 + final ur = await presentQRScanner(context);
100 + if (ur == null) return;
101 + final result =
102 + await monero!.importKeyImagesUR(animatedURmodel.wallet, ur);
103 + if (result) {
104 + Navigator.of(context).pop(true);
105 + }
106 + break;
107 + case "ur:psbt": // psbt
108 + final ur = await presentQRScanner(context);
109 + if (ur == null) return;
110 + await bitcoin!
111 + .commitPsbtUR(animatedURmodel.wallet, ur.trim().split("\n"));
112 Navigator.of(context).pop(true);
105 - }
106 - break;
107 - case "ur:psbt": // psbt
108 - final ur = await presentQRScanner(context);
109 - if (ur == null) return;
110 - await bitcoin!.commitPsbtUR(animatedURmodel.wallet, ur.trim().split("\n"));
111 - Navigator.of(context).pop(true);
112 - default:
113 - throw UnimplementedError("unable to handle UR: ${urQrType}");
114 - }
115 - } catch (e) {
116 - await showPopUp<void>(
117 - context: context,
118 - builder: (BuildContext context) {
119 - return AlertWithOneAction(
120 - alertTitle: S.of(context).error,
121 - alertContent: e.toString(),
122 - buttonText: S.of(context).ok,
123 - buttonAction: () => Navigator.pop(context, true));
124 - });
113 + default:
114 + throw UnimplementedError("unable to handle UR: ${urQrType}");
115 + }
116 + } catch (e) {
117 + await showPopUp<void>(
118 + context: context,
119 + builder: (BuildContext context) {
120 + return AlertWithOneAction(
121 + alertTitle: S.of(context).error,
122 + alertContent: e.toString(),
123 + buttonText: S.of(context).ok,
124 + buttonAction: () => Navigator.pop(context, true));
125 + });
126 }
127 }
127 -}
128 -
129 -class URQR extends StatefulWidget {
130 - URQR({super.key, required this.urqr});
131 -
132 - final Map<String, String> urqr;
133 -
134 - @override
135 - // ignore: library_private_types_in_public_api
136 - _URQRState createState() => _URQRState();
137 -}
138 -
139 -const urFrameTime = 1000 ~/ 5;
140 -
141 -class _URQRState extends State<URQR> {
142 - Timer? t;
143 - int frame = 0;
144 - @override
145 - void initState() {
146 - super.initState();
147 - setState(() {
148 - t = Timer.periodic(const Duration(milliseconds: urFrameTime), (timer) {
149 - _nextFrame();
150 - });
151 - });
152 - }
153 -
154 - void _nextFrame() {
155 - setState(() {
156 - frame++;
157 - });
158 - }
159 -
160 - @override
161 - void dispose() {
162 - t?.cancel();
163 - super.dispose();
164 - }
165 -
166 - late String selected = (widget.urqr.isEmpty) ? "unknown" : widget.urqr.keys.first;
167 - int selectedInt = 0;
168 -
169 - List<String> get frames {
170 - return widget.urqr[selected]?.split("\n") ?? [];
171 - }
172 -
173 - late String nextLabel = widget.urqr.keys.toList()[(selectedInt + 1) % widget.urqr.length] ;
174 -
175 - void next() {
176 - final keys = widget.urqr.keys.toList();
177 - setState(() {
178 - selectedInt++;
179 - nextLabel = keys[(selectedInt + 1) % keys.length];
180 - selected = keys[(selectedInt) % keys.length];
181 - });
182 - }
183 -
184 - @override
185 - Widget build(BuildContext context) {
186 - return Column(
187 - mainAxisSize: MainAxisSize.min,
188 - mainAxisAlignment: MainAxisAlignment.center,
189 - children: [
190 - Center(
191 - child: QrImage(
192 - data: frames[frame % frames.length],
193 - version: -1,
194 - size: 400,
195 - ),
196 - ),
197 - if (widget.urqr.values.length > 1)
198 - SizedBox(
199 - width: double.maxFinite,
200 - child: Padding(
201 - padding: const EdgeInsets.symmetric(horizontal: 16.0),
202 - child: SizedBox(
203 - width: double.maxFinite,
204 - child: PrimaryButton(
205 - onPressed: next,
206 - text: nextLabel,
207 - color: Theme.of(context).colorScheme.primary,
208 - textColor: Theme.of(context).colorScheme.onPrimary,
209 - ),
210 - ),
211 - ),
212 - ),
213 - if (FeatureFlag.hasDevOptions) ...{
214 - TextButton(
215 - onPressed: () {
216 - Clipboard.setData(ClipboardData(text: """Current frame (${frame % frames.length}): ${frames[frame % frames.length]},
217 -All frames:
218 - - ${frames.join("\n - ")}"""));
219 - },
220 - child: Text("[dev] copy debug info"),
221 - ),
222 - }
223 - ],
224 - );
225 - }
128 }
\ No newline at end of file
lib/src/screens/ur/widgets/qr_format_info_bottom_sheet.dart new
+76
@@ -0,0 +1,76 @@
1 +import 'dart:ui';
2 +
3 +import 'package:cake_wallet/generated/i18n.dart';
4 +import 'package:flutter/material.dart';
5 +import 'package:flutter_svg/svg.dart';
6 +
7 +class QRFormatInfoBottomSheet extends StatelessWidget {
8 + @override
9 + Widget build(BuildContext context) {
10 + return BackdropFilter(
11 + filter: ImageFilter.blur(sigmaX: 3, sigmaY: 3),
12 + child: Container(
13 + decoration: BoxDecoration(
14 + color: Theme.of(context).colorScheme.surface,
15 + borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
16 + ),
17 + child: SafeArea(
18 + child: Padding(
19 + padding: EdgeInsets.all(24),
20 + child: Column(
21 + mainAxisSize: MainAxisSize.min,
22 + children: [
23 + Container(
24 + width: 40,
25 + height: 4,
26 + decoration: BoxDecoration(
27 + color: Theme.of(context)
28 + .colorScheme
29 + .onSurface
30 + .withOpacity(0.3),
31 + borderRadius: BorderRadius.circular(2),
32 + ),
33 + ),
34 + SizedBox(height: 24),
35 + Container(
36 + width: 80,
37 + height: 80,
38 + child: SvgPicture.asset('assets/images/urqr_icon.svg'),
39 + ),
40 + SizedBox(height: 24),
41 + Text(
42 + S.of(context).qr_code_format,
43 + style: TextStyle(
44 + fontSize: 20,
45 + fontWeight: FontWeight.bold,
46 + color: Theme.of(context).colorScheme.onSurface,
47 + ),
48 + ),
49 + SizedBox(height: 16),
50 + Text(
51 + S.of(context).qr_code_format_note,
52 + textAlign: TextAlign.center,
53 + style: TextStyle(
54 + fontSize: 16,
55 + color: Theme.of(context).colorScheme.onSurface,
56 + ),
57 + ),
58 + SizedBox(height: 20),
59 + Text(
60 + S.of(context).qr_code_format_body,
61 + textAlign: TextAlign.center,
62 + style: TextStyle(
63 + fontSize: 14,
64 + color: Theme.of(context).colorScheme.onSurface,
65 + height: 1.4,
66 + ),
67 + ),
68 + SizedBox(height: 24),
69 + ],
70 + ),
71 + ),
72 + ),
73 + ),
74 + );
75 + }
76 +}
lib/src/screens/ur/widgets/qr_selection_dialog.dart new
+163
@@ -0,0 +1,163 @@
1 +// ignore: must_be_immutable
2 +import 'package:cake_wallet/generated/i18n.dart';
3 +import 'package:cake_wallet/src/widgets/base_alert_dialog.dart';
4 +import 'package:flutter/material.dart';
5 +import 'package:flutter/widgets.dart';
6 +import 'package:flutter_svg/svg.dart';
7 +
8 +class QRFormatSelectionDialog extends BaseAlertDialog {
9 + final List<String> formats;
10 + final int currentIndex;
11 + final Function(int) onFormatSelected;
12 +
13 + QRFormatSelectionDialog({
14 + required this.formats,
15 + required this.currentIndex,
16 + required this.onFormatSelected,
17 + });
18 +
19 + @override
20 + String get titleText => S.current.choose_qr_code_format;
21 +
22 + @override
23 + Widget content(BuildContext context) {
24 + return SingleChildScrollView(
25 + child: Column(
26 + mainAxisSize: MainAxisSize.min,
27 + children: [
28 + Text(
29 + S.current.choose_qr_code_format_note,
30 + textAlign: TextAlign.center,
31 + style: Theme.of(context).textTheme.bodyMedium?.copyWith(
32 + fontSize: 16,
33 + decoration: TextDecoration.none,
34 + ),
35 + ),
36 + SizedBox(height: 16),
37 + ...formats.asMap().entries.map((entry) {
38 + final index = entry.key;
39 + final format = entry.value;
40 + final isSelected = index == currentIndex;
41 +
42 + return Container(
43 + margin: EdgeInsets.only(bottom: 8),
44 + decoration: BoxDecoration(
45 + color: isSelected
46 + ? Theme.of(context).colorScheme.primaryContainer
47 + : Theme.of(context).colorScheme.surfaceContainer,
48 + borderRadius: BorderRadius.circular(12),
49 + border: isSelected
50 + ? Border.all(
51 + color: Theme.of(context).colorScheme.primary,
52 + width: 2,
53 + )
54 + : null,
55 + ),
56 + child: Material(
57 + color: Colors.transparent,
58 + child: InkWell(
59 + borderRadius: BorderRadius.circular(12),
60 + onTap: () => onFormatSelected(index),
61 + child: Padding(
62 + padding: EdgeInsets.all(16),
63 + child: Row(
64 + children: [
65 + if (format.startsWith('Cupcake'))
66 + Container(
67 + width: 32,
68 + height: 32,
69 + decoration: BoxDecoration(
70 + borderRadius: BorderRadius.circular(6),
71 + ),
72 + child: ClipRRect(
73 + borderRadius: BorderRadius.circular(6),
74 + child: SvgPicture.asset(
75 + 'assets/images/cupcake.svg',
76 + width: 32,
77 + height: 32,
78 + fit: BoxFit.cover,
79 + ),
80 + ),
81 + ),
82 + SizedBox(width: 12),
83 + Expanded(
84 + child: Column(
85 + crossAxisAlignment: CrossAxisAlignment.start,
86 + children: [
87 + Text(
88 + _getFormatName(format),
89 + style: TextStyle(
90 + fontSize: 14,
91 + fontWeight: FontWeight.w600,
92 + color: isSelected
93 + ? Theme.of(context)
94 + .colorScheme
95 + .onPrimaryContainer
96 + : Theme.of(context).colorScheme.onSurface,
97 + ),
98 + ),
99 + Text(
100 + _getFormatSubtitle(format),
101 + style: TextStyle(
102 + fontSize: 12,
103 + color: isSelected
104 + ? Theme.of(context)
105 + .colorScheme
106 + .onPrimaryContainer
107 + .withOpacity(0.6)
108 + : Theme.of(context)
109 + .colorScheme
110 + .onSurface
111 + .withOpacity(0.6),
112 + ),
113 + ),
114 + ],
115 + ),
116 + ),
117 + if (isSelected) ...[
118 + Icon(
119 + Icons.check_circle,
120 + color: Theme.of(context).colorScheme.primary,
121 + size: 20,
122 + ),
123 + ],
124 + ],
125 + ),
126 + ),
127 + ),
128 + ),
129 + );
130 + }).toList(),
131 + ],
132 + ),
133 + );
134 + }
135 +
136 + @override
137 + String get leftActionButtonText => "";
138 +
139 + @override
140 + String get rightActionButtonText => "";
141 +
142 + @override
143 + VoidCallback get actionLeft => () {};
144 +
145 + @override
146 + VoidCallback get actionRight => () {};
147 +
148 + @override
149 + bool get isBottomDividerExists => false;
150 +
151 + @override
152 + Widget actionButtons(BuildContext context) {
153 + return SizedBox.shrink(); // get rid fo cancel button
154 + }
155 +
156 + String _getFormatName(String format) {
157 + return format.split(' ')[0];
158 + }
159 +
160 + String _getFormatSubtitle(String format) {
161 + return format.substring(format.indexOf(' ') + 1);
162 + }
163 +}
lib/src/screens/ur/widgets/urqr.dart new
+293
@@ -0,0 +1,293 @@
1 +
2 +import 'dart:async';
3 +
4 +import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
5 +import 'package:cake_wallet/src/screens/ur/widgets/qr_format_info_bottom_sheet.dart';
6 +import 'package:cake_wallet/src/screens/ur/widgets/qr_selection_dialog.dart';
7 +import 'package:cake_wallet/src/widgets/primary_button.dart';
8 +import 'package:cake_wallet/utils/feature_flag.dart';
9 +import 'package:cake_wallet/utils/show_pop_up.dart';
10 +import 'package:cw_core/wallet_type.dart';
11 +import 'package:flutter/material.dart';
12 +import 'package:flutter/services.dart';
13 +import 'package:flutter_svg/svg.dart';
14 +
15 +class URQR extends StatefulWidget {
16 + URQR({super.key, required this.urqr, required this.walletType});
17 +
18 + final Map<String, String> urqr;
19 + final WalletType walletType;
20 + @override
21 + // ignore: library_private_types_in_public_api
22 + _URQRState createState() => _URQRState();
23 +}
24 +
25 +const urFrameTime = 1000 ~/ 5;
26 +
27 +class _URQRState extends State<URQR> {
28 + Timer? t;
29 + int frame = 0;
30 + @override
31 + void initState() {
32 + super.initState();
33 + setState(() {
34 + t = Timer.periodic(const Duration(milliseconds: urFrameTime), (timer) {
35 + _nextFrame();
36 + });
37 + });
38 + }
39 +
40 + void _nextFrame() {
41 + setState(() {
42 + frame++;
43 + });
44 + }
45 +
46 + @override
47 + void dispose() {
48 + t?.cancel();
49 + super.dispose();
50 + }
51 +
52 + late String selected =
53 + (widget.urqr.isEmpty) ? "unknown" : widget.urqr.keys.first;
54 + int selectedInt = 0;
55 +
56 + List<String> get frames {
57 + return widget.urqr[selected]?.split("\n") ?? [];
58 + }
59 +
60 + late String nextLabel =
61 + widget.urqr.keys.toList()[(selectedInt + 1) % widget.urqr.length];
62 +
63 + void next() {
64 + final keys = widget.urqr.keys.toList();
65 + setState(() {
66 + selectedInt++;
67 + nextLabel = keys[(selectedInt + 1) % keys.length];
68 + selected = keys[(selectedInt) % keys.length];
69 + });
70 + }
71 +
72 + @override
73 + Widget build(BuildContext context) {
74 + return Column(
75 + mainAxisSize: MainAxisSize.min,
76 + mainAxisAlignment: MainAxisAlignment.center,
77 + children: [
78 + Center(
79 + child: Padding(
80 + padding: const EdgeInsets.all(24.0),
81 + child: Container(
82 + child: QrImage(
83 + data: frames[frame % frames.length],
84 + version: -1,
85 + size: null,
86 + ),
87 + ),
88 + ),
89 + ),
90 + if (widget.urqr.values.length > 1)
91 + widget.walletType == WalletType.monero
92 + ? _legacySwitch(context)
93 + : _newSwitch(context),
94 + if (FeatureFlag.hasDevOptions) ...{
95 + TextButton(
96 + onPressed: () {
97 + Clipboard.setData(ClipboardData(
98 + text:
99 + """Current frame (${frame % frames.length}): ${frames[frame % frames.length]},
100 +All frames:
101 + - ${frames.join("\n - ")}"""));
102 + },
103 + child: Text("[dev] copy debug info"),
104 + ),
105 + }
106 + ],
107 + );
108 + }
109 +
110 + Widget _legacySwitch(BuildContext context) {
111 + return SizedBox(
112 + width: double.maxFinite,
113 + child: Padding(
114 + padding: const EdgeInsets.symmetric(horizontal: 16.0),
115 + child: SizedBox(
116 + width: double.maxFinite,
117 + child: PrimaryButton(
118 + onPressed: next,
119 + text: nextLabel,
120 + color: Theme.of(context).colorScheme.primary,
121 + textColor: Theme.of(context).colorScheme.onPrimary,
122 + ),
123 + ),
124 + ),
125 + );
126 + }
127 +
128 + Widget _newSwitch(BuildContext context) {
129 + return Column(
130 + children: [
131 + SizedBox(height: 32),
132 + Row(
133 + mainAxisAlignment: MainAxisAlignment.center,
134 + children: [
135 + Icon(Icons.qr_code,
136 + color: Theme.of(context).colorScheme.primary, size: 24),
137 + SizedBox(width: 4),
138 + Text("QR Code Format",
139 + style: TextStyle(
140 + fontWeight: FontWeight.bold,
141 + fontSize: 16,
142 + color: Theme.of(context).colorScheme.onSurface,
143 + )),
144 + ],
145 + ),
146 + SizedBox(height: 16),
147 + Container(
148 + margin: EdgeInsets.symmetric(horizontal: 16),
149 + decoration: BoxDecoration(
150 + color: Theme.of(context).colorScheme.surfaceContainer,
151 + borderRadius: BorderRadius.circular(12),
152 + ),
153 + child: Material(
154 + color: Colors.transparent,
155 + child: InkWell(
156 + borderRadius: BorderRadius.circular(12),
157 + onTap: () => _showFormatSelectionDialog(context),
158 + child: Padding(
159 + padding: EdgeInsets.all(16),
160 + child: Row(
161 + children: [
162 + if (_getCurrentFormatName().startsWith('Cupcake'))
163 + Container(
164 + width: 40,
165 + height: 40,
166 + decoration: BoxDecoration(
167 + borderRadius: BorderRadius.circular(8),
168 + ),
169 + child: ClipRRect(
170 + borderRadius: BorderRadius.circular(8),
171 + child: SvgPicture.asset(
172 + 'assets/images/cupcake.svg',
173 + width: 40,
174 + height: 40,
175 + fit: BoxFit.cover,
176 + ),
177 + ),
178 + ),
179 + SizedBox(width: 16),
180 + Expanded(
181 + child: Column(
182 + crossAxisAlignment: CrossAxisAlignment.start,
183 + children: [
184 + Text(
185 + _getCurrentFormatName(),
186 + style: TextStyle(
187 + fontSize: 16,
188 + fontWeight: FontWeight.w600,
189 + color: Theme.of(context).colorScheme.onSurface,
190 + ),
191 + ),
192 + Text(
193 + _getCurrentFormatSubtitle(),
194 + style: TextStyle(
195 + fontSize: 14,
196 + color: Theme.of(context)
197 + .colorScheme
198 + .onSurface
199 + .withOpacity(0.6),
200 + ),
201 + ),
202 + ],
203 + ),
204 + ),
205 + Icon(
206 + Icons.chevron_right,
207 + color: Theme.of(context)
208 + .colorScheme
209 + .onSurface
210 + .withOpacity(0.4),
211 + size: 24,
212 + ),
213 + ],
214 + ),
215 + ),
216 + ),
217 + ),
218 + ),
219 + SizedBox(height: 16),
220 + GestureDetector(
221 + onTap: () => _showInfoDialog(context),
222 + child: Row(
223 + mainAxisAlignment: MainAxisAlignment.center,
224 + children: [
225 + Text(
226 + "What's this for?",
227 + style: TextStyle(
228 + fontSize: 14,
229 + color:
230 + Theme.of(context).colorScheme.onSurface.withOpacity(0.6),
231 + ),
232 + ),
233 + SizedBox(width: 4),
234 + Icon(
235 + Icons.info_outline,
236 + size: 16,
237 + color: Theme.of(context).colorScheme.onSurface.withOpacity(0.6),
238 + ),
239 + ],
240 + ),
241 + ),
242 + SizedBox(height: 32),
243 + ],
244 + );
245 + }
246 +
247 + String _getCurrentFormatName() {
248 + if (widget.urqr.isEmpty) return "Unknown";
249 + final currentKey =
250 + widget.urqr.keys.elementAt(selectedInt % widget.urqr.length);
251 + return currentKey.split(' ')[0];
252 + }
253 +
254 + String _getCurrentFormatSubtitle() {
255 + if (widget.urqr.isEmpty) return "";
256 + final currentKey =
257 + widget.urqr.keys.elementAt(selectedInt % widget.urqr.length);
258 + return currentKey.substring(currentKey.indexOf(' ') + 1);
259 + }
260 +
261 + Future<void> _showFormatSelectionDialog(BuildContext context) async {
262 + if (widget.urqr.length <= 1) return;
263 +
264 + final keys = widget.urqr.keys.toList();
265 +
266 + await showPopUp<void>(
267 + context: context,
268 + builder: (BuildContext context) {
269 + return QRFormatSelectionDialog(
270 + formats: keys,
271 + currentIndex: selectedInt,
272 + onFormatSelected: (index) {
273 + Navigator.pop(context);
274 + setState(() {
275 + selectedInt = index;
276 + selected = keys[index];
277 + nextLabel = keys[(index + 1) % keys.length];
278 + });
279 + },
280 + );
281 + });
282 + }
283 +
284 + Future<void> _showInfoDialog(BuildContext context) async {
285 + await showModalBottomSheet(
286 + context: context,
287 + isScrollControlled: true,
288 + backgroundColor: Colors.transparent,
289 + builder: (BuildContext context) {
290 + return QRFormatInfoBottomSheet();
291 + });
292 + }
293 +}
res/values/strings_ar.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "اختر اشتقاق المحفظة",
158 "choose_from_available_options": "اختر من بين الخيارات المتاحة:",
159 "choose_one": "اختر واحدة",
160 + "choose_qr_code_format": "اختر تنسيق رمز الاستجابة السريعة",
161 + "choose_qr_code_format_note": "اختر التنسيق المناسب لمحفظة الأجهزة الخاصة بك:",
162 "choose_relay": "ﻡﺍﺪﺨﺘﺳﻼﻟ ﻊﺑﺎﺘﺘﻟﺍ ﺭﺎﻴﺘﺧﺍ ءﺎﺟﺮﻟﺍ",
163 "choose_wallet_currency": "الرجاء اختيار عملة المحفظة:",
164 "choose_wallet_group": "اختر مجموعة المحفظة",
@@ -642,6 +644,9 @@
644 "public_key": "مفتاح عمومي",
645 "purchase_gift_card": "شراء بطاقة هدايا",
646 "purple_dark_theme": "موضوع الظلام الأرجواني",
647 + "qr_code_format": "تنسيق رمز الاستجابة السريعة",
648 + "qr_code_format_body": "BCUR (موارد موحدة blockchain Commons) هو معيار الصناعة ، والأكثر توافقًا على نطاق واسع مع محافظ أجهزة Bitcoin ، ويجب اختياره من قبل معظم المستخدمين. BBQR (Better Bitcoin QR) هو تنسيق فريد تستخدمه فقط من قبل محافظ أجهزة ColdCard ، بدءًا من طرازها Q.",
649 + "qr_code_format_note": "يتم استخدام تنسيقات رمز الاستجابة السريعة المختلفة بواسطة محافظ أجهزة مختلفة في مساحة البيتكوين",
650 "qr_fullscreen": "انقر لفتح ال QR بملء الشاشة",
651 "qr_instruction": "استخدم هذا العنوان لتلقي أي رمز أو تحصيله",
652 "qr_payment_amount": "يحتوي هذا ال QR على مبلغ الدفع. هل تريد تغير المبلغ فوق القيمة الحالية؟",
res/values/strings_bg.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Изберете производно на портфейла",
158 "choose_from_available_options": "Изберете от следните опции:",
159 "choose_one": "Изберете едно",
160 + "choose_qr_code_format": "Изберете формат на QR код",
161 + "choose_qr_code_format_note": "Изберете правилния формат за вашия хардуерен портфейл:",
162 "choose_relay": "Моля, изберете реле, което да използвате",
163 "choose_wallet_currency": "Изберете валута за портфейла:",
164 "choose_wallet_group": "Изберете Group Wallet",
@@ -642,6 +644,9 @@
644 "public_key": "Публичен ключ",
645 "purchase_gift_card": "Купуване на Gift Card",
646 "purple_dark_theme": "Лилава тъмна тема",
647 + "qr_code_format": "QR формат на кода",
648 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) е индустриалният стандарт и най -широко съвместим с хардуерните портфейли на биткойн и трябва да бъде избран от повечето потребители. BBQR (Better Bitcoin QR) е уникален формат, използван само от хардуерни портфейли ColdCard, започвайки от техния модел Q.",
649 + "qr_code_format_note": "Различните формати на QR код се използват от различни хардуерни портфейли в пространството на биткойн",
650 "qr_fullscreen": "Натиснете, за да отворите QR кода на цял екран",
651 "qr_instruction": "Използвайте този адрес, за да получавате някакви маркери или колекционерски",
652 "qr_payment_amount": "Този QR код съдържа сума за плащане. Искате ли да промените стойността?",
res/values/strings_cs.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Vyberte derivaci peněženky",
158 "choose_from_available_options": "Zvolte si z dostupných možností:",
159 "choose_one": "Zvolte si",
160 + "choose_qr_code_format": "Vyberte formát QR kódu",
161 + "choose_qr_code_format_note": "Vyberte správný formát pro hardwarovou peněženku:",
162 "choose_relay": "Vyberte relé, které chcete použít",
163 "choose_wallet_currency": "Prosím zvolte si měnu pro peněženku:",
164 "choose_wallet_group": "Vyberte skupinu peněženky",
@@ -642,6 +644,9 @@
644 "public_key": "Veřejný klíč",
645 "purchase_gift_card": "Objednat dárkovou kartu",
646 "purple_dark_theme": "Fialové temné téma",
647 + "qr_code_format": "Formát kódu QR",
648 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) je průmyslový standard a nejvíce kompatibilní s hardwarovými peněženkami bitcoinu a většina uživatelů by měla být vybrána. BBQR (Better Bitcoin QR) je jedinečný formát používaný pouze hardwarovými peněženkami ColdCard, počínaje jejich modelem Q.",
649 + "qr_code_format_note": "Různé formáty QR kódu používají různé hardwarové peněženky v bitcoinovém prostoru",
650 "qr_fullscreen": "Poklepáním otevřete QR kód na celé obrazovce",
651 "qr_instruction": "Tuto adresu použijte k získání jakéhokoli tokenu nebo sběratelského sběratele",
652 "qr_payment_amount": "Tento QR kód obsahuje i částku. Chcete přepsat současnou hodnotu?",
res/values/strings_de.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Wählen Sie Wallet-Ableitung",
158 "choose_from_available_options": "Wähle aus verfügbaren Optionen:",
159 "choose_one": "Wähle ein",
160 + "choose_qr_code_format": "Wählen Sie das QR -Code -Format",
161 + "choose_qr_code_format_note": "Wählen Sie das richtige Format für Ihre Hardware -Brieftasche:",
162 "choose_relay": "Bitte wählen Sie ein zu verwendendes Relais aus",
163 "choose_wallet_currency": "Bitte wählen Sie die Währung der Wallet:",
164 "choose_wallet_group": "Wählen Sie Walletgruppe",
@@ -643,6 +645,9 @@
645 "public_key": "Öffentlicher Schlüssel",
646 "purchase_gift_card": "Geschenkkarte kaufen",
647 "purple_dark_theme": "Lila dunkle Thema",
648 + "qr_code_format": "QR -Codeformat",
649 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) ist der Branchenstandard und am weitesten verbreitet mit Bitcoin -Hardware -Geldbörsen und sollte von den meisten Benutzern ausgewählt werden. BBQR (Better Bitcoin QR) ist ein einzigartiges Format, das nur von Coldcard -Hardware -Geldbörsen verwendet wird, beginnend mit ihrem Modell Q.",
650 + "qr_code_format_note": "Unterschiedliche QR -Codeformate werden von verschiedenen Hardware -Geldbörsen im Bitcoin -Bereich verwendet",
651 "qr_fullscreen": "Tippen Sie hier, um den QR-Code im Vollbildmodus zu öffnen",
652 "qr_instruction": "Verwenden Sie diese Adresse, um ein Token oder ein Sammlerstück zu erhalten",
653 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_en.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Choose Wallet Derivation",
158 "choose_from_available_options": "Choose from the available options:",
159 "choose_one": "Choose one",
160 + "choose_qr_code_format": "Choose QR Code Format",
161 + "choose_qr_code_format_note": "Choose the right format for your hardware wallet:",
162 "choose_relay": "Please choose a relay to use",
163 "choose_wallet_currency": "Please choose wallet currency:",
164 "choose_wallet_group": "Choose Wallet Group",
@@ -643,6 +645,9 @@
645 "public_key": "Public key",
646 "purchase_gift_card": "Purchase Gift Card",
647 "purple_dark_theme": "Purple Dark Theme",
648 + "qr_code_format": "QR Code Format",
649 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) is the industry standard, and most widely compatible with Bitcoin hardware wallets, and should be selected by most users. BBQR (Better Bitcoin QR) is a unique format used only by COLDCARD hardware wallets, starting with their model Q.",
650 + "qr_code_format_note": "Different QR code formats are used by different hardware wallets in the Bitcoin space",
651 "qr_fullscreen": "Tap to open full screen QR code",
652 "qr_instruction": "Use this address to receive any token or collectible on",
653 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_es.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Elige la derivación de la billetera",
158 "choose_from_available_options": "Elige entre las opciones disponibles:",
159 "choose_one": "Elige uno",
160 + "choose_qr_code_format": "Elija formato de código QR",
161 + "choose_qr_code_format_note": "Elija el formato correcto para su billetera de hardware:",
162 "choose_relay": "Por favor elige un relay para usar",
163 "choose_wallet_currency": "Por favor, elige la moneda de la billetera:",
164 "choose_wallet_group": "Elige el grupo de billeteras",
@@ -643,6 +645,9 @@
645 "public_key": "Clave pública",
646 "purchase_gift_card": "Comprar tarjeta de regalo",
647 "purple_dark_theme": "Tema morado oscuro",
648 + "qr_code_format": "Formato de código QR",
649 + "qr_code_format_body": "BCUR (Recursos uniformes de Blockchain Commons) es el estándar de la industria, y la mayoría de los usuarios debe seleccionar las más compatibles con las billeteras de hardware de Bitcoin, y debe ser seleccionada por la mayoría de los usuarios. BBQR (Better Bitcoin QR) es un formato único utilizado solo por las billeteras de hardware ColdCard, comenzando con su modelo Q.",
650 + "qr_code_format_note": "Los diferentes formatos de código QR son utilizados por diferentes billeteras de hardware en el espacio de Bitcoin",
651 "qr_fullscreen": "Toque para abrir el código QR en pantalla completa",
652 "qr_instruction": "Use esta dirección para recibir cualquier token o coleccionable en",
653 "qr_payment_amount": "Este código QR contiene un monto de pago. ¿Quieres sobreescribirlo?",
res/values/strings_fr.arb
+6 -1
@@ -157,6 +157,8 @@
157 "choose_derivation": "Choisir la dérivation du portefeuille",
158 "choose_from_available_options": "Choisissez parmi les options disponibles:",
159 "choose_one": "Choisissez-en un",
160 + "choose_qr_code_format": "Choisissez le format de code QR",
161 + "choose_qr_code_format_note": "Choisissez le bon format pour votre portefeuille matériel:",
162 "choose_relay": "Veuillez choisir un relais à utiliser",
163 "choose_wallet_currency": "Merci de choisir la devise du portefeuille (wallet):",
164 "choose_wallet_group": "Choisissez un groupe de portefeuille",
@@ -642,6 +644,9 @@
644 "public_key": "Clef publique",
645 "purchase_gift_card": "Acheter une carte-cadeau",
646 "purple_dark_theme": "THÈME PURPLE DARK",
647 + "qr_code_format": "Format de code QR",
648 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) est la norme de l'industrie et le plus compatible avec les portefeuilles matériels Bitcoin, et doit être sélectionné par la plupart des utilisateurs. BBQR (Better Bitcoin QR) est un format unique utilisé uniquement par les portefeuilles matériels ColdCard, en commençant par leur modèle Q.",
649 + "qr_code_format_note": "Différents formats de code QR sont utilisés par différents portefeuilles matériels dans l'espace Bitcoin",
650 "qr_fullscreen": "Appuyez pour ouvrir le QR code en mode plein écran",
651 "qr_instruction": "Utilisez cette adresse pour recevoir un jeton ou une collection sur",
652 "qr_payment_amount": "Ce QR code contient un montant de paiement. Voulez-vous remplacer la valeur actuelle ?",
@@ -1141,4 +1146,4 @@
1146 "youCanGoBackToYourDapp": "Vous pouvez retourner à votre Dapp maintenant",
1147 "your": "Ton",
1148 "yy": "AA"
1144 -}
1149 +}
\ No newline at end of file
res/values/strings_ha.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Zaɓi walatawa",
158 "choose_from_available_options": "Zaɓi daga zaɓuɓɓukan da ake da su:",
159 "choose_one": "Zaɓi ɗaya",
160 + "choose_qr_code_format": "Zabi Tsarin QR",
161 + "choose_qr_code_format_note": "Zabi hanyar da ya dace don kayan aikin kayan aiki:",
162 "choose_relay": "Da fatan za a zaɓi gudun ba da sanda don amfani",
163 "choose_wallet_currency": "Da fatan za a zaɓi kuɗin walat:",
164 "choose_wallet_group": "Zabi kungiyar walat",
@@ -644,6 +646,9 @@
646 "public_key": "Maɓallin jama'a",
647 "purchase_gift_card": "Katin Kyautar Sayi",
648 "purple_dark_theme": "M duhu jigo",
649 + "qr_code_format": "Tsarin QR",
650 + "qr_code_format_body": "BCUR (BICELCAIN Communs unders) shine ingantaccen masana'antu, kuma mafi yawan jituwa tare da kayan masarufi na Bitcoin, kuma ya kamata a zaɓi yawancin masu amfani. BBQR (mafi kyau bitcoin QR) Tsarin na musamman ne da sanyi da aka yi amfani da shi kawai da kayan aikin kayan kwalliya, farawa da samfurinsu Q.",
651 + "qr_code_format_note": "Ana amfani da ƙa'idodin QR daban-daban ta hanyar kayan aikin kayan kwalliya daban-daban a cikin sararin bitcoin",
652 "qr_fullscreen": "Matsa don buɗe lambar QR na cikakken allo",
653 "qr_instruction": "Yi amfani da wannan adireshin don karɓar kowane alama ko tattarawa",
654 "qr_payment_amount": "Wannan QR code yana da adadin kuɗi. Kuna so ku overwrite wannan adadi?",
res/values/strings_hi.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "वॉलेट व्युत्पत्ति चुनें",
158 "choose_from_available_options": "उपलब्ध विकल्पों में से चुनें:",
159 "choose_one": "एक का चयन",
160 + "choose_qr_code_format": "QR कोड प्रारूप चुनें",
161 + "choose_qr_code_format_note": "अपने हार्डवेयर वॉलेट के लिए सही प्रारूप चुनें:",
162 "choose_relay": "कृपया उपयोग करने के लिए एक रिले चुनें",
163 "choose_wallet_currency": "कृपया बटुआ मुद्रा चुनें:",
164 "choose_wallet_group": "वॉलेट ग्रुप चुनें",
@@ -643,6 +645,9 @@
645 "public_key": "सार्वजनिक कुंजी",
646 "purchase_gift_card": "गिफ्ट कार्ड खरीदें",
647 "purple_dark_theme": "पर्पल डार्क थीम",
648 + "qr_code_format": "क्यूआर कोड प्रारूप",
649 + "qr_code_format_body": "BCUR (ब्लॉकचेन कॉमन्स वर्दी संसाधन) उद्योग मानक है, और बिटकॉइन हार्डवेयर वॉलेट के साथ सबसे व्यापक रूप से संगत है, और अधिकांश उपयोगकर्ताओं द्वारा चुना जाना चाहिए। BBQR (बेहतर बिटकॉइन QR) एक अनूठा प्रारूप है जिसका उपयोग केवल कोल्डकार्ड हार्डवेयर वॉलेट द्वारा किया जाता है, जो उनके मॉडल Q के साथ शुरू होता है।",
650 + "qr_code_format_note": "अलग -अलग क्यूआर कोड प्रारूपों का उपयोग बिटकॉइन स्पेस में अलग -अलग हार्डवेयर वॉलेट द्वारा किया जाता है",
651 "qr_fullscreen": "फ़ुल स्क्रीन क्यूआर कोड खोलने के लिए टैप करें",
652 "qr_instruction": "किसी भी टोकन या संग्रहणीय पर प्राप्त करने के लिए इस पते का उपयोग करें",
653 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_hr.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Odaberite izvedbu novčanika",
158 "choose_from_available_options": "Odaberite neku od dostupnih opcija:",
159 "choose_one": "Izaberi jedan",
160 + "choose_qr_code_format": "Odaberite format QR koda",
161 + "choose_qr_code_format_note": "Odaberite pravi format za svoj hardverski novčanik:",
162 "choose_relay": "Odaberite relej za korištenje",
163 "choose_wallet_currency": "Molimo odaberite valutu novčanika:",
164 "choose_wallet_group": "Odaberite grupu novčanika",
@@ -642,6 +644,9 @@
644 "public_key": "Javni ključ",
645 "purchase_gift_card": "Kupnja darovne kartice",
646 "purple_dark_theme": "Ljubičasta tamna tema",
647 + "qr_code_format": "QR format koda",
648 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) je industrijski standard, a najčešće kompatibilni s Bitcoin hardverskim novčanicama, a trebala bi ga odabrati većina korisnika. BBQR (Better Bitcoin QR) jedinstven je format koji koriste samo Coldcard Hardware novčanici, počevši od njihovog modela Q.",
649 + "qr_code_format_note": "Različite formate QR koda koriste različiti hardverski novčanici u prostoru Bitcoin",
650 "qr_fullscreen": "Dodirnite za otvaranje QR koda preko cijelog zaslona",
651 "qr_instruction": "Upotrijebite ovu adresu da biste dobili bilo koji token ili kolekcionar na",
652 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_hy.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Ընտրեք դրամապանակի ածանցում",
158 "choose_from_available_options": "Ընտրեք առկա տարբերակներից",
159 "choose_one": "Ընտրեք մեկը",
160 + "choose_qr_code_format": "Ընտրեք QR կոդի ձեւաչափը",
161 + "choose_qr_code_format_note": "Ընտրեք ճիշտ ձեւաչափը ձեր ապարատային դրամապանակի համար.",
162 "choose_relay": "Խնդրում ենք ընտրեք փոխանցման կետ",
163 "choose_wallet_currency": "Խնդրում ենք ընտրեք դրամապանակի արժույթը",
164 "choose_wallet_group": "Ընտրեք դրամապանակների խումբ",
@@ -641,6 +643,9 @@
643 "public_key": "Հանրային բանալի",
644 "purchase_gift_card": "Նվեր քարտ գնել",
645 "purple_dark_theme": "Մանուշակագույն մութ տեսք",
646 + "qr_code_format": "QR կոդ ձեւաչափ",
647 + "qr_code_format_body": "BCUR (Blockchain Commons համազգեստի ռեսուրսներ) արդյունաբերության չափանիշն է, եւ առավել լայնորեն համատեղելի է Bitcoin ապարատային դրամապանակների հետ, եւ պետք է ընտրվեն օգտագործողների մեծամասնության կողմից: BBQR (ավելի լավ Bitcoin QR) եզակի ձեւաչափ է, որն օգտագործվում է միայն ColdCard ապարատային դրամապանակներով, սկսած իրենց մոդելից Q.",
648 + "qr_code_format_note": "QR կոդերի տարբեր ձեւաչափեր օգտագործվում են տարբեր ապարատային դրամապանակների կողմից Bitcoin տարածության մեջ",
649 "qr_fullscreen": "Սեղմեք այստեղ բացելու ամբողջ էկրանը QR կոդ",
650 "qr_instruction": "Օգտագործեք այս հասցեն `ցանկացած նշան կամ հավաքածու ստանալու համար",
651 "qr_payment_amount": "Այս QR կոդը պարունակում է վճարման գումար։ Ուզում եք թարմացնել ընթացիկ արժեքը?",
res/values/strings_id.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Pilih dompet dompet",
158 "choose_from_available_options": "Pilih dari pilihan yang tersedia:",
159 "choose_one": "Pilih satu",
160 + "choose_qr_code_format": "Pilih Format Kode QR",
161 + "choose_qr_code_format_note": "Pilih format yang tepat untuk dompet perangkat keras Anda:",
162 "choose_relay": "Silakan pilih relai yang akan digunakan",
163 "choose_wallet_currency": "Silahkan pilih mata uang dompet:",
164 "choose_wallet_group": "Pilih Grup Dompet",
@@ -644,6 +646,9 @@
646 "public_key": "Kunci publik",
647 "purchase_gift_card": "Beli Kartu Hadiah",
648 "purple_dark_theme": "Tema gelap ungu",
649 + "qr_code_format": "Format Kode QR",
650 + "qr_code_format_body": "BCUR (Blockchain Commons Seragam Sumber Daya) adalah standar industri, dan paling kompatibel dengan dompet perangkat keras Bitcoin, dan harus dipilih oleh sebagian besar pengguna. BBQR (Better Bitcoin QR) adalah format unik yang hanya digunakan oleh dompet perangkat keras Coldcard, dimulai dengan model Q.",
651 + "qr_code_format_note": "Format kode QR yang berbeda digunakan oleh dompet perangkat keras yang berbeda di ruang bitcoin",
652 "qr_fullscreen": "Tap untuk membuka layar QR code penuh",
653 "qr_instruction": "Gunakan alamat ini untuk menerima token atau koleksi",
654 "qr_payment_amount": "QR code ini berisi jumlah pembayaran. Apakah Anda ingin menimpa nilai saat ini?",
res/values/strings_it.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Scegli la derivazione del portafoglio",
158 "choose_from_available_options": "Scegli tra le opzioni disponibili:",
159 "choose_one": "Scegline uno",
160 + "choose_qr_code_format": "Scegli il formato del codice QR",
161 + "choose_qr_code_format_note": "Scegli il formato giusto per il tuo portafoglio hardware:",
162 "choose_relay": "Scegli un relay da utilizzare",
163 "choose_wallet_currency": "Scegli la valuta del portafoglio:",
164 "choose_wallet_group": "Scegli il gruppo del portafoglio",
@@ -643,6 +645,9 @@
645 "public_key": "Chiave pubblica",
646 "purchase_gift_card": "Acquista carta regalo",
647 "purple_dark_theme": "Tema scuro viola",
648 + "qr_code_format": "Formato del codice QR",
649 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) è lo standard del settore e molto compatibile con i portafogli hardware Bitcoin e dovrebbe essere selezionato dalla maggior parte degli utenti. BBQR (Better Bitcoin QR) è un formato unico utilizzato solo dai portafogli hardware Coldcard, a partire dal loro modello Q.",
650 + "qr_code_format_note": "Diversi formati di codice QR sono utilizzati da diversi portafogli hardware nello spazio Bitcoin",
651 "qr_fullscreen": "Tocca per aprire il codice QR a schermo intero",
652 "qr_instruction": "Usa questo indirizzo per ricevere qualsiasi token o collezione su",
653 "qr_payment_amount": "Questo codice QR contiene l'importo del pagamento. Vuoi sovrascrivere il valore attuale?",
res/values/strings_ja.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "ウォレット派生を選択します",
158 "choose_from_available_options": "利用可能なオプションから選択してください:",
159 "choose_one": "1 つ選択してください",
160 + "choose_qr_code_format": "QRコード形式を選択します",
161 + "choose_qr_code_format_note": "ハードウェアウォレットに適した形式を選択してください。",
162 "choose_relay": "使用するリレーを選択してください",
163 "choose_wallet_currency": "ウォレット通貨を選択してください:",
164 "choose_wallet_group": "ウォレットグループを選択してください",
@@ -643,6 +645,9 @@
645 "public_key": "公開鍵",
646 "purchase_gift_card": "ギフトカードを購入",
647 "purple_dark_theme": "紫色の暗いテーマ",
648 + "qr_code_format": "QRコード形式",
649 + "qr_code_format_body": "BCUR(Blockchain Commons Uniform Resources)は業界標準であり、ビットコインハードウェアウォレットと最も広く互換性があり、ほとんどのユーザーが選択する必要があります。 BBQR(Better Bitcoin QR)は、モデルQから始まるColdCardハードウェアウォレットのみが使用する一意の形式です。",
650 + "qr_code_format_note": "さまざまなQRコード形式がビットコインスペースの異なるハードウェアウォレットで使用されます",
651 "qr_fullscreen": "タップして全画面QRコードを開く",
652 "qr_instruction": "このアドレスを使用して、トークンまたはコレクタブルを受け取ります",
653 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_ko.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "지갑 파생 경로 선택",
158 "choose_from_available_options": "사용 가능한 옵션 중에서 선택하세요:",
159 "choose_one": "하나 선택",
160 + "choose_qr_code_format": "QR 코드 형식을 선택하십시오",
161 + "choose_qr_code_format_note": "하드웨어 지갑에 적합한 형식을 선택하십시오.",
162 "choose_relay": "사용할 릴레이를 선택하세요",
163 "choose_wallet_currency": "지갑 통화를 선택하세요:",
164 "choose_wallet_group": "지갑 그룹 선택",
@@ -643,6 +645,9 @@
645 "public_key": "공개 키",
646 "purchase_gift_card": "기프트 카드 구매",
647 "purple_dark_theme": "보라색 다크 테마",
648 + "qr_code_format": "QR 코드 형식",
649 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources)은 업계 표준이며 비트 코인 하드웨어 지갑과 가장 호환되며 대부분의 사용자가 선택해야합니다. BBQR (Better Bitcoin QR)은 모델 Q부터 시작하여 콜드 카드 하드웨어 지갑에서만 사용하는 고유 한 형식입니다.",
650 + "qr_code_format_note": "비트 코인 공간의 다른 하드웨어 지갑에서 다른 QR 코드 형식을 사용합니다.",
651 "qr_fullscreen": "전체 화면 QR 코드를 열려면 탭하세요",
652 "qr_instruction": "이 주소를 사용하여 토큰 또는 수집품을 받으십시오.",
653 "qr_payment_amount": "이 QR 코드에는 결제 금액이 포함되어 있습니다. 현재 값을 덮어쓰시겠습니까?",
res/values/strings_my.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "ပိုက်ဆံအိတ်ကိုရွေးချယ်ပါ",
158 "choose_from_available_options": "ရနိုင်သောရွေးချယ်မှုများမှ ရွေးပါ-",
159 "choose_one": "တစ်ခုရွေးပါ။",
160 + "choose_qr_code_format": "QR Code format ကိုရွေးချယ်ပါ",
161 + "choose_qr_code_format_note": "သင်၏ hardware ပိုက်ဆံအိတ်အတွက်မှန်ကန်သောပုံစံကိုရွေးချယ်ပါ။",
162 "choose_relay": "အသုံးပြုရန် relay ကိုရွေးချယ်ပါ။",
163 "choose_wallet_currency": "ပိုက်ဆံအိတ်ငွေကြေးကို ရွေးပါ-",
164 "choose_wallet_group": "ပိုက်ဆံအိတ်အုပ်စုရွေးပါ",
@@ -642,6 +644,9 @@
644 "public_key": "အများသူငှာသော့",
645 "purchase_gift_card": "လက်ဆောင်ကတ်ဝယ်ပါ။",
646 "purple_dark_theme": "ခရမ်းရောင် Drwing Theme",
647 + "qr_code_format": "QR CODE ပုံစံ",
648 + "qr_code_format_body": "BCur (Blockchain Commons Uniforms အရင်းအမြစ်များ) သည်စက်မှုလုပ်ငန်းစံသတ်မှတ်ချက်ဖြစ်ပြီး Bitcoin Hardware Walkets နှင့်အပြေးအလွှားအသုံးချသင့်သည်။ BBQR (ပိုမိုကောင်းမွန်သော Bitcoin QR) သည် Coldcard Hardware Walkets မှသာအသုံးပြုသောထူးခြားသောပုံစံဖြစ်သည်။",
649 + "qr_code_format_note": "ကွဲပြားခြားနားသော QR ကုဒ်ပုံစံများကို Bitcoin နေရာ၌ကွဲပြားခြားနားသော hardware ပိုက်ဆံအိတ်များကအသုံးပြုသည်",
650 "qr_fullscreen": "မျက်နှာပြင်အပြည့် QR ကုဒ်ကိုဖွင့်ရန် တို့ပါ။",
651 "qr_instruction": "မည်သည့်လက်ခဏာသက်သေသို့မဟုတ်စုဆောင်းရရန်ဤလိပ်စာကိုသုံးပါ",
652 "qr_payment_amount": "ဤ QR ကုဒ်တွင် ငွေပေးချေမှုပမာဏတစ်ခုပါရှိသည်။ လက်ရှိတန်ဖိုးကို ထပ်ရေးလိုပါသလား။",
res/values/strings_nl.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Kies portemonnee -afleiding",
158 "choose_from_available_options": "Kies uit de beschikbare opties:",
159 "choose_one": "Kies er een",
160 + "choose_qr_code_format": "Kies QR -code -indeling",
161 + "choose_qr_code_format_note": "Kies het juiste formaat voor uw hardware -portemonnee:",
162 "choose_relay": "Kies een relais dat u wilt gebruiken",
163 "choose_wallet_currency": "Kies een portemonnee-valuta:",
164 "choose_wallet_group": "Kies portemonnee groep",
@@ -642,6 +644,9 @@
644 "public_key": "Publieke sleutel",
645 "purchase_gift_card": "Cadeaubon kopen",
646 "purple_dark_theme": "Paars donker thema",
647 + "qr_code_format": "QR -codeformaat",
648 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) is de industriestandaard en het meest compatibel met Bitcoin -hardware -portefeuilles en moet door de meeste gebruikers worden geselecteerd. BBQR (Better Bitcoin QR) is een uniek formaat dat alleen wordt gebruikt door ColdCard Hardware -portefeuilles, beginnend met hun model Q.",
649 + "qr_code_format_note": "Verschillende QR -code -formaten worden gebruikt door verschillende hardware -portefeuilles in de Bitcoin -ruimte",
650 "qr_fullscreen": "Tik om de QR-code op volledig scherm te openen",
651 "qr_instruction": "Gebruik dit adres om een token of verzamelobject te ontvangen",
652 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_pl.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Wybierz wyprowadzenie frazy",
158 "choose_from_available_options": "Wybierz z dostępnych opcji:",
159 "choose_one": "Wybierz jeden",
160 + "choose_qr_code_format": "Wybierz format kodu QR",
161 + "choose_qr_code_format_note": "Wybierz odpowiedni format dla swojego portfela sprzętowego:",
162 "choose_relay": "Wybierz przekaźnik, który chcesz użyć",
163 "choose_wallet_currency": "Wybierz walutę portfela:",
164 "choose_wallet_group": "Wybierz grupę portfela",
@@ -642,6 +644,9 @@
644 "public_key": "Klucz publiczny",
645 "purchase_gift_card": "Kup kartę podarunkową",
646 "purple_dark_theme": "Ciemy Fiolet",
647 + "qr_code_format": "Format kodu QR",
648 + "qr_code_format_body": "BCUR (Blockchain Commons Mundur Resources) jest standardem branżowym i najczęściej kompatybilny z portfelami sprzętowymi Bitcoin i powinien być wybierany przez większość użytkowników. BBQR (Better Bitcoin QR) to unikalny format używany tylko przez portfele sprzętowe Coldcard, zaczynając od ich modelu Q.",
649 + "qr_code_format_note": "Różne formaty kodów QR są używane przez różne portfele sprzętowe w przestrzeni Bitcoin",
650 "qr_fullscreen": "Dotknij, aby otworzyć pełnoekranowy kod QR",
651 "qr_instruction": "Użyj tego adresu, aby otrzymać dowolny token lub kolekcjonerski",
652 "qr_payment_amount": "Ten kod QR zawiera kwotę do zapłaty. Czy chcesz nadpisać obecną wartość?",
res/values/strings_pt.arb
+6 -1
@@ -157,6 +157,8 @@
157 "choose_derivation": "Escolha a derivação da carteira",
158 "choose_from_available_options": "Escolha entre as opções disponíveis:",
159 "choose_one": "Escolha um",
160 + "choose_qr_code_format": "Escolha formato de código QR",
161 + "choose_qr_code_format_note": "Escolha o formato certo para sua carteira de hardware:",
162 "choose_relay": "Escolha um relé para usar",
163 "choose_wallet_currency": "Escolha a moeda da carteira:",
164 "choose_wallet_group": "Escolha o Grupo de Wallet",
@@ -644,6 +646,9 @@
646 "public_key": "Chave pública",
647 "purchase_gift_card": "Comprar vale-presente",
648 "purple_dark_theme": "Tema escuro roxo",
649 + "qr_code_format": "Formato de código QR",
650 + "qr_code_format_body": "O BCUR (Recursos Uniformes do Blockchain Commons) é o padrão da indústria e é mais amplamente compatível com carteiras de hardware Bitcoin e deve ser selecionado pela maioria dos usuários. O BBQR (Better Bitcoin QR) é um formato exclusivo usado apenas por carteiras de hardware de cartão frio, começando com seu modelo Q.",
651 + "qr_code_format_note": "Diferentes formatos de código QR são usados ​​por diferentes carteiras de hardware no espaço Bitcoin",
652 "qr_fullscreen": "Toque para abrir o código QR em tela cheia",
653 "qr_instruction": "Use este endereço para receber qualquer token ou colecionável em",
654 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
@@ -1144,4 +1149,4 @@
1149 "youCanGoBackToYourDapp": "Você pode voltar para o seu dapp agora",
1150 "your": "Seu",
1151 "yy": "aa"
1147 -}
1152 +}
\ No newline at end of file
res/values/strings_ru.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Выберите вывод кошелька",
158 "choose_from_available_options": "Выберите из доступных вариантов:",
159 "choose_one": "Выбери один",
160 + "choose_qr_code_format": "Выберите формат QR -кода",
161 + "choose_qr_code_format_note": "Выберите правильный формат для вашего аппаратного кошелька:",
162 "choose_relay": "Пожалуйста, выберите реле для использования",
163 "choose_wallet_currency": "Пожалуйста, выберите валюту кошелька:",
164 "choose_wallet_group": "Выберите группу кошелька",
@@ -643,6 +645,9 @@
645 "public_key": "Публичный ключ",
646 "purchase_gift_card": "Купить подарочную карту",
647 "purple_dark_theme": "Пурпурная темная тема",
648 + "qr_code_format": "QR -код формат",
649 + "qr_code_format_body": "BCUR (Blockchain Commons Uniform Resources) является отраслевым стандартом и наиболее широко совместимым с оборудованиями биткойнов, и большинство пользователей должны выбрать. BBQR (Better Bitcoin QR) - это уникальный формат, используемый только для оборудования ColdCard, начиная с их модели Q.",
650 + "qr_code_format_note": "Различные форматы QR -кода используются различными аппаратными кошельками в пространстве биткойнов",
651 "qr_fullscreen": "Нажмите, чтобы открыть полноэкранный QR-код",
652 "qr_instruction": "Используйте этот адрес, чтобы получить любой токен или коллекционировать на",
653 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_th.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "เลือก Wallet Derivation",
158 "choose_from_available_options": "เลือกจากตัวเลือกที่มีอยู่:",
159 "choose_one": "เลือกหนึ่งรายการ",
160 + "choose_qr_code_format": "เลือกรูปแบบรหัส QR",
161 + "choose_qr_code_format_note": "เลือกรูปแบบที่เหมาะสมสำหรับกระเป๋าเงินฮาร์ดแวร์ของคุณ:",
162 "choose_relay": "กรุณาเลือกรีเลย์ที่จะใช้",
163 "choose_wallet_currency": "โปรดเลือกสกุลเงินของกระเป๋า:",
164 "choose_wallet_group": "เลือกกลุ่มกระเป๋าเงิน",
@@ -642,6 +644,9 @@
644 "public_key": "คีย์สาธารณะ",
645 "purchase_gift_card": "ซื้อบัตรของขวัญ",
646 "purple_dark_theme": "ธีมสีม่วงเข้ม",
647 + "qr_code_format": "รูปแบบรหัส QR",
648 + "qr_code_format_body": "BCUR (blockchain Commons Resources Inhornal) เป็นมาตรฐานอุตสาหกรรมและเข้ากันได้อย่างกว้างขวางที่สุดกับกระเป๋าเงินฮาร์ดแวร์ Bitcoin และควรเลือกโดยผู้ใช้ส่วนใหญ่ BBQR (Better Bitcoin QR) เป็นรูปแบบที่ไม่ซ้ำกันที่ใช้โดยกระเป๋าเงินฮาร์ดแวร์ ColdCard เท่านั้นเริ่มต้นด้วยรุ่น Q",
649 + "qr_code_format_note": "รูปแบบรหัส QR ที่แตกต่างกันถูกใช้โดยกระเป๋าเงินฮาร์ดแวร์ที่แตกต่างกันในพื้นที่ Bitcoin",
650 "qr_fullscreen": "แตะเพื่อเปิดหน้าจอ QR code แบบเต็มจอ",
651 "qr_instruction": "ใช้ที่อยู่นี้เพื่อรับโทเค็นหรือของสะสม",
652 "qr_payment_amount": "QR code นี้มีจำนวนการชำระเงิน คุณต้องการเขียนทับค่าปัจจุบันหรือไม่?",
res/values/strings_tl.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Piliin ang Derivation ng Wallet",
158 "choose_from_available_options": "Pumili mula sa magagamit na mga pagpipilian:",
159 "choose_one": "Pumili ng isa",
160 + "choose_qr_code_format": "Piliin ang Format ng QR Code",
161 + "choose_qr_code_format_note": "Piliin ang tamang format para sa iyong wallet ng hardware:",
162 "choose_relay": "Mangyaring pumili ng relay na gagamitin",
163 "choose_wallet_currency": "Mangyaring piliin ang Pera ng Wallet:",
164 "choose_wallet_group": "Piliin ang pangkat ng Wallet",
@@ -642,6 +644,9 @@
644 "public_key": "Public key",
645 "purchase_gift_card": "Bumili ng Gift Card",
646 "purple_dark_theme": "Purple Dark Theme",
647 + "qr_code_format": "Format ng QR Code",
648 + "qr_code_format_body": "Ang BCUR (Blockchain Commons Uniform Resources) ay pamantayan sa industriya, at pinaka -malawak na katugma sa mga pitaka ng hardware ng bitcoin, at dapat na mapili ng karamihan sa mga gumagamit. Ang BBQR (Better Bitcoin QR) ay isang natatanging format na ginamit lamang ng mga wallet ng hardware ng ColdCard, na nagsisimula sa kanilang modelo ng Q.",
649 + "qr_code_format_note": "Ang iba't ibang mga format ng QR code ay ginagamit ng iba't ibang mga wallets ng hardware sa puwang ng bitcoin",
650 "qr_fullscreen": "I-tap para makuha ang buong screen na QR code",
651 "qr_instruction": "Gamitin ang address na ito upang makatanggap ng anumang token o nakolekta sa",
652 "qr_payment_amount": "Ang QR code na ito ay naglalaman ng halaga ng pagbabayad. Gusto mo bang i-overwrite ang kasalukuyang halaga?",
res/values/strings_tr.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Cüzdan türevini seçin",
158 "choose_from_available_options": "Mevcut seçenekler arasından seçim yap:",
159 "choose_one": "Birini seç",
160 + "choose_qr_code_format": "QR Kod Biçimi Seçin",
161 + "choose_qr_code_format_note": "Donanım cüzdanınız için doğru biçimi seçin:",
162 "choose_relay": "Lütfen kullanmak için bir röle seçin",
163 "choose_wallet_currency": "Lütfen cüzdanın para birimini seç:",
164 "choose_wallet_group": "Cüzdan Grubu Seçin",
@@ -642,6 +644,9 @@
644 "public_key": "Genel Anahtar",
645 "purchase_gift_card": "Hediye Kartı Satın Al",
646 "purple_dark_theme": "Mor karanlık tema",
647 + "qr_code_format": "QR Kod Biçimi",
648 + "qr_code_format_body": "BCUR (Blockchain Commons üniforma kaynakları) endüstri standardıdır ve en çok Bitcoin donanım cüzdanları ile uyumludur ve çoğu kullanıcı tarafından seçilmelidir. BBQR (Better Bitcoin QR), Model Q ile başlayarak yalnızca ColdCard donanım cüzdanları tarafından kullanılan benzersiz bir formattır.",
649 + "qr_code_format_note": "Bitcoin alanındaki farklı donanım cüzdanları tarafından farklı QR kod formatları kullanılır",
650 "qr_fullscreen": "QR kodunu tam ekranda açmak için dokun",
651 "qr_instruction": "Herhangi bir jeton veya koleksiyon almak için bu adresi kullanın",
652 "qr_payment_amount": "Bu QR kodu ödeme tutarını içeriyor. Geçerli miktarın üzerine yazmak istediğine emin misin?",
res/values/strings_uk.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Виберіть деривацію гаманця",
158 "choose_from_available_options": "Виберіть із доступних варіантів:",
159 "choose_one": "Вибери один",
160 + "choose_qr_code_format": "Виберіть формат QR -коду",
161 + "choose_qr_code_format_note": "Виберіть правильний формат для свого апаратного гаманця:",
162 "choose_relay": "Будь ласка, виберіть реле для використання",
163 "choose_wallet_currency": "Будь ласка, виберіть валюту гаманця:",
164 "choose_wallet_group": "Виберіть групу гаманця",
@@ -642,6 +644,9 @@
644 "public_key": "Публічний ключ",
645 "purchase_gift_card": "Придбати подарункову картку",
646 "purple_dark_theme": "Фіолетова темна тема",
647 + "qr_code_format": "Формат QR -коду",
648 + "qr_code_format_body": "BCUR (Blockchain Commons Unifical Resources) - це галузевий стандарт і найбільш сумісний з апаратними гаманцями Bitcoin, і його повинні вибрати більшість користувачів. BBQR (кращий біткойн QR) - це унікальний формат, який використовується лише апаратними гаманцями Coldcard, починаючи з їх моделі Q.",
649 + "qr_code_format_note": "Різні формати QR -коду використовуються різними апаратними гаманцями в просторі Bitcoin",
650 "qr_fullscreen": "Торкніться, щоб відкрити QR-код на весь екран",
651 "qr_instruction": "Використовуйте цю адресу, щоб отримати будь -який маркер або колекціонування",
652 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",
res/values/strings_ur.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "پرس سے ماخوذ منتخب کریں",
158 "choose_from_available_options": "دستیاب اختیارات میں سے انتخاب کریں:",
159 "choose_one": "ایک کا انتخاب کریں",
160 + "choose_qr_code_format": "QR کوڈ فارمیٹ کا انتخاب کریں",
161 + "choose_qr_code_format_note": "اپنے ہارڈ ویئر پرس کے لئے صحیح شکل کا انتخاب کریں:",
162 "choose_relay": "۔ﮟﯾﺮﮐ ﺏﺎﺨﺘﻧﺍ ﺎﮐ ﮯﻠﯾﺭ ﮯﯿﻟ ﮯﮐ ﮯﻧﺮﮐ ﻝﺎﻤﻌﺘﺳﺍ ﻡﺮﮐ ﮦﺍﺮﺑ",
163 "choose_wallet_currency": "براہ کرم والیٹ کرنسی کا انتخاب کریں:",
164 "choose_wallet_group": "پرس گروپ کا انتخاب کریں",
@@ -644,6 +646,9 @@
646 "public_key": "عوامی کلید",
647 "purchase_gift_card": "گفٹ کارڈ خریدیں۔",
648 "purple_dark_theme": "ارغوانی ڈارک تھیم",
649 + "qr_code_format": "QR کوڈ فارمیٹ",
650 + "qr_code_format_body": "بی سی او آر (بلاکچین کامنز یکساں وسائل) صنعت کا معیار ہے ، اور بٹ کوائن ہارڈ ویئر بٹوے کے ساتھ سب سے زیادہ وسیع پیمانے پر مطابقت رکھتا ہے ، اور زیادہ تر صارفین کو منتخب کرنا چاہئے۔ بی بی کیو آر (بیٹر بٹ کوائن کیو آر) ایک انوکھا فارمیٹ ہے جو صرف کولڈ کارڈ ہارڈ ویئر بٹوے کے ذریعہ استعمال ہوتا ہے ، جس کا آغاز ان کے ماڈل کیو سے ہوتا ہے۔",
651 + "qr_code_format_note": "مختلف کیو آر کوڈ فارمیٹس بٹ کوائن کی جگہ میں مختلف ہارڈ ویئر بٹوے کے ذریعہ استعمال ہوتے ہیں",
652 "qr_fullscreen": "فل سکرین QR کوڈ کھولنے کے لیے تھپتھپائیں۔",
653 "qr_instruction": "اس پتے کو کسی بھی ٹوکن یا اجتماعی وصول کرنے کے لئے استعمال کریں",
654 "qr_payment_amount": "اس QR کوڈ میں ادائیگی کی رقم شامل ہے۔ کیا آپ موجودہ قدر کو اوور رائٹ کرنا چاہتے ہیں؟",
res/values/strings_vi.arb
+5
@@ -155,6 +155,8 @@
155 "choose_derivation": "Chọn Đường dẫn Ví",
156 "choose_from_available_options": "Chọn từ các tùy chọn có sẵn:",
157 "choose_one": "Chọn một",
158 + "choose_qr_code_format": "Chọn định dạng mã QR",
159 + "choose_qr_code_format_note": "Chọn đúng định dạng cho ví phần cứng của bạn:",
160 "choose_relay": "Vui lòng chọn một relay để sử dụng",
161 "choose_wallet_currency": "Vui lòng chọn tiền tệ của ví:",
162 "choose_wallet_group": "Chọn nhóm ví",
@@ -640,6 +642,9 @@
642 "public_key": "Khóa công khai",
643 "purchase_gift_card": "Mua thẻ quà tặng",
644 "purple_dark_theme": "Chủ đề tối tím",
645 + "qr_code_format": "Định dạng mã QR",
646 + "qr_code_format_body": "BCUR (Tài nguyên thống nhất Blockchain Commons) là tiêu chuẩn công nghiệp và tương thích rộng rãi nhất với ví phần cứng bitcoin và nên được hầu hết người dùng chọn. BBQR (Bitcoin QR tốt hơn) là một định dạng duy nhất chỉ được sử dụng bởi ví phần cứng Coldcard, bắt đầu với mô hình của họ Q.",
647 + "qr_code_format_note": "Các định dạng mã QR khác nhau được sử dụng bởi các ví phần cứng khác nhau trong không gian bitcoin",
648 "qr_fullscreen": "Nhấn để mở mã QR toàn màn hình",
649 "qr_instruction": "Sử dụng địa chỉ này để nhận bất kỳ mã thông báo hoặc bộ sưu tập nào trên",
650 "qr_payment_amount": "Mã QR này chứa số tiền thanh toán. Bạn có muốn ghi đè giá trị hiện tại không?",
res/values/strings_yo.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "Yan awọn apamọwọ apamọwọ",
158 "choose_from_available_options": "Ẹ yàn láti àwọn ìyàn yìí:",
159 "choose_one": "Ẹ yàn kan",
160 + "choose_qr_code_format": "Yan ọna kika koodu QR",
161 + "choose_qr_code_format_note": "Yan ọna ọtun fun apamọwọ ohun elo rẹ:",
162 "choose_relay": "Jọwọ yan yii lati lo",
163 "choose_wallet_currency": "Ẹ jọ̀wọ́, yàn irú owó ti àpamọ́wọ́ yín:",
164 "choose_wallet_group": "Yan ẹgbẹ ogiri",
@@ -643,6 +645,9 @@
645 "public_key": "Kọ́kọ́rọ́ tó kò àdáni",
646 "purchase_gift_card": "Ra káàdì ìrajà t'á lò nínú irú kan ìtajà",
647 "purple_dark_theme": "Akọle dudu dudu",
648 + "qr_code_format": "Ọna kika QR",
649 + "qr_code_format_body": "BCUR (Blockchain Condons Awọn orisun ile-iṣẹ) Njẹ boṣewa ile-iṣẹ) ati ibaramu julọ pẹlu awọn Woleti Bluecoin, ati pe o yẹ ki o yan nipasẹ ọpọlọpọ awọn olumulo. BBQR (VBCOIN VRR) jẹ ọna alailẹgbẹ ti a lo nipasẹ awọn Woleti Hardware ni otutu nikan, bẹrẹ pẹlu awoṣe wọn Q.",
650 + "qr_code_format_note": "Awọn ọna kika koodu qr yatọ nipasẹ awọn ogiri ina oriṣiriṣi oriṣiriṣi ni aaye Bitcoin",
651 "qr_fullscreen": "Àmì ìlujá túbọ̀ máa tóbi tí o bá tẹ̀",
652 "qr_instruction": "Lo adirẹsi yii lati gba eyikeyi ami-ọmọ tabi gbigba lori",
653 "qr_payment_amount": "Iye owó t'á ránṣé wà nínú àmì ìlujá yìí. Ṣé ẹ fẹ́ pààrọ̀ ẹ̀?",
res/values/strings_zh.arb
+5
@@ -157,6 +157,8 @@
157 "choose_derivation": "选择钱包推导",
158 "choose_from_available_options": "从可用选项中选择:",
159 "choose_one": "选一个",
160 + "choose_qr_code_format": "选择QR码格式",
161 + "choose_qr_code_format_note": "为您的硬件钱包选择正确的格式:",
162 "choose_relay": "请选择要使用的继电器",
163 "choose_wallet_currency": "请选择钱包货币:",
164 "choose_wallet_group": "选择钱包组",
@@ -642,6 +644,9 @@
644 "public_key": "公钥",
645 "purchase_gift_card": "购买礼品卡",
646 "purple_dark_theme": "紫色的黑暗主题",
647 + "qr_code_format": "QR码格式",
648 + "qr_code_format_body": "BCUR(区块链共同资源)是行业标准,与比特币硬件钱包最广泛兼容,大多数用户应选择。 BBQR(Better Bitcoin QR)是一种仅由ColdCard Hardware Challets使用的唯一格式,从他们的型号开始。",
649 + "qr_code_format_note": "不同的硬件钱包在比特币空间中使用了不同的QR码格式",
650 "qr_fullscreen": "点击打开全屏二维码",
651 "qr_instruction": "使用此地址接收任何令牌或收藏",
652 "qr_payment_amount": "This QR code contains a payment amount. Do you want to overwrite the current value?",