premium-ds 0.1.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 (257) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/dist/alert.d.ts +31 -0
  4. package/dist/alert.js +6 -0
  5. package/dist/alert.js.map +1 -0
  6. package/dist/avatar-group.d.ts +13 -0
  7. package/dist/avatar-group.js +3 -0
  8. package/dist/avatar-group.js.map +1 -0
  9. package/dist/avatar.d.ts +25 -0
  10. package/dist/avatar.js +3 -0
  11. package/dist/avatar.js.map +1 -0
  12. package/dist/badge.d.ts +23 -0
  13. package/dist/badge.js +3 -0
  14. package/dist/badge.js.map +1 -0
  15. package/dist/button.d.ts +20 -0
  16. package/dist/button.js +3 -0
  17. package/dist/button.js.map +1 -0
  18. package/dist/checkbox.d.ts +25 -0
  19. package/dist/checkbox.js +3 -0
  20. package/dist/checkbox.js.map +1 -0
  21. package/dist/chunk-2OWHZ4JT.js +36 -0
  22. package/dist/chunk-2OWHZ4JT.js.map +1 -0
  23. package/dist/chunk-34SIXSYL.js +64 -0
  24. package/dist/chunk-34SIXSYL.js.map +1 -0
  25. package/dist/chunk-37O2ZXD6.js +55 -0
  26. package/dist/chunk-37O2ZXD6.js.map +1 -0
  27. package/dist/chunk-4AZL76UJ.js +89 -0
  28. package/dist/chunk-4AZL76UJ.js.map +1 -0
  29. package/dist/chunk-4HSCN5TZ.js +86 -0
  30. package/dist/chunk-4HSCN5TZ.js.map +1 -0
  31. package/dist/chunk-5DDOOT33.js +258 -0
  32. package/dist/chunk-5DDOOT33.js.map +1 -0
  33. package/dist/chunk-5FVHWIMY.js +117 -0
  34. package/dist/chunk-5FVHWIMY.js.map +1 -0
  35. package/dist/chunk-5K6KRJGX.js +147 -0
  36. package/dist/chunk-5K6KRJGX.js.map +1 -0
  37. package/dist/chunk-5PQMQBQC.js +74 -0
  38. package/dist/chunk-5PQMQBQC.js.map +1 -0
  39. package/dist/chunk-7OCTVQ7C.js +95 -0
  40. package/dist/chunk-7OCTVQ7C.js.map +1 -0
  41. package/dist/chunk-7OPMOET7.js +39 -0
  42. package/dist/chunk-7OPMOET7.js.map +1 -0
  43. package/dist/chunk-BXXS7YRC.js +270 -0
  44. package/dist/chunk-BXXS7YRC.js.map +1 -0
  45. package/dist/chunk-CV2Q4YXX.js +272 -0
  46. package/dist/chunk-CV2Q4YXX.js.map +1 -0
  47. package/dist/chunk-EIMMDWIW.js +282 -0
  48. package/dist/chunk-EIMMDWIW.js.map +1 -0
  49. package/dist/chunk-EZ2CWTBE.js +230 -0
  50. package/dist/chunk-EZ2CWTBE.js.map +1 -0
  51. package/dist/chunk-FGHDG3Y4.js +89 -0
  52. package/dist/chunk-FGHDG3Y4.js.map +1 -0
  53. package/dist/chunk-FPP2XLKX.js +127 -0
  54. package/dist/chunk-FPP2XLKX.js.map +1 -0
  55. package/dist/chunk-G6OY35DI.js +295 -0
  56. package/dist/chunk-G6OY35DI.js.map +1 -0
  57. package/dist/chunk-H6KWJNOE.js +65 -0
  58. package/dist/chunk-H6KWJNOE.js.map +1 -0
  59. package/dist/chunk-HGILYGY3.js +45 -0
  60. package/dist/chunk-HGILYGY3.js.map +1 -0
  61. package/dist/chunk-I3BCB4Z5.js +88 -0
  62. package/dist/chunk-I3BCB4Z5.js.map +1 -0
  63. package/dist/chunk-KBWNUUWM.js +582 -0
  64. package/dist/chunk-KBWNUUWM.js.map +1 -0
  65. package/dist/chunk-KN7JFAZ6.js +113 -0
  66. package/dist/chunk-KN7JFAZ6.js.map +1 -0
  67. package/dist/chunk-MEF7PI6U.js +16 -0
  68. package/dist/chunk-MEF7PI6U.js.map +1 -0
  69. package/dist/chunk-NKGMQL6I.js +310 -0
  70. package/dist/chunk-NKGMQL6I.js.map +1 -0
  71. package/dist/chunk-NMFQRGLL.js +127 -0
  72. package/dist/chunk-NMFQRGLL.js.map +1 -0
  73. package/dist/chunk-OUBWD6CX.js +433 -0
  74. package/dist/chunk-OUBWD6CX.js.map +1 -0
  75. package/dist/chunk-PFNXVBLU.js +96 -0
  76. package/dist/chunk-PFNXVBLU.js.map +1 -0
  77. package/dist/chunk-PUPZ4HME.js +165 -0
  78. package/dist/chunk-PUPZ4HME.js.map +1 -0
  79. package/dist/chunk-QFS52OK5.js +690 -0
  80. package/dist/chunk-QFS52OK5.js.map +1 -0
  81. package/dist/chunk-QNC6O3PG.js +45 -0
  82. package/dist/chunk-QNC6O3PG.js.map +1 -0
  83. package/dist/chunk-QUHOXWBK.js +82 -0
  84. package/dist/chunk-QUHOXWBK.js.map +1 -0
  85. package/dist/chunk-UIQGSTBJ.js +106 -0
  86. package/dist/chunk-UIQGSTBJ.js.map +1 -0
  87. package/dist/chunk-UJQKVP6V.js +193 -0
  88. package/dist/chunk-UJQKVP6V.js.map +1 -0
  89. package/dist/chunk-VVPGEAC6.js +11 -0
  90. package/dist/chunk-VVPGEAC6.js.map +1 -0
  91. package/dist/chunk-XA3T5KWA.js +58 -0
  92. package/dist/chunk-XA3T5KWA.js.map +1 -0
  93. package/dist/chunk-YSHJHSJM.js +19 -0
  94. package/dist/chunk-YSHJHSJM.js.map +1 -0
  95. package/dist/chunk-YVHOAVSM.js +182 -0
  96. package/dist/chunk-YVHOAVSM.js.map +1 -0
  97. package/dist/collapse.d.ts +16 -0
  98. package/dist/collapse.js +3 -0
  99. package/dist/collapse.js.map +1 -0
  100. package/dist/count-badge.d.ts +11 -0
  101. package/dist/count-badge.js +4 -0
  102. package/dist/count-badge.js.map +1 -0
  103. package/dist/date-field.d.ts +39 -0
  104. package/dist/date-field.js +8 -0
  105. package/dist/date-field.js.map +1 -0
  106. package/dist/date-range-field.d.ts +30 -0
  107. package/dist/date-range-field.js +8 -0
  108. package/dist/date-range-field.js.map +1 -0
  109. package/dist/datetime-field.d.ts +28 -0
  110. package/dist/datetime-field.js +10 -0
  111. package/dist/datetime-field.js.map +1 -0
  112. package/dist/dialog.d.ts +26 -0
  113. package/dist/dialog.js +7 -0
  114. package/dist/dialog.js.map +1 -0
  115. package/dist/index.d.ts +35 -0
  116. package/dist/index.js +40 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/motion-tokens.d.ts +29 -0
  119. package/dist/motion-tokens.js +3 -0
  120. package/dist/motion-tokens.js.map +1 -0
  121. package/dist/multi-select.d.ts +25 -0
  122. package/dist/multi-select.js +7 -0
  123. package/dist/multi-select.js.map +1 -0
  124. package/dist/number-field.d.ts +24 -0
  125. package/dist/number-field.js +4 -0
  126. package/dist/number-field.js.map +1 -0
  127. package/dist/otp-field.d.ts +20 -0
  128. package/dist/otp-field.js +3 -0
  129. package/dist/otp-field.js.map +1 -0
  130. package/dist/overlay.d.ts +31 -0
  131. package/dist/overlay.js +4 -0
  132. package/dist/overlay.js.map +1 -0
  133. package/dist/pagination.d.ts +24 -0
  134. package/dist/pagination.js +5 -0
  135. package/dist/pagination.js.map +1 -0
  136. package/dist/radio-group.d.ts +46 -0
  137. package/dist/radio-group.js +6 -0
  138. package/dist/radio-group.js.map +1 -0
  139. package/dist/select-core-SAyS-8w0.d.ts +16 -0
  140. package/dist/select.d.ts +27 -0
  141. package/dist/select.js +7 -0
  142. package/dist/select.js.map +1 -0
  143. package/dist/status-badge.d.ts +17 -0
  144. package/dist/status-badge.js +5 -0
  145. package/dist/status-badge.js.map +1 -0
  146. package/dist/table.d.ts +65 -0
  147. package/dist/table.js +5 -0
  148. package/dist/table.js.map +1 -0
  149. package/dist/tabs.d.ts +44 -0
  150. package/dist/tabs.js +5 -0
  151. package/dist/tabs.js.map +1 -0
  152. package/dist/tag.d.ts +28 -0
  153. package/dist/tag.js +5 -0
  154. package/dist/tag.js.map +1 -0
  155. package/dist/text-field.d.ts +30 -0
  156. package/dist/text-field.js +6 -0
  157. package/dist/text-field.js.map +1 -0
  158. package/dist/textarea.d.ts +33 -0
  159. package/dist/textarea.js +5 -0
  160. package/dist/textarea.js.map +1 -0
  161. package/dist/time-field.d.ts +27 -0
  162. package/dist/time-field.js +6 -0
  163. package/dist/time-field.js.map +1 -0
  164. package/dist/toast-store.d.ts +75 -0
  165. package/dist/toast-store.js +3 -0
  166. package/dist/toast-store.js.map +1 -0
  167. package/dist/toast.d.ts +3 -0
  168. package/dist/toast.js +6 -0
  169. package/dist/toast.js.map +1 -0
  170. package/dist/toggle-tag.d.ts +24 -0
  171. package/dist/toggle-tag.js +4 -0
  172. package/dist/toggle-tag.js.map +1 -0
  173. package/dist/toggle.d.ts +21 -0
  174. package/dist/toggle.js +3 -0
  175. package/dist/toggle.js.map +1 -0
  176. package/dist/tooltip.d.ts +27 -0
  177. package/dist/tooltip.js +4 -0
  178. package/dist/tooltip.js.map +1 -0
  179. package/llms.txt +165 -0
  180. package/package.json +205 -0
  181. package/src/components/alert/Alert.tsx +118 -0
  182. package/src/components/alert/alert.css +136 -0
  183. package/src/components/avatar/Avatar.tsx +128 -0
  184. package/src/components/avatar/AvatarGroup.tsx +50 -0
  185. package/src/components/avatar/avatar.css +200 -0
  186. package/src/components/badge/Badge.tsx +66 -0
  187. package/src/components/badge/CountBadge.tsx +46 -0
  188. package/src/components/badge/StatusBadge.tsx +132 -0
  189. package/src/components/badge/badge.css +243 -0
  190. package/src/components/button/Button.tsx +68 -0
  191. package/src/components/button/button.css +222 -0
  192. package/src/components/checkbox/Checkbox.tsx +90 -0
  193. package/src/components/checkbox/checkbox.css +179 -0
  194. package/src/components/date-picker/DateField.tsx +362 -0
  195. package/src/components/date-picker/DateRangeField.tsx +533 -0
  196. package/src/components/date-picker/DateTimeField.tsx +177 -0
  197. package/src/components/date-picker/TimeField.tsx +100 -0
  198. package/src/components/date-picker/date-picker.css +591 -0
  199. package/src/components/date-picker/date-utils.ts +55 -0
  200. package/src/components/date-picker/field-shell.tsx +78 -0
  201. package/src/components/date-picker/glide-pill.tsx +81 -0
  202. package/src/components/date-picker/time-core.tsx +305 -0
  203. package/src/components/dialog/Dialog.tsx +181 -0
  204. package/src/components/dialog/dialog.css +170 -0
  205. package/src/components/glass/glass.css +100 -0
  206. package/src/components/icon/Icon.tsx +76 -0
  207. package/src/components/icon/IconSlot.tsx +11 -0
  208. package/src/components/icon/icon.css +33 -0
  209. package/src/components/input/NumberField.tsx +117 -0
  210. package/src/components/input/OtpField.tsx +118 -0
  211. package/src/components/input/TextField.tsx +123 -0
  212. package/src/components/input/input.css +335 -0
  213. package/src/components/motion/Collapse.tsx +33 -0
  214. package/src/components/motion/collapse.css +41 -0
  215. package/src/components/overlay/Overlay.tsx +239 -0
  216. package/src/components/overlay/overlay-core.tsx +565 -0
  217. package/src/components/overlay/overlay.css +119 -0
  218. package/src/components/overlay/sheet-drag.tsx +146 -0
  219. package/src/components/pagination/Pagination.tsx +140 -0
  220. package/src/components/pagination/pagination.css +48 -0
  221. package/src/components/radio-group/RadioGroup.tsx +182 -0
  222. package/src/components/radio-group/radio-group.css +277 -0
  223. package/src/components/select/MultiSelect.tsx +251 -0
  224. package/src/components/select/Select.tsx +235 -0
  225. package/src/components/select/select-core.tsx +417 -0
  226. package/src/components/select/select.css +386 -0
  227. package/src/components/table/Table.tsx +433 -0
  228. package/src/components/table/table.css +348 -0
  229. package/src/components/tabs/Tabs.tsx +371 -0
  230. package/src/components/tabs/tabs.css +228 -0
  231. package/src/components/tag/Tag.tsx +145 -0
  232. package/src/components/tag/ToggleTag.tsx +125 -0
  233. package/src/components/tag/tag.css +248 -0
  234. package/src/components/textarea/Textarea.tsx +197 -0
  235. package/src/components/textarea/textarea.css +219 -0
  236. package/src/components/toast/Toast.tsx +349 -0
  237. package/src/components/toast/toast-store.ts +266 -0
  238. package/src/components/toast/toast.css +233 -0
  239. package/src/components/toggle/Toggle.tsx +94 -0
  240. package/src/components/toggle/toggle.css +152 -0
  241. package/src/components/tooltip/Tooltip.tsx +365 -0
  242. package/src/components/tooltip/tooltip.css +86 -0
  243. package/src/index.ts +42 -0
  244. package/src/styles.css +39 -0
  245. package/src/tokens/avatar.css +20 -0
  246. package/src/tokens/color.css +56 -0
  247. package/src/tokens/elevation.css +20 -0
  248. package/src/tokens/fonts.css +3 -0
  249. package/src/tokens/glass.css +21 -0
  250. package/src/tokens/icons.css +7 -0
  251. package/src/tokens/layers.css +6 -0
  252. package/src/tokens/motion-tokens.ts +72 -0
  253. package/src/tokens/motion.css +49 -0
  254. package/src/tokens/radius.css +11 -0
  255. package/src/tokens/semantic.css +75 -0
  256. package/src/tokens/spacing.css +26 -0
  257. package/src/tokens/typography.css +54 -0
@@ -0,0 +1,386 @@
1
+ /* Select family - <Select> (single) + <MultiSelect>, one .select__* vocabulary (no native <select>). */
2
+
3
+ .select {
4
+ position: relative;
5
+ display: inline-block;
6
+ width: 100%;
7
+ font-family: var(--font-sans);
8
+ }
9
+
10
+ .select__trigger {
11
+ appearance: none;
12
+ margin: 0;
13
+ font-family: inherit;
14
+ cursor: pointer;
15
+ text-align: left;
16
+ display: flex;
17
+ align-items: center;
18
+ gap: var(--space-2);
19
+ width: 100%;
20
+ height: var(--control-height);
21
+ padding: 0 var(--space-3);
22
+ background: var(--bg-inset);
23
+ border: var(--border-hairline) solid var(--border-default);
24
+ border-radius: var(--radius-md);
25
+ color: var(--text-body);
26
+ font-size: var(--size-body);
27
+ line-height: var(--leading-body);
28
+ font-weight: var(--weight-regular);
29
+ transition:
30
+ color var(--duration-base) var(--ease-standard),
31
+ background-color var(--duration-base) var(--ease-standard),
32
+ border-color var(--duration-base) var(--ease-standard),
33
+ box-shadow var(--duration-base) var(--ease-standard);
34
+ }
35
+ .select__trigger:hover {
36
+ border-color: var(--border-strong);
37
+ background-color: var(--neutral-wash);
38
+ }
39
+ .select__trigger:focus-visible {
40
+ outline: none;
41
+ border-color: var(--accent);
42
+ background: var(--bg-surface);
43
+ box-shadow: var(--ring-accent);
44
+ }
45
+ .select[data-open='true'] .select__trigger {
46
+ border-color: var(--accent);
47
+ background: var(--bg-surface);
48
+ box-shadow: var(--ring-accent);
49
+ }
50
+
51
+ .select[data-size='sm'] .select__trigger {
52
+ height: var(--control-height-sm);
53
+ padding: 0 var(--space-2);
54
+ font-size: var(--size-caption);
55
+ line-height: var(--leading-caption);
56
+ gap: var(--space-1);
57
+ }
58
+ .select[data-size='lg'] .select__trigger {
59
+ height: var(--control-height-lg);
60
+ padding: 0 var(--space-4);
61
+ }
62
+
63
+ .select[data-invalid='true'] .select__trigger {
64
+ border-color: var(--danger);
65
+ }
66
+ .select[data-invalid='true'] .select__trigger:focus-visible,
67
+ .select[data-invalid='true'][data-open='true'] .select__trigger {
68
+ border-color: var(--danger);
69
+ box-shadow: var(--ring-danger);
70
+ }
71
+
72
+ .select[data-disabled='true'] .select__trigger {
73
+ cursor: not-allowed;
74
+ background: var(--bg-muted);
75
+ border-color: var(--border-subtle);
76
+ color: var(--text-disabled);
77
+ box-shadow: none;
78
+ }
79
+ .select[data-disabled='true'] .select__value,
80
+ .select[data-disabled='true'] .select__leading,
81
+ .select[data-disabled='true'] .select__caret {
82
+ color: var(--text-disabled);
83
+ }
84
+
85
+ .select[data-loading='true'] .select__value {
86
+ color: var(--text-muted);
87
+ }
88
+
89
+ .select__leading {
90
+ display: inline-flex;
91
+ flex: 0 0 auto;
92
+ font-size: var(--icon-sm);
93
+ color: var(--text-muted);
94
+ }
95
+ .select__value {
96
+ flex: 1 1 auto;
97
+ min-width: 0;
98
+ color: var(--text-body);
99
+ }
100
+ .select__value[data-placeholder='true'] {
101
+ color: var(--text-disabled);
102
+ }
103
+ .select__caret {
104
+ display: inline-flex;
105
+ flex: 0 0 auto;
106
+ font-size: var(--icon-sm);
107
+ color: var(--text-subtle);
108
+ transition:
109
+ transform var(--duration-base) var(--ease-entrance),
110
+ color var(--duration-fast) var(--ease-standard);
111
+ }
112
+ .select[data-open='true'] .select__caret {
113
+ transform: rotate(180deg);
114
+ color: var(--text-muted);
115
+ }
116
+ .select__count {
117
+ flex: 0 0 auto;
118
+ font-family: var(--font-mono);
119
+ font-size: var(--size-micro);
120
+ line-height: 1;
121
+ font-variant-numeric: tabular-nums;
122
+ color: var(--text-accent);
123
+ background: var(--accent-wash);
124
+ padding: var(--space-px) var(--space-1);
125
+ border-radius: var(--radius-sm);
126
+ }
127
+
128
+ .select__value,
129
+ .select__option-label,
130
+ .select__option-desc {
131
+ overflow: hidden;
132
+ text-overflow: ellipsis;
133
+ white-space: nowrap;
134
+ }
135
+
136
+ /* Menu enter/exit are Motion-owned inline styles (selectMenuVariants); this sheet only sets the look + transform-origin. */
137
+ .select__menu {
138
+ position: fixed;
139
+ margin: 0;
140
+ inset: auto; /* JS sets top/left/min-width - anchor() needs the top layer, which we don't use */
141
+ z-index: var(
142
+ --layer-overlay
143
+ ); /* base of the overlay band (tokens/layers.css) - plain React-owned node, not the top layer */
144
+ width: max-content;
145
+ max-width: min(22rem, 92vw);
146
+ background: var(--bg-surface-raised);
147
+ border: var(--border-hairline) solid var(--border-default);
148
+ border-radius: var(--radius-lg);
149
+ box-shadow: var(--shadow-lg);
150
+ padding: var(--space-1);
151
+ transform-origin: top left;
152
+ }
153
+
154
+ .select__search {
155
+ display: flex;
156
+ align-items: center;
157
+ gap: var(--space-2);
158
+ padding: var(--space-2);
159
+ margin: 0 0 var(--space-1);
160
+ border-bottom: var(--border-hairline) solid var(--border-subtle);
161
+ font-size: var(--icon-sm);
162
+ color: var(--text-subtle);
163
+ }
164
+ .select__search-input {
165
+ appearance: none;
166
+ border: none;
167
+ outline: none;
168
+ background: transparent;
169
+ width: 100%;
170
+ padding: 0;
171
+ font-family: var(--font-sans);
172
+ font-size: var(--size-body);
173
+ line-height: var(--leading-body);
174
+ color: var(--text-body);
175
+ }
176
+ .select__search-input::placeholder {
177
+ color: var(--text-disabled);
178
+ }
179
+
180
+ /* Row-height motion is the Collapse primitive, not this scroll container. */
181
+ .select__list {
182
+ max-height: 16.5rem;
183
+ overflow-y: auto;
184
+ overscroll-behavior: contain;
185
+ scroll-behavior: smooth;
186
+ scrollbar-width: none;
187
+ }
188
+ .select__list::-webkit-scrollbar {
189
+ width: 0;
190
+ height: 0;
191
+ display: none;
192
+ }
193
+
194
+ .select__group-label {
195
+ position: sticky;
196
+ top: 0;
197
+ z-index: 1;
198
+ background: var(--bg-surface-raised);
199
+ padding: var(--space-2) var(--space-2) var(--space-1);
200
+ font: var(--type-micro);
201
+ text-transform: uppercase;
202
+ letter-spacing: var(--tracking-caps);
203
+ color: var(--text-subtle);
204
+ }
205
+ .select__group + .select__group .select__group-label {
206
+ border-top: var(--border-hairline) solid var(--border-subtle);
207
+ margin-top: var(--space-1);
208
+ }
209
+
210
+ .select__option {
211
+ display: flex;
212
+ align-items: center;
213
+ gap: var(--space-2);
214
+ padding: var(--space-2);
215
+ border-radius: var(--radius-md);
216
+ cursor: pointer;
217
+ color: var(--text-body);
218
+ user-select: none;
219
+ transition:
220
+ background-color var(--duration-base) var(--ease-standard),
221
+ color var(--duration-base) var(--ease-standard);
222
+ }
223
+ .select__option-icon {
224
+ display: inline-flex;
225
+ flex: 0 0 auto;
226
+ font-size: var(--icon-sm);
227
+ color: var(--text-muted);
228
+ }
229
+ .select__option-text {
230
+ display: flex;
231
+ flex-direction: column;
232
+ gap: var(--space-px);
233
+ min-width: 0;
234
+ flex: 1 1 auto;
235
+ }
236
+ .select__option-label {
237
+ font-size: var(--size-body);
238
+ line-height: var(--leading-body);
239
+ }
240
+ .select__option-desc {
241
+ font: var(--type-caption);
242
+ color: var(--text-subtle);
243
+ }
244
+ .select__option-check {
245
+ display: inline-flex;
246
+ align-items: center;
247
+ justify-content: center;
248
+ flex: 0 0 auto;
249
+ min-width: var(--icon-sm);
250
+ font-size: var(--icon-sm);
251
+ color: var(--accent);
252
+ opacity: 0;
253
+ transition: var(--transition-opacity);
254
+ }
255
+
256
+ /* No selected+active rule needed - the selected rules follow active, so source order wins. */
257
+ .select__option[data-active='true'] {
258
+ background-color: var(--neutral-wash);
259
+ color: var(--text-strong);
260
+ }
261
+ .select__option[data-active='true'] .select__option-icon {
262
+ color: var(--text-body);
263
+ }
264
+ .select__option[data-selected='true'] {
265
+ background-color: var(--accent-wash);
266
+ }
267
+ .select__option[data-selected='true'] .select__option-label {
268
+ color: var(--text-accent);
269
+ font-weight: var(--weight-medium);
270
+ }
271
+ .select__option[data-selected='true'] .select__option-icon {
272
+ color: var(--text-accent);
273
+ }
274
+ .select__option[data-selected='true'] .select__option-check {
275
+ opacity: 1;
276
+ }
277
+ .select__option[data-disabled='true'] {
278
+ cursor: not-allowed;
279
+ color: var(--text-disabled);
280
+ }
281
+ .select__option[data-disabled='true'] .select__option-icon {
282
+ color: var(--text-disabled);
283
+ }
284
+
285
+ /* check lands with a spring when a row becomes selected (remounts via React key) */
286
+ .select__option[data-selected='true'] .select__option-check :is(i, svg) {
287
+ animation: select-check-in var(--duration-base) var(--ease-spring);
288
+ }
289
+ @keyframes select-check-in {
290
+ from {
291
+ opacity: 0;
292
+ transform: scale(0.5);
293
+ }
294
+ to {
295
+ opacity: 1;
296
+ transform: scale(1);
297
+ }
298
+ }
299
+
300
+ /* Multi-select: the reused Checkbox box IS the indicator - no row fill (avoid double-encoding); strip the .cbx standalone chrome. */
301
+ .select[data-multiple='true'] .select__option-check {
302
+ opacity: 1;
303
+ }
304
+ .select[data-multiple='true'] .select__option .cbx {
305
+ padding: 0;
306
+ gap: 0;
307
+ pointer-events: none;
308
+ }
309
+ .select[data-multiple='true'] .select__option .cbx__box {
310
+ margin-top: 0;
311
+ }
312
+
313
+ /* Row owns the press (.cbx is pointer-events:none); --press inherits down to dip .cbx__box. */
314
+ .select[data-multiple='true'] .select__option:active:not([data-disabled='true']) .cbx {
315
+ --press: 0.88;
316
+ }
317
+ .select[data-multiple='true'] .select__option[data-selected='true'] {
318
+ background-color: transparent;
319
+ }
320
+ .select[data-multiple='true'] .select__option[data-selected='true'][data-active='true'] {
321
+ background-color: var(--neutral-wash);
322
+ }
323
+
324
+ .select__empty {
325
+ padding: var(--space-4) var(--space-3);
326
+ text-align: center;
327
+ font: var(--type-caption);
328
+ color: var(--text-subtle);
329
+ }
330
+
331
+ .select__loading {
332
+ display: flex;
333
+ flex-direction: column;
334
+ gap: var(--space-1);
335
+ padding: var(--space-1);
336
+ }
337
+ .select__skeleton {
338
+ display: flex;
339
+ align-items: center;
340
+ gap: var(--space-2);
341
+ padding: var(--space-2);
342
+ }
343
+ .select__skeleton-dot {
344
+ width: var(--icon-sm);
345
+ height: var(--icon-sm);
346
+ border-radius: var(--radius-full);
347
+ background: var(--bg-muted);
348
+ flex: 0 0 auto;
349
+ }
350
+ .select__skeleton-bar {
351
+ height: 0.5rem;
352
+ border-radius: var(--radius-full);
353
+ background: var(--bg-muted);
354
+ flex: 1 1 auto;
355
+ max-width: 11rem;
356
+ }
357
+ .select__skeleton:nth-child(2) .select__skeleton-bar {
358
+ max-width: 7rem;
359
+ }
360
+ .select__skeleton:nth-child(3) .select__skeleton-bar {
361
+ max-width: 9rem;
362
+ }
363
+ .select__loading [data-pulse] {
364
+ animation: select-pulse var(--duration-spin) var(--ease-standard) infinite alternate;
365
+ }
366
+ @keyframes select-pulse {
367
+ from {
368
+ opacity: 0.55;
369
+ }
370
+ to {
371
+ opacity: 1;
372
+ }
373
+ }
374
+
375
+ @media (prefers-reduced-motion: reduce) {
376
+ .select__list {
377
+ scroll-behavior: auto;
378
+ }
379
+ .select__option-check :is(i, svg),
380
+ .select__loading [data-pulse] {
381
+ animation: none;
382
+ }
383
+ .select__loading [data-pulse] {
384
+ opacity: 0.7;
385
+ }
386
+ }