@aquera/nile-elements 1.9.4 → 1.9.6

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 (198) hide show
  1. package/README.md +13 -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 +1527 -804
  8. package/dist/nile-chip/nile-chip.css.cjs.js +1 -1
  9. package/dist/nile-chip/nile-chip.css.cjs.js.map +1 -1
  10. package/dist/nile-chip/nile-chip.css.esm.js +8 -1
  11. package/dist/nile-code-editor/nile-code-editor.cjs.js +1 -1
  12. package/dist/nile-code-editor/nile-code-editor.cjs.js.map +1 -1
  13. package/dist/nile-code-editor/nile-code-editor.esm.js +3 -3
  14. package/dist/nile-combobox/index.cjs.js +1 -1
  15. package/dist/nile-combobox/index.esm.js +1 -1
  16. package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
  17. package/dist/nile-combobox/nile-combobox.esm.js +1 -1
  18. package/dist/nile-command-menu/index.cjs.js +2 -0
  19. package/dist/nile-command-menu/index.cjs.js.map +1 -0
  20. package/dist/nile-command-menu/index.esm.js +1 -0
  21. package/dist/nile-command-menu/nile-command-menu.cjs.js +2 -0
  22. package/dist/nile-command-menu/nile-command-menu.cjs.js.map +1 -0
  23. package/dist/nile-command-menu/nile-command-menu.css.cjs.js +2 -0
  24. package/dist/nile-command-menu/nile-command-menu.css.cjs.js.map +1 -0
  25. package/dist/nile-command-menu/nile-command-menu.css.esm.js +182 -0
  26. package/dist/nile-command-menu/nile-command-menu.esm.js +97 -0
  27. package/dist/nile-command-menu-group/index.cjs.js +2 -0
  28. package/dist/nile-command-menu-group/index.cjs.js.map +1 -0
  29. package/dist/nile-command-menu-group/index.esm.js +1 -0
  30. package/dist/nile-command-menu-group/nile-command-menu-group.cjs.js +2 -0
  31. package/dist/nile-command-menu-group/nile-command-menu-group.cjs.js.map +1 -0
  32. package/dist/nile-command-menu-group/nile-command-menu-group.css.cjs.js +2 -0
  33. package/dist/nile-command-menu-group/nile-command-menu-group.css.cjs.js.map +1 -0
  34. package/dist/nile-command-menu-group/nile-command-menu-group.css.esm.js +33 -0
  35. package/dist/nile-command-menu-group/nile-command-menu-group.esm.js +11 -0
  36. package/dist/nile-command-menu-item/index.cjs.js +2 -0
  37. package/dist/nile-command-menu-item/index.cjs.js.map +1 -0
  38. package/dist/nile-command-menu-item/index.esm.js +1 -0
  39. package/dist/nile-command-menu-item/nile-command-menu-item.cjs.js +2 -0
  40. package/dist/nile-command-menu-item/nile-command-menu-item.cjs.js.map +1 -0
  41. package/dist/nile-command-menu-item/nile-command-menu-item.css.cjs.js +2 -0
  42. package/dist/nile-command-menu-item/nile-command-menu-item.css.cjs.js.map +1 -0
  43. package/dist/nile-command-menu-item/nile-command-menu-item.css.esm.js +115 -0
  44. package/dist/nile-command-menu-item/nile-command-menu-item.esm.js +21 -0
  45. package/dist/nile-detail/index.cjs.js +1 -1
  46. package/dist/nile-detail/index.esm.js +1 -1
  47. package/dist/nile-detail/nile-detail.cjs.js +1 -1
  48. package/dist/nile-detail/nile-detail.esm.js +1 -1
  49. package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
  50. package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
  51. package/dist/nile-dialog/nile-dialog.esm.js +1 -1
  52. package/dist/nile-dot-stepper/index.cjs.js +2 -0
  53. package/dist/nile-dot-stepper/index.cjs.js.map +1 -0
  54. package/dist/nile-dot-stepper/index.esm.js +1 -0
  55. package/dist/nile-dot-stepper/nile-dot-stepper.cjs.js +2 -0
  56. package/dist/nile-dot-stepper/nile-dot-stepper.cjs.js.map +1 -0
  57. package/dist/nile-dot-stepper/nile-dot-stepper.css.cjs.js +2 -0
  58. package/dist/nile-dot-stepper/nile-dot-stepper.css.cjs.js.map +1 -0
  59. package/dist/nile-dot-stepper/nile-dot-stepper.css.esm.js +77 -0
  60. package/dist/nile-dot-stepper/nile-dot-stepper.esm.js +24 -0
  61. package/dist/nile-hero/nile-hero.cjs.js +1 -1
  62. package/dist/nile-hero/nile-hero.cjs.js.map +1 -1
  63. package/dist/nile-hero/nile-hero.css.cjs.js +1 -1
  64. package/dist/nile-hero/nile-hero.css.cjs.js.map +1 -1
  65. package/dist/nile-hero/nile-hero.css.esm.js +14 -14
  66. package/dist/nile-hero/nile-hero.esm.js +1 -1
  67. package/dist/nile-hero-header/nile-hero-header.cjs.js +1 -1
  68. package/dist/nile-hero-header/nile-hero-header.cjs.js.map +1 -1
  69. package/dist/nile-hero-header/nile-hero-header.css.cjs.js +1 -1
  70. package/dist/nile-hero-header/nile-hero-header.css.cjs.js.map +1 -1
  71. package/dist/nile-hero-header/nile-hero-header.css.esm.js +11 -11
  72. package/dist/nile-hero-header/nile-hero-header.esm.js +3 -3
  73. package/dist/nile-rich-text-editor/index.cjs.js +1 -1
  74. package/dist/nile-rich-text-editor/index.esm.js +1 -1
  75. package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
  76. package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
  77. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
  78. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
  79. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +70 -0
  80. package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
  81. package/dist/nile-rich-text-editor/nile-rte-image.cjs.js +3 -0
  82. package/dist/nile-rich-text-editor/nile-rte-image.cjs.js.map +1 -0
  83. package/dist/nile-rich-text-editor/nile-rte-image.esm.js +96 -0
  84. package/dist/nile-section-message/nile-section-message.css.cjs.js +1 -1
  85. package/dist/nile-section-message/nile-section-message.css.cjs.js.map +1 -1
  86. package/dist/nile-section-message/nile-section-message.css.esm.js +7 -8
  87. package/dist/src/index.d.ts +4 -0
  88. package/dist/src/index.js +4 -0
  89. package/dist/src/index.js.map +1 -1
  90. package/dist/src/nile-chip/nile-chip.css.js +8 -1
  91. package/dist/src/nile-chip/nile-chip.css.js.map +1 -1
  92. package/dist/src/nile-code-editor/nile-code-editor.js +3 -3
  93. package/dist/src/nile-code-editor/nile-code-editor.js.map +1 -1
  94. package/dist/src/nile-command-menu/index.d.ts +1 -0
  95. package/dist/src/nile-command-menu/index.js +2 -0
  96. package/dist/src/nile-command-menu/index.js.map +1 -0
  97. package/dist/src/nile-command-menu/nile-command-menu.css.d.ts +12 -0
  98. package/dist/src/nile-command-menu/nile-command-menu.css.js +194 -0
  99. package/dist/src/nile-command-menu/nile-command-menu.css.js.map +1 -0
  100. package/dist/src/nile-command-menu/nile-command-menu.d.ts +137 -0
  101. package/dist/src/nile-command-menu/nile-command-menu.js +557 -0
  102. package/dist/src/nile-command-menu/nile-command-menu.js.map +1 -0
  103. package/dist/src/nile-command-menu/nile-command-menu.test.d.ts +3 -0
  104. package/dist/src/nile-command-menu/nile-command-menu.test.js +268 -0
  105. package/dist/src/nile-command-menu/nile-command-menu.test.js.map +1 -0
  106. package/dist/src/nile-command-menu-group/index.d.ts +1 -0
  107. package/dist/src/nile-command-menu-group/index.js +2 -0
  108. package/dist/src/nile-command-menu-group/index.js.map +1 -0
  109. package/dist/src/nile-command-menu-group/nile-command-menu-group.css.d.ts +12 -0
  110. package/dist/src/nile-command-menu-group/nile-command-menu-group.css.js +45 -0
  111. package/dist/src/nile-command-menu-group/nile-command-menu-group.css.js.map +1 -0
  112. package/dist/src/nile-command-menu-group/nile-command-menu-group.d.ts +38 -0
  113. package/dist/src/nile-command-menu-group/nile-command-menu-group.js +68 -0
  114. package/dist/src/nile-command-menu-group/nile-command-menu-group.js.map +1 -0
  115. package/dist/src/nile-command-menu-group/nile-command-menu-group.test.d.ts +2 -0
  116. package/dist/src/nile-command-menu-group/nile-command-menu-group.test.js +22 -0
  117. package/dist/src/nile-command-menu-group/nile-command-menu-group.test.js.map +1 -0
  118. package/dist/src/nile-command-menu-item/index.d.ts +1 -0
  119. package/dist/src/nile-command-menu-item/index.js +2 -0
  120. package/dist/src/nile-command-menu-item/index.js.map +1 -0
  121. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.d.ts +12 -0
  122. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.js +127 -0
  123. package/dist/src/nile-command-menu-item/nile-command-menu-item.css.js.map +1 -0
  124. package/dist/src/nile-command-menu-item/nile-command-menu-item.d.ts +73 -0
  125. package/dist/src/nile-command-menu-item/nile-command-menu-item.js +174 -0
  126. package/dist/src/nile-command-menu-item/nile-command-menu-item.js.map +1 -0
  127. package/dist/src/nile-command-menu-item/nile-command-menu-item.test.d.ts +1 -0
  128. package/dist/src/nile-command-menu-item/nile-command-menu-item.test.js +35 -0
  129. package/dist/src/nile-command-menu-item/nile-command-menu-item.test.js.map +1 -0
  130. package/dist/src/nile-dialog/nile-dialog.js +1 -1
  131. package/dist/src/nile-dialog/nile-dialog.js.map +1 -1
  132. package/dist/src/nile-dot-stepper/index.d.ts +1 -0
  133. package/dist/src/nile-dot-stepper/index.js +2 -0
  134. package/dist/src/nile-dot-stepper/index.js.map +1 -0
  135. package/dist/src/nile-dot-stepper/nile-dot-stepper.css.d.ts +12 -0
  136. package/dist/src/nile-dot-stepper/nile-dot-stepper.css.js +89 -0
  137. package/dist/src/nile-dot-stepper/nile-dot-stepper.css.js.map +1 -0
  138. package/dist/src/nile-dot-stepper/nile-dot-stepper.d.ts +48 -0
  139. package/dist/src/nile-dot-stepper/nile-dot-stepper.js +153 -0
  140. package/dist/src/nile-dot-stepper/nile-dot-stepper.js.map +1 -0
  141. package/dist/src/nile-dot-stepper/nile-dot-stepper.test.d.ts +1 -0
  142. package/dist/src/nile-dot-stepper/nile-dot-stepper.test.js +319 -0
  143. package/dist/src/nile-dot-stepper/nile-dot-stepper.test.js.map +1 -0
  144. package/dist/src/nile-hero/nile-hero.css.js +12 -12
  145. package/dist/src/nile-hero/nile-hero.css.js.map +1 -1
  146. package/dist/src/nile-hero/nile-hero.js +1 -1
  147. package/dist/src/nile-hero/nile-hero.js.map +1 -1
  148. package/dist/src/nile-hero-header/nile-hero-header.css.js +9 -9
  149. package/dist/src/nile-hero-header/nile-hero-header.css.js.map +1 -1
  150. package/dist/src/nile-hero-header/nile-hero-header.js +1 -1
  151. package/dist/src/nile-hero-header/nile-hero-header.js.map +1 -1
  152. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +70 -0
  153. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
  154. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +3 -0
  155. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +81 -3
  156. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
  157. package/dist/src/nile-rich-text-editor/nile-rte-image.d.ts +87 -0
  158. package/dist/src/nile-rich-text-editor/nile-rte-image.js +1073 -0
  159. package/dist/src/nile-rich-text-editor/nile-rte-image.js.map +1 -0
  160. package/dist/src/nile-section-message/nile-section-message.css.js +7 -8
  161. package/dist/src/nile-section-message/nile-section-message.css.js.map +1 -1
  162. package/dist/src/version.js +1 -1
  163. package/dist/src/version.js.map +1 -1
  164. package/dist/tsconfig.tsbuildinfo +1 -1
  165. package/package.json +2 -1
  166. package/src/index.ts +4 -0
  167. package/src/nile-chip/nile-chip.css.ts +8 -1
  168. package/src/nile-code-editor/nile-code-editor.ts +3 -3
  169. package/src/nile-command-menu/index.ts +1 -0
  170. package/src/nile-command-menu/nile-command-menu.css.ts +196 -0
  171. package/src/nile-command-menu/nile-command-menu.test.ts +289 -0
  172. package/src/nile-command-menu/nile-command-menu.ts +601 -0
  173. package/src/nile-command-menu-group/index.ts +1 -0
  174. package/src/nile-command-menu-group/nile-command-menu-group.css.ts +47 -0
  175. package/src/nile-command-menu-group/nile-command-menu-group.test.ts +23 -0
  176. package/src/nile-command-menu-group/nile-command-menu-group.ts +72 -0
  177. package/src/nile-command-menu-item/index.ts +1 -0
  178. package/src/nile-command-menu-item/nile-command-menu-item.css.ts +129 -0
  179. package/src/nile-command-menu-item/nile-command-menu-item.test.ts +36 -0
  180. package/src/nile-command-menu-item/nile-command-menu-item.ts +172 -0
  181. package/src/nile-dialog/nile-dialog.ts +1 -1
  182. package/src/nile-dot-stepper/index.ts +1 -0
  183. package/src/nile-dot-stepper/nile-dot-stepper.css.ts +90 -0
  184. package/src/nile-dot-stepper/nile-dot-stepper.test.ts +493 -0
  185. package/src/nile-dot-stepper/nile-dot-stepper.ts +159 -0
  186. package/src/nile-hero/nile-hero.css.ts +12 -12
  187. package/src/nile-hero/nile-hero.ts +1 -1
  188. package/src/nile-hero-header/nile-hero-header.css.ts +9 -9
  189. package/src/nile-hero-header/nile-hero-header.ts +1 -1
  190. package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +70 -0
  191. package/src/nile-rich-text-editor/nile-rich-text-editor.ts +89 -3
  192. package/src/nile-rich-text-editor/nile-rte-image.ts +1132 -0
  193. package/src/nile-section-message/nile-section-message.css.ts +7 -8
  194. package/stories/dot-stepper.stories.ts +67 -0
  195. package/vscode-html-custom-data.json +220 -1
  196. package/dist/index-c0b5232c.cjs.js +0 -2
  197. package/dist/index-c0b5232c.cjs.js.map +0 -1
  198. package/dist/index-e43a18eb.esm.js +0 -1
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Webcomponent nile-elements following open-wc recommendations",
4
4
  "license": "MIT",
5
5
  "author": "nile-elements",
6
- "version": "1.9.4",
6
+ "version": "1.9.6",
7
7
  "main": "dist/src/index.js",
8
8
  "type": "module",
9
9
  "module": "dist/src/index.js",
@@ -76,6 +76,7 @@
76
76
  "./nile-hero": "./dist/src/nile-hero/index.js",
77
77
  "./nile-stepper-item": "./dist/src/nile-stepper-item/index.js",
78
78
  "./nile-stepper": "./dist/src/nile-stepper/index.js",
79
+ "./nile-dot-stepper": "./dist/src/nile-dot-stepper/index.js",
79
80
  "./nile-hero-header": "./dist/src/nile-hero-header/index.js",
80
81
  "./nile-vertical-stepper-item": "./dist/src/nile-vertical-stepper-item/index.js",
81
82
  "./nile-format-date": "./dist/src/nile-format-date/index.js",
package/src/index.ts CHANGED
@@ -65,6 +65,7 @@ export { NileEmptyState } from './nile-empty-state';
65
65
  export { NileHero } from './nile-hero';
66
66
  export { NileStepperItem } from './nile-stepper-item';
67
67
  export { NileStepper } from './nile-stepper';
68
+ export { NileDotStepper } from './nile-dot-stepper';
68
69
  export { NileHeroHeader } from './nile-hero-header';
69
70
  export { NileVerticalStepperItem } from './nile-vertical-stepper-item';
70
71
  export { NileFormatDate } from './nile-format-date';
@@ -130,6 +131,9 @@ export { NileFloatingPanel } from './nile-floating-panel';
130
131
  export { NileContextMenu } from './nile-context-menu';
131
132
  export { NileContextMenuGroup } from './nile-context-menu-group';
132
133
  export { NileContextMenuItem } from './nile-context-menu-item';
134
+ export { NileCommandMenu } from './nile-command-menu';
135
+ export { NileCommandMenuGroup } from './nile-command-menu-group';
136
+ export { NileCommandMenuItem } from './nile-command-menu-item';
133
137
  export { NileInlineSidebarItemHeader } from './nile-inline-sidebar-item-header';
134
138
  export { NileInlineSidebarItemBody } from './nile-inline-sidebar-item-body';
135
139
  export { NileMarkdown } from './nile-markdown';
@@ -89,11 +89,13 @@ export const styles = css`
89
89
  }
90
90
 
91
91
  .nile-chip {
92
- padding: var(--nile-spacing-5px,var( --ng-spacing-md)) var(--nile-spacing-10px,var(--ng-spacing-lg));
92
+ padding: var(--nile-spacing-5px,var(--ng-spacing-xs)) var(--nile-spacing-10px,var(--ng-spacing-lg));
93
+ min-height: var(--ng-height-40px);
93
94
  background-color: var(--nile-colors-white-base,var( --ng-colors-bg-primary));
94
95
  border-radius: var(--nile-radius-radius-xs,var(--ng-radius-md));
95
96
  border: solid 1px var(--nile-colors-neutral-500,var(--ng-colors-border-primary));
96
97
  display: flex;
98
+ align-items: center;
97
99
  flex-wrap: wrap;
98
100
  width: 100%;
99
101
  overflow-x: hidden;
@@ -102,6 +104,7 @@ export const styles = css`
102
104
 
103
105
  nile-input::part(base) {
104
106
  padding: 0px !important;
107
+ height: auto;
105
108
  }
106
109
 
107
110
  .nile-chip--no-wrap {
@@ -171,6 +174,10 @@ export const styles = css`
171
174
  nile-auto-complete::part(input) {
172
175
  padding: var(--nile-spacing-lg, var(--ng-spacing-none));
173
176
  }
177
+
178
+ nile-auto-complete::part(base) {
179
+ height: auto;
180
+ }
174
181
 
175
182
  .nile-chip:hover:not(.nile-chip--disabled) {
176
183
  border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-neutral));
@@ -298,12 +298,12 @@ export class NileCodeEditor extends NileElement {
298
298
  ${this.expandable && !this.disabled
299
299
  ? html`
300
300
  <div @click="${(e: CustomEvent) => this.emit('nile-expand')}" class="expand__icon__container">
301
- <nile-icon
301
+ <nile-glyph
302
302
  name="${this.expandIcon}"
303
- method="var(--nile-svg-method-fill, var(--ng-svg-method-stroke))"
303
+ method="var(--nile-svg-method-fill, var(--ng-svg-method-fill))"
304
304
  size="16"
305
305
  color="black"
306
- ></nile-icon>
306
+ ></nile-glyph>
307
307
  </div>`
308
308
  : ''}
309
309
  </div>
@@ -0,0 +1 @@
1
+ export { NileCommandMenu } from './nile-command-menu';
@@ -0,0 +1,196 @@
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
+ import { css } from 'lit';
9
+
10
+ /**
11
+ * CommandMenu CSS
12
+ */
13
+ export const styles = css`
14
+ :host {
15
+ --width: 640px;
16
+ --max-height: 480px;
17
+
18
+ display: contents;
19
+ box-sizing: border-box;
20
+ -webkit-font-smoothing: var(--nile-webkit-font-smoothing, var(--ng-webkit-font-smoothing));
21
+ -moz-osx-font-smoothing: var(--nile-moz-osx-font-smoothing, var(--ng-moz-osx-font-smoothing));
22
+ text-rendering: var(--nile-text-rendering, var(--ng-text-rendering));
23
+ }
24
+
25
+ :host *,
26
+ :host *::before,
27
+ :host *::after {
28
+ box-sizing: inherit;
29
+ }
30
+
31
+ .command {
32
+ position: fixed;
33
+ inset: 0;
34
+ z-index: 9999;
35
+ display: flex;
36
+ align-items: flex-start;
37
+ justify-content: center;
38
+ padding: 15vh var(--nile-spacing-xl, var(--ng-spacing-xl)) var(--nile-spacing-xl, var(--ng-spacing-xl));
39
+ font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));
40
+ }
41
+
42
+ .command[hidden] {
43
+ display: none;
44
+ }
45
+
46
+ .command__overlay {
47
+ position: fixed;
48
+ inset: 0;
49
+ background-color: var(--nile-bg-color-dialog, var(--ng-componentcolors-alpha-black-70));
50
+ }
51
+
52
+ .command__panel {
53
+ position: relative;
54
+ display: flex;
55
+ flex-direction: column;
56
+ width: 100%;
57
+ max-width: var(--width);
58
+ max-height: var(--max-height);
59
+ overflow: hidden;
60
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
61
+ border: solid 1px var(--nile-colors-border-surface, var(--ng-colors-border-secondary-alt));
62
+ border-radius: var(--nile-radius-lg, var(--ng-radius-xl));
63
+ box-shadow: var(--nile-box-shadow-8, var(--ng-shadow-xl));
64
+ }
65
+
66
+ .command__panel:focus {
67
+ outline: none;
68
+ }
69
+
70
+ /* Search header */
71
+ .command__header {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: var(--nile-spacing-md, var(--ng-spacing-md));
75
+ padding: var(--nile-spacing-lg, var(--ng-spacing-lg)) var(--nile-spacing-xl, var(--ng-spacing-xl));
76
+ border-bottom: solid 1px var(--nile-colors-border-surface, var(--ng-colors-border-secondary-alt));
77
+ }
78
+
79
+ .command__search-icon {
80
+ flex: 0 0 auto;
81
+ display: inline-flex;
82
+ align-items: center;
83
+ color: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));
84
+ }
85
+
86
+ .command__search-icon nile-glyph {
87
+ width: 20px;
88
+ height: 20px;
89
+ }
90
+
91
+ .command__input {
92
+ flex: 1 1 auto;
93
+ min-width: 0;
94
+ border: none;
95
+ outline: none;
96
+ background: transparent;
97
+ font-family: inherit;
98
+ font-size: var(--nile-type-scale-4, var(--ng-font-size-text-md));
99
+ font-weight: var(--nile-font-weight-regular, var(--ng-font-weight-regular));
100
+ line-height: 1.4;
101
+ color: var(--nile-colors-dark-900, var(--ng-colors-text-primary-900));
102
+ }
103
+
104
+ .command__input::placeholder {
105
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-placeholder));
106
+ }
107
+
108
+ /* "Searching for" scopes row */
109
+ .command__scopes {
110
+ display: flex;
111
+ align-items: center;
112
+ flex-wrap: wrap;
113
+ gap: var(--nile-spacing-md, var(--ng-spacing-md));
114
+ padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-xl, var(--ng-spacing-xl));
115
+ border-bottom: solid 1px var(--nile-colors-border-surface, var(--ng-colors-border-secondary-alt));
116
+ }
117
+
118
+ .command__scopes-label {
119
+ flex: 0 0 auto;
120
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
121
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-quaternary-500));
122
+ }
123
+
124
+ .command__scopes-tags {
125
+ display: flex;
126
+ align-items: center;
127
+ flex-wrap: wrap;
128
+ gap: var(--nile-spacing-sm, var(--ng-spacing-sm));
129
+ }
130
+
131
+ /* Scrollable results list */
132
+ .command__list {
133
+ flex: 1 1 auto;
134
+ overflow-y: auto;
135
+ overscroll-behavior: contain;
136
+ padding: var(--nile-spacing-sm, var(--ng-spacing-sm));
137
+ }
138
+
139
+ .command__empty {
140
+ display: none;
141
+ padding: var(--nile-spacing-3xl, var(--ng-spacing-3xl)) var(--nile-spacing-xl, var(--ng-spacing-xl));
142
+ text-align: center;
143
+ font-size: var(--nile-type-scale-3, var(--ng-font-size-text-sm));
144
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-quaternary-500));
145
+ }
146
+
147
+ .command__empty--visible {
148
+ display: block;
149
+ }
150
+
151
+ /* Footer */
152
+ .command__footer {
153
+ display: none;
154
+ align-items: center;
155
+ gap: var(--nile-spacing-lg, var(--ng-spacing-lg));
156
+ padding: var(--nile-spacing-md, var(--ng-spacing-md)) var(--nile-spacing-xl, var(--ng-spacing-xl));
157
+ border-top: solid 1px var(--nile-colors-border-surface, var(--ng-colors-border-secondary-alt));
158
+ font-size: var(--nile-type-scale-2, var(--ng-font-size-text-xs));
159
+ color: var(--nile-colors-dark-500, var(--ng-colors-text-quaternary-500));
160
+ }
161
+
162
+ .command--has-footer .command__footer {
163
+ display: flex;
164
+ }
165
+
166
+ /* Built-in keyboard-hint row (footer slot fallback) */
167
+ .command__hints {
168
+ display: flex;
169
+ align-items: center;
170
+ gap: var(--nile-spacing-xl, var(--ng-spacing-xl));
171
+ }
172
+
173
+ .command__hint {
174
+ display: inline-flex;
175
+ align-items: center;
176
+ gap: var(--nile-spacing-sm, var(--ng-spacing-sm));
177
+ }
178
+
179
+ .command__footer kbd {
180
+ display: inline-flex;
181
+ align-items: center;
182
+ justify-content: center;
183
+ min-width: 20px;
184
+ height: 20px;
185
+ padding: 0 5px;
186
+ border-radius: var(--nile-radius-radius-xs, var(--ng-radius-xs));
187
+ border: solid 1px var(--nile-colors-border-surface, var(--ng-colors-border-secondary-alt));
188
+ background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));
189
+ font-family: inherit;
190
+ font-size: 11px;
191
+ line-height: 1;
192
+ color: var(--nile-colors-dark-500, var(--ng-colors-fg-quaternary-400));
193
+ }
194
+ `;
195
+
196
+ export default [styles];
@@ -0,0 +1,289 @@
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
+ import type { NileCommandMenu } from './nile-command-menu';
6
+ import type { NileCommandMenuItem } from '../nile-command-menu-item/nile-command-menu-item';
7
+
8
+ const withItems = html`
9
+ <nile-command-menu>
10
+ <nile-command-menu-group heading="Pages">
11
+ <nile-command-menu-item value="home">Home</nile-command-menu-item>
12
+ <nile-command-menu-item value="settings">Settings</nile-command-menu-item>
13
+ </nile-command-menu-group>
14
+ <nile-command-menu-group heading="Actions">
15
+ <nile-command-menu-item value="new">New file</nile-command-menu-item>
16
+ <nile-command-menu-item value="disabled" disabled>Disabled</nile-command-menu-item>
17
+ </nile-command-menu-group>
18
+ </nile-command-menu>
19
+ `;
20
+
21
+ describe('NileCommandMenu', () => {
22
+ it('1. renders', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el).to.exist; });
23
+ it('2. shadow root', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.shadowRoot).to.not.be.null; });
24
+ 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'); });
25
+ it('4. open defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.open).to.be.false; });
26
+ it('5. placeholder default', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.placeholder).to.equal('Search commands...'); });
27
+ it('6. label default', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.label).to.equal('Command menu'); });
28
+ 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'); });
29
+ it('8. customSearch defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.customSearch).to.be.false; });
30
+ it('9. keepOpenOnSelect defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.keepOpenOnSelect).to.be.false; });
31
+ it('10. preventOverlayClose defaults false', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.preventOverlayClose).to.be.false; });
32
+ 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; });
33
+ 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; });
34
+ 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; });
35
+ 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; });
36
+ 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; });
37
+ 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; });
38
+ 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; });
39
+ 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; });
40
+ 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; });
41
+ 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; });
42
+ 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; });
43
+ 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; });
44
+ 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; });
45
+ 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...'); });
46
+ it('25. show method', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.show).to.be.a('function'); });
47
+ it('26. hide method', async () => { const el = await fixture<NileCommandMenu>(html`<nile-command-menu></nile-command-menu>`); expect(el.hide).to.be.a('function'); });
48
+ it('27. show opens', async () => { const el = await fixture<NileCommandMenu>(withItems); await el.show(); expect(el.open).to.be.true; await el.hide(); });
49
+ 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(); });
50
+ 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(); });
51
+ it('30. hide closes', async () => { const el = await fixture<NileCommandMenu>(withItems); await el.show(); await el.hide(); expect(el.open).to.be.false; });
52
+
53
+ it('31. filters items by query', async () => {
54
+ const el = await fixture<NileCommandMenu>(withItems);
55
+ await el.show();
56
+ const input = el.shadowRoot!.querySelector('input')!;
57
+ input.value = 'settings';
58
+ input.dispatchEvent(new Event('input'));
59
+ await el.updateComplete;
60
+ const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);
61
+ expect(visible.length).to.equal(1);
62
+ expect(visible[0].value).to.equal('settings');
63
+ await el.hide();
64
+ });
65
+
66
+ it('32. hides empty groups', async () => {
67
+ const el = await fixture<NileCommandMenu>(withItems);
68
+ await el.show();
69
+ const input = el.shadowRoot!.querySelector('input')!;
70
+ input.value = 'home';
71
+ input.dispatchEvent(new Event('input'));
72
+ await el.updateComplete;
73
+ const groups = el.querySelectorAll('nile-command-menu-group');
74
+ expect(groups[0].hidden).to.be.false; // Pages (has Home)
75
+ expect(groups[1].hidden).to.be.true; // Actions (no match)
76
+ await el.hide();
77
+ });
78
+
79
+ it('33. shows empty state on no match', async () => {
80
+ const el = await fixture<NileCommandMenu>(withItems);
81
+ await el.show();
82
+ const input = el.shadowRoot!.querySelector('input')!;
83
+ input.value = 'zzzznomatch';
84
+ input.dispatchEvent(new Event('input'));
85
+ await el.updateComplete;
86
+ expect(el.shadowRoot!.querySelector('.command__empty--visible')).to.exist;
87
+ await el.hide();
88
+ });
89
+
90
+ it('34. emits nile-search', async () => {
91
+ const el = await fixture<NileCommandMenu>(withItems);
92
+ await el.show();
93
+ const input = el.shadowRoot!.querySelector('input')!;
94
+ setTimeout(() => { input.value = 'x'; input.dispatchEvent(new Event('input')); });
95
+ const ev = await oneEvent(el, 'nile-search');
96
+ expect(ev.detail.value).to.equal('x');
97
+ await el.hide();
98
+ });
99
+
100
+ it('35. emits nile-select on click', async () => {
101
+ const el = await fixture<NileCommandMenu>(withItems);
102
+ await el.show();
103
+ const item = el.querySelector<NileCommandMenuItem>('nile-command-menu-item[value="home"]')!;
104
+ setTimeout(() => item.click());
105
+ const ev = await oneEvent(el, 'nile-select');
106
+ expect(ev.detail.value).to.equal('home');
107
+ });
108
+
109
+ it('36. select closes by default', async () => {
110
+ const el = await fixture<NileCommandMenu>(withItems);
111
+ await el.show();
112
+ const item = el.querySelector<NileCommandMenuItem>('nile-command-menu-item[value="home"]')!;
113
+ item.click();
114
+ await waitUntil(() => !el.open);
115
+ expect(el.open).to.be.false;
116
+ });
117
+
118
+ it('37. keep-open-on-select stays open', async () => {
119
+ const el = await fixture<NileCommandMenu>(html`
120
+ <nile-command-menu keepopenonselect>
121
+ <nile-command-menu-item value="home">Home</nile-command-menu-item>
122
+ </nile-command-menu>
123
+ `);
124
+ await el.show();
125
+ el.querySelector<NileCommandMenuItem>('nile-command-menu-item')!.click();
126
+ await el.updateComplete;
127
+ expect(el.open).to.be.true;
128
+ await el.hide();
129
+ });
130
+
131
+ it('38. disabled item not selected on click', async () => {
132
+ const el = await fixture<NileCommandMenu>(withItems);
133
+ await el.show();
134
+ let fired = false;
135
+ el.addEventListener('nile-select', () => (fired = true));
136
+ el.querySelector<NileCommandMenuItem>('nile-command-menu-item[value="disabled"]')!.click();
137
+ await el.updateComplete;
138
+ expect(fired).to.be.false;
139
+ await el.hide();
140
+ });
141
+
142
+ it('39. arrow down moves active item', async () => {
143
+ const el = await fixture<NileCommandMenu>(withItems);
144
+ await el.show();
145
+ const panel = el.shadowRoot!.querySelector('[role="dialog"]')!;
146
+ panel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
147
+ await el.updateComplete;
148
+ const active = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => i.active);
149
+ expect(active.length).to.equal(1);
150
+ await el.hide();
151
+ });
152
+
153
+ it('40. first visible item active on open', async () => {
154
+ const el = await fixture<NileCommandMenu>(withItems);
155
+ await el.show();
156
+ const active = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => i.active);
157
+ expect(active.length).to.equal(1);
158
+ expect(active[0].value).to.equal('home');
159
+ await el.hide();
160
+ });
161
+
162
+ it('41. enter selects active item', async () => {
163
+ const el = await fixture<NileCommandMenu>(withItems);
164
+ await el.show();
165
+ const panel = el.shadowRoot!.querySelector('[role="dialog"]')!;
166
+ setTimeout(() => panel.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true })));
167
+ const ev = await oneEvent(el, 'nile-select');
168
+ expect(ev.detail.value).to.equal('home');
169
+ });
170
+
171
+ it('42. custom-search does not auto-filter', async () => {
172
+ const el = await fixture<NileCommandMenu>(html`
173
+ <nile-command-menu customsearch>
174
+ <nile-command-menu-item value="a">Alpha</nile-command-menu-item>
175
+ <nile-command-menu-item value="b">Beta</nile-command-menu-item>
176
+ </nile-command-menu>
177
+ `);
178
+ await el.show();
179
+ const input = el.shadowRoot!.querySelector('input')!;
180
+ input.value = 'zzz';
181
+ input.dispatchEvent(new Event('input'));
182
+ await el.updateComplete;
183
+ const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);
184
+ expect(visible.length).to.equal(2);
185
+ await el.hide();
186
+ });
187
+
188
+ it('43. nile-request-close cancelable', async () => {
189
+ const el = await fixture<NileCommandMenu>(withItems);
190
+ await el.show();
191
+ el.addEventListener('nile-request-close', e => e.preventDefault());
192
+ const overlay = el.shadowRoot!.querySelector('.command__overlay') as HTMLElement;
193
+ overlay.click();
194
+ await el.updateComplete;
195
+ expect(el.open).to.be.true;
196
+ await el.hide();
197
+ });
198
+
199
+ it('44. overlay click closes', async () => {
200
+ const el = await fixture<NileCommandMenu>(withItems);
201
+ await el.show();
202
+ const overlay = el.shadowRoot!.querySelector('.command__overlay') as HTMLElement;
203
+ overlay.click();
204
+ await waitUntil(() => !el.open);
205
+ expect(el.open).to.be.false;
206
+ });
207
+
208
+ it('45. has-footer class when footer slotted', async () => {
209
+ const el = await fixture<NileCommandMenu>(html`
210
+ <nile-command-menu><div slot="footer">footer</div></nile-command-menu>
211
+ `);
212
+ await el.updateComplete;
213
+ expect(el.shadowRoot!.querySelector('.command--has-footer')).to.exist;
214
+ });
215
+
216
+ it('46. resets query on reopen', async () => {
217
+ const el = await fixture<NileCommandMenu>(withItems);
218
+ await el.show();
219
+ const input = el.shadowRoot!.querySelector('input')!;
220
+ input.value = 'home';
221
+ input.dispatchEvent(new Event('input'));
222
+ await el.updateComplete;
223
+ await el.hide();
224
+ await el.show();
225
+ expect(el.value).to.equal('');
226
+ await el.hide();
227
+ });
228
+
229
+ 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([]); });
230
+ 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; });
231
+ 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']); });
232
+ 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); });
233
+ 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'); });
234
+ it('S6. scope filters items', async () => {
235
+ const el = await fixture<NileCommandMenu>(html`
236
+ <nile-command-menu scopes="Pages, Actions">
237
+ <nile-command-menu-item value="home" scope="pages">Home</nile-command-menu-item>
238
+ <nile-command-menu-item value="run" scope="actions">Run</nile-command-menu-item>
239
+ </nile-command-menu>
240
+ `);
241
+ await el.show();
242
+ el.scopes = [{ label: 'Pages', value: 'pages' }];
243
+ await el.updateComplete;
244
+ const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);
245
+ expect(visible.map(i => i.value)).to.deep.equal(['home']);
246
+ await el.hide();
247
+ });
248
+ it('S7. scoped item with no scope always shown', async () => {
249
+ const el = await fixture<NileCommandMenu>(html`
250
+ <nile-command-menu scopes="Pages">
251
+ <nile-command-menu-item value="home" scope="pages">Home</nile-command-menu-item>
252
+ <nile-command-menu-item value="global">Global</nile-command-menu-item>
253
+ <nile-command-menu-item value="run" scope="actions">Run</nile-command-menu-item>
254
+ </nile-command-menu>
255
+ `);
256
+ await el.show();
257
+ const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);
258
+ expect(visible.map(i => i.value)).to.have.members(['home', 'global']);
259
+ expect(visible.map(i => i.value)).to.not.include('run');
260
+ await el.hide();
261
+ });
262
+ it('S8. removing a scope emits event and refilters', async () => {
263
+ const el = await fixture<NileCommandMenu>(html`
264
+ <nile-command-menu scopes="Pages, Actions">
265
+ <nile-command-menu-item value="home" scope="pages">Home</nile-command-menu-item>
266
+ <nile-command-menu-item value="run" scope="actions">Run</nile-command-menu-item>
267
+ </nile-command-menu>
268
+ `);
269
+ await el.show();
270
+ const tag = el.shadowRoot!.querySelector('nile-tag')!; // first tag = Pages
271
+ setTimeout(() => tag.dispatchEvent(new CustomEvent('nile-remove', { bubbles: true, composed: true })));
272
+ const ev = await oneEvent(el, 'nile-scope-remove');
273
+ expect(ev.detail.scope.value).to.equal('pages');
274
+ await el.updateComplete;
275
+ expect(el.scopes.map(s => s.value)).to.deep.equal(['actions']);
276
+ const visible = [...el.querySelectorAll<NileCommandMenuItem>('nile-command-menu-item')].filter(i => !i.hidden);
277
+ expect(visible.map(i => i.value)).to.deep.equal(['run']);
278
+ await el.hide();
279
+ });
280
+
281
+ 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); });
282
+ 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; });
283
+ 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; });
284
+ 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; });
285
+ it('47. is defined', async () => { expect(customElements.get('nile-command-menu')).to.exist; });
286
+ it('48. has styles', async () => { expect((await import('./nile-command-menu')).NileCommandMenu.styles).to.exist; });
287
+ 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; });
288
+ 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); });
289
+ });