@aquera/nile-elements 1.9.4 → 1.9.5

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 (140) hide show
  1. package/README.md +7 -0
  2. package/dist/index-5fef1a0d.esm.js +1 -0
  3. package/dist/index-8f38fae3.cjs.js +2 -0
  4. package/dist/index-8f38fae3.cjs.js.map +1 -0
  5. package/dist/index.cjs.js +1 -1
  6. package/dist/index.esm.js +1 -1
  7. package/dist/index.js +1287 -736
  8. package/dist/nile-combobox/index.cjs.js +1 -1
  9. package/dist/nile-combobox/index.esm.js +1 -1
  10. package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
  11. package/dist/nile-combobox/nile-combobox.esm.js +1 -1
  12. package/dist/nile-command-menu/index.cjs.js +2 -0
  13. package/dist/nile-command-menu/index.cjs.js.map +1 -0
  14. package/dist/nile-command-menu/index.esm.js +1 -0
  15. package/dist/nile-command-menu/nile-command-menu.cjs.js +2 -0
  16. package/dist/nile-command-menu/nile-command-menu.cjs.js.map +1 -0
  17. package/dist/nile-command-menu/nile-command-menu.css.cjs.js +2 -0
  18. package/dist/nile-command-menu/nile-command-menu.css.cjs.js.map +1 -0
  19. package/dist/nile-command-menu/nile-command-menu.css.esm.js +182 -0
  20. package/dist/nile-command-menu/nile-command-menu.esm.js +97 -0
  21. package/dist/nile-command-menu-group/index.cjs.js +2 -0
  22. package/dist/nile-command-menu-group/index.cjs.js.map +1 -0
  23. package/dist/nile-command-menu-group/index.esm.js +1 -0
  24. package/dist/nile-command-menu-group/nile-command-menu-group.cjs.js +2 -0
  25. package/dist/nile-command-menu-group/nile-command-menu-group.cjs.js.map +1 -0
  26. package/dist/nile-command-menu-group/nile-command-menu-group.css.cjs.js +2 -0
  27. package/dist/nile-command-menu-group/nile-command-menu-group.css.cjs.js.map +1 -0
  28. package/dist/nile-command-menu-group/nile-command-menu-group.css.esm.js +33 -0
  29. package/dist/nile-command-menu-group/nile-command-menu-group.esm.js +11 -0
  30. package/dist/nile-command-menu-item/index.cjs.js +2 -0
  31. package/dist/nile-command-menu-item/index.cjs.js.map +1 -0
  32. package/dist/nile-command-menu-item/index.esm.js +1 -0
  33. package/dist/nile-command-menu-item/nile-command-menu-item.cjs.js +2 -0
  34. package/dist/nile-command-menu-item/nile-command-menu-item.cjs.js.map +1 -0
  35. package/dist/nile-command-menu-item/nile-command-menu-item.css.cjs.js +2 -0
  36. package/dist/nile-command-menu-item/nile-command-menu-item.css.cjs.js.map +1 -0
  37. package/dist/nile-command-menu-item/nile-command-menu-item.css.esm.js +115 -0
  38. package/dist/nile-command-menu-item/nile-command-menu-item.esm.js +21 -0
  39. package/dist/nile-detail/index.cjs.js +1 -1
  40. package/dist/nile-detail/index.esm.js +1 -1
  41. package/dist/nile-detail/nile-detail.cjs.js +1 -1
  42. package/dist/nile-detail/nile-detail.esm.js +1 -1
  43. package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
  44. package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
  45. package/dist/nile-dialog/nile-dialog.esm.js +1 -1
  46. package/dist/nile-dot-stepper/index.cjs.js +2 -0
  47. package/dist/nile-dot-stepper/index.cjs.js.map +1 -0
  48. package/dist/nile-dot-stepper/index.esm.js +1 -0
  49. package/dist/nile-dot-stepper/nile-dot-stepper.cjs.js +2 -0
  50. package/dist/nile-dot-stepper/nile-dot-stepper.cjs.js.map +1 -0
  51. package/dist/nile-dot-stepper/nile-dot-stepper.css.cjs.js +2 -0
  52. package/dist/nile-dot-stepper/nile-dot-stepper.css.cjs.js.map +1 -0
  53. package/dist/nile-dot-stepper/nile-dot-stepper.css.esm.js +77 -0
  54. package/dist/nile-dot-stepper/nile-dot-stepper.esm.js +24 -0
  55. package/dist/nile-section-message/nile-section-message.css.cjs.js +1 -1
  56. package/dist/nile-section-message/nile-section-message.css.cjs.js.map +1 -1
  57. package/dist/nile-section-message/nile-section-message.css.esm.js +7 -8
  58. package/dist/src/index.d.ts +4 -0
  59. package/dist/src/index.js +4 -0
  60. package/dist/src/index.js.map +1 -1
  61. package/dist/src/nile-command-menu/index.d.ts +1 -0
  62. package/dist/src/nile-command-menu/index.js +2 -0
  63. package/dist/src/nile-command-menu/index.js.map +1 -0
  64. package/dist/src/nile-command-menu/nile-command-menu.css.d.ts +12 -0
  65. package/dist/src/nile-command-menu/nile-command-menu.css.js +194 -0
  66. package/dist/src/nile-command-menu/nile-command-menu.css.js.map +1 -0
  67. package/dist/src/nile-command-menu/nile-command-menu.d.ts +137 -0
  68. package/dist/src/nile-command-menu/nile-command-menu.js +557 -0
  69. package/dist/src/nile-command-menu/nile-command-menu.js.map +1 -0
  70. package/dist/src/nile-command-menu/nile-command-menu.test.d.ts +3 -0
  71. package/dist/src/nile-command-menu/nile-command-menu.test.js +268 -0
  72. package/dist/src/nile-command-menu/nile-command-menu.test.js.map +1 -0
  73. package/dist/src/nile-command-menu-group/index.d.ts +1 -0
  74. package/dist/src/nile-command-menu-group/index.js +2 -0
  75. package/dist/src/nile-command-menu-group/index.js.map +1 -0
  76. package/dist/src/nile-command-menu-group/nile-command-menu-group.css.d.ts +12 -0
  77. package/dist/src/nile-command-menu-group/nile-command-menu-group.css.js +45 -0
  78. package/dist/src/nile-command-menu-group/nile-command-menu-group.css.js.map +1 -0
  79. package/dist/src/nile-command-menu-group/nile-command-menu-group.d.ts +38 -0
  80. package/dist/src/nile-command-menu-group/nile-command-menu-group.js +68 -0
  81. package/dist/src/nile-command-menu-group/nile-command-menu-group.js.map +1 -0
  82. package/dist/src/nile-command-menu-group/nile-command-menu-group.test.d.ts +2 -0
  83. package/dist/src/nile-command-menu-group/nile-command-menu-group.test.js +22 -0
  84. package/dist/src/nile-command-menu-group/nile-command-menu-group.test.js.map +1 -0
  85. package/dist/src/nile-command-menu-item/index.d.ts +1 -0
  86. package/dist/src/nile-command-menu-item/index.js +2 -0
  87. package/dist/src/nile-command-menu-item/index.js.map +1 -0
  88. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.d.ts +12 -0
  89. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.js +127 -0
  90. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.js.map +1 -0
  91. package/dist/src/nile-command-menu-item/nile-command-menu-item.d.ts +73 -0
  92. package/dist/src/nile-command-menu-item/nile-command-menu-item.js +174 -0
  93. package/dist/src/nile-command-menu-item/nile-command-menu-item.js.map +1 -0
  94. package/dist/src/nile-command-menu-item/nile-command-menu-item.test.d.ts +1 -0
  95. package/dist/src/nile-command-menu-item/nile-command-menu-item.test.js +35 -0
  96. package/dist/src/nile-command-menu-item/nile-command-menu-item.test.js.map +1 -0
  97. package/dist/src/nile-dialog/nile-dialog.js +1 -1
  98. package/dist/src/nile-dialog/nile-dialog.js.map +1 -1
  99. package/dist/src/nile-dot-stepper/index.d.ts +1 -0
  100. package/dist/src/nile-dot-stepper/index.js +2 -0
  101. package/dist/src/nile-dot-stepper/index.js.map +1 -0
  102. package/dist/src/nile-dot-stepper/nile-dot-stepper.css.d.ts +12 -0
  103. package/dist/src/nile-dot-stepper/nile-dot-stepper.css.js +89 -0
  104. package/dist/src/nile-dot-stepper/nile-dot-stepper.css.js.map +1 -0
  105. package/dist/src/nile-dot-stepper/nile-dot-stepper.d.ts +48 -0
  106. package/dist/src/nile-dot-stepper/nile-dot-stepper.js +153 -0
  107. package/dist/src/nile-dot-stepper/nile-dot-stepper.js.map +1 -0
  108. package/dist/src/nile-dot-stepper/nile-dot-stepper.test.d.ts +1 -0
  109. package/dist/src/nile-dot-stepper/nile-dot-stepper.test.js +319 -0
  110. package/dist/src/nile-dot-stepper/nile-dot-stepper.test.js.map +1 -0
  111. package/dist/src/nile-section-message/nile-section-message.css.js +7 -8
  112. package/dist/src/nile-section-message/nile-section-message.css.js.map +1 -1
  113. package/dist/src/version.js +1 -1
  114. package/dist/src/version.js.map +1 -1
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. package/package.json +2 -1
  117. package/src/index.ts +4 -0
  118. package/src/nile-command-menu/index.ts +1 -0
  119. package/src/nile-command-menu/nile-command-menu.css.ts +196 -0
  120. package/src/nile-command-menu/nile-command-menu.test.ts +289 -0
  121. package/src/nile-command-menu/nile-command-menu.ts +601 -0
  122. package/src/nile-command-menu-group/index.ts +1 -0
  123. package/src/nile-command-menu-group/nile-command-menu-group.css.ts +47 -0
  124. package/src/nile-command-menu-group/nile-command-menu-group.test.ts +23 -0
  125. package/src/nile-command-menu-group/nile-command-menu-group.ts +72 -0
  126. package/src/nile-command-menu-item/index.ts +1 -0
  127. package/src/nile-command-menu-item/nile-command-menu-item.css.ts +129 -0
  128. package/src/nile-command-menu-item/nile-command-menu-item.test.ts +36 -0
  129. package/src/nile-command-menu-item/nile-command-menu-item.ts +172 -0
  130. package/src/nile-dialog/nile-dialog.ts +1 -1
  131. package/src/nile-dot-stepper/index.ts +1 -0
  132. package/src/nile-dot-stepper/nile-dot-stepper.css.ts +90 -0
  133. package/src/nile-dot-stepper/nile-dot-stepper.test.ts +493 -0
  134. package/src/nile-dot-stepper/nile-dot-stepper.ts +159 -0
  135. package/src/nile-section-message/nile-section-message.css.ts +7 -8
  136. package/stories/dot-stepper.stories.ts +67 -0
  137. package/vscode-html-custom-data.json +179 -0
  138. package/dist/index-c0b5232c.cjs.js +0 -2
  139. package/dist/index-c0b5232c.cjs.js.map +0 -1
  140. package/dist/index-e43a18eb.esm.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-command-menu.js","sourceRoot":"","sources":["../../../src/nile-command-menu/nile-command-menu.ts"],"names":[],"mappings":"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","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 { html, nothing } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { animateTo, stopAnimations } from '../internal/animate';\nimport { getAnimation, setDefaultAnimation } from '../utilities/animation-registry';\nimport { HasSlotController } from '../internal/slot';\nimport { lockBodyScrolling, unlockBodyScrolling } from '../internal/scroll';\nimport { waitForEvent } from '../internal/event';\nimport { watch } from '../internal/watch';\nimport Modal from '../internal/modal';\nimport NileElement from '../internal/nile-element';\nimport { styles } from './nile-command-menu.css';\nimport '../nile-tag/nile-tag';\nimport type { CSSResultGroup } from 'lit';\nimport type { NileCommandMenuItem } from '../nile-command-menu-item/nile-command-menu-item';\nimport type { NileCommandMenuGroup } from '../nile-command-menu-group/nile-command-menu-group';\n\nlet commandMenuItemId = 0;\n\n/** A removable search scope shown in the \"Searching for\" row. */\nexport interface CommandMenuScope {\n label: string;\n value: string;\n}\n\nfunction scopeFromValue(entry: CommandMenuScope | string): CommandMenuScope {\n if (typeof entry === 'string') {\n return { label: entry, value: entry.toLowerCase() };\n }\n return { label: entry.label, value: entry.value ?? entry.label.toLowerCase() };\n}\n\n/** Normalises the `scopes` attribute (comma-separated string or JSON array) into scope objects. */\nconst scopesConverter = {\n fromAttribute(value: string | null): CommandMenuScope[] {\n if (!value) {\n return [];\n }\n const trimmed = value.trim();\n if (trimmed.startsWith('[')) {\n try {\n const parsed = JSON.parse(trimmed);\n return (Array.isArray(parsed) ? parsed : []).map(scopeFromValue);\n } catch {\n // fall through to comma-separated parsing\n }\n }\n return trimmed\n .split(',')\n .map(part => part.trim())\n .filter(Boolean)\n .map(scopeFromValue);\n },\n toAttribute(value: CommandMenuScope[]): string {\n return (value ?? []).map(scope => scope.label).join(', ');\n },\n};\n\n/**\n * A keyboard-driven command palette for fast, page-wide search and action execution.\n *\n * @tag nile-command-menu\n *\n * @summary A modal command menu (command palette) with built-in search, grouping and keyboard navigation.\n * @status stable\n * @since 2.0\n *\n * @dependency nile-glyph\n * @dependency nile-tag\n *\n * @slot - The command content: `nile-command-menu-group` and/or `nile-command-menu-item` elements.\n * @slot empty - Custom content shown when no items match the current query.\n * @slot footer - Optional footer content. When empty, a built-in keyboard-hint row is shown (unless `nofooterhints`).\n *\n * @event nile-show - Emitted when the menu opens.\n * @event nile-after-show - Emitted after the menu opens and the animation completes.\n * @event nile-hide - Emitted when the menu starts to close.\n * @event nile-after-hide - Emitted after the menu closes and the animation completes.\n * @event nile-request-close - Emitted when the user attempts to close the menu (overlay click / Escape). Cancelable.\n * @event nile-search - Emitted when the search value changes. `detail: { value }`.\n * @event nile-select - Emitted when an item is selected. `detail: { value, item }`.\n * @event nile-scope-remove - Emitted when a scope tag is removed. `detail: { scope, scopes }`.\n *\n * @csspart base - The component's outer wrapper.\n * @csspart overlay - The overlay behind the panel.\n * @csspart panel - The command panel.\n * @csspart header - The search header.\n * @csspart input - The search input.\n * @csspart scopes - The \"Searching for\" scopes row.\n * @csspart scope-tag - Each scope tag in the scopes row.\n * @csspart list - The scrollable results list.\n * @csspart empty - The empty state shown when nothing matches.\n * @csspart footer - The footer.\n * @csspart hints - The built-in keyboard-hint row inside the footer.\n *\n * @cssproperty --width - The maximum width of the panel.\n * @cssproperty --max-height - The maximum height of the panel.\n */\n@customElement('nile-command-menu')\nexport class NileCommandMenu extends NileElement {\n static styles: CSSResultGroup = styles;\n\n private readonly hasSlotController = new HasSlotController(this, 'footer');\n private modal: Modal;\n private originalTrigger: HTMLElement | null;\n\n @query('.command') command: HTMLElement;\n @query('.command__panel') panel: HTMLElement;\n @query('.command__overlay') overlay: HTMLElement;\n @query('.command__input') input: HTMLInputElement;\n\n /** Indicates whether the menu is open. Toggle this attribute, or use `show()` / `hide()`. */\n @property({ type: Boolean, reflect: true }) open = false;\n\n /** Placeholder text shown in the search input. */\n @property() placeholder = 'Search commands...';\n\n /** Accessible label for the dialog and the search input. */\n @property() label = 'Command menu';\n\n /** Message shown when no items match the current query. Ignored when the `empty` slot is used. */\n @property({ attribute: true }) noResultsMessage = 'No results found';\n\n /** The current search value. */\n @property() value = '';\n\n /**\n * When set, the menu does not filter items itself; instead it emits `nile-search` so the host can\n * manage results. Useful for async/server-side search.\n */\n @property({ type: Boolean, attribute: true }) customSearch = false;\n\n /** Keeps the menu open after an item is selected instead of closing it. */\n @property({ type: Boolean, attribute: true }) keepOpenOnSelect = false;\n\n /** Prevents the menu from closing when the overlay is clicked. */\n @property({ type: Boolean, attribute: true }) preventOverlayClose = false;\n\n /** Hides the built-in keyboard-hint footer (navigate / select / close). The `footer` slot always overrides it. */\n @property({ type: Boolean, attribute: true }) noFooterHints = false;\n\n /**\n * Active search scopes shown as removable tags in the \"Searching for\" row. Items are filtered so that\n * only those with no `scope` or whose `scope` matches an active scope are shown. Set via the `scopes`\n * attribute (comma-separated labels or a JSON array) or the property (array of `{ label, value }`).\n */\n @property({ converter: scopesConverter }) scopes: CommandMenuScope[] = [];\n\n /** Label shown before the scope tags. */\n @property({ attribute: true }) scopesLabel = 'Searching for';\n\n /** True when the current query matches no items. */\n @state() private hasResults = true;\n\n connectedCallback() {\n super.connectedCallback();\n this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);\n this.modal = new Modal(this);\n }\n\n firstUpdated() {\n this.command.hidden = !this.open;\n\n if (this.open) {\n this.addOpenListeners();\n this.modal.activate();\n lockBodyScrolling(this);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n unlockBodyScrolling(this);\n }\n\n /** Gets all command items in the menu (across groups), in document order. */\n private getAllItems(): NileCommandMenuItem[] {\n return [...this.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')];\n }\n\n /** Gets the items that are currently visible (matching the query) and not disabled. */\n private getVisibleItems(): NileCommandMenuItem[] {\n return this.getAllItems().filter(item => !item.hidden && !item.disabled);\n }\n\n private getActiveItem(): NileCommandMenuItem | undefined {\n return this.getVisibleItems().find(item => item.active);\n }\n\n private setActiveItem(item: NileCommandMenuItem | undefined) {\n this.getAllItems().forEach(i => {\n i.active = i === item;\n });\n\n if (item) {\n if (!item.id) {\n item.id = `nile-command-menu-item-${++commandMenuItemId}`;\n }\n this.input?.setAttribute('aria-activedescendant', item.id);\n item.scrollIntoView({ block: 'nearest' });\n } else {\n this.input?.removeAttribute('aria-activedescendant');\n }\n }\n\n /** Applies the current query to the items, hiding non-matching items and empty groups. */\n private filterItems() {\n const items = this.getAllItems();\n\n if (this.customSearch) {\n // The host owns visibility; just refresh the empty state and active item.\n this.hasResults = this.getVisibleItems().length > 0;\n this.updateGroupVisibility();\n this.ensureActiveItem();\n return;\n }\n\n const query = this.value.trim().toLowerCase();\n const activeScopes = this.scopes.map(scope => scope.value);\n\n items.forEach(item => {\n const matchesQuery = query.length === 0 || item.getFilterText().includes(query);\n const matchesScope =\n activeScopes.length === 0 || !item.scope || activeScopes.includes(item.scope);\n item.hidden = !(matchesQuery && matchesScope);\n });\n\n this.updateGroupVisibility();\n this.hasResults = this.getVisibleItems().length > 0;\n this.ensureActiveItem();\n }\n\n /** Hides groups that have no visible items. */\n private updateGroupVisibility() {\n const groups = [...this.querySelectorAll<NileCommandMenuGroup>('nile-command-menu-group')];\n groups.forEach(group => {\n const hasVisibleItem = [\n ...group.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item'),\n ].some(item => !item.hidden);\n group.hidden = !hasVisibleItem;\n });\n }\n\n /** Ensures exactly one visible item is active, defaulting to the first. */\n private ensureActiveItem() {\n const visible = this.getVisibleItems();\n const current = this.getActiveItem();\n\n if (visible.length === 0) {\n this.setActiveItem(undefined);\n return;\n }\n\n if (!current || !visible.includes(current)) {\n this.setActiveItem(visible[0]);\n }\n }\n\n private handleInput(event: Event) {\n this.value = (event.target as HTMLInputElement).value;\n this.emit('nile-search', { value: this.value });\n this.filterItems();\n }\n\n @watch('scopes', { waitUntilFirstUpdate: true })\n handleScopesChange() {\n this.filterItems();\n }\n\n private handleScopeRemove(scope: CommandMenuScope) {\n this.scopes = this.scopes.filter(s => s.value !== scope.value);\n this.emit('nile-scope-remove', { scope, scopes: this.scopes });\n this.filterItems();\n }\n\n private handleSlotChange() {\n this.filterItems();\n }\n\n private handlePanelKeyDown(event: KeyboardEvent) {\n const visible = this.getVisibleItems();\n\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {\n if (visible.length === 0) {\n return;\n }\n event.preventDefault();\n\n const current = this.getActiveItem();\n let index = current ? visible.indexOf(current) : -1;\n\n if (event.key === 'ArrowDown') index++;\n else if (event.key === 'ArrowUp') index--;\n else if (event.key === 'Home') index = 0;\n else if (event.key === 'End') index = visible.length - 1;\n\n if (index < 0) index = visible.length - 1;\n if (index > visible.length - 1) index = 0;\n\n this.setActiveItem(visible[index]);\n return;\n }\n\n if (event.key === 'Enter') {\n const current = this.getActiveItem();\n if (current) {\n event.preventDefault();\n this.selectItem(current);\n }\n }\n }\n\n private handleListClick(event: MouseEvent) {\n const item = (event.target as HTMLElement).closest<NileCommandMenuItem>(\n 'nile-command-menu-item'\n );\n if (item && !item.disabled) {\n this.selectItem(item);\n }\n }\n\n private selectItem(item: NileCommandMenuItem) {\n this.emit('nile-select', { value: item.value, item });\n if (!this.keepOpenOnSelect) {\n this.hide();\n }\n }\n\n private requestClose(source: 'overlay' | 'keyboard') {\n const requestClose = this.emit(\n 'nile-request-close',\n { source },\n undefined,\n undefined,\n true\n );\n\n if (requestClose.defaultPrevented) {\n return;\n }\n\n if (source === 'overlay' && this.preventOverlayClose) {\n return;\n }\n\n this.hide();\n }\n\n private addOpenListeners() {\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n }\n\n private removeOpenListeners() {\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n }\n\n private handleDocumentKeyDown(event: KeyboardEvent) {\n if (this.open && event.key === 'Escape') {\n event.stopPropagation();\n this.requestClose('keyboard');\n }\n }\n\n @watch('open', { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n if (this.open) {\n this.emit('nile-show');\n this.addOpenListeners();\n this.originalTrigger = document.activeElement as HTMLElement;\n this.modal.activate();\n lockBodyScrolling(this);\n\n await stopAnimations(this.command);\n this.command.hidden = false;\n\n // Reset query and selection each time the menu opens.\n this.value = '';\n this.filterItems();\n\n requestAnimationFrame(() => {\n this.input?.focus({ preventScroll: true });\n });\n\n const panelAnimation = getAnimation(this, 'command.show', { dir: 'ltr' });\n const overlayAnimation = getAnimation(this, 'command.overlay.show', { dir: 'ltr' });\n await Promise.all([\n animateTo(this.panel, panelAnimation.keyframes, panelAnimation.options),\n animateTo(this.overlay, overlayAnimation.keyframes, overlayAnimation.options),\n ]);\n\n this.emit('nile-after-show');\n } else {\n this.emit('nile-hide');\n this.removeOpenListeners();\n this.modal.deactivate();\n\n await stopAnimations(this.command);\n const panelAnimation = getAnimation(this, 'command.hide', { dir: 'ltr' });\n const overlayAnimation = getAnimation(this, 'command.overlay.hide', { dir: 'ltr' });\n await Promise.all([\n animateTo(this.panel, panelAnimation.keyframes, panelAnimation.options),\n animateTo(this.overlay, overlayAnimation.keyframes, overlayAnimation.options),\n ]);\n\n this.command.hidden = true;\n unlockBodyScrolling(this);\n\n const trigger = this.originalTrigger;\n if (typeof trigger?.focus === 'function') {\n setTimeout(() => trigger.focus());\n }\n\n this.emit('nile-after-hide');\n }\n }\n\n /** Renders the \"Searching for\" scopes row when scopes are active. */\n private renderScopes() {\n if (this.scopes.length === 0) {\n return nothing;\n }\n\n return html`\n <div part=\"scopes\" class=\"command__scopes\">\n <span class=\"command__scopes-label\">${this.scopesLabel}</span>\n <div class=\"command__scopes-tags\">\n ${this.scopes.map(\n scope => html`\n <nile-tag\n part=\"scope-tag\"\n exportparts=\"base:scope-tag__base\"\n size=\"medium\"\n variant=\"normal\"\n pill\n removable\n .value=${scope.value}\n @nile-remove=${() => this.handleScopeRemove(scope)}\n >\n ${scope.label}\n </nile-tag>\n `\n )}\n </div>\n </div>\n `;\n }\n\n /** Renders the built-in keyboard-hint footer (used as the `footer` slot's fallback content). */\n private renderHints() {\n return html`\n <div part=\"hints\" class=\"command__hints\">\n <span class=\"command__hint\"><kbd>↑</kbd><kbd>↓</kbd> to navigate</span>\n <span class=\"command__hint\"><kbd>↵</kbd> to select</span>\n <span class=\"command__hint\"><kbd>esc</kbd> to close</span>\n </div>\n `;\n }\n\n /** Shows the command menu. */\n async show() {\n if (this.open) {\n return undefined;\n }\n\n this.open = true;\n return waitForEvent(this, 'nile-after-show');\n }\n\n /** Hides the command menu. */\n async hide() {\n if (!this.open) {\n return undefined;\n }\n\n this.open = false;\n return waitForEvent(this, 'nile-after-hide');\n }\n\n render() {\n return html`\n <div\n part=\"base\"\n class=${classMap({\n command: true,\n 'command--open': this.open,\n 'command--has-footer':\n this.hasSlotController.test('footer') || !this.noFooterHints,\n })}\n >\n <div\n part=\"overlay\"\n class=\"command__overlay\"\n tabindex=\"-1\"\n @click=${() => this.requestClose('overlay')}\n ></div>\n\n <div\n part=\"panel\"\n class=\"command__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=${this.label}\n aria-hidden=${this.open ? 'false' : 'true'}\n @keydown=${this.handlePanelKeyDown}\n >\n <div part=\"header\" class=\"command__header\">\n <span class=\"command__search-icon\" aria-hidden=\"true\">\n <nile-glyph name=\"search\" size=\"20\" method=\"stroke\"></nile-glyph>\n </span>\n <input\n part=\"input\"\n class=\"command__input\"\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls=\"command-list\"\n aria-label=${this.label}\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellcheck=\"false\"\n .value=${this.value}\n placeholder=${this.placeholder}\n @input=${this.handleInput}\n />\n </div>\n\n ${this.renderScopes()}\n\n <div\n part=\"list\"\n id=\"command-list\"\n class=\"command__list\"\n role=\"listbox\"\n aria-label=${this.label}\n @click=${this.handleListClick}\n >\n <slot @slotchange=${this.handleSlotChange}></slot>\n\n <div\n part=\"empty\"\n class=${classMap({\n command__empty: true,\n 'command__empty--visible': !this.hasResults,\n })}\n >\n <slot name=\"empty\">${!this.hasResults ? this.noResultsMessage : nothing}</slot>\n </div>\n </div>\n\n <footer part=\"footer\" class=\"command__footer\">\n <slot name=\"footer\">\n ${this.noFooterHints ? nothing : this.renderHints()}\n </slot>\n </footer>\n </div>\n </div>\n `;\n }\n}\n\nsetDefaultAnimation('command.show', {\n keyframes: [\n { opacity: 0, scale: 0.95 },\n { opacity: 1, scale: 1 },\n ],\n options: { duration: 200, easing: 'ease' },\n});\n\nsetDefaultAnimation('command.hide', {\n keyframes: [\n { opacity: 1, scale: 1 },\n { opacity: 0, scale: 0.95 },\n ],\n options: { duration: 200, easing: 'ease' },\n});\n\nsetDefaultAnimation('command.overlay.show', {\n keyframes: [{ opacity: 0 }, { opacity: 1 }],\n options: { duration: 200 },\n});\n\nsetDefaultAnimation('command.overlay.hide', {\n keyframes: [{ opacity: 1 }, { opacity: 0 }],\n options: { duration: 200 },\n});\n\nexport default NileCommandMenu;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-command-menu': NileCommandMenu;\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import './nile-command-menu';
2
+ import '../nile-command-menu-group/nile-command-menu-group';
3
+ import '../nile-command-menu-item/nile-command-menu-item';
@@ -0,0 +1,268 @@
1
+ import { expect, fixture, html, oneEvent, waitUntil } from '@open-wc/testing';
2
+ import './nile-command-menu';
3
+ import '../nile-command-menu-group/nile-command-menu-group';
4
+ import '../nile-command-menu-item/nile-command-menu-item';
5
+ const withItems = html `
6
+ <nile-command-menu>
7
+ <nile-command-menu-group heading="Pages">
8
+ <nile-command-menu-item value="home">Home</nile-command-menu-item>
9
+ <nile-command-menu-item value="settings">Settings</nile-command-menu-item>
10
+ </nile-command-menu-group>
11
+ <nile-command-menu-group heading="Actions">
12
+ <nile-command-menu-item value="new">New file</nile-command-menu-item>
13
+ <nile-command-menu-item value="disabled" disabled>Disabled</nile-command-menu-item>
14
+ </nile-command-menu-group>
15
+ </nile-command-menu>
16
+ `;
17
+ describe('NileCommandMenu', () => {
18
+ it('1. renders', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el).to.exist; });
19
+ it('2. shadow root', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot).to.not.be.null; });
20
+ it('3. tag name', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.tagName.toLowerCase()).to.equal('nile-command-menu'); });
21
+ it('4. open defaults false', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.open).to.be.false; });
22
+ it('5. placeholder default', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.placeholder).to.equal('Search commands...'); });
23
+ it('6. label default', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.label).to.equal('Command menu'); });
24
+ it('7. noResultsMessage default', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.noResultsMessage).to.equal('No results found'); });
25
+ it('8. customSearch defaults false', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.customSearch).to.be.false; });
26
+ it('9. keepOpenOnSelect defaults false', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.keepOpenOnSelect).to.be.false; });
27
+ it('10. preventOverlayClose defaults false', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.preventOverlayClose).to.be.false; });
28
+ it('11. base part', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[part="base"]')).to.exist; });
29
+ it('12. overlay part', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[part="overlay"]')).to.exist; });
30
+ it('13. panel part', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[part="panel"]')).to.exist; });
31
+ it('14. input part', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[part="input"]')).to.exist; });
32
+ it('15. list part', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[part="list"]')).to.exist; });
33
+ it('16. footer part', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[part="footer"]')).to.exist; });
34
+ it('17. empty part', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[part="empty"]')).to.exist; });
35
+ it('18. default slot', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('slot:not([name])')).to.exist; });
36
+ it('19. footer slot', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('slot[name="footer"]')).to.exist; });
37
+ it('20. empty slot', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('slot[name="empty"]')).to.exist; });
38
+ it('21. dialog role', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[role="dialog"]')).to.exist; });
39
+ it('22. listbox role', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('[role="listbox"]')).to.exist; });
40
+ it('23. input combobox role', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot.querySelector('input[role="combobox"]')).to.exist; });
41
+ it('24. placeholder applied', async () => { const el = await fixture(html `<nile-command-menu placeholder="Find..."></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot.querySelector('input').placeholder).to.equal('Find...'); });
42
+ it('25. show method', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.show).to.be.a('function'); });
43
+ it('26. hide method', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.hide).to.be.a('function'); });
44
+ it('27. show opens', async () => { const el = await fixture(withItems); await el.show(); expect(el.open).to.be.true; await el.hide(); });
45
+ it('28. nile-show event', async () => { const el = await fixture(withItems); setTimeout(() => el.show()); const ev = await oneEvent(el, 'nile-show'); expect(ev).to.exist; await el.hide(); });
46
+ it('29. nile-after-show event', async () => { const el = await fixture(withItems); setTimeout(() => el.show()); const ev = await oneEvent(el, 'nile-after-show'); expect(ev).to.exist; await el.hide(); });
47
+ it('30. hide closes', async () => { const el = await fixture(withItems); await el.show(); await el.hide(); expect(el.open).to.be.false; });
48
+ it('31. filters items by query', async () => {
49
+ const el = await fixture(withItems);
50
+ await el.show();
51
+ const input = el.shadowRoot.querySelector('input');
52
+ input.value = 'settings';
53
+ input.dispatchEvent(new Event('input'));
54
+ await el.updateComplete;
55
+ const visible = [...el.querySelectorAll('nile-command-menu-item')].filter(i => !i.hidden);
56
+ expect(visible.length).to.equal(1);
57
+ expect(visible[0].value).to.equal('settings');
58
+ await el.hide();
59
+ });
60
+ it('32. hides empty groups', async () => {
61
+ const el = await fixture(withItems);
62
+ await el.show();
63
+ const input = el.shadowRoot.querySelector('input');
64
+ input.value = 'home';
65
+ input.dispatchEvent(new Event('input'));
66
+ await el.updateComplete;
67
+ const groups = el.querySelectorAll('nile-command-menu-group');
68
+ expect(groups[0].hidden).to.be.false; // Pages (has Home)
69
+ expect(groups[1].hidden).to.be.true; // Actions (no match)
70
+ await el.hide();
71
+ });
72
+ it('33. shows empty state on no match', async () => {
73
+ const el = await fixture(withItems);
74
+ await el.show();
75
+ const input = el.shadowRoot.querySelector('input');
76
+ input.value = 'zzzznomatch';
77
+ input.dispatchEvent(new Event('input'));
78
+ await el.updateComplete;
79
+ expect(el.shadowRoot.querySelector('.command__empty--visible')).to.exist;
80
+ await el.hide();
81
+ });
82
+ it('34. emits nile-search', async () => {
83
+ const el = await fixture(withItems);
84
+ await el.show();
85
+ const input = el.shadowRoot.querySelector('input');
86
+ setTimeout(() => { input.value = 'x'; input.dispatchEvent(new Event('input')); });
87
+ const ev = await oneEvent(el, 'nile-search');
88
+ expect(ev.detail.value).to.equal('x');
89
+ await el.hide();
90
+ });
91
+ it('35. emits nile-select on click', async () => {
92
+ const el = await fixture(withItems);
93
+ await el.show();
94
+ const item = el.querySelector('nile-command-menu-item[value="home"]');
95
+ setTimeout(() => item.click());
96
+ const ev = await oneEvent(el, 'nile-select');
97
+ expect(ev.detail.value).to.equal('home');
98
+ });
99
+ it('36. select closes by default', async () => {
100
+ const el = await fixture(withItems);
101
+ await el.show();
102
+ const item = el.querySelector('nile-command-menu-item[value="home"]');
103
+ item.click();
104
+ await waitUntil(() => !el.open);
105
+ expect(el.open).to.be.false;
106
+ });
107
+ it('37. keep-open-on-select stays open', async () => {
108
+ const el = await fixture(html `
109
+ <nile-command-menu keepopenonselect>
110
+ <nile-command-menu-item value="home">Home</nile-command-menu-item>
111
+ </nile-command-menu>
112
+ `);
113
+ await el.show();
114
+ el.querySelector('nile-command-menu-item').click();
115
+ await el.updateComplete;
116
+ expect(el.open).to.be.true;
117
+ await el.hide();
118
+ });
119
+ it('38. disabled item not selected on click', async () => {
120
+ const el = await fixture(withItems);
121
+ await el.show();
122
+ let fired = false;
123
+ el.addEventListener('nile-select', () => (fired = true));
124
+ el.querySelector('nile-command-menu-item[value="disabled"]').click();
125
+ await el.updateComplete;
126
+ expect(fired).to.be.false;
127
+ await el.hide();
128
+ });
129
+ it('39. arrow down moves active item', async () => {
130
+ const el = await fixture(withItems);
131
+ await el.show();
132
+ const panel = el.shadowRoot.querySelector('[role="dialog"]');
133
+ panel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
134
+ await el.updateComplete;
135
+ const active = [...el.querySelectorAll('nile-command-menu-item')].filter(i => i.active);
136
+ expect(active.length).to.equal(1);
137
+ await el.hide();
138
+ });
139
+ it('40. first visible item active on open', async () => {
140
+ const el = await fixture(withItems);
141
+ await el.show();
142
+ const active = [...el.querySelectorAll('nile-command-menu-item')].filter(i => i.active);
143
+ expect(active.length).to.equal(1);
144
+ expect(active[0].value).to.equal('home');
145
+ await el.hide();
146
+ });
147
+ it('41. enter selects active item', async () => {
148
+ const el = await fixture(withItems);
149
+ await el.show();
150
+ const panel = el.shadowRoot.querySelector('[role="dialog"]');
151
+ setTimeout(() => panel.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true })));
152
+ const ev = await oneEvent(el, 'nile-select');
153
+ expect(ev.detail.value).to.equal('home');
154
+ });
155
+ it('42. custom-search does not auto-filter', async () => {
156
+ const el = await fixture(html `
157
+ <nile-command-menu customsearch>
158
+ <nile-command-menu-item value="a">Alpha</nile-command-menu-item>
159
+ <nile-command-menu-item value="b">Beta</nile-command-menu-item>
160
+ </nile-command-menu>
161
+ `);
162
+ await el.show();
163
+ const input = el.shadowRoot.querySelector('input');
164
+ input.value = 'zzz';
165
+ input.dispatchEvent(new Event('input'));
166
+ await el.updateComplete;
167
+ const visible = [...el.querySelectorAll('nile-command-menu-item')].filter(i => !i.hidden);
168
+ expect(visible.length).to.equal(2);
169
+ await el.hide();
170
+ });
171
+ it('43. nile-request-close cancelable', async () => {
172
+ const el = await fixture(withItems);
173
+ await el.show();
174
+ el.addEventListener('nile-request-close', e => e.preventDefault());
175
+ const overlay = el.shadowRoot.querySelector('.command__overlay');
176
+ overlay.click();
177
+ await el.updateComplete;
178
+ expect(el.open).to.be.true;
179
+ await el.hide();
180
+ });
181
+ it('44. overlay click closes', async () => {
182
+ const el = await fixture(withItems);
183
+ await el.show();
184
+ const overlay = el.shadowRoot.querySelector('.command__overlay');
185
+ overlay.click();
186
+ await waitUntil(() => !el.open);
187
+ expect(el.open).to.be.false;
188
+ });
189
+ it('45. has-footer class when footer slotted', async () => {
190
+ const el = await fixture(html `
191
+ <nile-command-menu><div slot="footer">footer</div></nile-command-menu>
192
+ `);
193
+ await el.updateComplete;
194
+ expect(el.shadowRoot.querySelector('.command--has-footer')).to.exist;
195
+ });
196
+ it('46. resets query on reopen', async () => {
197
+ const el = await fixture(withItems);
198
+ await el.show();
199
+ const input = el.shadowRoot.querySelector('input');
200
+ input.value = 'home';
201
+ input.dispatchEvent(new Event('input'));
202
+ await el.updateComplete;
203
+ await el.hide();
204
+ await el.show();
205
+ expect(el.value).to.equal('');
206
+ await el.hide();
207
+ });
208
+ it('S1. scopes empty by default', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.scopes).to.deep.equal([]); });
209
+ it('S2. no scopes row when empty', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot.querySelector('[part="scopes"]')).to.be.null; });
210
+ it('S3. scopes attribute parses comma list', async () => { const el = await fixture(html `<nile-command-menu scopes="Pages, Actions"></nile-command-menu>`); expect(el.scopes.map(s => s.value)).to.deep.equal(['pages', 'actions']); });
211
+ it('S4. scopes row renders tags', async () => { const el = await fixture(html `<nile-command-menu scopes="Pages, Actions"></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot.querySelector('[part="scopes"]')).to.exist; expect(el.shadowRoot.querySelectorAll('nile-tag').length).to.equal(2); });
212
+ it('S5. default scopes label', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); expect(el.scopesLabel).to.equal('Searching for'); });
213
+ it('S6. scope filters items', async () => {
214
+ const el = await fixture(html `
215
+ <nile-command-menu scopes="Pages, Actions">
216
+ <nile-command-menu-item value="home" scope="pages">Home</nile-command-menu-item>
217
+ <nile-command-menu-item value="run" scope="actions">Run</nile-command-menu-item>
218
+ </nile-command-menu>
219
+ `);
220
+ await el.show();
221
+ el.scopes = [{ label: 'Pages', value: 'pages' }];
222
+ await el.updateComplete;
223
+ const visible = [...el.querySelectorAll('nile-command-menu-item')].filter(i => !i.hidden);
224
+ expect(visible.map(i => i.value)).to.deep.equal(['home']);
225
+ await el.hide();
226
+ });
227
+ it('S7. scoped item with no scope always shown', async () => {
228
+ const el = await fixture(html `
229
+ <nile-command-menu scopes="Pages">
230
+ <nile-command-menu-item value="home" scope="pages">Home</nile-command-menu-item>
231
+ <nile-command-menu-item value="global">Global</nile-command-menu-item>
232
+ <nile-command-menu-item value="run" scope="actions">Run</nile-command-menu-item>
233
+ </nile-command-menu>
234
+ `);
235
+ await el.show();
236
+ const visible = [...el.querySelectorAll('nile-command-menu-item')].filter(i => !i.hidden);
237
+ expect(visible.map(i => i.value)).to.have.members(['home', 'global']);
238
+ expect(visible.map(i => i.value)).to.not.include('run');
239
+ await el.hide();
240
+ });
241
+ it('S8. removing a scope emits event and refilters', async () => {
242
+ const el = await fixture(html `
243
+ <nile-command-menu scopes="Pages, Actions">
244
+ <nile-command-menu-item value="home" scope="pages">Home</nile-command-menu-item>
245
+ <nile-command-menu-item value="run" scope="actions">Run</nile-command-menu-item>
246
+ </nile-command-menu>
247
+ `);
248
+ await el.show();
249
+ const tag = el.shadowRoot.querySelector('nile-tag'); // first tag = Pages
250
+ setTimeout(() => tag.dispatchEvent(new CustomEvent('nile-remove', { bubbles: true, composed: true })));
251
+ const ev = await oneEvent(el, 'nile-scope-remove');
252
+ expect(ev.detail.scope.value).to.equal('pages');
253
+ await el.updateComplete;
254
+ expect(el.scopes.map(s => s.value)).to.deep.equal(['actions']);
255
+ const visible = [...el.querySelectorAll('nile-command-menu-item')].filter(i => !i.hidden);
256
+ expect(visible.map(i => i.value)).to.deep.equal(['run']);
257
+ await el.hide();
258
+ });
259
+ it('47a. footer hints render by default', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot.querySelector('[part="hints"]')).to.exist; expect(el.shadowRoot.querySelectorAll('.command__footer kbd').length).to.be.greaterThan(0); });
260
+ it('47b. has-footer by default (hints)', async () => { const el = await fixture(html `<nile-command-menu></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot.querySelector('.command--has-footer')).to.exist; });
261
+ it('47c. no-footer-hints removes hints', async () => { const el = await fixture(html `<nile-command-menu nofooterhints></nile-command-menu>`); await el.updateComplete; expect(el.noFooterHints).to.be.true; expect(el.shadowRoot.querySelector('[part="hints"]')).to.be.null; });
262
+ it('47d. no-footer-hints hides footer', async () => { const el = await fixture(html `<nile-command-menu nofooterhints></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot.querySelector('.command--has-footer')).to.be.null; });
263
+ it('47. is defined', async () => { expect(customElements.get('nile-command-menu')).to.exist; });
264
+ it('48. has styles', async () => { expect((await import('./nile-command-menu')).NileCommandMenu.styles).to.exist; });
265
+ it('49. open reflects', async () => { const el = await fixture(html `<nile-command-menu open></nile-command-menu>`); expect(el.hasAttribute('open')).to.be.true; });
266
+ it('50. createElement', async () => { const el = document.createElement('nile-command-menu'); document.body.appendChild(el); await el.updateComplete; expect(el.shadowRoot).to.not.be.null; document.body.removeChild(el); });
267
+ });
268
+ //# sourceMappingURL=nile-command-menu.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-command-menu.test.js","sourceRoot":"","sources":["../../../src/nile-command-menu/nile-command-menu.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, fixture, html, oneEvent, waitUntil } from '@open-wc/testing';\nimport './nile-command-menu';\nimport '../nile-command-menu-group/nile-command-menu-group';\nimport '../nile-command-menu-item/nile-command-menu-item';\nimport type { NileCommandMenu } from './nile-command-menu';\nimport type { NileCommandMenuItem } from '../nile-command-menu-item/nile-command-menu-item';\n\nconst withItems = html`\n <nile-command-menu>\n <nile-command-menu-group heading=\"Pages\">\n <nile-command-menu-item value=\"home\">Home</nile-command-menu-item>\n <nile-command-menu-item value=\"settings\">Settings</nile-command-menu-item>\n </nile-command-menu-group>\n <nile-command-menu-group heading=\"Actions\">\n <nile-command-menu-item value=\"new\">New file</nile-command-menu-item>\n <nile-command-menu-item value=\"disabled\" disabled>Disabled</nile-command-menu-item>\n </nile-command-menu-group>\n </nile-command-menu>\n`;\n\ndescribe('NileCommandMenu', () => {\n it('1. renders', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el).to.exist; });\n it('2. shadow root', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot).to.not.be.null; });\n it('3. tag name', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.tagName.toLowerCase()).to.equal('nile-command-menu'); });\n it('4. open defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.open).to.be.false; });\n it('5. placeholder default', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.placeholder).to.equal('Search commands...'); });\n it('6. label default', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.label).to.equal('Command menu'); });\n it('7. noResultsMessage default', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.noResultsMessage).to.equal('No results found'); });\n it('8. customSearch defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.customSearch).to.be.false; });\n it('9. keepOpenOnSelect defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.keepOpenOnSelect).to.be.false; });\n it('10. preventOverlayClose defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.preventOverlayClose).to.be.false; });\n it('11. base part', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[part=\"base\"]')).to.exist; });\n it('12. overlay part', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[part=\"overlay\"]')).to.exist; });\n it('13. panel part', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[part=\"panel\"]')).to.exist; });\n it('14. input part', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[part=\"input\"]')).to.exist; });\n it('15. list part', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[part=\"list\"]')).to.exist; });\n it('16. footer part', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[part=\"footer\"]')).to.exist; });\n it('17. empty part', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[part=\"empty\"]')).to.exist; });\n it('18. default slot', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('slot:not([name])')).to.exist; });\n it('19. footer slot', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('slot[name=\"footer\"]')).to.exist; });\n it('20. empty slot', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('slot[name=\"empty\"]')).to.exist; });\n it('21. dialog role', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[role=\"dialog\"]')).to.exist; });\n it('22. listbox role', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('[role=\"listbox\"]')).to.exist; });\n it('23. input combobox role', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot!.querySelector('input[role=\"combobox\"]')).to.exist; });\n it('24. placeholder applied', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu placeholder=\"Find...\"></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot!.querySelector('input')!.placeholder).to.equal('Find...'); });\n it('25. show method', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.show).to.be.a('function'); });\n it('26. hide method', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.hide).to.be.a('function'); });\n it('27. show opens', async () => { const el = await fixture<NileCommandMenu>(withItems); await el.show(); expect(el.open).to.be.true; await el.hide(); });\n it('28. nile-show event', async () => { const el = await fixture<NileCommandMenu>(withItems); setTimeout(() => el.show()); const ev = await oneEvent(el, 'nile-show'); expect(ev).to.exist; await el.hide(); });\n it('29. nile-after-show event', async () => { const el = await fixture<NileCommandMenu>(withItems); setTimeout(() => el.show()); const ev = await oneEvent(el, 'nile-after-show'); expect(ev).to.exist; await el.hide(); });\n it('30. hide closes', async () => { const el = await fixture<NileCommandMenu>(withItems); await el.show(); await el.hide(); expect(el.open).to.be.false; });\n\n it('31. filters items by query', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const input = el.shadowRoot!.querySelector('input')!;\n input.value = 'settings';\n input.dispatchEvent(new Event('input'));\n await el.updateComplete;\n const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);\n expect(visible.length).to.equal(1);\n expect(visible[0].value).to.equal('settings');\n await el.hide();\n });\n\n it('32. hides empty groups', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const input = el.shadowRoot!.querySelector('input')!;\n input.value = 'home';\n input.dispatchEvent(new Event('input'));\n await el.updateComplete;\n const groups = el.querySelectorAll('nile-command-menu-group');\n expect(groups[0].hidden).to.be.false; // Pages (has Home)\n expect(groups[1].hidden).to.be.true; // Actions (no match)\n await el.hide();\n });\n\n it('33. shows empty state on no match', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const input = el.shadowRoot!.querySelector('input')!;\n input.value = 'zzzznomatch';\n input.dispatchEvent(new Event('input'));\n await el.updateComplete;\n expect(el.shadowRoot!.querySelector('.command__empty--visible')).to.exist;\n await el.hide();\n });\n\n it('34. emits nile-search', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const input = el.shadowRoot!.querySelector('input')!;\n setTimeout(() => { input.value = 'x'; input.dispatchEvent(new Event('input')); });\n const ev = await oneEvent(el, 'nile-search');\n expect(ev.detail.value).to.equal('x');\n await el.hide();\n });\n\n it('35. emits nile-select on click', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const item = el.querySelector<NileCommandMenuItem>('nile-command-menu-item[value=\"home\"]')!;\n setTimeout(() => item.click());\n const ev = await oneEvent(el, 'nile-select');\n expect(ev.detail.value).to.equal('home');\n });\n\n it('36. select closes by default', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const item = el.querySelector<NileCommandMenuItem>('nile-command-menu-item[value=\"home\"]')!;\n item.click();\n await waitUntil(() => !el.open);\n expect(el.open).to.be.false;\n });\n\n it('37. keep-open-on-select stays open', async () => {\n const el = await fixture<NileCommandMenu>(html`\n <nile-command-menu keepopenonselect>\n <nile-command-menu-item value=\"home\">Home</nile-command-menu-item>\n </nile-command-menu>\n `);\n await el.show();\n el.querySelector<NileCommandMenuItem>('nile-command-menu-item')!.click();\n await el.updateComplete;\n expect(el.open).to.be.true;\n await el.hide();\n });\n\n it('38. disabled item not selected on click', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n let fired = false;\n el.addEventListener('nile-select', () => (fired = true));\n el.querySelector<NileCommandMenuItem>('nile-command-menu-item[value=\"disabled\"]')!.click();\n await el.updateComplete;\n expect(fired).to.be.false;\n await el.hide();\n });\n\n it('39. arrow down moves active item', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const panel = el.shadowRoot!.querySelector('[role=\"dialog\"]')!;\n panel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));\n await el.updateComplete;\n const active = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => i.active);\n expect(active.length).to.equal(1);\n await el.hide();\n });\n\n it('40. first visible item active on open', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const active = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => i.active);\n expect(active.length).to.equal(1);\n expect(active[0].value).to.equal('home');\n await el.hide();\n });\n\n it('41. enter selects active item', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const panel = el.shadowRoot!.querySelector('[role=\"dialog\"]')!;\n setTimeout(() => panel.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true })));\n const ev = await oneEvent(el, 'nile-select');\n expect(ev.detail.value).to.equal('home');\n });\n\n it('42. custom-search does not auto-filter', async () => {\n const el = await fixture<NileCommandMenu>(html`\n <nile-command-menu customsearch>\n <nile-command-menu-item value=\"a\">Alpha</nile-command-menu-item>\n <nile-command-menu-item value=\"b\">Beta</nile-command-menu-item>\n </nile-command-menu>\n `);\n await el.show();\n const input = el.shadowRoot!.querySelector('input')!;\n input.value = 'zzz';\n input.dispatchEvent(new Event('input'));\n await el.updateComplete;\n const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);\n expect(visible.length).to.equal(2);\n await el.hide();\n });\n\n it('43. nile-request-close cancelable', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n el.addEventListener('nile-request-close', e => e.preventDefault());\n const overlay = el.shadowRoot!.querySelector('.command__overlay') as HTMLElement;\n overlay.click();\n await el.updateComplete;\n expect(el.open).to.be.true;\n await el.hide();\n });\n\n it('44. overlay click closes', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const overlay = el.shadowRoot!.querySelector('.command__overlay') as HTMLElement;\n overlay.click();\n await waitUntil(() => !el.open);\n expect(el.open).to.be.false;\n });\n\n it('45. has-footer class when footer slotted', async () => {\n const el = await fixture<NileCommandMenu>(html`\n <nile-command-menu><div slot=\"footer\">footer</div></nile-command-menu>\n `);\n await el.updateComplete;\n expect(el.shadowRoot!.querySelector('.command--has-footer')).to.exist;\n });\n\n it('46. resets query on reopen', async () => {\n const el = await fixture<NileCommandMenu>(withItems);\n await el.show();\n const input = el.shadowRoot!.querySelector('input')!;\n input.value = 'home';\n input.dispatchEvent(new Event('input'));\n await el.updateComplete;\n await el.hide();\n await el.show();\n expect(el.value).to.equal('');\n await el.hide();\n });\n\n it('S1. scopes empty by default', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.scopes).to.deep.equal([]); });\n it('S2. no scopes row when empty', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot!.querySelector('[part=\"scopes\"]')).to.be.null; });\n it('S3. scopes attribute parses comma list', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu scopes=\"Pages, Actions\"></nile-command-menu>`); expect(el.scopes.map(s => s.value)).to.deep.equal(['pages', 'actions']); });\n it('S4. scopes row renders tags', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu scopes=\"Pages, Actions\"></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot!.querySelector('[part=\"scopes\"]')).to.exist; expect(el.shadowRoot!.querySelectorAll('nile-tag').length).to.equal(2); });\n it('S5. default scopes label', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.scopesLabel).to.equal('Searching for'); });\n it('S6. scope filters items', async () => {\n const el = await fixture<NileCommandMenu>(html`\n <nile-command-menu scopes=\"Pages, Actions\">\n <nile-command-menu-item value=\"home\" scope=\"pages\">Home</nile-command-menu-item>\n <nile-command-menu-item value=\"run\" scope=\"actions\">Run</nile-command-menu-item>\n </nile-command-menu>\n `);\n await el.show();\n el.scopes = [{ label: 'Pages', value: 'pages' }];\n await el.updateComplete;\n const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);\n expect(visible.map(i => i.value)).to.deep.equal(['home']);\n await el.hide();\n });\n it('S7. scoped item with no scope always shown', async () => {\n const el = await fixture<NileCommandMenu>(html`\n <nile-command-menu scopes=\"Pages\">\n <nile-command-menu-item value=\"home\" scope=\"pages\">Home</nile-command-menu-item>\n <nile-command-menu-item value=\"global\">Global</nile-command-menu-item>\n <nile-command-menu-item value=\"run\" scope=\"actions\">Run</nile-command-menu-item>\n </nile-command-menu>\n `);\n await el.show();\n const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);\n expect(visible.map(i => i.value)).to.have.members(['home', 'global']);\n expect(visible.map(i => i.value)).to.not.include('run');\n await el.hide();\n });\n it('S8. removing a scope emits event and refilters', async () => {\n const el = await fixture<NileCommandMenu>(html`\n <nile-command-menu scopes=\"Pages, Actions\">\n <nile-command-menu-item value=\"home\" scope=\"pages\">Home</nile-command-menu-item>\n <nile-command-menu-item value=\"run\" scope=\"actions\">Run</nile-command-menu-item>\n </nile-command-menu>\n `);\n await el.show();\n const tag = el.shadowRoot!.querySelector('nile-tag')!; // first tag = Pages\n setTimeout(() => tag.dispatchEvent(new CustomEvent('nile-remove', { bubbles: true, composed: true })));\n const ev = await oneEvent(el, 'nile-scope-remove');\n expect(ev.detail.scope.value).to.equal('pages');\n await el.updateComplete;\n expect(el.scopes.map(s => s.value)).to.deep.equal(['actions']);\n const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);\n expect(visible.map(i => i.value)).to.deep.equal(['run']);\n await el.hide();\n });\n\n it('47a. footer hints render by default', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot!.querySelector('[part=\"hints\"]')).to.exist; expect(el.shadowRoot!.querySelectorAll('.command__footer kbd').length).to.be.greaterThan(0); });\n it('47b. has-footer by default (hints)', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot!.querySelector('.command--has-footer')).to.exist; });\n it('47c. no-footer-hints removes hints', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu nofooterhints></nile-command-menu>`); await el.updateComplete; expect(el.noFooterHints).to.be.true; expect(el.shadowRoot!.querySelector('[part=\"hints\"]')).to.be.null; });\n it('47d. no-footer-hints hides footer', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu nofooterhints></nile-command-menu>`); await el.updateComplete; expect(el.shadowRoot!.querySelector('.command--has-footer')).to.be.null; });\n it('47. is defined', async () => { expect(customElements.get('nile-command-menu')).to.exist; });\n it('48. has styles', async () => { expect((await import('./nile-command-menu')).NileCommandMenu.styles).to.exist; });\n it('49. open reflects', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu open></nile-command-menu>`); expect(el.hasAttribute('open')).to.be.true; });\n it('50. createElement', async () => { const el = document.createElement('nile-command-menu') as NileCommandMenu; document.body.appendChild(el); await el.updateComplete; expect(el.shadowRoot).to.not.be.null; document.body.removeChild(el); });\n});\n"]}
@@ -0,0 +1 @@
1
+ export { NileCommandMenuGroup } from './nile-command-menu-group';
@@ -0,0 +1,2 @@
1
+ export { NileCommandMenuGroup } from './nile-command-menu-group';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nile-command-menu-group/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["export { NileCommandMenuGroup } from './nile-command-menu-group';\n"]}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
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
+ /**
8
+ * CommandMenuGroup CSS
9
+ */
10
+ export declare const styles: import("lit").CSSResult;
11
+ declare const _default: import("lit").CSSResult[];
12
+ export default _default;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
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 { css } from 'lit';
8
+ /**
9
+ * CommandMenuGroup CSS
10
+ */
11
+ export const styles = css `
12
+ :host {
13
+ box-sizing: border-box;
14
+ display: block;
15
+ -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));
16
+ -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));
17
+ text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));
18
+ }
19
+
20
+ :host([hidden]) {
21
+ display: none !important;
22
+ }
23
+
24
+ .group {
25
+ padding-bottom: var(--nile-spacing-xs, var(--ng-spacing-xs));
26
+ }
27
+
28
+ .group__heading {
29
+ display: block;
30
+ padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg)) var(--nile-spacing-xs, var(--ng-spacing-xs));
31
+ font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));
32
+ font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));
33
+ font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-medium));
34
+ line-height: 1.4;
35
+ letter-spacing: 0.04em;
36
+ text-transform: uppercase;
37
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-quaternary-500));
38
+ }
39
+
40
+ .group__heading--empty {
41
+ display: none;
42
+ }
43
+ `;
44
+ export default [styles];
45
+ //# sourceMappingURL=nile-command-menu-group.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-command-menu-group.css.js","sourceRoot":"","sources":["../../../src/nile-command-menu-group/nile-command-menu-group.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,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 { css } from 'lit';\n\n/**\n * CommandMenuGroup CSS\n */\nexport const styles = css`\n :host {\n box-sizing: border-box;\n display: block;\n -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));\n -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));\n text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n .group {\n padding-bottom: var(--nile-spacing-xs, var(--ng-spacing-xs));\n }\n\n .group__heading {\n display: block;\n padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-lg, var(--ng-spacing-lg)) var(--nile-spacing-xs, var(--ng-spacing-xs));\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));\n font-weight: var(--nile-font-weight-medium, var(--ng-font-weight-medium));\n line-height: 1.4;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-quaternary-500));\n }\n\n .group__heading--empty {\n display: none;\n }\n`;\n\nexport default [styles];\n"]}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
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 NileElement from '../internal/nile-element';
8
+ import type { CSSResultGroup } from 'lit';
9
+ /**
10
+ * Groups related commands under an optional heading inside a `nile-command-menu`.
11
+ *
12
+ * @tag nile-command-menu-group
13
+ *
14
+ * @summary A labelled section of command items within a command menu.
15
+ * @status stable
16
+ * @since 2.0
17
+ *
18
+ * @slot - The group's command items (`nile-command-menu-item`).
19
+ * @slot heading - The group heading. Takes precedence over the `heading` attribute when provided.
20
+ *
21
+ * @csspart base - The component's base wrapper.
22
+ * @csspart heading - The group heading.
23
+ * @csspart items - The wrapper around the slotted items.
24
+ */
25
+ export declare class NileCommandMenuGroup extends NileElement {
26
+ static styles: CSSResultGroup;
27
+ private readonly hasSlotController;
28
+ /** The text heading shown above the group's items. Use the `heading` slot for richer content. */
29
+ heading: string;
30
+ connectedCallback(): void;
31
+ render(): import("lit-html").TemplateResult<1>;
32
+ }
33
+ export default NileCommandMenuGroup;
34
+ declare global {
35
+ interface HTMLElementTagNameMap {
36
+ 'nile-command-menu-group': NileCommandMenuGroup;
37
+ }
38
+ }