@ni/nimble-components 34.3.1 → 34.3.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/dist/all-components-bundle.js +665 -579
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +6368 -6371
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/anchor/template.js +0 -1
- package/dist/esm/anchor/template.js.map +1 -1
- package/dist/esm/banner/template.js +0 -1
- package/dist/esm/banner/template.js.map +1 -1
- package/dist/esm/breadcrumb/breadcrumb.foundation.spec.js +8 -1
- package/dist/esm/breadcrumb/breadcrumb.foundation.spec.js.map +1 -1
- package/dist/esm/breadcrumb/template.js +0 -1
- package/dist/esm/breadcrumb/template.js.map +1 -1
- package/dist/esm/combobox/template.js +0 -2
- package/dist/esm/combobox/template.js.map +1 -1
- package/dist/esm/list-option/template.js +0 -1
- package/dist/esm/list-option/template.js.map +1 -1
- package/dist/esm/list-option-group/template.js +0 -1
- package/dist/esm/list-option-group/template.js.map +1 -1
- package/dist/esm/menu/template.js +0 -3
- package/dist/esm/menu/template.js.map +1 -1
- package/dist/esm/menu-button/template.js +0 -1
- package/dist/esm/menu-button/template.js.map +1 -1
- package/dist/esm/patterns/required-visible/template.js +0 -1
- package/dist/esm/patterns/required-visible/template.js.map +1 -1
- package/dist/esm/patterns/tabs/template.js +0 -1
- package/dist/esm/patterns/tabs/template.js.map +1 -1
- package/dist/esm/radio-group/template.js +0 -1
- package/dist/esm/radio-group/template.js.map +1 -1
- package/dist/esm/rich-text/editor/template.js +0 -1
- package/dist/esm/rich-text/editor/template.js.map +1 -1
- package/dist/esm/rich-text/mention-listbox/template.js +0 -2
- package/dist/esm/rich-text/mention-listbox/template.js.map +1 -1
- package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
- package/dist/esm/select/index.js.map +1 -1
- package/dist/esm/select/template.js +0 -3
- package/dist/esm/select/template.js.map +1 -1
- package/dist/esm/spinner/template.js +0 -3
- package/dist/esm/spinner/template.js.map +1 -1
- package/dist/esm/switch/template.js +0 -1
- package/dist/esm/switch/template.js.map +1 -1
- package/dist/esm/table/components/cell/template.js +0 -1
- package/dist/esm/table/components/cell/template.js.map +1 -1
- package/dist/esm/table/components/group-row/template.js +0 -3
- package/dist/esm/table/components/group-row/template.js.map +1 -1
- package/dist/esm/table/components/header/template.js +0 -1
- package/dist/esm/table/components/header/template.js.map +1 -1
- package/dist/esm/table/components/row/template.js +0 -1
- package/dist/esm/table/components/row/template.js.map +1 -1
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/models/expansion-manager.js.map +1 -1
- package/dist/esm/table/models/keyboard-navigation-manager.js +1 -2
- package/dist/esm/table/models/keyboard-navigation-manager.js.map +1 -1
- package/dist/esm/table/models/virtualizer.js.map +1 -1
- package/dist/esm/table/template.js +0 -1
- package/dist/esm/table/template.js.map +1 -1
- package/dist/esm/table/testing/table.pageobject.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/anchor/cell-view/template.js +0 -3
- package/dist/esm/table-column/anchor/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/anchor/index.js.map +1 -1
- package/dist/esm/table-column/base/cell-view/template.js +0 -1
- package/dist/esm/table-column/base/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/base/index.js.map +1 -1
- package/dist/esm/table-column/base/template.js +0 -1
- package/dist/esm/table-column/base/template.js.map +1 -1
- package/dist/esm/table-column/date-text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/date-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/date-text/index.js.map +1 -1
- package/dist/esm/table-column/duration-text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/cell-view/template.js +0 -1
- package/dist/esm/table-column/mapping/cell-view/template.js.map +1 -1
- package/dist/esm/table-column/mapping/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/mapping/group-header-view/template.js +0 -1
- package/dist/esm/table-column/mapping/group-header-view/template.js.map +1 -1
- package/dist/esm/table-column/mapping/index.js.map +1 -1
- package/dist/esm/table-column/menu-button/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/number-text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/number-text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/number-text/index.js.map +1 -1
- package/dist/esm/table-column/number-text/models/number-text-unit-format.js.map +1 -1
- package/dist/esm/table-column/number-text/template.js +0 -1
- package/dist/esm/table-column/number-text/template.js.map +1 -1
- package/dist/esm/table-column/text/cell-view/index.js.map +1 -1
- package/dist/esm/table-column/text/group-header-view/index.js.map +1 -1
- package/dist/esm/table-column/text/index.js.map +1 -1
- package/dist/esm/table-column/text-base/cell-view/template.js +0 -1
- package/dist/esm/table-column/text-base/cell-view/template.js.map +1 -1
- package/dist/esm/tabs-toolbar/template.js +0 -2
- package/dist/esm/tabs-toolbar/template.js.map +1 -1
- package/dist/esm/theme-provider/design-token-values.d.ts +257 -0
- package/dist/esm/theme-provider/design-token-values.js +164 -0
- package/dist/esm/theme-provider/design-token-values.js.map +1 -0
- package/dist/esm/theme-provider/design-tokens.js +153 -201
- package/dist/esm/theme-provider/design-tokens.js.map +1 -1
- package/dist/esm/toggle-button/template.js +0 -3
- package/dist/esm/toggle-button/template.js.map +1 -1
- package/dist/esm/tooltip/template.js +0 -1
- package/dist/esm/tooltip/template.js.map +1 -1
- package/dist/esm/tree-view/template.js +0 -1
- package/dist/esm/tree-view/template.js.map +1 -1
- package/dist/esm/utilities/style/theme.js.map +1 -1
- package/dist/esm/utilities/unit-format/default-unit-format.js.map +1 -1
- package/dist/esm/wafer-map/index.js.map +1 -1
- package/dist/esm/wafer-map/modules/create-matrix-renderer.js.map +1 -1
- package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../../../src/rich-text/models/markdown-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n schema,\n defaultMarkdownParser,\n MarkdownParser\n} from 'prosemirror-markdown';\nimport { DOMSerializer, Schema } from 'prosemirror-model';\nimport { anchorTag } from '../../anchor';\nimport type { MarkdownParserMentionConfiguration } from './markdown-parser-mention-configuration';\n\nexport interface ParseResult {\n fragment: HTMLElement | DocumentFragment;\n mentionedHrefs: string[];\n}\n\n/**\n * Provides markdown parser for rich text components\n */\nexport class RichTextMarkdownParser {\n private static readonly mentionedHrefs: Set<string> = new Set();\n private static readonly updatedSchema = this.getCustomSchemaConfiguration();\n\n private static readonly markdownParser = this.initializeMarkdownParser();\n private static readonly domSerializer = DOMSerializer.fromSchema(\n this.updatedSchema\n );\n\n /**\n * The markdown parser is static (shared across all rich text components) because it is expensive to create.\n * To configure parse calls with the mention configurations which can be unique per component instance\n * we store static configuration in this member and access it from Prosemirror callbacks.\n */\n private static mentionConfigs?: MarkdownParserMentionConfiguration[];\n\n /**\n * This function takes a markdown string, parses it using the ProseMirror MarkdownParser, serializes the parsed content into a\n * DOM structure using a DOMSerializer, and returns the serialized result.\n * If the markdown parser returns null, it will clear the viewer component by creating an empty document fragment.\n */\n public static parseMarkdownToDOM(\n value: string,\n markdownParserMentionConfig?: MarkdownParserMentionConfiguration[]\n ): ParseResult {\n try {\n RichTextMarkdownParser.setup(markdownParserMentionConfig);\n const parsedMarkdownContent = this.markdownParser.parse(value);\n if (parsedMarkdownContent === null) {\n return {\n fragment: document.createDocumentFragment(),\n mentionedHrefs: Array.from(\n RichTextMarkdownParser.mentionedHrefs\n )\n };\n }\n return {\n fragment: this.domSerializer.serializeFragment(\n parsedMarkdownContent.content\n ),\n mentionedHrefs: Array.from(\n RichTextMarkdownParser.mentionedHrefs\n )\n };\n } finally {\n RichTextMarkdownParser.cleanup();\n }\n }\n\n private static initializeMarkdownParser(): MarkdownParser {\n /**\n * It configures the tokenizer of the default Markdown parser with the 'zero' preset.\n * The 'zero' preset is a configuration with no rules enabled by default to selectively enable specific rules.\n * https://github.com/markdown-it/markdown-it/blob/2b6cac25823af011ff3bc7628bc9b06e483c5a08/lib/presets/zero.js#L1\n *\n */\n const zeroTokenizerConfiguration = defaultMarkdownParser.tokenizer.configure('zero');\n\n // The detailed information of the supported rules were provided in the below CommonMark spec document.\n // https://spec.commonmark.org/0.30/\n const supportedTokenizerRules = zeroTokenizerConfiguration.enable([\n 'emphasis',\n 'list',\n 'escape',\n 'autolink',\n 'newline'\n ]);\n\n /**\n * In order to display encoded characters, non-ASCII characters, emojis, and other special characters in their original form,\n * we bypass the default normalization of link text in markdown-it. This is done because we support only \"AutoLink\" feature in CommonMark flavor.\n * \"normalizeLinkText\" method reference in markdown-it: https://github.com/markdown-it/markdown-it/blob/2b6cac25823af011ff3bc7628bc9b06e483c5a08/lib/index.js#L67C1-L86C2\n *\n * We can use the default normalization once hyperlink support is added.\n * See: https://github.com/ni/nimble/issues/1527\n */\n supportedTokenizerRules.normalizeLinkText = url => url;\n\n return new MarkdownParser(\n this.updatedSchema,\n supportedTokenizerRules,\n defaultMarkdownParser.tokens\n );\n }\n\n private static getCustomSchemaConfiguration(): Schema {\n return new Schema({\n nodes: schema.spec.nodes,\n marks: {\n link: {\n attrs: {\n href: {},\n rel: { default: 'noopener noreferrer' },\n // Adding `class` here is a workaround to render two mentions without a whitespace as display names\n // This attribute can be removed when the below issue is resolved\n // https://github.com/ni/nimble/issues/1707\n class: { default: '' }\n },\n // Inclusive can be updated when hyperlink support added\n // See: https://github.com/ni/nimble/issues/1527\n inclusive: false,\n // Excludes can be removed/enabled when hyperlink support added\n // See: https://github.com/ni/nimble/issues/1527\n excludes: '_',\n toDOM(node) {\n const href = node.attrs.href as string;\n const currentMention = RichTextMarkdownParser.mentionConfigs?.find(\n mention => mention.isValidMentionHref(href)\n );\n const displayName = currentMention?.getDisplayName(href);\n\n if (currentMention && displayName) {\n RichTextMarkdownParser.mentionedHrefs.add(href);\n\n return [\n currentMention.viewElement,\n {\n 'mention-href': href,\n 'mention-label': displayName\n }\n ];\n }\n\n return [\n anchorTag,\n {\n /**\n * Both mention and absolute link markdown share the autolink format in CommonMark flavor.\n * Absolute links with HTTP/HTTPS will be rendered as links. Absolute links that match the\n * mention pattern will be rendered as mention view element. Absolute links without HTTP/HTTPS\n * scheme and no matching mention pattern will be rendered as plain text (anchor with no href).\n * With this, the user can click the links only when the scheme is HTTP/HTTPS\n */\n href: RichTextMarkdownParser.startsWithHttpOrHttps(\n href\n )\n ? href\n : null,\n rel: node.attrs.rel as Attr,\n // Adding `class` here is a workaround to render two mentions without a whitespace as display names\n // This attribute can be removed when the below issue is resolved\n // https://github.com/ni/nimble/issues/1707\n class: href,\n 'underline-hidden':\n RichTextMarkdownParser.startsWithHttpOrHttps(\n href\n )\n ? null\n : true\n }\n ];\n }\n },\n em: schema.spec.marks.get('em')!,\n strong: schema.spec.marks.get('strong')!\n }\n });\n }\n\n private static setup(\n markdownParserMentionConfig:\n | MarkdownParserMentionConfiguration[]\n | undefined\n ): void {\n RichTextMarkdownParser.mentionConfigs = markdownParserMentionConfig;\n RichTextMarkdownParser.mentionedHrefs.clear();\n }\n\n private static cleanup(): void {\n RichTextMarkdownParser.mentionConfigs = undefined;\n RichTextMarkdownParser.mentionedHrefs.clear();\n }\n\n private static startsWithHttpOrHttps(href: string): boolean {\n return /^https?:\\/\\//i.test(href);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"markdown-parser.js","sourceRoot":"","sources":["../../../../src/rich-text/models/markdown-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n schema,\n defaultMarkdownParser,\n MarkdownParser\n} from 'prosemirror-markdown';\nimport { DOMSerializer, Schema } from 'prosemirror-model';\nimport { anchorTag } from '../../anchor';\nimport type { MarkdownParserMentionConfiguration } from './markdown-parser-mention-configuration';\n\nexport interface ParseResult {\n fragment: HTMLElement | DocumentFragment;\n mentionedHrefs: string[];\n}\n\n/**\n * Provides markdown parser for rich text components\n */\nexport class RichTextMarkdownParser {\n private static readonly mentionedHrefs: Set<string> = new Set();\n private static readonly updatedSchema = this.getCustomSchemaConfiguration();\n\n private static readonly markdownParser = this.initializeMarkdownParser();\n private static readonly domSerializer = DOMSerializer.fromSchema(\n this.updatedSchema\n );\n\n /**\n * The markdown parser is static (shared across all rich text components) because it is expensive to create.\n * To configure parse calls with the mention configurations which can be unique per component instance\n * we store static configuration in this member and access it from Prosemirror callbacks.\n */\n private static mentionConfigs?: MarkdownParserMentionConfiguration[];\n\n /**\n * This function takes a markdown string, parses it using the ProseMirror MarkdownParser, serializes the parsed content into a\n * DOM structure using a DOMSerializer, and returns the serialized result.\n * If the markdown parser returns null, it will clear the viewer component by creating an empty document fragment.\n */\n public static parseMarkdownToDOM(\n value: string,\n markdownParserMentionConfig?: MarkdownParserMentionConfiguration[]\n ): ParseResult {\n try {\n RichTextMarkdownParser.setup(markdownParserMentionConfig);\n const parsedMarkdownContent = this.markdownParser.parse(value);\n if (parsedMarkdownContent === null) {\n return {\n fragment: document.createDocumentFragment(),\n mentionedHrefs: Array.from(\n RichTextMarkdownParser.mentionedHrefs\n )\n };\n }\n return {\n fragment: this.domSerializer.serializeFragment(\n parsedMarkdownContent.content\n ),\n mentionedHrefs: Array.from(\n RichTextMarkdownParser.mentionedHrefs\n )\n };\n } finally {\n RichTextMarkdownParser.cleanup();\n }\n }\n\n private static initializeMarkdownParser(): MarkdownParser {\n /**\n * It configures the tokenizer of the default Markdown parser with the 'zero' preset.\n * The 'zero' preset is a configuration with no rules enabled by default to selectively enable specific rules.\n * https://github.com/markdown-it/markdown-it/blob/2b6cac25823af011ff3bc7628bc9b06e483c5a08/lib/presets/zero.js#L1\n *\n */\n const zeroTokenizerConfiguration = defaultMarkdownParser.tokenizer.configure('zero');\n\n // The detailed information of the supported rules were provided in the below CommonMark spec document.\n // https://spec.commonmark.org/0.30/\n const supportedTokenizerRules = zeroTokenizerConfiguration.enable([\n 'emphasis',\n 'list',\n 'escape',\n 'autolink',\n 'newline'\n ]);\n\n /**\n * In order to display encoded characters, non-ASCII characters, emojis, and other special characters in their original form,\n * we bypass the default normalization of link text in markdown-it. This is done because we support only \"AutoLink\" feature in CommonMark flavor.\n * \"normalizeLinkText\" method reference in markdown-it: https://github.com/markdown-it/markdown-it/blob/2b6cac25823af011ff3bc7628bc9b06e483c5a08/lib/index.js#L67C1-L86C2\n *\n * We can use the default normalization once hyperlink support is added.\n * See: https://github.com/ni/nimble/issues/1527\n */\n supportedTokenizerRules.normalizeLinkText = url => url;\n\n return new MarkdownParser(\n this.updatedSchema,\n supportedTokenizerRules,\n defaultMarkdownParser.tokens\n );\n }\n\n private static getCustomSchemaConfiguration(): Schema {\n return new Schema({\n nodes: schema.spec.nodes,\n marks: {\n link: {\n attrs: {\n href: {},\n rel: { default: 'noopener noreferrer' },\n // Adding `class` here is a workaround to render two mentions without a whitespace as display names\n // This attribute can be removed when the below issue is resolved\n // https://github.com/ni/nimble/issues/1707\n class: { default: '' }\n },\n // Inclusive can be updated when hyperlink support added\n // See: https://github.com/ni/nimble/issues/1527\n inclusive: false,\n // Excludes can be removed/enabled when hyperlink support added\n // See: https://github.com/ni/nimble/issues/1527\n excludes: '_',\n toDOM(node) {\n const href = node.attrs.href as string;\n const currentMention = RichTextMarkdownParser.mentionConfigs?.find(\n mention => mention.isValidMentionHref(href)\n );\n const displayName = currentMention?.getDisplayName(href);\n\n if (currentMention && displayName) {\n RichTextMarkdownParser.mentionedHrefs.add(href);\n\n return [\n currentMention.viewElement,\n {\n 'mention-href': href,\n 'mention-label': displayName\n }\n ];\n }\n\n return [\n anchorTag,\n {\n /**\n * Both mention and absolute link markdown share the autolink format in CommonMark flavor.\n * Absolute links with HTTP/HTTPS will be rendered as links. Absolute links that match the\n * mention pattern will be rendered as mention view element. Absolute links without HTTP/HTTPS\n * scheme and no matching mention pattern will be rendered as plain text (anchor with no href).\n * With this, the user can click the links only when the scheme is HTTP/HTTPS\n */\n href: RichTextMarkdownParser.startsWithHttpOrHttps(\n href\n )\n ? href\n : null,\n rel: node.attrs.rel as Attr,\n // Adding `class` here is a workaround to render two mentions without a whitespace as display names\n // This attribute can be removed when the below issue is resolved\n // https://github.com/ni/nimble/issues/1707\n class: href,\n 'underline-hidden':\n RichTextMarkdownParser.startsWithHttpOrHttps(\n href\n )\n ? null\n : true\n }\n ];\n }\n },\n em: schema.spec.marks.get('em')!,\n strong: schema.spec.marks.get('strong')!\n }\n });\n }\n\n private static setup(\n markdownParserMentionConfig:\n | MarkdownParserMentionConfiguration[]\n | undefined\n ): void {\n RichTextMarkdownParser.mentionConfigs = markdownParserMentionConfig;\n RichTextMarkdownParser.mentionedHrefs.clear();\n }\n\n private static cleanup(): void {\n RichTextMarkdownParser.mentionConfigs = undefined;\n RichTextMarkdownParser.mentionedHrefs.clear();\n }\n\n private static startsWithHttpOrHttps(href: string): boolean {\n return /^https?:\\/\\//i.test(href);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/select/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Based on: https://github.com/microsoft/fast/blob/%40microsoft/fast-foundation_v2.49.5/packages/web-components/fast-foundation/src/select/select.ts\nimport { attr, html, observable, Observable, volatile } from '@ni/fast-element';\nimport {\n AnchoredRegion,\n DesignSystem,\n Select as FoundationSelect,\n ListboxOption,\n type SelectOptions,\n SelectPosition,\n applyMixins,\n StartEnd,\n DelegatesARIASelect\n} from '@ni/fast-foundation';\nimport {\n findLastIndex,\n keyArrowDown,\n keyArrowUp,\n keyEnd,\n keyEnter,\n keyEscape,\n keyHome,\n keySpace,\n uniqueId\n} from '@ni/fast-web-utilities';\nimport { arrowExpanderDown16X16 } from '@ni/nimble-tokens/dist/icons/js';\nimport { styles } from './styles';\nimport {\n DropdownAppearance,\n type ListOptionOwner\n} from '../patterns/dropdown/types';\nimport { errorTextTemplate } from '../patterns/error/template';\nimport { mixinErrorPattern } from '../patterns/error/types';\nimport { iconExclamationMarkTag } from '../icons/exclamation-mark';\nimport { isListOption, isListOptionGroup, template } from './template';\nimport type { ListOption } from '../list-option';\nimport { FilterMode, type SelectFilterInputEventDetail } from './types';\nimport { diacriticInsensitiveStringNormalizer } from '../utilities/models/string-normalizers';\nimport { FormAssociatedSelect } from './models/select-form-associated';\nimport type { ListOptionGroup } from '../list-option-group';\nimport { slotTextContent } from '../utilities/models/slot-text-content';\nimport { mixinRequiredVisiblePattern } from '../patterns/required-visible/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-select': Select;\n }\n}\n\n// Used in overrides of base class methods\n// eslint-disable-next-line @typescript-eslint/no-invalid-void-type\ntype BooleanOrVoid = boolean | void;\n\nconst isOptionSelectable = (el: ListOption): boolean => {\n return !el.visuallyHidden && !el.disabled && !el.hidden;\n};\n\nconst isOptionPlaceholder = (el: ListboxOption): boolean => {\n return el.disabled && el.hidden;\n};\n\nconst isOptionOrGroupVisible = (el: ListOption | ListOptionGroup): boolean => {\n return !el.visuallyHidden && !el.hidden;\n};\n\n/**\n * A nimble-styled HTML select.\n */\nexport class Select\n extends mixinErrorPattern(mixinRequiredVisiblePattern(FormAssociatedSelect))\n implements ListOptionOwner {\n @attr\n public appearance: DropdownAppearance = DropdownAppearance.underline;\n\n @attr({ attribute: 'appearance-readonly', mode: 'boolean' })\n public appearanceReadOnly = false;\n\n @attr({ attribute: 'full-bleed', mode: 'boolean' })\n public fullBleed = false;\n\n /**\n * Reflects the placement for the listbox when the select is open.\n *\n * @public\n */\n @attr({ attribute: 'position' })\n public positionAttribute?: SelectPosition;\n\n @attr({ attribute: 'filter-mode' })\n public filterMode: FilterMode = FilterMode.none;\n\n @attr({ attribute: 'clearable', mode: 'boolean' })\n public clearable = false;\n\n @attr({ attribute: 'loading-visible', mode: 'boolean' })\n public loadingVisible = false;\n\n /**\n * @internal\n */\n @observable\n public displayPlaceholder = false;\n\n /**\n * @internal\n */\n @attr({ attribute: 'open', mode: 'boolean' })\n public open = false;\n\n /**\n * Holds the current state for the calculated position of the listbox.\n *\n * @public\n */\n @observable\n public position?: SelectPosition;\n\n /**\n * The ref to the internal `.control` element.\n *\n * @internal\n */\n @observable\n public control!: HTMLElement;\n\n /**\n * Reference to the internal listbox element.\n *\n * @internal\n */\n public listbox!: HTMLDivElement;\n\n /**\n * The unique id for the internal listbox element.\n *\n * @internal\n */\n public listboxId: string = uniqueId('listbox-');\n\n /**\n * @internal\n */\n @observable\n public scrollableRegion!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public filterInput?: HTMLInputElement;\n\n /**\n * @internal\n */\n @observable\n public anchoredRegion!: AnchoredRegion;\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n /**\n * @internal\n */\n @observable\n public filteredOptions: ListboxOption[] = [];\n\n /**\n * @internal\n */\n @observable\n public filter = '';\n\n /**\n * The space available in the viewport for the listbox when opened.\n *\n * @internal\n */\n @observable\n public availableViewportHeight = 0;\n\n /**\n * The component is collapsible when in single-selection mode with no size attribute.\n *\n * @internal\n */\n @volatile\n public get collapsible(): boolean {\n return !(this.multiple || typeof this.size === 'number');\n }\n\n /** @internal */\n public labelSlot!: HTMLSlotElement;\n\n /** @internal */\n @volatile\n public get labelContent(): string {\n if (!this.$fastController.isConnected) {\n return '';\n }\n\n return slotTextContent(this.labelSlot);\n }\n\n private _value = '';\n private forcedPosition = false;\n private openActiveIndex?: number;\n private readonly selectedOptionObserver? = new MutationObserver(() => {\n this.updateDisplayValue();\n });\n\n /**\n * @internal\n */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.forcedPosition = !!this.positionAttribute;\n if (this.open) {\n this.initializeOpenState();\n }\n\n this.observeSelectedOptionTextContent();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.selectedOptionObserver?.disconnect();\n }\n\n public override get value(): string {\n Observable.track(this, 'value');\n return this._value;\n }\n\n public override set value(next: string) {\n const prev = this._value;\n let newValue = next;\n\n if (this.options?.length) {\n const newValueIndex = this.options.findIndex(\n el => el.value === newValue\n );\n const prevSelectedValue = this.options[this.selectedIndex]?.value ?? null;\n const nextSelectedValue = this.options[newValueIndex]?.value ?? null;\n\n if (\n newValueIndex === -1\n || prevSelectedValue !== nextSelectedValue\n ) {\n newValue = '';\n this.selectedIndex = newValueIndex;\n }\n\n newValue = this.firstSelectedOption?.value ?? newValue;\n }\n\n if (prev !== newValue) {\n this._value = newValue;\n super.valueChanged(prev, newValue);\n Observable.notify(this, 'value');\n this.updateDisplayValue();\n }\n }\n\n /**\n * @internal\n */\n @volatile\n public get displayValue(): string {\n Observable.track(this, 'displayValue');\n return this.firstSelectedOption?.text ?? '';\n }\n\n /**\n * @internal\n */\n public anchoredRegionChanged(\n _prev: AnchoredRegion | undefined,\n _next: AnchoredRegion | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public controlChanged(\n _prev: HTMLElement | undefined,\n _next: HTMLElement | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public override slottedOptionsChanged(\n prev: Element[] | undefined,\n next: Element[] | undefined\n ): void {\n const value = this.value;\n this.options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'value');\n notifier.unsubscribe(this, 'hidden');\n notifier.unsubscribe(this, 'disabled');\n });\n\n prev?.filter<ListOptionGroup>(isListOptionGroup).forEach(el => {\n const notifier = Observable.getNotifier(el);\n notifier.unsubscribe(this, 'hidden');\n notifier.unsubscribe(this, 'visuallyHidden');\n notifier.unsubscribe(this, 'listOptions');\n });\n const options = this.getSlottedOptions(next);\n super.slottedOptionsChanged(prev, options);\n\n options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.subscribe(this, 'value');\n notifier.subscribe(this, 'hidden');\n notifier.subscribe(this, 'disabled');\n });\n next?.filter<ListOptionGroup>(isListOptionGroup).forEach(el => {\n this.updateAdjacentSeparatorState(el);\n const notifier = Observable.getNotifier(el);\n notifier.subscribe(this, 'hidden');\n notifier.subscribe(this, 'visuallyHidden');\n notifier.subscribe(this, 'listOptions');\n });\n this.setProxyOptions();\n this.updateValue();\n // We need to force an update to the filteredOptions observable\n // (by calling 'filterOptions()) so that the template correctly updates.\n this.filterOptions();\n if (value) {\n this.value = value;\n }\n }\n\n /**\n * @internal\n */\n public override clickHandler(e: MouseEvent): BooleanOrVoid {\n // do nothing if the select is disabled\n if (this.disabled) {\n return;\n }\n\n let optionClicked = false;\n if (this.open) {\n const captured = (e.target as HTMLElement).closest<ListOption>(\n 'option,[role=option]'\n );\n optionClicked = captured !== null;\n\n if (captured?.disabled) {\n return;\n }\n }\n\n const previousSelectedIndex = this.selectedIndex;\n super.clickHandler(e);\n\n if (\n this.open\n && this.selectedIndex !== previousSelectedIndex\n && optionClicked\n ) {\n this.updateValue(true);\n }\n this.open = this.collapsible && !this.open;\n }\n\n /**\n * Updates the value when an option's value changes.\n *\n * @param source - the source object\n * @param propertyName - the property to evaluate\n *\n * @internal\n * @override\n */\n public override handleChange(source: unknown, propertyName: string): void {\n // don't call super.handleChange so hidden options can be selected programmatically\n const sourceElement = source as Element;\n switch (propertyName) {\n case 'value': {\n this.updateValue();\n break;\n }\n case 'selected': {\n if (isListOption(sourceElement) && sourceElement.selected) {\n this.selectedIndex = this.options.indexOf(sourceElement);\n } else {\n this.clearSelect();\n }\n break;\n }\n case 'hidden': {\n if (isListOption(sourceElement)) {\n sourceElement.visuallyHidden = sourceElement.hidden;\n this.updateAdjacentSeparatorState(sourceElement);\n } else if (isListOptionGroup(sourceElement)) {\n sourceElement.listOptions.forEach(e => {\n e.visuallyHidden = sourceElement.hidden;\n });\n this.updateAdjacentSeparatorState(sourceElement);\n }\n this.filterOptions();\n this.updateDisplayValue();\n break;\n }\n case 'visuallyHidden': {\n if (\n isListOptionGroup(sourceElement)\n || isListOption(sourceElement)\n ) {\n this.updateAdjacentSeparatorState(sourceElement);\n }\n break;\n }\n case 'disabled': {\n this.updateDisplayValue();\n break;\n }\n case 'listOptions': {\n // force refresh of slotted options for groups\n this.slottedOptionsChanged(\n this.slottedOptions,\n this.slottedOptions\n );\n break;\n }\n default:\n break;\n }\n }\n\n /**\n * Prevents focus when size is set and a scrollbar is clicked.\n *\n * @param e - the mouse event object\n *\n * @override\n * @internal\n */\n public override mousedownHandler(e: MouseEvent): BooleanOrVoid {\n if (e.offsetX >= 0 && e.offsetX <= this.listbox?.scrollWidth) {\n return super.mousedownHandler(e);\n }\n\n return this.collapsible;\n }\n\n /**\n * @internal\n */\n public regionLoadedHandler(): void {\n this.focusAndScrollOptionIntoView();\n }\n\n /**\n * Sets the multiple property on the proxy element.\n *\n * @param prev - the previous multiple value\n * @param next - the current multiple value\n */\n public override multipleChanged(\n prev: boolean | undefined,\n next: boolean\n ): void {\n super.multipleChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.multiple = next;\n }\n }\n\n /**\n * @internal\n */\n public ignoreClickHandler(e: MouseEvent): void {\n e.stopPropagation();\n }\n\n /**\n * @internal\n */\n public clearClickHandler(e: MouseEvent): void {\n this.open = false;\n this.clearSelect();\n this.updateValue(true);\n e.stopPropagation();\n }\n\n /**\n * @internal\n */\n public updateDisplayValue(): void {\n const placeholderOption = this.getPlaceholderOption();\n if (\n placeholderOption\n && this.firstSelectedOption === placeholderOption\n ) {\n this.displayPlaceholder = true;\n } else {\n this.displayPlaceholder = false;\n }\n\n Observable.notify(this, 'displayValue');\n }\n\n /**\n * Handle content changes on the control input.\n *\n * @param e - the input event\n * @internal\n */\n public inputHandler(e: InputEvent): boolean {\n this.filter = this.filterInput?.value ?? '';\n if (this.filterMode === FilterMode.standard) {\n this.filterOptions();\n\n const enabledOptions = this.filteredOptions.filter(\n o => !o.disabled\n );\n let activeOptionIndex = this.filter !== ''\n ? (this.openActiveIndex ?? this.selectedIndex)\n : this.selectedIndex;\n\n if (\n enabledOptions.length > 0\n && !enabledOptions.find(o => o === this.options[activeOptionIndex])\n ) {\n activeOptionIndex = this.options.indexOf(enabledOptions[0]!);\n } else if (enabledOptions.length === 0) {\n activeOptionIndex = -1;\n }\n this.setActiveOption(activeOptionIndex);\n }\n\n if (this.filterMode !== FilterMode.none) {\n this.emitFilterInputEvent();\n }\n\n if (e.inputType.includes('deleteContent') || !this.filter.length) {\n return true;\n }\n\n e.stopPropagation();\n return true;\n }\n\n /**\n * @internal\n */\n public override focusoutHandler(e: FocusEvent): BooleanOrVoid {\n super.focusoutHandler(e);\n if (!this.open) {\n return true;\n }\n\n this.open = false;\n const focusTarget = e.relatedTarget as HTMLElement;\n if (this.isSameNode(focusTarget)) {\n this.focus();\n return true;\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public override keydownHandler(e: KeyboardEvent): BooleanOrVoid {\n const initialSelectedIndex = this.selectedIndex;\n const key = e.key;\n if (e.ctrlKey || e.shiftKey) {\n return true;\n }\n\n if (key !== keyArrowDown && key !== keyArrowUp) {\n super.keydownHandler(e);\n }\n\n let currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n let commitValueThenClose = false;\n switch (key) {\n case keyArrowDown: {\n const selectedOption = this.options[this.selectedIndex];\n if (\n this.open\n && isListOption(selectedOption)\n && !isOptionOrGroupVisible(selectedOption)\n ) {\n if (this.openActiveIndex === this.selectedIndex) {\n this.selectFirstOption();\n } else {\n this.selectNextOption();\n }\n } else {\n super.keydownHandler(e);\n }\n\n // update currentActiveIndex again as dependent state may have changed\n currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n break;\n }\n case keyArrowUp: {\n const selectedOption = this.options[this.selectedIndex];\n if (\n this.open\n && isListOption(selectedOption)\n && !isOptionOrGroupVisible(selectedOption)\n ) {\n if (this.openActiveIndex === this.selectedIndex) {\n this.selectLastOption();\n } else {\n this.selectPreviousOption();\n }\n } else {\n super.keydownHandler(e);\n }\n\n // update currentActiveIndex again as dependent state may have changed\n currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n break;\n }\n case keySpace: {\n // when dropdown is open allow user to enter a space for filter text\n if (this.open && this.filterMode !== FilterMode.none) {\n break;\n }\n\n e.preventDefault();\n if (this.collapsible && this.typeAheadExpired) {\n this.open = !this.open;\n }\n if (!this.open) {\n this.focus();\n }\n break;\n }\n case keyHome:\n case keyEnd: {\n e.preventDefault();\n break;\n }\n case keyEnter: {\n e.preventDefault();\n if (\n this.filteredOptions.length === 0\n || this.filteredOptions.every(o => o.disabled)\n ) {\n return false;\n }\n if (this.open) {\n commitValueThenClose = true;\n } else {\n this.open = true;\n }\n\n if (commitValueThenClose) {\n this.focus();\n }\n break;\n }\n case keyEscape: {\n if (!this.open) {\n if (this.clearable) {\n this.clearSelect();\n this.updateValue(true);\n return true;\n }\n\n break;\n }\n\n if (this.collapsible && this.open) {\n e.preventDefault();\n this.open = false;\n }\n\n currentActiveIndex = this.selectedIndex;\n this.focus();\n break;\n }\n\n default: {\n break;\n }\n }\n\n if (!this.open || commitValueThenClose) {\n if (this.selectedIndex !== currentActiveIndex) {\n this.selectedIndex = currentActiveIndex;\n }\n\n if (initialSelectedIndex !== this.selectedIndex) {\n this.updateValue(true);\n }\n }\n\n if (commitValueThenClose) {\n this.open = false;\n }\n\n return !(key === keyArrowDown || key === keyArrowUp);\n }\n\n /**\n * Updates the proxy value when the selected index changes.\n *\n * @param prev - the previous selected index\n * @param next - the next selected index\n *\n * @internal\n */\n public override selectedIndexChanged(\n _: number | undefined,\n __: number\n ): void {\n // Don't call super.selectedIndexChanged as this will disallow disabled options\n // from being valid initial selected values. Our setDefaultSelectedOption\n // implementation handles skipping non-selected disabled options for the initial\n // selected value.\n this.setSelectedOptions();\n if (this.open) {\n this.setActiveOption(this.selectedIndex);\n }\n this.updateValue();\n }\n\n /**\n * @internal\n * Fork of Listbox implementation, so that the selectedIndex is not changed while the dropdown\n * is open.\n */\n public override typeaheadBufferChanged(_: string, __: string): void {\n if (this.$fastController.isConnected) {\n const typeaheadMatches = this.getTypeaheadMatches();\n\n if (typeaheadMatches.length) {\n const activeOptionIndex = this.options.indexOf(\n typeaheadMatches[0] as ListOption\n );\n if (!(this.open && this.filterMode !== FilterMode.none)) {\n this.setActiveOption(activeOptionIndex);\n }\n }\n\n this.typeaheadExpired = false;\n }\n }\n\n /**\n * Synchronize the `aria-disabled` property when the `disabled` property changes.\n *\n * @param prev - The previous disabled value\n * @param next - The next disabled value\n *\n * @internal\n */\n public override disabledChanged(prev: boolean, next: boolean): void {\n if (super.disabledChanged) {\n super.disabledChanged(prev, next);\n }\n this.ariaDisabled = this.disabled ? 'true' : 'false';\n }\n\n /**\n * Reset the element to its first selectable option when its parent form is reset.\n *\n * @internal\n */\n public override formResetCallback(): void {\n this.setProxyOptions();\n // Call the base class's implementation setDefaultSelectedOption instead of the select's\n // override, in order to reset the selectedIndex without using the value property.\n super.setDefaultSelectedOption();\n if (this.selectedIndex === -1) {\n this.selectedIndex = 0;\n }\n }\n\n /**\n * @internal\n */\n public override selectNextOption(): void {\n // don't call super.selectNextOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex + 1; i < this.options.length; i++) {\n const listOption = this.options[i]!;\n if (isListOption(listOption) && isOptionSelectable(listOption)) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectPreviousOption(): void {\n // don't call super.selectPreviousOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex - 1; i >= 0; i--) {\n const listOption = this.options[i]!;\n if (isListOption(listOption) && isOptionSelectable(listOption)) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectFirstOption(): void {\n const newActiveOptionIndex = this.options.findIndex(\n o => isListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public override selectLastOption(): void {\n const newActiveOptionIndex = findLastIndex(\n this.options,\n o => isListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public registerOption(option: ListOption): void {\n if (this.options.includes(option)) {\n return;\n }\n\n // Adding an option to the end, ultimately, isn't the correct\n // thing to do, as this will mean the option's index in the options,\n // at least temporarily, does not match the DOM order. However, it\n // is expected that a successive run of `slottedOptionsChanged` will\n // correct this order issue. See 'https://github.com/ni/nimble/issues/1915'\n // for more info.\n this.options.push(option);\n }\n\n protected override setSelectedOptions(): void {\n // Prevents parent classes from resetting selectedIndex to a positive\n // value while filtering, which can result in a disabled option being\n // selected.\n if (this.open && this.selectedIndex === -1) {\n return;\n }\n super.setSelectedOptions();\n }\n\n protected override focusAndScrollOptionIntoView(): void {\n if (this.open) {\n super.focusAndScrollOptionIntoView();\n window.requestAnimationFrame(() => {\n this.filterInput?.focus();\n });\n }\n }\n\n protected override getTypeaheadMatches(): ListboxOption[] {\n const matches = super.getTypeaheadMatches();\n // Don't allow placeholder to be matched\n return matches.filter(o => !o.hidden && !o.disabled);\n }\n\n protected positionChanged(\n _: SelectPosition | undefined,\n next: SelectPosition | undefined\n ): void {\n this.positionAttribute = next;\n this.setPositioning();\n }\n\n /**\n * Updates the proxy's size property when the size attribute changes.\n *\n * @param prev - the previous size\n * @param next - the current size\n *\n * @override\n * @internal\n */\n protected override sizeChanged(\n prev: number | undefined,\n next: number\n ): void {\n super.sizeChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.size = next;\n }\n }\n\n protected openChanged(): void {\n if (!this.collapsible) {\n return;\n }\n\n if (this.open) {\n this.initializeOpenState();\n return;\n }\n\n const activeOption = this.options[this.openActiveIndex ?? this.selectedIndex];\n if (isListOption(activeOption)) {\n activeOption.activeOption = false;\n }\n this.openActiveIndex = undefined;\n this.filter = '';\n if (this.filterInput) {\n this.filterInput.value = '';\n }\n\n if (this.filterMode !== FilterMode.none) {\n this.emitFilterInputEvent();\n }\n this.ariaControls = '';\n this.ariaExpanded = 'false';\n }\n\n /**\n * Updates the selectedness of each option when the list of selected options changes.\n *\n * @param prev - the previous list of selected options\n * @param next - the current list of selected options\n *\n * @override\n * @internal\n */\n protected override selectedOptionsChanged(\n _prev: ListboxOption[] | undefined,\n next: ListboxOption[]\n ): void {\n // don't call super.selectedOptionsChanged so we don't filter out hidden elements\n // when updating 'selected' state (copied relevant super implementation)\n this.options?.forEach((o, i) => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'selected');\n o.selected = next.includes(o);\n notifier.subscribe(this, 'selected');\n const proxyOption = this.proxy?.options.item(i);\n if (proxyOption) {\n proxyOption.selected = o.selected;\n }\n });\n }\n\n /**\n * Sets the selected index to match the first option with the selected attribute, or\n * the first selectable option.\n *\n * @override\n * @internal\n */\n protected override setDefaultSelectedOption(): void {\n const options: ListboxOption[] = this.options\n ?? Array.from(this.children).filter(o => isListOption(o));\n\n const optionIsSelected = (option: ListboxOption): boolean => {\n return option.hasAttribute('selected') || option.selected;\n };\n let selectedIndex = -1;\n let firstValidOptionIndex = -1;\n let placeholderIndex = -1;\n for (let i = 0; i < options?.length; i++) {\n const option = options[i]!;\n if (optionIsSelected(option) || option.value === this.value) {\n selectedIndex = i;\n break;\n } else if (placeholderIndex === -1 && isOptionPlaceholder(option)) {\n placeholderIndex = i;\n } else if (\n firstValidOptionIndex === -1\n && isOptionSelectable(option as ListOption)\n ) {\n firstValidOptionIndex = i;\n }\n }\n\n if (selectedIndex !== -1) {\n this.selectedIndex = selectedIndex;\n } else if (placeholderIndex !== -1) {\n this.selectedIndex = placeholderIndex;\n } else if (firstValidOptionIndex !== -1) {\n this.selectedIndex = firstValidOptionIndex;\n } else {\n this.selectedIndex = 0;\n }\n }\n\n private getSlottedOptions(\n slottedElements: Element[] | undefined\n ): ListboxOption[] {\n const options: ListOption[] = [];\n slottedElements?.forEach(el => {\n if (isListOption(el)) {\n options.push(el);\n } else if (isListOptionGroup(el)) {\n options.push(...this.getGroupOptions(el));\n }\n });\n\n return options;\n }\n\n private setActiveOption(newActiveIndex: number): void {\n const activeOption = this.options[newActiveIndex];\n if (this.open) {\n if (isListOption(activeOption)) {\n activeOption.activeOption = true;\n }\n\n const previousActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n const previousActiveOption = this.options[previousActiveIndex];\n if (\n previousActiveIndex !== newActiveIndex\n && isListOption(previousActiveOption)\n ) {\n previousActiveOption.activeOption = false;\n }\n\n this.openActiveIndex = newActiveIndex;\n this.focusAndScrollActiveOptionIntoView();\n } else {\n this.selectedIndex = newActiveIndex;\n }\n\n this.ariaActiveDescendant = activeOption?.id ?? '';\n }\n\n private focusAndScrollActiveOptionIntoView(): void {\n const optionToFocus = this.options[this.openActiveIndex ?? this.selectedIndex];\n // Copied from FAST: To ensure that the browser handles both `focus()` and\n // `scrollIntoView()`, the timing here needs to guarantee that they happen on\n // different frames. Since this function is typically called from the `openChanged`\n // observer, `DOM.queueUpdate` causes the calls to be grouped into the same frame.\n // To prevent this, `requestAnimationFrame` is used instead of `DOM.queueUpdate`.\n if (optionToFocus !== undefined && this.contains(optionToFocus)) {\n optionToFocus.focus();\n requestAnimationFrame(() => {\n optionToFocus.scrollIntoView({ block: 'nearest' });\n });\n }\n }\n\n private getPlaceholderOption(): ListOption | undefined {\n return this.options.find(o => o.hidden && o.disabled) as ListOption;\n }\n\n private setPositioning(): void {\n if (!this.$fastController.isConnected) {\n // Don't call setPositioning() until we're connected,\n // since this.forcedPosition isn't initialized yet.\n return;\n }\n const currentBox = this.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const availableBottom = viewportHeight - currentBox.bottom;\n\n if (this.forcedPosition) {\n this.position = this.positionAttribute;\n } else if (currentBox.top > availableBottom) {\n this.position = SelectPosition.above;\n } else {\n this.position = SelectPosition.below;\n }\n\n this.positionAttribute = this.forcedPosition\n ? this.positionAttribute\n : this.position;\n\n this.availableViewportHeight = this.position === SelectPosition.above\n ? Math.trunc(currentBox.top)\n : Math.trunc(availableBottom);\n }\n\n private updateAdjacentSeparatorState(\n element: ListOptionGroup | ListOption\n ): void {\n const previousElement = this.getPreviousVisibleOptionOrGroup(element);\n const nextElement = this.getNextVisibleOptionOrGroup(element);\n\n if (isOptionOrGroupVisible(element)) {\n const topSeparatorVisible = isListOption(previousElement);\n this.setTopSeparatorState(element, topSeparatorVisible);\n const bottomSeparatorVisible = nextElement !== null;\n this.setBottomSeparatorState(element, bottomSeparatorVisible);\n this.setBottomSeparatorState(previousElement, true);\n } else {\n const nextTopSeparatorVisible = isListOption(previousElement);\n this.setTopSeparatorState(nextElement, nextTopSeparatorVisible);\n const previousBottomSeparatorVisible = nextElement !== null;\n this.setBottomSeparatorState(\n previousElement,\n previousBottomSeparatorVisible\n );\n }\n }\n\n private setTopSeparatorState(\n element: ListOptionGroup | ListOption | null,\n visible: boolean\n ): void {\n if (isListOptionGroup(element)) {\n element.topSeparatorVisible = visible;\n }\n }\n\n private setBottomSeparatorState(\n element: ListOptionGroup | ListOption | null,\n visible: boolean\n ): void {\n if (isListOptionGroup(element)) {\n element.bottomSeparatorVisible = visible;\n }\n }\n\n private getPreviousVisibleOptionOrGroup(\n element: HTMLElement\n ): ListOption | ListOptionGroup | null {\n let previousElement = element.previousElementSibling;\n while (previousElement) {\n if (\n (isListOption(previousElement)\n || isListOptionGroup(previousElement))\n && isOptionOrGroupVisible(previousElement)\n ) {\n return previousElement;\n }\n previousElement = previousElement.previousElementSibling;\n }\n return null;\n }\n\n private getNextVisibleOptionOrGroup(\n element: HTMLElement\n ): ListOption | ListOptionGroup | null {\n let nextElement = element.nextElementSibling;\n while (nextElement) {\n if (\n (isListOption(nextElement) || isListOptionGroup(nextElement))\n && isOptionOrGroupVisible(nextElement)\n ) {\n return nextElement;\n }\n nextElement = nextElement.nextElementSibling;\n }\n return null;\n }\n\n private isOptionHiddenOrFilteredOut(option: ListOption): boolean {\n if (option.hidden) {\n return true;\n }\n return this.filterMode === FilterMode.standard\n ? !this.filterMatchesText(option.text)\n : false;\n }\n\n private filterMatchesText(text: string): boolean {\n const filter = this.filter.toLowerCase();\n const normalizedFilter = diacriticInsensitiveStringNormalizer(filter);\n return diacriticInsensitiveStringNormalizer(text).includes(\n normalizedFilter\n );\n }\n\n /**\n * Filter available options by text value.\n *\n * @public\n */\n private filterOptions(): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n const filteredOptions: ListOption[] = [];\n for (const element of this.slottedOptions) {\n if (isListOptionGroup(element)) {\n if (element.hidden) {\n continue; // no need to process hidden groups\n }\n const groupOptions = this.getGroupOptions(element);\n const groupMatchesFilter = this.filterMatchesText(\n element.labelContent\n );\n groupOptions.forEach(option => {\n option.visuallyHidden = groupMatchesFilter\n ? false\n : this.isOptionHiddenOrFilteredOut(option);\n if (!option.visuallyHidden) {\n filteredOptions.push(option);\n }\n });\n } else if (isListOption(element)) {\n element.visuallyHidden = this.isOptionHiddenOrFilteredOut(element);\n if (!element.visuallyHidden) {\n filteredOptions.push(element);\n }\n }\n }\n\n this.filteredOptions = filteredOptions;\n }\n\n private getGroupOptions(group: ListOptionGroup): ListOption[] {\n return Array.from(group.children)\n .filter(el => isListOption(el))\n .map(el => {\n if (group.hidden && isListOption(el)) {\n el.visuallyHidden = true;\n }\n\n return el;\n }) as ListOption[];\n }\n\n /**\n * Sets the value and display value to match the first selected option.\n *\n * @param shouldEmit - if true, the input and change events will be emitted\n *\n * @internal\n */\n private updateValue(shouldEmit?: boolean): void {\n if (this.$fastController.isConnected) {\n this.value = this.firstSelectedOption?.value ?? '';\n this.observeSelectedOptionTextContent();\n }\n\n if (shouldEmit) {\n this.$emit('input');\n this.$emit('change', this, {\n bubbles: true,\n composed: undefined\n });\n }\n }\n\n private clearSelect(): void {\n const placeholder = this.getPlaceholderOption();\n this.selectedIndex = placeholder\n ? this.options.indexOf(placeholder)\n : -1;\n }\n\n /**\n * Resets and fills the proxy to match the component's options.\n *\n * @internal\n */\n private setProxyOptions(): void {\n if (this.proxy instanceof HTMLSelectElement && this.options) {\n this.proxy.options.length = 0;\n this.options.forEach(option => {\n const proxyOption = option.proxy\n || (option instanceof HTMLOptionElement\n ? option.cloneNode()\n : null);\n\n if (proxyOption) {\n this.proxy.options.add(proxyOption);\n }\n });\n }\n }\n\n private filterChanged(): void {\n this.filterOptions();\n }\n\n private emitFilterInputEvent(): void {\n const eventDetail: SelectFilterInputEventDetail = {\n filterText: this.filter\n };\n\n this.$emit('filter-input', eventDetail, { bubbles: true });\n }\n\n private initializeOpenState(): void {\n this.setActiveOption(this.selectedIndex);\n this.ariaControls = this.listboxId;\n this.ariaExpanded = 'true';\n\n this.setPositioning();\n this.focusAndScrollOptionIntoView();\n }\n\n private observeSelectedOptionTextContent(): void {\n this.selectedOptionObserver?.disconnect();\n\n if (this.selectedIndex === -1) {\n return;\n }\n\n const selectedOption = this.firstSelectedOption;\n if (selectedOption) {\n this.selectedOptionObserver?.observe(selectedOption, {\n characterData: true,\n subtree: true,\n childList: true\n });\n }\n }\n}\n\nconst nimbleSelect = Select.compose<SelectOptions>({\n baseName: 'select',\n baseClass: FoundationSelect,\n template,\n styles,\n indicator: arrowExpanderDown16X16.data,\n end: html<Select>`\n <${iconExclamationMarkTag}\n severity=\"error\"\n class=\"error-icon\"\n ></${iconExclamationMarkTag}>\n ${errorTextTemplate}\n `\n});\n\napplyMixins(Select, StartEnd, DelegatesARIASelect);\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleSelect());\nexport const selectTag = 'nimble-select';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/select/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Based on: https://github.com/microsoft/fast/blob/%40microsoft/fast-foundation_v2.49.5/packages/web-components/fast-foundation/src/select/select.ts\nimport { attr, html, observable, Observable, volatile } from '@ni/fast-element';\nimport {\n AnchoredRegion,\n DesignSystem,\n Select as FoundationSelect,\n ListboxOption,\n type SelectOptions,\n SelectPosition,\n applyMixins,\n StartEnd,\n DelegatesARIASelect\n} from '@ni/fast-foundation';\nimport {\n findLastIndex,\n keyArrowDown,\n keyArrowUp,\n keyEnd,\n keyEnter,\n keyEscape,\n keyHome,\n keySpace,\n uniqueId\n} from '@ni/fast-web-utilities';\nimport { arrowExpanderDown16X16 } from '@ni/nimble-tokens/dist/icons/js';\nimport { styles } from './styles';\nimport {\n DropdownAppearance,\n type ListOptionOwner\n} from '../patterns/dropdown/types';\nimport { errorTextTemplate } from '../patterns/error/template';\nimport { mixinErrorPattern } from '../patterns/error/types';\nimport { iconExclamationMarkTag } from '../icons/exclamation-mark';\nimport { isListOption, isListOptionGroup, template } from './template';\nimport type { ListOption } from '../list-option';\nimport { FilterMode, type SelectFilterInputEventDetail } from './types';\nimport { diacriticInsensitiveStringNormalizer } from '../utilities/models/string-normalizers';\nimport { FormAssociatedSelect } from './models/select-form-associated';\nimport type { ListOptionGroup } from '../list-option-group';\nimport { slotTextContent } from '../utilities/models/slot-text-content';\nimport { mixinRequiredVisiblePattern } from '../patterns/required-visible/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-select': Select;\n }\n}\n\n// Used in overrides of base class methods\n// eslint-disable-next-line @typescript-eslint/no-invalid-void-type\ntype BooleanOrVoid = boolean | void;\n\nconst isOptionSelectable = (el: ListOption): boolean => {\n return !el.visuallyHidden && !el.disabled && !el.hidden;\n};\n\nconst isOptionPlaceholder = (el: ListboxOption): boolean => {\n return el.disabled && el.hidden;\n};\n\nconst isOptionOrGroupVisible = (el: ListOption | ListOptionGroup): boolean => {\n return !el.visuallyHidden && !el.hidden;\n};\n\n/**\n * A nimble-styled HTML select.\n */\nexport class Select\n extends mixinErrorPattern(mixinRequiredVisiblePattern(FormAssociatedSelect))\n implements ListOptionOwner {\n @attr\n public appearance: DropdownAppearance = DropdownAppearance.underline;\n\n @attr({ attribute: 'appearance-readonly', mode: 'boolean' })\n public appearanceReadOnly = false;\n\n @attr({ attribute: 'full-bleed', mode: 'boolean' })\n public fullBleed = false;\n\n /**\n * Reflects the placement for the listbox when the select is open.\n *\n * @public\n */\n @attr({ attribute: 'position' })\n public positionAttribute?: SelectPosition;\n\n @attr({ attribute: 'filter-mode' })\n public filterMode: FilterMode = FilterMode.none;\n\n @attr({ attribute: 'clearable', mode: 'boolean' })\n public clearable = false;\n\n @attr({ attribute: 'loading-visible', mode: 'boolean' })\n public loadingVisible = false;\n\n /**\n * @internal\n */\n @observable\n public displayPlaceholder = false;\n\n /**\n * @internal\n */\n @attr({ attribute: 'open', mode: 'boolean' })\n public open = false;\n\n /**\n * Holds the current state for the calculated position of the listbox.\n *\n * @public\n */\n @observable\n public position?: SelectPosition;\n\n /**\n * The ref to the internal `.control` element.\n *\n * @internal\n */\n @observable\n public control!: HTMLElement;\n\n /**\n * Reference to the internal listbox element.\n *\n * @internal\n */\n public listbox!: HTMLDivElement;\n\n /**\n * The unique id for the internal listbox element.\n *\n * @internal\n */\n public listboxId: string = uniqueId('listbox-');\n\n /**\n * @internal\n */\n @observable\n public scrollableRegion!: HTMLElement;\n\n /**\n * @internal\n */\n @observable\n public filterInput?: HTMLInputElement;\n\n /**\n * @internal\n */\n @observable\n public anchoredRegion!: AnchoredRegion;\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n /**\n * @internal\n */\n @observable\n public filteredOptions: ListboxOption[] = [];\n\n /**\n * @internal\n */\n @observable\n public filter = '';\n\n /**\n * The space available in the viewport for the listbox when opened.\n *\n * @internal\n */\n @observable\n public availableViewportHeight = 0;\n\n /**\n * The component is collapsible when in single-selection mode with no size attribute.\n *\n * @internal\n */\n @volatile\n public get collapsible(): boolean {\n return !(this.multiple || typeof this.size === 'number');\n }\n\n /** @internal */\n public labelSlot!: HTMLSlotElement;\n\n /** @internal */\n @volatile\n public get labelContent(): string {\n if (!this.$fastController.isConnected) {\n return '';\n }\n\n return slotTextContent(this.labelSlot);\n }\n\n private _value = '';\n private forcedPosition = false;\n private openActiveIndex?: number;\n private readonly selectedOptionObserver? = new MutationObserver(() => {\n this.updateDisplayValue();\n });\n\n /**\n * @internal\n */\n public override connectedCallback(): void {\n super.connectedCallback();\n this.forcedPosition = !!this.positionAttribute;\n if (this.open) {\n this.initializeOpenState();\n }\n\n this.observeSelectedOptionTextContent();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.selectedOptionObserver?.disconnect();\n }\n\n public override get value(): string {\n Observable.track(this, 'value');\n return this._value;\n }\n\n public override set value(next: string) {\n const prev = this._value;\n let newValue = next;\n\n if (this.options?.length) {\n const newValueIndex = this.options.findIndex(\n el => el.value === newValue\n );\n const prevSelectedValue = this.options[this.selectedIndex]?.value ?? null;\n const nextSelectedValue = this.options[newValueIndex]?.value ?? null;\n\n if (\n newValueIndex === -1\n || prevSelectedValue !== nextSelectedValue\n ) {\n newValue = '';\n this.selectedIndex = newValueIndex;\n }\n\n newValue = this.firstSelectedOption?.value ?? newValue;\n }\n\n if (prev !== newValue) {\n this._value = newValue;\n super.valueChanged(prev, newValue);\n Observable.notify(this, 'value');\n this.updateDisplayValue();\n }\n }\n\n /**\n * @internal\n */\n @volatile\n public get displayValue(): string {\n Observable.track(this, 'displayValue');\n return this.firstSelectedOption?.text ?? '';\n }\n\n /**\n * @internal\n */\n public anchoredRegionChanged(\n _prev: AnchoredRegion | undefined,\n _next: AnchoredRegion | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public controlChanged(\n _prev: HTMLElement | undefined,\n _next: HTMLElement | undefined\n ): void {\n if (this.anchoredRegion && this.control) {\n this.anchoredRegion.anchorElement = this.control;\n }\n }\n\n /**\n * @internal\n */\n public override slottedOptionsChanged(\n prev: Element[] | undefined,\n next: Element[] | undefined\n ): void {\n const value = this.value;\n this.options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'value');\n notifier.unsubscribe(this, 'hidden');\n notifier.unsubscribe(this, 'disabled');\n });\n\n prev?.filter<ListOptionGroup>(isListOptionGroup).forEach(el => {\n const notifier = Observable.getNotifier(el);\n notifier.unsubscribe(this, 'hidden');\n notifier.unsubscribe(this, 'visuallyHidden');\n notifier.unsubscribe(this, 'listOptions');\n });\n const options = this.getSlottedOptions(next);\n super.slottedOptionsChanged(prev, options);\n\n options.forEach(o => {\n const notifier = Observable.getNotifier(o);\n notifier.subscribe(this, 'value');\n notifier.subscribe(this, 'hidden');\n notifier.subscribe(this, 'disabled');\n });\n next?.filter<ListOptionGroup>(isListOptionGroup).forEach(el => {\n this.updateAdjacentSeparatorState(el);\n const notifier = Observable.getNotifier(el);\n notifier.subscribe(this, 'hidden');\n notifier.subscribe(this, 'visuallyHidden');\n notifier.subscribe(this, 'listOptions');\n });\n this.setProxyOptions();\n this.updateValue();\n // We need to force an update to the filteredOptions observable\n // (by calling 'filterOptions()) so that the template correctly updates.\n this.filterOptions();\n if (value) {\n this.value = value;\n }\n }\n\n /**\n * @internal\n */\n public override clickHandler(e: MouseEvent): BooleanOrVoid {\n // do nothing if the select is disabled\n if (this.disabled) {\n return;\n }\n\n let optionClicked = false;\n if (this.open) {\n const captured = (e.target as HTMLElement).closest<ListOption>(\n 'option,[role=option]'\n );\n optionClicked = captured !== null;\n\n if (captured?.disabled) {\n return;\n }\n }\n\n const previousSelectedIndex = this.selectedIndex;\n super.clickHandler(e);\n\n if (\n this.open\n && this.selectedIndex !== previousSelectedIndex\n && optionClicked\n ) {\n this.updateValue(true);\n }\n this.open = this.collapsible && !this.open;\n }\n\n /**\n * Updates the value when an option's value changes.\n *\n * @param source - the source object\n * @param propertyName - the property to evaluate\n *\n * @internal\n * @override\n */\n public override handleChange(source: unknown, propertyName: string): void {\n // don't call super.handleChange so hidden options can be selected programmatically\n const sourceElement = source as Element;\n switch (propertyName) {\n case 'value': {\n this.updateValue();\n break;\n }\n case 'selected': {\n if (isListOption(sourceElement) && sourceElement.selected) {\n this.selectedIndex = this.options.indexOf(sourceElement);\n } else {\n this.clearSelect();\n }\n break;\n }\n case 'hidden': {\n if (isListOption(sourceElement)) {\n sourceElement.visuallyHidden = sourceElement.hidden;\n this.updateAdjacentSeparatorState(sourceElement);\n } else if (isListOptionGroup(sourceElement)) {\n sourceElement.listOptions.forEach(e => {\n e.visuallyHidden = sourceElement.hidden;\n });\n this.updateAdjacentSeparatorState(sourceElement);\n }\n this.filterOptions();\n this.updateDisplayValue();\n break;\n }\n case 'visuallyHidden': {\n if (\n isListOptionGroup(sourceElement)\n || isListOption(sourceElement)\n ) {\n this.updateAdjacentSeparatorState(sourceElement);\n }\n break;\n }\n case 'disabled': {\n this.updateDisplayValue();\n break;\n }\n case 'listOptions': {\n // force refresh of slotted options for groups\n this.slottedOptionsChanged(\n this.slottedOptions,\n this.slottedOptions\n );\n break;\n }\n default:\n break;\n }\n }\n\n /**\n * Prevents focus when size is set and a scrollbar is clicked.\n *\n * @param e - the mouse event object\n *\n * @override\n * @internal\n */\n public override mousedownHandler(e: MouseEvent): BooleanOrVoid {\n if (e.offsetX >= 0 && e.offsetX <= this.listbox?.scrollWidth) {\n return super.mousedownHandler(e);\n }\n\n return this.collapsible;\n }\n\n /**\n * @internal\n */\n public regionLoadedHandler(): void {\n this.focusAndScrollOptionIntoView();\n }\n\n /**\n * Sets the multiple property on the proxy element.\n *\n * @param prev - the previous multiple value\n * @param next - the current multiple value\n */\n public override multipleChanged(\n prev: boolean | undefined,\n next: boolean\n ): void {\n super.multipleChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.multiple = next;\n }\n }\n\n /**\n * @internal\n */\n public ignoreClickHandler(e: MouseEvent): void {\n e.stopPropagation();\n }\n\n /**\n * @internal\n */\n public clearClickHandler(e: MouseEvent): void {\n this.open = false;\n this.clearSelect();\n this.updateValue(true);\n e.stopPropagation();\n }\n\n /**\n * @internal\n */\n public updateDisplayValue(): void {\n const placeholderOption = this.getPlaceholderOption();\n if (\n placeholderOption\n && this.firstSelectedOption === placeholderOption\n ) {\n this.displayPlaceholder = true;\n } else {\n this.displayPlaceholder = false;\n }\n\n Observable.notify(this, 'displayValue');\n }\n\n /**\n * Handle content changes on the control input.\n *\n * @param e - the input event\n * @internal\n */\n public inputHandler(e: InputEvent): boolean {\n this.filter = this.filterInput?.value ?? '';\n if (this.filterMode === FilterMode.standard) {\n this.filterOptions();\n\n const enabledOptions = this.filteredOptions.filter(\n o => !o.disabled\n );\n let activeOptionIndex = this.filter !== ''\n ? (this.openActiveIndex ?? this.selectedIndex)\n : this.selectedIndex;\n\n if (\n enabledOptions.length > 0\n && !enabledOptions.find(\n o => o === this.options[activeOptionIndex]\n )\n ) {\n activeOptionIndex = this.options.indexOf(enabledOptions[0]!);\n } else if (enabledOptions.length === 0) {\n activeOptionIndex = -1;\n }\n this.setActiveOption(activeOptionIndex);\n }\n\n if (this.filterMode !== FilterMode.none) {\n this.emitFilterInputEvent();\n }\n\n if (e.inputType.includes('deleteContent') || !this.filter.length) {\n return true;\n }\n\n e.stopPropagation();\n return true;\n }\n\n /**\n * @internal\n */\n public override focusoutHandler(e: FocusEvent): BooleanOrVoid {\n super.focusoutHandler(e);\n if (!this.open) {\n return true;\n }\n\n this.open = false;\n const focusTarget = e.relatedTarget as HTMLElement;\n if (this.isSameNode(focusTarget)) {\n this.focus();\n return true;\n }\n\n return true;\n }\n\n /**\n * @internal\n */\n public override keydownHandler(e: KeyboardEvent): BooleanOrVoid {\n const initialSelectedIndex = this.selectedIndex;\n const key = e.key;\n if (e.ctrlKey || e.shiftKey) {\n return true;\n }\n\n if (key !== keyArrowDown && key !== keyArrowUp) {\n super.keydownHandler(e);\n }\n\n let currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n let commitValueThenClose = false;\n switch (key) {\n case keyArrowDown: {\n const selectedOption = this.options[this.selectedIndex];\n if (\n this.open\n && isListOption(selectedOption)\n && !isOptionOrGroupVisible(selectedOption)\n ) {\n if (this.openActiveIndex === this.selectedIndex) {\n this.selectFirstOption();\n } else {\n this.selectNextOption();\n }\n } else {\n super.keydownHandler(e);\n }\n\n // update currentActiveIndex again as dependent state may have changed\n currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n break;\n }\n case keyArrowUp: {\n const selectedOption = this.options[this.selectedIndex];\n if (\n this.open\n && isListOption(selectedOption)\n && !isOptionOrGroupVisible(selectedOption)\n ) {\n if (this.openActiveIndex === this.selectedIndex) {\n this.selectLastOption();\n } else {\n this.selectPreviousOption();\n }\n } else {\n super.keydownHandler(e);\n }\n\n // update currentActiveIndex again as dependent state may have changed\n currentActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n break;\n }\n case keySpace: {\n // when dropdown is open allow user to enter a space for filter text\n if (this.open && this.filterMode !== FilterMode.none) {\n break;\n }\n\n e.preventDefault();\n if (this.collapsible && this.typeAheadExpired) {\n this.open = !this.open;\n }\n if (!this.open) {\n this.focus();\n }\n break;\n }\n case keyHome:\n case keyEnd: {\n e.preventDefault();\n break;\n }\n case keyEnter: {\n e.preventDefault();\n if (\n this.filteredOptions.length === 0\n || this.filteredOptions.every(o => o.disabled)\n ) {\n return false;\n }\n if (this.open) {\n commitValueThenClose = true;\n } else {\n this.open = true;\n }\n\n if (commitValueThenClose) {\n this.focus();\n }\n break;\n }\n case keyEscape: {\n if (!this.open) {\n if (this.clearable) {\n this.clearSelect();\n this.updateValue(true);\n return true;\n }\n\n break;\n }\n\n if (this.collapsible && this.open) {\n e.preventDefault();\n this.open = false;\n }\n\n currentActiveIndex = this.selectedIndex;\n this.focus();\n break;\n }\n\n default: {\n break;\n }\n }\n\n if (!this.open || commitValueThenClose) {\n if (this.selectedIndex !== currentActiveIndex) {\n this.selectedIndex = currentActiveIndex;\n }\n\n if (initialSelectedIndex !== this.selectedIndex) {\n this.updateValue(true);\n }\n }\n\n if (commitValueThenClose) {\n this.open = false;\n }\n\n return !(key === keyArrowDown || key === keyArrowUp);\n }\n\n /**\n * Updates the proxy value when the selected index changes.\n *\n * @param prev - the previous selected index\n * @param next - the next selected index\n *\n * @internal\n */\n public override selectedIndexChanged(\n _: number | undefined,\n __: number\n ): void {\n // Don't call super.selectedIndexChanged as this will disallow disabled options\n // from being valid initial selected values. Our setDefaultSelectedOption\n // implementation handles skipping non-selected disabled options for the initial\n // selected value.\n this.setSelectedOptions();\n if (this.open) {\n this.setActiveOption(this.selectedIndex);\n }\n this.updateValue();\n }\n\n /**\n * @internal\n * Fork of Listbox implementation, so that the selectedIndex is not changed while the dropdown\n * is open.\n */\n public override typeaheadBufferChanged(_: string, __: string): void {\n if (this.$fastController.isConnected) {\n const typeaheadMatches = this.getTypeaheadMatches();\n\n if (typeaheadMatches.length) {\n const activeOptionIndex = this.options.indexOf(\n typeaheadMatches[0] as ListOption\n );\n if (!(this.open && this.filterMode !== FilterMode.none)) {\n this.setActiveOption(activeOptionIndex);\n }\n }\n\n this.typeaheadExpired = false;\n }\n }\n\n /**\n * Synchronize the `aria-disabled` property when the `disabled` property changes.\n *\n * @param prev - The previous disabled value\n * @param next - The next disabled value\n *\n * @internal\n */\n public override disabledChanged(prev: boolean, next: boolean): void {\n if (super.disabledChanged) {\n super.disabledChanged(prev, next);\n }\n this.ariaDisabled = this.disabled ? 'true' : 'false';\n }\n\n /**\n * Reset the element to its first selectable option when its parent form is reset.\n *\n * @internal\n */\n public override formResetCallback(): void {\n this.setProxyOptions();\n // Call the base class's implementation setDefaultSelectedOption instead of the select's\n // override, in order to reset the selectedIndex without using the value property.\n super.setDefaultSelectedOption();\n if (this.selectedIndex === -1) {\n this.selectedIndex = 0;\n }\n }\n\n /**\n * @internal\n */\n public override selectNextOption(): void {\n // don't call super.selectNextOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex + 1; i < this.options.length; i++) {\n const listOption = this.options[i]!;\n if (isListOption(listOption) && isOptionSelectable(listOption)) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectPreviousOption(): void {\n // don't call super.selectPreviousOption as that relies on side-effecty\n // behavior to not select disabled option (which no longer works)\n const startIndex = this.openActiveIndex ?? this.selectedIndex;\n for (let i = startIndex - 1; i >= 0; i--) {\n const listOption = this.options[i]!;\n if (isListOption(listOption) && isOptionSelectable(listOption)) {\n this.setActiveOption(i);\n break;\n }\n }\n }\n\n /**\n * @internal\n */\n public override selectFirstOption(): void {\n const newActiveOptionIndex = this.options.findIndex(\n o => isListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public override selectLastOption(): void {\n const newActiveOptionIndex = findLastIndex(\n this.options,\n o => isListOption(o) && isOptionSelectable(o)\n );\n this.setActiveOption(newActiveOptionIndex);\n }\n\n /**\n * @internal\n */\n public registerOption(option: ListOption): void {\n if (this.options.includes(option)) {\n return;\n }\n\n // Adding an option to the end, ultimately, isn't the correct\n // thing to do, as this will mean the option's index in the options,\n // at least temporarily, does not match the DOM order. However, it\n // is expected that a successive run of `slottedOptionsChanged` will\n // correct this order issue. See 'https://github.com/ni/nimble/issues/1915'\n // for more info.\n this.options.push(option);\n }\n\n protected override setSelectedOptions(): void {\n // Prevents parent classes from resetting selectedIndex to a positive\n // value while filtering, which can result in a disabled option being\n // selected.\n if (this.open && this.selectedIndex === -1) {\n return;\n }\n super.setSelectedOptions();\n }\n\n protected override focusAndScrollOptionIntoView(): void {\n if (this.open) {\n super.focusAndScrollOptionIntoView();\n window.requestAnimationFrame(() => {\n this.filterInput?.focus();\n });\n }\n }\n\n protected override getTypeaheadMatches(): ListboxOption[] {\n const matches = super.getTypeaheadMatches();\n // Don't allow placeholder to be matched\n return matches.filter(o => !o.hidden && !o.disabled);\n }\n\n protected positionChanged(\n _: SelectPosition | undefined,\n next: SelectPosition | undefined\n ): void {\n this.positionAttribute = next;\n this.setPositioning();\n }\n\n /**\n * Updates the proxy's size property when the size attribute changes.\n *\n * @param prev - the previous size\n * @param next - the current size\n *\n * @override\n * @internal\n */\n protected override sizeChanged(\n prev: number | undefined,\n next: number\n ): void {\n super.sizeChanged(prev, next);\n\n if (this.proxy) {\n this.proxy.size = next;\n }\n }\n\n protected openChanged(): void {\n if (!this.collapsible) {\n return;\n }\n\n if (this.open) {\n this.initializeOpenState();\n return;\n }\n\n const activeOption = this.options[this.openActiveIndex ?? this.selectedIndex];\n if (isListOption(activeOption)) {\n activeOption.activeOption = false;\n }\n this.openActiveIndex = undefined;\n this.filter = '';\n if (this.filterInput) {\n this.filterInput.value = '';\n }\n\n if (this.filterMode !== FilterMode.none) {\n this.emitFilterInputEvent();\n }\n this.ariaControls = '';\n this.ariaExpanded = 'false';\n }\n\n /**\n * Updates the selectedness of each option when the list of selected options changes.\n *\n * @param prev - the previous list of selected options\n * @param next - the current list of selected options\n *\n * @override\n * @internal\n */\n protected override selectedOptionsChanged(\n _prev: ListboxOption[] | undefined,\n next: ListboxOption[]\n ): void {\n // don't call super.selectedOptionsChanged so we don't filter out hidden elements\n // when updating 'selected' state (copied relevant super implementation)\n this.options?.forEach((o, i) => {\n const notifier = Observable.getNotifier(o);\n notifier.unsubscribe(this, 'selected');\n o.selected = next.includes(o);\n notifier.subscribe(this, 'selected');\n const proxyOption = this.proxy?.options.item(i);\n if (proxyOption) {\n proxyOption.selected = o.selected;\n }\n });\n }\n\n /**\n * Sets the selected index to match the first option with the selected attribute, or\n * the first selectable option.\n *\n * @override\n * @internal\n */\n protected override setDefaultSelectedOption(): void {\n const options: ListboxOption[] = this.options\n ?? Array.from(this.children).filter(o => isListOption(o));\n\n const optionIsSelected = (option: ListboxOption): boolean => {\n return option.hasAttribute('selected') || option.selected;\n };\n let selectedIndex = -1;\n let firstValidOptionIndex = -1;\n let placeholderIndex = -1;\n for (let i = 0; i < options?.length; i++) {\n const option = options[i]!;\n if (optionIsSelected(option) || option.value === this.value) {\n selectedIndex = i;\n break;\n } else if (placeholderIndex === -1 && isOptionPlaceholder(option)) {\n placeholderIndex = i;\n } else if (\n firstValidOptionIndex === -1\n && isOptionSelectable(option as ListOption)\n ) {\n firstValidOptionIndex = i;\n }\n }\n\n if (selectedIndex !== -1) {\n this.selectedIndex = selectedIndex;\n } else if (placeholderIndex !== -1) {\n this.selectedIndex = placeholderIndex;\n } else if (firstValidOptionIndex !== -1) {\n this.selectedIndex = firstValidOptionIndex;\n } else {\n this.selectedIndex = 0;\n }\n }\n\n private getSlottedOptions(\n slottedElements: Element[] | undefined\n ): ListboxOption[] {\n const options: ListOption[] = [];\n slottedElements?.forEach(el => {\n if (isListOption(el)) {\n options.push(el);\n } else if (isListOptionGroup(el)) {\n options.push(...this.getGroupOptions(el));\n }\n });\n\n return options;\n }\n\n private setActiveOption(newActiveIndex: number): void {\n const activeOption = this.options[newActiveIndex];\n if (this.open) {\n if (isListOption(activeOption)) {\n activeOption.activeOption = true;\n }\n\n const previousActiveIndex = this.openActiveIndex ?? this.selectedIndex;\n const previousActiveOption = this.options[previousActiveIndex];\n if (\n previousActiveIndex !== newActiveIndex\n && isListOption(previousActiveOption)\n ) {\n previousActiveOption.activeOption = false;\n }\n\n this.openActiveIndex = newActiveIndex;\n this.focusAndScrollActiveOptionIntoView();\n } else {\n this.selectedIndex = newActiveIndex;\n }\n\n this.ariaActiveDescendant = activeOption?.id ?? '';\n }\n\n private focusAndScrollActiveOptionIntoView(): void {\n const optionToFocus = this.options[this.openActiveIndex ?? this.selectedIndex];\n // Copied from FAST: To ensure that the browser handles both `focus()` and\n // `scrollIntoView()`, the timing here needs to guarantee that they happen on\n // different frames. Since this function is typically called from the `openChanged`\n // observer, `DOM.queueUpdate` causes the calls to be grouped into the same frame.\n // To prevent this, `requestAnimationFrame` is used instead of `DOM.queueUpdate`.\n if (optionToFocus !== undefined && this.contains(optionToFocus)) {\n optionToFocus.focus();\n requestAnimationFrame(() => {\n optionToFocus.scrollIntoView({ block: 'nearest' });\n });\n }\n }\n\n private getPlaceholderOption(): ListOption | undefined {\n return this.options.find(o => o.hidden && o.disabled) as ListOption;\n }\n\n private setPositioning(): void {\n if (!this.$fastController.isConnected) {\n // Don't call setPositioning() until we're connected,\n // since this.forcedPosition isn't initialized yet.\n return;\n }\n const currentBox = this.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const availableBottom = viewportHeight - currentBox.bottom;\n\n if (this.forcedPosition) {\n this.position = this.positionAttribute;\n } else if (currentBox.top > availableBottom) {\n this.position = SelectPosition.above;\n } else {\n this.position = SelectPosition.below;\n }\n\n this.positionAttribute = this.forcedPosition\n ? this.positionAttribute\n : this.position;\n\n this.availableViewportHeight = this.position === SelectPosition.above\n ? Math.trunc(currentBox.top)\n : Math.trunc(availableBottom);\n }\n\n private updateAdjacentSeparatorState(\n element: ListOptionGroup | ListOption\n ): void {\n const previousElement = this.getPreviousVisibleOptionOrGroup(element);\n const nextElement = this.getNextVisibleOptionOrGroup(element);\n\n if (isOptionOrGroupVisible(element)) {\n const topSeparatorVisible = isListOption(previousElement);\n this.setTopSeparatorState(element, topSeparatorVisible);\n const bottomSeparatorVisible = nextElement !== null;\n this.setBottomSeparatorState(element, bottomSeparatorVisible);\n this.setBottomSeparatorState(previousElement, true);\n } else {\n const nextTopSeparatorVisible = isListOption(previousElement);\n this.setTopSeparatorState(nextElement, nextTopSeparatorVisible);\n const previousBottomSeparatorVisible = nextElement !== null;\n this.setBottomSeparatorState(\n previousElement,\n previousBottomSeparatorVisible\n );\n }\n }\n\n private setTopSeparatorState(\n element: ListOptionGroup | ListOption | null,\n visible: boolean\n ): void {\n if (isListOptionGroup(element)) {\n element.topSeparatorVisible = visible;\n }\n }\n\n private setBottomSeparatorState(\n element: ListOptionGroup | ListOption | null,\n visible: boolean\n ): void {\n if (isListOptionGroup(element)) {\n element.bottomSeparatorVisible = visible;\n }\n }\n\n private getPreviousVisibleOptionOrGroup(\n element: HTMLElement\n ): ListOption | ListOptionGroup | null {\n let previousElement = element.previousElementSibling;\n while (previousElement) {\n if (\n (isListOption(previousElement)\n || isListOptionGroup(previousElement))\n && isOptionOrGroupVisible(previousElement)\n ) {\n return previousElement;\n }\n previousElement = previousElement.previousElementSibling;\n }\n return null;\n }\n\n private getNextVisibleOptionOrGroup(\n element: HTMLElement\n ): ListOption | ListOptionGroup | null {\n let nextElement = element.nextElementSibling;\n while (nextElement) {\n if (\n (isListOption(nextElement) || isListOptionGroup(nextElement))\n && isOptionOrGroupVisible(nextElement)\n ) {\n return nextElement;\n }\n nextElement = nextElement.nextElementSibling;\n }\n return null;\n }\n\n private isOptionHiddenOrFilteredOut(option: ListOption): boolean {\n if (option.hidden) {\n return true;\n }\n return this.filterMode === FilterMode.standard\n ? !this.filterMatchesText(option.text)\n : false;\n }\n\n private filterMatchesText(text: string): boolean {\n const filter = this.filter.toLowerCase();\n const normalizedFilter = diacriticInsensitiveStringNormalizer(filter);\n return diacriticInsensitiveStringNormalizer(text).includes(\n normalizedFilter\n );\n }\n\n /**\n * Filter available options by text value.\n *\n * @public\n */\n private filterOptions(): void {\n if (!this.$fastController.isConnected) {\n return;\n }\n\n const filteredOptions: ListOption[] = [];\n for (const element of this.slottedOptions) {\n if (isListOptionGroup(element)) {\n if (element.hidden) {\n continue; // no need to process hidden groups\n }\n const groupOptions = this.getGroupOptions(element);\n const groupMatchesFilter = this.filterMatchesText(\n element.labelContent\n );\n groupOptions.forEach(option => {\n option.visuallyHidden = groupMatchesFilter\n ? false\n : this.isOptionHiddenOrFilteredOut(option);\n if (!option.visuallyHidden) {\n filteredOptions.push(option);\n }\n });\n } else if (isListOption(element)) {\n element.visuallyHidden = this.isOptionHiddenOrFilteredOut(element);\n if (!element.visuallyHidden) {\n filteredOptions.push(element);\n }\n }\n }\n\n this.filteredOptions = filteredOptions;\n }\n\n private getGroupOptions(group: ListOptionGroup): ListOption[] {\n return Array.from(group.children)\n .filter(el => isListOption(el))\n .map(el => {\n if (group.hidden && isListOption(el)) {\n el.visuallyHidden = true;\n }\n\n return el;\n }) as ListOption[];\n }\n\n /**\n * Sets the value and display value to match the first selected option.\n *\n * @param shouldEmit - if true, the input and change events will be emitted\n *\n * @internal\n */\n private updateValue(shouldEmit?: boolean): void {\n if (this.$fastController.isConnected) {\n this.value = this.firstSelectedOption?.value ?? '';\n this.observeSelectedOptionTextContent();\n }\n\n if (shouldEmit) {\n this.$emit('input');\n this.$emit('change', this, {\n bubbles: true,\n composed: undefined\n });\n }\n }\n\n private clearSelect(): void {\n const placeholder = this.getPlaceholderOption();\n this.selectedIndex = placeholder\n ? this.options.indexOf(placeholder)\n : -1;\n }\n\n /**\n * Resets and fills the proxy to match the component's options.\n *\n * @internal\n */\n private setProxyOptions(): void {\n if (this.proxy instanceof HTMLSelectElement && this.options) {\n this.proxy.options.length = 0;\n this.options.forEach(option => {\n const proxyOption = option.proxy\n || (option instanceof HTMLOptionElement\n ? option.cloneNode()\n : null);\n\n if (proxyOption) {\n this.proxy.options.add(proxyOption);\n }\n });\n }\n }\n\n private filterChanged(): void {\n this.filterOptions();\n }\n\n private emitFilterInputEvent(): void {\n const eventDetail: SelectFilterInputEventDetail = {\n filterText: this.filter\n };\n\n this.$emit('filter-input', eventDetail, { bubbles: true });\n }\n\n private initializeOpenState(): void {\n this.setActiveOption(this.selectedIndex);\n this.ariaControls = this.listboxId;\n this.ariaExpanded = 'true';\n\n this.setPositioning();\n this.focusAndScrollOptionIntoView();\n }\n\n private observeSelectedOptionTextContent(): void {\n this.selectedOptionObserver?.disconnect();\n\n if (this.selectedIndex === -1) {\n return;\n }\n\n const selectedOption = this.firstSelectedOption;\n if (selectedOption) {\n this.selectedOptionObserver?.observe(selectedOption, {\n characterData: true,\n subtree: true,\n childList: true\n });\n }\n }\n}\n\nconst nimbleSelect = Select.compose<SelectOptions>({\n baseName: 'select',\n baseClass: FoundationSelect,\n template,\n styles,\n indicator: arrowExpanderDown16X16.data,\n end: html<Select>`\n <${iconExclamationMarkTag}\n severity=\"error\"\n class=\"error-icon\"\n ></${iconExclamationMarkTag}>\n ${errorTextTemplate}\n `\n});\n\napplyMixins(Select, StartEnd, DelegatesARIASelect);\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleSelect());\nexport const selectTag = 'nimble-select';\n"]}
|
|
@@ -23,8 +23,6 @@ const labelTemplate = createRequiredVisibleLabelTemplate(html `
|
|
|
23
23
|
<slot ${ref('labelSlot')}></slot>
|
|
24
24
|
</label>
|
|
25
25
|
`);
|
|
26
|
-
/* eslint-disable @typescript-eslint/indent */
|
|
27
|
-
// prettier-ignore
|
|
28
26
|
export const template = (context, definition) => html `
|
|
29
27
|
<template
|
|
30
28
|
class="${x => [
|
|
@@ -155,5 +153,4 @@ export const template = (context, definition) => html `
|
|
|
155
153
|
</${anchoredRegionTag}>
|
|
156
154
|
</template>
|
|
157
155
|
`;
|
|
158
|
-
/* eslint-enable @typescript-eslint/indent */
|
|
159
156
|
//# sourceMappingURL=template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/select/template.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, ref, slotted, ViewTemplate, when } from '@ni/fast-element';\nimport {\n endSlotTemplate,\n type FoundationElementTemplate,\n type SelectOptions,\n startSlotTemplate\n} from '@ni/fast-foundation';\nimport type { Select } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { iconMagnifyingGlassTag } from '../icons/magnifying-glass';\nimport {\n filterNoResultsLabel,\n filterSearchLabel,\n loadingLabel\n} from '../label-provider/core/label-tokens';\nimport { FilterMode } from './types';\nimport { ListOptionGroup } from '../list-option-group';\nimport { buttonTag } from '../button';\nimport { iconTimesTag } from '../icons/times';\nimport { ListOption } from '../list-option';\nimport { spinnerTag } from '../spinner';\nimport { createRequiredVisibleLabelTemplate } from '../patterns/required-visible/template';\n\nexport const isListOption = (\n el: Element | undefined | null\n): el is ListOption => {\n return el instanceof ListOption;\n};\n\nexport const isListOptionGroup = (\n n: Element | undefined | null\n): n is ListOptionGroup => {\n return n instanceof ListOptionGroup;\n};\n\nconst labelTemplate = createRequiredVisibleLabelTemplate(html<Select>`\n <label part=\"label\" class=\"label\" aria-hidden=\"true\">\n <slot ${ref('labelSlot')}></slot>\n </label>\n`);\n\n/* eslint-disable @typescript-eslint/indent */\n// prettier-ignore\nexport const template: FoundationElementTemplate<\nViewTemplate<Select>,\nSelectOptions\n> = (context, definition) => html<Select>`\n <template\n class=\"${x => [\n x.collapsible && 'collapsible',\n x.collapsible && x.open && 'open',\n x.disabled && 'disabled',\n x.collapsible && x.position,\n ].filter(Boolean).join(' ')}\"\n aria-activedescendant=\"${x => (x.filterMode === FilterMode.none ? x.ariaActiveDescendant : null)}\"\n aria-controls=\"${x => (x.filterMode === FilterMode.none ? x.ariaControls : null)}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-haspopup=\"${x => (x.collapsible ? 'listbox' : null)}\"\n aria-label=\"${x => x.labelContent}\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n aria-required=\"${x => x.requiredVisible}\"\n ?open=\"${x => x.open}\"\n role=\"combobox\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @contentchange=\"${x => x.updateDisplayValue()}\"\n @focusin=\"${(x, c) => x.focusinHandler(c.event as FocusEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n @mousedown=\"${(x, c) => x.mousedownHandler(c.event as MouseEvent)}\"\n >\n ${labelTemplate}\n ${when(x => x.collapsible, html<Select>`\n <div\n class=\"control\"\n part=\"control\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('control')}\n >\n ${startSlotTemplate(context, definition)}\n <slot name=\"button-container\">\n <div class=\"selected-value ${x => (x.displayPlaceholder ? 'placeholder' : '')}\" part=\"selected-value\" ${overflow('hasOverflow')} title=${x => (x.hasOverflow && x.displayValue ? x.displayValue : null)}>\n <slot name=\"selected-value\">${x => x.displayValue}</slot>\n </div>\n ${when(x => !x.disabled && x.clearable && !x.displayPlaceholder && x.selectedIndex >= 0, html<Select>`\n <${buttonTag} \n class=\"clear-button\"\n tabindex=\"-1\"\n part=\"clear-button\"\n content-hidden\n appearance=\"ghost\"\n @click=\"${(x, c) => x.clearClickHandler(c.event as MouseEvent)}\">\n <${iconTimesTag} slot=\"start\"></${iconTimesTag}>\n </${buttonTag}>\n `)}\n <div aria-hidden=\"true\" class=\"indicator\" part=\"indicator\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n `)\n }\n <${anchoredRegionTag}\n ${ref('anchoredRegion')}\n class=\"anchored-region\"\n fixed-placement\n auto-update-mode=\"auto\"\n vertical-default-position=\"${x => (x.positionAttribute === DropdownPosition.above ? 'top' : 'bottom')}\"\n vertical-positioning-mode=\"${x => (!x.positionAttribute ? 'dynamic' : 'locktodefault')}\"\n horizontal-default-position=\"center\"\n horizontal-positioning-mode=\"locktodefault\"\n horizontal-scaling=\"anchor\"\n @loaded=\"${x => x.regionLoadedHandler()}\"\n ?hidden=\"${x => (x.collapsible ? !x.open : false)}\">\n <div class=\"listbox-background\">\n <div\n class=\"\n listbox\n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n ${x => x.positionAttribute}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n style=\"--ni-private-listbox-available-viewport-height: ${x => x.availableViewportHeight}px;\"\n ${ref('listbox')}\n >\n ${when(x => x.filterMode !== FilterMode.none, html<Select>`\n <div class=\"filter-field ${x => x.positionAttribute}\">\n <${iconMagnifyingGlassTag} class=\"filter-icon\"></${iconMagnifyingGlassTag}>\n <input\n ${ref('filterInput')}\n class=\"filter-input\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-activedescendant=\"${x => x.ariaActiveDescendant}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @click=\"${(x, c) => x.ignoreClickHandler(c.event as MouseEvent)}\"\n placeholder=\"${x => filterSearchLabel.getValueFor(x)}\"\n value=\"${x => x.filter}\"\n />\n </div>\n `)}\n <div ${ref('scrollableRegion')}\n class=\"scrollable-region\">\n <slot\n name=\"option\"\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && (isListOption(n) || isListOptionGroup(n)),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n ${when(x => (x.filterMode !== FilterMode.none && x.filteredOptions.length === 0 && !x.loadingVisible), html<Select>`\n <span class=\"no-results-label\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n ${when(x => x.loadingVisible, html<Select>`\n <div class=\"loading-container ${x => x.positionAttribute} ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\"\n @click=\"${(x, c) => x.ignoreClickHandler(c.event as MouseEvent)}\">\n <span class=\"loading-label\">\n ${x => loadingLabel.getValueFor(x)}\n </span>\n <${spinnerTag} class=\"loading-spinner\" appearance=\"accent\"></${spinnerTag}>\n </div>\n `)}\n </div>\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n/* eslint-enable @typescript-eslint/indent */\n"]}
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/select/template.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, ref, slotted, ViewTemplate, when } from '@ni/fast-element';\nimport {\n endSlotTemplate,\n type FoundationElementTemplate,\n type SelectOptions,\n startSlotTemplate\n} from '@ni/fast-foundation';\nimport type { Select } from '.';\nimport { anchoredRegionTag } from '../anchored-region';\nimport { DropdownPosition } from '../patterns/dropdown/types';\nimport { overflow } from '../utilities/directive/overflow';\nimport { iconMagnifyingGlassTag } from '../icons/magnifying-glass';\nimport {\n filterNoResultsLabel,\n filterSearchLabel,\n loadingLabel\n} from '../label-provider/core/label-tokens';\nimport { FilterMode } from './types';\nimport { ListOptionGroup } from '../list-option-group';\nimport { buttonTag } from '../button';\nimport { iconTimesTag } from '../icons/times';\nimport { ListOption } from '../list-option';\nimport { spinnerTag } from '../spinner';\nimport { createRequiredVisibleLabelTemplate } from '../patterns/required-visible/template';\n\nexport const isListOption = (\n el: Element | undefined | null\n): el is ListOption => {\n return el instanceof ListOption;\n};\n\nexport const isListOptionGroup = (\n n: Element | undefined | null\n): n is ListOptionGroup => {\n return n instanceof ListOptionGroup;\n};\n\nconst labelTemplate = createRequiredVisibleLabelTemplate(html<Select>`\n <label part=\"label\" class=\"label\" aria-hidden=\"true\">\n <slot ${ref('labelSlot')}></slot>\n </label>\n`);\n\nexport const template: FoundationElementTemplate<\nViewTemplate<Select>,\nSelectOptions\n> = (context, definition) => html<Select>`\n <template\n class=\"${x => [\n x.collapsible && 'collapsible',\n x.collapsible && x.open && 'open',\n x.disabled && 'disabled',\n x.collapsible && x.position,\n ].filter(Boolean).join(' ')}\"\n aria-activedescendant=\"${x => (x.filterMode === FilterMode.none ? x.ariaActiveDescendant : null)}\"\n aria-controls=\"${x => (x.filterMode === FilterMode.none ? x.ariaControls : null)}\"\n aria-disabled=\"${x => x.ariaDisabled}\"\n aria-expanded=\"${x => x.ariaExpanded}\"\n aria-haspopup=\"${x => (x.collapsible ? 'listbox' : null)}\"\n aria-label=\"${x => x.labelContent}\"\n aria-multiselectable=\"${x => x.ariaMultiSelectable}\"\n aria-required=\"${x => x.requiredVisible}\"\n ?open=\"${x => x.open}\"\n role=\"combobox\"\n tabindex=\"${x => (!x.disabled ? '0' : null)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n @contentchange=\"${x => x.updateDisplayValue()}\"\n @focusin=\"${(x, c) => x.focusinHandler(c.event as FocusEvent)}\"\n @focusout=\"${(x, c) => x.focusoutHandler(c.event as FocusEvent)}\"\n @keydown=\"${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}\"\n @mousedown=\"${(x, c) => x.mousedownHandler(c.event as MouseEvent)}\"\n >\n ${labelTemplate}\n ${when(x => x.collapsible, html<Select>`\n <div\n class=\"control\"\n part=\"control\"\n ?disabled=\"${x => x.disabled}\"\n ${ref('control')}\n >\n ${startSlotTemplate(context, definition)}\n <slot name=\"button-container\">\n <div class=\"selected-value ${x => (x.displayPlaceholder ? 'placeholder' : '')}\" part=\"selected-value\" ${overflow('hasOverflow')} title=${x => (x.hasOverflow && x.displayValue ? x.displayValue : null)}>\n <slot name=\"selected-value\">${x => x.displayValue}</slot>\n </div>\n ${when(x => !x.disabled && x.clearable && !x.displayPlaceholder && x.selectedIndex >= 0, html<Select>`\n <${buttonTag} \n class=\"clear-button\"\n tabindex=\"-1\"\n part=\"clear-button\"\n content-hidden\n appearance=\"ghost\"\n @click=\"${(x, c) => x.clearClickHandler(c.event as MouseEvent)}\">\n <${iconTimesTag} slot=\"start\"></${iconTimesTag}>\n </${buttonTag}>\n `)}\n <div aria-hidden=\"true\" class=\"indicator\" part=\"indicator\">\n <slot name=\"indicator\">\n ${definition.indicator || ''}\n </slot>\n </div>\n </slot>\n ${endSlotTemplate(context, definition)}\n </div>\n `)\n }\n <${anchoredRegionTag}\n ${ref('anchoredRegion')}\n class=\"anchored-region\"\n fixed-placement\n auto-update-mode=\"auto\"\n vertical-default-position=\"${x => (x.positionAttribute === DropdownPosition.above ? 'top' : 'bottom')}\"\n vertical-positioning-mode=\"${x => (!x.positionAttribute ? 'dynamic' : 'locktodefault')}\"\n horizontal-default-position=\"center\"\n horizontal-positioning-mode=\"locktodefault\"\n horizontal-scaling=\"anchor\"\n @loaded=\"${x => x.regionLoadedHandler()}\"\n ?hidden=\"${x => (x.collapsible ? !x.open : false)}\">\n <div class=\"listbox-background\">\n <div\n class=\"\n listbox\n ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\n ${x => x.positionAttribute}\n \"\n id=\"${x => x.listboxId}\"\n part=\"listbox\"\n role=\"listbox\"\n ?disabled=\"${x => x.disabled}\"\n style=\"--ni-private-listbox-available-viewport-height: ${x => x.availableViewportHeight}px;\"\n ${ref('listbox')}\n >\n ${when(x => x.filterMode !== FilterMode.none, html<Select>`\n <div class=\"filter-field ${x => x.positionAttribute}\">\n <${iconMagnifyingGlassTag} class=\"filter-icon\"></${iconMagnifyingGlassTag}>\n <input\n ${ref('filterInput')}\n class=\"filter-input\"\n aria-controls=\"${x => x.ariaControls}\"\n aria-activedescendant=\"${x => x.ariaActiveDescendant}\"\n @input=\"${(x, c) => x.inputHandler(c.event as InputEvent)}\"\n @click=\"${(x, c) => x.ignoreClickHandler(c.event as MouseEvent)}\"\n placeholder=\"${x => filterSearchLabel.getValueFor(x)}\"\n value=\"${x => x.filter}\"\n />\n </div>\n `)}\n <div ${ref('scrollableRegion')}\n class=\"scrollable-region\">\n <slot\n name=\"option\"\n ${slotted({\n filter: (n: Node) => n instanceof HTMLElement && (isListOption(n) || isListOptionGroup(n)),\n flatten: true,\n property: 'slottedOptions',\n })}\n ></slot>\n ${when(x => (x.filterMode !== FilterMode.none && x.filteredOptions.length === 0 && !x.loadingVisible), html<Select>`\n <span class=\"no-results-label\">\n ${x => filterNoResultsLabel.getValueFor(x)}\n </span>\n `)}\n </div>\n ${when(x => x.loadingVisible, html<Select>`\n <div class=\"loading-container ${x => x.positionAttribute} ${x => (x.filteredOptions.length === 0 ? 'empty' : '')}\"\n @click=\"${(x, c) => x.ignoreClickHandler(c.event as MouseEvent)}\">\n <span class=\"loading-label\">\n ${x => loadingLabel.getValueFor(x)}\n </span>\n <${spinnerTag} class=\"loading-spinner\" appearance=\"accent\"></${spinnerTag}>\n </div>\n `)}\n </div>\n </div>\n </${anchoredRegionTag}>\n </template>\n`;\n"]}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { html } from '@ni/fast-element';
|
|
2
|
-
/* eslint-disable @typescript-eslint/indent */
|
|
3
|
-
// prettier-ignore
|
|
4
2
|
export const template = html `
|
|
5
3
|
<template role="progressbar">
|
|
6
4
|
${''
|
|
@@ -18,5 +16,4 @@ export const template = html `
|
|
|
18
16
|
</div>
|
|
19
17
|
</template>
|
|
20
18
|
`;
|
|
21
|
-
/* eslint-enable @typescript-eslint/indent */
|
|
22
19
|
//# sourceMappingURL=template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/spinner/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/spinner/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAS;;UAE3B,EAAE;AACA;;;;GAIG;AACP;;;;;;;;CAQP,CAAC","sourcesContent":["import { html } from '@ni/fast-element';\nimport type { Spinner } from '.';\n\nexport const template = html<Spinner>`\n <template role=\"progressbar\">\n ${''\n /**\n * In Firefox, the 'title' set on the spinner is very finicky when\n * the spinner is animating. Therefore, put a transparent overlay on\n * top of the spinning bits so that the title displays as expected.\n */\n }\n <div class=\"overlay\"></div>\n\n <div class=\"container\">\n <div class=\"bit1\"></div>\n <div class=\"bit2\"></div>\n </div>\n </template>\n`;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/switch/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGjD,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/switch/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAQ;;;wBAGZ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;yBACb,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;yBACf,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ;oBACpB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAsB,CAAC;kBACxD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAmB,CAAC;iBAChD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;;;;qBAI7B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC;;oBAEvE,OAAO,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;CAmBjD,CAAC","sourcesContent":["import { html, slotted } from '@ni/fast-element';\nimport type { Switch } from '.';\n\nexport const template = html<Switch>`\n <template\n role=\"switch\"\n aria-checked=\"${x => x.checked}\"\n aria-disabled=\"${x => x.disabled}\"\n aria-readonly=\"${x => x.readOnly}\"\n tabindex=\"${x => (x.disabled ? null : 0)}\"\n @keypress=\"${(x, c) => x.keypressHandler(c.event as KeyboardEvent)}\"\n @click=\"${(x, c) => x.clickHandler(c.event as MouseEvent)}\"\n class=\"${x => (x.checked ? 'checked' : '')}\"\n >\n <label\n part=\"label\"\n class=\"${x => (x.defaultSlottedNodes?.length ? 'label' : 'label label__hidden')}\"\n >\n <slot ${slotted('defaultSlottedNodes')}></slot>\n </label>\n <div class=\"switch-container\">\n <span class=\"status-message unchecked-message\" part=\"unchecked-message\">\n <slot name=\"unchecked-message\"></slot>\n </span>\n <div part=\"switch\" class=\"switch\">\n <slot name=\"switch\">\n <span class=\"checked-indicator-spacer\"></span>\n <span class=\"checked-indicator\" part=\"checked-indicator\">\n <span class=\"checked-indicator-inner\">\n </span>\n </slot>\n </div>\n <span class=\"status-message checked-message\" part=\"checked-message\">\n <slot name=\"checked-message\"></slot>\n </span>\n </div>\n </template>\n`;\n"]}
|
|
@@ -3,7 +3,6 @@ import { iconThreeDotsLineTag } from '../../../icons/three-dots-line';
|
|
|
3
3
|
import { menuButtonTag } from '../../../menu-button';
|
|
4
4
|
import { ButtonAppearance } from '../../../menu-button/types';
|
|
5
5
|
import { tableCellActionMenuLabel } from '../../../label-provider/table/label-tokens';
|
|
6
|
-
// prettier-ignore
|
|
7
6
|
export const template = html `
|
|
8
7
|
<template role="cell" style="--ni-private-table-cell-nesting-level: ${x => x.nestingLevel}"
|
|
9
8
|
@focusin="${x => x.onCellFocusIn()}"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACH,gBAAgB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAEtF,
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../../../src/table/components/cell/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACH,gBAAgB,EAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAEtF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAW;0EACmC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;oBACzE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE;iBACzB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE;;eAErB,GAAG,CAAC,mBAAmB,CAAC,0CAA0C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE;cAC7F,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;;UAE3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAW;eACrC,aAAa,IAAI,GAAG,CAAC,kBAAkB,CAAC;;8BAEzB,gBAAgB,CAAC,KAAK;kBAClC,EAAE,CAAC,+DAA+D;;iCAEnD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAiD,CAAC;2BAC/F,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAiD,CAAC;0BACpF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE;yBACpC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE;;yBAEzB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;mBAE5F,oBAAoB,mBAAmB,oBAAoB;kBAC5D,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;gBAExF,aAAa;SACpB,CAAC;;CAET,CAAC","sourcesContent":["import { html, ref, when } from '@ni/fast-element';\nimport type { TableCell } from '.';\nimport { iconThreeDotsLineTag } from '../../../icons/three-dots-line';\nimport { menuButtonTag } from '../../../menu-button';\nimport {\n ButtonAppearance,\n type MenuButtonToggleEventDetail\n} from '../../../menu-button/types';\nimport { tableCellActionMenuLabel } from '../../../label-provider/table/label-tokens';\n\nexport const template = html<TableCell>`\n <template role=\"cell\" style=\"--ni-private-table-cell-nesting-level: ${x => x.nestingLevel}\"\n @focusin=\"${x => x.onCellFocusIn()}\"\n @blur=\"${x => x.onCellBlur()}\"\n >\n <div ${ref('cellViewContainer')} class=\"cell-view-container\" @focusin=\"${x => x.onCellViewFocusIn()}\">\n ${x => x.cellViewTemplate}\n </div>\n ${when(x => x.hasActionMenu, html<TableCell>`\n <${menuButtonTag} ${ref('actionMenuButton')}\n content-hidden\n appearance=\"${ButtonAppearance.ghost}\"\n ${'' /* tabindex managed dynamically by KeyboardNavigationManager */}\n tabindex=\"-1\"\n @beforetoggle=\"${(x, c) => x.onActionMenuBeforeToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>)}\"\n @toggle=\"${(x, c) => x.onActionMenuToggle(c.event as CustomEvent<MenuButtonToggleEventDetail>)}\"\n @click=\"${(_, c) => c.event.stopPropagation()}\"\n @blur=\"${x => x.onActionMenuBlur()}\"\n class=\"action-menu\"\n title=\"${x => (x.actionMenuLabel ? x.actionMenuLabel : tableCellActionMenuLabel.getValueFor(x))}\"\n >\n <${iconThreeDotsLineTag} slot=\"start\"></${iconThreeDotsLineTag}>\n ${x => (x.actionMenuLabel ? x.actionMenuLabel : tableCellActionMenuLabel.getValueFor(x))}\n <slot name=\"cellActionMenu\" slot=\"menu\"></slot>\n </${menuButtonTag}>\n `)}\n </template>\n`;\n"]}
|