@aquera/nile-elements 1.7.1 → 1.7.3

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