@aquera/nile-elements 2.0.12 → 2.0.14

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 (83) hide show
  1. package/README.md +13 -0
  2. package/dist/index.js +132 -134
  3. package/dist/nile-auto-complete/nile-auto-complete.css.cjs.js +1 -1
  4. package/dist/nile-auto-complete/nile-auto-complete.css.cjs.js.map +1 -1
  5. package/dist/nile-auto-complete/nile-auto-complete.css.esm.js +5 -2
  6. package/dist/nile-chip/nile-chip.css.cjs.js +1 -1
  7. package/dist/nile-chip/nile-chip.css.cjs.js.map +1 -1
  8. package/dist/nile-chip/nile-chip.css.esm.js +2 -0
  9. package/dist/nile-combobox/nile-combobox.css.cjs.js +1 -1
  10. package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -1
  11. package/dist/nile-combobox/nile-combobox.css.esm.js +9 -9
  12. package/dist/nile-command-menu/nile-command-menu.css.cjs.js +1 -1
  13. package/dist/nile-command-menu/nile-command-menu.css.cjs.js.map +1 -1
  14. package/dist/nile-command-menu/nile-command-menu.css.esm.js +5 -5
  15. package/dist/nile-command-menu-item/nile-command-menu-item.css.cjs.js +1 -1
  16. package/dist/nile-command-menu-item/nile-command-menu-item.css.cjs.js.map +1 -1
  17. package/dist/nile-command-menu-item/nile-command-menu-item.css.esm.js +2 -2
  18. package/dist/nile-option/nile-option.css.cjs.js +1 -1
  19. package/dist/nile-option/nile-option.css.cjs.js.map +1 -1
  20. package/dist/nile-option/nile-option.css.esm.js +1 -1
  21. package/dist/nile-select/nile-select.cjs.js +2 -2
  22. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  23. package/dist/nile-select/nile-select.css.cjs.js +1 -1
  24. package/dist/nile-select/nile-select.css.cjs.js.map +1 -1
  25. package/dist/nile-select/nile-select.css.esm.js +19 -24
  26. package/dist/nile-select/nile-select.esm.js +43 -42
  27. package/dist/nile-select/virtual-scroll-helper.cjs.js +1 -1
  28. package/dist/nile-select/virtual-scroll-helper.cjs.js.map +1 -1
  29. package/dist/nile-select/virtual-scroll-helper.esm.js +2 -0
  30. package/dist/nile-virtual-select/nile-virtual-select.cjs.js +4 -4
  31. package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -1
  32. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js +1 -1
  33. package/dist/nile-virtual-select/nile-virtual-select.css.cjs.js.map +1 -1
  34. package/dist/nile-virtual-select/nile-virtual-select.css.esm.js +20 -25
  35. package/dist/nile-virtual-select/nile-virtual-select.esm.js +26 -26
  36. package/dist/src/nile-auto-complete/nile-auto-complete.css.js +3 -0
  37. package/dist/src/nile-auto-complete/nile-auto-complete.css.js.map +1 -1
  38. package/dist/src/nile-chip/nile-chip.css.js +2 -0
  39. package/dist/src/nile-chip/nile-chip.css.js.map +1 -1
  40. package/dist/src/nile-combobox/nile-combobox.css.js +9 -9
  41. package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -1
  42. package/dist/src/nile-command-menu/nile-command-menu.css.js +5 -5
  43. package/dist/src/nile-command-menu/nile-command-menu.css.js.map +1 -1
  44. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.js +2 -2
  45. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.js.map +1 -1
  46. package/dist/src/nile-option/nile-option.css.js +1 -1
  47. package/dist/src/nile-option/nile-option.css.js.map +1 -1
  48. package/dist/src/nile-select/nile-select.css.js +19 -24
  49. package/dist/src/nile-select/nile-select.css.js.map +1 -1
  50. package/dist/src/nile-select/nile-select.d.ts +18 -2
  51. package/dist/src/nile-select/nile-select.js +226 -64
  52. package/dist/src/nile-select/nile-select.js.map +1 -1
  53. package/dist/src/nile-select/nile-select.test.d.ts +1 -0
  54. package/dist/src/nile-select/nile-select.test.js +896 -17
  55. package/dist/src/nile-select/nile-select.test.js.map +1 -1
  56. package/dist/src/nile-select/virtual-scroll-helper.js +2 -0
  57. package/dist/src/nile-select/virtual-scroll-helper.js.map +1 -1
  58. package/dist/src/nile-virtual-select/nile-virtual-select.css.js +20 -25
  59. package/dist/src/nile-virtual-select/nile-virtual-select.css.js.map +1 -1
  60. package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +10 -2
  61. package/dist/src/nile-virtual-select/nile-virtual-select.js +142 -30
  62. package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -1
  63. package/dist/src/nile-virtual-select/nile-virtual-select.test.d.ts +1 -0
  64. package/dist/src/nile-virtual-select/nile-virtual-select.test.js +331 -16
  65. package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +1 -1
  66. package/dist/src/version.js +1 -1
  67. package/dist/src/version.js.map +1 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +1 -1
  70. package/src/nile-auto-complete/nile-auto-complete.css.ts +3 -0
  71. package/src/nile-chip/nile-chip.css.ts +2 -0
  72. package/src/nile-combobox/nile-combobox.css.ts +9 -9
  73. package/src/nile-command-menu/nile-command-menu.css.ts +5 -5
  74. package/src/nile-command-menu-item/nile-command-menu-item.css.ts +2 -2
  75. package/src/nile-option/nile-option.css.ts +1 -1
  76. package/src/nile-select/nile-select.css.ts +19 -24
  77. package/src/nile-select/nile-select.test.ts +1112 -17
  78. package/src/nile-select/nile-select.ts +237 -67
  79. package/src/nile-select/virtual-scroll-helper.ts +2 -0
  80. package/src/nile-virtual-select/nile-virtual-select.css.ts +20 -25
  81. package/src/nile-virtual-select/nile-virtual-select.test.ts +404 -16
  82. package/src/nile-virtual-select/nile-virtual-select.ts +200 -79
  83. package/vscode-html-custom-data.json +9 -4
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-scroll-helper.js","sourceRoot":"","sources":["../../../src/nile-select/virtual-scroll-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAG3B;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAG9B,YAAY,SAAsB;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,wBAAwB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAgB,CAAC;QAExC,OAAO,IAAI,CAAA;;;kBAGG,SAAS,CAAC,IAAI;mBACb,SAAS,CAAC,KAAK;wBACV,SAAS,CAAC,UAAU;yBACnB,SAAS,CAAC,WAAW;0BACpB,SAAS,CAAC,YAAY;0BACtB,SAAS,CAAC,YAAY;yBACvB,SAAS,CAAC,WAAW;kBAC5B,SAAS,CAAC,IAAI;2BACL,SAAS,CAAC,aAAa;uCACX,SAAS,CAAC,yBAAyB;gCAC1C,SAAS,CAAC,kBAAkB;4BAChC,SAAS,CAAC,cAAc;sBAC9B,SAAS,CAAC,QAAQ;sBAClB,SAAS,CAAC,QAAQ;0BACd,SAAS,CAAC,YAAY;qBAC3B,SAAS,CAAC,OAAO;oCACF,SAAS,CAAC,sBAAsB;mBACjD,SAAS,CAAC,KAAK;qBACb,SAAS,CAAC,OAAO;sBAChB,SAAS,CAAC,QAAQ;uBACjB,SAAS,CAAC,SAAS;mBACvB,SAAS,CAAC,KAAK;oBACd,SAAS,CAAC,MAAM;kBAClB,SAAS,CAAC,IAAI;mBACb,SAAS,CAAC,KAAK;uBACX,SAAS,CAAC,SAAS;kBACxB,SAAS,CAAC,IAAI;sBACV,SAAS,CAAC,QAAQ;2BACb,SAAS,CAAC,aAAa;8BACpB,SAAS,CAAC,gBAAgB;8BAC1B,SAAS,CAAC,gBAAgB;8BAC1B,SAAS,CAAC,gBAAgB;yBAC/B,SAAS,CAAC,WAAW;4BAClB,SAAS,CAAC,cAAc;kBAClC,SAAS,CAAC,IAAI;kBACd,SAAS,CAAC,IAAI;qBACX,SAAS,CAAC,OAAO;oBAClB,SAAS,CAAC,MAAM;sCACE,SAAS,CAAC,wBAAwB;4BAC5C,SAAS,CAAC,cAAc;+BACrB,SAAS,CAAC,iBAAiB;0BAChC,SAAS,CAAC,YAAY;oBAC5B,SAAS,CAAC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkC/B,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { html } from 'lit';\nimport type NileElement from '../internal/nile-element';\n\n/**\n * Helper class to manage virtual scroll functionality for nile-select component\n */\nexport class VirtualScrollHelper {\n private component: NileElement;\n\n constructor(component: NileElement) {\n this.component = component;\n }\n\n renderVirtualizedContent(): any {\n const component = this.component as any;\n\n return html`\n <div class=\"virtual-select\">\n <nile-virtual-select\n .name=${component.name}\n .value=${component.value}\n .autoResize=${component.autoResize}\n .showTooltip=${component.showTooltip}\n .chipMinWidth=${component.chipMinWidth}\n .chipMaxWidth=${component.chipMaxWidth}\n .placeholder=${component.placeholder}\n .size=${component.size}\n .searchEnabled=${component.searchEnabled}\n .internalSearchPlaceHolder=${component.internalSearchPlaceHolder}\n .disableLocalSearch=${component.disableLocalSearch}\n .optionsLoading=${component.optionsLoading}\n .multiple=${component.multiple}\n .helpText=${component.helpText}\n .errorMessage=${component.errorMessage}\n .warning=${component.warning}\n .enableVisibilityEffect=${component.enableVisibilityEffect}\n .error=${component.error}\n .success=${component.success}\n .disabled=${component.disabled}\n .clearable=${component.clearable}\n .hoist=${component.hoist}\n .filled=${component.filled}\n .pill=${component.pill}\n .label=${component.label}\n .placement=${component.placement}\n .form=${component.form}\n .required=${component.required}\n .showNoResults=${component.showNoResults}\n .noResultsMessage=${component.noResultsMessage}\n .renderItemConfig=${component.renderItemConfig}\n .blockValueChange=${component.blockValueChange}\n .noWidthSync=${component.noWidthSync}\n .enableTabClose=${component.enableTabClose}\n .data=${component.data}\n .open=${component.open}\n .loading=${component.loading}\n .portal=${component.portal}\n .descriptionSearchEnabled=${component.descriptionSearchEnabled}\n .allowHtmlLabel=${component.allowHtmlLabel}\n .enableDescription=${component.enableDescription}\n .tickOnSelect=${component.tickOnSelect}\n .legacy=${component.legacy}\n exportparts=\"\n select-options,\n select-no-results,\n virtualized,\n form-control,\n form-control-label,\n form-control-input,\n combobox,\n prefix,\n display-input,\n tags,\n tag,\n clear-button,\n suffix,\n expand-icon,\n listbox,\n search,\n loader,\n footer,\n tag__content,\n option__base,\n option__label,\n option__prefix,\n option__suffix,\n option__checked-icon,\n option__checkbox,\n option__label_container,\n option__description\n \"\n >\n <slot name=\"prefix\" slot=\"prefix\"></slot>\n </nile-virtual-select>\n </div>\n `;\n }\n}\n"]}
1
+ {"version":3,"file":"virtual-scroll-helper.js","sourceRoot":"","sources":["../../../src/nile-select/virtual-scroll-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAG3B;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAG9B,YAAY,SAAsB;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,wBAAwB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAgB,CAAC;QAExC,OAAO,IAAI,CAAA;;;kBAGG,SAAS,CAAC,IAAI;mBACb,SAAS,CAAC,KAAK;wBACV,SAAS,CAAC,UAAU;yBACnB,SAAS,CAAC,WAAW;0BACpB,SAAS,CAAC,YAAY;0BACtB,SAAS,CAAC,YAAY;yBACvB,SAAS,CAAC,WAAW;kBAC5B,SAAS,CAAC,IAAI;2BACL,SAAS,CAAC,aAAa;uCACX,SAAS,CAAC,yBAAyB;gCAC1C,SAAS,CAAC,kBAAkB;4BAChC,SAAS,CAAC,cAAc;sBAC9B,SAAS,CAAC,QAAQ;sBAClB,SAAS,CAAC,QAAQ;0BACd,SAAS,CAAC,YAAY;qBAC3B,SAAS,CAAC,OAAO;oCACF,SAAS,CAAC,sBAAsB;mBACjD,SAAS,CAAC,KAAK;qBACb,SAAS,CAAC,OAAO;sBAChB,SAAS,CAAC,QAAQ;uBACjB,SAAS,CAAC,SAAS;mBACvB,SAAS,CAAC,KAAK;oBACd,SAAS,CAAC,MAAM;kBAClB,SAAS,CAAC,IAAI;mBACb,SAAS,CAAC,KAAK;uBACX,SAAS,CAAC,SAAS;kBACxB,SAAS,CAAC,IAAI;sBACV,SAAS,CAAC,QAAQ;2BACb,SAAS,CAAC,aAAa;8BACpB,SAAS,CAAC,gBAAgB;8BAC1B,SAAS,CAAC,gBAAgB;8BAC1B,SAAS,CAAC,gBAAgB;yBAC/B,SAAS,CAAC,WAAW;4BAClB,SAAS,CAAC,cAAc;kBAClC,SAAS,CAAC,IAAI;kBACd,SAAS,CAAC,IAAI;qBACX,SAAS,CAAC,OAAO;oBAClB,SAAS,CAAC,MAAM;sCACE,SAAS,CAAC,wBAAwB;4BAC5C,SAAS,CAAC,cAAc;+BACrB,SAAS,CAAC,iBAAiB;0BAChC,SAAS,CAAC,YAAY;oBAC5B,SAAS,CAAC,MAAM;wBACZ,CAAC,CAAc,EAAE,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC;yBAC1D,CAAC,CAAc,EAAE,EAAE,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkC/E,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { html } from 'lit';\nimport type NileElement from '../internal/nile-element';\n\n/**\n * Helper class to manage virtual scroll functionality for nile-select component\n */\nexport class VirtualScrollHelper {\n private component: NileElement;\n\n constructor(component: NileElement) {\n this.component = component;\n }\n\n renderVirtualizedContent(): any {\n const component = this.component as any;\n\n return html`\n <div class=\"virtual-select\">\n <nile-virtual-select\n .name=${component.name}\n .value=${component.value}\n .autoResize=${component.autoResize}\n .showTooltip=${component.showTooltip}\n .chipMinWidth=${component.chipMinWidth}\n .chipMaxWidth=${component.chipMaxWidth}\n .placeholder=${component.placeholder}\n .size=${component.size}\n .searchEnabled=${component.searchEnabled}\n .internalSearchPlaceHolder=${component.internalSearchPlaceHolder}\n .disableLocalSearch=${component.disableLocalSearch}\n .optionsLoading=${component.optionsLoading}\n .multiple=${component.multiple}\n .helpText=${component.helpText}\n .errorMessage=${component.errorMessage}\n .warning=${component.warning}\n .enableVisibilityEffect=${component.enableVisibilityEffect}\n .error=${component.error}\n .success=${component.success}\n .disabled=${component.disabled}\n .clearable=${component.clearable}\n .hoist=${component.hoist}\n .filled=${component.filled}\n .pill=${component.pill}\n .label=${component.label}\n .placement=${component.placement}\n .form=${component.form}\n .required=${component.required}\n .showNoResults=${component.showNoResults}\n .noResultsMessage=${component.noResultsMessage}\n .renderItemConfig=${component.renderItemConfig}\n .blockValueChange=${component.blockValueChange}\n .noWidthSync=${component.noWidthSync}\n .enableTabClose=${component.enableTabClose}\n .data=${component.data}\n .open=${component.open}\n .loading=${component.loading}\n .portal=${component.portal}\n .descriptionSearchEnabled=${component.descriptionSearchEnabled}\n .allowHtmlLabel=${component.allowHtmlLabel}\n .enableDescription=${component.enableDescription}\n .tickOnSelect=${component.tickOnSelect}\n .legacy=${component.legacy}\n @nile-input=${(e: CustomEvent) => component.syncValueFromVirtualSelect(e)}\n @nile-change=${(e: CustomEvent) => component.syncValueFromVirtualSelect(e)}\n exportparts=\"\n select-options,\n select-no-results,\n virtualized,\n form-control,\n form-control-label,\n form-control-input,\n combobox,\n prefix,\n display-input,\n tags,\n tag,\n clear-button,\n suffix,\n expand-icon,\n listbox,\n search,\n loader,\n footer,\n tag__content,\n option__base,\n option__label,\n option__prefix,\n option__suffix,\n option__checked-icon,\n option__checkbox,\n option__label_container,\n option__description\n \"\n >\n <slot name=\"prefix\" slot=\"prefix\"></slot>\n </nile-virtual-select>\n </div>\n `;\n }\n}\n"]}
@@ -244,35 +244,23 @@ export const styles = css `
244
244
  display: contents;
245
245
  }
246
246
 
247
- .select__tags nile-tag {
247
+ :host([showtooltip]) .select__tags nile-tag {
248
248
  flex: 0 1 auto;
249
249
  cursor: pointer;
250
250
  min-width: 0;
251
- }
252
-
253
- /* A chip is capped - and so truncated - only when a tooltip can reveal the
254
- full value. Without one it keeps its natural width and the fit pass moves
255
- the surplus into the +N button instead. */
256
- :host([showtooltip]) .select__tags nile-tag {
257
251
  max-width: var(--nile-width-180px, var(--ng-height-180px));
258
252
  }
259
253
 
260
- /* Only the fitted layout can move a chip into the +N button, so only there
261
- can a chip refuse to shrink. */
262
- :host(:not([showtooltip])) .select__tags--fitted nile-tag {
263
- flex-shrink: 0;
264
- }
265
-
266
- .select__tags nile-tag::part(base) {
254
+ :host([showtooltip]) .select__tags nile-tag::part(base) {
267
255
  max-width: 100%;
268
256
  }
269
257
 
270
- .select__tags nile-tag::part(prefix_content_wrapper) {
258
+ :host([showtooltip]) .select__tags nile-tag::part(prefix_content_wrapper) {
271
259
  flex: 1 1 auto;
272
260
  min-width: 0;
273
261
  }
274
262
 
275
- .select__tags nile-tag::part(content) {
263
+ :host([showtooltip]) .select__tags nile-tag::part(content) {
276
264
  display: block;
277
265
  flex: 1 1 auto;
278
266
  min-width: 0;
@@ -288,7 +276,7 @@ export const styles = css `
288
276
  text-overflow: ellipsis;
289
277
  }
290
278
 
291
- .select__tags nile-tag::part(remove-button) {
279
+ :host([showtooltip]) .select__tags nile-tag::part(remove-button) {
292
280
  flex: 0 0 auto;
293
281
  }
294
282
 
@@ -308,7 +296,7 @@ export const styles = css `
308
296
  white-space: nowrap;
309
297
  cursor: pointer;
310
298
  border: 1px dashed
311
- var(--nile-colors-neutral-500, var(--ng-colors-border-secondary));
299
+ var(--nile-colors-neutral-500, var(--ng-colors-border-primary));
312
300
  border-radius: var(--nile-radius-sm, var(--ng-radius-sm));
313
301
  }
314
302
 
@@ -359,7 +347,7 @@ export const styles = css `
359
347
 
360
348
  .select--standard:not(.select--disabled).select--open .select__combobox,
361
349
  .select--standard:not(.select--disabled).select--focused .select__combobox {
362
- background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
350
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary));
363
351
  }
364
352
 
365
353
  .select--warning .select__combobox {
@@ -378,12 +366,12 @@ export const styles = css `
378
366
  /* Filled selects */
379
367
  .select--filled .select__combobox {
380
368
  border: none;
381
- background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
369
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary));
382
370
  color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
383
371
  }
384
372
 
385
373
  .select--filled:hover:not(.select--disabled) .select__combobox {
386
- background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
374
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary-hover));
387
375
  }
388
376
 
389
377
  .select--filled.select--disabled .select__combobox {
@@ -394,7 +382,7 @@ export const styles = css `
394
382
 
395
383
  .select--filled:not(.select--disabled).select--open .select__combobox,
396
384
  .select--filled:not(.select--disabled).select--focused .select__combobox {
397
- background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
385
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary));
398
386
  outline: 3px solid rgba(0, 89, 255, 0.4);
399
387
  }
400
388
 
@@ -491,7 +479,7 @@ export const styles = css `
491
479
  font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));
492
480
  font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));
493
481
  background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
494
- border: solid 1px var(--nile-colors-neutral-500, var(--ng-colors-border-secondary-alt));
482
+ border: solid 1px var(--nile-colors-neutral-500, var(--ng-colors-border-primary));
495
483
  border-radius: var(--nile-radius-sm, var(--ng-radius-md));
496
484
  padding-block: var(--nile-spacing-none, var(--ng-spacing-xs));
497
485
  padding-inline: var(--nile-spacing-none, var(--ng-spacing-xs));
@@ -539,7 +527,7 @@ export const styles = css `
539
527
  position: sticky;
540
528
  bottom: 0px;
541
529
  background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
542
- border-top: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-secondary));
530
+ border-top: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-primary));
543
531
  display: flex;
544
532
  height: 15px;
545
533
  /* Auto layout */
@@ -550,6 +538,9 @@ export const styles = css `
550
538
  gap: var(--nile-spacing-none, var(--ng-spacing-none));
551
539
  justify-content: space-between;
552
540
  box-sizing: unset;
541
+ }
542
+
543
+ .select__footer--query {
553
544
  container-type: inline-size;
554
545
  container-name: nile-select-footer;
555
546
  }
@@ -618,6 +609,10 @@ export const styles = css `
618
609
  }
619
610
  }
620
611
 
612
+ .select__invisible {
613
+ opacity: 0;
614
+ }
615
+
621
616
  .select__prefix--from-options {
622
617
  margin-inline-end: var(--nile-spacing-lg, var(--ng-spacing-md));
623
618
  }
@@ -627,7 +622,7 @@ export const styles = css `
627
622
  }
628
623
 
629
624
  .virtualized nile-option[selected] {
630
- background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));
625
+ background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-active));
631
626
  }
632
627
 
633
628
  .virtualized nile-option[selected]::part(base) {
@@ -1 +1 @@
1
- {"version":3,"file":"nile-virtual-select.css.js","sourceRoot":"","sources":["../../../src/nile-virtual-select/nile-virtual-select.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAypBxB,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\n/**\n * Select_2 CSS\n */\nexport const styles = css`\n :host {\n box-sizing: border-box;\n --ng-nxt-gen-outline: var(--ng-border-width-1) solid var(--ng-colors-border-brand);\n --ng-nxt-gen-outline-error: var(--ng-border-width-1) solid var(--ng-colors-border-error);\n --ng-private-outline-transparent: var(--ng-border-width-1) solid transparent;\n --ng-box-shadow: 0px 12px 16px -4px var(--ng-colors-effects-shadow-lg-01, rgba(10, 13, 18, 0.08)), 0px 4px 6px -2px var(--ng-colors-effects-shadow-lg-02, rgba(10, 13, 18, 0.03)), 0px 2px 2px -1px var(--ng-colors-effects-shadow-lg-03, rgba(10, 13, 18, 0.04));\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 .virtualized{\n min-width: 110px;\n width: 100%;\n }\n\n .virtualized ::slotted(nile-option),\n .virtualized nile-option {\n width: 100%;\n display: block;\n }\n\n /* Ensure proper sizing for non-virtualized options (small datasets) */\n .virtualized:not(:has(lit-virtualizer)) {\n display: flex;\n flex-direction: column;\n }\n\n .virtualized:not(:has(lit-virtualizer)) nile-option {\n flex-shrink: 0;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([disabled]) .form-control--has-label .form-control__label {\n user-select: none;\n -webkit-user-select: none;\n }\n\n [hidden] {\n display: none !important;\n }\n\n .form-control .form-control__label {\n display: none;\n }\n\n .form-control .form-control__help-text {\n display: none;\n }\n\n /* Label */\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 /* Help text */\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 }\n\n .form-control--has-help-text.form-control--medium .form-control__help-text {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n }\n\n .form-control--has-help-text.form-control--radio-group\n .form-control__help-text {\n margin-top: var(--nile-spacing-xs, var(--ng-spacing-sm));\n }\n\n :host {\n display: block;\n }\n\n /** The popup */\n .select {\n flex: 1 1 auto;\n display: inline-flex;\n width: 100%;\n position: relative;\n vertical-align: middle;\n }\n\n .select::part(popup) {\n z-index: 9999;\n }\n\n .select[data-current-placement^='top']::part(popup) {\n transform-origin: bottom;\n }\n\n .select[data-current-placement^='bottom']::part(popup) {\n transform-origin: top;\n }\n\n /* Combobox */\n .select__combobox {\n flex: 1;\n display: flex;\n width: 100%;\n min-width: 0;\n position: relative;\n align-items: center;\n justify-content: start;\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 vertical-align: middle;\n overflow: hidden;\n cursor: pointer;\n transition: 150ms color, 150ms border, 150ms box-shadow,\n 150ms background-color;\n }\n\n .select__display-input {\n position: relative;\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: var(--nile-spacing-none, var(--ng-spacing-none));\n margin: var(--nile-spacing-none, var(--ng-spacing-none));\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 }\n\n .select__display-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 .select:not(.select--disabled):hover .select__display-input {\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n .select__display-input:focus {\n outline: none;\n }\n\n /* Visually hide the display input when multiple is enabled */\n .select--multiple:not(.select--placeholder-visible) .select__display-input {\n position: absolute;\n z-index: -1;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n }\n\n .select__value-input {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: var(--nile-spacing-none, var(--ng-spacing-none));\n margin: var(--nile-spacing-none, var(--ng-spacing-none));\n opacity: 0;\n z-index: -1;\n }\n\n .select__tags {\n display: flex;\n flex: 1;\n align-items: center;\n flex-wrap: nowrap;\n margin-inline-start: var(--nile-spacing-7px, var(--ng-spacing-md));\n width: 100%;\n overflow: hidden;\n }\n\n .select__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-style: normal;\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 margin: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .select__tags-count-clearable {\n margin-right: var(--nile-spacing-5xl, var(--ng-spacing-5xl));\n }\n\n button.select__tags-count {\n appearance: none;\n -webkit-appearance: none;\n background: none;\n text-align: inherit;\n }\n\n button.select__tags-count:disabled {\n cursor: not-allowed;\n }\n\n .select__tags--fitted {\n min-width: 0;\n }\n\n .select__tags nile-lite-tooltip.select__tag-tip {\n display: contents;\n }\n\n .select__tags nile-tag {\n flex: 0 1 auto;\n cursor: pointer;\n min-width: 0;\n }\n\n /* A chip is capped - and so truncated - only when a tooltip can reveal the\n full value. Without one it keeps its natural width and the fit pass moves\n the surplus into the +N button instead. */\n :host([showtooltip]) .select__tags nile-tag {\n max-width: var(--nile-width-180px, var(--ng-height-180px));\n }\n\n /* Only the fitted layout can move a chip into the +N button, so only there\n can a chip refuse to shrink. */\n :host(:not([showtooltip])) .select__tags--fitted nile-tag {\n flex-shrink: 0;\n }\n\n .select__tags nile-tag::part(base) {\n max-width: 100%;\n }\n\n .select__tags nile-tag::part(prefix_content_wrapper) {\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .select__tags nile-tag::part(content) {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n /* The tag's line-height of 1 leaves the clip box shorter than the glyph\n box, so descenders are cut. Pad the clip box, negate it in layout. */\n padding-block: 3px;\n margin-block: -3px;\n overflow: hidden;\n white-space: nowrap;\n }\n\n :host([showtooltip]) .select__tags nile-tag::part(content) {\n text-overflow: ellipsis;\n }\n\n .select__tags nile-tag::part(remove-button) {\n flex: 0 0 auto;\n }\n\n .select__tags--fitted nile-tag:focus-visible {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-colors-border-brand));\n outline-offset: 1px;\n border-radius: var(--nile-radius-sm, var(--ng-radius-sm));\n }\n\n .select__tags--fitted .select__tags-count {\n flex: 0 0 auto;\n margin: 0;\n padding: 0 var(--nile-spacing-xsmall, var(--ng-spacing-md));\n height: var(--nile-height-26px, var(--ng-height-26px));\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n cursor: pointer;\n border: 1px dashed\n var(--nile-colors-neutral-500, var(--ng-colors-border-secondary));\n border-radius: var(--nile-radius-sm, var(--ng-radius-sm));\n }\n\n .select__tags--fitted .select__tags-count:focus-visible {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-colors-border-brand));\n outline-offset: 1px;\n }\n\n .select__tags::slotted(nile-tag) {\n cursor: pointer !important;\n }\n\n .select--disabled .select__tags,\n .select--disabled .select__tags::slotted(nile-tag) {\n cursor: not-allowed !important;\n }\n\n .select--disabled .select__display-input{\n color:var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n pointer-events:none;\n }\n\n /* Standard selects */\n .select--standard .select__combobox {\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: var(--nile-outline-none, var(--ng-private-outline-transparent));\n }\n\n .select--standard .select__combobox:hover {\n border: 1px solid var(--nile-colors-dark-900, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n }\n\n .select--error:hover:not(.select--disabled) .select__combobox {\n border-color: var(--nile-colors-red-500, var(--ng-colors-border-error));\n outline: var(--nile-outline-none, var(--ng-colors-border-error));\n }\n\n .select--standard.select--disabled .select__combobox {\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 user-select:none;\n cursor: not-allowed;\n outline: none;\n }\n\n .select--standard:not(.select--disabled).select--open .select__combobox,\n .select--standard:not(.select--disabled).select--focused .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .select--warning .select__combobox {\n border-color: var(--nile-colors-yellow-500, var(--ng-colors-border-warning));\n }\n\n .select--error .select__combobox {\n border-color: var(--nile-colors-red-500, var(--ng-colors-border-error));\n outline: var(--nile-outline-none, var(--ng-private-outline-transparent));\n }\n\n .select--success {\n border-color: var(--nile-colors-green-500, var(--ng-componentcolors-utility-success-500));\n }\n\n /* Filled selects */\n .select--filled .select__combobox {\n border: none;\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n .select--filled:hover:not(.select--disabled) .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .select--filled.select--disabled .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-disabled-subtle));\n opacity: var(--nile-opacity-50, var(--ng-opacity-100));\n cursor: not-allowed;\n }\n\n .select--filled:not(.select--disabled).select--open .select__combobox,\n .select--filled:not(.select--disabled).select--focused .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n outline: 3px solid rgba(0, 89, 255, 0.4);\n }\n\n .select--medium .select__combobox {\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-lg, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg));\n height: var(--nile-height-40px, var(--ng-height-40px));\n box-sizing: border-box;\n }\n\n .select--medium .select__clear {\n margin-inline-start: var(--nile-spacing-lg, var(--ng-spacing-lg));\n }\n\n .select--medium .select__prefix::slotted(*) {\n margin-inline-end: var(--nile-spacing-md, var(--ng-spacing-md));\n }\n\n .select--medium .select__prefix.multiple::slotted(*) {\n margin-inline-start: var(--nile-spacing-lg, var(--ng-spacing-md));\n }\n\n .select--medium.select--multiple:not(.select--placeholder-visible)\n .select__combobox {\n padding-inline-start: var(--nile-spacing-none, var(--ng-spacing-none));\n }\n\n .select--medium .select__tags {\n gap: var(--nile-spacing-3px, var(--ng-spacing-sm));\n }\n\n /* Pills */\n .select--pill.select--medium .select__combobox {\n border-radius: var(--nile-radius-3xl, var(--ng-radius-3xl));\n }\n\n /* Prefix */\n .select__prefix {\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 .select__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 /* Clear button */\n .select__clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\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-primary-600, var(--ng-colors-text-brand-secondary-700));\n border: none;\n background: none;\n padding: var(--nile-spacing-none, var(--ng-spacing-none));\n transition: 150ms color;\n cursor: pointer;\n }\n\n .select__clear:hover {\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n }\n\n .select__clear:focus {\n outline: none;\n }\n\n /* Expand icon */\n .select__expand-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n transition: 250ms rotate ease;\n rotate: 0;\n margin-inline-start: var(--nile-spacing-md, var(--ng-spacing-md));\n }\n\n .select--open .select__expand-icon {\n rotate: -180deg;\n }\n\n /* Listbox */\n .select__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 /* Make sure it adheres to the popup's auto size */\n max-width: var(--auto-size-available-width);\n max-height: var(--auto-size-available-height);\n box-shadow: var(--nile-box-shadow-none, var(--ng-shadow-xs));\n }\n\n .select__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 .select__options__search-enabled {\n padding-top: var(--nile-spacing-10px, var(--ng-spacing-lg));\n width: 100%;\n }\n\n .select__listbox::slotted(nile-divider) {\n --spacing: var(--nile-spacing-xs, var(--ng-spacing-sm));\n }\n\n .select__listbox::slotted(small) {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n font-weight: var(--nile-font-weight-semi-bold, var(--ng-font-weight-semibold));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n padding-block: var(--nile-spacing-xs, var(--ng-spacing-sm));\n padding-inline: var(--nile-spacing-xl, var(--ng-spacing-xl));\n }\n\n .select__search {\n position: sticky;\n top: 0px;\n z-index: 1;\n width: calc(100% - 16px);\n padding: var(--nile-spacing-md, var(--ng-spacing-md));\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n margin-bottom: -8px;\n }\n\n .select__footer {\n position: sticky;\n bottom: 0px;\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 height: 15px;\n /* Auto layout */\n display: var(--nile-display-flex, var(--ng-display-flex));\n flex-direction: row;\n align-items: center;\n padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg));\n gap: var(--nile-spacing-none, var(--ng-spacing-none));\n justify-content: space-between;\n box-sizing: unset;\n container-type: inline-size;\n container-name: nile-select-footer;\n }\n\n .select__footer-action,\n .select__footer .select__clear {\n display: inline-flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n min-width: 0;\n }\n\n .select__footer-glyph {\n flex: 0 0 auto;\n display: inline-flex;\n vertical-align: middle;\n }\n\n .select__footer-label {\n white-space: nowrap;\n }\n\n @container nile-select-footer (max-width: 148px) {\n .select__clear .select__footer-label {\n display: none;\n }\n }\n\n @container nile-select-footer (max-width: 113px) {\n .select__footer-label {\n display: none;\n }\n }\n\n .tag__prefix[slot='prefix'] {\n height: 14px;\n display: inline-block;\n overflow: hidden;\n }\n\n .tag__prefix[slot='prefix'] img {\n max-height: 100%;\n }\n\n .select__loader {\n width: 100%;\n text-align: center;\n display: block;\n }\n\n .select__loader--icon {\n margin-top: var(--nile-spacing-xl, var(--ng-spacing-xl));\n animation: spin 0.6s linear infinite;\n }\n\n .select__no-results {\n padding: var(--nile-spacing-lg, var(--ng-spacing-lg));\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n .select__prefix--from-options {\n margin-inline-end: var(--nile-spacing-lg, var(--ng-spacing-md));\n }\n \n .select__hide-default{\n display: none;\n }\n\n .virtualized nile-option[selected] {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .virtualized nile-option[selected]::part(base) {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));\n }\n\n .virtualized.no-scroll {\n overflow: hidden !important;\n }\n\n .virtual-select-loader {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 75%;\n }\n\n .select__footer.loading, .select__options.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .virtual-select-loader {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 75%;\n }\n\n .select__footer.loading, .select__options.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n .select.select--open .select__combobox {\n border-color: var(--ng-colors-border-brand);\n box-shadow: 0 0 0 1px var(--ng-colors-border-brand) inset ;\n }\n\n :host([enableDescription]) .option::part(base) {\n height: 41px;\n }\n`;\n\nexport default [styles];\n"]}
1
+ {"version":3,"file":"nile-virtual-select.css.js","sourceRoot":"","sources":["../../../src/nile-virtual-select/nile-virtual-select.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAopBxB,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\n/**\n * Select_2 CSS\n */\nexport const styles = css`\n :host {\n box-sizing: border-box;\n --ng-nxt-gen-outline: var(--ng-border-width-1) solid var(--ng-colors-border-brand);\n --ng-nxt-gen-outline-error: var(--ng-border-width-1) solid var(--ng-colors-border-error);\n --ng-private-outline-transparent: var(--ng-border-width-1) solid transparent;\n --ng-box-shadow: 0px 12px 16px -4px var(--ng-colors-effects-shadow-lg-01, rgba(10, 13, 18, 0.08)), 0px 4px 6px -2px var(--ng-colors-effects-shadow-lg-02, rgba(10, 13, 18, 0.03)), 0px 2px 2px -1px var(--ng-colors-effects-shadow-lg-03, rgba(10, 13, 18, 0.04));\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 .virtualized{\n min-width: 110px;\n width: 100%;\n }\n\n .virtualized ::slotted(nile-option),\n .virtualized nile-option {\n width: 100%;\n display: block;\n }\n\n /* Ensure proper sizing for non-virtualized options (small datasets) */\n .virtualized:not(:has(lit-virtualizer)) {\n display: flex;\n flex-direction: column;\n }\n\n .virtualized:not(:has(lit-virtualizer)) nile-option {\n flex-shrink: 0;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n :host([disabled]) .form-control--has-label .form-control__label {\n user-select: none;\n -webkit-user-select: none;\n }\n\n [hidden] {\n display: none !important;\n }\n\n .form-control .form-control__label {\n display: none;\n }\n\n .form-control .form-control__help-text {\n display: none;\n }\n\n /* Label */\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 /* Help text */\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 }\n\n .form-control--has-help-text.form-control--medium .form-control__help-text {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n }\n\n .form-control--has-help-text.form-control--radio-group\n .form-control__help-text {\n margin-top: var(--nile-spacing-xs, var(--ng-spacing-sm));\n }\n\n :host {\n display: block;\n }\n\n /** The popup */\n .select {\n flex: 1 1 auto;\n display: inline-flex;\n width: 100%;\n position: relative;\n vertical-align: middle;\n }\n\n .select::part(popup) {\n z-index: 9999;\n }\n\n .select[data-current-placement^='top']::part(popup) {\n transform-origin: bottom;\n }\n\n .select[data-current-placement^='bottom']::part(popup) {\n transform-origin: top;\n }\n\n /* Combobox */\n .select__combobox {\n flex: 1;\n display: flex;\n width: 100%;\n min-width: 0;\n position: relative;\n align-items: center;\n justify-content: start;\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 vertical-align: middle;\n overflow: hidden;\n cursor: pointer;\n transition: 150ms color, 150ms border, 150ms box-shadow,\n 150ms background-color;\n }\n\n .select__display-input {\n position: relative;\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: var(--nile-spacing-none, var(--ng-spacing-none));\n margin: var(--nile-spacing-none, var(--ng-spacing-none));\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 }\n\n .select__display-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 .select:not(.select--disabled):hover .select__display-input {\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n .select__display-input:focus {\n outline: none;\n }\n\n /* Visually hide the display input when multiple is enabled */\n .select--multiple:not(.select--placeholder-visible) .select__display-input {\n position: absolute;\n z-index: -1;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n }\n\n .select__value-input {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: var(--nile-spacing-none, var(--ng-spacing-none));\n margin: var(--nile-spacing-none, var(--ng-spacing-none));\n opacity: 0;\n z-index: -1;\n }\n\n .select__tags {\n display: flex;\n flex: 1;\n align-items: center;\n flex-wrap: nowrap;\n margin-inline-start: var(--nile-spacing-7px, var(--ng-spacing-md));\n width: 100%;\n overflow: hidden;\n }\n\n .select__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-style: normal;\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 margin: var(--nile-spacing-sm, var(--ng-spacing-sm));\n }\n\n .select__tags-count-clearable {\n margin-right: var(--nile-spacing-5xl, var(--ng-spacing-5xl));\n }\n\n button.select__tags-count {\n appearance: none;\n -webkit-appearance: none;\n background: none;\n text-align: inherit;\n }\n\n button.select__tags-count:disabled {\n cursor: not-allowed;\n }\n\n .select__tags--fitted {\n min-width: 0;\n }\n\n .select__tags nile-lite-tooltip.select__tag-tip {\n display: contents;\n }\n\n :host([showtooltip]) .select__tags nile-tag {\n flex: 0 1 auto;\n cursor: pointer;\n min-width: 0;\n max-width: var(--nile-width-180px, var(--ng-height-180px));\n }\n\n :host([showtooltip]) .select__tags nile-tag::part(base) {\n max-width: 100%;\n }\n\n :host([showtooltip]) .select__tags nile-tag::part(prefix_content_wrapper) {\n flex: 1 1 auto;\n min-width: 0;\n }\n\n :host([showtooltip]) .select__tags nile-tag::part(content) {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n /* The tag's line-height of 1 leaves the clip box shorter than the glyph\n box, so descenders are cut. Pad the clip box, negate it in layout. */\n padding-block: 3px;\n margin-block: -3px;\n overflow: hidden;\n white-space: nowrap;\n }\n\n :host([showtooltip]) .select__tags nile-tag::part(content) {\n text-overflow: ellipsis;\n }\n\n :host([showtooltip]) .select__tags nile-tag::part(remove-button) {\n flex: 0 0 auto;\n }\n\n .select__tags--fitted nile-tag:focus-visible {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-colors-border-brand));\n outline-offset: 1px;\n border-radius: var(--nile-radius-sm, var(--ng-radius-sm));\n }\n\n .select__tags--fitted .select__tags-count {\n flex: 0 0 auto;\n margin: 0;\n padding: 0 var(--nile-spacing-xsmall, var(--ng-spacing-md));\n height: var(--nile-height-26px, var(--ng-height-26px));\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n cursor: pointer;\n border: 1px dashed\n var(--nile-colors-neutral-500, var(--ng-colors-border-primary));\n border-radius: var(--nile-radius-sm, var(--ng-radius-sm));\n }\n\n .select__tags--fitted .select__tags-count:focus-visible {\n outline: 2px solid var(--nile-colors-primary-600, var(--ng-colors-border-brand));\n outline-offset: 1px;\n }\n\n .select__tags::slotted(nile-tag) {\n cursor: pointer !important;\n }\n\n .select--disabled .select__tags,\n .select--disabled .select__tags::slotted(nile-tag) {\n cursor: not-allowed !important;\n }\n\n .select--disabled .select__display-input{\n color:var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n pointer-events:none;\n }\n\n /* Standard selects */\n .select--standard .select__combobox {\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: var(--nile-outline-none, var(--ng-private-outline-transparent));\n }\n\n .select--standard .select__combobox:hover {\n border: 1px solid var(--nile-colors-dark-900, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n }\n\n .select--error:hover:not(.select--disabled) .select__combobox {\n border-color: var(--nile-colors-red-500, var(--ng-colors-border-error));\n outline: var(--nile-outline-none, var(--ng-colors-border-error));\n }\n\n .select--standard.select--disabled .select__combobox {\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 user-select:none;\n cursor: not-allowed;\n outline: none;\n }\n\n .select--standard:not(.select--disabled).select--open .select__combobox,\n .select--standard:not(.select--disabled).select--focused .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary));\n }\n\n .select--warning .select__combobox {\n border-color: var(--nile-colors-yellow-500, var(--ng-colors-border-warning));\n }\n\n .select--error .select__combobox {\n border-color: var(--nile-colors-red-500, var(--ng-colors-border-error));\n outline: var(--nile-outline-none, var(--ng-private-outline-transparent));\n }\n\n .select--success {\n border-color: var(--nile-colors-green-500, var(--ng-componentcolors-utility-success-500));\n }\n\n /* Filled selects */\n .select--filled .select__combobox {\n border: none;\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary));\n color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));\n }\n\n .select--filled:hover:not(.select--disabled) .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary-hover));\n }\n\n .select--filled.select--disabled .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-disabled-subtle));\n opacity: var(--nile-opacity-50, var(--ng-opacity-100));\n cursor: not-allowed;\n }\n\n .select--filled:not(.select--disabled).select--open .select__combobox,\n .select--filled:not(.select--disabled).select--focused .select__combobox {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-primary));\n outline: 3px solid rgba(0, 89, 255, 0.4);\n }\n\n .select--medium .select__combobox {\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-lg, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg));\n height: var(--nile-height-40px, var(--ng-height-40px));\n box-sizing: border-box;\n }\n\n .select--medium .select__clear {\n margin-inline-start: var(--nile-spacing-lg, var(--ng-spacing-lg));\n }\n\n .select--medium .select__prefix::slotted(*) {\n margin-inline-end: var(--nile-spacing-md, var(--ng-spacing-md));\n }\n\n .select--medium .select__prefix.multiple::slotted(*) {\n margin-inline-start: var(--nile-spacing-lg, var(--ng-spacing-md));\n }\n\n .select--medium.select--multiple:not(.select--placeholder-visible)\n .select__combobox {\n padding-inline-start: var(--nile-spacing-none, var(--ng-spacing-none));\n }\n\n .select--medium .select__tags {\n gap: var(--nile-spacing-3px, var(--ng-spacing-sm));\n }\n\n /* Pills */\n .select--pill.select--medium .select__combobox {\n border-radius: var(--nile-radius-3xl, var(--ng-radius-3xl));\n }\n\n /* Prefix */\n .select__prefix {\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 .select__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 /* Clear button */\n .select__clear {\n display: inline-flex;\n align-items: center;\n justify-content: center;\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-primary-600, var(--ng-colors-text-brand-secondary-700));\n border: none;\n background: none;\n padding: var(--nile-spacing-none, var(--ng-spacing-none));\n transition: 150ms color;\n cursor: pointer;\n }\n\n .select__clear:hover {\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n }\n\n .select__clear:focus {\n outline: none;\n }\n\n /* Expand icon */\n .select__expand-icon {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n transition: 250ms rotate ease;\n rotate: 0;\n margin-inline-start: var(--nile-spacing-md, var(--ng-spacing-md));\n }\n\n .select--open .select__expand-icon {\n rotate: -180deg;\n }\n\n /* Listbox */\n .select__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-primary));\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 /* Make sure it adheres to the popup's auto size */\n max-width: var(--auto-size-available-width);\n max-height: var(--auto-size-available-height);\n box-shadow: var(--nile-box-shadow-none, var(--ng-shadow-xs));\n }\n\n .select__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 .select__options__search-enabled {\n padding-top: var(--nile-spacing-10px, var(--ng-spacing-lg));\n width: 100%;\n }\n\n .select__listbox::slotted(nile-divider) {\n --spacing: var(--nile-spacing-xs, var(--ng-spacing-sm));\n }\n\n .select__listbox::slotted(small) {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n font-weight: var(--nile-font-weight-semi-bold, var(--ng-font-weight-semibold));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n padding-block: var(--nile-spacing-xs, var(--ng-spacing-sm));\n padding-inline: var(--nile-spacing-xl, var(--ng-spacing-xl));\n }\n\n .select__search {\n position: sticky;\n top: 0px;\n z-index: 1;\n width: calc(100% - 16px);\n padding: var(--nile-spacing-md, var(--ng-spacing-md));\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n margin-bottom: -8px;\n }\n\n .select__footer {\n position: sticky;\n bottom: 0px;\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-primary));\n display: flex;\n height: 15px;\n /* Auto layout */\n display: var(--nile-display-flex, var(--ng-display-flex));\n flex-direction: row;\n align-items: center;\n padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg));\n gap: var(--nile-spacing-none, var(--ng-spacing-none));\n justify-content: space-between;\n box-sizing: unset;\n }\n\n .select__footer--query {\n container-type: inline-size;\n container-name: nile-select-footer;\n }\n\n .select__footer-action,\n .select__footer .select__clear {\n display: inline-flex;\n align-items: center;\n gap: var(--nile-spacing-sm, var(--ng-spacing-sm));\n min-width: 0;\n }\n\n .select__footer-glyph {\n flex: 0 0 auto;\n display: inline-flex;\n vertical-align: middle;\n }\n\n .select__footer-label {\n white-space: nowrap;\n }\n\n @container nile-select-footer (max-width: 148px) {\n .select__clear .select__footer-label {\n display: none;\n }\n }\n\n @container nile-select-footer (max-width: 113px) {\n .select__footer-label {\n display: none;\n }\n }\n\n .tag__prefix[slot='prefix'] {\n height: 14px;\n display: inline-block;\n overflow: hidden;\n }\n\n .tag__prefix[slot='prefix'] img {\n max-height: 100%;\n }\n\n .select__loader {\n width: 100%;\n text-align: center;\n display: block;\n }\n\n .select__loader--icon {\n margin-top: var(--nile-spacing-xl, var(--ng-spacing-xl));\n animation: spin 0.6s linear infinite;\n }\n\n .select__no-results {\n padding: var(--nile-spacing-lg, var(--ng-spacing-lg));\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n .select__invisible {\n opacity: 0;\n }\n\n .select__prefix--from-options {\n margin-inline-end: var(--nile-spacing-lg, var(--ng-spacing-md));\n }\n \n .select__hide-default{\n display: none;\n }\n\n .virtualized nile-option[selected] {\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-active));\n }\n\n .virtualized nile-option[selected]::part(base) {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-secondary-700));\n }\n\n .virtualized.no-scroll {\n overflow: hidden !important;\n }\n\n .virtual-select-loader {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 75%;\n }\n\n .select__footer.loading, .select__options.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n\n .virtual-select-loader {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 75%;\n }\n\n .select__footer.loading, .select__options.loading {\n opacity: 0.5;\n pointer-events: none;\n }\n .select.select--open .select__combobox {\n border-color: var(--ng-colors-border-brand);\n box-shadow: 0 0 0 1px var(--ng-colors-border-brand) inset ;\n }\n\n :host([enableDescription]) .option::part(base) {\n height: 41px;\n }\n`;\n\nexport default [styles];\n"]}
@@ -186,16 +186,20 @@ export declare class NileVirtualSelect extends NileElement implements NileFormCo
186
186
  get maxOptionsVisible(): number;
187
187
  set maxOptionsVisible(value: number);
188
188
  private get chipFittingEnabled();
189
+ private get legacyTagFitEnabled();
190
+ private setFittedMaxOptionsVisible;
189
191
  /** Minimum width, in px, of a squeezed chip. Needs `showtooltip`. */
190
192
  chipMinWidth: number;
191
193
  /** Maximum width, in px, of a squeezed chip. Needs `showtooltip`. */
192
194
  chipMaxWidth: number;
193
195
  /**
194
- * Shows a chip's full value in a tooltip when its text is clipped, and is
195
- * what allows a chip to be truncated at all.
196
+ * Opts into the fitted chip row: chips are sized between chipMinWidth and chipMaxWidth, the
197
+ * rest collapse into a +N button, and a clipped chip shows its full value in a tooltip.
198
+ * Off by default, which keeps the pre-2.0.9 chip row.
196
199
  */
197
200
  showTooltip: boolean;
198
201
  private hiddenChipCount;
202
+ oldMaxOptionsVisible: number;
199
203
  /** Last measured width of the overflow button, in px. */
200
204
  private lastOverflowWidth;
201
205
  private chipFitFrame;
@@ -322,6 +326,7 @@ export declare class NileVirtualSelect extends NileElement implements NileFormCo
322
326
  private renderDisplayInput;
323
327
  private renderFittedTags;
324
328
  private renderTags;
329
+ private renderLegacyTag;
325
330
  private renderValueInput;
326
331
  private renderClearButton;
327
332
  private renderSuffix;
@@ -337,9 +342,12 @@ export declare class NileVirtualSelect extends NileElement implements NileFormCo
337
342
  private updateValidity;
338
343
  private setupResizeObserver;
339
344
  private calculateTotalWidthOfTags;
345
+ private calculateWidthOfSelectTagsDiv;
346
+ private fitTagsLegacy;
340
347
  private allocateChipWidths;
341
348
  private computeChipFit;
342
349
  private layoutChips;
350
+ private labelOverflows;
343
351
  private isChipClipped;
344
352
  private refreshClippedChips;
345
353
  private scheduleClipCheck;
@@ -199,11 +199,13 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
199
199
  /** Maximum width, in px, of a squeezed chip. Needs `showtooltip`. */
200
200
  this.chipMaxWidth = 180;
201
201
  /**
202
- * Shows a chip's full value in a tooltip when its text is clipped, and is
203
- * what allows a chip to be truncated at all.
202
+ * Opts into the fitted chip row: chips are sized between chipMinWidth and chipMaxWidth, the
203
+ * rest collapse into a +N button, and a clipped chip shows its full value in a tooltip.
204
+ * Off by default, which keeps the pre-2.0.9 chip row.
204
205
  */
205
206
  this.showTooltip = false;
206
207
  this.hiddenChipCount = 0;
208
+ this.oldMaxOptionsVisible = 1;
207
209
  /** Last measured width of the overflow button, in px. */
208
210
  this.lastOverflowWidth = 0;
209
211
  this.chipFitFrame = 0;
@@ -270,7 +272,15 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
270
272
  this.requestUpdate('maxOptionsVisible', previous);
271
273
  }
272
274
  get chipFittingEnabled() {
273
- return !!this.multiple && !this.maxOptionsVisibleExplicit;
275
+ return !!this.multiple && this.showTooltip && !this.maxOptionsVisibleExplicit;
276
+ }
277
+ get legacyTagFitEnabled() {
278
+ return !!this.multiple && !this.showTooltip;
279
+ }
280
+ setFittedMaxOptionsVisible(value) {
281
+ const previous = this._maxOptionsVisible;
282
+ this._maxOptionsVisible = value;
283
+ this.requestUpdate('maxOptionsVisible', previous);
274
284
  }
275
285
  /** Gets the validity state object */
276
286
  get validity() {
@@ -308,9 +318,15 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
308
318
  }
309
319
  if (changedProperties.has('autoResize') ||
310
320
  changedProperties.has('multiple') ||
311
- changedProperties.has('maxOptionsVisible')) {
321
+ changedProperties.has('maxOptionsVisible') ||
322
+ changedProperties.has('showTooltip')) {
312
323
  this.setupResizeObserver();
313
324
  }
325
+ if (changedProperties.has('showTooltip') &&
326
+ changedProperties.get('showTooltip') !== undefined &&
327
+ this.legacyTagFitEnabled) {
328
+ this.calculateTotalWidthOfTags();
329
+ }
314
330
  if (changedProperties.has('chipMinWidth') ||
315
331
  changedProperties.has('chipMaxWidth')) {
316
332
  this.destroyChipFit();
@@ -1153,30 +1169,14 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
1153
1169
  ${this.selectedOptions.map((option, index) => {
1154
1170
  if (index < this.maxOptionsVisible ||
1155
1171
  this.maxOptionsVisible <= 0) {
1156
- return html `
1157
- <nile-lite-tooltip
1172
+ return this.showTooltip
1173
+ ? html `<nile-lite-tooltip
1158
1174
  class="select__tag-tip"
1159
1175
  .content=${option.getTextLabel()}
1160
1176
  ?disabled=${this.chipTooltipDisabled(index)}
1161
- >
1162
- <nile-tag
1163
- part="tag"
1164
- exportparts="
1165
- base:tag__base,
1166
- content:tag__content,
1167
- remove-button:tag__remove-button,
1168
- remove-button__base:tag__remove-button__base
1169
- "
1170
- style="max-width:${this.chipMaxWidth}px"
1171
- ?pill=${this.pill}
1172
- size=${this.size}
1173
- removable
1174
- @nile-remove=${(event) => this.handleTagRemove(event, option)}
1175
- >
1176
- ${option.getTextLabel()}
1177
- </nile-tag>
1178
- </nile-lite-tooltip>
1179
- `;
1177
+ >${this.renderLegacyTag(option, index)}</nile-lite-tooltip
1178
+ >`
1179
+ : this.renderLegacyTag(option, index);
1180
1180
  }
1181
1181
  else if (index === this.maxOptionsVisible) {
1182
1182
  return html `
@@ -1193,6 +1193,31 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
1193
1193
  `
1194
1194
  : html ``;
1195
1195
  }
1196
+ renderLegacyTag(option, index) {
1197
+ const classes = {
1198
+ select__invisible: index + 1 > this.oldMaxOptionsVisible &&
1199
+ this.maxOptionsVisible === Infinity,
1200
+ };
1201
+ return html `
1202
+ <nile-tag
1203
+ class=${classMap(classes)}
1204
+ part="tag"
1205
+ exportparts="
1206
+ base:tag__base,
1207
+ content:tag__content,
1208
+ remove-button:tag__remove-button,
1209
+ remove-button__base:tag__remove-button__base
1210
+ "
1211
+ style=${ifDefined(this.showTooltip ? `max-width:${this.chipMaxWidth}px` : undefined)}
1212
+ ?pill=${this.pill}
1213
+ size=${this.size}
1214
+ removable
1215
+ @nile-remove=${(event) => this.handleTagRemove(event, option)}
1216
+ >
1217
+ ${option.getTextLabel()}
1218
+ </nile-tag>
1219
+ `;
1220
+ }
1196
1221
  renderValueInput() {
1197
1222
  return html `
1198
1223
  <input
@@ -1318,7 +1343,11 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
1318
1343
  ? html `
1319
1344
  <div
1320
1345
  part="footer"
1321
- class="select__footer ${this.loading ? 'loading' : ''}"
1346
+ class=${classMap({
1347
+ 'select__footer': true,
1348
+ loading: !!this.loading,
1349
+ 'select__footer--query': !this.noWidthSync || this.portal,
1350
+ })}
1322
1351
  @click="${this.handleFooterClick}"
1323
1352
  >
1324
1353
  <span
@@ -1385,7 +1414,7 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
1385
1414
  });
1386
1415
  }
1387
1416
  setupResizeObserver() {
1388
- const wanted = this.autoResize && this.chipFittingEnabled
1417
+ const wanted = this.autoResize && (this.chipFittingEnabled || this.legacyTagFitEnabled)
1389
1418
  ? this.shadowRoot?.querySelector('.select__tags') ??
1390
1419
  undefined
1391
1420
  : undefined;
@@ -1408,6 +1437,10 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
1408
1437
  }
1409
1438
  }
1410
1439
  calculateTotalWidthOfTags() {
1440
+ if (this.legacyTagFitEnabled) {
1441
+ this.fitTagsLegacy();
1442
+ return;
1443
+ }
1411
1444
  if (!this.chipFittingEnabled)
1412
1445
  return;
1413
1446
  if (this.chipFitFrame)
@@ -1417,6 +1450,50 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
1417
1450
  this.layoutChips();
1418
1451
  });
1419
1452
  }
1453
+ calculateWidthOfSelectTagsDiv() {
1454
+ if (this.shadowRoot) {
1455
+ const selectTagsDiv = this.shadowRoot.querySelector('.select__tags');
1456
+ if (selectTagsDiv) {
1457
+ const width = selectTagsDiv.offsetWidth;
1458
+ return width - 70;
1459
+ }
1460
+ }
1461
+ return null;
1462
+ }
1463
+ fitTagsLegacy() {
1464
+ if (this.maxOptionsVisible !== Infinity) {
1465
+ this.oldMaxOptionsVisible = this.maxOptionsVisible;
1466
+ }
1467
+ this.setFittedMaxOptionsVisible(Infinity);
1468
+ setTimeout(() => {
1469
+ const widths = [];
1470
+ if (this.shadowRoot) {
1471
+ const tags = this.shadowRoot.querySelectorAll('nile-tag');
1472
+ tags.forEach(tag => {
1473
+ if (tag instanceof HTMLElement) {
1474
+ widths.push(tag.offsetWidth);
1475
+ }
1476
+ });
1477
+ }
1478
+ if (this.value.length !== widths.length) {
1479
+ return;
1480
+ }
1481
+ const widthOfSelectTagsDiv = this.calculateWidthOfSelectTagsDiv();
1482
+ if (!widthOfSelectTagsDiv) {
1483
+ return;
1484
+ }
1485
+ let summ = 0;
1486
+ let lastindex = 0;
1487
+ for (let i = 0; i < widths.length; i++) {
1488
+ summ += widths[i];
1489
+ if (summ > widthOfSelectTagsDiv) {
1490
+ lastindex = i;
1491
+ break;
1492
+ }
1493
+ }
1494
+ this.setFittedMaxOptionsVisible(lastindex);
1495
+ }, 1);
1496
+ }
1420
1497
  allocateChipWidths(natural, available) {
1421
1498
  const min = this.chipMinWidth;
1422
1499
  const max = this.chipMaxWidth;
@@ -1541,13 +1618,45 @@ let NileVirtualSelect = class NileVirtualSelect extends NileElement {
1541
1618
  }
1542
1619
  this.refreshClippedChips();
1543
1620
  }
1621
+ labelOverflows(content) {
1622
+ let left = Infinity;
1623
+ let right = -Infinity;
1624
+ const range = document.createRange();
1625
+ for (const node of content.assignedNodes({ flatten: true })) {
1626
+ let rect;
1627
+ if (node.nodeType === Node.TEXT_NODE) {
1628
+ if (!node.textContent?.trim())
1629
+ continue;
1630
+ range.selectNodeContents(node);
1631
+ rect = range.getBoundingClientRect();
1632
+ }
1633
+ else if (node instanceof Element) {
1634
+ rect = node.getBoundingClientRect();
1635
+ }
1636
+ else {
1637
+ continue;
1638
+ }
1639
+ if (rect.width === 0)
1640
+ continue;
1641
+ left = Math.min(left, rect.left);
1642
+ right = Math.max(right, rect.right);
1643
+ }
1644
+ if (right < left)
1645
+ return false;
1646
+ const box = content.getBoundingClientRect();
1647
+ const styles = getComputedStyle(content);
1648
+ const boxLeft = box.left + parseFloat(styles.borderLeftWidth) + parseFloat(styles.paddingLeft);
1649
+ const boxRight = box.right - parseFloat(styles.borderRightWidth) - parseFloat(styles.paddingRight);
1650
+ const epsilon = 1 / 64;
1651
+ return right > boxRight + epsilon || left < boxLeft - epsilon;
1652
+ }
1544
1653
  isChipClipped(el) {
1545
1654
  if (!el)
1546
1655
  return false;
1547
1656
  const root = el.shadowRoot;
1548
1657
  if (root) {
1549
1658
  const content = root.querySelector('[part="content"]');
1550
- if (content && content.scrollWidth > content.clientWidth + 1)
1659
+ if (content && this.labelOverflows(content))
1551
1660
  return true;
1552
1661
  const inner = root.querySelector('[part="prefix_content_wrapper"]');
1553
1662
  if (inner && inner.scrollWidth > inner.clientWidth + 1)
@@ -1788,10 +1897,10 @@ __decorate([
1788
1897
  property({ attribute: 'max-options-visible', type: Number })
1789
1898
  ], NileVirtualSelect.prototype, "maxOptionsVisible", null);
1790
1899
  __decorate([
1791
- property({ type: Number, reflect: true, attribute: true })
1900
+ property({ type: Number, attribute: true })
1792
1901
  ], NileVirtualSelect.prototype, "chipMinWidth", void 0);
1793
1902
  __decorate([
1794
- property({ type: Number, reflect: true, attribute: true })
1903
+ property({ type: Number, attribute: true })
1795
1904
  ], NileVirtualSelect.prototype, "chipMaxWidth", void 0);
1796
1905
  __decorate([
1797
1906
  property({ type: Boolean, attribute: true, reflect: true })
@@ -1799,6 +1908,9 @@ __decorate([
1799
1908
  __decorate([
1800
1909
  state()
1801
1910
  ], NileVirtualSelect.prototype, "hiddenChipCount", void 0);
1911
+ __decorate([
1912
+ state()
1913
+ ], NileVirtualSelect.prototype, "oldMaxOptionsVisible", void 0);
1802
1914
  __decorate([
1803
1915
  state()
1804
1916
  ], NileVirtualSelect.prototype, "clippedChips", void 0);