@aquera/nile-elements 1.7.0 → 1.7.2

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