@ropav/styles 0.3.0 → 0.5.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.
Files changed (163) hide show
  1. package/README.md +160 -19
  2. package/dist/components/accordion.css +12 -5
  3. package/dist/components/alert-dialog.css +1 -1
  4. package/dist/components/alert.css +9 -1
  5. package/dist/components/autocomplete/autocomplete.styles.d.ts +33 -0
  6. package/dist/components/autocomplete/autocomplete.styles.d.ts.map +1 -1
  7. package/dist/components/autocomplete/autocomplete.styles.js +12 -0
  8. package/dist/components/autocomplete.css +39 -3
  9. package/dist/components/avatar.css +9 -0
  10. package/dist/components/badge.css +7 -0
  11. package/dist/components/button-group.css +6 -6
  12. package/dist/components/button.css +34 -11
  13. package/dist/components/calendar-year-picker.css +2 -1
  14. package/dist/components/calendar.css +8 -0
  15. package/dist/components/card.css +22 -1
  16. package/dist/components/chip.css +21 -0
  17. package/dist/components/close-button.css +8 -0
  18. package/dist/components/color-input-group/color-input-group.styles.d.ts +27 -0
  19. package/dist/components/color-input-group/color-input-group.styles.d.ts.map +1 -1
  20. package/dist/components/color-input-group/color-input-group.styles.js +6 -0
  21. package/dist/components/color-input-group.css +30 -1
  22. package/dist/components/color-swatch-picker.css +11 -0
  23. package/dist/components/combo-box/combo-box.styles.d.ts +27 -0
  24. package/dist/components/combo-box/combo-box.styles.d.ts.map +1 -1
  25. package/dist/components/combo-box/combo-box.styles.js +17 -7
  26. package/dist/components/combo-box.css +21 -1
  27. package/dist/components/date-input-group/date-input-group.styles.d.ts +27 -0
  28. package/dist/components/date-input-group/date-input-group.styles.d.ts.map +1 -1
  29. package/dist/components/date-input-group/date-input-group.styles.js +6 -0
  30. package/dist/components/date-input-group.css +30 -1
  31. package/dist/components/dropdown/dropdown.styles.d.ts.map +1 -1
  32. package/dist/components/dropdown/dropdown.styles.js +1 -1
  33. package/dist/components/dropdown.css +17 -12
  34. package/dist/components/index.css +4 -0
  35. package/dist/components/index.d.ts +4 -0
  36. package/dist/components/index.d.ts.map +1 -1
  37. package/dist/components/input/input.styles.d.ts +15 -0
  38. package/dist/components/input/input.styles.d.ts.map +1 -1
  39. package/dist/components/input/input.styles.js +6 -0
  40. package/dist/components/input-group/input-group.styles.d.ts +27 -0
  41. package/dist/components/input-group/input-group.styles.d.ts.map +1 -1
  42. package/dist/components/input-group/input-group.styles.js +6 -0
  43. package/dist/components/input-group.css +32 -1
  44. package/dist/components/input.css +23 -1
  45. package/dist/components/list-box/list-box.styles.d.ts +15 -0
  46. package/dist/components/list-box/list-box.styles.d.ts.map +1 -1
  47. package/dist/components/list-box/list-box.styles.js +15 -5
  48. package/dist/components/list-box-item.css +4 -2
  49. package/dist/components/list-box.css +19 -0
  50. package/dist/components/menu/menu.styles.d.ts +19 -1
  51. package/dist/components/menu/menu.styles.d.ts.map +1 -1
  52. package/dist/components/menu/menu.styles.js +9 -1
  53. package/dist/components/menu.css +25 -0
  54. package/dist/components/meter.css +12 -0
  55. package/dist/components/modal.css +1 -1
  56. package/dist/components/number-field/number-field.styles.d.ts +27 -0
  57. package/dist/components/number-field/number-field.styles.d.ts.map +1 -1
  58. package/dist/components/number-field/number-field.styles.js +6 -0
  59. package/dist/components/number-field.css +68 -1
  60. package/dist/components/pagination.css +10 -6
  61. package/dist/components/popover.css +15 -1
  62. package/dist/components/progress-bar.css +12 -0
  63. package/dist/components/progress-circle.css +12 -0
  64. package/dist/components/radio.css +7 -0
  65. package/dist/components/range-calendar.css +28 -0
  66. package/dist/components/search-field/search-field.styles.d.ts +27 -0
  67. package/dist/components/search-field/search-field.styles.d.ts.map +1 -1
  68. package/dist/components/search-field/search-field.styles.js +6 -0
  69. package/dist/components/search-field.css +33 -1
  70. package/dist/components/segmented-control/index.d.ts +2 -0
  71. package/dist/components/segmented-control/index.d.ts.map +1 -0
  72. package/dist/components/segmented-control/index.js +2 -0
  73. package/dist/components/segmented-control/segmented-control.styles.d.ts +73 -0
  74. package/dist/components/segmented-control/segmented-control.styles.d.ts.map +1 -0
  75. package/dist/components/segmented-control/segmented-control.styles.js +27 -0
  76. package/dist/components/segmented-control.css +193 -0
  77. package/dist/components/select/select.styles.d.ts +33 -0
  78. package/dist/components/select/select.styles.d.ts.map +1 -1
  79. package/dist/components/select/select.styles.js +12 -0
  80. package/dist/components/select.css +40 -3
  81. package/dist/components/separator.css +18 -1
  82. package/dist/components/sidebar/index.d.ts +2 -0
  83. package/dist/components/sidebar/index.d.ts.map +1 -0
  84. package/dist/components/sidebar/index.js +2 -0
  85. package/dist/components/sidebar/sidebar.styles.d.ts +190 -0
  86. package/dist/components/sidebar/sidebar.styles.d.ts.map +1 -0
  87. package/dist/components/sidebar/sidebar.styles.js +52 -0
  88. package/dist/components/sidebar.css +510 -0
  89. package/dist/components/skeleton.css +9 -0
  90. package/dist/components/slider.css +61 -0
  91. package/dist/components/splitter/index.d.ts +2 -0
  92. package/dist/components/splitter/index.d.ts.map +1 -0
  93. package/dist/components/splitter/index.js +2 -0
  94. package/dist/components/splitter/splitter.styles.d.ts +61 -0
  95. package/dist/components/splitter/splitter.styles.d.ts.map +1 -0
  96. package/dist/components/splitter/splitter.styles.js +26 -0
  97. package/dist/components/splitter.css +241 -0
  98. package/dist/components/surface.css +24 -0
  99. package/dist/components/switch.css +30 -0
  100. package/dist/components/table.css +11 -3
  101. package/dist/components/tabs.css +30 -2
  102. package/dist/components/tag.css +10 -0
  103. package/dist/components/textarea/textarea.styles.d.ts +15 -0
  104. package/dist/components/textarea/textarea.styles.d.ts.map +1 -1
  105. package/dist/components/textarea/textarea.styles.js +6 -0
  106. package/dist/components/textarea.css +23 -1
  107. package/dist/components/toast.css +1 -1
  108. package/dist/components/toggle-button-group.css +7 -7
  109. package/dist/components/toggle-button.css +17 -11
  110. package/dist/components/toolbar.css +8 -1
  111. package/dist/components/tooltip.css +15 -2
  112. package/dist/components/typography.css +21 -0
  113. package/dist/components/virtualizer/index.d.ts +2 -0
  114. package/dist/components/virtualizer/index.d.ts.map +1 -0
  115. package/dist/components/virtualizer/index.js +2 -0
  116. package/dist/components/virtualizer/virtualizer.styles.d.ts +44 -0
  117. package/dist/components/virtualizer/virtualizer.styles.d.ts.map +1 -0
  118. package/dist/components/virtualizer/virtualizer.styles.js +15 -0
  119. package/dist/components/virtualizer.css +64 -0
  120. package/dist/index.css +7 -2
  121. package/dist/index.js +5 -1
  122. package/dist/ropav.min.css +2 -2
  123. package/dist/themes/airbnb.css +231 -0
  124. package/dist/themes/all.css +17 -0
  125. package/dist/themes/coinbase.css +231 -0
  126. package/dist/themes/{default/variables.css → default.css} +28 -9
  127. package/dist/themes/discord.css +231 -0
  128. package/dist/themes/hero.css +262 -0
  129. package/dist/themes/lavender.css +231 -0
  130. package/dist/themes/mint.css +231 -0
  131. package/dist/themes/netflix.css +231 -0
  132. package/dist/themes/rabbit.css +231 -0
  133. package/dist/themes/shared/theme.css +19 -2
  134. package/dist/themes/sky.css +231 -0
  135. package/dist/themes/spotify.css +231 -0
  136. package/dist/themes/uber.css +231 -0
  137. package/dist/utilities/index.css +97 -0
  138. package/dist/variants/index.css +5 -15
  139. package/package.json +2 -3
  140. package/src/components/autocomplete/autocomplete.styles.ts +12 -0
  141. package/src/components/color-input-group/color-input-group.styles.ts +10 -0
  142. package/src/components/combo-box/combo-box.styles.ts +12 -0
  143. package/src/components/date-input-group/date-input-group.styles.ts +10 -0
  144. package/src/components/dropdown/dropdown.styles.ts +3 -1
  145. package/src/components/index.ts +4 -0
  146. package/src/components/input/input.styles.ts +6 -0
  147. package/src/components/input-group/input-group.styles.ts +10 -0
  148. package/src/components/list-box/list-box.styles.ts +6 -0
  149. package/src/components/menu/menu.styles.ts +10 -0
  150. package/src/components/number-field/number-field.styles.ts +10 -0
  151. package/src/components/search-field/search-field.styles.ts +10 -0
  152. package/src/components/segmented-control/index.ts +1 -0
  153. package/src/components/segmented-control/segmented-control.styles.ts +37 -0
  154. package/src/components/select/select.styles.ts +12 -0
  155. package/src/components/sidebar/index.ts +1 -0
  156. package/src/components/sidebar/sidebar.styles.ts +94 -0
  157. package/src/components/splitter/index.ts +1 -0
  158. package/src/components/splitter/splitter.styles.ts +44 -0
  159. package/src/components/textarea/textarea.styles.ts +6 -0
  160. package/src/components/virtualizer/index.ts +1 -0
  161. package/src/components/virtualizer/virtualizer.styles.ts +15 -0
  162. package/dist/themes/default/components/index.css +0 -6
  163. package/dist/themes/default/index.css +0 -8
@@ -4,7 +4,7 @@
4
4
  .card {
5
5
  @apply relative flex flex-col gap-3 overflow-visible p-4;
6
6
  @apply shadow-surface;
7
- border-radius: min(32px, var(--radius-3xl));
7
+ border-radius: min(32px, var(--component-radius));
8
8
  }
9
9
 
10
10
  /* Element - header */
@@ -40,12 +40,33 @@
40
40
 
41
41
  .card--default {
42
42
  @apply bg-surface;
43
+
44
+ /* Forced Colors Mode flattens the fill onto the page and strips the shadow, so the container
45
+ * stops having any shape and its contents sit loose on the page. */
46
+ @media (forced-colors: active) {
47
+ outline: 1px solid CanvasText;
48
+ outline-offset: -1px;
49
+ }
43
50
  }
44
51
 
45
52
  .card--secondary {
46
53
  @apply bg-surface-secondary;
54
+
55
+ /* Forced Colors Mode flattens the fill onto the page and strips the shadow, so the container
56
+ * stops having any shape and its contents sit loose on the page. */
57
+ @media (forced-colors: active) {
58
+ outline: 1px solid CanvasText;
59
+ outline-offset: -1px;
60
+ }
47
61
  }
48
62
 
49
63
  .card--tertiary {
50
64
  @apply bg-surface-tertiary;
65
+
66
+ /* Forced Colors Mode flattens the fill onto the page and strips the shadow, so the container
67
+ * stops having any shape and its contents sit loose on the page. */
68
+ @media (forced-colors: active) {
69
+ outline: 1px solid CanvasText;
70
+ outline-offset: -1px;
71
+ }
51
72
  }
@@ -8,6 +8,19 @@
8
8
 
9
9
  background-color: var(--chip-bg);
10
10
  color: var(--chip-fg);
11
+
12
+ /* A chip is nothing but its colour, so Forced Colors Mode leaves it as bare label text -
13
+ * not a weaker chip, no chip at all, indistinguishable from the copy around it. The edge
14
+ * brings the shape back.
15
+ *
16
+ * What cannot come back is the status. The mode has no keyword for success or warning, so
17
+ * every colour collapses onto one appearance and the label is what has to carry the
18
+ * meaning - which is the same reason a chip should not lean on colour alone in the first
19
+ * place. Only the emphasis split survives, on `.chip--primary` below. */
20
+ @media (forced-colors: active) {
21
+ outline: 1px solid CanvasText;
22
+ outline-offset: -1px;
23
+ }
11
24
  }
12
25
 
13
26
  .chip__label {
@@ -37,6 +50,14 @@
37
50
 
38
51
  /* Variant styles */
39
52
  .chip--primary {
53
+ /* The one distinction worth keeping: solid against outlined. `forced-color-adjust` is what
54
+ * makes it readable - without it Chromium paints a `Canvas` backplate over this fill and the
55
+ * label goes with it. */
56
+ @media (forced-colors: active) {
57
+ forced-color-adjust: none;
58
+ background-color: CanvasText;
59
+ color: Canvas;
60
+ }
40
61
  }
41
62
 
42
63
  .chip--secondary {
@@ -47,6 +47,14 @@
47
47
  .close-button--default {
48
48
  @apply bg-default text-muted;
49
49
 
50
+ /* Forced Colors Mode flattens the fill onto the page and strips the shadow, leaving a control
51
+ * with nothing to say it is one. `ButtonBorder` is the keyword the platform uses for a
52
+ * control's edge. */
53
+ @media (forced-colors: active) {
54
+ outline: 1px solid ButtonBorder;
55
+ outline-offset: -1px;
56
+ }
57
+
50
58
  &:active,
51
59
  &[data-pressed="true"] {
52
60
  }
@@ -6,6 +6,15 @@ export declare const colorInputGroupVariants: import("tailwind-variants").TVRetu
6
6
  base: string;
7
7
  };
8
8
  };
9
+ size: {
10
+ lg: {
11
+ base: string;
12
+ };
13
+ md: {};
14
+ sm: {
15
+ base: string;
16
+ };
17
+ };
9
18
  variant: {
10
19
  primary: {
11
20
  base: string;
@@ -26,6 +35,15 @@ export declare const colorInputGroupVariants: import("tailwind-variants").TVRetu
26
35
  base: string;
27
36
  };
28
37
  };
38
+ size: {
39
+ lg: {
40
+ base: string;
41
+ };
42
+ md: {};
43
+ sm: {
44
+ base: string;
45
+ };
46
+ };
29
47
  variant: {
30
48
  primary: {
31
49
  base: string;
@@ -46,6 +64,15 @@ export declare const colorInputGroupVariants: import("tailwind-variants").TVRetu
46
64
  base: string;
47
65
  };
48
66
  };
67
+ size: {
68
+ lg: {
69
+ base: string;
70
+ };
71
+ md: {};
72
+ sm: {
73
+ base: string;
74
+ };
75
+ };
49
76
  variant: {
50
77
  primary: {
51
78
  base: string;
@@ -1 +1 @@
1
- {"version":3,"file":"color-input-group.styles.d.ts","sourceRoot":"","sources":["../../../src/components/color-input-group/color-input-group.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,uBAAuB;;QAa9B,KAAK;QACL,IAAI;YACF,IAAI;;;;QAIN,OAAO;YACL,IAAI;;QAEN,SAAS;YACP,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIV,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,YAAY,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"color-input-group.styles.d.ts","sourceRoot":"","sources":["../../../src/components/color-input-group/color-input-group.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,uBAAuB;;QAc9B,KAAK;QACL,IAAI;YACF,IAAI;;;;QAIN,EAAE;YACA,IAAI;;QAEN,EAAE;QACF,EAAE;YACA,IAAI;;;;QAIN,OAAO;YACL,IAAI;;QAEN,SAAS;YACP,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIV,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,YAAY,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -3,6 +3,7 @@ import { tv } from "tailwind-variants";
3
3
  const colorInputGroupVariants = tv({
4
4
  defaultVariants: {
5
5
  fullWidth: false,
6
+ size: "md",
6
7
  variant: "primary"
7
8
  },
8
9
  slots: {
@@ -16,6 +17,11 @@ const colorInputGroupVariants = tv({
16
17
  false: {},
17
18
  true: { base: "color-input-group--full-width" }
18
19
  },
20
+ size: {
21
+ lg: { base: "color-input-group--lg" },
22
+ md: {},
23
+ sm: { base: "color-input-group--sm" }
24
+ },
19
25
  variant: {
20
26
  primary: { base: "color-input-group--primary" },
21
27
  secondary: { base: "color-input-group--secondary" }
@@ -8,6 +8,15 @@
8
8
  border-width: var(--border-width-field);
9
9
  border-color: var(--field-border);
10
10
 
11
+ /* Forced Colors Mode flattens the fill onto the page and strips the shadow, leaving a field that
12
+ * reads as bare text - `--border-width-field` is 0, so the declared border brings nothing back on
13
+ * its own. An outline rather than a width so nothing shifts, and the focus ring replaces it while
14
+ * focused, which is the right order of importance. */
15
+ @media (forced-colors: active) {
16
+ outline: 1px solid ButtonBorder;
17
+ outline-offset: -1px;
18
+ }
19
+
11
20
  /**
12
21
  * Transitions
13
22
  * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
@@ -52,7 +61,7 @@
52
61
  ========================================================================== */
53
62
 
54
63
  .color-input-group__input {
55
- @apply flex h-full flex-1 cursor-text items-center rounded-none border-0 bg-transparent px-3 py-2 text-base shadow-none outline-none sm:text-sm;
64
+ @apply flex h-full flex-1 cursor-text items-center rounded-none border-0 bg-transparent px-3 field-line-md shadow-none outline-none;
56
65
 
57
66
  /* Placeholder styling */
58
67
  &::placeholder {
@@ -133,3 +142,23 @@
133
142
  .color-input-group--full-width {
134
143
  @apply w-full;
135
144
  }
145
+
146
+ /* ==========================================================================
147
+ Size variants
148
+ ========================================================================== */
149
+
150
+ .color-input-group--sm {
151
+ @apply h-8;
152
+
153
+ .color-input-group__input {
154
+ @apply field-line-sm;
155
+ }
156
+ }
157
+
158
+ .color-input-group--lg {
159
+ @apply h-10;
160
+
161
+ .color-input-group__input {
162
+ @apply field-line-lg;
163
+ }
164
+ }
@@ -14,6 +14,13 @@
14
14
  .color-swatch-picker__item {
15
15
  @apply relative flex size-8 items-center justify-center rounded-2xl border-2 border-transparent outline-none no-highlight;
16
16
 
17
+ /* The unselected border is transparent purely to hold the ring's width, and forced colors turns
18
+ * a transparent border-color opaque - so every swatch drew the same border and the selected one
19
+ * stopped being the selected one. */
20
+ @media (forced-colors: active) {
21
+ border-color: Canvas;
22
+ }
23
+
17
24
  /* Cursor */
18
25
  cursor: var(--cursor-interactive);
19
26
 
@@ -41,6 +48,10 @@
41
48
  &[data-selected="true"] {
42
49
  border-color: var(--color-swatch-current);
43
50
  box-shadow: var(--field-shadow);
51
+
52
+ @media (forced-colors: active) {
53
+ border-color: Highlight;
54
+ }
44
55
  /* Shrink the swatch to reveal the white gap */
45
56
  .color-swatch-picker__swatch {
46
57
  transform: scale(0.77);
@@ -7,6 +7,15 @@ export declare const comboBoxVariants: import("tailwind-variants").TVReturnType<
7
7
  inputGroup: string;
8
8
  };
9
9
  };
10
+ size: {
11
+ lg: {
12
+ popover: string;
13
+ };
14
+ md: {};
15
+ sm: {
16
+ popover: string;
17
+ };
18
+ };
10
19
  }, {
11
20
  base: string;
12
21
  inputGroup: string;
@@ -21,6 +30,15 @@ export declare const comboBoxVariants: import("tailwind-variants").TVReturnType<
21
30
  inputGroup: string;
22
31
  };
23
32
  };
33
+ size: {
34
+ lg: {
35
+ popover: string;
36
+ };
37
+ md: {};
38
+ sm: {
39
+ popover: string;
40
+ };
41
+ };
24
42
  }, {
25
43
  base: string;
26
44
  inputGroup: string;
@@ -35,6 +53,15 @@ export declare const comboBoxVariants: import("tailwind-variants").TVReturnType<
35
53
  inputGroup: string;
36
54
  };
37
55
  };
56
+ size: {
57
+ lg: {
58
+ popover: string;
59
+ };
60
+ md: {};
61
+ sm: {
62
+ popover: string;
63
+ };
64
+ };
38
65
  }, {
39
66
  base: string;
40
67
  inputGroup: string;
@@ -1 +1 @@
1
- {"version":3,"file":"combo-box.styles.d.ts","sourceRoot":"","sources":["../../../src/components/combo-box/combo-box.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,gBAAgB;;QAavB,KAAK;QACL,IAAI;YACF,IAAI;YACJ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIhB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"combo-box.styles.d.ts","sourceRoot":"","sources":["../../../src/components/combo-box/combo-box.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,gBAAgB;;QAcvB,KAAK;QACL,IAAI;YACF,IAAI;YACJ,UAAU;;;;QAMZ,EAAE;YACA,OAAO;;QAET,EAAE;QACF,EAAE;YACA,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIb,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import { tv } from "tailwind-variants";
2
2
  //#region src/components/combo-box/combo-box.styles.ts
3
3
  const comboBoxVariants = tv({
4
- defaultVariants: { fullWidth: false },
4
+ defaultVariants: {
5
+ fullWidth: false,
6
+ size: "md"
7
+ },
5
8
  slots: {
6
9
  base: "combo-box",
7
10
  inputGroup: "combo-box__input-group",
@@ -9,13 +12,20 @@ const comboBoxVariants = tv({
9
12
  trigger: "combo-box__trigger",
10
13
  value: "combo-box__value"
11
14
  },
12
- variants: { fullWidth: {
13
- false: {},
14
- true: {
15
- base: "combo-box--full-width",
16
- inputGroup: "combo-box__input-group--full-width"
15
+ variants: {
16
+ fullWidth: {
17
+ false: {},
18
+ true: {
19
+ base: "combo-box--full-width",
20
+ inputGroup: "combo-box__input-group--full-width"
21
+ }
22
+ },
23
+ size: {
24
+ lg: { popover: "combo-box__popover--lg" },
25
+ md: {},
26
+ sm: { popover: "combo-box__popover--sm" }
17
27
  }
18
- } }
28
+ }
19
29
  });
20
30
  //#endregion
21
31
  export { comboBoxVariants };
@@ -100,7 +100,7 @@
100
100
  /* Similar to popover content styles */
101
101
  .combo-box__popover {
102
102
  @apply min-w-(--trigger-width) origin-(--trigger-anchor-point) scroll-py-1 scrollbar overflow-y-auto overscroll-contain bg-overlay p-0 text-sm;
103
- border-radius: min(32px, var(--radius-3xl));
103
+ border-radius: min(32px, var(--component-radius));
104
104
  box-shadow: var(--shadow-overlay);
105
105
 
106
106
  /* Focus state */
@@ -174,6 +174,26 @@
174
174
  }
175
175
  }
176
176
 
177
+ /* ==========================================================================
178
+ Size variants
179
+ ========================================================================== */
180
+
181
+ /* The input inside sizes itself from the context the root provides, so only the option rows are
182
+ * left - reached from the popover's own class, since it is teleported out of this tree. */
183
+ .combo-box__popover--sm {
184
+ [data-slot="list-box-item"] {
185
+ @apply min-h-8 py-1;
186
+ }
187
+ }
188
+
189
+ .combo-box__popover--lg {
190
+ @apply text-base;
191
+
192
+ [data-slot="list-box-item"] {
193
+ @apply min-h-10 py-2;
194
+ }
195
+ }
196
+
177
197
  /* Full width modifier */
178
198
  .combo-box--full-width {
179
199
  @apply w-full;
@@ -6,6 +6,15 @@ export declare const dateInputGroupVariants: import("tailwind-variants").TVRetur
6
6
  base: string;
7
7
  };
8
8
  };
9
+ size: {
10
+ lg: {
11
+ base: string;
12
+ };
13
+ md: {};
14
+ sm: {
15
+ base: string;
16
+ };
17
+ };
9
18
  variant: {
10
19
  primary: {
11
20
  base: string;
@@ -28,6 +37,15 @@ export declare const dateInputGroupVariants: import("tailwind-variants").TVRetur
28
37
  base: string;
29
38
  };
30
39
  };
40
+ size: {
41
+ lg: {
42
+ base: string;
43
+ };
44
+ md: {};
45
+ sm: {
46
+ base: string;
47
+ };
48
+ };
31
49
  variant: {
32
50
  primary: {
33
51
  base: string;
@@ -50,6 +68,15 @@ export declare const dateInputGroupVariants: import("tailwind-variants").TVRetur
50
68
  base: string;
51
69
  };
52
70
  };
71
+ size: {
72
+ lg: {
73
+ base: string;
74
+ };
75
+ md: {};
76
+ sm: {
77
+ base: string;
78
+ };
79
+ };
53
80
  variant: {
54
81
  primary: {
55
82
  base: string;
@@ -1 +1 @@
1
- {"version":3,"file":"date-input-group.styles.d.ts","sourceRoot":"","sources":["../../../src/components/date-input-group/date-input-group.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,sBAAsB;;QAe7B,KAAK;QACL,IAAI;YACF,IAAI;;;;QAIN,OAAO;YACL,IAAI;;QAEN,SAAS;YACP,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIV,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"date-input-group.styles.d.ts","sourceRoot":"","sources":["../../../src/components/date-input-group/date-input-group.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,sBAAsB;;QAgB7B,KAAK;QACL,IAAI;YACF,IAAI;;;;QAIN,EAAE;YACA,IAAI;;QAEN,EAAE;QACF,EAAE;YACA,IAAI;;;;QAIN,OAAO;YACL,IAAI;;QAEN,SAAS;YACP,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIV,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -3,6 +3,7 @@ import { tv } from "tailwind-variants";
3
3
  const dateInputGroupVariants = tv({
4
4
  defaultVariants: {
5
5
  fullWidth: false,
6
+ size: "md",
6
7
  variant: "primary"
7
8
  },
8
9
  slots: {
@@ -18,6 +19,11 @@ const dateInputGroupVariants = tv({
18
19
  false: {},
19
20
  true: { base: "date-input-group--full-width" }
20
21
  },
22
+ size: {
23
+ lg: { base: "date-input-group--lg" },
24
+ md: {},
25
+ sm: { base: "date-input-group--sm" }
26
+ },
21
27
  variant: {
22
28
  primary: { base: "date-input-group--primary" },
23
29
  secondary: { base: "date-input-group--secondary" }
@@ -4,6 +4,15 @@
4
4
  border-width: var(--border-width-field);
5
5
  border-color: var(--field-border);
6
6
 
7
+ /* Forced Colors Mode flattens the fill onto the page and strips the shadow, leaving a field that
8
+ * reads as bare text - `--border-width-field` is 0, so the declared border brings nothing back on
9
+ * its own. An outline rather than a width so nothing shifts, and the focus ring replaces it while
10
+ * focused, which is the right order of importance. */
11
+ @media (forced-colors: active) {
12
+ outline: 1px solid ButtonBorder;
13
+ outline-offset: -1px;
14
+ }
15
+
7
16
  /**
8
17
  * Transitions
9
18
  * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
@@ -58,7 +67,7 @@
58
67
  }
59
68
 
60
69
  .date-input-group__input {
61
- @apply flex flex-1 cursor-text items-center gap-px rounded-none border-0 bg-transparent px-3 py-2 text-base shadow-none outline-none sm:text-sm;
70
+ @apply flex flex-1 cursor-text items-center gap-px rounded-none border-0 bg-transparent px-3 field-line-md shadow-none outline-none;
62
71
 
63
72
  /* Remove border radius on left side when prefix is present */
64
73
  .date-input-group:has([data-slot="date-input-group-prefix"]) & {
@@ -180,3 +189,23 @@
180
189
  .date-input-group--full-width {
181
190
  @apply w-full;
182
191
  }
192
+
193
+ /* ==========================================================================
194
+ Size variants
195
+ ========================================================================== */
196
+
197
+ .date-input-group--sm {
198
+ @apply h-8;
199
+
200
+ .date-input-group__input {
201
+ @apply field-line-sm;
202
+ }
203
+ }
204
+
205
+ .date-input-group--lg {
206
+ @apply h-10;
207
+
208
+ .date-input-group__input {
209
+ @apply field-line-lg;
210
+ }
211
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.styles.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAO3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"dropdown.styles.d.ts","sourceRoot":"","sources":["../../../src/components/dropdown/dropdown.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAS3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { tv } from "tailwind-variants";
2
2
  //#region src/components/dropdown/dropdown.styles.ts
3
3
  const dropdownVariants = tv({ slots: {
4
- menu: "dropdown__menu",
4
+ menu: "menu dropdown__menu",
5
5
  popover: "dropdown__popover",
6
6
  root: "dropdown",
7
7
  trigger: "dropdown__trigger"
@@ -10,6 +10,18 @@
10
10
  @apply inline-block;
11
11
  /* Only visible when using a custom trigger - not passing "Button" as a child - hence we use some button styles (custom trigger) */
12
12
  @apply outline-none;
13
+
14
+ /* A custom trigger borrows the button's look by wearing its classes, and the `outline-none`
15
+ * above lands later in the cascade than the button's own forced-colors edge, stripping it back
16
+ * off. Handed back here rather than on the bare trigger: when a `Button` is passed as a child
17
+ * instead, this element is only a wrapper around it and an outline would draw a second ring
18
+ * around the real one. */
19
+ &.button {
20
+ @media (forced-colors: active) {
21
+ outline: 1px solid ButtonBorder;
22
+ outline-offset: -1px;
23
+ }
24
+ }
13
25
  /**
14
26
  * Transitions
15
27
  * CRITICAL: motion-reduce must be AFTER transition for correct override specificity
@@ -50,7 +62,7 @@
50
62
  /* Similar to select popover styles */
51
63
  .dropdown__popover {
52
64
  @apply max-w-[48svw] origin-(--trigger-anchor-point) scroll-py-1 scrollbar overflow-y-auto overscroll-contain bg-overlay p-0 text-sm will-change-transform md:min-w-55;
53
- border-radius: min(32px, var(--radius-3xl));
65
+ border-radius: min(32px, var(--component-radius));
54
66
  box-shadow: var(--shadow-overlay);
55
67
 
56
68
  /* Focus state */
@@ -109,21 +121,14 @@
109
121
  rotate: 90deg;
110
122
  }
111
123
 
112
- /* Menu styles */
124
+ /* Menu styles. The block itself is `.menu`; these are the dropdown's departures from it, and
125
+ * they sit here rather than on `.dropdown__menu` because `menu.css` is imported after this file
126
+ * and would otherwise win at equal specificity. */
113
127
  [data-slot="dropdown-menu"] {
114
- @apply p-1.5 outline-none;
128
+ @apply gap-0.5 p-1.5 outline-none;
115
129
  }
116
130
 
117
131
  [data-slot="menu-item"] {
118
132
  @apply px-2.5;
119
133
  }
120
134
  }
121
-
122
- .dropdown__menu {
123
- @apply relative flex w-full flex-col gap-0.5 overflow-clip p-1;
124
-
125
- /* This makes the separator take up 94% of the width and be centered */
126
- [data-slot="separator"] {
127
- @apply ms-[3%] w-[94%];
128
- }
129
- }
@@ -30,6 +30,7 @@
30
30
  @import "./disclosure.css";
31
31
  @import "./link.css";
32
32
  @import "./pagination.css";
33
+ @import "./sidebar.css";
33
34
  @import "./tabs.css";
34
35
 
35
36
  /* ------------------------------------------------------------------------------------------------
@@ -68,6 +69,7 @@
68
69
  /* ------------------------------------------------------------------------------------------------
69
70
  * Controls
70
71
  * ------------------------------------------------------------------------------------------------ */
72
+ @import "./segmented-control.css";
71
73
  @import "./slider.css";
72
74
  @import "./switch.css";
73
75
  @import "./switch-group.css";
@@ -125,6 +127,7 @@
125
127
  @import "./card.css";
126
128
  @import "./header.css";
127
129
  @import "./separator.css";
130
+ @import "./splitter.css";
128
131
  @import "./surface.css";
129
132
 
130
133
  /* ------------------------------------------------------------------------------------------------
@@ -158,3 +161,4 @@
158
161
  * Utilities
159
162
  * ------------------------------------------------------------------------------------------------ */
160
163
  @import "./scroll-shadow.css";
164
+ @import "./virtualizer.css";
@@ -60,11 +60,14 @@ export * from "./radio";
60
60
  export * from "./radio-group";
61
61
  export * from "./scroll-shadow";
62
62
  export * from "./search-field";
63
+ export * from "./segmented-control";
63
64
  export * from "./select";
64
65
  export * from "./separator";
66
+ export * from "./sidebar";
65
67
  export * from "./skeleton";
66
68
  export * from "./slider";
67
69
  export * from "./spinner";
70
+ export * from "./splitter";
68
71
  export * from "./surface";
69
72
  export * from "./switch";
70
73
  export * from "./switch-group";
@@ -81,4 +84,5 @@ export * from "./toggle-button";
81
84
  export * from "./toggle-button-group";
82
85
  export * from "./toolbar";
83
86
  export * from "./tooltip";
87
+ export * from "./virtualizer";
84
88
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
@@ -4,6 +4,11 @@ export declare const inputVariants: import("tailwind-variants").TVReturnType<{
4
4
  false: "";
5
5
  true: "input--full-width";
6
6
  };
7
+ size: {
8
+ lg: "input--lg";
9
+ md: "";
10
+ sm: "input--sm";
11
+ };
7
12
  variant: {
8
13
  primary: "input--primary";
9
14
  secondary: "input--secondary";
@@ -13,6 +18,11 @@ export declare const inputVariants: import("tailwind-variants").TVReturnType<{
13
18
  false: "";
14
19
  true: "input--full-width";
15
20
  };
21
+ size: {
22
+ lg: "input--lg";
23
+ md: "";
24
+ sm: "input--sm";
25
+ };
16
26
  variant: {
17
27
  primary: "input--primary";
18
28
  secondary: "input--secondary";
@@ -22,6 +32,11 @@ export declare const inputVariants: import("tailwind-variants").TVReturnType<{
22
32
  false: "";
23
33
  true: "input--full-width";
24
34
  };
35
+ size: {
36
+ lg: "input--lg";
37
+ md: "";
38
+ sm: "input--sm";
39
+ };
25
40
  variant: {
26
41
  primary: "input--primary";
27
42
  secondary: "input--secondary";
@@ -1 +1 @@
1
- {"version":3,"file":"input.styles.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;cAgBxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"input.styles.d.ts","sourceRoot":"","sources":["../../../src/components/input/input.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsBxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC"}