@aquera/nile-elements 1.7.2 → 1.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +4 -0
  2. package/dist/index.cjs.js +1 -1
  3. package/dist/index.esm.js +1 -1
  4. package/dist/index.js +387 -265
  5. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js +1 -1
  6. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js.map +1 -1
  7. package/dist/nile-breadcrumb-item/nile-breadcrumb-item.esm.js +8 -6
  8. package/dist/nile-combobox/group-utils.cjs.js +2 -0
  9. package/dist/nile-combobox/group-utils.cjs.js.map +1 -0
  10. package/dist/nile-combobox/group-utils.esm.js +1 -0
  11. package/dist/nile-combobox/index.cjs.js +1 -1
  12. package/dist/nile-combobox/index.esm.js +1 -1
  13. package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
  14. package/dist/nile-combobox/nile-combobox.cjs.js.map +1 -1
  15. package/dist/nile-combobox/nile-combobox.css.cjs.js +1 -1
  16. package/dist/nile-combobox/nile-combobox.css.cjs.js.map +1 -1
  17. package/dist/nile-combobox/nile-combobox.css.esm.js +77 -4
  18. package/dist/nile-combobox/nile-combobox.esm.js +13 -8
  19. package/dist/nile-combobox/renderer.cjs.js +1 -1
  20. package/dist/nile-combobox/renderer.cjs.js.map +1 -1
  21. package/dist/nile-combobox/renderer.esm.js +84 -42
  22. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js +4 -2
  23. package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js.map +1 -1
  24. package/dist/src/nile-combobox/group-utils.d.ts +26 -0
  25. package/dist/src/nile-combobox/group-utils.js +140 -0
  26. package/dist/src/nile-combobox/group-utils.js.map +1 -0
  27. package/dist/src/nile-combobox/nile-combobox.css.js +77 -4
  28. package/dist/src/nile-combobox/nile-combobox.css.js.map +1 -1
  29. package/dist/src/nile-combobox/nile-combobox.d.ts +33 -0
  30. package/dist/src/nile-combobox/nile-combobox.js +171 -34
  31. package/dist/src/nile-combobox/nile-combobox.js.map +1 -1
  32. package/dist/src/nile-combobox/renderer.d.ts +4 -0
  33. package/dist/src/nile-combobox/renderer.js +71 -2
  34. package/dist/src/nile-combobox/renderer.js.map +1 -1
  35. package/dist/src/nile-combobox/types.d.ts +30 -0
  36. package/dist/src/nile-combobox/types.js.map +1 -1
  37. package/dist/src/version.js +1 -1
  38. package/dist/src/version.js.map +1 -1
  39. package/dist/tsconfig.tsbuildinfo +1 -1
  40. package/package.json +1 -1
  41. package/src/nile-breadcrumb-item/nile-breadcrumb-item.ts +4 -2
  42. package/src/nile-combobox/group-utils.ts +157 -0
  43. package/src/nile-combobox/nile-combobox.css.ts +77 -4
  44. package/src/nile-combobox/nile-combobox.ts +223 -70
  45. package/src/nile-combobox/renderer.ts +119 -2
  46. package/src/nile-combobox/types.ts +36 -0
  47. package/vscode-html-custom-data.json +6 -1
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.cjs.js","sources":["../../../src/nile-combobox/renderer.ts"],"sourcesContent":["/**\n * Copyright Aquera Inc 2025\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { html, type TemplateResult } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { VirtualItem } from '@tanstack/virtual-core';\n\nexport class ComboboxRenderer {\n\n static renderVirtualizedOptions(\n virtualItems: VirtualItem[],\n totalSize: number,\n data: any[],\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n isLoading: boolean,\n allowHtmlLabel: boolean,\n measureElement: (el: Element | null) => void,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n ): TemplateResult {\n const offsetTop = virtualItems.length > 0 ? virtualItems[0].start : 0;\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div style=\"position:relative;height:${totalSize}px;width:100%;\">\n <div style=\"position:absolute;top:0;left:0;width:100%;transform:translateY(${offsetTop}px);\">\n ${repeat(\n virtualItems,\n (vItem) => vItem.key,\n (vItem) => {\n const item = data[vItem.index];\n return ComboboxRenderer.renderMeasuredItem(\n item, vItem.index, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, measureElement, getItemDescription, getItemPrefix,\n getItemSuffix, enableDescription,\n );\n },\n )}\n </div>\n </div>\n </div>\n `;\n }\n\n static renderPlainOptions(\n data: any[],\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n showNoResults: boolean,\n noResultsMessage: string,\n isLoading: boolean,\n onScroll: (e: Event) => void,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n noResultsSubtitle?: string,\n ): TemplateResult {\n if (showNoResults && !isLoading && data.length === 0) {\n return ComboboxRenderer.renderNoResults(noResultsMessage, noResultsSubtitle);\n }\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div class=\"combobox__options-plain\" @scroll=${onScroll}>\n ${data.map((item: any) =>\n ComboboxRenderer.renderItem(\n item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix, enableDescription,\n ),\n )}\n </div>\n </div>\n `;\n }\n\n static renderNoResults(noResultsMessage: string, noResultsSubtitle?: string): TemplateResult {\n return html`\n <div part=\"select-options\" class=\"combobox__options\">\n <div part=\"no-results\" class=\"combobox__no-results\">\n <div part=\"no-results-title\" class=\"combobox__no-results-title\">\n ${noResultsMessage || 'No result found'}\n </div>\n ${noResultsSubtitle\n ? html`<div part=\"no-results-subtitle\" class=\"combobox__no-results-subtitle\">${noResultsSubtitle}</div>`\n : ''}\n </div>\n </div>\n `;\n }\n\n static renderNoData(noDataMessage: string): TemplateResult {\n return html`\n <div part=\"select-options\" class=\"combobox__options\">\n <div part=\"no-data\" class=\"combobox__no-results\">\n <div part=\"no-data-title\" class=\"combobox__no-results-title\">\n ${noDataMessage || 'No data available'}\n </div>\n </div>\n </div>\n `;\n }\n\n private static renderMeasuredItem(\n item: any,\n index: number,\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n allowHtmlLabel: boolean,\n measureElement: (el: Element | null) => void,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n ): TemplateResult {\n if (!item) return html``;\n\n const optionValue = getItemValue(item);\n const displayText = getDisplayText(item);\n const isDisabled = item?.disabled || false;\n const className = item?.className;\n const description = getItemDescription ? getItemDescription(item) : (item?.description ?? '');\n const prefix = getItemPrefix ? getItemPrefix(item) : (item?.prefix ?? '');\n const suffix = getItemSuffix ? getItemSuffix(item) : (item?.suffix ?? '');\n\n let isSelected = false;\n if (multiple) {\n isSelected = Array.isArray(value) && value.some(v => String(v) === String(optionValue));\n } else {\n isSelected = String(Array.isArray(value) ? value[0] : value) === String(optionValue);\n }\n\n return html`\n <nile-option\n data-index=${index}\n value=${optionValue}\n .selected=${isSelected}\n .disabled=${isDisabled}\n .showCheckbox=${multiple}\n class=${classMap({\n option: enableDescription ?? false,\n [className ?? '']: !!className,\n })}\n .description=${description}\n .isDescriptionEnabled=${enableDescription}\n >\n ${unsafeHTML(prefix)}\n ${allowHtmlLabel ? unsafeHTML(displayText) : displayText}\n ${unsafeHTML(suffix)}\n </nile-option>\n `;\n }\n\n static renderItem(\n item: any,\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n ): TemplateResult {\n if (!item) return html``;\n\n const optionValue = getItemValue(item);\n const displayText = getDisplayText(item);\n const isDisabled = item?.disabled || false;\n const className = item?.className;\n const description = getItemDescription ? getItemDescription(item) : (item?.description ?? '');\n const prefix = getItemPrefix ? getItemPrefix(item) : (item?.prefix ?? '');\n const suffix = getItemSuffix ? getItemSuffix(item) : (item?.suffix ?? '');\n\n let isSelected = false;\n if (multiple) {\n isSelected = Array.isArray(value) && value.some(v => String(v) === String(optionValue));\n } else {\n isSelected = String(Array.isArray(value) ? value[0] : value) === String(optionValue);\n }\n\n return html`\n <nile-option\n value=${optionValue}\n .selected=${isSelected}\n .disabled=${isDisabled}\n .showCheckbox=${multiple}\n class=${classMap({\n option: enableDescription ?? false,\n [className ?? '']: !!className,\n })}\n .description=${description}\n .isDescriptionEnabled=${enableDescription}\n >\n ${unsafeHTML(prefix)}\n ${allowHtmlLabel ? unsafeHTML(displayText) : displayText}\n ${unsafeHTML(suffix)}\n </nile-option>\n `;\n }\n\n static renderVirtualizedGrid(\n virtualItems: VirtualItem[],\n totalSize: number,\n data: any[],\n value: string | string[],\n multiple: boolean,\n gridColumns: number,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n isLoading: boolean,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n gridColumnWidth?: number,\n ): TemplateResult {\n const offsetTop = virtualItems.length > 0 ? virtualItems[0].start : 0;\n const colTemplate = gridColumnWidth\n ? `repeat(${gridColumns}, ${gridColumnWidth}px)`\n : `repeat(${gridColumns}, 1fr)`;\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div style=\"position:relative;height:${totalSize}px;width:${gridColumnWidth ? 'max-content' : '100%'};min-width:100%;\">\n <div style=\"position:absolute;top:0;left:0;width:${gridColumnWidth ? 'max-content' : '100%'};min-width:100%;transform:translateY(${offsetTop}px);\">\n ${repeat(\n virtualItems,\n (vItem) => vItem.key,\n (vItem) => {\n const rowStart = vItem.index * gridColumns;\n const rowItems = data.slice(rowStart, rowStart + gridColumns);\n return html`\n <div class=\"combobox__grid-row\" style=\"display:grid;grid-template-columns:${colTemplate};gap:4px;\">\n ${rowItems.map((item: any) =>\n ComboboxRenderer.renderItem(\n item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix,\n ),\n )}\n </div>\n `;\n },\n )}\n </div>\n </div>\n </div>\n `;\n }\n\n static renderHorizontalGrid(\n virtualItems: VirtualItem[],\n totalSize: number,\n data: any[],\n value: string | string[],\n multiple: boolean,\n gridRows: number,\n gridColumnWidth: number,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n isLoading: boolean,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n ): TemplateResult {\n const offsetLeft = virtualItems.length > 0 ? virtualItems[0].start : 0;\n const rowHeight = 38;\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options combobox__options--horizontal ${isLoading ? 'loading' : ''}\"\n >\n <div style=\"position:relative;width:${totalSize}px;height:${rowHeight * gridRows}px;\">\n <div style=\"position:absolute;top:0;left:0;height:100%;display:flex;transform:translateX(${offsetLeft}px);\">\n ${repeat(\n virtualItems,\n (vCol) => vCol.key,\n (vCol) => {\n const colStart = vCol.index * gridRows;\n const colItems = data.slice(colStart, colStart + gridRows);\n return html`\n <div class=\"combobox__grid-col\" style=\"width:${gridColumnWidth}px;flex-shrink:0;display:flex;flex-direction:column;\">\n ${colItems.map((item: any) =>\n ComboboxRenderer.renderItem(\n item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix,\n ),\n )}\n </div>\n `;\n },\n )}\n </div>\n </div>\n </div>\n `;\n }\n\n static renderAddCustomOption(\n searchValue: string,\n multiple: boolean,\n ): TemplateResult {\n return html`\n <nile-option\n value=${searchValue}\n class=\"combobox__add-option\"\n .showCheckbox=${multiple}\n >\n + Add \"${searchValue}\"\n </nile-option>\n `;\n }\n\n static shouldUseVirtualizer(data: any[], gridColumns = 1): boolean {\n if (gridColumns > 1) return true;\n return data.length >= 5;\n }\n}\n"],"names":["ComboboxRenderer","renderVirtualizedOptions","virtualItems","totalSize","data","value","multiple","getDisplayText","getItemValue","isLoading","allowHtmlLabel","measureElement","getItemDescription","getItemPrefix","getItemSuffix","enableDescription","offsetTop","length","start","html","_templateObject","_taggedTemplateLiteral","repeat","vItem","key","item","index","renderMeasuredItem","renderPlainOptions","showNoResults","noResultsMessage","onScroll","noResultsSubtitle","renderNoResults","_templateObject2","map","renderItem","_templateObject3","_templateObject4","renderNoData","noDataMessage","_templateObject5","_s$description","_s$prefix","_s$suffix","_templateObject6","optionValue","displayText","isDisabled","disabled","className","description","prefix","suffix","isSelected","Array","isArray","some","v","String","_templateObject7","classMap","option","unsafeHTML","_s$description2","_s$prefix2","_s$suffix2","_templateObject8","_templateObject9","renderVirtualizedGrid","gridColumns","gridColumnWidth","colTemplate","_templateObject10","rowStart","rowItems","slice","_templateObject11","renderHorizontalGrid","gridRows","offsetLeft","_templateObject12","vCol","colStart","colItems","_templateObject13","renderAddCustomOption","searchValue","_templateObject14","shouldUseVirtualizer","arguments","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"renderer.cjs.js","sources":["../../../src/nile-combobox/renderer.ts"],"sourcesContent":["/**\n * Copyright Aquera Inc 2025\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { html, type TemplateResult } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport type { VirtualItem } from '@tanstack/virtual-core';\nimport type { ComboboxRow, ComboboxHeaderRow } from './types';\n\nexport class ComboboxRenderer {\n\n static renderGroupHeader(row: ComboboxHeaderRow): TemplateResult {\n return html`\n <div\n part=\"group-header\"\n class=\"combobox__group-header\"\n role=\"presentation\"\n data-group-id=${row.id}\n style=${`--group-depth:${row.depth}`}\n >\n ${row.prefix\n ? html`<nile-icon\n class=\"combobox__group-prefix\"\n name=${row.prefix}\n size=\"14\"\n method=\"fill\"\n ></nile-icon>`\n : ''}\n <span class=\"combobox__group-label\">${row.label}</span>\n </div>\n `;\n }\n\n static renderRowsPlain(\n rows: ComboboxRow[],\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n showNoResults: boolean,\n noResultsMessage: string,\n isLoading: boolean,\n onScroll: (e: Event) => void,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n noResultsSubtitle?: string,\n ): TemplateResult {\n if (showNoResults && !isLoading && rows.length === 0) {\n return ComboboxRenderer.renderNoResults(noResultsMessage, noResultsSubtitle);\n }\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div class=\"combobox__options-plain\" @scroll=${onScroll}>\n ${rows.map((row) =>\n row.kind === 'header'\n ? ComboboxRenderer.renderGroupHeader(row)\n : ComboboxRenderer.renderItem(\n row.item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix, enableDescription,\n ),\n )}\n </div>\n </div>\n `;\n }\n\n static renderRowsVirtualized(\n virtualItems: VirtualItem[],\n totalSize: number,\n rows: ComboboxRow[],\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n isLoading: boolean,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n ): TemplateResult {\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div style=\"position:relative;height:${totalSize}px;width:100%;\">\n ${repeat(\n virtualItems,\n (vItem) => vItem.key,\n (vItem) => {\n const row = rows[vItem.index];\n if (!row) return html``;\n const posStyle =\n `position:absolute;top:0;left:0;right:0;` +\n `transform:translateY(${vItem.start}px);` +\n `height:${vItem.size}px;`;\n if (row.kind === 'header') {\n return html`\n <div style=${posStyle} class=\"combobox__group-header-slot\">\n ${ComboboxRenderer.renderGroupHeader(row)}\n </div>\n `;\n }\n return html`\n <div style=${posStyle}>\n ${ComboboxRenderer.renderItem(\n row.item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix, enableDescription,\n )}\n </div>\n `;\n },\n )}\n </div>\n </div>\n `;\n }\n\n static renderVirtualizedOptions(\n virtualItems: VirtualItem[],\n totalSize: number,\n data: any[],\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n isLoading: boolean,\n allowHtmlLabel: boolean,\n measureElement: (el: Element | null) => void,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n ): TemplateResult {\n const offsetTop = virtualItems.length > 0 ? virtualItems[0].start : 0;\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div style=\"position:relative;height:${totalSize}px;width:100%;\">\n <div style=\"position:absolute;top:0;left:0;width:100%;transform:translateY(${offsetTop}px);\">\n ${repeat(\n virtualItems,\n (vItem) => vItem.key,\n (vItem) => {\n const item = data[vItem.index];\n return ComboboxRenderer.renderMeasuredItem(\n item, vItem.index, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix, enableDescription,\n );\n },\n )}\n </div>\n </div>\n </div>\n `;\n }\n\n static renderPlainOptions(\n data: any[],\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n showNoResults: boolean,\n noResultsMessage: string,\n isLoading: boolean,\n onScroll: (e: Event) => void,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n noResultsSubtitle?: string,\n ): TemplateResult {\n if (showNoResults && !isLoading && data.length === 0) {\n return ComboboxRenderer.renderNoResults(noResultsMessage, noResultsSubtitle);\n }\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div class=\"combobox__options-plain\" @scroll=${onScroll}>\n ${data.map((item: any) =>\n ComboboxRenderer.renderItem(\n item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix, enableDescription,\n ),\n )}\n </div>\n </div>\n `;\n }\n\n static renderNoResults(noResultsMessage: string, noResultsSubtitle?: string): TemplateResult {\n return html`\n <div part=\"select-options\" class=\"combobox__options\">\n <div part=\"no-results\" class=\"combobox__no-results\">\n <div part=\"no-results-title\" class=\"combobox__no-results-title\">\n ${noResultsMessage || 'No result found'}\n </div>\n ${noResultsSubtitle\n ? html`<div part=\"no-results-subtitle\" class=\"combobox__no-results-subtitle\">${noResultsSubtitle}</div>`\n : ''}\n </div>\n </div>\n `;\n }\n\n static renderNoData(noDataMessage: string): TemplateResult {\n return html`\n <div part=\"select-options\" class=\"combobox__options\">\n <div part=\"no-data\" class=\"combobox__no-results\">\n <div part=\"no-data-title\" class=\"combobox__no-results-title\">\n ${noDataMessage || 'No data available'}\n </div>\n </div>\n </div>\n `;\n }\n\n private static renderMeasuredItem(\n item: any,\n index: number,\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n ): TemplateResult {\n if (!item) return html``;\n\n const optionValue = getItemValue(item);\n const displayText = getDisplayText(item);\n const isDisabled = item?.disabled || false;\n const className = item?.className;\n const description = getItemDescription ? getItemDescription(item) : (item?.description ?? '');\n const prefix = getItemPrefix ? getItemPrefix(item) : (item?.prefix ?? '');\n const suffix = getItemSuffix ? getItemSuffix(item) : (item?.suffix ?? '');\n\n let isSelected = false;\n if (multiple) {\n isSelected = Array.isArray(value) && value.some(v => String(v) === String(optionValue));\n } else {\n isSelected = String(Array.isArray(value) ? value[0] : value) === String(optionValue);\n }\n\n return html`\n <nile-option\n data-index=${index}\n value=${optionValue}\n .selected=${isSelected}\n .disabled=${isDisabled}\n .showCheckbox=${multiple}\n class=${classMap({\n option: enableDescription ?? false,\n [className ?? '']: !!className,\n })}\n .description=${description}\n .isDescriptionEnabled=${enableDescription}\n >\n ${unsafeHTML(prefix)}\n ${allowHtmlLabel ? unsafeHTML(displayText) : displayText}\n ${unsafeHTML(suffix)}\n </nile-option>\n `;\n }\n\n static renderItem(\n item: any,\n value: string | string[],\n multiple: boolean,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n enableDescription?: boolean,\n ): TemplateResult {\n if (!item) return html``;\n\n const optionValue = getItemValue(item);\n const displayText = getDisplayText(item);\n const isDisabled = item?.disabled || false;\n const className = item?.className;\n const description = getItemDescription ? getItemDescription(item) : (item?.description ?? '');\n const prefix = getItemPrefix ? getItemPrefix(item) : (item?.prefix ?? '');\n const suffix = getItemSuffix ? getItemSuffix(item) : (item?.suffix ?? '');\n\n let isSelected = false;\n if (multiple) {\n isSelected = Array.isArray(value) && value.some(v => String(v) === String(optionValue));\n } else {\n isSelected = String(Array.isArray(value) ? value[0] : value) === String(optionValue);\n }\n\n return html`\n <nile-option\n value=${optionValue}\n .selected=${isSelected}\n .disabled=${isDisabled}\n .showCheckbox=${multiple}\n class=${classMap({\n option: enableDescription ?? false,\n [className ?? '']: !!className,\n })}\n .description=${description}\n .isDescriptionEnabled=${enableDescription}\n >\n ${unsafeHTML(prefix)}\n ${allowHtmlLabel ? unsafeHTML(displayText) : displayText}\n ${unsafeHTML(suffix)}\n </nile-option>\n `;\n }\n\n static renderVirtualizedGrid(\n virtualItems: VirtualItem[],\n totalSize: number,\n data: any[],\n value: string | string[],\n multiple: boolean,\n gridColumns: number,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n isLoading: boolean,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n gridColumnWidth?: number,\n ): TemplateResult {\n const offsetTop = virtualItems.length > 0 ? virtualItems[0].start : 0;\n const colTemplate = gridColumnWidth\n ? `repeat(${gridColumns}, ${gridColumnWidth}px)`\n : `repeat(${gridColumns}, 1fr)`;\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options ${isLoading ? 'loading' : ''}\"\n >\n <div style=\"position:relative;height:${totalSize}px;width:${gridColumnWidth ? 'max-content' : '100%'};min-width:100%;\">\n <div style=\"position:absolute;top:0;left:0;width:${gridColumnWidth ? 'max-content' : '100%'};min-width:100%;transform:translateY(${offsetTop}px);\">\n ${repeat(\n virtualItems,\n (vItem) => vItem.key,\n (vItem) => {\n const rowStart = vItem.index * gridColumns;\n const rowItems = data.slice(rowStart, rowStart + gridColumns);\n return html`\n <div class=\"combobox__grid-row\" style=\"display:grid;grid-template-columns:${colTemplate};gap:4px;\">\n ${rowItems.map((item: any) =>\n ComboboxRenderer.renderItem(\n item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix,\n ),\n )}\n </div>\n `;\n },\n )}\n </div>\n </div>\n </div>\n `;\n }\n\n static renderHorizontalGrid(\n virtualItems: VirtualItem[],\n totalSize: number,\n data: any[],\n value: string | string[],\n multiple: boolean,\n gridRows: number,\n gridColumnWidth: number,\n getDisplayText: (item: any) => string,\n getItemValue: (item: any) => string,\n isLoading: boolean,\n allowHtmlLabel: boolean,\n getItemDescription?: (item: any) => string,\n getItemPrefix?: (item: any) => string,\n getItemSuffix?: (item: any) => string,\n ): TemplateResult {\n const offsetLeft = virtualItems.length > 0 ? virtualItems[0].start : 0;\n const rowHeight = 38;\n\n return html`\n <div\n part=\"select-options\"\n class=\"combobox__options combobox__options--horizontal ${isLoading ? 'loading' : ''}\"\n >\n <div style=\"position:relative;width:${totalSize}px;height:${rowHeight * gridRows}px;\">\n <div style=\"position:absolute;top:0;left:0;height:100%;display:flex;transform:translateX(${offsetLeft}px);\">\n ${repeat(\n virtualItems,\n (vCol) => vCol.key,\n (vCol) => {\n const colStart = vCol.index * gridRows;\n const colItems = data.slice(colStart, colStart + gridRows);\n return html`\n <div class=\"combobox__grid-col\" style=\"width:${gridColumnWidth}px;flex-shrink:0;display:flex;flex-direction:column;\">\n ${colItems.map((item: any) =>\n ComboboxRenderer.renderItem(\n item, value, multiple, getDisplayText, getItemValue,\n allowHtmlLabel, getItemDescription, getItemPrefix,\n getItemSuffix,\n ),\n )}\n </div>\n `;\n },\n )}\n </div>\n </div>\n </div>\n `;\n }\n\n static renderAddCustomOption(\n searchValue: string,\n multiple: boolean,\n ): TemplateResult {\n return html`\n <nile-option\n value=${searchValue}\n class=\"combobox__add-option\"\n .showCheckbox=${multiple}\n >\n + Add \"${searchValue}\"\n </nile-option>\n `;\n }\n\n static shouldUseVirtualizer(data: any[], gridColumns = 1): boolean {\n if (gridColumns > 1) return true;\n return data.length >= 5;\n }\n}\n"],"names":["ComboboxRenderer","s","_classCallCheck","_createClass","key","value","renderGroupHeader","row","html","_templateObject","_taggedTemplateLiteral","id","depth","prefix","_templateObject2","label","renderRowsPlain","rows","multiple","getDisplayText","getItemValue","showNoResults","noResultsMessage","isLoading","onScroll","allowHtmlLabel","getItemDescription","getItemPrefix","getItemSuffix","enableDescription","noResultsSubtitle","length","renderNoResults","_templateObject3","map","kind","renderItem","item","renderRowsVirtualized","virtualItems","totalSize","_templateObject4","repeat","vItem","index","_templateObject5","posStyle","concat","start","size","_templateObject6","_templateObject7","renderVirtualizedOptions","data","measureElement","offsetTop","_templateObject8","renderMeasuredItem","renderPlainOptions","_templateObject9","_templateObject10","_templateObject11","renderNoData","noDataMessage","_templateObject12","_templateObject13","optionValue","displayText","isDisabled","disabled","className","description","_e$description","_e$prefix","suffix","isSelected","Array","isArray","some","v","String","_templateObject14","classMap","option","unsafeHTML","_e$description2","_e$prefix2","_e$suffix2","_templateObject15","_templateObject16","renderVirtualizedGrid","gridColumns","gridColumnWidth","colTemplate","_templateObject17","rowStart","rowItems","slice","_templateObject18","renderHorizontalGrid","gridRows","offsetLeft","_templateObject19","vCol","colStart","colItems","_templateObject20","renderAddCustomOption","searchValue","_templateObject21","shouldUseVirtualizer","arguments","undefined"],"mappings":"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"}
@@ -1,105 +1,147 @@
1
- import{html as t}from"lit";import{unsafeHTML as i}from"lit/directives/unsafe-html.js";import{classMap as o}from"lit/directives/class-map.js";import{repeat as s}from"lit/directives/repeat.js";class e{static renderVirtualizedOptions(i,o,r,n,l,a,d,c,p,$,v,b,u,m){const x=i.length>0?i[0].start:0;return t`
1
+ import{html as t}from"lit";import{unsafeHTML as o}from"lit/directives/unsafe-html.js";import{classMap as i}from"lit/directives/class-map.js";import{repeat as e}from"lit/directives/repeat.js";class s{static renderGroupHeader(o){return t`
2
+ <div
3
+ part="group-header"
4
+ class="combobox__group-header"
5
+ role="presentation"
6
+ data-group-id=${o.id}
7
+ style=${`--group-depth:${o.depth}`}
8
+ >
9
+ ${o.prefix?t`<nile-icon
10
+ class="combobox__group-prefix"
11
+ name=${o.prefix}
12
+ size="14"
13
+ method="fill"
14
+ ></nile-icon>`:""}
15
+ <span class="combobox__group-label">${o.label}</span>
16
+ </div>
17
+ `}static renderRowsPlain(o,i,e,r,n,l,a,d,p,c,$,v,b,u,m){return l&&!d&&0===o.length?s.renderNoResults(a,m):t`
2
18
  <div
3
19
  part="select-options"
4
- class="combobox__options ${c?"loading":""}"
20
+ class="combobox__options ${d?"loading":""}"
21
+ >
22
+ <div class="combobox__options-plain" @scroll=${p}>
23
+ ${o.map((t=>"header"===t.kind?s.renderGroupHeader(t):s.renderItem(t.item,i,e,r,n,c,$,v,b,u)))}
24
+ </div>
25
+ </div>
26
+ `}static renderRowsVirtualized(o,i,r,n,l,a,d,p,c,$,v,b,u){return t`
27
+ <div
28
+ part="select-options"
29
+ class="combobox__options ${p?"loading":""}"
30
+ >
31
+ <div style="position:relative;height:${i}px;width:100%;">
32
+ ${e(o,(t=>t.key),(o=>{const i=r[o.index];if(!i)return t``;const e=`position:absolute;top:0;left:0;right:0;transform:translateY(${o.start}px);height:${o.size}px;`;return"header"===i.kind?t`
33
+ <div style=${e} class="combobox__group-header-slot">
34
+ ${s.renderGroupHeader(i)}
35
+ </div>
36
+ `:t`
37
+ <div style=${e}>
38
+ ${s.renderItem(i.item,n,l,a,d,c,$,v,b,u)}
39
+ </div>
40
+ `}))}
41
+ </div>
42
+ </div>
43
+ `}static renderVirtualizedOptions(o,i,r,n,l,a,d,p,c,$,v,b,u,m){const x=o.length>0?o[0].start:0;return t`
44
+ <div
45
+ part="select-options"
46
+ class="combobox__options ${p?"loading":""}"
5
47
  >
6
- <div style="position:relative;height:${o}px;width:100%;">
48
+ <div style="position:relative;height:${i}px;width:100%;">
7
49
  <div style="position:absolute;top:0;left:0;width:100%;transform:translateY(${x}px);">
8
- ${s(i,(t=>t.key),(t=>{const i=r[t.index];return e.renderMeasuredItem(i,t.index,n,l,a,d,p,$,v,b,u,m)}))}
50
+ ${e(o,(t=>t.key),(t=>{const o=r[t.index];return s.renderMeasuredItem(o,t.index,n,l,a,d,c,v,b,u,m)}))}
9
51
  </div>
10
52
  </div>
11
53
  </div>
12
- `}static renderPlainOptions(i,o,s,r,n,l,a,d,c,p,$,v,b,u,m){return l&&!d&&0===i.length?e.renderNoResults(a,m):t`
54
+ `}static renderPlainOptions(o,i,e,r,n,l,a,d,p,c,$,v,b,u,m){return l&&!d&&0===o.length?s.renderNoResults(a,m):t`
13
55
  <div
14
56
  part="select-options"
15
57
  class="combobox__options ${d?"loading":""}"
16
58
  >
17
- <div class="combobox__options-plain" @scroll=${c}>
18
- ${i.map((t=>e.renderItem(t,o,s,r,n,p,$,v,b,u)))}
59
+ <div class="combobox__options-plain" @scroll=${p}>
60
+ ${o.map((t=>s.renderItem(t,i,e,r,n,c,$,v,b,u)))}
19
61
  </div>
20
62
  </div>
21
- `}static renderNoResults(i,o){return t`
63
+ `}static renderNoResults(o,i){return t`
22
64
  <div part="select-options" class="combobox__options">
23
65
  <div part="no-results" class="combobox__no-results">
24
66
  <div part="no-results-title" class="combobox__no-results-title">
25
- ${i||"No result found"}
67
+ ${o||"No result found"}
26
68
  </div>
27
- ${o?t`<div part="no-results-subtitle" class="combobox__no-results-subtitle">${o}</div>`:""}
69
+ ${i?t`<div part="no-results-subtitle" class="combobox__no-results-subtitle">${i}</div>`:""}
28
70
  </div>
29
71
  </div>
30
- `}static renderNoData(i){return t`
72
+ `}static renderNoData(o){return t`
31
73
  <div part="select-options" class="combobox__options">
32
74
  <div part="no-data" class="combobox__no-results">
33
75
  <div part="no-data-title" class="combobox__no-results-title">
34
- ${i||"No data available"}
76
+ ${o||"No data available"}
35
77
  </div>
36
78
  </div>
37
79
  </div>
38
- `}static renderMeasuredItem(s,e,r,n,l,a,d,c,p,$,v,b){if(!s)return t``;const u=a(s),m=l(s),x=s?.disabled||!1,_=s?.className,h=p?p(s):s?.description??"",g=$?$(s):s?.prefix??"",f=v?v(s):s?.suffix??"";let y=!1;return y=n?Array.isArray(r)&&r.some((t=>String(t)===String(u))):String(Array.isArray(r)?r[0]:r)===String(u),t`
80
+ `}static renderMeasuredItem(e,s,r,n,l,a,d,p,c,$,v){if(!e)return t``;const b=a(e),u=l(e),m=e?.disabled||!1,x=e?.className,_=p?p(e):e?.description??"",h=c?c(e):e?.prefix??"",g=$?$(e):e?.suffix??"";let f=!1;return f=n?Array.isArray(r)&&r.some((t=>String(t)===String(b))):String(Array.isArray(r)?r[0]:r)===String(b),t`
39
81
  <nile-option
40
- data-index=${e}
41
- value=${u}
42
- .selected=${y}
43
- .disabled=${x}
82
+ data-index=${s}
83
+ value=${b}
84
+ .selected=${f}
85
+ .disabled=${m}
44
86
  .showCheckbox=${n}
45
- class=${o({option:b??!1,[_??""]:!!_})}
46
- .description=${h}
47
- .isDescriptionEnabled=${b}
87
+ class=${i({option:v??!1,[x??""]:!!x})}
88
+ .description=${_}
89
+ .isDescriptionEnabled=${v}
48
90
  >
49
- ${i(g)}
50
- ${d?i(m):m}
51
- ${i(f)}
91
+ ${o(h)}
92
+ ${d?o(u):u}
93
+ ${o(g)}
52
94
  </nile-option>
53
- `}static renderItem(s,e,r,n,l,a,d,c,p,$){if(!s)return t``;const v=l(s),b=n(s),u=s?.disabled||!1,m=s?.className,x=d?d(s):s?.description??"",_=c?c(s):s?.prefix??"",h=p?p(s):s?.suffix??"";let g=!1;return g=r?Array.isArray(e)&&e.some((t=>String(t)===String(v))):String(Array.isArray(e)?e[0]:e)===String(v),t`
95
+ `}static renderItem(e,s,r,n,l,a,d,p,c,$){if(!e)return t``;const v=l(e),b=n(e),u=e?.disabled||!1,m=e?.className,x=d?d(e):e?.description??"",_=p?p(e):e?.prefix??"",h=c?c(e):e?.suffix??"";let g=!1;return g=r?Array.isArray(s)&&s.some((t=>String(t)===String(v))):String(Array.isArray(s)?s[0]:s)===String(v),t`
54
96
  <nile-option
55
97
  value=${v}
56
98
  .selected=${g}
57
99
  .disabled=${u}
58
100
  .showCheckbox=${r}
59
- class=${o({option:$??!1,[m??""]:!!m})}
101
+ class=${i({option:$??!1,[m??""]:!!m})}
60
102
  .description=${x}
61
103
  .isDescriptionEnabled=${$}
62
104
  >
63
- ${i(_)}
64
- ${a?i(b):b}
65
- ${i(h)}
105
+ ${o(_)}
106
+ ${a?o(b):b}
107
+ ${o(h)}
66
108
  </nile-option>
67
- `}static renderVirtualizedGrid(i,o,r,n,l,a,d,c,p,$,v,b,u,m){const x=i.length>0?i[0].start:0,_=m?`repeat(${a}, ${m}px)`:`repeat(${a}, 1fr)`;return t`
109
+ `}static renderVirtualizedGrid(o,i,r,n,l,a,d,p,c,$,v,b,u,m){const x=o.length>0?o[0].start:0,_=m?`repeat(${a}, ${m}px)`:`repeat(${a}, 1fr)`;return t`
68
110
  <div
69
111
  part="select-options"
70
- class="combobox__options ${p?"loading":""}"
112
+ class="combobox__options ${c?"loading":""}"
71
113
  >
72
- <div style="position:relative;height:${o}px;width:${m?"max-content":"100%"};min-width:100%;">
114
+ <div style="position:relative;height:${i}px;width:${m?"max-content":"100%"};min-width:100%;">
73
115
  <div style="position:absolute;top:0;left:0;width:${m?"max-content":"100%"};min-width:100%;transform:translateY(${x}px);">
74
- ${s(i,(t=>t.key),(i=>{const o=i.index*a,s=r.slice(o,o+a);return t`
116
+ ${e(o,(t=>t.key),(o=>{const i=o.index*a,e=r.slice(i,i+a);return t`
75
117
  <div class="combobox__grid-row" style="display:grid;grid-template-columns:${_};gap:4px;">
76
- ${s.map((t=>e.renderItem(t,n,l,d,c,$,v,b,u)))}
118
+ ${e.map((t=>s.renderItem(t,n,l,d,p,$,v,b,u)))}
77
119
  </div>
78
120
  `}))}
79
121
  </div>
80
122
  </div>
81
123
  </div>
82
- `}static renderHorizontalGrid(i,o,r,n,l,a,d,c,p,$,v,b,u,m){const x=i.length>0?i[0].start:0;return t`
124
+ `}static renderHorizontalGrid(o,i,r,n,l,a,d,p,c,$,v,b,u,m){const x=o.length>0?o[0].start:0;return t`
83
125
  <div
84
126
  part="select-options"
85
127
  class="combobox__options combobox__options--horizontal ${$?"loading":""}"
86
128
  >
87
- <div style="position:relative;width:${o}px;height:${38*a}px;">
129
+ <div style="position:relative;width:${i}px;height:${38*a}px;">
88
130
  <div style="position:absolute;top:0;left:0;height:100%;display:flex;transform:translateX(${x}px);">
89
- ${s(i,(t=>t.key),(i=>{const o=i.index*a,s=r.slice(o,o+a);return t`
131
+ ${e(o,(t=>t.key),(o=>{const i=o.index*a,e=r.slice(i,i+a);return t`
90
132
  <div class="combobox__grid-col" style="width:${d}px;flex-shrink:0;display:flex;flex-direction:column;">
91
- ${s.map((t=>e.renderItem(t,n,l,c,p,v,b,u,m)))}
133
+ ${e.map((t=>s.renderItem(t,n,l,p,c,v,b,u,m)))}
92
134
  </div>
93
135
  `}))}
94
136
  </div>
95
137
  </div>
96
138
  </div>
97
- `}static renderAddCustomOption(i,o){return t`
139
+ `}static renderAddCustomOption(o,i){return t`
98
140
  <nile-option
99
- value=${i}
141
+ value=${o}
100
142
  class="combobox__add-option"
101
- .showCheckbox=${o}
143
+ .showCheckbox=${i}
102
144
  >
103
- + Add "${i}"
145
+ + Add "${o}"
104
146
  </nile-option>
105
- `}static shouldUseVirtualizer(t,i=1){return i>1||t.length>=5}}export{e as C};
147
+ `}static shouldUseVirtualizer(t,o=1){return o>1||t.length>=5}}export{s as C};
@@ -44,13 +44,15 @@ let NileBreadcrumbItem = class NileBreadcrumbItem extends NileElement {
44
44
  }
45
45
  render() {
46
46
  return html `
47
- <slot
47
+ <div part="item"
48
48
  class=${classMap({
49
49
  'nile-breadcrumb-item__slot-text': !this.isLast,
50
50
  'nile-breadcrumb-item__last-slot-text': this.isLast,
51
51
  })}
52
52
  @click=${this.handleClick}
53
- ></slot>
53
+ >
54
+ <slot></slot>
55
+ </div>
54
56
  <nile-icon
55
57
  name=${this.separator}
56
58
  aria-label=${this.separator}
@@ -1 +1 @@
1
- {"version":3,"file":"nile-breadcrumb-item.js","sourceRoot":"","sources":["../../../src/nile-breadcrumb-item/nile-breadcrumb-item.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH,OAAO,EAEL,IAAI,GAGL,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD;;;;;GAKG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,WAAW;IAA5C;;QASY,WAAM,GAAG,KAAK,CAAC;QAEhC,gBAAgB;QAEhB,qBAAqB;QAErB;;;WAGG;QAEyB,cAAS,GAAG,4DAA4D,CAAC;QAgCrG,gBAAgB;IAClB,CAAC;IApDC;;;OAGG;IACI,MAAM,KAAK,MAAM;QACtB,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAeO,WAAW;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAA;;gBAEC,QAAQ,CAAC;YACf,iCAAiC,EAAE,CAAC,IAAI,CAAC,MAAM;YAC/C,sCAAsC,EAAE,IAAI,CAAC,MAAM;SACpD,CAAC;iBACO,IAAI,CAAC,WAAW;;;eAGlB,IAAI,CAAC,SAAS;qBACR,IAAI,CAAC,SAAS;;;gBAGnB,QAAQ,CAAC;YACf,6BAA6B,EAAE,IAAI;YACnC,oCAAoC,EAAE,IAAI,CAAC,MAAM;SAClD,CAAC;;;KAGL,CAAC;IACJ,CAAC;CAGF,CAAA;AA5CkB;IAAhB,KAAK,EAAE;kDAAwB;AAWJ;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAA0E;AApB1F,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAqD9B;;AAED,eAAe,kBAAkB,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n LitElement,\n html,\n CSSResultArray,\n TemplateResult,\n} from 'lit';\nimport { customElement, state, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styles } from './nile-breadcrumb-item.css';\nimport NileElement from '../internal/nile-element';\n/**\n * Nile BreadCrumb Item component.\n *\n * @tag nile-breadcrumb-item\n *\n */\n@customElement('nile-breadcrumb-item')\nexport class NileBreadcrumbItem extends NileElement {\n /**\n * The styles for BreadcrumbItem\n * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`\n */\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n @state() private isLast = false;\n\n /* #endregion */\n\n /* #region Methods */\n\n /**\n * Render method\n * @slot This is a slot test\n */\n\n @property({ type: String }) separator = 'var(--nile-icon-arrow-right, var(--ng-icon-chevron-right))';\n\n private handleClick() {\n if (this.isLast) {\n return;\n }\n this.emit('nile-click-item');\n }\n\n public render(): TemplateResult {\n return html`\n <slot\n class=${classMap({\n 'nile-breadcrumb-item__slot-text': !this.isLast,\n 'nile-breadcrumb-item__last-slot-text': this.isLast,\n })}\n @click=${this.handleClick}\n ></slot>\n <nile-icon\n name=${this.separator}\n aria-label=${this.separator}\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=\"var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400))\"\n class=${classMap({\n 'nile-breadcrumb-item__arrow': true,\n 'nile-breadcrumb-item__arrow-hidden': this.isLast,\n })}\n size=\"14\"\n ></nile-icon>\n `;\n }\n\n /* #endregion */\n}\n\nexport default NileBreadcrumbItem;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-breadcrumb-item': NileBreadcrumbItem;\n }\n}\n"]}
1
+ {"version":3,"file":"nile-breadcrumb-item.js","sourceRoot":"","sources":["../../../src/nile-breadcrumb-item/nile-breadcrumb-item.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH,OAAO,EAEL,IAAI,GAGL,MAAM,KAAK,CAAC;AACb,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD;;;;;GAKG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,WAAW;IAA5C;;QASY,WAAM,GAAG,KAAK,CAAC;QAEhC,gBAAgB;QAEhB,qBAAqB;QAErB;;;WAGG;QAEyB,cAAS,GAAG,4DAA4D,CAAC;QAkCrG,gBAAgB;IAClB,CAAC;IAtDC;;;OAGG;IACI,MAAM,KAAK,MAAM;QACtB,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAeO,WAAW;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAA;;gBAEC,QAAQ,CAAC;YACf,iCAAiC,EAAE,CAAC,IAAI,CAAC,MAAM;YAC/C,sCAAsC,EAAE,IAAI,CAAC,MAAM;SACpD,CAAC;iBACO,IAAI,CAAC,WAAW;;;;;eAKlB,IAAI,CAAC,SAAS;qBACR,IAAI,CAAC,SAAS;;;gBAGnB,QAAQ,CAAC;YACf,6BAA6B,EAAE,IAAI;YACnC,oCAAoC,EAAE,IAAI,CAAC,MAAM;SAClD,CAAC;;;KAGL,CAAC;IACJ,CAAC;CAGF,CAAA;AA9CkB;IAAhB,KAAK,EAAE;kDAAwB;AAWJ;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qDAA0E;AApB1F,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAuD9B;;AAED,eAAe,kBAAkB,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n LitElement,\n html,\n CSSResultArray,\n TemplateResult,\n} from 'lit';\nimport { customElement, state, property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { styles } from './nile-breadcrumb-item.css';\nimport NileElement from '../internal/nile-element';\n/**\n * Nile BreadCrumb Item component.\n *\n * @tag nile-breadcrumb-item\n *\n */\n@customElement('nile-breadcrumb-item')\nexport class NileBreadcrumbItem extends NileElement {\n /**\n * The styles for BreadcrumbItem\n * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`\n */\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n @state() private isLast = false;\n\n /* #endregion */\n\n /* #region Methods */\n\n /**\n * Render method\n * @slot This is a slot test\n */\n\n @property({ type: String }) separator = 'var(--nile-icon-arrow-right, var(--ng-icon-chevron-right))';\n\n private handleClick() {\n if (this.isLast) {\n return;\n }\n this.emit('nile-click-item');\n }\n\n public render(): TemplateResult {\n return html`\n <div part=\"item\"\n class=${classMap({\n 'nile-breadcrumb-item__slot-text': !this.isLast,\n 'nile-breadcrumb-item__last-slot-text': this.isLast,\n })}\n @click=${this.handleClick}\n >\n <slot></slot>\n </div>\n <nile-icon\n name=${this.separator}\n aria-label=${this.separator}\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=\"var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400))\"\n class=${classMap({\n 'nile-breadcrumb-item__arrow': true,\n 'nile-breadcrumb-item__arrow-hidden': this.isLast,\n })}\n size=\"14\"\n ></nile-icon>\n `;\n }\n\n /* #endregion */\n}\n\nexport default NileBreadcrumbItem;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-breadcrumb-item': NileBreadcrumbItem;\n }\n}\n"]}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright Aquera Inc 2025
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import type { ComboboxDataItem, ComboboxGroupItem, ComboboxRow, ComboboxOptionRow } from './types';
8
+ export declare function isGroup(item: any): item is ComboboxGroupItem;
9
+ export declare function hasGroups(data: any[]): boolean;
10
+ export declare function countOptionsDeep(group: ComboboxGroupItem): number;
11
+ export declare function flattenRows(data: ComboboxDataItem[]): ComboboxRow[];
12
+ export declare function getOptionRows(rows: ComboboxRow[]): ComboboxOptionRow[];
13
+ /**
14
+ * Filter rows by a query.
15
+ *
16
+ * Rules:
17
+ * - An option row is kept if its searchText matches.
18
+ * - If a group's label matches, the entire subtree (header + all descendant
19
+ * options + nested headers) is kept.
20
+ * - Otherwise a header is kept only if at least one descendant option matches.
21
+ * - Empty groups (no surviving descendants) are dropped.
22
+ */
23
+ export declare function filterRows(data: ComboboxDataItem[], query: string, getSearchText: (item: any) => string): {
24
+ rows: ComboboxRow[];
25
+ visibleOptionCount: number;
26
+ };
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Copyright Aquera Inc 2025
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export function isGroup(item) {
8
+ return !!item && typeof item === 'object' && item.type === 'group' && Array.isArray(item.options);
9
+ }
10
+ export function hasGroups(data) {
11
+ if (!Array.isArray(data))
12
+ return false;
13
+ for (const item of data) {
14
+ if (isGroup(item))
15
+ return true;
16
+ }
17
+ return false;
18
+ }
19
+ export function countOptionsDeep(group) {
20
+ let n = 0;
21
+ for (const child of group.options) {
22
+ if (isGroup(child))
23
+ n += countOptionsDeep(child);
24
+ else
25
+ n += 1;
26
+ }
27
+ return n;
28
+ }
29
+ export function flattenRows(data) {
30
+ const rows = [];
31
+ const walk = (items, depth, parentIds) => {
32
+ for (const item of items) {
33
+ if (isGroup(item)) {
34
+ rows.push({
35
+ kind: 'header',
36
+ id: item.id,
37
+ label: item.label,
38
+ prefix: item.prefix,
39
+ depth,
40
+ optionCount: countOptionsDeep(item),
41
+ });
42
+ walk(item.options, depth + 1, [...parentIds, item.id]);
43
+ }
44
+ else {
45
+ rows.push({
46
+ kind: 'option',
47
+ item: item,
48
+ depth,
49
+ parentIds,
50
+ });
51
+ }
52
+ }
53
+ };
54
+ walk(Array.isArray(data) ? data : [], 0, []);
55
+ return rows;
56
+ }
57
+ export function getOptionRows(rows) {
58
+ const out = [];
59
+ for (const r of rows)
60
+ if (r.kind === 'option')
61
+ out.push(r);
62
+ return out;
63
+ }
64
+ /**
65
+ * Filter rows by a query.
66
+ *
67
+ * Rules:
68
+ * - An option row is kept if its searchText matches.
69
+ * - If a group's label matches, the entire subtree (header + all descendant
70
+ * options + nested headers) is kept.
71
+ * - Otherwise a header is kept only if at least one descendant option matches.
72
+ * - Empty groups (no surviving descendants) are dropped.
73
+ */
74
+ export function filterRows(data, query, getSearchText) {
75
+ const q = (query || '').trim().toLowerCase();
76
+ if (!q) {
77
+ const rows = flattenRows(data);
78
+ return { rows, visibleOptionCount: getOptionRows(rows).length };
79
+ }
80
+ const matchedOption = (item) => {
81
+ const text = (getSearchText(item) || '').toString().toLowerCase();
82
+ return text.includes(q);
83
+ };
84
+ const walk = (item, ancestorLabelMatched) => {
85
+ if (isGroup(item)) {
86
+ const labelMatched = item.label.toLowerCase().includes(q);
87
+ const keepAll = labelMatched || ancestorLabelMatched;
88
+ const children = [];
89
+ for (const child of item.options) {
90
+ const sub = walk(child, keepAll);
91
+ if (sub)
92
+ children.push(sub);
93
+ }
94
+ if (children.length === 0 && !keepAll)
95
+ return null;
96
+ // If keepAll but nothing came back (empty group), still emit so user sees label.
97
+ return { kind: 'group', group: item, children };
98
+ }
99
+ if (ancestorLabelMatched || matchedOption(item)) {
100
+ return { kind: 'option', item: item };
101
+ }
102
+ return null;
103
+ };
104
+ const tops = [];
105
+ for (const top of data) {
106
+ const r = walk(top, false);
107
+ if (r)
108
+ tops.push(r);
109
+ }
110
+ // Materialize back to flat rows.
111
+ const rows = [];
112
+ const emit = (results, depth, parentIds) => {
113
+ for (const r of results) {
114
+ if (!r)
115
+ continue;
116
+ if (r.kind === 'group') {
117
+ rows.push({
118
+ kind: 'header',
119
+ id: r.group.id,
120
+ label: r.group.label,
121
+ prefix: r.group.prefix,
122
+ depth,
123
+ optionCount: countOptionsDeep(r.group),
124
+ });
125
+ emit(r.children, depth + 1, [...parentIds, r.group.id]);
126
+ }
127
+ else {
128
+ rows.push({
129
+ kind: 'option',
130
+ item: r.item,
131
+ depth,
132
+ parentIds,
133
+ });
134
+ }
135
+ }
136
+ };
137
+ emit(tops, 0, []);
138
+ return { rows, visibleOptionCount: getOptionRows(rows).length };
139
+ }
140
+ //# sourceMappingURL=group-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-utils.js","sourceRoot":"","sources":["../../../src/nile-combobox/group-utils.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2025\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type {\n ComboboxDataItem,\n ComboboxGroupItem,\n ComboboxOptionItem,\n ComboboxRow,\n ComboboxHeaderRow,\n ComboboxOptionRow,\n} from './types';\n\nexport function isGroup(item: any): item is ComboboxGroupItem {\n return !!item && typeof item === 'object' && item.type === 'group' && Array.isArray(item.options);\n}\n\nexport function hasGroups(data: any[]): boolean {\n if (!Array.isArray(data)) return false;\n for (const item of data) {\n if (isGroup(item)) return true;\n }\n return false;\n}\n\nexport function countOptionsDeep(group: ComboboxGroupItem): number {\n let n = 0;\n for (const child of group.options) {\n if (isGroup(child)) n += countOptionsDeep(child);\n else n += 1;\n }\n return n;\n}\n\nexport function flattenRows(data: ComboboxDataItem[]): ComboboxRow[] {\n const rows: ComboboxRow[] = [];\n const walk = (items: ComboboxDataItem[], depth: number, parentIds: string[]) => {\n for (const item of items) {\n if (isGroup(item)) {\n rows.push({\n kind: 'header',\n id: item.id,\n label: item.label,\n prefix: item.prefix,\n depth,\n optionCount: countOptionsDeep(item),\n } as ComboboxHeaderRow);\n walk(item.options, depth + 1, [...parentIds, item.id]);\n } else {\n rows.push({\n kind: 'option',\n item: item as ComboboxOptionItem,\n depth,\n parentIds,\n } as ComboboxOptionRow);\n }\n }\n };\n walk(Array.isArray(data) ? data : [], 0, []);\n return rows;\n}\n\nexport function getOptionRows(rows: ComboboxRow[]): ComboboxOptionRow[] {\n const out: ComboboxOptionRow[] = [];\n for (const r of rows) if (r.kind === 'option') out.push(r);\n return out;\n}\n\n/**\n * Filter rows by a query.\n *\n * Rules:\n * - An option row is kept if its searchText matches.\n * - If a group's label matches, the entire subtree (header + all descendant\n * options + nested headers) is kept.\n * - Otherwise a header is kept only if at least one descendant option matches.\n * - Empty groups (no surviving descendants) are dropped.\n */\nexport function filterRows(\n data: ComboboxDataItem[],\n query: string,\n getSearchText: (item: any) => string,\n): { rows: ComboboxRow[]; visibleOptionCount: number } {\n const q = (query || '').trim().toLowerCase();\n if (!q) {\n const rows = flattenRows(data);\n return { rows, visibleOptionCount: getOptionRows(rows).length };\n }\n\n const matchedOption = (item: ComboboxOptionItem): boolean => {\n const text = (getSearchText(item) || '').toString().toLowerCase();\n return text.includes(q);\n };\n\n // Walk the tree, returning a filtered subtree (or null when nothing survives).\n type FilterResult =\n | { kind: 'option'; item: ComboboxOptionItem }\n | { kind: 'group'; group: ComboboxGroupItem; children: FilterResult[] }\n | null;\n\n const walk = (item: ComboboxDataItem, ancestorLabelMatched: boolean): FilterResult => {\n if (isGroup(item)) {\n const labelMatched = item.label.toLowerCase().includes(q);\n const keepAll = labelMatched || ancestorLabelMatched;\n const children: FilterResult[] = [];\n for (const child of item.options) {\n const sub = walk(child, keepAll);\n if (sub) children.push(sub);\n }\n if (children.length === 0 && !keepAll) return null;\n // If keepAll but nothing came back (empty group), still emit so user sees label.\n return { kind: 'group', group: item, children };\n }\n if (ancestorLabelMatched || matchedOption(item as ComboboxOptionItem)) {\n return { kind: 'option', item: item as ComboboxOptionItem };\n }\n return null;\n };\n\n const tops: FilterResult[] = [];\n for (const top of data) {\n const r = walk(top, false);\n if (r) tops.push(r);\n }\n\n // Materialize back to flat rows.\n const rows: ComboboxRow[] = [];\n const emit = (results: FilterResult[], depth: number, parentIds: string[]) => {\n for (const r of results) {\n if (!r) continue;\n if (r.kind === 'group') {\n rows.push({\n kind: 'header',\n id: r.group.id,\n label: r.group.label,\n prefix: r.group.prefix,\n depth,\n optionCount: countOptionsDeep(r.group),\n });\n emit(r.children, depth + 1, [...parentIds, r.group.id]);\n } else {\n rows.push({\n kind: 'option',\n item: r.item,\n depth,\n parentIds,\n });\n }\n }\n };\n emit(tops, 0, []);\n\n return { rows, visibleOptionCount: getOptionRows(rows).length };\n}\n"]}