@aquera/nile-elements 1.7.1 → 1.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1524 -419
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js.map +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.esm.js +8 -6
- package/dist/nile-combobox/group-utils.cjs.js +2 -0
- package/dist/nile-combobox/group-utils.cjs.js.map +1 -0
- package/dist/nile-combobox/group-utils.esm.js +1 -0
- package/dist/nile-combobox/index.cjs.js +2 -0
- package/dist/nile-combobox/index.cjs.js.map +1 -0
- package/dist/nile-combobox/index.esm.js +1 -0
- package/dist/nile-combobox/nile-combobox.cjs.js +2 -0
- package/dist/nile-combobox/nile-combobox.cjs.js.map +1 -0
- package/dist/nile-combobox/nile-combobox.css.cjs.js +2 -0
- package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -0
- package/dist/nile-combobox/nile-combobox.css.esm.js +715 -0
- package/dist/nile-combobox/nile-combobox.esm.js +238 -0
- package/dist/nile-combobox/portal-manager.cjs.js +2 -0
- package/dist/nile-combobox/portal-manager.cjs.js.map +1 -0
- package/dist/nile-combobox/portal-manager.esm.js +1 -0
- package/dist/nile-combobox/renderer.cjs.js +2 -0
- package/dist/nile-combobox/renderer.cjs.js.map +1 -0
- package/dist/nile-combobox/renderer.esm.js +147 -0
- package/dist/nile-combobox/search-manager.cjs.js +2 -0
- package/dist/nile-combobox/search-manager.cjs.js.map +1 -0
- package/dist/nile-combobox/search-manager.esm.js +1 -0
- package/dist/nile-combobox/selection-manager.cjs.js +2 -0
- package/dist/nile-combobox/selection-manager.cjs.js.map +1 -0
- package/dist/nile-combobox/selection-manager.esm.js +1 -0
- package/dist/nile-combobox/types.cjs.js +2 -0
- package/dist/nile-combobox/types.cjs.js.map +1 -0
- package/dist/nile-combobox/types.esm.js +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js +4 -2
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js.map +1 -1
- package/dist/src/nile-combobox/group-utils.d.ts +26 -0
- package/dist/src/nile-combobox/group-utils.js +140 -0
- package/dist/src/nile-combobox/group-utils.js.map +1 -0
- package/dist/src/nile-combobox/index.d.ts +1 -0
- package/dist/src/nile-combobox/index.js +2 -0
- package/dist/src/nile-combobox/index.js.map +1 -0
- package/dist/src/nile-combobox/nile-combobox.css.d.ts +9 -0
- package/dist/src/nile-combobox/nile-combobox.css.js +724 -0
- package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -0
- package/dist/src/nile-combobox/nile-combobox.d.ts +320 -0
- package/dist/src/nile-combobox/nile-combobox.js +1739 -0
- package/dist/src/nile-combobox/nile-combobox.js.map +1 -0
- package/dist/src/nile-combobox/nile-combobox.test.d.ts +1 -0
- package/dist/src/nile-combobox/nile-combobox.test.js +551 -0
- package/dist/src/nile-combobox/nile-combobox.test.js.map +1 -0
- package/dist/src/nile-combobox/portal-manager.d.ts +26 -0
- package/dist/src/nile-combobox/portal-manager.js +218 -0
- package/dist/src/nile-combobox/portal-manager.js.map +1 -0
- package/dist/src/nile-combobox/renderer.d.ts +24 -0
- package/dist/src/nile-combobox/renderer.js +279 -0
- package/dist/src/nile-combobox/renderer.js.map +1 -0
- package/dist/src/nile-combobox/search-manager.d.ts +15 -0
- package/dist/src/nile-combobox/search-manager.js +41 -0
- package/dist/src/nile-combobox/search-manager.js.map +1 -0
- package/dist/src/nile-combobox/selection-manager.d.ts +12 -0
- package/dist/src/nile-combobox/selection-manager.js +44 -0
- package/dist/src/nile-combobox/selection-manager.js.map +1 -0
- package/dist/src/nile-combobox/types.d.ts +53 -0
- package/dist/src/nile-combobox/types.js +8 -0
- package/dist/src/nile-combobox/types.js.map +1 -0
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/src/index.ts +1 -0
- package/src/nile-breadcrumb-item/nile-breadcrumb-item.ts +4 -2
- package/src/nile-combobox/group-utils.ts +157 -0
- package/src/nile-combobox/index.ts +1 -0
- package/src/nile-combobox/nile-combobox.css.ts +726 -0
- package/src/nile-combobox/nile-combobox.test.ts +704 -0
- package/src/nile-combobox/nile-combobox.ts +1816 -0
- package/src/nile-combobox/portal-manager.ts +263 -0
- package/src/nile-combobox/renderer.ts +466 -0
- package/src/nile-combobox/search-manager.ts +53 -0
- package/src/nile-combobox/selection-manager.ts +57 -0
- package/src/nile-combobox/types.ts +63 -0
- package/vscode-html-custom-data.json +311 -4
- package/web-dev-server.config.mjs +9 -0
- package/web-test-runner.config.mjs +11 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nile-combobox.css.js","sourceRoot":"","sources":["../../../src/nile-combobox/nile-combobox.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0sBxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2025\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { css } from 'lit';\n\nexport const styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));\n -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));\n text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n [hidden] {\n display: none;\n }\n\n /* ── Form control ── */\n\n .form-control .form-control__label {\n display: none;\n }\n\n .form-control--has-label .form-control__label {\n display: block;\n margin-bottom: var(--nile-spacing-sm, var(--ng-spacing-sm));\n color: var(--nile-colors-dark-900, var(--ng-colors-text-secondary-700));\n font-family: var(--nile-font-family-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));\n font-style: normal;\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));\n line-height: var(--nile-spacing-2xl, var(--ng-line-height-text-sm));\n letter-spacing: 0.2px;\n }\n\n .form-control--has-label.form-control--medium .form-control__label {\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));\n }\n\n :host([required]) .form-control--has-label .form-control__label::after {\n content: '*';\n margin-inline-start: -2px;\n color: var(--nile-colors-red-700, var(--ng-colors-text-error-primary-600));\n }\n\n :host([disabled]) .form-control--has-label .form-control__label {\n user-select: none;\n -webkit-user-select: none;\n }\n\n /* ── Popup ── */\n\n .combobox-popup {\n flex: 1 1 auto;\n display: inline-flex;\n width: 100%;\n position: relative;\n vertical-align: middle;\n }\n\n .combobox-popup::part(popup) {\n z-index: 9999;\n }\n\n .combobox-popup[data-current-placement^='top']::part(popup) {\n transform-origin: bottom;\n }\n\n .combobox-popup[data-current-placement^='bottom']::part(popup) {\n transform-origin: top;\n }\n\n /* ── Trigger: outer row that never scrolls ── */\n\n .combobox__trigger {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n position: relative;\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-medium));\n letter-spacing: normal;\n cursor: text;\n transition: 150ms color, 150ms border, 150ms box-shadow, 150ms background-color;\n background-color: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border: solid 1px var(--nile-colors-neutral-500, var(--ng-colors-border-primary));\n outline: none;\n }\n\n .combobox__trigger:hover {\n border-color: var(--nile-colors-dark-900, var(--ng-colors-border-neutral));\n }\n\n .combobox--open .combobox__trigger,\n .combobox--focused .combobox__trigger {\n border-color: var(--ng-colors-border-brand);\n box-shadow: 0 0 0 1px var(--ng-colors-border-brand) inset;\n background-color: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n }\n\n .combobox--disabled .combobox__trigger {\n background-color: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-primary));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n cursor: not-allowed;\n user-select: none;\n }\n\n .combobox--warning .combobox__trigger {\n border-color: var(--nile-colors-yellow-500, var(--ng-colors-border-warning));\n }\n\n .combobox--error .combobox__trigger {\n border-color: var(--nile-colors-red-500, var(--ng-colors-border-error));\n }\n\n .combobox--success .combobox__trigger {\n border-color: var(--nile-colors-green-500, var(--ng-componentcolors-utility-success-500));\n }\n\n /* Size: small */\n .combobox--small .combobox__trigger {\n border-radius: var(--nile-radius-sm, var(--ng-radius-md));\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n padding: var(--nile-spacing-md, var(--ng-spacing-sm)) var(--nile-spacing-md, var(--ng-spacing-md));\n min-height: var(--nile-height-32px, var(--ng-height-32px));\n }\n\n /* Size: medium */\n .combobox--medium .combobox__trigger {\n border-radius: var(--nile-radius-sm, var(--ng-radius-md));\n font-size: var(--nile-type-scale-3, var(--ng-font-size-text-md));\n padding: var(--nile-spacing-lg, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg));\n min-height: var(--nile-height-40px, var(--ng-height-40px));\n box-sizing: border-box;\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: inherit;\n font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));\n text-overflow: ellipsis;\n line-height: var(--nile-line-height-xsmall, 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 /* ── Group headers (data-driven grouping) ── */\n\n /* Plain (non-virtualized) listbox: sticky relative to the scroll container.\n * Activated only when the host has [sticky-group-header]. */\n :host([sticky-group-header]) .combobox__options-plain .combobox__group-header {\n position: sticky;\n top: calc(var(--group-depth, 0) * 28px);\n z-index: 1;\n }\n\n /* Virtualized listbox: each row is absolutely positioned by the virtualizer.\n * Sticky doesn't pin against the scroll container because the row wrapper's\n * transform creates a containing block. Instead we render a separate\n * overlay inside the listbox that mirrors the currently-active group\n * header (computed on scroll). */\n .combobox__group-header-slot {\n pointer-events: none;\n }\n .combobox__group-header-slot .combobox__group-header {\n height: 100%;\n box-sizing: border-box;\n }\n\n .combobox__group-sticky-overlay {\n position: sticky;\n top: 0;\n z-index: 2;\n pointer-events: none;\n }\n .combobox__group-sticky-overlay .combobox__group-header {\n box-shadow: 0 1px 0 0 var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n }\n\n .combobox__group-header {\n display: flex;\n align-items: center;\n gap: 6px;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n /* Match the listbox's natural inline padding so the header sits like a\n * section divider, edge-to-edge with options. Nested groups indent by\n * depth. Override with --combobox-group-header-indent if needed. */\n padding-block: 8px;\n padding-inline-end: var(--nile-spacing-lg, var(--ng-spacing-lg));\n padding-inline-start: calc(var(--combobox-group-header-indent, var(--nile-spacing-lg, var(--ng-spacing-lg))) + var(--group-depth, 0) * 16px);\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n font-weight: var(--nile-font-weight-semibold, var(--ng-font-weight-semibold));\n line-height: 1;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-tertiary-600));\n background: var(--nile-colors-neutral-100, var(--ng-colors-bg-secondary));\n border-bottom: 1px solid var(--nile-colors-neutral-300, var(--ng-colors-border-secondary));\n pointer-events: none;\n user-select: none;\n }\n\n .combobox__group-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .combobox__group-prefix {\n flex-shrink: 0;\n color: inherit;\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"]}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Aquera Inc 2025
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the BSD-3-Clause license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import '../nile-icon';
|
|
8
|
+
import '../nile-popup/nile-popup';
|
|
9
|
+
import '../nile-tag/nile-tag';
|
|
10
|
+
import '../nile-option/nile-option';
|
|
11
|
+
import '../nile-checkbox/nile-checkbox';
|
|
12
|
+
import '../nile-loader/nile-loader';
|
|
13
|
+
import NileElement from '../internal/nile-element';
|
|
14
|
+
import type { CSSResultGroup, PropertyValues, TemplateResult } from 'lit';
|
|
15
|
+
import type { NileFormControl } from '../internal/nile-element';
|
|
16
|
+
import type NilePopup from '../nile-popup/nile-popup';
|
|
17
|
+
import type { ComboboxOption, ComboboxRenderItemConfig, ComboboxTagLayout, ComboboxSize, ComboboxPlacement } from './types.js';
|
|
18
|
+
/**
|
|
19
|
+
* @summary A data-driven combobox with virtualized options, inline search, multi-select tags,
|
|
20
|
+
* custom value creation, and full WAI-ARIA Combobox keyboard navigation.
|
|
21
|
+
*
|
|
22
|
+
* @tag nile-combobox
|
|
23
|
+
* @status stable
|
|
24
|
+
* @since 2.0
|
|
25
|
+
*
|
|
26
|
+
* @dependency nile-icon
|
|
27
|
+
* @dependency nile-popup
|
|
28
|
+
* @dependency nile-tag
|
|
29
|
+
* @dependency nile-checkbox
|
|
30
|
+
* @dependency nile-loader
|
|
31
|
+
*
|
|
32
|
+
* @slot label - The input's label.
|
|
33
|
+
* @slot prefix - Prepend a presentational icon or element before the input.
|
|
34
|
+
* @slot clear-icon - An icon to use in lieu of the default clear icon.
|
|
35
|
+
* @slot expand-icon - The icon to show when the control is expanded/collapsed.
|
|
36
|
+
* @slot help-text - Text that describes how to use the input.
|
|
37
|
+
* @slot footer - Custom footer content (overrides default footer in multi-select mode).
|
|
38
|
+
* @slot no-results - Custom no-results content.
|
|
39
|
+
*
|
|
40
|
+
* @event nile-change - Emitted when the control's value changes.
|
|
41
|
+
* @event nile-clear - Emitted when the control's value is cleared.
|
|
42
|
+
* @event nile-input - Emitted when the control receives input.
|
|
43
|
+
* @event nile-focus - Emitted when the control gains focus.
|
|
44
|
+
* @event nile-blur - Emitted when the control loses focus.
|
|
45
|
+
* @event nile-show - Emitted when the dropdown opens.
|
|
46
|
+
* @event nile-after-show - Emitted after the dropdown opens and all animations complete.
|
|
47
|
+
* @event nile-hide - Emitted when the dropdown closes.
|
|
48
|
+
* @event nile-after-hide - Emitted after the dropdown closes and all animations complete.
|
|
49
|
+
* @event nile-search - Emitted (debounced) when the user types. Useful for API-driven filtering.
|
|
50
|
+
* @event nile-tag-remove - Emitted when a tag is removed in multi-select mode.
|
|
51
|
+
* @event nile-tag-add - Emitted when a custom value is added via allowCustomValue.
|
|
52
|
+
* @event nile-scroll-end - Emitted when scrolled to the bottom (for infinite loading).
|
|
53
|
+
* @event nile-invalid - Emitted when form validation constraints aren't satisfied.
|
|
54
|
+
* @event nile-select-all - Emitted when the Select all / Deselect all control toggles. Detail: { value, name, action: 'select-all' | 'deselect-all' }.
|
|
55
|
+
*
|
|
56
|
+
* @csspart form-control - The form control wrapper.
|
|
57
|
+
* @csspart form-control-label - The label wrapper.
|
|
58
|
+
* @csspart form-control-input - The input area wrapper.
|
|
59
|
+
* @csspart combobox - The combobox trigger (input + tags + icons).
|
|
60
|
+
* @csspart input - The text input element.
|
|
61
|
+
* @csspart listbox - The dropdown listbox.
|
|
62
|
+
* @csspart tags - The tags container in multi-select mode.
|
|
63
|
+
* @csspart tag - Each individual tag.
|
|
64
|
+
* @csspart clear-button - The clear button.
|
|
65
|
+
* @csspart expand-icon - The expand/collapse icon.
|
|
66
|
+
* @csspart top-actions - The sticky row above the option list that contains the Select all checkbox and the Selected / Show all filter toggle. Rendered only when multiple && selectAllEnabled.
|
|
67
|
+
* @csspart select-all - The Select all / Deselect all checkbox wrapper inside top-actions.
|
|
68
|
+
* @csspart show-toggle - The "Selected / Show all" filter button inside top-actions.
|
|
69
|
+
* @csspart no-results - The empty-state container shown when a search/filter returns no items. Contains no-results-title and no-results-subtitle.
|
|
70
|
+
* @csspart no-results-title - The title row of the no-results empty state.
|
|
71
|
+
* @csspart no-results-subtitle - The subtitle row of the no-results empty state.
|
|
72
|
+
* @csspart no-data - The empty-state container shown when the dataset is empty (no active search/filter).
|
|
73
|
+
* @csspart footer - The footer with "Show Selected" / "Clear All".
|
|
74
|
+
* @csspart no-results - The no-results message.
|
|
75
|
+
*/
|
|
76
|
+
export declare class NileCombobox extends NileElement implements NileFormControl {
|
|
77
|
+
static styles: CSSResultGroup;
|
|
78
|
+
private readonly formControlController;
|
|
79
|
+
private readonly hasSlotController;
|
|
80
|
+
private readonly portalManager;
|
|
81
|
+
private readonly searchManager;
|
|
82
|
+
private scrollElementRef;
|
|
83
|
+
private virtualizerCtrl;
|
|
84
|
+
private hScrollElementRef;
|
|
85
|
+
private hVirtualizerCtrl;
|
|
86
|
+
private scrollTimeout;
|
|
87
|
+
private scrolling;
|
|
88
|
+
private visibilityManager?;
|
|
89
|
+
private keyboardActiveIndex;
|
|
90
|
+
popup: NilePopup;
|
|
91
|
+
combobox: HTMLElement;
|
|
92
|
+
inputElement: HTMLInputElement;
|
|
93
|
+
valueInput: HTMLInputElement;
|
|
94
|
+
private hasFocus;
|
|
95
|
+
displayLabel: string;
|
|
96
|
+
selectedOptions: ComboboxOption[];
|
|
97
|
+
/** The items displayed after filtering. Renderer reads from this. */
|
|
98
|
+
filteredData: any[];
|
|
99
|
+
/**
|
|
100
|
+
* Mixed (header + option) row list, only populated when `data` contains
|
|
101
|
+
* group entries (`type: 'group'`). When non-empty, the listbox renders from
|
|
102
|
+
* this instead of `filteredData`. `filteredData` stays in sync as the
|
|
103
|
+
* option-only projection so existing select-all / strict-match / etc. logic
|
|
104
|
+
* keeps working unchanged.
|
|
105
|
+
*/
|
|
106
|
+
private filteredRows;
|
|
107
|
+
/** The complete unfiltered dataset (preserved for re-filtering). */
|
|
108
|
+
private originalData;
|
|
109
|
+
showNoResults: boolean;
|
|
110
|
+
showListbox: boolean;
|
|
111
|
+
searchValue: string;
|
|
112
|
+
private showSelectedOnly;
|
|
113
|
+
private selectAllChecked;
|
|
114
|
+
private selectAllIndeterminate;
|
|
115
|
+
/**
|
|
116
|
+
* Index into `filteredRows` of the group header that should be pinned at
|
|
117
|
+
* the top of the (virtualized) listbox right now. -1 means none.
|
|
118
|
+
* Recomputed on scroll.
|
|
119
|
+
*/
|
|
120
|
+
private stickyHeaderIndex;
|
|
121
|
+
name: string;
|
|
122
|
+
data: any[];
|
|
123
|
+
value: string | string[];
|
|
124
|
+
defaultValue: string | string[];
|
|
125
|
+
size: ComboboxSize;
|
|
126
|
+
placeholder: string;
|
|
127
|
+
multiple: boolean;
|
|
128
|
+
label: string;
|
|
129
|
+
required: boolean;
|
|
130
|
+
disabled: boolean;
|
|
131
|
+
open: boolean;
|
|
132
|
+
clearable: boolean;
|
|
133
|
+
loading: boolean;
|
|
134
|
+
optionsLoading: boolean;
|
|
135
|
+
/** When true, skip local filtering and rely solely on the `nile-search` event for API-driven results. */
|
|
136
|
+
disableLocalSearch: boolean;
|
|
137
|
+
/** When true, displays a "+ Add [value]" option for values not in the data. */
|
|
138
|
+
allowCustomValue: boolean;
|
|
139
|
+
/** When true, typing free text and pressing Enter/Tab adds it as a tag (like nile-chip's acceptUserInput). */
|
|
140
|
+
acceptUserInput: boolean;
|
|
141
|
+
/** When true, custom values added via allowCustomValue or acceptUserInput are also appended to the suggestions list. */
|
|
142
|
+
addToSuggestions: boolean;
|
|
143
|
+
/** When true, value must match an option. On blur, reverts to the last valid value if text doesn't match. */
|
|
144
|
+
strict: boolean;
|
|
145
|
+
/** Max tags visible before showing "+N more" (0 = no limit). */
|
|
146
|
+
maxTagsVisible: number;
|
|
147
|
+
/** Controls how tags wrap in multi-select mode. */
|
|
148
|
+
tagLayout: ComboboxTagLayout;
|
|
149
|
+
/**
|
|
150
|
+
* Show footer with "Show Selected" and "Clear All" in multi-select mode.
|
|
151
|
+
* Automatically suppressed when `selectAllEnabled` is true, since the top
|
|
152
|
+
* actions row already provides the same controls.
|
|
153
|
+
*/
|
|
154
|
+
showFooter: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* When true (and `multiple` is true), renders a "Select all" / "Deselect all"
|
|
157
|
+
* checkbox at the top of the listbox. Operates on the currently visible,
|
|
158
|
+
* non-disabled options (respects the active search filter).
|
|
159
|
+
*/
|
|
160
|
+
selectAllEnabled: boolean;
|
|
161
|
+
/**
|
|
162
|
+
* When true (default), data-driven group headers stick to the top of the
|
|
163
|
+
* listbox while scrolling through that group's options (Atlassian-style).
|
|
164
|
+
* Works in both plain and virtualized rendering modes. Set to false for
|
|
165
|
+
* inline-only headers that scroll away with their options.
|
|
166
|
+
*/
|
|
167
|
+
stickyGroupHeader: boolean;
|
|
168
|
+
portal: boolean;
|
|
169
|
+
hoist: boolean;
|
|
170
|
+
placement: ComboboxPlacement;
|
|
171
|
+
form: string;
|
|
172
|
+
helpText: string;
|
|
173
|
+
errorMessage: string;
|
|
174
|
+
warning: boolean;
|
|
175
|
+
error: boolean;
|
|
176
|
+
success: boolean;
|
|
177
|
+
filled: boolean;
|
|
178
|
+
pill: boolean;
|
|
179
|
+
noResultsMessage: string;
|
|
180
|
+
noResultsSubtitle: string;
|
|
181
|
+
noDataMessage: string;
|
|
182
|
+
/**
|
|
183
|
+
* Pre-defined autocomplete suggestions. Accepts a JSON array string attribute
|
|
184
|
+
* or a JS array property (like nile-chip). When `addToSuggestions` is true,
|
|
185
|
+
* custom values added by the user are appended to this list and persisted.
|
|
186
|
+
*/
|
|
187
|
+
autoCompleteOptions: any[];
|
|
188
|
+
/** Debounce interval (ms) for the nile-search event. */
|
|
189
|
+
debounceMs: number;
|
|
190
|
+
renderItemConfig?: ComboboxRenderItemConfig;
|
|
191
|
+
allowHtmlLabel: boolean;
|
|
192
|
+
enableVisibilityEffect: boolean;
|
|
193
|
+
enableTabClose: boolean;
|
|
194
|
+
noWidthSync: boolean;
|
|
195
|
+
/** Number of columns in the dropdown grid (vertical scroll). When > 1, options render in a multi-column grid layout. */
|
|
196
|
+
gridColumns: number;
|
|
197
|
+
/** Number of visible rows in horizontal grid mode. When > 0, enables horizontal virtual scroll with columns scrolling left/right. */
|
|
198
|
+
gridRows: number;
|
|
199
|
+
/** Width of each column in horizontal grid mode (px). */
|
|
200
|
+
gridColumnWidth: number;
|
|
201
|
+
get validity(): ValidityState;
|
|
202
|
+
get validationMessage(): string;
|
|
203
|
+
connectedCallback(): void;
|
|
204
|
+
disconnectedCallback(): void;
|
|
205
|
+
protected firstUpdated(_changed: PropertyValues): void;
|
|
206
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
207
|
+
private get isHorizontalGrid();
|
|
208
|
+
/** True when the source data contains at least one group entry. */
|
|
209
|
+
private get hasGroupedData();
|
|
210
|
+
/**
|
|
211
|
+
* Walk filteredRows and find the index of the deepest group header whose
|
|
212
|
+
* virtual position is at or above `scrollTop`. That's the header that
|
|
213
|
+
* should be pinned at the top of the listbox right now.
|
|
214
|
+
*/
|
|
215
|
+
private updateStickyHeader;
|
|
216
|
+
/** Recursively keep only options whose value is in `selectedSet`; drop empty groups. */
|
|
217
|
+
private pruneTreeBySelection;
|
|
218
|
+
private get hasActiveFilter();
|
|
219
|
+
private renderEmptyState;
|
|
220
|
+
private get isBidirectionalGrid();
|
|
221
|
+
private get virtualRowCount();
|
|
222
|
+
private get virtualColumnCount();
|
|
223
|
+
private updateVirtualizerCount;
|
|
224
|
+
private lastVirtualizerGrouped;
|
|
225
|
+
private getDisplayText;
|
|
226
|
+
private getItemValue;
|
|
227
|
+
private getSearchText;
|
|
228
|
+
private getItemDescription;
|
|
229
|
+
private getItemPrefix;
|
|
230
|
+
private getItemSuffix;
|
|
231
|
+
private syncSelection;
|
|
232
|
+
/**
|
|
233
|
+
* Returns the options eligible for Select All — the currently filtered data
|
|
234
|
+
* (so the active search/filter is respected) minus any `disabled` items.
|
|
235
|
+
* Mirrors nile-select's `getSelectableOptions()` contract.
|
|
236
|
+
*/
|
|
237
|
+
private getSelectableData;
|
|
238
|
+
/**
|
|
239
|
+
* Derives `selectAllChecked` + `selectAllIndeterminate` from the current
|
|
240
|
+
* selection vs. the selectable set. No-op when `multiple` is false.
|
|
241
|
+
*
|
|
242
|
+
* options=0 → both false (nothing to select, e.g. empty search)
|
|
243
|
+
* selected=0 → checked=false, indeterminate=false
|
|
244
|
+
* selected=options → checked=true, indeterminate=false
|
|
245
|
+
* otherwise (partial) → checked=false, indeterminate=true
|
|
246
|
+
*/
|
|
247
|
+
private updateSelectAllState;
|
|
248
|
+
/**
|
|
249
|
+
* Toggles all selectable, visible options. Indeterminate → clears selection
|
|
250
|
+
* (matches the "Deselect All" label flip), empty → selects all,
|
|
251
|
+
* fully-selected → clears.
|
|
252
|
+
*/
|
|
253
|
+
private handleSelectAllToggle;
|
|
254
|
+
private handleDocumentFocusIn;
|
|
255
|
+
private handleDocumentKeyDown;
|
|
256
|
+
private handleDocumentMouseDown;
|
|
257
|
+
private handleWindowError;
|
|
258
|
+
private handleWindowResize;
|
|
259
|
+
private handleWindowScroll;
|
|
260
|
+
private setupBoundHandlers;
|
|
261
|
+
private addOpenListeners;
|
|
262
|
+
private removeOpenListeners;
|
|
263
|
+
private onInputKeyDown;
|
|
264
|
+
private onGlobalKeyDown;
|
|
265
|
+
private getVisibleOptions;
|
|
266
|
+
private moveActiveOption;
|
|
267
|
+
private setActiveOption;
|
|
268
|
+
private selectActiveOption;
|
|
269
|
+
private onInputChange;
|
|
270
|
+
private onInputHandler;
|
|
271
|
+
private filterOptions;
|
|
272
|
+
private onFocusIn;
|
|
273
|
+
private onFocusOut;
|
|
274
|
+
private onTriggerMouseDown;
|
|
275
|
+
private onOptionClick;
|
|
276
|
+
private handleOptionSelection;
|
|
277
|
+
private addCustomValue;
|
|
278
|
+
private onClearClick;
|
|
279
|
+
private removeTag;
|
|
280
|
+
private onFooterClick;
|
|
281
|
+
private toggleShowSelected;
|
|
282
|
+
private clearAll;
|
|
283
|
+
private onScroll;
|
|
284
|
+
show(): Promise<unknown>;
|
|
285
|
+
hide(): Promise<unknown>;
|
|
286
|
+
handleOpenChange(): Promise<void>;
|
|
287
|
+
private doOpen;
|
|
288
|
+
private doClose;
|
|
289
|
+
handleDisabledChange(): void;
|
|
290
|
+
handleValueChange(): void;
|
|
291
|
+
handleDataChange(): void;
|
|
292
|
+
handleAutoCompleteOptionsChange(): void;
|
|
293
|
+
handleSelectAllConfigChange(): void;
|
|
294
|
+
handlePortalChange(): void;
|
|
295
|
+
checkValidity(): boolean;
|
|
296
|
+
getForm(): HTMLFormElement | null;
|
|
297
|
+
reportValidity(): boolean;
|
|
298
|
+
setCustomValidity(message: string): void;
|
|
299
|
+
focus(options?: FocusOptions): void;
|
|
300
|
+
blur(): void;
|
|
301
|
+
private handleInvalid;
|
|
302
|
+
private updateValidity;
|
|
303
|
+
private resetScrollPosition;
|
|
304
|
+
render(): TemplateResult;
|
|
305
|
+
private renderTrigger;
|
|
306
|
+
private renderInlineTags;
|
|
307
|
+
private renderClearButton;
|
|
308
|
+
private renderStickyHeaderOverlay;
|
|
309
|
+
private renderListbox;
|
|
310
|
+
private renderHorizontalListbox;
|
|
311
|
+
private renderLoader;
|
|
312
|
+
private renderSelectAll;
|
|
313
|
+
private renderFooter;
|
|
314
|
+
}
|
|
315
|
+
export default NileCombobox;
|
|
316
|
+
declare global {
|
|
317
|
+
interface HTMLElementTagNameMap {
|
|
318
|
+
'nile-combobox': NileCombobox;
|
|
319
|
+
}
|
|
320
|
+
}
|