@visitwonders/assembly 0.10.0 → 0.11.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 (46) hide show
  1. package/README.md +83 -0
  2. package/declarations/form/combobox-field.d.ts +71 -0
  3. package/declarations/form/combobox-field.d.ts.map +1 -0
  4. package/declarations/form/combobox-shared.d.ts +36 -0
  5. package/declarations/form/combobox-shared.d.ts.map +1 -0
  6. package/declarations/form/combobox.d.ts +239 -0
  7. package/declarations/form/combobox.d.ts.map +1 -0
  8. package/declarations/form/index.d.ts +4 -0
  9. package/declarations/form/index.d.ts.map +1 -1
  10. package/declarations/form/multi-combobox-field.d.ts +72 -0
  11. package/declarations/form/multi-combobox-field.d.ts.map +1 -0
  12. package/declarations/form/multi-combobox.d.ts +202 -0
  13. package/declarations/form/multi-combobox.d.ts.map +1 -0
  14. package/declarations/layout/h-stack.d.ts.map +1 -1
  15. package/declarations/layout/stack.d.ts.map +1 -1
  16. package/declarations/layout/v-stack.d.ts.map +1 -1
  17. package/declarations/overlay/popover.d.ts +20 -1
  18. package/declarations/overlay/popover.d.ts.map +1 -1
  19. package/dist/_app_/form/combobox-field.js +1 -0
  20. package/dist/_app_/form/combobox-shared.js +1 -0
  21. package/dist/_app_/form/combobox.js +1 -0
  22. package/dist/_app_/form/multi-combobox-field.js +1 -0
  23. package/dist/_app_/form/multi-combobox.js +1 -0
  24. package/dist/data/{sortable-list-css-211fcfeedc08052ccbac7f51549ce0b1.css → sortable-list-css-03e5d237ea377f7d6056e76cc85b2aaa.css} +8 -4
  25. package/dist/data/sortable-list.js +1 -1
  26. package/dist/form/combobox-field.js +37 -0
  27. package/dist/form/combobox-field.js.map +1 -0
  28. package/dist/form/combobox-shared.js +76 -0
  29. package/dist/form/combobox-shared.js.map +1 -0
  30. package/dist/form/combobox.css +345 -0
  31. package/dist/form/combobox.js +612 -0
  32. package/dist/form/combobox.js.map +1 -0
  33. package/dist/form/{display-field-css-890d9be4b5da61613fd017071f330735.css → display-field-css-502236a2343d47e31e52bdb93a769ca1.css} +2 -2
  34. package/dist/form/display-field.js +1 -1
  35. package/dist/form/index.js +4 -0
  36. package/dist/form/index.js.map +1 -1
  37. package/dist/form/multi-combobox-field.js +36 -0
  38. package/dist/form/multi-combobox-field.js.map +1 -0
  39. package/dist/form/multi-combobox.css +422 -0
  40. package/dist/form/multi-combobox.js +626 -0
  41. package/dist/form/multi-combobox.js.map +1 -0
  42. package/dist/layout/h-stack.js.map +1 -1
  43. package/dist/layout/panel.css +10 -0
  44. package/dist/layout/v-stack.js.map +1 -1
  45. package/dist/overlay/popover.js +19 -1
  46. package/package.json +6 -1
@@ -0,0 +1,345 @@
1
+ /* src/form/combobox.css */
2
+ /* ===================================
3
+ * ComboBox Component
4
+ * Searchable single-select with typeahead
5
+ * =================================== */
6
+
7
+ .combobox_e2657ea63 {
8
+ display: inline-flex;
9
+ width: 100%;
10
+ }
11
+
12
+ /* Visually-hidden aria-live region used by .combobox for screen-reader
13
+ * result-count announcements. Standard sr-only pattern. */
14
+ .combobox-sr-only_e2657ea63 {
15
+ position: absolute;
16
+ width: 1px;
17
+ height: 1px;
18
+ padding: 0;
19
+ margin: -1px;
20
+ overflow: hidden;
21
+ clip: rect(0, 0, 0, 0);
22
+ white-space: nowrap;
23
+ border: 0;
24
+ }
25
+
26
+ /* ===================================
27
+ * Trigger wrapper — looks like a TextField, contains the input
28
+ * and the chevron + clear affordances.
29
+ * =================================== */
30
+
31
+ .combobox_e2657ea63 .combobox-trigger_e2657ea63 {
32
+ position: relative;
33
+ display: flex;
34
+ align-items: center;
35
+ width: 100%;
36
+ height: var(--input-height-md);
37
+ border: var(--border-width-1) solid var(--color-border-control);
38
+ border-radius: var(--radius-md);
39
+ background-color: var(--color-bg);
40
+ transition:
41
+ border-color var(--transition-fast),
42
+ box-shadow var(--transition-fast);
43
+ }
44
+
45
+ .combobox_e2657ea63 .combobox-trigger_e2657ea63:hover:not([data-disabled="true"]) {
46
+ border-color: var(--color-border-control-hover);
47
+ }
48
+
49
+ .combobox_e2657ea63 .combobox-trigger_e2657ea63:focus-within {
50
+ border-color: var(--color-border-focus);
51
+ box-shadow: var(--focus-ring);
52
+ }
53
+
54
+ /* ===================================
55
+ * Input — the trigger AND the search field, per the WAI-ARIA
56
+ * "Editable Combobox With List Autocomplete" pattern.
57
+ * =================================== */
58
+
59
+ .combobox-input_e2657ea63 {
60
+ flex: 1;
61
+ min-width: 0;
62
+ height: 100%;
63
+ padding: 0 var(--input-padding-horizontal-md);
64
+ border: none;
65
+ background: transparent;
66
+ font-family: inherit;
67
+ font-size: var(--font-size-md);
68
+ line-height: var(--line-height-tight);
69
+ color: var(--color-text);
70
+ text-overflow: ellipsis;
71
+ }
72
+
73
+ /* Suppress the input's own focus ring — the wrapper (:focus-within)
74
+ owns the focused look. Chrome re-applies `outline: auto` on
75
+ :focus-visible even when the base rule declares `outline: none`,
76
+ which produced a stray inner blue rectangle inside the wrapper's
77
+ border. Nuke it at both states to be safe. */
78
+ .combobox-input_e2657ea63,
79
+ .combobox-input_e2657ea63:focus,
80
+ .combobox-input_e2657ea63:focus-visible {
81
+ outline: none;
82
+ box-shadow: none;
83
+ }
84
+
85
+ .combobox-input_e2657ea63::placeholder {
86
+ color: var(--color-text-tertiary);
87
+ }
88
+
89
+ .combobox-input_e2657ea63:disabled {
90
+ cursor: not-allowed;
91
+ }
92
+
93
+ /* When trailing affordances are present, leave room for them so the
94
+ * typed text doesn't slide under the icons. */
95
+ .combobox-input_e2657ea63 {
96
+ padding-right: var(--spacing-1);
97
+ }
98
+
99
+ /* ===================================
100
+ * Clear Button
101
+ * =================================== */
102
+
103
+ .combobox-clear_e2657ea63,
104
+ .combobox-chevron_e2657ea63 {
105
+ flex-shrink: 0;
106
+ display: inline-flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ width: 24px;
110
+ height: 24px;
111
+ padding: 0;
112
+ margin: 0 2px;
113
+ border: none;
114
+ background: transparent;
115
+ color: var(--color-text-tertiary);
116
+ cursor: pointer;
117
+ border-radius: var(--radius-sm);
118
+ transition: color var(--transition-fast);
119
+ }
120
+
121
+ .combobox-clear_e2657ea63:hover,
122
+ .combobox-chevron_e2657ea63:hover:not(:disabled) {
123
+ color: var(--color-text);
124
+ }
125
+
126
+ .combobox-chevron_e2657ea63 {
127
+ margin-right: var(--spacing-1);
128
+ transition:
129
+ transform var(--transition-fast),
130
+ color var(--transition-fast);
131
+ }
132
+
133
+ .combobox_e2657ea63[data-open="true"] .combobox-chevron_e2657ea63 {
134
+ transform: rotate(180deg);
135
+ }
136
+
137
+ .combobox-chevron_e2657ea63:disabled {
138
+ color: var(--color-text-disabled);
139
+ cursor: not-allowed;
140
+ }
141
+
142
+ /* ===================================
143
+ * Invalid State
144
+ * =================================== */
145
+
146
+ .combobox_e2657ea63[data-invalid="true"] .combobox-trigger_e2657ea63 {
147
+ border-color: var(--color-border-critical);
148
+ }
149
+
150
+ .combobox_e2657ea63[data-invalid="true"] .combobox-trigger_e2657ea63:focus-within {
151
+ border-color: var(--color-border-critical);
152
+ box-shadow: var(--focus-ring-critical);
153
+ }
154
+
155
+ /* ===================================
156
+ * Disabled State
157
+ * =================================== */
158
+
159
+ .combobox_e2657ea63[data-disabled="true"] .combobox-trigger_e2657ea63 {
160
+ background-color: var(--color-bg-disabled);
161
+ border-color: var(--color-border-control-disabled);
162
+ cursor: not-allowed;
163
+ }
164
+
165
+ .combobox_e2657ea63[data-disabled="true"] .combobox-input_e2657ea63 {
166
+ color: var(--color-text-disabled);
167
+ }
168
+
169
+ /* ===================================
170
+ * Popover Content
171
+ * =================================== */
172
+
173
+ .combobox-popover-content_e2657ea63 {
174
+ min-width: 240px;
175
+ max-height: min(320px, 40vh);
176
+ display: flex;
177
+ flex-direction: column;
178
+ padding: 0;
179
+ overflow: hidden;
180
+ /* Anchor the open-scale animation to the top-left edge so it appears
181
+ * to emerge from the trigger (which is left-aligned) rather than
182
+ * inflate from its own centre. */
183
+ transform-origin: top left;
184
+ }
185
+
186
+ .combobox-listbox_e2657ea63 {
187
+ flex: 1;
188
+ min-height: 0;
189
+ overflow-y: auto;
190
+ padding: var(--spacing-2) var(--spacing-1);
191
+ /* Keep the active row comfortably away from the scroll edges when
192
+ * keyboard nav brings it into view (scrollIntoView({ block: 'nearest' })). */
193
+ scroll-padding-block: var(--spacing-2);
194
+ }
195
+
196
+ /* ===================================
197
+ * Empty / Loading State
198
+ * =================================== */
199
+
200
+ .combobox-empty_e2657ea63,
201
+ .combobox-loading_e2657ea63 {
202
+ padding: var(--spacing-3);
203
+ text-align: center;
204
+ color: var(--color-text-tertiary);
205
+ font-size: var(--font-size-13);
206
+ }
207
+
208
+ /* ===================================
209
+ * Groups
210
+ * =================================== */
211
+
212
+ .combobox-group_e2657ea63:not(:first-child) {
213
+ border-top: 1px solid var(--color-border-subtle);
214
+ margin-top: var(--spacing-1);
215
+ padding-top: var(--spacing-1);
216
+ }
217
+
218
+ .combobox-group-heading_e2657ea63 {
219
+ padding: var(--spacing-2) var(--spacing-3) var(--spacing-1);
220
+ font-size: var(--font-size-11);
221
+ font-weight: var(--font-weight-medium);
222
+ color: var(--color-text-tertiary);
223
+ text-transform: uppercase;
224
+ letter-spacing: 0.05em;
225
+ }
226
+
227
+ /* ===================================
228
+ * Create row
229
+ * =================================== */
230
+
231
+ .combobox-create_e2657ea63 {
232
+ border-top: 1px solid var(--color-border-subtle);
233
+ margin-top: var(--spacing-1);
234
+ padding-top: var(--spacing-2);
235
+ color: var(--color-text-accent);
236
+ font-weight: var(--font-weight-medium);
237
+ }
238
+
239
+ .combobox-create-icon_e2657ea63 {
240
+ flex-shrink: 0;
241
+ display: inline-flex;
242
+ align-items: center;
243
+ justify-content: center;
244
+ width: 16px;
245
+ height: 16px;
246
+ font-size: var(--font-size-md);
247
+ line-height: 1;
248
+ }
249
+
250
+ /* ===================================
251
+ * Options
252
+ * =================================== */
253
+
254
+ .combobox-option_e2657ea63 {
255
+ display: flex;
256
+ align-items: flex-start;
257
+ justify-content: space-between;
258
+ gap: var(--spacing-2);
259
+ padding: var(--spacing-2) var(--spacing-3);
260
+ border-radius: var(--radius-sm);
261
+ font-size: var(--font-size-13);
262
+ line-height: var(--line-height-tight);
263
+ color: var(--color-text);
264
+ cursor: pointer;
265
+ user-select: none;
266
+ transition: background-color var(--transition-fast);
267
+ }
268
+
269
+ .combobox-option_e2657ea63:hover:not([data-disabled="true"]) {
270
+ background-color: var(--color-bg-neutral-subtle);
271
+ }
272
+
273
+ .combobox-option_e2657ea63[data-active="true"]:not([data-disabled="true"]) {
274
+ background-color: var(--color-bg-neutral-subtle);
275
+ }
276
+
277
+ .combobox-option_e2657ea63[data-selected="true"] {
278
+ color: var(--color-text-accent);
279
+ font-weight: var(--font-weight-medium);
280
+ }
281
+
282
+ .combobox-option_e2657ea63[data-disabled="true"] {
283
+ color: var(--color-text-disabled);
284
+ cursor: not-allowed;
285
+ }
286
+
287
+ .combobox-option-content_e2657ea63 {
288
+ flex: 1;
289
+ min-width: 0;
290
+ display: flex;
291
+ flex-direction: column;
292
+ gap: 2px;
293
+ }
294
+
295
+ .combobox-option-label_e2657ea63 {
296
+ display: block;
297
+ overflow: hidden;
298
+ text-overflow: ellipsis;
299
+ white-space: nowrap;
300
+ }
301
+
302
+ .combobox-option-description_e2657ea63 {
303
+ display: block;
304
+ font-size: var(--font-size-11);
305
+ font-weight: var(--font-weight-regular);
306
+ color: var(--color-text-tertiary);
307
+ overflow: hidden;
308
+ text-overflow: ellipsis;
309
+ white-space: nowrap;
310
+ }
311
+
312
+ /* ===================================
313
+ * Match highlight
314
+ * =================================== */
315
+
316
+ .combobox-mark_e2657ea63 {
317
+ background: transparent;
318
+ color: inherit;
319
+ font-weight: var(--font-weight-bold);
320
+ padding: 0;
321
+ }
322
+
323
+ /* ===================================
324
+ * Checkmark indicator
325
+ * =================================== */
326
+
327
+ .combobox-option-check_e2657ea63 {
328
+ flex-shrink: 0;
329
+ width: 16px;
330
+ height: 16px;
331
+ position: relative;
332
+ margin-top: 2px;
333
+ }
334
+
335
+ .combobox-option-check_e2657ea63::before {
336
+ content: "";
337
+ position: absolute;
338
+ left: 5px;
339
+ top: 2px;
340
+ width: 5px;
341
+ height: 10px;
342
+ border: solid currentColor;
343
+ border-width: 0 2px 2px 0;
344
+ transform: rotate(45deg);
345
+ }