@api-client/ui 0.5.20 → 0.5.22

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 (85) hide show
  1. package/.github/instructions/lit-best-practices.instructions.md +1 -0
  2. package/build/src/md/button/ui-button-group.d.ts +1 -0
  3. package/build/src/md/button/ui-button-group.d.ts.map +1 -1
  4. package/build/src/md/button/ui-button-group.js.map +1 -1
  5. package/build/src/md/button/ui-button.d.ts +2 -0
  6. package/build/src/md/button/ui-button.d.ts.map +1 -1
  7. package/build/src/md/button/ui-button.js.map +1 -1
  8. package/build/src/md/chip/ui-chip.d.ts +1 -0
  9. package/build/src/md/chip/ui-chip.d.ts.map +1 -1
  10. package/build/src/md/chip/ui-chip.js +1 -0
  11. package/build/src/md/chip/ui-chip.js.map +1 -1
  12. package/build/src/md/dialog/internals/Dialog.d.ts +13 -36
  13. package/build/src/md/dialog/internals/Dialog.d.ts.map +1 -1
  14. package/build/src/md/dialog/internals/Dialog.js +32 -146
  15. package/build/src/md/dialog/internals/Dialog.js.map +1 -1
  16. package/build/src/md/dialog/ui-dialog.d.ts +1 -0
  17. package/build/src/md/dialog/ui-dialog.d.ts.map +1 -1
  18. package/build/src/md/dialog/ui-dialog.js.map +1 -1
  19. package/build/src/md/divider/ui-divider.d.ts +1 -0
  20. package/build/src/md/divider/ui-divider.d.ts.map +1 -1
  21. package/build/src/md/divider/ui-divider.js +1 -0
  22. package/build/src/md/divider/ui-divider.js.map +1 -1
  23. package/build/src/md/dropdown-list/ui-dropdown-list.d.ts +1 -0
  24. package/build/src/md/dropdown-list/ui-dropdown-list.d.ts.map +1 -1
  25. package/build/src/md/dropdown-list/ui-dropdown-list.js.map +1 -1
  26. package/build/src/md/icon-button/ui-icon-button.d.ts +2 -0
  27. package/build/src/md/icon-button/ui-icon-button.d.ts.map +1 -1
  28. package/build/src/md/icon-button/ui-icon-button.js.map +1 -1
  29. package/build/src/md/list/internals/ListItem.styles.d.ts.map +1 -1
  30. package/build/src/md/list/internals/ListItem.styles.js +7 -0
  31. package/build/src/md/list/internals/ListItem.styles.js.map +1 -1
  32. package/build/src/md/list/ui-list-item.d.ts +1 -0
  33. package/build/src/md/list/ui-list-item.d.ts.map +1 -1
  34. package/build/src/md/list/ui-list-item.js +1 -0
  35. package/build/src/md/list/ui-list-item.js.map +1 -1
  36. package/build/src/md/list/ui-list.d.ts +1 -0
  37. package/build/src/md/list/ui-list.d.ts.map +1 -1
  38. package/build/src/md/list/ui-list.js.map +1 -1
  39. package/build/src/md/menu/internal/Menu.d.ts +13 -0
  40. package/build/src/md/menu/internal/Menu.d.ts.map +1 -1
  41. package/build/src/md/menu/internal/Menu.js +30 -0
  42. package/build/src/md/menu/internal/Menu.js.map +1 -1
  43. package/build/src/md/menu/internal/MenuItem.d.ts +22 -0
  44. package/build/src/md/menu/internal/MenuItem.d.ts.map +1 -1
  45. package/build/src/md/menu/internal/MenuItem.js +74 -1
  46. package/build/src/md/menu/internal/MenuItem.js.map +1 -1
  47. package/build/src/md/menu/internal/MenuItem.styles.d.ts.map +1 -1
  48. package/build/src/md/menu/internal/MenuItem.styles.js +23 -0
  49. package/build/src/md/menu/internal/MenuItem.styles.js.map +1 -1
  50. package/build/src/md/menu/ui-menu-item.d.ts +1 -4
  51. package/build/src/md/menu/ui-menu-item.d.ts.map +1 -1
  52. package/build/src/md/menu/ui-menu-item.js +1 -4
  53. package/build/src/md/menu/ui-menu-item.js.map +1 -1
  54. package/build/src/md/menu/ui-menu.d.ts +1 -0
  55. package/build/src/md/menu/ui-menu.d.ts.map +1 -1
  56. package/build/src/md/menu/ui-menu.js.map +1 -1
  57. package/build/src/md/tabs/ui-tabs.d.ts +1 -0
  58. package/build/src/md/tabs/ui-tabs.d.ts.map +1 -1
  59. package/build/src/md/tabs/ui-tabs.js.map +1 -1
  60. package/demo/md/menu/index.ts +107 -1
  61. package/package.json +1 -1
  62. package/src/md/button/ui-button-group.ts +2 -0
  63. package/src/md/button/ui-button.ts +3 -0
  64. package/src/md/chip/ui-chip.ts +2 -0
  65. package/src/md/dialog/internals/Dialog.ts +20 -122
  66. package/src/md/dialog/ui-dialog.ts +2 -0
  67. package/src/md/divider/ui-divider.ts +2 -0
  68. package/src/md/dropdown-list/ui-dropdown-list.ts +2 -0
  69. package/src/md/icon-button/ui-icon-button.ts +3 -0
  70. package/src/md/list/internals/ListItem.styles.ts +7 -0
  71. package/src/md/list/ui-list-item.ts +2 -0
  72. package/src/md/list/ui-list.ts +2 -0
  73. package/src/md/menu/internal/Menu.ts +33 -0
  74. package/src/md/menu/internal/MenuItem.styles.ts +23 -0
  75. package/src/md/menu/internal/MenuItem.ts +49 -0
  76. package/src/md/menu/ui-menu-item.ts +2 -4
  77. package/src/md/menu/ui-menu.ts +2 -0
  78. package/src/md/tabs/ui-tabs.ts +2 -0
  79. package/test/md/menu/Menu.test.ts +346 -0
  80. package/test/md/menu/MenuItem.test.ts +292 -0
  81. package/build/src/events/SyntheticSubmitEvent.d.ts +0 -9
  82. package/build/src/events/SyntheticSubmitEvent.d.ts.map +0 -1
  83. package/build/src/events/SyntheticSubmitEvent.js +0 -22
  84. package/build/src/events/SyntheticSubmitEvent.js.map +0 -1
  85. package/src/events/SyntheticSubmitEvent.ts +0 -27
@@ -7,11 +7,21 @@ import { findElementInShadowRoots } from '../../../lib/Dom.js';
7
7
  import { nanoid } from 'nanoid';
8
8
  import '@material/web/focus/md-focus-ring.js';
9
9
  import '../../ripple/ui-ripple.js';
10
+ import '../../icons/ui-icon.js';
10
11
  let UiMenuItem = (() => {
11
12
  let _classSuper = UiListItem;
12
13
  let _submenu_decorators;
13
14
  let _submenu_initializers = [];
14
15
  let _submenu_extraInitializers = [];
16
+ let _selected_decorators;
17
+ let _selected_initializers = [];
18
+ let _selected_extraInitializers = [];
19
+ let _value_decorators;
20
+ let _value_initializers = [];
21
+ let _value_extraInitializers = [];
22
+ let _showSelectionIcon_decorators;
23
+ let _showSelectionIcon_initializers = [];
24
+ let _showSelectionIcon_extraInitializers = [];
15
25
  let _subMenuOpen_decorators;
16
26
  let _subMenuOpen_initializers = [];
17
27
  let _subMenuOpen_extraInitializers = [];
@@ -19,8 +29,14 @@ let UiMenuItem = (() => {
19
29
  static {
20
30
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
21
31
  _submenu_decorators = [property({ type: String })];
32
+ _selected_decorators = [property({ type: Boolean, reflect: true })];
33
+ _value_decorators = [property({ type: String, reflect: true })];
34
+ _showSelectionIcon_decorators = [property({ type: Boolean })];
22
35
  _subMenuOpen_decorators = [state()];
23
36
  __esDecorate(this, null, _submenu_decorators, { kind: "accessor", name: "submenu", static: false, private: false, access: { has: obj => "submenu" in obj, get: obj => obj.submenu, set: (obj, value) => { obj.submenu = value; } }, metadata: _metadata }, _submenu_initializers, _submenu_extraInitializers);
37
+ __esDecorate(this, null, _selected_decorators, { kind: "accessor", name: "selected", static: false, private: false, access: { has: obj => "selected" in obj, get: obj => obj.selected, set: (obj, value) => { obj.selected = value; } }, metadata: _metadata }, _selected_initializers, _selected_extraInitializers);
38
+ __esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
39
+ __esDecorate(this, null, _showSelectionIcon_decorators, { kind: "accessor", name: "showSelectionIcon", static: false, private: false, access: { has: obj => "showSelectionIcon" in obj, get: obj => obj.showSelectionIcon, set: (obj, value) => { obj.showSelectionIcon = value; } }, metadata: _metadata }, _showSelectionIcon_initializers, _showSelectionIcon_extraInitializers);
24
40
  __esDecorate(this, null, _subMenuOpen_decorators, { kind: "accessor", name: "subMenuOpen", static: false, private: false, access: { has: obj => "subMenuOpen" in obj, get: obj => obj.subMenuOpen, set: (obj, value) => { obj.subMenuOpen = value; } }, metadata: _metadata }, _subMenuOpen_initializers, _subMenuOpen_extraInitializers);
25
41
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
26
42
  }
@@ -31,6 +47,38 @@ let UiMenuItem = (() => {
31
47
  */
32
48
  get submenu() { return this.#submenu_accessor_storage; }
33
49
  set submenu(value) { this.#submenu_accessor_storage = value; }
50
+ #selected_accessor_storage = (__runInitializers(this, _submenu_extraInitializers), __runInitializers(this, _selected_initializers, false
51
+ /**
52
+ * The value associated with this menu item. Use it to identify value associated with the menu item,
53
+ * when selected.
54
+ * @attribute
55
+ */
56
+ ));
57
+ /**
58
+ * Whether this menu item is selected
59
+ * @attribute
60
+ */
61
+ get selected() { return this.#selected_accessor_storage; }
62
+ set selected(value) { this.#selected_accessor_storage = value; }
63
+ #value_accessor_storage = (__runInitializers(this, _selected_extraInitializers), __runInitializers(this, _value_initializers, void 0));
64
+ /**
65
+ * The value associated with this menu item. Use it to identify value associated with the menu item,
66
+ * when selected.
67
+ * @attribute
68
+ */
69
+ get value() { return this.#value_accessor_storage; }
70
+ set value(value) { this.#value_accessor_storage = value; }
71
+ #showSelectionIcon_accessor_storage = (__runInitializers(this, _value_extraInitializers), __runInitializers(this, _showSelectionIcon_initializers, false
72
+ /**
73
+ * Whether the menu item has a sub-menu
74
+ */
75
+ ));
76
+ /**
77
+ * Whether to automatically show a check icon when selected
78
+ * @attribute
79
+ */
80
+ get showSelectionIcon() { return this.#showSelectionIcon_accessor_storage; }
81
+ set showSelectionIcon(value) { this.#showSelectionIcon_accessor_storage = value; }
34
82
  /**
35
83
  * Whether the menu item has a sub-menu
36
84
  */
@@ -45,7 +93,7 @@ let UiMenuItem = (() => {
45
93
  return null;
46
94
  return findElementInShadowRoots(this.submenu, this);
47
95
  }
48
- #subMenuOpen_accessor_storage = (__runInitializers(this, _submenu_extraInitializers), __runInitializers(this, _subMenuOpen_initializers, false));
96
+ #subMenuOpen_accessor_storage = (__runInitializers(this, _showSelectionIcon_extraInitializers), __runInitializers(this, _subMenuOpen_initializers, false));
49
97
  /**
50
98
  * Whether the sub-menu is open
51
99
  */
@@ -65,6 +113,8 @@ let UiMenuItem = (() => {
65
113
  if (!this.id) {
66
114
  this.id = nanoid(6);
67
115
  }
116
+ // Initialize selection state
117
+ this.updateSelectionState();
68
118
  }
69
119
  updated(changedProperties) {
70
120
  super.updated(changedProperties);
@@ -72,6 +122,9 @@ let UiMenuItem = (() => {
72
122
  this.updateAccessibility();
73
123
  this.setupSubmenuConnection();
74
124
  }
125
+ if (changedProperties.has('selected')) {
126
+ this.updateSelectionState();
127
+ }
75
128
  }
76
129
  /**
77
130
  * Sets up the connection between this menu item and its submenu
@@ -99,6 +152,19 @@ let UiMenuItem = (() => {
99
152
  this.removeAttribute('aria-expanded');
100
153
  }
101
154
  }
155
+ /**
156
+ * Updates the selection state styling
157
+ */
158
+ updateSelectionState() {
159
+ if (this.selected) {
160
+ this.classList.add('select');
161
+ this.setAttribute('aria-selected', 'true');
162
+ }
163
+ else {
164
+ this.classList.remove('select');
165
+ this.setAttribute('aria-selected', 'false');
166
+ }
167
+ }
102
168
  /**
103
169
  * Handles mouse enter events
104
170
  */
@@ -201,6 +267,13 @@ let UiMenuItem = (() => {
201
267
  <slot name="end" @slotchange=${this.handleSlotChange}></slot>
202
268
  <span class="trailing-supporting-text"><slot name="end-text"></slot></span>
203
269
  ${this.hasSubMenu ? html `<ui-icon class="menu-item-arrow">arrow_right</ui-icon>` : ''}
270
+ </div>`;
271
+ }
272
+ renderStart() {
273
+ const showCheckIcon = this.showSelectionIcon && this.selected;
274
+ return html `<div class="start">
275
+ ${showCheckIcon ? html `<ui-icon class="selection-check">check</ui-icon>` : ''}
276
+ <slot name="start" @slotchange=${this.handleSlotChange}></slot>
204
277
  </div>`;
205
278
  }
206
279
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../../../src/md/menu/internal/MenuItem.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, PropertyValues, TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport UiListItem from '../../list/internals/ListItem.js'\nimport UiSubMenu from './SubMenu.js'\nimport { findElementInShadowRoots } from '../../../lib/Dom.js'\nimport { nanoid } from 'nanoid'\n\nimport '@material/web/focus/md-focus-ring.js'\nimport '../../ripple/ui-ripple.js'\n\n/**\n * Material Design 3 Menu Item component.\n *\n * @slot - The menu item content (label, icon, etc.)\n * @fires select - Dispatched when the menu item is selected\n * @fires submenu-open - Dispatched when a sub-menu is opened\n */\nexport default class UiMenuItem extends UiListItem {\n /**\n * The ID of the associated submenu\n * @attribute\n */\n @property({ type: String }) accessor submenu: string | undefined\n\n /**\n * Whether the menu item has a sub-menu\n */\n get hasSubMenu(): boolean {\n return !!this.submenu && !!this.subMenuElement\n }\n\n /**\n * Reference to the sub-menu element\n */\n get subMenuElement(): UiSubMenu | null {\n if (!this.submenu) return null\n return findElementInShadowRoots(this.submenu, this) as UiSubMenu | null\n }\n\n /**\n * Whether the sub-menu is open\n */\n @state() protected accessor subMenuOpen = false\n\n constructor() {\n super()\n this.addEventListener('mouseenter', this.handleMouseEnter.bind(this))\n this.addEventListener('mouseleave', this.handleMouseLeave.bind(this))\n this.addEventListener('click', this.handleMenuItemClick.bind(this))\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.setAttribute('role', 'menuitem')\n\n // Generate ID if not present (needed for submenu anchoring)\n if (!this.id) {\n this.id = nanoid(6)\n }\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties)\n\n if (changedProperties.has('submenu')) {\n this.updateAccessibility()\n this.setupSubmenuConnection()\n }\n }\n\n /**\n * Sets up the connection between this menu item and its submenu\n */\n protected setupSubmenuConnection(): void {\n if (this.subMenuElement) {\n this.subMenuElement.anchor = this.id\n\n // Find parent menu and set it on the submenu\n const parentMenu = this.closest('ui-menu, ui-sub-menu') as UiSubMenu\n if (parentMenu) {\n this.subMenuElement.setParentMenu(parentMenu)\n }\n }\n }\n\n /**\n * Updates accessibility attributes\n */\n protected updateAccessibility(): void {\n if (this.hasSubMenu) {\n this.setAttribute('aria-haspopup', 'true')\n this.setAttribute('aria-expanded', String(this.subMenuOpen))\n } else {\n this.removeAttribute('aria-haspopup')\n this.removeAttribute('aria-expanded')\n }\n }\n\n /**\n * Handles mouse enter events\n */\n protected handleMouseEnter(): void {\n if (this.hasSubMenu && !this.subMenuOpen) {\n this.openSubMenu()\n }\n }\n\n /**\n * Handles mouse leave events\n */\n protected handleMouseLeave(): void {\n // Close sub-menu after a delay to allow moving to sub-menu\n setTimeout(() => {\n if (this.subMenuOpen && !this.matches(':hover') && !this.subMenuElement?.matches(':hover')) {\n this.closeSubMenu()\n }\n }, 100)\n }\n\n /**\n * Handles click events\n */\n public override handleClick(e: MouseEvent): void {\n if (this.hasSubMenu) {\n e.preventDefault()\n e.stopPropagation()\n this.toggleSubMenu()\n } else {\n super.handleClick(e)\n }\n }\n\n /**\n * Handles menu item click events\n */\n protected handleMenuItemClick(e: MouseEvent): void {\n this.handleClick(e)\n }\n\n /**\n * Opens the sub-menu\n */\n openSubMenu(): void {\n if (!this.hasSubMenu || this.subMenuOpen) return\n\n this.subMenuOpen = true\n this.updateAccessibility()\n this.subMenuElement?.show()\n\n this.dispatchEvent(\n new CustomEvent('submenu-open', {\n detail: { subMenu: this.subMenuElement },\n bubbles: true,\n composed: true,\n })\n )\n }\n\n /**\n * Closes the sub-menu\n */\n closeSubMenu(): void {\n if (!this.subMenuOpen) return\n\n this.subMenuOpen = false\n this.updateAccessibility()\n this.subMenuElement?.hide()\n }\n\n /**\n * Toggles the sub-menu\n */\n toggleSubMenu(): void {\n if (this.subMenuOpen) {\n this.closeSubMenu()\n } else {\n this.openSubMenu()\n }\n }\n\n /**\n * Handles sub-menu item selection\n */\n protected handleSubMenuSelect(e: CustomEvent): void {\n // Bubble up the selection event\n this.dispatchEvent(\n new CustomEvent('select', {\n detail: e.detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n override render(): TemplateResult {\n const classes = classMap({\n 'surface': true,\n 'menu-item': true,\n 'menu-item-with-submenu': this.hasSubMenu,\n 'submenu-open': this.subMenuOpen,\n })\n\n return html`\n ${this.renderFocusRing()} ${this.renderRipple()}\n <div class=${classes} role=\"menuitem\">${this.renderStart()} ${this.renderBody()} ${this.renderEnd()}</div>\n `\n }\n\n protected override renderEnd(): TemplateResult {\n return html`<div class=\"end\">\n <slot name=\"end\" @slotchange=${this.handleSlotChange}></slot>\n <span class=\"trailing-supporting-text\"><slot name=\"end-text\"></slot></span>\n ${this.hasSubMenu ? html`<ui-icon class=\"menu-item-arrow\">arrow_right</ui-icon>` : ''}\n </div>`\n }\n}\n"]}
1
+ {"version":3,"file":"MenuItem.js","sourceRoot":"","sources":["../../../../../src/md/menu/internal/MenuItem.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, PropertyValues, TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport UiListItem from '../../list/internals/ListItem.js'\nimport UiSubMenu from './SubMenu.js'\nimport { findElementInShadowRoots } from '../../../lib/Dom.js'\nimport { nanoid } from 'nanoid'\n\nimport '@material/web/focus/md-focus-ring.js'\nimport '../../ripple/ui-ripple.js'\nimport '../../icons/ui-icon.js'\n\n/**\n * Material Design 3 Menu Item component.\n *\n * @slot - The menu item content (label, icon, etc.)\n * @fires select - Dispatched when the menu item is selected\n * @fires submenu-open - Dispatched when a sub-menu is opened\n */\nexport default class UiMenuItem extends UiListItem {\n /**\n * The ID of the associated submenu\n * @attribute\n */\n @property({ type: String }) accessor submenu: string | undefined\n\n /**\n * Whether this menu item is selected\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) accessor selected = false\n\n /**\n * The value associated with this menu item. Use it to identify value associated with the menu item,\n * when selected.\n * @attribute\n */\n @property({ type: String, reflect: true }) accessor value: string | undefined\n\n /**\n * Whether to automatically show a check icon when selected\n * @attribute\n */\n @property({ type: Boolean }) accessor showSelectionIcon = false\n\n /**\n * Whether the menu item has a sub-menu\n */\n get hasSubMenu(): boolean {\n return !!this.submenu && !!this.subMenuElement\n }\n\n /**\n * Reference to the sub-menu element\n */\n get subMenuElement(): UiSubMenu | null {\n if (!this.submenu) return null\n return findElementInShadowRoots(this.submenu, this) as UiSubMenu | null\n }\n\n /**\n * Whether the sub-menu is open\n */\n @state() protected accessor subMenuOpen = false\n\n constructor() {\n super()\n this.addEventListener('mouseenter', this.handleMouseEnter.bind(this))\n this.addEventListener('mouseleave', this.handleMouseLeave.bind(this))\n this.addEventListener('click', this.handleMenuItemClick.bind(this))\n }\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.setAttribute('role', 'menuitem')\n\n // Generate ID if not present (needed for submenu anchoring)\n if (!this.id) {\n this.id = nanoid(6)\n }\n\n // Initialize selection state\n this.updateSelectionState()\n }\n\n protected override updated(changedProperties: PropertyValues<this>): void {\n super.updated(changedProperties)\n\n if (changedProperties.has('submenu')) {\n this.updateAccessibility()\n this.setupSubmenuConnection()\n }\n\n if (changedProperties.has('selected')) {\n this.updateSelectionState()\n }\n }\n\n /**\n * Sets up the connection between this menu item and its submenu\n */\n protected setupSubmenuConnection(): void {\n if (this.subMenuElement) {\n this.subMenuElement.anchor = this.id\n\n // Find parent menu and set it on the submenu\n const parentMenu = this.closest('ui-menu, ui-sub-menu') as UiSubMenu\n if (parentMenu) {\n this.subMenuElement.setParentMenu(parentMenu)\n }\n }\n }\n\n /**\n * Updates accessibility attributes\n */\n protected updateAccessibility(): void {\n if (this.hasSubMenu) {\n this.setAttribute('aria-haspopup', 'true')\n this.setAttribute('aria-expanded', String(this.subMenuOpen))\n } else {\n this.removeAttribute('aria-haspopup')\n this.removeAttribute('aria-expanded')\n }\n }\n\n /**\n * Updates the selection state styling\n */\n protected updateSelectionState(): void {\n if (this.selected) {\n this.classList.add('select')\n this.setAttribute('aria-selected', 'true')\n } else {\n this.classList.remove('select')\n this.setAttribute('aria-selected', 'false')\n }\n }\n\n /**\n * Handles mouse enter events\n */\n protected handleMouseEnter(): void {\n if (this.hasSubMenu && !this.subMenuOpen) {\n this.openSubMenu()\n }\n }\n\n /**\n * Handles mouse leave events\n */\n protected handleMouseLeave(): void {\n // Close sub-menu after a delay to allow moving to sub-menu\n setTimeout(() => {\n if (this.subMenuOpen && !this.matches(':hover') && !this.subMenuElement?.matches(':hover')) {\n this.closeSubMenu()\n }\n }, 100)\n }\n\n /**\n * Handles click events\n */\n public override handleClick(e: MouseEvent): void {\n if (this.hasSubMenu) {\n e.preventDefault()\n e.stopPropagation()\n this.toggleSubMenu()\n } else {\n super.handleClick(e)\n }\n }\n\n /**\n * Handles menu item click events\n */\n protected handleMenuItemClick(e: MouseEvent): void {\n this.handleClick(e)\n }\n\n /**\n * Opens the sub-menu\n */\n openSubMenu(): void {\n if (!this.hasSubMenu || this.subMenuOpen) return\n\n this.subMenuOpen = true\n this.updateAccessibility()\n this.subMenuElement?.show()\n\n this.dispatchEvent(\n new CustomEvent('submenu-open', {\n detail: { subMenu: this.subMenuElement },\n bubbles: true,\n composed: true,\n })\n )\n }\n\n /**\n * Closes the sub-menu\n */\n closeSubMenu(): void {\n if (!this.subMenuOpen) return\n\n this.subMenuOpen = false\n this.updateAccessibility()\n this.subMenuElement?.hide()\n }\n\n /**\n * Toggles the sub-menu\n */\n toggleSubMenu(): void {\n if (this.subMenuOpen) {\n this.closeSubMenu()\n } else {\n this.openSubMenu()\n }\n }\n\n /**\n * Handles sub-menu item selection\n */\n protected handleSubMenuSelect(e: CustomEvent): void {\n // Bubble up the selection event\n this.dispatchEvent(\n new CustomEvent('select', {\n detail: e.detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n override render(): TemplateResult {\n const classes = classMap({\n 'surface': true,\n 'menu-item': true,\n 'menu-item-with-submenu': this.hasSubMenu,\n 'submenu-open': this.subMenuOpen,\n })\n\n return html`\n ${this.renderFocusRing()} ${this.renderRipple()}\n <div class=${classes} role=\"menuitem\">${this.renderStart()} ${this.renderBody()} ${this.renderEnd()}</div>\n `\n }\n\n protected override renderEnd(): TemplateResult {\n return html`<div class=\"end\">\n <slot name=\"end\" @slotchange=${this.handleSlotChange}></slot>\n <span class=\"trailing-supporting-text\"><slot name=\"end-text\"></slot></span>\n ${this.hasSubMenu ? html`<ui-icon class=\"menu-item-arrow\">arrow_right</ui-icon>` : ''}\n </div>`\n }\n\n protected override renderStart(): TemplateResult {\n const showCheckIcon = this.showSelectionIcon && this.selected\n\n return html`<div class=\"start\">\n ${showCheckIcon ? html`<ui-icon class=\"selection-check\">check</ui-icon>` : ''}\n <slot name=\"start\" @slotchange=${this.handleSlotChange}></slot>\n </div>`\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.styles.d.ts","sourceRoot":"","sources":["../../../../../src/md/menu/internal/MenuItem.styles.ts"],"names":[],"mappings":";AAEA,wBA6DC"}
1
+ {"version":3,"file":"MenuItem.styles.d.ts","sourceRoot":"","sources":["../../../../../src/md/menu/internal/MenuItem.styles.ts"],"names":[],"mappings":";AAEA,wBAoFC"}
@@ -53,6 +53,7 @@ export default css `
53
53
  md-focus-ring {
54
54
  --md-focus-ring-color: var(--md-sys-color-primary);
55
55
  --md-focus-ring-width: 2px;
56
+ z-index: 2;
56
57
  }
57
58
 
58
59
  /* Ripple Effect */
@@ -60,5 +61,27 @@ export default css `
60
61
  --md-ripple-color: var(--md-sys-color-primary);
61
62
  --md-ripple-opacity: 0.12;
62
63
  }
64
+
65
+ /* Selected state */
66
+ :host(.select) .menu-item,
67
+ :host([selected]) .menu-item {
68
+ background-color: var(--md-sys-color-secondary-container);
69
+ color: var(--md-sys-color-on-secondary-container);
70
+ }
71
+
72
+ :host(.select) .menu-item:hover,
73
+ :host([selected]) .menu-item:hover {
74
+ background-color: var(--md-sys-color-secondary-container);
75
+ opacity: 0.92;
76
+ }
77
+
78
+ /* Selection check icon */
79
+ .selection-check {
80
+ color: var(--md-sys-color-on-surface-variant);
81
+ fill: var(--md-sys-color-on-surface-variant);
82
+ width: 24px;
83
+ height: 24px;
84
+ margin-right: 8px;
85
+ }
63
86
  `;
64
87
  //# sourceMappingURL=MenuItem.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.styles.js","sourceRoot":"","sources":["../../../../../src/md/menu/internal/MenuItem.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DjB,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport default css`\n :host {\n display: block;\n position: relative;\n }\n\n .menu-item {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 48px;\n padding: 0 16px;\n cursor: pointer;\n outline: none;\n transition: background-color 0.2s ease;\n }\n\n .menu-item:hover {\n background-color: var(--md-sys-color-surface-variant);\n }\n\n .menu-item:focus {\n background-color: var(--md-sys-color-surface-variant);\n }\n\n .menu-item[disabled] {\n opacity: 0.38;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .menu-item-with-submenu {\n position: relative;\n }\n\n .menu-item-with-submenu:hover .menu-item-arrow {\n color: var(--md-sys-color-primary);\n }\n\n .menu-item-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n color: var(--md-sys-color-on-surface);\n font-size: 18px;\n font-weight: 500;\n }\n\n /* Focus Ring */\n md-focus-ring {\n --md-focus-ring-color: var(--md-sys-color-primary);\n --md-focus-ring-width: 2px;\n }\n\n /* Ripple Effect */\n ui-ripple {\n --md-ripple-color: var(--md-sys-color-primary);\n --md-ripple-opacity: 0.12;\n }\n`\n"]}
1
+ {"version":3,"file":"MenuItem.styles.js","sourceRoot":"","sources":["../../../../../src/md/menu/internal/MenuItem.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoFjB,CAAA","sourcesContent":["import { css } from 'lit'\n\nexport default css`\n :host {\n display: block;\n position: relative;\n }\n\n .menu-item {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 48px;\n padding: 0 16px;\n cursor: pointer;\n outline: none;\n transition: background-color 0.2s ease;\n }\n\n .menu-item:hover {\n background-color: var(--md-sys-color-surface-variant);\n }\n\n .menu-item:focus {\n background-color: var(--md-sys-color-surface-variant);\n }\n\n .menu-item[disabled] {\n opacity: 0.38;\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .menu-item-with-submenu {\n position: relative;\n }\n\n .menu-item-with-submenu:hover .menu-item-arrow {\n color: var(--md-sys-color-primary);\n }\n\n .menu-item-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n color: var(--md-sys-color-on-surface);\n font-size: 18px;\n font-weight: 500;\n }\n\n /* Focus Ring */\n md-focus-ring {\n --md-focus-ring-color: var(--md-sys-color-primary);\n --md-focus-ring-width: 2px;\n z-index: 2;\n }\n\n /* Ripple Effect */\n ui-ripple {\n --md-ripple-color: var(--md-sys-color-primary);\n --md-ripple-opacity: 0.12;\n }\n\n /* Selected state */\n :host(.select) .menu-item,\n :host([selected]) .menu-item {\n background-color: var(--md-sys-color-secondary-container);\n color: var(--md-sys-color-on-secondary-container);\n }\n\n :host(.select) .menu-item:hover,\n :host([selected]) .menu-item:hover {\n background-color: var(--md-sys-color-secondary-container);\n opacity: 0.92;\n }\n\n /* Selection check icon */\n .selection-check {\n color: var(--md-sys-color-on-surface-variant);\n fill: var(--md-sys-color-on-surface-variant);\n width: 24px;\n height: 24px;\n margin-right: 8px;\n }\n`\n"]}
@@ -4,10 +4,6 @@ import Element from './internal/MenuItem.js';
4
4
  * Material Design 3 Menu Item component.
5
5
  *
6
6
  * @element ui-menu-item
7
- * @attribute {Object} data - The menu item data object
8
- * @attribute {boolean} disabled - Whether the menu item is disabled
9
- * @fires select - Dispatched when the menu item is selected
10
- * @fires submenu-open - Dispatched when a sub-menu is opened
11
7
  */
12
8
  export declare class UiMenuItemElement extends Element {
13
9
  static styles: CSSResultOrNative[];
@@ -17,4 +13,5 @@ declare global {
17
13
  'ui-menu-item': UiMenuItemElement;
18
14
  }
19
15
  }
16
+ export { ListItemImage, ListItemLines } from '../list/internals/ListItem.js';
20
17
  //# sourceMappingURL=ui-menu-item.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-menu-item.d.ts","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE5C,OAAO,OAAO,MAAM,wBAAwB,CAAA;AAI5C;;;;;;;;GAQG;AACH,qBACa,iBAAkB,SAAQ,OAAO;IAC5C,OAAgB,MAAM,EAAE,iBAAiB,EAAE,CAAuB;CACnE;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,iBAAiB,CAAA;KAClC;CACF"}
1
+ {"version":3,"file":"ui-menu-item.d.ts","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu-item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE5C,OAAO,OAAO,MAAM,wBAAwB,CAAA;AAI5C;;;;GAIG;AACH,qBACa,iBAAkB,SAAQ,OAAO;IAC5C,OAAgB,MAAM,EAAE,iBAAiB,EAAE,CAAuB;CACnE;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,cAAc,EAAE,iBAAiB,CAAA;KAClC;CACF;AAED,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA"}
@@ -7,10 +7,6 @@ import listStyles from '../list/internals/ListItem.styles.js';
7
7
  * Material Design 3 Menu Item component.
8
8
  *
9
9
  * @element ui-menu-item
10
- * @attribute {Object} data - The menu item data object
11
- * @attribute {boolean} disabled - Whether the menu item is disabled
12
- * @fires select - Dispatched when the menu item is selected
13
- * @fires submenu-open - Dispatched when a sub-menu is opened
14
10
  */
15
11
  let UiMenuItemElement = (() => {
16
12
  let _classDecorators = [customElement('ui-menu-item')];
@@ -34,4 +30,5 @@ let UiMenuItemElement = (() => {
34
30
  return UiMenuItemElement = _classThis;
35
31
  })();
36
32
  export { UiMenuItemElement };
33
+ export { ListItemImage, ListItemLines } from '../list/internals/ListItem.js';
37
34
  //# sourceMappingURL=ui-menu-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-menu-item.js","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu-item.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,wBAAwB,CAAA;AAC5C,OAAO,MAAM,MAAM,+BAA+B,CAAA;AAClD,OAAO,UAAU,MAAM,sCAAsC,CAAA;AAE7D;;;;;;;;GAQG;IAEU,iBAAiB;4BAD7B,aAAa,CAAC,cAAc,CAAC;;;;sBACS,OAAO;iCAAf,SAAQ,WAAO;;;;YAA9C,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;;YADvD,uDAAiB;;;;;SAAjB,iBAAiB","sourcesContent":["import type { CSSResultOrNative } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport Element from './internal/MenuItem.js'\nimport styles from './internal/MenuItem.styles.js'\nimport listStyles from '../list/internals/ListItem.styles.js'\n\n/**\n * Material Design 3 Menu Item component.\n *\n * @element ui-menu-item\n * @attribute {Object} data - The menu item data object\n * @attribute {boolean} disabled - Whether the menu item is disabled\n * @fires select - Dispatched when the menu item is selected\n * @fires submenu-open - Dispatched when a sub-menu is opened\n */\n@customElement('ui-menu-item')\nexport class UiMenuItemElement extends Element {\n static override styles: CSSResultOrNative[] = [styles, listStyles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-menu-item': UiMenuItemElement\n }\n}\n"]}
1
+ {"version":3,"file":"ui-menu-item.js","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu-item.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,wBAAwB,CAAA;AAC5C,OAAO,MAAM,MAAM,+BAA+B,CAAA;AAClD,OAAO,UAAU,MAAM,sCAAsC,CAAA;AAE7D;;;;GAIG;IAEU,iBAAiB;4BAD7B,aAAa,CAAC,cAAc,CAAC;;;;sBACS,OAAO;iCAAf,SAAQ,WAAO;;;;YAA9C,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;;YADvD,uDAAiB;;;;;SAAjB,iBAAiB;AAU9B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA","sourcesContent":["import type { CSSResultOrNative } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport Element from './internal/MenuItem.js'\nimport styles from './internal/MenuItem.styles.js'\nimport listStyles from '../list/internals/ListItem.styles.js'\n\n/**\n * Material Design 3 Menu Item component.\n *\n * @element ui-menu-item\n */\n@customElement('ui-menu-item')\nexport class UiMenuItemElement extends Element {\n static override styles: CSSResultOrNative[] = [styles, listStyles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-menu-item': UiMenuItemElement\n }\n}\n\nexport { ListItemImage, ListItemLines } from '../list/internals/ListItem.js'\n"]}
@@ -19,4 +19,5 @@ declare global {
19
19
  'ui-menu': UiMenuElement;
20
20
  }
21
21
  }
22
+ export type { UiListItemsChange, UiListSelection } from '../list/internals/List.js';
22
23
  //# sourceMappingURL=ui-menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-menu.d.ts","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE5C,OAAO,OAAO,MAAM,oBAAoB,CAAA;AAGxC;;;;;;;;;;GAUG;AACH,qBACa,aAAc,SAAQ,OAAO;IACxC,OAAgB,MAAM,EAAE,iBAAiB,EAAE,CAAW;CACvD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,aAAa,CAAA;KACzB;CACF"}
1
+ {"version":3,"file":"ui-menu.d.ts","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE5C,OAAO,OAAO,MAAM,oBAAoB,CAAA;AAGxC;;;;;;;;;;GAUG;AACH,qBACa,aAAc,SAAQ,OAAO;IACxC,OAAgB,MAAM,EAAE,iBAAiB,EAAE,CAAW;CACvD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,aAAa,CAAA;KACzB;CACF;AAED,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ui-menu.js","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,MAAM,MAAM,2BAA2B,CAAA;AAE9C;;;;;;;;;;GAUG;IAEU,aAAa;4BADzB,aAAa,CAAC,SAAS,CAAC;;;;sBACU,OAAO;6BAAf,SAAQ,WAAO;;;;YAA1C,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAwB,CAAC,MAAM,CAAC,CAAA;;YAD3C,uDAAa;;;;;SAAb,aAAa","sourcesContent":["import type { CSSResultOrNative } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport Element from './internal/Menu.js'\nimport styles from './internal/Menu.styles.js'\n\n/**\n * Material Design 3 Menu component with sub-menu support.\n *\n * @element ui-menu\n * @attribute {boolean} open - Whether the menu is currently open\n * @attribute {boolean} anchored - Whether the menu should be positioned relative to an anchor element\n * @attribute {boolean} disabled - Whether the menu is disabled\n * @fires select - Dispatched when a menu item is selected\n * @fires close - Dispatched when the menu is closed\n * @fires open - Dispatched when the menu is opened\n */\n@customElement('ui-menu')\nexport class UiMenuElement extends Element {\n static override styles: CSSResultOrNative[] = [styles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-menu': UiMenuElement\n }\n}\n"]}
1
+ {"version":3,"file":"ui-menu.js","sourceRoot":"","sources":["../../../../src/md/menu/ui-menu.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,MAAM,MAAM,2BAA2B,CAAA;AAE9C;;;;;;;;;;GAUG;IAEU,aAAa;4BADzB,aAAa,CAAC,SAAS,CAAC;;;;sBACU,OAAO;6BAAf,SAAQ,WAAO;;;;YAA1C,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAwB,CAAC,MAAM,CAAC,CAAA;;YAD3C,uDAAa;;;;;SAAb,aAAa","sourcesContent":["import type { CSSResultOrNative } from 'lit'\nimport { customElement } from 'lit/decorators.js'\nimport Element from './internal/Menu.js'\nimport styles from './internal/Menu.styles.js'\n\n/**\n * Material Design 3 Menu component with sub-menu support.\n *\n * @element ui-menu\n * @attribute {boolean} open - Whether the menu is currently open\n * @attribute {boolean} anchored - Whether the menu should be positioned relative to an anchor element\n * @attribute {boolean} disabled - Whether the menu is disabled\n * @fires select - Dispatched when a menu item is selected\n * @fires close - Dispatched when the menu is closed\n * @fires open - Dispatched when the menu is opened\n */\n@customElement('ui-menu')\nexport class UiMenuElement extends Element {\n static override styles: CSSResultOrNative[] = [styles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-menu': UiMenuElement\n }\n}\n\nexport type { UiListItemsChange, UiListSelection } from '../list/internals/List.js'\n"]}
@@ -8,4 +8,5 @@ declare global {
8
8
  'ui-tabs': UiTabsElement;
9
9
  }
10
10
  }
11
+ export { TabsPriority, type TabSelectionDetail } from './internals/Tabs.js';
11
12
  //# sourceMappingURL=ui-tabs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui-tabs.d.ts","sourceRoot":"","sources":["../../../../src/md/tabs/ui-tabs.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,qBAAqB,CAAA;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE5C,qBACa,aAAc,SAAQ,OAAO;IACxC,OAAgB,MAAM,EAAE,iBAAiB,EAAE,CAAW;CACvD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,aAAa,CAAA;KACzB;CACF"}
1
+ {"version":3,"file":"ui-tabs.d.ts","sourceRoot":"","sources":["../../../../src/md/tabs/ui-tabs.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,qBAAqB,CAAA;AAEzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAA;AAE5C,qBACa,aAAc,SAAQ,OAAO;IACxC,OAAgB,MAAM,EAAE,iBAAiB,EAAE,CAAW;CACvD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,aAAa,CAAA;KACzB;CACF;AAED,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ui-tabs.js","sourceRoot":"","sources":["../../../../src/md/tabs/ui-tabs.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,qBAAqB,CAAA;AACzC,OAAO,MAAM,MAAM,4BAA4B,CAAA;IAIlC,aAAa;4BADzB,aAAa,CAAC,SAAS,CAAC;;;;sBACU,OAAO;6BAAf,SAAQ,WAAO;;;;YAA1C,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAwB,CAAC,MAAM,CAAC,CAAA;;YAD3C,uDAAa;;;;;SAAb,aAAa","sourcesContent":["import { customElement } from 'lit/decorators.js'\nimport Element from './internals/Tabs.js'\nimport styles from './internals/Tabs.styles.js'\nimport type { CSSResultOrNative } from 'lit'\n\n@customElement('ui-tabs')\nexport class UiTabsElement extends Element {\n static override styles: CSSResultOrNative[] = [styles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-tabs': UiTabsElement\n }\n}\n"]}
1
+ {"version":3,"file":"ui-tabs.js","sourceRoot":"","sources":["../../../../src/md/tabs/ui-tabs.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,OAAO,MAAM,qBAAqB,CAAA;AACzC,OAAO,MAAM,MAAM,4BAA4B,CAAA;IAIlC,aAAa;4BADzB,aAAa,CAAC,SAAS,CAAC;;;;sBACU,OAAO;6BAAf,SAAQ,WAAO;;;;YAA1C,6KAEC;;;;QADC,MAAM,CAAU,MAAM,GAAwB,CAAC,MAAM,CAAC,CAAA;;YAD3C,uDAAa;;;;;SAAb,aAAa","sourcesContent":["import { customElement } from 'lit/decorators.js'\nimport Element from './internals/Tabs.js'\nimport styles from './internals/Tabs.styles.js'\nimport type { CSSResultOrNative } from 'lit'\n\n@customElement('ui-tabs')\nexport class UiTabsElement extends Element {\n static override styles: CSSResultOrNative[] = [styles]\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-tabs': UiTabsElement\n }\n}\n\nexport { TabsPriority, type TabSelectionDetail } from './internals/Tabs.js'\n"]}
@@ -1,6 +1,7 @@
1
1
  import { html, TemplateResult } from 'lit'
2
2
  import { DemoPage } from '../../../src/demo/DemoPage.js'
3
3
  import reactive from '../../../src/decorators/reactive.js'
4
+ import type { UiMenuItemElement } from '../../../src/md/menu/ui-menu-item.js'
4
5
 
5
6
  import '../../../src/md/menu/ui-menu.js'
6
7
  import '../../../src/md/menu/ui-sub-menu.js'
@@ -17,6 +18,11 @@ class ComponentDemoPage extends DemoPage {
17
18
  @reactive() accessor nestedCount = 0
18
19
  @reactive() accessor overflowMenuOutput = ''
19
20
  @reactive() accessor overflowCount = 0
21
+ @reactive() accessor selectedOption = ''
22
+ @reactive() accessor iconMenuSelectOutput = ''
23
+ @reactive() accessor iconMenuSelectedOption = 'Premium'
24
+ @reactive() accessor autoCheckMenuOutput = ''
25
+ @reactive() accessor autoCheckSelectedOption = 'High'
20
26
 
21
27
  handleBasicMenuSelect(e: CustomEvent): void {
22
28
  const item = e.detail.item as HTMLElement
@@ -39,8 +45,37 @@ class ComponentDemoPage extends DemoPage {
39
45
  this.overflowCount++
40
46
  }
41
47
 
48
+ handleSelectionMenuSelect(e: CustomEvent): void {
49
+ const item = e.detail.item as HTMLElement
50
+ this.selectedOption = item.textContent?.trim() || ''
51
+ }
52
+
53
+ handleIconSelectMenuSelect(e: CustomEvent): void {
54
+ const item = e.detail.item as UiMenuItemElement
55
+ this.iconMenuSelectedOption = item.value || ''
56
+ this.iconMenuSelectOutput = `Selected: ${this.iconMenuSelectedOption}`
57
+ }
58
+
59
+ handleAutoCheckMenuSelect(e: CustomEvent): void {
60
+ const item = e.detail.item as HTMLElement
61
+ this.autoCheckSelectedOption = item.textContent?.trim() || ''
62
+ this.autoCheckMenuOutput = `Selected: ${this.autoCheckSelectedOption}`
63
+ }
64
+
42
65
  contentTemplate(): TemplateResult {
43
- const { basicMenuOutput, nestedMenuOutput, nestedCount, basicCount, overflowMenuOutput, overflowCount } = this
66
+ const {
67
+ basicMenuOutput,
68
+ nestedMenuOutput,
69
+ nestedCount,
70
+ basicCount,
71
+ overflowMenuOutput,
72
+ overflowCount,
73
+ selectedOption,
74
+ iconMenuSelectOutput,
75
+ iconMenuSelectedOption,
76
+ autoCheckMenuOutput,
77
+ autoCheckSelectedOption,
78
+ } = this
44
79
  return html`
45
80
  <a href="../">Back</a>
46
81
 
@@ -361,6 +396,77 @@ class ComponentDemoPage extends DemoPage {
361
396
  <p>Count: ${nestedCount}</p>`
362
397
  : ''}
363
398
  </section>
399
+
400
+ <section class="demo-section">
401
+ <h2 class="title-large">Selection Menu</h2>
402
+ <p>A menu that allows selection of options:</p>
403
+ <ui-button id="selection-menu-trigger" color="filled" popovertarget="selection-menu"
404
+ >Open Selection Menu</ui-button
405
+ >
406
+ <ui-menu id="selection-menu" popover="auto" @select="${this.handleSelectionMenuSelect}">
407
+ <ui-menu-item data-value="option1" ?selected="${selectedOption === 'Option 1'}">
408
+ ${selectedOption === 'Option 1' ? html`<span slot="start"><ui-icon>check</ui-icon></span>` : ''}
409
+ <span>Option 1</span>
410
+ </ui-menu-item>
411
+ <ui-menu-item data-value="option2" ?selected="${selectedOption === 'Option 2'}">
412
+ ${selectedOption === 'Option 2' ? html`<span slot="start"><ui-icon>check</ui-icon></span>` : ''}
413
+ <span>Option 2</span>
414
+ </ui-menu-item>
415
+ <ui-menu-item data-value="option3" ?selected="${selectedOption === 'Option 3'}">
416
+ ${selectedOption === 'Option 3' ? html`<span slot="start"><ui-icon>check</ui-icon></span>` : ''}
417
+ <span>Option 3</span>
418
+ </ui-menu-item>
419
+ </ui-menu>
420
+ ${selectedOption ? html`<p>Selected: ${selectedOption}</p>` : ''}
421
+ </section>
422
+
423
+ <section class="demo-section">
424
+ <h2 class="title-large">Menu with Selection and icons</h2>
425
+ <p>
426
+ A menu that maintains selection state. Select an option and reopen the menu to see the selection preserved:
427
+ </p>
428
+ <ui-button id="single-select-menu-trigger" color="filled" popovertarget="single-select-menu">
429
+ Select Option: ${iconMenuSelectedOption || 'None'}
430
+ </ui-button>
431
+ <ui-menu id="single-select-menu" popover="auto" @select="${this.handleIconSelectMenuSelect}">
432
+ <ui-menu-item value="premium" showSelectionIcon ?selected="${iconMenuSelectedOption === 'premium'}">
433
+ <span slot="start"><ui-icon>star</ui-icon></span>
434
+ <span>Premium</span>
435
+ </ui-menu-item>
436
+ <ui-menu-item value="standard" showSelectionIcon ?selected="${iconMenuSelectedOption === 'standard'}">
437
+ <span slot="start"><ui-icon>account_circle</ui-icon></span>
438
+ <span>Standard</span>
439
+ </ui-menu-item>
440
+ <ui-menu-item value="basic" showSelectionIcon ?selected="${iconMenuSelectedOption === 'basic'}">
441
+ <span slot="start"><ui-icon>public</ui-icon></span>
442
+ <span>Basic</span>
443
+ </ui-menu-item>
444
+ </ui-menu>
445
+ ${iconMenuSelectOutput ? html`<p>${iconMenuSelectOutput}</p>` : ''}
446
+ </section>
447
+
448
+ <section class="demo-section">
449
+ <h2 class="title-large">Menu with Auto-Check Icons</h2>
450
+ <p>
451
+ A menu that automatically shows check icons for selected items when the
452
+ <code>show-selection-icon</code> attribute is used:
453
+ </p>
454
+ <ui-button id="auto-check-menu-trigger" color="filled" popovertarget="auto-check-menu">
455
+ Priority: ${autoCheckSelectedOption || 'None'}
456
+ </ui-button>
457
+ <ui-menu id="auto-check-menu" popover="auto" @select="${this.handleAutoCheckMenuSelect}">
458
+ <ui-menu-item showSelectionIcon>
459
+ <span>Low</span>
460
+ </ui-menu-item>
461
+ <ui-menu-item showSelectionIcon selected>
462
+ <span>High</span>
463
+ </ui-menu-item>
464
+ <ui-menu-item showSelectionIcon>
465
+ <span>Critical</span>
466
+ </ui-menu-item>
467
+ </ui-menu>
468
+ ${autoCheckMenuOutput ? html`<p>${autoCheckMenuOutput}</p>` : ''}
469
+ </section>
364
470
  `
365
471
  }
366
472
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@api-client/ui",
3
- "version": "0.5.20",
3
+ "version": "0.5.22",
4
4
  "description": "Internal UI component library for the API Client ecosystem.",
5
5
  "license": "UNLICENSED",
6
6
  "main": "build/src/index.js",
@@ -13,3 +13,5 @@ declare global {
13
13
  'ui-button-group': UiButtonGroupElement
14
14
  }
15
15
  }
16
+
17
+ export type { MdGroupType } from './internals/group.js'
@@ -16,3 +16,6 @@ declare global {
16
16
  'ui-button': UiButtonElement
17
17
  }
18
18
  }
19
+
20
+ export type { MdButtonColor } from './internals/button.js'
21
+ export type { ButtonType, MdButtonShape, MdButtonSize } from './internals/base.js'
@@ -13,3 +13,5 @@ declare global {
13
13
  'ui-chip': UiChipElement
14
14
  }
15
15
  }
16
+
17
+ export { ChipType } from './internals/Chip.js'