@rovula/ui 0.1.21 → 0.1.22

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.
Files changed (80) hide show
  1. package/dist/cjs/bundle.css +175 -26
  2. package/dist/cjs/bundle.js +675 -675
  3. package/dist/cjs/bundle.js.map +1 -1
  4. package/dist/cjs/types/components/Badge/Badge.d.ts +40 -0
  5. package/dist/cjs/types/components/Badge/Badge.stories.d.ts +295 -0
  6. package/dist/cjs/types/components/Badge/Badge.styles.d.ts +7 -0
  7. package/dist/cjs/types/components/Badge/index.d.ts +2 -0
  8. package/dist/cjs/types/components/Dropdown/Dropdown.d.ts +4 -8
  9. package/dist/cjs/types/components/Dropdown/Dropdown.stories.d.ts +1 -6
  10. package/dist/cjs/types/components/DropdownMenu/DropdownMenu.d.ts +5 -1
  11. package/dist/cjs/types/components/DropdownMenu/DropdownMenu.stories.d.ts +16 -0
  12. package/dist/cjs/types/index.d.ts +3 -1
  13. package/dist/cjs/types/patterns/menu/Menu.d.ts +70 -0
  14. package/dist/cjs/types/{components/Menu → patterns/menu}/Menu.stories.d.ts +17 -10
  15. package/dist/cjs/types/utils/mergeRefs.d.ts +20 -0
  16. package/dist/components/Avatar/Avatar.styles.js +2 -2
  17. package/dist/components/Badge/Badge.js +36 -0
  18. package/dist/components/Badge/Badge.stories.js +51 -0
  19. package/dist/components/Badge/Badge.styles.js +62 -0
  20. package/dist/components/Badge/index.js +2 -0
  21. package/dist/components/Dropdown/Dropdown.js +54 -163
  22. package/dist/components/Dropdown/Dropdown.stories.js +29 -0
  23. package/dist/components/DropdownMenu/DropdownMenu.js +22 -9
  24. package/dist/components/DropdownMenu/DropdownMenu.stories.js +54 -10
  25. package/dist/components/TextInput/TextInput.js +6 -3
  26. package/dist/esm/bundle.css +175 -26
  27. package/dist/esm/bundle.js +1545 -1545
  28. package/dist/esm/bundle.js.map +1 -1
  29. package/dist/esm/types/components/Badge/Badge.d.ts +40 -0
  30. package/dist/esm/types/components/Badge/Badge.stories.d.ts +295 -0
  31. package/dist/esm/types/components/Badge/Badge.styles.d.ts +7 -0
  32. package/dist/esm/types/components/Badge/index.d.ts +2 -0
  33. package/dist/esm/types/components/Dropdown/Dropdown.d.ts +4 -8
  34. package/dist/esm/types/components/Dropdown/Dropdown.stories.d.ts +1 -6
  35. package/dist/esm/types/components/DropdownMenu/DropdownMenu.d.ts +5 -1
  36. package/dist/esm/types/components/DropdownMenu/DropdownMenu.stories.d.ts +16 -0
  37. package/dist/esm/types/index.d.ts +3 -1
  38. package/dist/esm/types/patterns/menu/Menu.d.ts +70 -0
  39. package/dist/esm/types/{components/Menu → patterns/menu}/Menu.stories.d.ts +17 -10
  40. package/dist/esm/types/utils/mergeRefs.d.ts +20 -0
  41. package/dist/index.d.ts +116 -73
  42. package/dist/index.js +2 -1
  43. package/dist/patterns/menu/Menu.js +95 -0
  44. package/dist/patterns/menu/Menu.stories.js +611 -0
  45. package/dist/src/theme/global.css +289 -37
  46. package/dist/utils/mergeRefs.js +42 -0
  47. package/package.json +1 -1
  48. package/src/components/Avatar/Avatar.styles.ts +2 -2
  49. package/src/components/Badge/Badge.stories.tsx +128 -0
  50. package/src/components/Badge/Badge.styles.ts +70 -0
  51. package/src/components/Badge/Badge.tsx +103 -0
  52. package/src/components/Badge/index.ts +3 -0
  53. package/src/components/Dropdown/Dropdown.stories.tsx +170 -1
  54. package/src/components/Dropdown/Dropdown.tsx +186 -276
  55. package/src/components/DropdownMenu/DropdownMenu.stories.tsx +1050 -113
  56. package/src/components/DropdownMenu/DropdownMenu.tsx +116 -52
  57. package/src/components/TextInput/TextInput.tsx +6 -3
  58. package/src/index.ts +3 -1
  59. package/src/patterns/menu/Menu.stories.tsx +1100 -0
  60. package/src/patterns/menu/Menu.tsx +282 -0
  61. package/src/theme/themes/xspector/baseline.css +0 -1
  62. package/src/theme/tokens/baseline.css +2 -1
  63. package/src/theme/tokens/components/badge.css +54 -0
  64. package/src/theme/tokens/components/dropdown-menu.css +15 -4
  65. package/src/utils/mergeRefs.ts +46 -0
  66. package/dist/cjs/types/components/Menu/Menu.d.ts +0 -65
  67. package/dist/cjs/types/components/Menu/helpers.d.ts +0 -19
  68. package/dist/cjs/types/components/Menu/index.d.ts +0 -4
  69. package/dist/components/Menu/Menu.js +0 -64
  70. package/dist/components/Menu/Menu.stories.js +0 -406
  71. package/dist/components/Menu/helpers.js +0 -28
  72. package/dist/components/Menu/index.js +0 -3
  73. package/dist/esm/types/components/Menu/Menu.d.ts +0 -65
  74. package/dist/esm/types/components/Menu/helpers.d.ts +0 -19
  75. package/dist/esm/types/components/Menu/index.d.ts +0 -4
  76. package/src/components/Menu/Menu.stories.tsx +0 -586
  77. package/src/components/Menu/Menu.tsx +0 -235
  78. package/src/components/Menu/helpers.ts +0 -45
  79. package/src/components/Menu/index.ts +0 -7
  80. package/src/theme/themes/xspector/components/dropdown-menu.css +0 -28
@@ -2951,20 +2951,29 @@
2951
2951
  /* Naming Convention: --[component]-[state]-[property] */
2952
2952
  /* Element: [default, hover, selected, disabled] */
2953
2953
  /* ------------------------------------------------------------------ */
2954
- --dropdown-menu-seperator-bg: var(--base-color-workspace-stroke);
2955
- --dropdown-menu-shadow: 0px 2px 24px 0px rgba(145, 158, 171, 0.24);
2954
+ --dropdown-menu-seperator-bg: var(--modal-line);
2955
+ --dropdown-menu-shadow: 0px 12px 24px -4px rgba(0, 0, 0, 0.12);
2956
2956
  /* Default State */
2957
2957
  --dropdown-menu-default-bg: transparent;
2958
2958
  --dropdown-menu-default-text: var(--text-g-contrast-high);
2959
2959
  /* Hover State */
2960
- --dropdown-menu-hover-bg: var(--state-primary-hover-bg);
2960
+ --dropdown-menu-hover-bg: var(--modal-highlight);
2961
2961
  --dropdown-menu-hover-text: var(--text-g-contrast-high);
2962
2962
  /* Selected State */
2963
- --dropdown-menu-selected-bg: transparent;
2963
+ --dropdown-menu-selected-bg: var(--modal-highlight);
2964
2964
  --dropdown-menu-selected-text: var(--text-g-contrast-high);
2965
2965
  /* Disabled State */
2966
2966
  --dropdown-menu-disabled-bg: transparent;
2967
2967
  --dropdown-menu-disabled-text: var(--state-disable-solid);
2968
+ /* Checkbox Item */
2969
+ --dropdown-menu-checkbox-border: var(--function-default-solid);
2970
+ --dropdown-menu-checkbox-checked-bg: var(--function-active-solid);
2971
+ --dropdown-menu-checkbox-checked-icon: var(--function-active-icon);
2972
+ --dropdown-menu-checkbox-disabled-border: var(--state-disable-outline);
2973
+ --dropdown-menu-checkbox-disabled-checked-bg: var(--state-disable-solid);
2974
+ /* Radio Item */
2975
+ --dropdown-menu-radio-disabled-text: var(--state-disable-solid);
2976
+ --dropdown-menu-radio-selected-disabled-text: var(--state-disable-outline);
2968
2977
  /* ------------------------------------------------------------------ */
2969
2978
  /* Switch Component Tokens */
2970
2979
  /* ------------------------------------------------------------------ */
@@ -3000,6 +3009,52 @@
3000
3009
  /* Thumb colours */
3001
3010
  --scrollbar-thumb-default-color: color-mix(in srgb, var(--text-g-contrast-low) 48%, transparent);
3002
3011
  --scrollbar-thumb-hover-color: color-mix(in srgb, var(--text-g-contrast-high) 48%, transparent);
3012
+ /* --------------------------------------------------------------------------------- */
3013
+ /* Badge Component Tokens */
3014
+ /* --------------------------------------------------------------------------------- */
3015
+ /* Naming Convention: --badge-[color]-[property] */
3016
+ /* Colors: [default, success, warning, info, error] */
3017
+ /* Severity: [highest, high, medium, low, lowest] */
3018
+ /* --------------------------------------------------------------------------------- */
3019
+ /* ------------------------------------------------------------------ */
3020
+ /* Status Badge — Default (grey/white) */
3021
+ /* ------------------------------------------------------------------ */
3022
+ --badge-default-bg: rgba(145, 158, 171, 0.12);
3023
+ --badge-default-border: rgba(158, 158, 158, 0.48);
3024
+ --badge-default-text: var(--text-contrast-max, white);
3025
+ /* ------------------------------------------------------------------ */
3026
+ /* Status Badge — Success (green) */
3027
+ /* ------------------------------------------------------------------ */
3028
+ --badge-success-bg: rgba(84, 214, 44, 0.12);
3029
+ --badge-success-border: rgba(84, 214, 44, 0.48);
3030
+ --badge-success-text: var(--state-success-default);
3031
+ /* ------------------------------------------------------------------ */
3032
+ /* Status Badge — Warning (yellow) */
3033
+ /* ------------------------------------------------------------------ */
3034
+ --badge-warning-bg: rgba(255, 193, 7, 0.12);
3035
+ --badge-warning-border: rgba(255, 193, 7, 0.48);
3036
+ --badge-warning-text: var(--state-warning-default);
3037
+ /* ------------------------------------------------------------------ */
3038
+ /* Status Badge — Info (blue) */
3039
+ /* ------------------------------------------------------------------ */
3040
+ --badge-info-bg: rgba(41, 152, 255, 0.12);
3041
+ --badge-info-border: rgba(41, 152, 255, 0.48);
3042
+ --badge-info-text: var(--state-info-default);
3043
+ /* ------------------------------------------------------------------ */
3044
+ /* Status Badge — Error (red) */
3045
+ /* ------------------------------------------------------------------ */
3046
+ --badge-error-bg: rgba(255, 72, 66, 0.12);
3047
+ --badge-error-border: rgba(255, 72, 66, 0.48);
3048
+ --badge-error-text: var(--state-error-default);
3049
+ /* ------------------------------------------------------------------ */
3050
+ /* Severity Badge — solid pill */
3051
+ /* ------------------------------------------------------------------ */
3052
+ --badge-severity-text: var(--text-white, white);
3053
+ --badge-severity-highest-bg: var(--state-error-default);
3054
+ --badge-severity-high-bg: var(--ramps-warning-800);
3055
+ --badge-severity-medium-bg: var(--state-warning-default);
3056
+ --badge-severity-low-bg: var(--state-success-default);
3057
+ --badge-severity-lowest-bg: var(--state-info-default);
3003
3058
  }
3004
3059
 
3005
3060
  /* TODO: remove this */
@@ -3694,10 +3749,6 @@ input[type=number] {
3694
3749
  bottom: 40px;
3695
3750
  }
3696
3751
 
3697
- .bottom-full {
3698
- bottom: 100%;
3699
- }
3700
-
3701
3752
  .left-0 {
3702
3753
  left: 0px;
3703
3754
  }
@@ -3794,10 +3845,6 @@ input[type=number] {
3794
3845
  z-index: 10;
3795
3846
  }
3796
3847
 
3797
- .z-40 {
3798
- z-index: 40;
3799
- }
3800
-
3801
3848
  .z-50 {
3802
3849
  z-index: 50;
3803
3850
  }
@@ -3810,6 +3857,10 @@ input[type=number] {
3810
3857
  z-index: 100;
3811
3858
  }
3812
3859
 
3860
+ .z-\[51\] {
3861
+ z-index: 51;
3862
+ }
3863
+
3813
3864
  .col-span-3 {
3814
3865
  grid-column: span 3 / span 3;
3815
3866
  }
@@ -3818,11 +3869,6 @@ input[type=number] {
3818
3869
  margin: 0px;
3819
3870
  }
3820
3871
 
3821
- .-mx-2 {
3822
- margin-left: -0.5rem;
3823
- margin-right: -0.5rem;
3824
- }
3825
-
3826
3872
  .mx-2 {
3827
3873
  margin-left: 0.5rem;
3828
3874
  margin-right: 0.5rem;
@@ -3864,6 +3910,10 @@ input[type=number] {
3864
3910
  margin-bottom: 0.5rem;
3865
3911
  }
3866
3912
 
3913
+ .mb-3 {
3914
+ margin-bottom: 0.75rem;
3915
+ }
3916
+
3867
3917
  .mb-4 {
3868
3918
  margin-bottom: 1rem;
3869
3919
  }
@@ -3940,6 +3990,10 @@ input[type=number] {
3940
3990
  display: inline-block;
3941
3991
  }
3942
3992
 
3993
+ .inline {
3994
+ display: inline;
3995
+ }
3996
+
3943
3997
  .flex {
3944
3998
  display: flex;
3945
3999
  }
@@ -4208,10 +4262,6 @@ input[type=number] {
4208
4262
  width: 2.5rem;
4209
4263
  }
4210
4264
 
4211
- .w-2 {
4212
- width: 0.5rem;
4213
- }
4214
-
4215
4265
  .w-20 {
4216
4266
  width: 5rem;
4217
4267
  }
@@ -4232,6 +4282,10 @@ input[type=number] {
4232
4282
  width: 1.25rem;
4233
4283
  }
4234
4284
 
4285
+ .w-52 {
4286
+ width: 13rem;
4287
+ }
4288
+
4235
4289
  .w-6 {
4236
4290
  width: 1.5rem;
4237
4291
  }
@@ -4260,6 +4314,10 @@ input[type=number] {
4260
4314
  width: 200px;
4261
4315
  }
4262
4316
 
4317
+ .w-\[220px\] {
4318
+ width: 220px;
4319
+ }
4320
+
4263
4321
  .w-\[230px\] {
4264
4322
  width: 230px;
4265
4323
  }
@@ -4445,6 +4503,10 @@ input[type=number] {
4445
4503
  cursor: default;
4446
4504
  }
4447
4505
 
4506
+ .cursor-grab {
4507
+ cursor: grab;
4508
+ }
4509
+
4448
4510
  .cursor-not-allowed {
4449
4511
  cursor: not-allowed;
4450
4512
  }
@@ -4583,6 +4645,10 @@ input[type=number] {
4583
4645
  gap: 0px;
4584
4646
  }
4585
4647
 
4648
+ .gap-0\.5 {
4649
+ gap: 0.125rem;
4650
+ }
4651
+
4586
4652
  .gap-1 {
4587
4653
  gap: 0.25rem;
4588
4654
  }
@@ -4745,6 +4811,10 @@ input[type=number] {
4745
4811
  border-radius: 1px;
4746
4812
  }
4747
4813
 
4814
+ .rounded-\[2px\] {
4815
+ border-radius: 2px;
4816
+ }
4817
+
4748
4818
  .rounded-\[8px\] {
4749
4819
  border-radius: 8px;
4750
4820
  }
@@ -4948,6 +5018,38 @@ input[type=number] {
4948
5018
  border-color: color-mix(in srgb, var(--function-default-hover) calc(100% * var(--tw-border-opacity, 1)), transparent) !important;
4949
5019
  }
4950
5020
 
5021
+ .border-\[var\(--badge-default-border\)\] {
5022
+ border-color: var(--badge-default-border);
5023
+ }
5024
+
5025
+ .border-\[var\(--badge-error-border\)\] {
5026
+ border-color: var(--badge-error-border);
5027
+ }
5028
+
5029
+ .border-\[var\(--badge-info-border\)\] {
5030
+ border-color: var(--badge-info-border);
5031
+ }
5032
+
5033
+ .border-\[var\(--badge-success-border\)\] {
5034
+ border-color: var(--badge-success-border);
5035
+ }
5036
+
5037
+ .border-\[var\(--badge-warning-border\)\] {
5038
+ border-color: var(--badge-warning-border);
5039
+ }
5040
+
5041
+ .border-\[var\(--dropdown-menu-checkbox-border\)\] {
5042
+ border-color: var(--dropdown-menu-checkbox-border);
5043
+ }
5044
+
5045
+ .border-\[var\(--dropdown-menu-checkbox-checked-bg\)\] {
5046
+ border-color: var(--dropdown-menu-checkbox-checked-bg);
5047
+ }
5048
+
5049
+ .border-\[var\(--dropdown-menu-checkbox-disabled-border\)\] {
5050
+ border-color: var(--dropdown-menu-checkbox-disabled-border);
5051
+ }
5052
+
4951
5053
  .border-\[var\(--dropdown-menu-seperator-bg\)\] {
4952
5054
  border-color: var(--dropdown-menu-seperator-bg);
4953
5055
  }
@@ -5286,10 +5388,62 @@ input[type=number] {
5286
5388
  background-color: rgb(var(--navbar-bg-color));
5287
5389
  }
5288
5390
 
5391
+ .bg-\[var\(--badge-default-bg\)\] {
5392
+ background-color: var(--badge-default-bg);
5393
+ }
5394
+
5395
+ .bg-\[var\(--badge-error-bg\)\] {
5396
+ background-color: var(--badge-error-bg);
5397
+ }
5398
+
5399
+ .bg-\[var\(--badge-info-bg\)\] {
5400
+ background-color: var(--badge-info-bg);
5401
+ }
5402
+
5403
+ .bg-\[var\(--badge-severity-high-bg\)\] {
5404
+ background-color: var(--badge-severity-high-bg);
5405
+ }
5406
+
5407
+ .bg-\[var\(--badge-severity-highest-bg\)\] {
5408
+ background-color: var(--badge-severity-highest-bg);
5409
+ }
5410
+
5411
+ .bg-\[var\(--badge-severity-low-bg\)\] {
5412
+ background-color: var(--badge-severity-low-bg);
5413
+ }
5414
+
5415
+ .bg-\[var\(--badge-severity-lowest-bg\)\] {
5416
+ background-color: var(--badge-severity-lowest-bg);
5417
+ }
5418
+
5419
+ .bg-\[var\(--badge-severity-medium-bg\)\] {
5420
+ background-color: var(--badge-severity-medium-bg);
5421
+ }
5422
+
5423
+ .bg-\[var\(--badge-success-bg\)\] {
5424
+ background-color: var(--badge-success-bg);
5425
+ }
5426
+
5427
+ .bg-\[var\(--badge-warning-bg\)\] {
5428
+ background-color: var(--badge-warning-bg);
5429
+ }
5430
+
5431
+ .bg-\[var\(--dropdown-menu-checkbox-checked-bg\)\] {
5432
+ background-color: var(--dropdown-menu-checkbox-checked-bg);
5433
+ }
5434
+
5435
+ .bg-\[var\(--dropdown-menu-checkbox-disabled-checked-bg\)\] {
5436
+ background-color: var(--dropdown-menu-checkbox-disabled-checked-bg);
5437
+ }
5438
+
5289
5439
  .bg-\[var\(--dropdown-menu-default-bg\)\] {
5290
5440
  background-color: var(--dropdown-menu-default-bg);
5291
5441
  }
5292
5442
 
5443
+ .bg-\[var\(--dropdown-menu-hover-bg\)\] {
5444
+ background-color: var(--dropdown-menu-hover-bg);
5445
+ }
5446
+
5293
5447
  .bg-\[var\(--dropdown-menu-selected-bg\)\] {
5294
5448
  background-color: var(--dropdown-menu-selected-bg);
5295
5449
  }
@@ -5447,6 +5601,10 @@ input[type=number] {
5447
5601
  background-color: color-mix(in srgb, var(--transparent-black-8) calc(100% * var(--tw-bg-opacity, 1)), transparent);
5448
5602
  }
5449
5603
 
5604
+ .bg-blue-400\/10 {
5605
+ background-color: rgb(96 165 250 / 0.1);
5606
+ }
5607
+
5450
5608
  .bg-button-error-flat-default {
5451
5609
  --tw-bg-opacity: 1;
5452
5610
  background-color: color-mix(in srgb, var(--button-error-flat-default-bg) calc(100% * var(--tw-bg-opacity, 1)), transparent);
@@ -5722,6 +5880,10 @@ input[type=number] {
5722
5880
  background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));
5723
5881
  }
5724
5882
 
5883
+ .bg-green-400\/10 {
5884
+ background-color: rgb(74 222 128 / 0.1);
5885
+ }
5886
+
5725
5887
  .bg-green-500 {
5726
5888
  --tw-bg-opacity: 1;
5727
5889
  background-color: rgb(34 197 94 / var(--tw-bg-opacity, 1));
@@ -6246,6 +6408,10 @@ input[type=number] {
6246
6408
  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
6247
6409
  }
6248
6410
 
6411
+ .bg-red-400\/10 {
6412
+ background-color: rgb(248 113 113 / 0.1);
6413
+ }
6414
+
6249
6415
  .bg-secondary {
6250
6416
  --tw-bg-opacity: 1;
6251
6417
  background-color: color-mix(in srgb, var(--state-secondary-default) calc(100% * var(--tw-bg-opacity, 1)), transparent);
@@ -6845,6 +7011,10 @@ input[type=number] {
6845
7011
  background-color: color-mix(in srgb, var(--transparent-white-8) calc(100% * var(--tw-bg-opacity, 1)), transparent);
6846
7012
  }
6847
7013
 
7014
+ .bg-yellow-400\/10 {
7015
+ background-color: rgb(250 204 21 / 0.1);
7016
+ }
7017
+
6848
7018
  .bg-gradient-to-r {
6849
7019
  background-image: linear-gradient(to right, var(--tw-gradient-stops));
6850
7020
  }
@@ -7190,6 +7360,11 @@ input[type=number] {
7190
7360
  padding-right: 8px;
7191
7361
  }
7192
7362
 
7363
+ .py-0\.5 {
7364
+ padding-top: 0.125rem;
7365
+ padding-bottom: 0.125rem;
7366
+ }
7367
+
7193
7368
  .py-1 {
7194
7369
  padding-top: 0.25rem;
7195
7370
  padding-bottom: 0.25rem;
@@ -7312,20 +7487,20 @@ input[type=number] {
7312
7487
  padding-inline-end: 68px;
7313
7488
  }
7314
7489
 
7315
- .pl-8 {
7316
- padding-left: 2rem;
7490
+ .pl-4 {
7491
+ padding-left: 1rem;
7317
7492
  }
7318
7493
 
7319
- .pl-9 {
7320
- padding-left: 2.25rem;
7494
+ .pl-8 {
7495
+ padding-left: 2rem;
7321
7496
  }
7322
7497
 
7323
7498
  .pr-4 {
7324
7499
  padding-right: 1rem;
7325
7500
  }
7326
7501
 
7327
- .pr-xxl {
7328
- padding-right: var(--spacing-spacing-xxl);
7502
+ .pr-8 {
7503
+ padding-right: 2rem;
7329
7504
  }
7330
7505
 
7331
7506
  .pt-2 {
@@ -7587,6 +7762,11 @@ input[type=number] {
7587
7762
  text-transform: capitalize;
7588
7763
  }
7589
7764
 
7765
+ .tabular-nums {
7766
+ --tw-numeric-spacing: tabular-nums;
7767
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
7768
+ }
7769
+
7590
7770
  .leading-\[3rem\] {
7591
7771
  line-height: 3rem;
7592
7772
  }
@@ -7646,10 +7826,50 @@ input[type=number] {
7646
7826
  color: rgb(var(--navbar-text-color));
7647
7827
  }
7648
7828
 
7829
+ .text-\[var\(--badge-default-text\)\] {
7830
+ color: var(--badge-default-text);
7831
+ }
7832
+
7833
+ .text-\[var\(--badge-error-text\)\] {
7834
+ color: var(--badge-error-text);
7835
+ }
7836
+
7837
+ .text-\[var\(--badge-info-text\)\] {
7838
+ color: var(--badge-info-text);
7839
+ }
7840
+
7841
+ .text-\[var\(--badge-severity-text\)\] {
7842
+ color: var(--badge-severity-text);
7843
+ }
7844
+
7845
+ .text-\[var\(--badge-success-text\)\] {
7846
+ color: var(--badge-success-text);
7847
+ }
7848
+
7849
+ .text-\[var\(--badge-warning-text\)\] {
7850
+ color: var(--badge-warning-text);
7851
+ }
7852
+
7853
+ .text-\[var\(--dropdown-menu-checkbox-checked-bg\)\] {
7854
+ color: var(--dropdown-menu-checkbox-checked-bg);
7855
+ }
7856
+
7857
+ .text-\[var\(--dropdown-menu-checkbox-checked-icon\)\] {
7858
+ color: var(--dropdown-menu-checkbox-checked-icon);
7859
+ }
7860
+
7649
7861
  .text-\[var\(--dropdown-menu-default-text\)\] {
7650
7862
  color: var(--dropdown-menu-default-text);
7651
7863
  }
7652
7864
 
7865
+ .text-\[var\(--dropdown-menu-hover-text\)\] {
7866
+ color: var(--dropdown-menu-hover-text);
7867
+ }
7868
+
7869
+ .text-\[var\(--dropdown-menu-radio-selected-disabled-text\)\] {
7870
+ color: var(--dropdown-menu-radio-selected-disabled-text);
7871
+ }
7872
+
7653
7873
  .text-\[var\(--dropdown-menu-selected-text\)\] {
7654
7874
  color: var(--dropdown-menu-selected-text);
7655
7875
  }
@@ -7716,6 +7936,11 @@ input[type=number] {
7716
7936
  color: rgb(0 0 0 / var(--tw-text-opacity, 1));
7717
7937
  }
7718
7938
 
7939
+ .text-blue-400 {
7940
+ --tw-text-opacity: 1;
7941
+ color: rgb(96 165 250 / var(--tw-text-opacity, 1));
7942
+ }
7943
+
7719
7944
  .text-blue-500 {
7720
7945
  --tw-text-opacity: 1;
7721
7946
  color: rgb(59 130 246 / var(--tw-text-opacity, 1));
@@ -7870,6 +8095,11 @@ input[type=number] {
7870
8095
  color: rgb(55 65 81 / var(--tw-text-opacity, 1));
7871
8096
  }
7872
8097
 
8098
+ .text-green-400 {
8099
+ --tw-text-opacity: 1;
8100
+ color: rgb(74 222 128 / var(--tw-text-opacity, 1));
8101
+ }
8102
+
7873
8103
  .text-green-500 {
7874
8104
  --tw-text-opacity: 1;
7875
8105
  color: rgb(34 197 94 / var(--tw-text-opacity, 1));
@@ -7919,6 +8149,11 @@ input[type=number] {
7919
8149
  color: color-mix(in srgb, var(--state-primary-default) calc(100% * var(--tw-text-opacity, 1)), transparent);
7920
8150
  }
7921
8151
 
8152
+ .text-red-400 {
8153
+ --tw-text-opacity: 1;
8154
+ color: rgb(248 113 113 / var(--tw-text-opacity, 1));
8155
+ }
8156
+
7922
8157
  .text-red-500 {
7923
8158
  --tw-text-opacity: 1;
7924
8159
  color: rgb(239 68 68 / var(--tw-text-opacity, 1));
@@ -7999,6 +8234,11 @@ input[type=number] {
7999
8234
  color: color-mix(in srgb, var(--text-g-contrast-medium) calc(100% * var(--tw-text-opacity, 1)), transparent);
8000
8235
  }
8001
8236
 
8237
+ .text-text-white {
8238
+ --tw-text-opacity: 1;
8239
+ color: color-mix(in srgb, var(--text-white) calc(100% * var(--tw-text-opacity, 1)), transparent);
8240
+ }
8241
+
8002
8242
  .text-warning {
8003
8243
  --tw-text-opacity: 1;
8004
8244
  color: color-mix(in srgb, var(--state-warning-default) calc(100% * var(--tw-text-opacity, 1)), transparent);
@@ -8009,6 +8249,11 @@ input[type=number] {
8009
8249
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
8010
8250
  }
8011
8251
 
8252
+ .text-yellow-400 {
8253
+ --tw-text-opacity: 1;
8254
+ color: rgb(250 204 21 / var(--tw-text-opacity, 1));
8255
+ }
8256
+
8012
8257
  .underline {
8013
8258
  text-decoration-line: underline;
8014
8259
  }
@@ -8025,10 +8270,6 @@ input[type=number] {
8025
8270
  opacity: 0;
8026
8271
  }
8027
8272
 
8028
- .opacity-50 {
8029
- opacity: 0.5;
8030
- }
8031
-
8032
8273
  .opacity-60 {
8033
8274
  opacity: 0.6;
8034
8275
  }
@@ -9223,10 +9464,19 @@ input[type=number] {
9223
9464
  color: color-mix(in srgb, var(--input-filled-text) calc(100% * var(--tw-text-opacity, 1)), transparent);
9224
9465
  }
9225
9466
 
9467
+ .hover\:text-text-g-contrast-high:hover {
9468
+ --tw-text-opacity: 1;
9469
+ color: color-mix(in srgb, var(--text-g-contrast-high) calc(100% * var(--tw-text-opacity, 1)), transparent);
9470
+ }
9471
+
9226
9472
  .hover\:opacity-100:hover {
9227
9473
  opacity: 1;
9228
9474
  }
9229
9475
 
9476
+ .hover\:opacity-80:hover {
9477
+ opacity: 0.8;
9478
+ }
9479
+
9230
9480
  .hover\:ring-\[var\(--action-button-outline-active-hover-border\)\]:hover {
9231
9481
  --tw-ring-color: var(--action-button-outline-active-hover-border);
9232
9482
  }
@@ -10955,6 +11205,10 @@ input[type=number] {
10955
11205
  color: var(--dropdown-menu-disabled-text) !important;
10956
11206
  }
10957
11207
 
11208
+ .data-\[disabled\]\:\!text-\[var\(--dropdown-menu-radio-disabled-text\)\][data-disabled] {
11209
+ color: var(--dropdown-menu-radio-disabled-text) !important;
11210
+ }
11211
+
10958
11212
  .data-\[disabled\]\:\!text-state-disable-outline[data-disabled] {
10959
11213
  --tw-text-opacity: 1 !important;
10960
11214
  color: color-mix(in srgb, var(--state-disable-outline) calc(100% * var(--tw-text-opacity, 1)), transparent) !important;
@@ -11065,6 +11319,10 @@ input[type=number] {
11065
11319
  color: color-mix(in srgb, var(--button-warning-solid-active-text) calc(100% * var(--tw-text-opacity, 1)), transparent);
11066
11320
  }
11067
11321
 
11322
+ .data-\[state\=\'checked\'\]\:data-\[disabled\]\:\!text-\[var\(--dropdown-menu-radio-selected-disabled-text\)\][data-disabled][data-state='checked'] {
11323
+ color: var(--dropdown-menu-radio-selected-disabled-text) !important;
11324
+ }
11325
+
11068
11326
  .data-\[state\=\'checked\'\]\:text-\[var\(--dropdown-menu-selected-text\)\][data-state='checked'] {
11069
11327
  color: var(--dropdown-menu-selected-text);
11070
11328
  }
@@ -11101,12 +11359,6 @@ input[type=number] {
11101
11359
  transition-property: none;
11102
11360
  }
11103
11361
 
11104
- .data-\[state\=\'checked\'\]\:typography-subtitle5[data-state='checked'] {
11105
- font-size: var(--subtitle5-size, 14px);
11106
- line-height: var(--subtitle5-line-height, 22px);
11107
- font-weight: var(--subtitle5-weight, 500);
11108
- }
11109
-
11110
11362
  .data-\[disabled\]\:before\:\!bg-\[var\(--switch-disabled-color\)\][data-disabled]::before {
11111
11363
  content: var(--tw-content);
11112
11364
  background-color: var(--switch-disabled-color) !important;
@@ -0,0 +1,42 @@
1
+ import { useCallback, useRef } from "react";
2
+ /**
3
+ * Merges multiple refs into a single callback ref.
4
+ * NOTE: This creates a new function on every call — do NOT use inline in render.
5
+ * Use `useStableMergedRef` instead when you need a stable ref identity.
6
+ */
7
+ export function mergeRefs(...refs) {
8
+ return (node) => {
9
+ refs.forEach((ref) => {
10
+ if (!ref)
11
+ return;
12
+ if (typeof ref === "function") {
13
+ ref(node);
14
+ }
15
+ else {
16
+ ref.current = node;
17
+ }
18
+ });
19
+ };
20
+ }
21
+ /**
22
+ * Returns a **stable** callback ref (never changes identity) that forwards the
23
+ * node to all given refs. Safe to use inline in JSX — will not cause
24
+ * detach/re-attach loops in libraries like Headless UI that watch refs.
25
+ *
26
+ * @example
27
+ * const MyInput = forwardRef((props, ref) => {
28
+ * const internalRef = useRef(null);
29
+ * const stableRef = useStableMergedRef(ref, internalRef);
30
+ * return <input ref={stableRef} />;
31
+ * });
32
+ */
33
+ export function useStableMergedRef(...refs) {
34
+ // Store the latest merge logic in a ref so the callback never goes stale,
35
+ // while the callback itself keeps a stable identity (empty useCallback deps).
36
+ const latestImpl = useRef();
37
+ latestImpl.current = mergeRefs(...refs);
38
+ return useCallback((node) => {
39
+ var _a;
40
+ (_a = latestImpl.current) === null || _a === void 0 ? void 0 : _a.call(latestImpl, node);
41
+ }, []); // ← empty deps = identity never changes = no detach/re-attach loop
42
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rovula/ui",
3
- "version": "0.1.21",
3
+ "version": "0.1.22",
4
4
  "main": "dist/cjs/bundle.js",
5
5
  "module": "dist/esm/bundle.js",
6
6
  "types": "dist/index.d.ts",
@@ -2,12 +2,12 @@ import { cva } from "class-variance-authority";
2
2
 
3
3
  export const avatarVariants = cva(
4
4
  [
5
- "flex items-center justify-center bg-grey2-700 text-common-black typography-subtitle2 truncate",
5
+ "flex items-center justify-center bg-grey2-900 text-text-white typography-subtitle6 truncate",
6
6
  ],
7
7
  {
8
8
  variants: {
9
9
  size: {
10
- xxs: "w-[24px] h-[24px] typography-subtitle3",
10
+ xxs: "w-[24px] h-[24px] typography-small3",
11
11
  xs: "w-[32px] h-[32px]",
12
12
  sm: "w-[40px] h-[40px]",
13
13
  md: "w-[48px] h-[48px]",