@aquera/nile-elements 1.7.1 → 1.7.2

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 (75) hide show
  1. package/README.md +3 -0
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.esm.js +1 -1
  4. package/dist/index.js +1396 -413
  5. package/dist/nile-combobox/index.cjs.js +2 -0
  6. package/dist/nile-combobox/index.cjs.js.map +1 -0
  7. package/dist/nile-combobox/index.esm.js +1 -0
  8. package/dist/nile-combobox/nile-combobox.cjs.js +2 -0
  9. package/dist/nile-combobox/nile-combobox.cjs.js.map +1 -0
  10. package/dist/nile-combobox/nile-combobox.css.cjs.js +2 -0
  11. package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -0
  12. package/dist/nile-combobox/nile-combobox.css.esm.js +642 -0
  13. package/dist/nile-combobox/nile-combobox.esm.js +233 -0
  14. package/dist/nile-combobox/portal-manager.cjs.js +2 -0
  15. package/dist/nile-combobox/portal-manager.cjs.js.map +1 -0
  16. package/dist/nile-combobox/portal-manager.esm.js +1 -0
  17. package/dist/nile-combobox/renderer.cjs.js +2 -0
  18. package/dist/nile-combobox/renderer.cjs.js.map +1 -0
  19. package/dist/nile-combobox/renderer.esm.js +105 -0
  20. package/dist/nile-combobox/search-manager.cjs.js +2 -0
  21. package/dist/nile-combobox/search-manager.cjs.js.map +1 -0
  22. package/dist/nile-combobox/search-manager.esm.js +1 -0
  23. package/dist/nile-combobox/selection-manager.cjs.js +2 -0
  24. package/dist/nile-combobox/selection-manager.cjs.js.map +1 -0
  25. package/dist/nile-combobox/selection-manager.esm.js +1 -0
  26. package/dist/nile-combobox/types.cjs.js +2 -0
  27. package/dist/nile-combobox/types.cjs.js.map +1 -0
  28. package/dist/nile-combobox/types.esm.js +1 -0
  29. package/dist/src/index.d.ts +1 -0
  30. package/dist/src/index.js +1 -0
  31. package/dist/src/index.js.map +1 -1
  32. package/dist/src/nile-combobox/index.d.ts +1 -0
  33. package/dist/src/nile-combobox/index.js +2 -0
  34. package/dist/src/nile-combobox/index.js.map +1 -0
  35. package/dist/src/nile-combobox/nile-combobox.css.d.ts +9 -0
  36. package/dist/src/nile-combobox/nile-combobox.css.js +651 -0
  37. package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -0
  38. package/dist/src/nile-combobox/nile-combobox.d.ts +287 -0
  39. package/dist/src/nile-combobox/nile-combobox.js +1602 -0
  40. package/dist/src/nile-combobox/nile-combobox.js.map +1 -0
  41. package/dist/src/nile-combobox/nile-combobox.test.d.ts +1 -0
  42. package/dist/src/nile-combobox/nile-combobox.test.js +551 -0
  43. package/dist/src/nile-combobox/nile-combobox.test.js.map +1 -0
  44. package/dist/src/nile-combobox/portal-manager.d.ts +26 -0
  45. package/dist/src/nile-combobox/portal-manager.js +218 -0
  46. package/dist/src/nile-combobox/portal-manager.js.map +1 -0
  47. package/dist/src/nile-combobox/renderer.d.ts +20 -0
  48. package/dist/src/nile-combobox/renderer.js +210 -0
  49. package/dist/src/nile-combobox/renderer.js.map +1 -0
  50. package/dist/src/nile-combobox/search-manager.d.ts +15 -0
  51. package/dist/src/nile-combobox/search-manager.js +41 -0
  52. package/dist/src/nile-combobox/search-manager.js.map +1 -0
  53. package/dist/src/nile-combobox/selection-manager.d.ts +12 -0
  54. package/dist/src/nile-combobox/selection-manager.js +44 -0
  55. package/dist/src/nile-combobox/selection-manager.js.map +1 -0
  56. package/dist/src/nile-combobox/types.d.ts +23 -0
  57. package/dist/src/nile-combobox/types.js +8 -0
  58. package/dist/src/nile-combobox/types.js.map +1 -0
  59. package/dist/src/version.js +1 -1
  60. package/dist/src/version.js.map +1 -1
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +3 -1
  63. package/src/index.ts +1 -0
  64. package/src/nile-combobox/index.ts +1 -0
  65. package/src/nile-combobox/nile-combobox.css.ts +653 -0
  66. package/src/nile-combobox/nile-combobox.test.ts +704 -0
  67. package/src/nile-combobox/nile-combobox.ts +1663 -0
  68. package/src/nile-combobox/portal-manager.ts +263 -0
  69. package/src/nile-combobox/renderer.ts +349 -0
  70. package/src/nile-combobox/search-manager.ts +53 -0
  71. package/src/nile-combobox/selection-manager.ts +57 -0
  72. package/src/nile-combobox/types.ts +27 -0
  73. package/vscode-html-custom-data.json +306 -4
  74. package/web-dev-server.config.mjs +9 -0
  75. package/web-test-runner.config.mjs +11 -0
@@ -0,0 +1,651 @@
1
+ /**
2
+ * Copyright Aquera Inc 2025
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { css } from 'lit';
8
+ export const styles = css `
9
+ :host {
10
+ display: block;
11
+ box-sizing: border-box;
12
+ -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));
13
+ -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));
14
+ text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));
15
+ }
16
+
17
+ :host *,
18
+ :host *::before,
19
+ :host *::after {
20
+ box-sizing: inherit;
21
+ }
22
+
23
+ [hidden] {
24
+ display: none;
25
+ }
26
+
27
+ /* ── Form control ── */
28
+
29
+ .form-control .form-control__label {
30
+ display: none;
31
+ }
32
+
33
+ .form-control--has-label .form-control__label {
34
+ display: block;
35
+ margin-bottom: var(--nile-spacing-sm, var(--ng-spacing-sm));
36
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-secondary-700));
37
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
38
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));
39
+ font-style: normal;
40
+ font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));
41
+ line-height: var(--nile-spacing-2xl, var(--ng-line-height-text-sm));
42
+ letter-spacing: 0.2px;
43
+ }
44
+
45
+ .form-control--has-label.form-control--medium .form-control__label {
46
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
47
+ }
48
+
49
+ :host([required]) .form-control--has-label .form-control__label::after {
50
+ content: '*';
51
+ margin-inline-start: -2px;
52
+ color: var(--nile-colors-red-700, var(--ng-colors-text-error-primary-600));
53
+ }
54
+
55
+ :host([disabled]) .form-control--has-label .form-control__label {
56
+ user-select: none;
57
+ -webkit-user-select: none;
58
+ }
59
+
60
+ /* ── Popup ── */
61
+
62
+ .combobox-popup {
63
+ flex: 1 1 auto;
64
+ display: inline-flex;
65
+ width: 100%;
66
+ position: relative;
67
+ vertical-align: middle;
68
+ }
69
+
70
+ .combobox-popup::part(popup) {
71
+ z-index: 9999;
72
+ }
73
+
74
+ .combobox-popup[data-current-placement^='top']::part(popup) {
75
+ transform-origin: bottom;
76
+ }
77
+
78
+ .combobox-popup[data-current-placement^='bottom']::part(popup) {
79
+ transform-origin: top;
80
+ }
81
+
82
+ /* ── Trigger: outer row that never scrolls ── */
83
+
84
+ .combobox__trigger {
85
+ display: flex;
86
+ align-items: center;
87
+ width: 100%;
88
+ min-width: 0;
89
+ position: relative;
90
+ font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));
91
+ font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));
92
+ letter-spacing: normal;
93
+ cursor: text;
94
+ transition: 150ms color, 150ms border, 150ms box-shadow, 150ms background-color;
95
+ background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
96
+ border: solid 1px var(--nile-colors-neutral-500, var(--ng-colors-border-primary));
97
+ outline: none;
98
+ }
99
+
100
+ .combobox__trigger:hover {
101
+ border-color: var(--nile-colors-dark-900, var(--ng-colors-border-neutral));
102
+ }
103
+
104
+ .combobox--open .combobox__trigger,
105
+ .combobox--focused .combobox__trigger {
106
+ border-color: var(--ng-colors-border-brand);
107
+ box-shadow: 0 0 0 1px var(--ng-colors-border-brand) inset;
108
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
109
+ }
110
+
111
+ .combobox--disabled .combobox__trigger {
112
+ background-color: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));
113
+ border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-primary));
114
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));
115
+ cursor: not-allowed;
116
+ user-select: none;
117
+ }
118
+
119
+ .combobox--warning .combobox__trigger {
120
+ border-color: var(--nile-colors-yellow-500, var(--ng-colors-border-warning));
121
+ }
122
+
123
+ .combobox--error .combobox__trigger {
124
+ border-color: var(--nile-colors-red-500, var(--ng-colors-border-error));
125
+ }
126
+
127
+ .combobox--success .combobox__trigger {
128
+ border-color: var(--nile-colors-green-500, var(--ng-componentcolors-utility-success-500));
129
+ }
130
+
131
+ /* Size: small */
132
+ .combobox--small .combobox__trigger {
133
+ border-radius: var(--nile-radius-sm, var(--ng-radius-md));
134
+ font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));
135
+ padding: var(--nile-spacing-md, var(--ng-spacing-sm)) var(--nile-spacing-md, var(--ng-spacing-md));
136
+ min-height: var(--nile-height-32px, var(--ng-height-32px));
137
+ }
138
+
139
+ /* Size: medium */
140
+ .combobox--medium .combobox__trigger {
141
+ border-radius: var(--nile-radius-sm, var(--ng-radius-md));
142
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
143
+ padding: var(--nile-spacing-5px, var(--ng-spacing-md)) var(--nile-spacing-10px, var(--ng-spacing-lg));
144
+ min-height: var(--nile-height-40px, var(--ng-height-40px));
145
+ }
146
+
147
+ /* Size: large */
148
+ .combobox--large .combobox__trigger {
149
+ border-radius: var(--nile-radius-sm, var(--ng-radius-md));
150
+ font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));
151
+ padding: var(--nile-spacing-xl, var(--ng-spacing-lg)) var(--nile-spacing-xl, var(--ng-spacing-xl));
152
+ min-height: var(--nile-height-48px, var(--ng-height-48px));
153
+ }
154
+
155
+ .combobox--pill .combobox__trigger {
156
+ border-radius: var(--nile-radius-3xl, var(--ng-radius-3xl));
157
+ }
158
+
159
+ .combobox--filled .combobox__trigger {
160
+ border: none;
161
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
162
+ }
163
+
164
+ .combobox--filled.combobox--open .combobox__trigger,
165
+ .combobox--filled.combobox--focused .combobox__trigger {
166
+ outline: 3px solid rgba(0, 89, 255, 0.4);
167
+ }
168
+
169
+ /* ── Inner area: holds tags + input ── */
170
+
171
+ .combobox__scroll-area {
172
+ flex: 1;
173
+ min-width: 0;
174
+ display: flex;
175
+ flex-wrap: wrap;
176
+ align-items: center;
177
+ gap: 4px;
178
+ overflow: hidden;
179
+ }
180
+
181
+ /* Single-line: horizontal scroll for overflowing tags */
182
+ .combobox__scroll-area--single-line {
183
+ flex-wrap: nowrap;
184
+ overflow-x: auto;
185
+ overflow-y: hidden;
186
+ -webkit-overflow-scrolling: touch;
187
+ scrollbar-width: thin;
188
+ scrollbar-color: var(--nile-colors-neutral-500, var(--ng-colors-border-primary)) transparent;
189
+ }
190
+
191
+ .combobox__scroll-area--single-line::-webkit-scrollbar {
192
+ height: 3px;
193
+ }
194
+
195
+ .combobox__scroll-area--single-line::-webkit-scrollbar-track {
196
+ background: transparent;
197
+ }
198
+
199
+ .combobox__scroll-area--single-line::-webkit-scrollbar-thumb {
200
+ background: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary));
201
+ border-radius: 3px;
202
+ }
203
+
204
+ .combobox__scroll-area--single-line::-webkit-scrollbar-thumb:hover {
205
+ background: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));
206
+ }
207
+
208
+ /* Wrap: tags flow to multiple lines, trigger grows in height */
209
+ .combobox__scroll-area--wrap {
210
+ flex-wrap: wrap;
211
+ overflow: visible;
212
+ }
213
+
214
+ /* ── Tags inside the scroll area ── */
215
+
216
+ .combobox__scroll-area nile-tag {
217
+ cursor: pointer;
218
+ flex-shrink: 0;
219
+ }
220
+
221
+ .combobox--disabled .combobox__scroll-area nile-tag {
222
+ cursor: not-allowed;
223
+ }
224
+
225
+ .combobox__tags-count {
226
+ color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));
227
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
228
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
229
+ font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));
230
+ line-height: var(--nile-line-height-xsmall, var(--ng-line-height-text-sm));
231
+ letter-spacing: 0.2px;
232
+ white-space: nowrap;
233
+ flex-shrink: 0;
234
+ }
235
+
236
+ /* ── Input wrapper inside scroll area ── */
237
+
238
+ .combobox__input-wrapper {
239
+ flex: 1;
240
+ min-width: 60px;
241
+ display: flex;
242
+ align-items: center;
243
+ }
244
+
245
+ .combobox__input {
246
+ width: 100%;
247
+ font: inherit;
248
+ border: none;
249
+ background: none;
250
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
251
+ cursor: inherit;
252
+ overflow: hidden;
253
+ padding: 0;
254
+ margin: 0;
255
+ -webkit-appearance: none;
256
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
257
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));
258
+ font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));
259
+ text-overflow: ellipsis;
260
+ line-height: var(--nile-spacing-2xl, var(--ng-line-height-text-sm));
261
+ }
262
+
263
+ .combobox__input::placeholder {
264
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
265
+ color: var(--nile-colors-text-placeholder, var(--ng-colors-text-placeholder));
266
+ }
267
+
268
+ .combobox__input:focus {
269
+ outline: none;
270
+ }
271
+
272
+ .combobox--disabled .combobox__input {
273
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));
274
+ pointer-events: none;
275
+ }
276
+
277
+ /* ── Hidden form value input ── */
278
+
279
+ .combobox__value-input {
280
+ position: absolute;
281
+ top: 0;
282
+ left: 0;
283
+ width: 100%;
284
+ height: 100%;
285
+ padding: 0;
286
+ margin: 0;
287
+ opacity: 0;
288
+ z-index: -1;
289
+ }
290
+
291
+ /* ── Action icons (clear, expand) ── */
292
+
293
+ .combobox__actions {
294
+ display: flex;
295
+ align-items: center;
296
+ flex-shrink: 0;
297
+ gap: var(--nile-spacing-sm, var(--ng-spacing-sm));
298
+ margin-inline-start: auto;
299
+ }
300
+
301
+ .combobox__clear {
302
+ display: inline-flex;
303
+ align-items: center;
304
+ justify-content: center;
305
+ border: none;
306
+ background: none;
307
+ padding: 0;
308
+ cursor: pointer;
309
+ color: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));
310
+ transition: 150ms color;
311
+ }
312
+
313
+ .combobox__clear:hover {
314
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
315
+ }
316
+
317
+ .combobox__clear:focus {
318
+ outline: none;
319
+ }
320
+
321
+ .combobox__expand-icon {
322
+ display: flex;
323
+ align-items: center;
324
+ flex-shrink: 0;
325
+ transition: 250ms rotate ease;
326
+ rotate: 0;
327
+ }
328
+
329
+ .combobox--open .combobox__expand-icon {
330
+ rotate: -180deg;
331
+ }
332
+
333
+ /* ── Prefix / suffix ── */
334
+
335
+ .combobox__prefix,
336
+ .combobox__suffix {
337
+ flex: 0;
338
+ display: inline-flex;
339
+ align-items: center;
340
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));
341
+ }
342
+
343
+ .combobox__prefix {
344
+ margin-inline-end: var(--nile-spacing-md, var(--ng-spacing-md));
345
+ }
346
+
347
+ /* ── Listbox (dropdown) ── */
348
+
349
+ .combobox__listbox {
350
+ display: block;
351
+ position: relative;
352
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));
353
+ font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));
354
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
355
+ border: solid 1px var(--nile-colors-neutral-500, var(--ng-colors-border-secondary-alt));
356
+ border-radius: var(--nile-radius-sm, var(--ng-radius-md));
357
+ padding-block: var(--nile-spacing-none, var(--ng-spacing-xs));
358
+ padding-inline: var(--nile-spacing-none, var(--ng-spacing-xs));
359
+ overscroll-behavior: none;
360
+ overflow-y: auto;
361
+ max-width: var(--auto-size-available-width);
362
+ max-height: var(--auto-size-available-height);
363
+ box-shadow: 0px 2px 4px 0px rgba(119, 125, 130, 0.15);
364
+ }
365
+
366
+ /* ── Options ── */
367
+
368
+ .combobox__options {
369
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
370
+ color: rgb(133, 129, 129);
371
+ width: 100%;
372
+ }
373
+
374
+ .combobox__options.loading {
375
+ opacity: 0.5;
376
+ pointer-events: none;
377
+ }
378
+
379
+ .combobox__no-results {
380
+ padding: var(--nile-spacing-lg, var(--ng-spacing-lg));
381
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
382
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
383
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));
384
+ text-align: center;
385
+ }
386
+
387
+ .combobox__no-results-title {
388
+ font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-medium));
389
+ color: var(--nile-colors-dark-700, var(--ng-colors-text-secondary-700));
390
+ }
391
+
392
+ .combobox__no-results-subtitle {
393
+ margin-top: var(--nile-spacing-xs, var(--ng-spacing-xs));
394
+ font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));
395
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));
396
+ }
397
+
398
+ /* ── Options (both virtual and plain) ── */
399
+
400
+ .combobox__options nile-option {
401
+ width: 100%;
402
+ display: block;
403
+ }
404
+
405
+ .combobox__options nile-option[selected] {
406
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
407
+ }
408
+
409
+ .combobox__options nile-option[selected]::part(base) {
410
+ color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));
411
+ }
412
+
413
+ .combobox__options-plain {
414
+ display: flex;
415
+ flex-direction: column;
416
+ }
417
+
418
+ .combobox__options-plain nile-option {
419
+ flex-shrink: 0;
420
+ }
421
+
422
+ /* ── Top actions (Select All + Selected/All filter toggle) ── */
423
+
424
+ .combobox__top-actions {
425
+ position: sticky;
426
+ top: 0;
427
+ z-index: 2;
428
+ display: flex;
429
+ flex-direction: row;
430
+ align-items: center;
431
+ justify-content: space-between;
432
+ gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
433
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
434
+ border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
435
+ padding: var(--nile-spacing-lg, var(--ng-spacing-lg));
436
+ user-select: none;
437
+ }
438
+
439
+ .combobox__top-actions--disabled {
440
+ opacity: 0.6;
441
+ pointer-events: none;
442
+ }
443
+
444
+ .combobox__select-all {
445
+ display: flex;
446
+ align-items: center;
447
+ gap: var(--nile-spacing-md, var(--ng-spacing-md));
448
+ cursor: pointer;
449
+ flex: 1 1 auto;
450
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
451
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
452
+ line-height: 14px;
453
+ letter-spacing: 0.2px;
454
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary));
455
+ }
456
+
457
+ .combobox__show-toggle {
458
+ display: inline-flex;
459
+ align-items: center;
460
+ gap: var(--nile-spacing-md, var(--ng-spacing-md));
461
+ border: none;
462
+ background: none;
463
+ padding: 0;
464
+ border-radius: var(--nile-radius-sm, var(--ng-radius-sm));
465
+ cursor: pointer;
466
+ color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));
467
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
468
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
469
+ line-height: 14px;
470
+ letter-spacing: 0.2px;
471
+ white-space: nowrap;
472
+ }
473
+
474
+ .combobox__show-toggle[disabled] {
475
+ color: var(--nile-colors-primary-500, var(--ng-colors-fg-quaternary-400));
476
+ cursor: not-allowed;
477
+ }
478
+
479
+ /* ── Footer ── */
480
+
481
+ .combobox__footer {
482
+ position: sticky;
483
+ bottom: 0;
484
+ background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
485
+ border-top: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
486
+ display: flex;
487
+ flex-direction: row;
488
+ align-items: flex-start;
489
+ padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg)) var(--nile-spacing-xl, var(--ng-spacing-xl));
490
+ gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
491
+ justify-content: space-between;
492
+ }
493
+
494
+ .combobox__footer.loading {
495
+ opacity: 0.5;
496
+ pointer-events: none;
497
+ }
498
+
499
+ .combobox__footer-clear {
500
+ display: inline-flex;
501
+ align-items: center;
502
+ color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));
503
+ border: none;
504
+ background: none;
505
+ padding: 0;
506
+ cursor: pointer;
507
+ font-family: var(--nile-font-family-serif, var(--ng-font-family-body));
508
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
509
+ letter-spacing: 0.2px;
510
+ }
511
+
512
+ .combobox__footer-clear:hover {
513
+ text-decoration: underline;
514
+ }
515
+
516
+ /* ── Loader ── */
517
+
518
+ .combobox__loader {
519
+ width: 100%;
520
+ text-align: center;
521
+ display: block;
522
+ }
523
+
524
+ .combobox__loader--icon {
525
+ margin-top: var(--nile-spacing-xl, var(--ng-spacing-xl));
526
+ animation: combobox-spin 0.6s linear infinite;
527
+ }
528
+
529
+ .combobox__loader--center {
530
+ position: absolute;
531
+ display: flex;
532
+ justify-content: center;
533
+ align-items: center;
534
+ width: 100%;
535
+ height: 75%;
536
+ }
537
+
538
+ @keyframes combobox-spin {
539
+ 0% { transform: rotate(0deg); }
540
+ 100% { transform: rotate(360deg); }
541
+ }
542
+
543
+ .combobox__add-option::part(base) {
544
+ color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));
545
+ }
546
+
547
+ /* ── Grid layout ── */
548
+
549
+ :host([grid-columns]) .combobox__listbox {
550
+ overflow-y: auto;
551
+ }
552
+
553
+ .combobox__grid-row {
554
+ width: 100%;
555
+ }
556
+
557
+ .combobox__grid-row nile-option {
558
+ min-width: 0;
559
+ overflow: hidden;
560
+ }
561
+
562
+ .combobox__grid-row nile-option::part(base) {
563
+ border-radius: var(--nile-radius-xs, var(--ng-radius-sm));
564
+ }
565
+
566
+ /* ── Bidirectional grid layout (vertical + horizontal scroll) ── */
567
+
568
+ .combobox__listbox.combobox__listbox--bidirectional {
569
+ overflow: auto;
570
+ max-width: none;
571
+ scrollbar-width: thin;
572
+ scrollbar-color: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary)) transparent;
573
+ }
574
+
575
+ .combobox__listbox--bidirectional .combobox__options {
576
+ width: max-content;
577
+ min-width: 100%;
578
+ }
579
+
580
+ .combobox__listbox--bidirectional .combobox__grid-row {
581
+ width: max-content;
582
+ min-width: 100%;
583
+ }
584
+
585
+ /* ── Horizontal grid layout ── */
586
+
587
+ .combobox__listbox.combobox__listbox--horizontal {
588
+ overflow-x: auto;
589
+ overflow-y: hidden;
590
+ max-height: none;
591
+ max-width: none;
592
+ width: 100%;
593
+ scrollbar-width: thin;
594
+ scrollbar-color: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary)) transparent;
595
+ }
596
+
597
+ .combobox__listbox--horizontal::-webkit-scrollbar {
598
+ height: 6px;
599
+ }
600
+
601
+ .combobox__listbox--horizontal::-webkit-scrollbar-track {
602
+ background: transparent;
603
+ }
604
+
605
+ .combobox__listbox--horizontal::-webkit-scrollbar-thumb {
606
+ background: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary));
607
+ border-radius: 3px;
608
+ }
609
+
610
+ .combobox__listbox--horizontal::-webkit-scrollbar-thumb:hover {
611
+ background: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));
612
+ }
613
+
614
+ .combobox__options--horizontal {
615
+ display: block;
616
+ width: max-content;
617
+ min-width: 100%;
618
+ }
619
+
620
+ .combobox__grid-col {
621
+ border-right: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));
622
+ }
623
+
624
+ .combobox__grid-col:last-child {
625
+ border-right: none;
626
+ }
627
+
628
+ .combobox__grid-col nile-option {
629
+ width: 100%;
630
+ display: block;
631
+ }
632
+
633
+ .combobox__grid-col nile-option::part(base) {
634
+ border-radius: 0;
635
+ }
636
+
637
+ /* ── Help / Error ── */
638
+
639
+ .form-control__help-text {
640
+ display: none;
641
+ }
642
+
643
+ .form-control--has-help-text .form-control__help-text {
644
+ display: block;
645
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));
646
+ margin-top: var(--nile-spacing-lg, var(--ng-spacing-lg));
647
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
648
+ }
649
+ `;
650
+ export default [styles];
651
+ //# sourceMappingURL=nile-combobox.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-combobox.css.js","sourceRoot":"","sources":["../../../src/nile-combobox/nile-combobox.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAioBxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2025\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { css } from 'lit';\n\nexport const styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));\n -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));\n text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n [hidden] {\n display: none;\n }\n\n /* ── Form control ── */\n\n .form-control .form-control__label {\n display: none;\n }\n\n .form-control--has-label .form-control__label {\n display: block;\n margin-bottom: var(--nile-spacing-sm, var(--ng-spacing-sm));\n color: var(--nile-colors-dark-900, var(--ng-colors-text-secondary-700));\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));\n font-style: normal;\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));\n line-height: var(--nile-spacing-2xl, var(--ng-line-height-text-sm));\n letter-spacing: 0.2px;\n }\n\n .form-control--has-label.form-control--medium .form-control__label {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n }\n\n :host([required]) .form-control--has-label .form-control__label::after {\n content: '*';\n margin-inline-start: -2px;\n color: var(--nile-colors-red-700, var(--ng-colors-text-error-primary-600));\n }\n\n :host([disabled]) .form-control--has-label .form-control__label {\n user-select: none;\n -webkit-user-select: none;\n }\n\n /* ── Popup ── */\n\n .combobox-popup {\n flex: 1 1 auto;\n display: inline-flex;\n width: 100%;\n position: relative;\n vertical-align: middle;\n }\n\n .combobox-popup::part(popup) {\n z-index: 9999;\n }\n\n .combobox-popup[data-current-placement^='top']::part(popup) {\n transform-origin: bottom;\n }\n\n .combobox-popup[data-current-placement^='bottom']::part(popup) {\n transform-origin: top;\n }\n\n /* ── Trigger: outer row that never scrolls ── */\n\n .combobox__trigger {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n position: relative;\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));\n letter-spacing: normal;\n cursor: text;\n transition: 150ms color, 150ms border, 150ms box-shadow, 150ms background-color;\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border: solid 1px var(--nile-colors-neutral-500, var(--ng-colors-border-primary));\n outline: none;\n }\n\n .combobox__trigger:hover {\n border-color: var(--nile-colors-dark-900, var(--ng-colors-border-neutral));\n }\n\n .combobox--open .combobox__trigger,\n .combobox--focused .combobox__trigger {\n border-color: var(--ng-colors-border-brand);\n box-shadow: 0 0 0 1px var(--ng-colors-border-brand) inset;\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .combobox--disabled .combobox__trigger {\n background-color: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-primary));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n cursor: not-allowed;\n user-select: none;\n }\n\n .combobox--warning .combobox__trigger {\n border-color: var(--nile-colors-yellow-500, var(--ng-colors-border-warning));\n }\n\n .combobox--error .combobox__trigger {\n border-color: var(--nile-colors-red-500, var(--ng-colors-border-error));\n }\n\n .combobox--success .combobox__trigger {\n border-color: var(--nile-colors-green-500, var(--ng-componentcolors-utility-success-500));\n }\n\n /* Size: small */\n .combobox--small .combobox__trigger {\n border-radius: var(--nile-radius-sm, var(--ng-radius-md));\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n padding: var(--nile-spacing-md, var(--ng-spacing-sm)) var(--nile-spacing-md, var(--ng-spacing-md));\n min-height: var(--nile-height-32px, var(--ng-height-32px));\n }\n\n /* Size: medium */\n .combobox--medium .combobox__trigger {\n border-radius: var(--nile-radius-sm, var(--ng-radius-md));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n padding: var(--nile-spacing-5px, var(--ng-spacing-md)) var(--nile-spacing-10px, var(--ng-spacing-lg));\n min-height: var(--nile-height-40px, var(--ng-height-40px));\n }\n\n /* Size: large */\n .combobox--large .combobox__trigger {\n border-radius: var(--nile-radius-sm, var(--ng-radius-md));\n font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));\n padding: var(--nile-spacing-xl, var(--ng-spacing-lg)) var(--nile-spacing-xl, var(--ng-spacing-xl));\n min-height: var(--nile-height-48px, var(--ng-height-48px));\n }\n\n .combobox--pill .combobox__trigger {\n border-radius: var(--nile-radius-3xl, var(--ng-radius-3xl));\n }\n\n .combobox--filled .combobox__trigger {\n border: none;\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .combobox--filled.combobox--open .combobox__trigger,\n .combobox--filled.combobox--focused .combobox__trigger {\n outline: 3px solid rgba(0, 89, 255, 0.4);\n }\n\n /* ── Inner area: holds tags + input ── */\n\n .combobox__scroll-area {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 4px;\n overflow: hidden;\n }\n\n /* Single-line: horizontal scroll for overflowing tags */\n .combobox__scroll-area--single-line {\n flex-wrap: nowrap;\n overflow-x: auto;\n overflow-y: hidden;\n -webkit-overflow-scrolling: touch;\n scrollbar-width: thin;\n scrollbar-color: var(--nile-colors-neutral-500, var(--ng-colors-border-primary)) transparent;\n }\n\n .combobox__scroll-area--single-line::-webkit-scrollbar {\n height: 3px;\n }\n\n .combobox__scroll-area--single-line::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .combobox__scroll-area--single-line::-webkit-scrollbar-thumb {\n background: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary));\n border-radius: 3px;\n }\n\n .combobox__scroll-area--single-line::-webkit-scrollbar-thumb:hover {\n background: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));\n }\n\n /* Wrap: tags flow to multiple lines, trigger grows in height */\n .combobox__scroll-area--wrap {\n flex-wrap: wrap;\n overflow: visible;\n }\n\n /* ── Tags inside the scroll area ── */\n\n .combobox__scroll-area nile-tag {\n cursor: pointer;\n flex-shrink: 0;\n }\n\n .combobox--disabled .combobox__scroll-area nile-tag {\n cursor: not-allowed;\n }\n\n .combobox__tags-count {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));\n line-height: var(--nile-line-height-xsmall, var(--ng-line-height-text-sm));\n letter-spacing: 0.2px;\n white-space: nowrap;\n flex-shrink: 0;\n }\n\n /* ── Input wrapper inside scroll area ── */\n\n .combobox__input-wrapper {\n flex: 1;\n min-width: 60px;\n display: flex;\n align-items: center;\n }\n\n .combobox__input {\n width: 100%;\n font: inherit;\n border: none;\n background: none;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n cursor: inherit;\n overflow: hidden;\n padding: 0;\n margin: 0;\n -webkit-appearance: none;\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n text-overflow: ellipsis;\n line-height: var(--nile-spacing-2xl, var(--ng-line-height-text-sm));\n }\n\n .combobox__input::placeholder {\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n color: var(--nile-colors-text-placeholder, var(--ng-colors-text-placeholder));\n }\n\n .combobox__input:focus {\n outline: none;\n }\n\n .combobox--disabled .combobox__input {\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n pointer-events: none;\n }\n\n /* ── Hidden form value input ── */\n\n .combobox__value-input {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n opacity: 0;\n z-index: -1;\n }\n\n /* ── Action icons (clear, expand) ── */\n\n .combobox__actions {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n margin-inline-start: auto;\n }\n\n .combobox__clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: none;\n padding: 0;\n cursor: pointer;\n color: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));\n transition: 150ms color;\n }\n\n .combobox__clear:hover {\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n .combobox__clear:focus {\n outline: none;\n }\n\n .combobox__expand-icon {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n transition: 250ms rotate ease;\n rotate: 0;\n }\n\n .combobox--open .combobox__expand-icon {\n rotate: -180deg;\n }\n\n /* ── Prefix / suffix ── */\n\n .combobox__prefix,\n .combobox__suffix {\n flex: 0;\n display: inline-flex;\n align-items: center;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n }\n\n .combobox__prefix {\n margin-inline-end: var(--nile-spacing-md, var(--ng-spacing-md));\n }\n\n /* ── Listbox (dropdown) ── */\n\n .combobox__listbox {\n display: block;\n position: relative;\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border: solid 1px var(--nile-colors-neutral-500, var(--ng-colors-border-secondary-alt));\n border-radius: var(--nile-radius-sm, var(--ng-radius-md));\n padding-block: var(--nile-spacing-none, var(--ng-spacing-xs));\n padding-inline: var(--nile-spacing-none, var(--ng-spacing-xs));\n overscroll-behavior: none;\n overflow-y: auto;\n max-width: var(--auto-size-available-width);\n max-height: var(--auto-size-available-height);\n box-shadow: 0px 2px 4px 0px rgba(119, 125, 130, 0.15);\n }\n\n /* ── Options ── */\n\n .combobox__options {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n color: rgb(133, 129, 129);\n width: 100%;\n }\n\n .combobox__options.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .combobox__no-results {\n padding: var(--nile-spacing-lg, var(--ng-spacing-lg));\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n text-align: center;\n }\n\n .combobox__no-results-title {\n font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-medium));\n color: var(--nile-colors-dark-700, var(--ng-colors-text-secondary-700));\n }\n\n .combobox__no-results-subtitle {\n margin-top: var(--nile-spacing-xs, var(--ng-spacing-xs));\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n }\n\n /* ── Options (both virtual and plain) ── */\n\n .combobox__options nile-option {\n width: 100%;\n display: block;\n }\n\n .combobox__options nile-option[selected] {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .combobox__options nile-option[selected]::part(base) {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));\n }\n\n .combobox__options-plain {\n display: flex;\n flex-direction: column;\n }\n\n .combobox__options-plain nile-option {\n flex-shrink: 0;\n }\n\n /* ── Top actions (Select All + Selected/All filter toggle) ── */\n\n .combobox__top-actions {\n position: sticky;\n top: 0;\n z-index: 2;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));\n padding: var(--nile-spacing-lg, var(--ng-spacing-lg));\n user-select: none;\n }\n\n .combobox__top-actions--disabled {\n opacity: 0.6;\n pointer-events: none;\n }\n\n .combobox__select-all {\n display: flex;\n align-items: center;\n gap: var(--nile-spacing-md, var(--ng-spacing-md));\n cursor: pointer;\n flex: 1 1 auto;\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n line-height: 14px;\n letter-spacing: 0.2px;\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary));\n }\n\n .combobox__show-toggle {\n display: inline-flex;\n align-items: center;\n gap: var(--nile-spacing-md, var(--ng-spacing-md));\n border: none;\n background: none;\n padding: 0;\n border-radius: var(--nile-radius-sm, var(--ng-radius-sm));\n cursor: pointer;\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n line-height: 14px;\n letter-spacing: 0.2px;\n white-space: nowrap;\n }\n\n .combobox__show-toggle[disabled] {\n color: var(--nile-colors-primary-500, var(--ng-colors-fg-quaternary-400));\n cursor: not-allowed;\n }\n\n /* ── Footer ── */\n\n .combobox__footer {\n position: sticky;\n bottom: 0;\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n border-top: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg)) var(--nile-spacing-xl, var(--ng-spacing-xl));\n gap: var(--nile-spacing-lg, var(--ng-spacing-lg));\n justify-content: space-between;\n }\n\n .combobox__footer.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .combobox__footer-clear {\n display: inline-flex;\n align-items: center;\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));\n border: none;\n background: none;\n padding: 0;\n cursor: pointer;\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n letter-spacing: 0.2px;\n }\n\n .combobox__footer-clear:hover {\n text-decoration: underline;\n }\n\n /* ── Loader ── */\n\n .combobox__loader {\n width: 100%;\n text-align: center;\n display: block;\n }\n\n .combobox__loader--icon {\n margin-top: var(--nile-spacing-xl, var(--ng-spacing-xl));\n animation: combobox-spin 0.6s linear infinite;\n }\n\n .combobox__loader--center {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 75%;\n }\n\n @keyframes combobox-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n\n .combobox__add-option::part(base) {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));\n }\n\n /* ── Grid layout ── */\n\n :host([grid-columns]) .combobox__listbox {\n overflow-y: auto;\n }\n\n .combobox__grid-row {\n width: 100%;\n }\n\n .combobox__grid-row nile-option {\n min-width: 0;\n overflow: hidden;\n }\n\n .combobox__grid-row nile-option::part(base) {\n border-radius: var(--nile-radius-xs, var(--ng-radius-sm));\n }\n\n /* ── Bidirectional grid layout (vertical + horizontal scroll) ── */\n\n .combobox__listbox.combobox__listbox--bidirectional {\n overflow: auto;\n max-width: none;\n scrollbar-width: thin;\n scrollbar-color: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary)) transparent;\n }\n\n .combobox__listbox--bidirectional .combobox__options {\n width: max-content;\n min-width: 100%;\n }\n\n .combobox__listbox--bidirectional .combobox__grid-row {\n width: max-content;\n min-width: 100%;\n }\n\n /* ── Horizontal grid layout ── */\n\n .combobox__listbox.combobox__listbox--horizontal {\n overflow-x: auto;\n overflow-y: hidden;\n max-height: none;\n max-width: none;\n width: 100%;\n scrollbar-width: thin;\n scrollbar-color: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary)) transparent;\n }\n\n .combobox__listbox--horizontal::-webkit-scrollbar {\n height: 6px;\n }\n\n .combobox__listbox--horizontal::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .combobox__listbox--horizontal::-webkit-scrollbar-thumb {\n background: var(--nile-colors-neutral-500, var(--ng-colors-bg-quaternary));\n border-radius: 3px;\n }\n\n .combobox__listbox--horizontal::-webkit-scrollbar-thumb:hover {\n background: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));\n }\n\n .combobox__options--horizontal {\n display: block;\n width: max-content;\n min-width: 100%;\n }\n\n .combobox__grid-col {\n border-right: 1px solid var(--nile-colors-neutral-200, var(--ng-colors-border-secondary));\n }\n\n .combobox__grid-col:last-child {\n border-right: none;\n }\n\n .combobox__grid-col nile-option {\n width: 100%;\n display: block;\n }\n\n .combobox__grid-col nile-option::part(base) {\n border-radius: 0;\n }\n\n /* ── Help / Error ── */\n\n .form-control__help-text {\n display: none;\n }\n\n .form-control--has-help-text .form-control__help-text {\n display: block;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n margin-top: var(--nile-spacing-lg, var(--ng-spacing-lg));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n }\n`;\n\nexport default [styles];\n"]}