@txnlab/use-wallet-ui-react 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/style.css CHANGED
@@ -13,18 +13,10 @@
13
13
  --color-red-900: oklch(39.6% 0.141 25.723);
14
14
  --color-green-500: oklch(72.3% 0.219 149.579);
15
15
  --color-blue-500: oklch(62.3% 0.214 259.815);
16
- --color-gray-50: oklch(98.5% 0.002 247.839);
17
- --color-gray-100: oklch(96.7% 0.003 264.542);
18
16
  --color-gray-200: oklch(92.8% 0.006 264.531);
19
- --color-gray-300: oklch(87.2% 0.01 258.338);
20
17
  --color-gray-400: oklch(70.7% 0.022 261.325);
21
18
  --color-gray-500: oklch(55.1% 0.027 264.364);
22
- --color-gray-600: oklch(44.6% 0.03 256.802);
23
- --color-gray-700: oklch(37.3% 0.034 259.733);
24
- --color-gray-800: oklch(27.8% 0.033 256.848);
25
- --color-gray-900: oklch(21% 0.034 264.665);
26
19
  --color-black: #000;
27
- --color-white: #fff;
28
20
  --spacing: 0.25rem;
29
21
  --container-sm: 24rem;
30
22
  --text-sm: 0.875rem;
@@ -194,6 +186,72 @@
194
186
  display: none !important;
195
187
  }
196
188
  }
189
+ [data-wallet-ui] {
190
+ --wui-color-primary: #2d2df1;
191
+ --wui-color-primary-hover: #2929d9;
192
+ --wui-color-primary-text: #ffffff;
193
+ --wui-color-bg: #ffffff;
194
+ --wui-color-bg-secondary: #f9fafb;
195
+ --wui-color-bg-tertiary: #f3f4f6;
196
+ --wui-color-bg-hover: #e9e9fd;
197
+ --wui-color-text: #1f2937;
198
+ --wui-color-text-secondary: #6b7280;
199
+ --wui-color-text-tertiary: #9ca3af;
200
+ --wui-color-border: #e5e7eb;
201
+ --wui-color-link: rgba(45, 45, 241, 0.8);
202
+ --wui-color-link-hover: #2d2df1;
203
+ --wui-color-overlay: rgba(0, 0, 0, 0.3);
204
+ }
205
+ [data-wallet-ui][data-theme='dark'] {
206
+ --wui-color-primary: #bfbff9;
207
+ --wui-color-primary-hover: #d4d4fa;
208
+ --wui-color-primary-text: #001324;
209
+ --wui-color-bg: #001324;
210
+ --wui-color-bg-secondary: #101b29;
211
+ --wui-color-bg-tertiary: #192a39;
212
+ --wui-color-bg-hover: #192a39;
213
+ --wui-color-text: #e9e9fd;
214
+ --wui-color-text-secondary: #99a1a7;
215
+ --wui-color-text-tertiary: #6b7280;
216
+ --wui-color-border: #192a39;
217
+ --wui-color-link: #6c6cf1;
218
+ --wui-color-link-hover: #8080f3;
219
+ --wui-color-overlay: rgba(0, 0, 0, 0.5);
220
+ }
221
+ .dark [data-wallet-ui]:not([data-theme='light']) {
222
+ --wui-color-primary: #bfbff9;
223
+ --wui-color-primary-hover: #d4d4fa;
224
+ --wui-color-primary-text: #001324;
225
+ --wui-color-bg: #001324;
226
+ --wui-color-bg-secondary: #101b29;
227
+ --wui-color-bg-tertiary: #192a39;
228
+ --wui-color-bg-hover: #192a39;
229
+ --wui-color-text: #e9e9fd;
230
+ --wui-color-text-secondary: #99a1a7;
231
+ --wui-color-text-tertiary: #6b7280;
232
+ --wui-color-border: #192a39;
233
+ --wui-color-link: #6c6cf1;
234
+ --wui-color-link-hover: #8080f3;
235
+ --wui-color-overlay: rgba(0, 0, 0, 0.5);
236
+ }
237
+ @media (prefers-color-scheme: dark) {
238
+ [data-wallet-ui]:not([data-theme='light']):not([data-theme='dark']) {
239
+ --wui-color-primary: #bfbff9;
240
+ --wui-color-primary-hover: #d4d4fa;
241
+ --wui-color-primary-text: #001324;
242
+ --wui-color-bg: #001324;
243
+ --wui-color-bg-secondary: #101b29;
244
+ --wui-color-bg-tertiary: #192a39;
245
+ --wui-color-bg-hover: #192a39;
246
+ --wui-color-text: #e9e9fd;
247
+ --wui-color-text-secondary: #99a1a7;
248
+ --wui-color-text-tertiary: #6b7280;
249
+ --wui-color-border: #192a39;
250
+ --wui-color-link: #6c6cf1;
251
+ --wui-color-link-hover: #8080f3;
252
+ --wui-color-overlay: rgba(0, 0, 0, 0.5);
253
+ }
254
+ }
197
255
  [data-wallet-ui-reset] {
198
256
  *, ::after, ::before, ::backdrop, ::file-selector-button {
199
257
  all: revert-layer;
@@ -445,32 +503,29 @@
445
503
  border-top-style: var(--tw-border-style);
446
504
  border-top-width: 1px;
447
505
  }
448
- [data-wallet-ui] .border-gray-200 {
449
- border-color: var(--color-gray-200);
450
- }
451
- [data-wallet-ui] .border-gray-300 {
452
- border-color: var(--color-gray-300);
506
+ [data-wallet-ui] .border-\[var\(--wui-color-border\)\] {
507
+ border-color: var(--wui-color-border);
453
508
  }
454
509
  [data-wallet-ui] .border-green-500 {
455
510
  border-color: var(--color-green-500);
456
511
  }
457
- [data-wallet-ui] .bg-\[\#2D2DF1\] {
458
- background-color: #2D2DF1;
512
+ [data-wallet-ui] .bg-\[var\(--wui-color-bg\)\] {
513
+ background-color: var(--wui-color-bg);
459
514
  }
460
- [data-wallet-ui] .bg-black\/30 {
461
- background-color: color-mix(in srgb, #000 30%, transparent);
462
- @supports (color: color-mix(in lab, red, red)) {
463
- background-color: color-mix(in oklab, var(--color-black) 30%, transparent);
464
- }
515
+ [data-wallet-ui] .bg-\[var\(--wui-color-bg-secondary\)\] {
516
+ background-color: var(--wui-color-bg-secondary);
465
517
  }
466
- [data-wallet-ui] .bg-blue-500 {
467
- background-color: var(--color-blue-500);
518
+ [data-wallet-ui] .bg-\[var\(--wui-color-bg-tertiary\)\] {
519
+ background-color: var(--wui-color-bg-tertiary);
520
+ }
521
+ [data-wallet-ui] .bg-\[var\(--wui-color-overlay\)\] {
522
+ background-color: var(--wui-color-overlay);
468
523
  }
469
- [data-wallet-ui] .bg-gray-50 {
470
- background-color: var(--color-gray-50);
524
+ [data-wallet-ui] .bg-\[var\(--wui-color-primary\)\] {
525
+ background-color: var(--wui-color-primary);
471
526
  }
472
- [data-wallet-ui] .bg-gray-100 {
473
- background-color: var(--color-gray-100);
527
+ [data-wallet-ui] .bg-blue-500 {
528
+ background-color: var(--color-blue-500);
474
529
  }
475
530
  [data-wallet-ui] .bg-gray-200 {
476
531
  background-color: var(--color-gray-200);
@@ -478,9 +533,6 @@
478
533
  [data-wallet-ui] .bg-red-100 {
479
534
  background-color: var(--color-red-100);
480
535
  }
481
- [data-wallet-ui] .bg-white {
482
- background-color: var(--color-white);
483
- }
484
536
  [data-wallet-ui] .object-contain {
485
537
  object-fit: contain;
486
538
  }
@@ -590,32 +642,29 @@
590
642
  --tw-font-weight: var(--font-weight-normal);
591
643
  font-weight: var(--font-weight-normal);
592
644
  }
593
- [data-wallet-ui] .text-\[\#2D2DF1\] {
594
- color: #2D2DF1;
595
- }
596
- [data-wallet-ui] .text-\[\#2D2DF1\]\/80 {
597
- color: color-mix(in oklab, #2D2DF1 80%, transparent);
645
+ [data-wallet-ui] .text-\[var\(--wui-color-link\)\] {
646
+ color: var(--wui-color-link);
598
647
  }
599
- [data-wallet-ui] .text-blue-500 {
600
- color: var(--color-blue-500);
648
+ [data-wallet-ui] .text-\[var\(--wui-color-primary\)\] {
649
+ color: var(--wui-color-primary);
601
650
  }
602
- [data-wallet-ui] .text-gray-400 {
603
- color: var(--color-gray-400);
651
+ [data-wallet-ui] .text-\[var\(--wui-color-primary-text\)\] {
652
+ color: var(--wui-color-primary-text);
604
653
  }
605
- [data-wallet-ui] .text-gray-500 {
606
- color: var(--color-gray-500);
654
+ [data-wallet-ui] .text-\[var\(--wui-color-text\)\] {
655
+ color: var(--wui-color-text);
607
656
  }
608
- [data-wallet-ui] .text-gray-600 {
609
- color: var(--color-gray-600);
657
+ [data-wallet-ui] .text-\[var\(--wui-color-text-secondary\)\] {
658
+ color: var(--wui-color-text-secondary);
610
659
  }
611
- [data-wallet-ui] .text-gray-700 {
612
- color: var(--color-gray-700);
660
+ [data-wallet-ui] .text-\[var\(--wui-color-text-tertiary\)\] {
661
+ color: var(--wui-color-text-tertiary);
613
662
  }
614
- [data-wallet-ui] .text-gray-800 {
615
- color: var(--color-gray-800);
663
+ [data-wallet-ui] .text-blue-500 {
664
+ color: var(--color-blue-500);
616
665
  }
617
- [data-wallet-ui] .text-gray-900 {
618
- color: var(--color-gray-900);
666
+ [data-wallet-ui] .text-gray-400 {
667
+ color: var(--color-gray-400);
619
668
  }
620
669
  [data-wallet-ui] .text-green-500 {
621
670
  color: var(--color-green-500);
@@ -623,9 +672,6 @@
623
672
  [data-wallet-ui] .text-red-700 {
624
673
  color: var(--color-red-700);
625
674
  }
626
- [data-wallet-ui] .text-white {
627
- color: var(--color-white);
628
- }
629
675
  [data-wallet-ui] .opacity-80 {
630
676
  opacity: 80%;
631
677
  }
@@ -694,31 +740,17 @@
694
740
  display: none;
695
741
  }
696
742
  }
697
- [data-wallet-ui] .hover\:bg-\[\#2929D9\] {
743
+ [data-wallet-ui] .hover\:bg-\[var\(--wui-color-bg-hover\)\] {
698
744
  &:hover {
699
745
  @media (hover: hover) {
700
- background-color: #2929D9;
746
+ background-color: var(--wui-color-bg-hover);
701
747
  }
702
748
  }
703
749
  }
704
- [data-wallet-ui] .hover\:bg-\[\#E9E9FD\] {
750
+ [data-wallet-ui] .hover\:bg-\[var\(--wui-color-primary-hover\)\] {
705
751
  &:hover {
706
752
  @media (hover: hover) {
707
- background-color: #E9E9FD;
708
- }
709
- }
710
- }
711
- [data-wallet-ui] .hover\:bg-gray-200 {
712
- &:hover {
713
- @media (hover: hover) {
714
- background-color: var(--color-gray-200);
715
- }
716
- }
717
- }
718
- [data-wallet-ui] .hover\:bg-gray-300 {
719
- &:hover {
720
- @media (hover: hover) {
721
- background-color: var(--color-gray-300);
753
+ background-color: var(--wui-color-primary-hover);
722
754
  }
723
755
  }
724
756
  }
@@ -729,17 +761,18 @@
729
761
  }
730
762
  }
731
763
  }
732
- [data-wallet-ui] .hover\:text-\[\#2D2DF1\] {
764
+ [data-wallet-ui] .hover\:text-\[var\(--wui-color-link-hover\)\] {
733
765
  &:hover {
734
766
  @media (hover: hover) {
735
- color: #2D2DF1;
767
+ color: var(--wui-color-link-hover);
736
768
  }
737
769
  }
738
770
  }
739
- [data-wallet-ui] .hover\:text-gray-700 {
771
+ [data-wallet-ui] .hover\:brightness-90 {
740
772
  &:hover {
741
773
  @media (hover: hover) {
742
- color: var(--color-gray-700);
774
+ --tw-brightness: brightness(90%);
775
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
743
776
  }
744
777
  }
745
778
  }
@@ -754,9 +787,9 @@
754
787
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
755
788
  }
756
789
  }
757
- [data-wallet-ui] .focus\:ring-\[\#2D2DF1\] {
790
+ [data-wallet-ui] .focus\:ring-\[var\(--wui-color-primary\)\] {
758
791
  &:focus {
759
- --tw-ring-color: #2D2DF1;
792
+ --tw-ring-color: var(--wui-color-primary);
760
793
  }
761
794
  }
762
795
  [data-wallet-ui] .focus\:outline-none {
@@ -770,14 +803,9 @@
770
803
  opacity: 50%;
771
804
  }
772
805
  }
773
- [data-wallet-ui] .data-\[focus\]\:bg-\[\#E9E9FD\] {
774
- &[data-focus] {
775
- background-color: #E9E9FD;
776
- }
777
- }
778
- [data-wallet-ui] .data-\[focus\]\:text-gray-900 {
806
+ [data-wallet-ui] .data-\[focus\]\:bg-\[var\(--wui-color-bg-hover\)\] {
779
807
  &[data-focus] {
780
- color: var(--color-gray-900);
808
+ background-color: var(--wui-color-bg-hover);
781
809
  }
782
810
  }
783
811
  [data-wallet-ui] .data-\[focus\]\:outline-none {
@@ -866,44 +894,11 @@
866
894
  padding-left: calc(var(--spacing) * 3.5);
867
895
  }
868
896
  }
869
- [data-wallet-ui] .dark\:border-\[\#192A39\] {
870
- @media (prefers-color-scheme: dark) {
871
- border-color: #192A39;
872
- }
873
- }
874
- [data-wallet-ui] .dark\:bg-\[\#101B29\] {
875
- @media (prefers-color-scheme: dark) {
876
- background-color: #101B29;
877
- }
878
- }
879
897
  [data-wallet-ui] .dark\:bg-\[\#192A39\] {
880
898
  @media (prefers-color-scheme: dark) {
881
899
  background-color: #192A39;
882
900
  }
883
901
  }
884
- [data-wallet-ui] .dark\:bg-\[\#192A39\]\/75 {
885
- @media (prefers-color-scheme: dark) {
886
- background-color: color-mix(in oklab, #192A39 75%, transparent);
887
- }
888
- }
889
- [data-wallet-ui] .dark\:bg-\[\#001324\] {
890
- @media (prefers-color-scheme: dark) {
891
- background-color: #001324;
892
- }
893
- }
894
- [data-wallet-ui] .dark\:bg-\[\#BFBFF9\] {
895
- @media (prefers-color-scheme: dark) {
896
- background-color: #BFBFF9;
897
- }
898
- }
899
- [data-wallet-ui] .dark\:bg-black\/50 {
900
- @media (prefers-color-scheme: dark) {
901
- background-color: color-mix(in srgb, #000 50%, transparent);
902
- @supports (color: color-mix(in lab, red, red)) {
903
- background-color: color-mix(in oklab, var(--color-black) 50%, transparent);
904
- }
905
- }
906
- }
907
902
  [data-wallet-ui] .dark\:bg-gray-200 {
908
903
  @media (prefers-color-scheme: dark) {
909
904
  background-color: var(--color-gray-200);
@@ -917,46 +912,6 @@
917
912
  }
918
913
  }
919
914
  }
920
- [data-wallet-ui] .dark\:bg-transparent {
921
- @media (prefers-color-scheme: dark) {
922
- background-color: transparent;
923
- }
924
- }
925
- [data-wallet-ui] .dark\:text-\[\#6C6CF1\] {
926
- @media (prefers-color-scheme: dark) {
927
- color: #6C6CF1;
928
- }
929
- }
930
- [data-wallet-ui] .dark\:text-\[\#99A1A7\] {
931
- @media (prefers-color-scheme: dark) {
932
- color: #99A1A7;
933
- }
934
- }
935
- [data-wallet-ui] .dark\:text-\[\#001324\] {
936
- @media (prefers-color-scheme: dark) {
937
- color: #001324;
938
- }
939
- }
940
- [data-wallet-ui] .dark\:text-\[\#BFBFF9\] {
941
- @media (prefers-color-scheme: dark) {
942
- color: #BFBFF9;
943
- }
944
- }
945
- [data-wallet-ui] .dark\:text-\[\#E9E9FD\] {
946
- @media (prefers-color-scheme: dark) {
947
- color: #E9E9FD;
948
- }
949
- }
950
- [data-wallet-ui] .dark\:text-gray-300 {
951
- @media (prefers-color-scheme: dark) {
952
- color: var(--color-gray-300);
953
- }
954
- }
955
- [data-wallet-ui] .dark\:text-gray-400 {
956
- @media (prefers-color-scheme: dark) {
957
- color: var(--color-gray-400);
958
- }
959
- }
960
915
  [data-wallet-ui] .dark\:text-gray-500 {
961
916
  @media (prefers-color-scheme: dark) {
962
917
  color: var(--color-gray-500);
@@ -967,43 +922,6 @@
967
922
  color: var(--color-red-300);
968
923
  }
969
924
  }
970
- [data-wallet-ui] .dark\:text-white {
971
- @media (prefers-color-scheme: dark) {
972
- color: var(--color-white);
973
- }
974
- }
975
- [data-wallet-ui] .dark\:ring-\[\#192A39\]\/50 {
976
- @media (prefers-color-scheme: dark) {
977
- --tw-ring-color: color-mix(in oklab, #192A39 50%, transparent);
978
- }
979
- }
980
- [data-wallet-ui] .dark\:hover\:bg-\[\#192A39\] {
981
- @media (prefers-color-scheme: dark) {
982
- &:hover {
983
- @media (hover: hover) {
984
- background-color: #192A39;
985
- }
986
- }
987
- }
988
- }
989
- [data-wallet-ui] .dark\:hover\:bg-\[\#263A4A\] {
990
- @media (prefers-color-scheme: dark) {
991
- &:hover {
992
- @media (hover: hover) {
993
- background-color: #263A4A;
994
- }
995
- }
996
- }
997
- }
998
- [data-wallet-ui] .dark\:hover\:bg-\[\#D4D4FA\] {
999
- @media (prefers-color-scheme: dark) {
1000
- &:hover {
1001
- @media (hover: hover) {
1002
- background-color: #D4D4FA;
1003
- }
1004
- }
1005
- }
1006
- }
1007
925
  [data-wallet-ui] .dark\:hover\:bg-red-800\/60 {
1008
926
  @media (prefers-color-scheme: dark) {
1009
927
  &:hover {
@@ -1016,45 +934,6 @@
1016
934
  }
1017
935
  }
1018
936
  }
1019
- [data-wallet-ui] .dark\:hover\:text-\[\#8080F3\] {
1020
- @media (prefers-color-scheme: dark) {
1021
- &:hover {
1022
- @media (hover: hover) {
1023
- color: #8080F3;
1024
- }
1025
- }
1026
- }
1027
- }
1028
- [data-wallet-ui] .dark\:hover\:text-\[\#D4D4FA\] {
1029
- @media (prefers-color-scheme: dark) {
1030
- &:hover {
1031
- @media (hover: hover) {
1032
- color: #D4D4FA;
1033
- }
1034
- }
1035
- }
1036
- }
1037
- [data-wallet-ui] .dark\:focus\:ring-\[\#BFBFF9\] {
1038
- @media (prefers-color-scheme: dark) {
1039
- &:focus {
1040
- --tw-ring-color: #BFBFF9;
1041
- }
1042
- }
1043
- }
1044
- [data-wallet-ui] .dark\:data-\[focus\]\:bg-\[\#192A39\] {
1045
- @media (prefers-color-scheme: dark) {
1046
- &[data-focus] {
1047
- background-color: #192A39;
1048
- }
1049
- }
1050
- }
1051
- [data-wallet-ui] .dark\:data-\[focus\]\:text-\[\#E9E9FD\] {
1052
- @media (prefers-color-scheme: dark) {
1053
- &[data-focus] {
1054
- color: #E9E9FD;
1055
- }
1056
- }
1057
- }
1058
937
  @property --tw-rotate-x {
1059
938
  syntax: "*";
1060
939
  inherits: false;
@@ -1162,6 +1041,59 @@
1162
1041
  syntax: "*";
1163
1042
  inherits: false;
1164
1043
  }
1044
+ @property --tw-blur {
1045
+ syntax: "*";
1046
+ inherits: false;
1047
+ }
1048
+ @property --tw-brightness {
1049
+ syntax: "*";
1050
+ inherits: false;
1051
+ }
1052
+ @property --tw-contrast {
1053
+ syntax: "*";
1054
+ inherits: false;
1055
+ }
1056
+ @property --tw-grayscale {
1057
+ syntax: "*";
1058
+ inherits: false;
1059
+ }
1060
+ @property --tw-hue-rotate {
1061
+ syntax: "*";
1062
+ inherits: false;
1063
+ }
1064
+ @property --tw-invert {
1065
+ syntax: "*";
1066
+ inherits: false;
1067
+ }
1068
+ @property --tw-opacity {
1069
+ syntax: "*";
1070
+ inherits: false;
1071
+ }
1072
+ @property --tw-saturate {
1073
+ syntax: "*";
1074
+ inherits: false;
1075
+ }
1076
+ @property --tw-sepia {
1077
+ syntax: "*";
1078
+ inherits: false;
1079
+ }
1080
+ @property --tw-drop-shadow {
1081
+ syntax: "*";
1082
+ inherits: false;
1083
+ }
1084
+ @property --tw-drop-shadow-color {
1085
+ syntax: "*";
1086
+ inherits: false;
1087
+ }
1088
+ @property --tw-drop-shadow-alpha {
1089
+ syntax: "<percentage>";
1090
+ inherits: false;
1091
+ initial-value: 100%;
1092
+ }
1093
+ @property --tw-drop-shadow-size {
1094
+ syntax: "*";
1095
+ inherits: false;
1096
+ }
1165
1097
  @property --tw-scale-x {
1166
1098
  syntax: "*";
1167
1099
  inherits: false;
@@ -1204,6 +1136,19 @@
1204
1136
  --tw-ring-offset-shadow: 0 0 #0000;
1205
1137
  --tw-duration: initial;
1206
1138
  --tw-ease: initial;
1139
+ --tw-blur: initial;
1140
+ --tw-brightness: initial;
1141
+ --tw-contrast: initial;
1142
+ --tw-grayscale: initial;
1143
+ --tw-hue-rotate: initial;
1144
+ --tw-invert: initial;
1145
+ --tw-opacity: initial;
1146
+ --tw-saturate: initial;
1147
+ --tw-sepia: initial;
1148
+ --tw-drop-shadow: initial;
1149
+ --tw-drop-shadow-color: initial;
1150
+ --tw-drop-shadow-alpha: 100%;
1151
+ --tw-drop-shadow-size: initial;
1207
1152
  --tw-scale-x: 1;
1208
1153
  --tw-scale-y: 1;
1209
1154
  --tw-scale-z: 1;
@@ -85,6 +85,10 @@ declare type RefableElement_2 = ReactElement & {
85
85
  ref?: RefObject<HTMLElement> | ((instance: HTMLElement | null) => void);
86
86
  };
87
87
 
88
+ export declare type ResolvedTheme = 'light' | 'dark';
89
+
90
+ export declare type Theme = 'light' | 'dark' | 'system';
91
+
88
92
  /**
89
93
  * Custom hook to fetch account information for Algorand address
90
94
  *
@@ -107,6 +111,15 @@ export declare function useNfd(options?: {
107
111
  view?: NfdView;
108
112
  }): UseQueryResult<NfdRecord | null>;
109
113
 
114
+ /**
115
+ * Hook to resolve the actual theme value, handling 'system' preference detection.
116
+ * When theme is 'system', it listens to the user's OS/browser color scheme preference.
117
+ *
118
+ * @param theme - The theme setting: 'light', 'dark', or 'system'
119
+ * @returns The resolved theme: 'light' or 'dark'
120
+ */
121
+ export declare function useResolvedTheme(theme: Theme): ResolvedTheme;
122
+
110
123
  /**
111
124
  * Hook to access the WalletUI context
112
125
  * @throws Error if used outside of WalletUIProvider
@@ -124,6 +137,8 @@ declare interface WalletListProps {
124
137
 
125
138
  declare interface WalletUIContextType {
126
139
  queryClient: QueryClient;
140
+ theme: Theme;
141
+ resolvedTheme: ResolvedTheme;
127
142
  }
128
143
 
129
144
  /**
@@ -133,8 +148,13 @@ declare interface WalletUIContextType {
133
148
  *
134
149
  * Automatically prefetches data for all accounts in connected wallets for smoother
135
150
  * account switching experience.
151
+ *
152
+ * Supports theme configuration via the `theme` prop:
153
+ * - 'light': Always use light mode
154
+ * - 'dark': Always use dark mode
155
+ * - 'system': Follow the user's OS/browser preference (default)
136
156
  */
137
- export declare function WalletUIProvider({ children, queryClient: externalQueryClient, enablePrefetching, prefetchNfdView, }: WalletUIProviderProps): JSX.Element;
157
+ export declare function WalletUIProvider({ children, queryClient: externalQueryClient, enablePrefetching, prefetchNfdView, theme, }: WalletUIProviderProps): JSX.Element;
138
158
 
139
159
  declare interface WalletUIProviderProps {
140
160
  children: ReactNode;
@@ -147,6 +167,16 @@ declare interface WalletUIProviderProps {
147
167
  * NFD view type for prefetching (defaults to 'thumbnail')
148
168
  */
149
169
  prefetchNfdView?: NfdView;
170
+ /**
171
+ * Theme setting for wallet UI components.
172
+ * - 'light': Always use light mode
173
+ * - 'dark': Always use dark mode
174
+ * - 'system': Follow the user's OS/browser preference (default)
175
+ *
176
+ * The library also respects the `.dark` class on ancestor elements (Tailwind convention),
177
+ * which will enable dark mode unless explicitly overridden with theme="light".
178
+ */
179
+ theme?: Theme;
150
180
  }
151
181
 
152
182
  export { }
@@ -85,6 +85,10 @@ declare type RefableElement_2 = ReactElement & {
85
85
  ref?: RefObject<HTMLElement> | ((instance: HTMLElement | null) => void);
86
86
  };
87
87
 
88
+ export declare type ResolvedTheme = 'light' | 'dark';
89
+
90
+ export declare type Theme = 'light' | 'dark' | 'system';
91
+
88
92
  /**
89
93
  * Custom hook to fetch account information for Algorand address
90
94
  *
@@ -107,6 +111,15 @@ export declare function useNfd(options?: {
107
111
  view?: NfdView;
108
112
  }): UseQueryResult<NfdRecord | null>;
109
113
 
114
+ /**
115
+ * Hook to resolve the actual theme value, handling 'system' preference detection.
116
+ * When theme is 'system', it listens to the user's OS/browser color scheme preference.
117
+ *
118
+ * @param theme - The theme setting: 'light', 'dark', or 'system'
119
+ * @returns The resolved theme: 'light' or 'dark'
120
+ */
121
+ export declare function useResolvedTheme(theme: Theme): ResolvedTheme;
122
+
110
123
  /**
111
124
  * Hook to access the WalletUI context
112
125
  * @throws Error if used outside of WalletUIProvider
@@ -124,6 +137,8 @@ declare interface WalletListProps {
124
137
 
125
138
  declare interface WalletUIContextType {
126
139
  queryClient: QueryClient;
140
+ theme: Theme;
141
+ resolvedTheme: ResolvedTheme;
127
142
  }
128
143
 
129
144
  /**
@@ -133,8 +148,13 @@ declare interface WalletUIContextType {
133
148
  *
134
149
  * Automatically prefetches data for all accounts in connected wallets for smoother
135
150
  * account switching experience.
151
+ *
152
+ * Supports theme configuration via the `theme` prop:
153
+ * - 'light': Always use light mode
154
+ * - 'dark': Always use dark mode
155
+ * - 'system': Follow the user's OS/browser preference (default)
136
156
  */
137
- export declare function WalletUIProvider({ children, queryClient: externalQueryClient, enablePrefetching, prefetchNfdView, }: WalletUIProviderProps): JSX.Element;
157
+ export declare function WalletUIProvider({ children, queryClient: externalQueryClient, enablePrefetching, prefetchNfdView, theme, }: WalletUIProviderProps): JSX.Element;
138
158
 
139
159
  declare interface WalletUIProviderProps {
140
160
  children: ReactNode;
@@ -147,6 +167,16 @@ declare interface WalletUIProviderProps {
147
167
  * NFD view type for prefetching (defaults to 'thumbnail')
148
168
  */
149
169
  prefetchNfdView?: NfdView;
170
+ /**
171
+ * Theme setting for wallet UI components.
172
+ * - 'light': Always use light mode
173
+ * - 'dark': Always use dark mode
174
+ * - 'system': Follow the user's OS/browser preference (default)
175
+ *
176
+ * The library also respects the `.dark` class on ancestor elements (Tailwind convention),
177
+ * which will enable dark mode unless explicitly overridden with theme="light".
178
+ */
179
+ theme?: Theme;
150
180
  }
151
181
 
152
182
  export { }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@txnlab/use-wallet-ui-react",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "React components for use-wallet UI",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.cjs",
@@ -18,10 +18,12 @@
18
18
  }
19
19
  },
20
20
  "./dist/style.css": "./dist/style.css",
21
+ "./theme.css": "./src/theme.css",
21
22
  "./package.json": "./package.json"
22
23
  },
23
24
  "files": [
24
25
  "dist",
26
+ "src/theme.css",
25
27
  "README.md"
26
28
  ],
27
29
  "keywords": [