@nuralyui/menu 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle.js +94 -51
- package/index.js.map +1 -1
- package/menu.component.d.ts +38 -3
- package/menu.component.js +351 -45
- package/menu.component.js.map +1 -1
- package/menu.constants.js.map +1 -1
- package/menu.style.js +113 -64
- package/menu.style.js.map +1 -1
- package/menu.types.d.ts +4 -0
- package/menu.types.js.map +1 -1
- package/package.json +1 -1
- package/react.js.map +1 -1
package/menu.component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.component.js","sourceRoot":"","sources":["../../../src/components/menu/menu.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { LitElement, html, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styles } from './menu.style.js';\nimport { IMenu, IAction, MenuSize } from './menu.types.js';\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport { StateController, KeyboardController, AccessibilityController } from './controllers/index.js';\n\n/**\n * Versatile menu component for hierarchical navigation with support for nested submenus.\n * \n * @example\n * ```html\n * <nr-menu .items=${menuItems}></nr-menu>\n * ```\n * \n * @fires change - Menu item selected\n * @fires action-click - Menu action clicked\n * \n * @slot - Menu items (auto-generated from items property)\n */\n@customElement('nr-menu')\nexport class NrMenuElement extends NuralyUIBaseMixin(LitElement) {\n static override styles = styles;\n \n override requiredComponents = ['nr-icon', 'nr-dropdown'];\n\n /** Menu items configuration */\n @property({ type: Array })\n items: IMenu[] = [];\n\n /** Menu size variant (small, medium, large) */\n @property({ type: String })\n size: MenuSize | string = MenuSize.Medium;\n\n // Controllers\n private stateController: StateController;\n // Keyboard controller is connected via Lit's controller system and listens to events\n // @ts-ignore - Controller is used via Lit's reactive controller system\n private keyboardController: KeyboardController;\n private accessibilityController: AccessibilityController;\n\n private _linkIndex = 0;\n\n constructor() {\n super();\n this.stateController = new StateController(this);\n this.keyboardController = new KeyboardController(this, this.stateController);\n this.accessibilityController = new AccessibilityController(this, this.stateController);\n }\n\n override firstUpdated(): void {\n this._initializeSelectedState();\n this.accessibilityController.updateAriaAttributes();\n }\n\n override updated(): void {\n this.accessibilityController.updateAriaAttributes();\n }\n\n private _initializeSelectedState() {\n this._linkIndex = 0;\n this._findSelectedPath(this.items);\n }\n\n private _findSelectedPath(items: IMenu[], path: number[] = []): boolean {\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const currentPath = [...path, index];\n \n if (item.children) {\n if (this._findSelectedPath(item.children, currentPath)) {\n return true;\n }\n } else {\n if (item.selected) {\n this.stateController.setSelectedPath(currentPath);\n return true;\n }\n }\n }\n return false;\n }\n\n private _handleLinkClick(path: number[], value: string, event?: Event) {\n if ((event?.target as HTMLElement)?.classList.contains('action-icon')) {\n return;\n }\n\n if (event?.type === 'click') {\n const mouseEvent = event as MouseEvent;\n if (mouseEvent.detail > 0) {\n return;\n }\n }\n\n this.stateController.setSelectedPath(path);\n \n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: { path, value },\n })\n );\n \n this.requestUpdate();\n }\n\n private _handleSubMenuClick(path: number[], value: string, event: Event) {\n const mouseEvent = event as MouseEvent;\n const target = event.target as HTMLElement;\n \n // Don't handle if clicking on toggle icon or its parent container\n if (target.id === 'toggle-icon' || target.closest('#toggle-icon')) {\n return;\n }\n \n // If it's a click event\n if (event.type === 'click') {\n // Check if it's keyboard activation (Enter/Space) - detail will be 0\n if (mouseEvent.detail === 0) {\n // Keyboard activation - toggle the submenu\n this.stateController.toggleSubMenu(path);\n this.requestUpdate();\n return;\n }\n // Real mouse click - already handled by mousedown, so return\n return;\n }\n\n // This is a mousedown event - highlight and toggle the submenu\n \n this.stateController.setSelectedPath([]);\n this.stateController.clearHighlights();\n this.stateController.setHighlighted(path, true);\n \n // Toggle the submenu when clicking on header\n this.stateController.toggleSubMenu(path);\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: { path, value },\n })\n );\n \n this.requestUpdate();\n }\n\n private _toggleSubMenu(path: number[], event: Event) {\n event.stopPropagation();\n this.stateController.toggleSubMenu(path);\n this.requestUpdate();\n }\n\n private _handleSubMenuMouseEnter(path: number[]) {\n this.stateController.setHovered(path, true);\n this.requestUpdate();\n }\n\n private _handleSubMenuMouseLeave(path: number[]) {\n this.stateController.setHovered(path, false);\n this.requestUpdate();\n }\n\n private _handleActionClick(path: number[], event: CustomEvent) {\n const item = event.detail.item;\n this.dispatchEvent(\n new CustomEvent('action-click', {\n detail: { value: item.value, path, item },\n composed: true,\n bubbles: true,\n })\n );\n }\n\n private _isPathSelected(path: number[]): boolean {\n return this.stateController.isPathSelected(path);\n }\n\n private _convertActionsToDropdownItems(actions: IAction[]): any[] {\n return actions.map(action => ({\n id: action.value,\n label: action.label,\n value: action.value\n }));\n }\n\n private _renderMenuLink(menu: IMenu, path: number[]): any {\n const pathKey = path.join('-');\n const isSelected = this._isPathSelected(path);\n const linkIndex = this._linkIndex++;\n \n return html`\n <li \n class=\"menu-link ${isSelected ? 'selected' : ''} ${menu.disabled ? 'disabled' : ''}\"\n data-path=${pathKey}\n data-index=${linkIndex}\n tabindex=\"0\"\n @mousedown=${!menu.disabled ? (e: Event) => this._handleLinkClick(path, menu.text, e) : nothing}\n @click=${!menu.disabled ? (e: Event) => this._handleLinkClick(path, menu.text, e) : nothing}>\n <div class=\"icon-container\">\n ${menu.icon ? html`\n ${!menu.text \n ? html`<div class=\"icon-only\"><nr-icon name=\"${menu.icon}\"></nr-icon></div>`\n : html`<nr-icon name=\"${menu.icon}\"></nr-icon>`}\n ` : nothing}\n </div>\n ${menu.text ? html`\n <div class=\"action-text-container\">\n <div class=\"text-container\">\n <span>${menu.text}</span>\n </div>\n <div class=\"icon-container\">\n ${menu.status?.icon ? html`\n <nr-icon name=${menu.status.icon} class=\"status-icon\"></nr-icon>\n ` : nothing}\n ${menu.menu?.actions ? html`\n <nr-dropdown \n .items=${this._convertActionsToDropdownItems(menu.menu.actions)} \n trigger=\"click\" \n placement=\"bottom-end\"\n @nr-dropdown-item-click=${(e: CustomEvent) => this._handleActionClick(path, e)}>\n <nr-icon name=\"${menu.menu.icon}\" class=\"action-icon\" slot=\"trigger\"></nr-icon>\n </nr-dropdown>\n ` : nothing}\n </div>\n </div>\n ` : nothing}\n </li>\n `;\n }\n\n private _renderSubMenu(menu: IMenu, path: number[]): any {\n const pathKey = path.join('-');\n const isOpen = this.stateController.isSubMenuOpen(path) || menu.opened;\n const isHovered = this.stateController.isSubMenuHovered(path);\n const isHighlighted = this.stateController.isSubMenuHighlighted(path);\n const isSelected = menu.selected;\n \n return html`\n <ul \n class=\"sub-menu ${isHighlighted ? 'highlighted' : ''} ${menu.disabled ? 'disabled' : ''} ${isSelected ? 'selected' : ''}\"\n data-path=${pathKey}\n tabindex=\"0\"\n @mouseenter=${() => this._handleSubMenuMouseEnter(path)}\n @mouseleave=${() => this._handleSubMenuMouseLeave(path)}\n @click=${!menu.disabled ? (e: Event) => {\n // Handle keyboard activation on the ul element\n const target = e.target as HTMLElement;\n const mouseEvent = e as MouseEvent;\n // If click is on the ul itself (not children) and it's keyboard-generated\n if (target.classList.contains('sub-menu') && mouseEvent.detail === 0) {\n e.stopPropagation(); // Prevent bubbling to parent submenus\n this.stateController.toggleSubMenu(path);\n this.requestUpdate();\n }\n } : nothing}>\n <div \n class=\"sub-menu-header\"\n @mousedown=${!menu.disabled ? (e: Event) => this._handleSubMenuClick(path, menu.text, e) : nothing}\n @click=${!menu.disabled ? (e: Event) => this._handleSubMenuClick(path, menu.text, e) : nothing}>\n ${menu.icon ? html`<nr-icon class=\"text-icon\" name=\"${menu.icon}\"></nr-icon>` : nothing}\n <span>${menu.text}</span>\n <div class=\"icons-container\">\n ${menu.status?.icon ? html`\n <nr-icon name=${menu.status.icon} class=\"status-icon\"></nr-icon>\n ` : nothing}\n ${(isHighlighted || isHovered) && menu.menu?.actions ? html`\n <nr-dropdown \n .items=${this._convertActionsToDropdownItems(menu.menu.actions)} \n trigger=\"click\" \n placement=\"bottom-end\"\n @nr-dropdown-item-click=${(e: CustomEvent) => this._handleActionClick(path, e)}>\n <nr-icon name=\"${menu.menu.icon}\" class=\"action-icon\" slot=\"trigger\"></nr-icon>\n </nr-dropdown>\n ` : nothing}\n ${menu.children && menu.children.length ? html`\n <nr-icon \n id=\"toggle-icon\" \n name=\"${isOpen ? 'angle-up' : 'angle-down'}\" \n @mousedown=${!menu.disabled ? (e: Event) => this._toggleSubMenu(path, e) : nothing}>\n </nr-icon>\n ` : nothing}\n </div>\n </div>\n <div class=\"sub-menu-children\" style=\"display: ${isOpen ? 'block' : 'none'}\">\n ${menu.children ? this._renderMenuItems(menu.children, path) : nothing}\n </div>\n </ul>\n `;\n }\n\n private _renderMenuItems(items: IMenu[], parentPath: number[] = []): any {\n return items.map((menu, index) => {\n const currentPath = [...parentPath, index];\n \n if (menu.children) {\n return this._renderSubMenu(menu, currentPath);\n } else {\n return this._renderMenuLink(menu, currentPath);\n }\n });\n }\n\n override render() {\n this._linkIndex = 0;\n return html`\n <ul class=\"menu-root menu--${this.size}\">\n ${this._renderMenuItems(this.items)}\n </ul>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"menu.component.js","sourceRoot":"","sources":["../../../../src/components/menu/menu.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { LitElement, html, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { styles } from './menu.style.js';\nimport { IMenu, IAction, MenuSize, IconPosition } from './menu.types.js';\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport { StateController, KeyboardController, AccessibilityController } from './controllers/index.js';\n\n/**\n * Versatile menu component for hierarchical navigation with support for nested submenus.\n *\n * @example\n * ```html\n * <nr-menu .items=${menuItems}></nr-menu>\n * <nr-menu .items=${menuItems} arrowPosition=\"left\"></nr-menu>\n * ```\n *\n * @fires change - Menu item selected\n * @fires action-click - Menu action clicked\n * @fires label-edit - Menu item label edited (detail: { path, oldValue, newValue })\n *\n * @slot - Menu items (auto-generated from items property)\n */\n@customElement('nr-menu')\nexport class NrMenuElement extends NuralyUIBaseMixin(LitElement) {\n static override styles = styles;\n \n override requiredComponents = ['nr-icon', 'nr-dropdown'];\n\n /** Menu items configuration */\n @property({ type: Array })\n items: IMenu[] = [];\n\n /** Menu size variant (small, medium, large) */\n @property({ type: String })\n size: MenuSize | string = MenuSize.Medium;\n\n /** Default arrow icon position for submenus (left or right) */\n @property({ type: String })\n arrowPosition: IconPosition | string = IconPosition.Right;\n\n /** Callback for label edit events (alternative to event listener) */\n @property({ type: Object, attribute: false })\n onLabelEdit?: (detail: { path: number[]; oldValue: string; newValue: string }) => void;\n\n /** Track context menu state */\n @state()\n private _contextMenuState: { path: number[]; x: number; y: number; actions: IAction[] } | null = null;\n\n /** Track which menu item is currently being edited (path as string for comparison) */\n @state()\n private _editingPath: string | null = null;\n\n /** Temporary value while editing */\n @state()\n private _editingValue: string = '';\n\n /** Pending click timeout for double-click detection */\n private _pendingClickTimeout: ReturnType<typeof setTimeout> | null = null;\n\n /** Path of pending click */\n private _pendingClickPath: string | null = null;\n\n // Controllers\n private stateController: StateController;\n // Keyboard controller is connected via Lit's controller system and listens to events\n // @ts-ignore - Controller is used via Lit's reactive controller system\n private keyboardController: KeyboardController;\n private accessibilityController: AccessibilityController;\n\n private _linkIndex = 0;\n\n constructor() {\n super();\n this.stateController = new StateController(this);\n this.keyboardController = new KeyboardController(this, this.stateController);\n this.accessibilityController = new AccessibilityController(this, this.stateController);\n }\n\n override firstUpdated(): void {\n this._initializeSelectedState();\n this.accessibilityController.updateAriaAttributes();\n }\n\n override updated(changedProperties: Map<string, unknown>): void {\n // Re-initialize selection state when items change\n if (changedProperties.has('items')) {\n this._initializeSelectedState();\n // Also open submenus that have 'opened' set to true\n this._initializeOpenedState();\n }\n this.accessibilityController.updateAriaAttributes();\n }\n\n private _initializeOpenedState() {\n this._openSubMenusFromItems(this.items, []);\n }\n\n private _openSubMenusFromItems(items: IMenu[], parentPath: number[]): void {\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const currentPath = [...parentPath, index];\n\n if (item.children) {\n // If this item has 'opened' set to true, open it\n if (item.opened) {\n this.stateController.openSubMenu(currentPath);\n }\n // Recursively check children\n this._openSubMenusFromItems(item.children, currentPath);\n }\n }\n }\n\n private _initializeSelectedState() {\n this._linkIndex = 0;\n this._findSelectedPath(this.items);\n }\n\n private _findSelectedPath(items: IMenu[], path: number[] = []): boolean {\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const currentPath = [...path, index];\n \n if (item.children) {\n if (this._findSelectedPath(item.children, currentPath)) {\n return true;\n }\n } else {\n if (item.selected) {\n this.stateController.setSelectedPath(currentPath);\n return true;\n }\n }\n }\n return false;\n }\n\n private _handleLinkClick(path: number[], value: string, editable: boolean, event?: Event) {\n if ((event?.target as HTMLElement)?.classList.contains('action-icon')) {\n return;\n }\n\n if (event?.type === 'click') {\n const mouseEvent = event as MouseEvent;\n if (mouseEvent.detail > 0) {\n return;\n }\n }\n\n const pathKey = path.join('-');\n\n // If editable, delay the click to allow double-click detection\n if (editable && event?.type === 'mousedown') {\n // Clear any existing pending click\n if (this._pendingClickTimeout) {\n clearTimeout(this._pendingClickTimeout);\n }\n\n this._pendingClickPath = pathKey;\n this._pendingClickTimeout = setTimeout(() => {\n if (this._pendingClickPath === pathKey) {\n this._executeClick(path, value);\n this._pendingClickPath = null;\n }\n }, 200); // 200ms delay for double-click detection\n return;\n }\n\n this._executeClick(path, value);\n }\n\n private _executeClick(path: number[], value: string) {\n this.stateController.setSelectedPath(path);\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: { path, value },\n })\n );\n\n this.requestUpdate();\n }\n\n private _handleSubMenuClick(path: number[], value: string, editable: boolean, event: Event) {\n const mouseEvent = event as MouseEvent;\n const target = event.target as HTMLElement;\n\n // Don't handle if clicking on toggle icon or its parent container\n if (target.id === 'toggle-icon' || target.closest('#toggle-icon')) {\n return;\n }\n\n // If it's a click event\n if (event.type === 'click') {\n // Check if it's keyboard activation (Enter/Space) - detail will be 0\n if (mouseEvent.detail === 0) {\n // Keyboard activation - toggle the submenu\n this.stateController.toggleSubMenu(path);\n this.requestUpdate();\n return;\n }\n // Real mouse click - already handled by mousedown, so return\n return;\n }\n\n const pathKey = path.join('-');\n\n // If editable, delay the click to allow double-click detection\n if (editable) {\n // Clear any existing pending click\n if (this._pendingClickTimeout) {\n clearTimeout(this._pendingClickTimeout);\n }\n\n this._pendingClickPath = pathKey;\n this._pendingClickTimeout = setTimeout(() => {\n if (this._pendingClickPath === pathKey) {\n this._executeSubMenuClick(path, value);\n this._pendingClickPath = null;\n }\n }, 200);\n return;\n }\n\n this._executeSubMenuClick(path, value);\n }\n\n private _executeSubMenuClick(path: number[], value: string) {\n this.stateController.setSelectedPath([]);\n this.stateController.clearHighlights();\n this.stateController.setHighlighted(path, true);\n\n // Toggle the submenu when clicking on header\n this.stateController.toggleSubMenu(path);\n\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n composed: true,\n detail: { path, value },\n })\n );\n\n this.requestUpdate();\n }\n\n private _toggleSubMenu(path: number[], event: Event) {\n event.stopPropagation();\n this.stateController.toggleSubMenu(path);\n this.requestUpdate();\n }\n\n private _handleSubMenuMouseEnter(path: number[]) {\n this.stateController.setHovered(path, true);\n this.requestUpdate();\n }\n\n private _handleSubMenuMouseLeave(path: number[]) {\n this.stateController.setHovered(path, false);\n this.requestUpdate();\n }\n\n private _handleActionClick(path: number[], event: CustomEvent) {\n const item = event.detail.item;\n const originalEvent = event.detail.originalEvent;\n const dropdown = event.detail.dropdown;\n\n // Create a close callback for async actions\n const close = () => {\n if (dropdown) {\n if (typeof dropdown.hide === 'function') {\n dropdown.hide();\n } else if (typeof dropdown.close === 'function') {\n dropdown.close();\n }\n }\n };\n\n this.dispatchEvent(\n new CustomEvent('action-click', {\n detail: { value: item.value, path, item, originalEvent, close },\n composed: true,\n bubbles: true,\n })\n );\n }\n\n private _handleContextMenu(path: number[], menu: IMenu, event: MouseEvent) {\n if (!menu.menu?.actions?.length) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n this._contextMenuState = {\n path,\n x: event.clientX,\n y: event.clientY,\n actions: menu.menu.actions\n };\n\n this.requestUpdate();\n\n // Wait for render then show the dropdown\n this.updateComplete.then(() => {\n const dropdown = this.shadowRoot?.querySelector('#context-menu-dropdown') as any;\n if (dropdown && typeof dropdown.show === 'function') {\n dropdown.show();\n }\n });\n }\n\n private _handleContextMenuAction(path: number[], event: CustomEvent) {\n const item = event.detail.item;\n const originalEvent = event.detail.originalEvent;\n const dropdown = event.detail.dropdown;\n\n // Create a close callback\n const close = () => {\n this._contextMenuState = null;\n if (dropdown) {\n if (typeof dropdown.hide === 'function') {\n dropdown.hide();\n } else if (typeof dropdown.close === 'function') {\n dropdown.close();\n }\n }\n this.requestUpdate();\n };\n\n this.dispatchEvent(\n new CustomEvent('action-click', {\n detail: { value: item.value, path, item, originalEvent, close },\n composed: true,\n bubbles: true,\n })\n );\n\n close();\n }\n\n private _handleContextMenuClose() {\n this._contextMenuState = null;\n this.requestUpdate();\n }\n\n private _handleDoubleClick(path: number[], menu: IMenu, event: Event) {\n if (menu.disabled) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n // Cancel any pending single click\n if (this._pendingClickTimeout) {\n clearTimeout(this._pendingClickTimeout);\n this._pendingClickTimeout = null;\n this._pendingClickPath = null;\n }\n\n const pathKey = path.join('-');\n this._editingPath = pathKey;\n this._editingValue = menu.text;\n this.requestUpdate();\n\n // Focus the input after render\n this.updateComplete.then(() => {\n const input = this.shadowRoot?.querySelector(`input[data-edit-path=\"${pathKey}\"]`) as HTMLInputElement;\n if (input) {\n input.focus();\n input.select();\n }\n });\n }\n\n private _handleEditInput(event: Event) {\n event.stopPropagation();\n const input = event.target as HTMLInputElement;\n this._editingValue = input.value;\n }\n\n private _handleEditKeyDown(path: number[], originalText: string, event: KeyboardEvent) {\n event.stopPropagation(); // Prevent keyboard navigation from capturing keys\n console.log('Edit keydown:', event.key, 'editingValue:', this._editingValue);\n if (event.key === 'Enter') {\n event.preventDefault();\n // Get the current value directly from the input\n const input = event.target as HTMLInputElement;\n this._editingValue = input.value;\n console.log('Saving with value:', this._editingValue);\n this._saveEdit(path, originalText);\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this._cancelEdit();\n }\n }\n\n private _handleEditBlur(path: number[], originalText: string, event: FocusEvent) {\n // Check if focus is moving to another element within this component\n const relatedTarget = event.relatedTarget as HTMLElement;\n if (relatedTarget && this.shadowRoot?.contains(relatedTarget)) {\n return; // Don't save if focus is moving within the component\n }\n\n // Delay to allow click events to process first\n setTimeout(() => {\n if (this._editingPath === path.join('-')) {\n this._saveEdit(path, originalText);\n }\n }, 200);\n }\n\n private _saveEdit(path: number[], originalText: string) {\n const newValue = this._editingValue.trim();\n console.log('_saveEdit called:', { newValue, originalText, willEmit: newValue && newValue !== originalText });\n\n if (newValue && newValue !== originalText) {\n const detail = {\n path,\n oldValue: originalText,\n newValue,\n };\n\n // Call callback if provided\n if (this.onLabelEdit) {\n console.log('Calling onLabelEdit callback');\n this.onLabelEdit(detail);\n }\n\n // Also dispatch event\n console.log('Dispatching label-edit event from:', this.tagName);\n const event = new CustomEvent('label-edit', {\n bubbles: true,\n composed: true,\n detail,\n });\n this.dispatchEvent(event);\n }\n\n this._editingPath = null;\n this._editingValue = '';\n this.requestUpdate();\n }\n\n private _cancelEdit() {\n this._editingPath = null;\n this._editingValue = '';\n this.requestUpdate();\n }\n\n private _isEditing(path: number[]): boolean {\n return this._editingPath === path.join('-');\n }\n\n private _isPathSelected(path: number[]): boolean {\n return this.stateController.isPathSelected(path);\n }\n\n private _convertActionsToDropdownItems(actions: IAction[]): any[] {\n return actions.map(action => ({\n id: action.value,\n label: action.label,\n value: action.value,\n icon: action.icon,\n additionalData: (action as any).additionalData\n }));\n }\n\n private _renderMenuLink(menu: IMenu, path: number[]): any {\n const pathKey = path.join('-');\n const isSelected = this._isPathSelected(path);\n const isEditing = this._isEditing(path);\n const linkIndex = this._linkIndex++;\n\n return html`\n <li\n class=\"menu-link ${isSelected ? 'selected' : ''} ${menu.disabled ? 'disabled' : ''} ${isEditing ? 'editing' : ''}\"\n data-path=${pathKey}\n data-index=${linkIndex}\n tabindex=${isEditing ? -1 : 0}\n @mousedown=${!menu.disabled && !isEditing ? (e: Event) => this._handleLinkClick(path, menu.text, !!menu.editable, e) : nothing}\n @click=${!menu.disabled && !isEditing ? (e: Event) => this._handleLinkClick(path, menu.text, !!menu.editable, e) : nothing}\n @dblclick=${!menu.disabled ? (e: Event) => this._handleDoubleClick(path, menu, e) : nothing}\n @contextmenu=${!menu.disabled && menu.menu?.actions ? (e: MouseEvent) => this._handleContextMenu(path, menu, e) : nothing}>\n <div class=\"icon-container\">\n ${menu.icon ? html`\n ${!menu.text\n ? html`<div class=\"icon-only\"><nr-icon name=\"${menu.icon}\"></nr-icon></div>`\n : html`<nr-icon name=\"${menu.icon}\" size=\"small\"></nr-icon>`}\n ` : nothing}\n </div>\n ${menu.text ? html`\n <div class=\"action-text-container\">\n <div class=\"text-container\" @dblclick=${!menu.disabled ? (e: Event) => this._handleDoubleClick(path, menu, e) : nothing}>\n ${isEditing ? html`\n <input\n type=\"text\"\n class=\"edit-input\"\n data-edit-path=${pathKey}\n .value=${this._editingValue}\n @input=${this._handleEditInput}\n @keydown=${(e: KeyboardEvent) => this._handleEditKeyDown(path, menu.text, e)}\n @blur=${(e: FocusEvent) => this._handleEditBlur(path, menu.text, e)}\n />\n ` : html`<span>${menu.text}</span>`}\n </div>\n <div class=\"icon-container\">\n ${menu.status?.icon ? html`\n <nr-icon name=${menu.status.icon} class=\"status-icon\" size=\"small\"></nr-icon>\n ` : nothing}\n ${menu.menu?.actions ? html`\n <nr-dropdown\n .items=${this._convertActionsToDropdownItems(menu.menu.actions)}\n trigger=\"click\"\n placement=\"bottom-end\"\n @nr-dropdown-item-click=${(e: CustomEvent) => this._handleActionClick(path, e)}>\n <nr-icon name=\"${menu.menu.icon}\" class=\"action-icon\" slot=\"trigger\" size=\"small\"></nr-icon>\n </nr-dropdown>\n ` : nothing}\n </div>\n </div>\n ` : nothing}\n </li>\n `;\n }\n\n private _renderSubMenu(menu: IMenu, path: number[]): any {\n const pathKey = path.join('-');\n const isOpen = this.stateController.isSubMenuOpen(path) || menu.opened;\n const isHovered = this.stateController.isSubMenuHovered(path);\n const isHighlighted = this.stateController.isSubMenuHighlighted(path);\n const isSelected = menu.selected;\n const isEditing = this._isEditing(path);\n\n // Determine icon position - use individual menu item setting or fall back to global setting\n const iconPosition = menu.iconPosition || this.arrowPosition;\n const isLeftPosition = iconPosition === IconPosition.Left || iconPosition === 'left';\n\n return html`\n <ul\n class=\"sub-menu ${isHighlighted ? 'highlighted' : ''} ${menu.disabled ? 'disabled' : ''} ${isSelected ? 'selected' : ''} ${isLeftPosition ? 'arrow-left' : 'arrow-right'} ${isEditing ? 'editing' : ''}\"\n data-path=${pathKey}\n tabindex=${isEditing ? -1 : 0}\n @mouseenter=${() => this._handleSubMenuMouseEnter(path)}\n @mouseleave=${() => this._handleSubMenuMouseLeave(path)}\n @click=${!menu.disabled && !isEditing ? (e: Event) => {\n // Handle keyboard activation on the ul element\n const target = e.target as HTMLElement;\n const mouseEvent = e as MouseEvent;\n // If click is on the ul itself (not children) and it's keyboard-generated\n if (target.classList.contains('sub-menu') && mouseEvent.detail === 0) {\n e.stopPropagation(); // Prevent bubbling to parent submenus\n this.stateController.toggleSubMenu(path);\n this.requestUpdate();\n }\n } : nothing}>\n <div\n class=\"sub-menu-header\"\n @mousedown=${!menu.disabled && !isEditing ? (e: Event) => this._handleSubMenuClick(path, menu.text, !!menu.editable, e) : nothing}\n @click=${!menu.disabled && !isEditing ? (e: Event) => this._handleSubMenuClick(path, menu.text, !!menu.editable, e) : nothing}\n @dblclick=${!menu.disabled && menu.editable ? (e: Event) => this._handleDoubleClick(path, menu, e) : nothing}\n @contextmenu=${!menu.disabled && menu.menu?.actions ? (e: MouseEvent) => this._handleContextMenu(path, menu, e) : nothing}>\n ${isLeftPosition && menu.children && menu.children.length ? html`\n <nr-icon\n id=\"toggle-icon\"\n name=\"${isOpen ? 'ChevronDown' : 'ChevronRight'}\"\n @mousedown=${!menu.disabled ? (e: Event) => this._toggleSubMenu(path, e) : nothing}\n size=\"small\">\n </nr-icon>\n ` : nothing}\n ${menu.icon ? html`<nr-icon class=\"text-icon\" name=\"${menu.icon}\" size=\"small\"></nr-icon>` : nothing}\n ${isEditing ? html`\n <input\n type=\"text\"\n class=\"edit-input\"\n data-edit-path=${pathKey}\n .value=${this._editingValue}\n @input=${this._handleEditInput}\n @keydown=${(e: KeyboardEvent) => this._handleEditKeyDown(path, menu.text, e)}\n @blur=${(e: FocusEvent) => this._handleEditBlur(path, menu.text, e)}\n />\n ` : html`<span class=\"menu-text\" @dblclick=${!menu.disabled ? (e: Event) => this._handleDoubleClick(path, menu, e) : nothing}>${menu.text}</span>`}\n <div class=\"icons-container\">\n ${menu.status?.icon ? html`\n <nr-icon name=${menu.status.icon} class=\"status-icon\" size=\"small\"></nr-icon>\n ` : nothing}\n ${(isHighlighted || isHovered) && menu.menu?.actions ? html`\n <nr-dropdown\n .items=${this._convertActionsToDropdownItems(menu.menu.actions)}\n trigger=\"click\"\n placement=\"bottom-end\"\n @nr-dropdown-item-click=${(e: CustomEvent) => this._handleActionClick(path, e)}>\n <nr-icon name=\"${menu.menu.icon}\" class=\"action-icon\" slot=\"trigger\" size=\"small\"></nr-icon>\n </nr-dropdown>\n ` : nothing}\n ${!isLeftPosition && menu.children && menu.children.length ? html`\n <nr-icon\n id=\"toggle-icon\"\n name=\"${isOpen ? 'ChevronDown' : 'ChevronRight'}\"\n @mousedown=${!menu.disabled ? (e: Event) => this._toggleSubMenu(path, e) : nothing}\n size=\"small\">\n </nr-icon>\n ` : nothing}\n </div>\n </div>\n <div class=\"sub-menu-children\" style=\"display: ${isOpen ? 'block' : 'none'}\">\n ${menu.children ? this._renderMenuItems(menu.children, path) : nothing}\n </div>\n </ul>\n `;\n }\n\n private _renderMenuItems(items: IMenu[], parentPath: number[] = []): any {\n return items.map((menu, index) => {\n const currentPath = [...parentPath, index];\n \n if (menu.children) {\n return this._renderSubMenu(menu, currentPath);\n } else {\n return this._renderMenuLink(menu, currentPath);\n }\n });\n }\n\n private _renderContextMenu() {\n if (!this._contextMenuState) return nothing;\n\n const { x, y, actions, path } = this._contextMenuState;\n\n return html`\n <nr-dropdown\n id=\"context-menu-dropdown\"\n .items=${this._convertActionsToDropdownItems(actions)}\n trigger=\"manual\"\n placement=\"bottom-start\"\n style=\"position: fixed; top: ${y}px; left: ${x}px; z-index: 9999;\"\n @nr-dropdown-item-click=${(e: CustomEvent) => this._handleContextMenuAction(path, e)}\n @nr-dropdown-close=${() => this._handleContextMenuClose()}\n >\n <span slot=\"trigger\" style=\"display: block; width: 1px; height: 1px;\"></span>\n </nr-dropdown>\n `;\n }\n\n override render() {\n this._linkIndex = 0;\n return html`\n <ul class=\"menu-root menu--${this.size}\">\n ${this._renderMenuItems(this.items)}\n </ul>\n ${this._renderContextMenu()}\n `;\n }\n}\n"]}
|
package/menu.constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.constants.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"menu.constants.js","sourceRoot":"","sources":["../../../../src/components/menu/menu.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,+BAAe,CAAA;IACf,mCAAmB,CAAA;AACrB,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAED,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,2BAAe,CAAA;IACf,wCAA4B,CAAA;AAC9B,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB","sourcesContent":["export const EMPTY_STRING = '';\nexport const NOTHING_STRING = '';\nexport enum OPTION_TYPES {\n GROUP = 'group',\n DIVIDER = 'divider',\n}\n\nexport enum TRIGGERS {\n Click = 'click',\n Hover = 'hover',\n ContextMenu = 'context-menu',\n}\n"]}
|
package/menu.style.js
CHANGED
|
@@ -21,7 +21,7 @@ const menuStyle = css `
|
|
|
21
21
|
display: flex;
|
|
22
22
|
align-items: center;
|
|
23
23
|
cursor: pointer;
|
|
24
|
-
padding: var(--nuraly-menu-link-padding
|
|
24
|
+
padding: var(--nuraly-menu-link-padding, 1px);
|
|
25
25
|
color: var(--nuraly-menu-link-color);
|
|
26
26
|
background-color: var(--nuraly-menu-link-background-color);
|
|
27
27
|
border-left: 4px solid transparent;
|
|
@@ -29,9 +29,8 @@ const menuStyle = css `
|
|
|
29
29
|
border-right: 2px solid transparent;
|
|
30
30
|
border-bottom: 2px solid transparent;
|
|
31
31
|
border-radius: var(--nuraly-menu-border-radius);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
border-color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing);
|
|
32
|
+
margin-bottom: 4px;
|
|
33
|
+
gap: 8px;
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
.menu-link.disabled {
|
|
@@ -48,42 +47,40 @@ const menuStyle = css `
|
|
|
48
47
|
.menu-link.selected {
|
|
49
48
|
background-color: var(--nuraly-menu-selected-link-background-color);
|
|
50
49
|
color: var(--nuraly-menu-selected-color);
|
|
51
|
-
border-left: var(--nuraly-menu-selected-link-border);
|
|
50
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
52
51
|
}
|
|
53
52
|
|
|
54
53
|
.menu-link:not(.disabled):not(.selected):focus {
|
|
55
54
|
outline: none;
|
|
56
|
-
border-
|
|
57
|
-
border-
|
|
58
|
-
border-right: var(--nuraly-menu-focus-border);
|
|
59
|
-
border-bottom: var(--nuraly-menu-focus-border);
|
|
55
|
+
border-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
56
|
+
border-left-color: transparent;
|
|
60
57
|
color: var(--nuraly-menu-focus-color);
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
.menu-link.selected:not(.disabled):focus {
|
|
64
61
|
outline: none;
|
|
65
|
-
border-left: var(--nuraly-menu-selected-link-border);
|
|
66
|
-
border-top: var(--nuraly-menu-focus-border);
|
|
67
|
-
border-right: var(--nuraly-menu-focus-border);
|
|
68
|
-
border-bottom: var(--nuraly-menu-focus-border);
|
|
62
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
63
|
+
border-top-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
64
|
+
border-right-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
65
|
+
border-bottom-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
69
66
|
color: var(--nuraly-menu-focus-color);
|
|
70
67
|
}
|
|
71
68
|
|
|
72
69
|
/* Focus-visible for keyboard navigation */
|
|
73
70
|
.menu-link:not(.disabled):focus-visible {
|
|
74
71
|
outline: none;
|
|
75
|
-
border-top: var(--nuraly-menu-focus-border);
|
|
76
|
-
border-right: var(--nuraly-menu-focus-border);
|
|
77
|
-
border-bottom: var(--nuraly-menu-focus-border);
|
|
72
|
+
border-top-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
73
|
+
border-right-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
74
|
+
border-bottom-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
78
75
|
}
|
|
79
76
|
|
|
80
77
|
.menu-link:not(.disabled):not(.selected):focus-visible {
|
|
81
|
-
border-left: var(--nuraly-menu-focus-border);
|
|
78
|
+
border-left-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));
|
|
82
79
|
color: var(--nuraly-menu-focus-color);
|
|
83
80
|
}
|
|
84
81
|
|
|
85
82
|
.menu-link.selected:not(.disabled):focus-visible {
|
|
86
|
-
border-left: var(--nuraly-menu-selected-link-border)
|
|
83
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
87
84
|
color: var(--nuraly-menu-focus-color);
|
|
88
85
|
}
|
|
89
86
|
|
|
@@ -95,10 +92,7 @@ const menuStyle = css `
|
|
|
95
92
|
.menu-link.selected:not(.disabled):active {
|
|
96
93
|
background-color: var(--nuraly-menu-active-background-color);
|
|
97
94
|
color: var(--nuraly-menu-active-color);
|
|
98
|
-
border-left: var(--nuraly-menu-selected-link-border)
|
|
99
|
-
border-top: 2px solid transparent;
|
|
100
|
-
border-right: 2px solid transparent;
|
|
101
|
-
border-bottom: 2px solid transparent;
|
|
95
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
102
96
|
}
|
|
103
97
|
|
|
104
98
|
.menu-link .action-text-container {
|
|
@@ -117,12 +111,22 @@ const menuStyle = css `
|
|
|
117
111
|
.menu-link nr-icon {
|
|
118
112
|
display: flex;
|
|
119
113
|
align-items: center;
|
|
120
|
-
--nuraly-icon
|
|
114
|
+
--nuraly-color-icon: var(--nuraly-menu-link-icon-color);
|
|
115
|
+
--nuraly-icon-size: var(--nuraly-menu-icon-size, 20px);
|
|
116
|
+
flex-shrink: 0;
|
|
121
117
|
}
|
|
122
118
|
|
|
123
119
|
.menu-link nr-icon:first-child {
|
|
124
|
-
padding-right:
|
|
125
|
-
padding-left:
|
|
120
|
+
padding-right: 0;
|
|
121
|
+
padding-left: 0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.menu-link:not(.disabled):not(.selected):hover nr-icon {
|
|
125
|
+
--nuraly-color-icon: var(--nuraly-menu-hover-link-icon-color);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.menu-link.selected nr-icon {
|
|
129
|
+
--nuraly-color-icon: var(--nuraly-menu-selected-link-icon-color);
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
/* Sub Menu Styles */
|
|
@@ -132,6 +136,7 @@ const menuStyle = css `
|
|
|
132
136
|
padding-left: 0;
|
|
133
137
|
list-style: none;
|
|
134
138
|
color: var(--nuraly-sub-menu-color);
|
|
139
|
+
margin-bottom: 4px;
|
|
135
140
|
}
|
|
136
141
|
|
|
137
142
|
.sub-menu.disabled .sub-menu-header {
|
|
@@ -150,38 +155,38 @@ const menuStyle = css `
|
|
|
150
155
|
justify-content: space-between;
|
|
151
156
|
align-items: center;
|
|
152
157
|
cursor: pointer;
|
|
153
|
-
padding: var(--nuraly-sub-menu-padding
|
|
158
|
+
padding: var(--nuraly-sub-menu-header-padding, 1px);
|
|
154
159
|
border-left: 4px solid transparent;
|
|
155
160
|
border-top: 2px solid transparent;
|
|
156
161
|
border-right: 2px solid transparent;
|
|
157
162
|
border-bottom: 2px solid transparent;
|
|
158
163
|
border-radius: var(--nuraly-menu-border-radius);
|
|
159
|
-
|
|
160
|
-
color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing),
|
|
161
|
-
border-color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing);
|
|
164
|
+
gap: 8px;
|
|
162
165
|
}
|
|
163
166
|
|
|
164
167
|
.sub-menu .sub-menu-header span {
|
|
165
168
|
flex: 1;
|
|
166
169
|
min-width: 0;
|
|
167
|
-
padding-left:
|
|
170
|
+
padding-left: 0;
|
|
168
171
|
}
|
|
169
172
|
|
|
170
173
|
.sub-menu .text-icon {
|
|
171
174
|
flex-shrink: 0;
|
|
175
|
+
--nuraly-color-icon: var(--nuraly-sub-menu-text-icon-color);
|
|
176
|
+
--nuraly-icon-size: var(--nuraly-menu-icon-size, 20px);
|
|
172
177
|
}
|
|
173
178
|
|
|
174
179
|
.sub-menu .icons-container {
|
|
175
180
|
display: flex;
|
|
176
181
|
align-items: center;
|
|
177
|
-
gap:
|
|
182
|
+
gap: 8px;
|
|
178
183
|
position: relative;
|
|
179
184
|
flex-shrink: 0;
|
|
180
185
|
/* Reserve space for dropdown to prevent layout shift */
|
|
181
186
|
min-width: fit-content;
|
|
182
187
|
/* Fixed height to prevent vertical shifting */
|
|
183
188
|
height: 100%;
|
|
184
|
-
min-height:
|
|
189
|
+
min-height: 20px;
|
|
185
190
|
}
|
|
186
191
|
|
|
187
192
|
.menu-link .icon-container {
|
|
@@ -191,7 +196,7 @@ const menuStyle = css `
|
|
|
191
196
|
flex-shrink: 0;
|
|
192
197
|
/* Fixed height to prevent vertical shifting */
|
|
193
198
|
height: 100%;
|
|
194
|
-
min-height:
|
|
199
|
+
min-height: 20px;
|
|
195
200
|
}
|
|
196
201
|
|
|
197
202
|
.sub-menu nr-dropdown,
|
|
@@ -211,54 +216,56 @@ const menuStyle = css `
|
|
|
211
216
|
}
|
|
212
217
|
|
|
213
218
|
.sub-menu .action-icon {
|
|
214
|
-
--nuraly-icon
|
|
219
|
+
--nuraly-color-icon: var(--nuraly-sub-menu-action-icon-color);
|
|
220
|
+
--nuraly-icon-size: var(--nuraly-menu-icon-size, 16px);
|
|
215
221
|
}
|
|
216
222
|
|
|
217
223
|
.sub-menu .status-icon {
|
|
218
|
-
--nuraly-icon
|
|
224
|
+
--nuraly-color-icon: var(--nuraly-sub-menu-status-icon-color);
|
|
225
|
+
--nuraly-icon-size: var(--nuraly-menu-icon-size, 16px);
|
|
219
226
|
}
|
|
220
227
|
|
|
221
228
|
.sub-menu .text-icon {
|
|
222
|
-
--nuraly-icon
|
|
229
|
+
--nuraly-color-icon: var(--nuraly-sub-menu-text-icon-color);
|
|
230
|
+
--nuraly-icon-size: var(--nuraly-menu-icon-size, 20px);
|
|
223
231
|
}
|
|
224
232
|
|
|
225
233
|
.sub-menu #toggle-icon {
|
|
226
|
-
--nuraly-icon
|
|
234
|
+
--nuraly-color-icon: var(--nuraly-sub-menu-toggle-icon-color);
|
|
235
|
+
--nuraly-icon-size: var(--nuraly-menu-icon-size, 16px);
|
|
227
236
|
}
|
|
228
237
|
|
|
229
238
|
.sub-menu:not(.disabled):not(.selected) .sub-menu-header:focus {
|
|
230
239
|
outline: none;
|
|
231
|
-
border-
|
|
232
|
-
border-
|
|
233
|
-
border-right: var(--nuraly-sub-menu-focus-border);
|
|
234
|
-
border-bottom: var(--nuraly-sub-menu-focus-border);
|
|
240
|
+
border-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
241
|
+
border-left-color: transparent;
|
|
235
242
|
color: var(--nuraly-sub-menu-focus-color);
|
|
236
243
|
}
|
|
237
244
|
|
|
238
245
|
.sub-menu.selected:not(.disabled) .sub-menu-header:focus {
|
|
239
246
|
outline: none;
|
|
240
|
-
border-left: var(--nuraly-menu-selected-link-border);
|
|
241
|
-
border-top: var(--nuraly-sub-menu-focus-border);
|
|
242
|
-
border-right: var(--nuraly-sub-menu-focus-border);
|
|
243
|
-
border-bottom: var(--nuraly-sub-menu-focus-border);
|
|
247
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
248
|
+
border-top-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
249
|
+
border-right-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
250
|
+
border-bottom-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
244
251
|
color: var(--nuraly-sub-menu-focus-color);
|
|
245
252
|
}
|
|
246
253
|
|
|
247
254
|
/* Focus-visible for keyboard navigation on submenus */
|
|
248
255
|
.sub-menu:not(.disabled) .sub-menu-header:focus-visible {
|
|
249
256
|
outline: none;
|
|
250
|
-
border-top: var(--nuraly-sub-menu-focus-border);
|
|
251
|
-
border-right: var(--nuraly-sub-menu-focus-border);
|
|
252
|
-
border-bottom: var(--nuraly-sub-menu-focus-border);
|
|
257
|
+
border-top-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
258
|
+
border-right-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
259
|
+
border-bottom-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
253
260
|
}
|
|
254
261
|
|
|
255
262
|
.sub-menu:not(.disabled):not(.selected) .sub-menu-header:focus-visible {
|
|
256
|
-
border-left: var(--nuraly-sub-menu-focus-border);
|
|
263
|
+
border-left-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));
|
|
257
264
|
color: var(--nuraly-sub-menu-focus-color);
|
|
258
265
|
}
|
|
259
266
|
|
|
260
267
|
.sub-menu.selected:not(.disabled) .sub-menu-header:focus-visible {
|
|
261
|
-
border-left: var(--nuraly-menu-selected-link-border)
|
|
268
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
262
269
|
color: var(--nuraly-sub-menu-focus-color);
|
|
263
270
|
}
|
|
264
271
|
|
|
@@ -270,19 +277,13 @@ const menuStyle = css `
|
|
|
270
277
|
.sub-menu.selected:not(.disabled) .sub-menu-header {
|
|
271
278
|
background-color: var(--nuraly-menu-selected-link-background-color);
|
|
272
279
|
color: var(--nuraly-menu-selected-color);
|
|
273
|
-
border-left: var(--nuraly-menu-selected-link-border);
|
|
274
|
-
border-top: 2px solid transparent;
|
|
275
|
-
border-right: 2px solid transparent;
|
|
276
|
-
border-bottom: 2px solid transparent;
|
|
280
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
277
281
|
}
|
|
278
282
|
|
|
279
283
|
.sub-menu.selected:not(.disabled) .sub-menu-header:active {
|
|
280
284
|
background-color: var(--nuraly-sub-menu-active-background-color);
|
|
281
285
|
color: var(--nuraly-sub-menu-active-color);
|
|
282
|
-
border-left: var(--nuraly-menu-selected-link-border);
|
|
283
|
-
border-top: 2px solid transparent;
|
|
284
|
-
border-right: 2px solid transparent;
|
|
285
|
-
border-bottom: 2px solid transparent;
|
|
286
|
+
border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));
|
|
286
287
|
}
|
|
287
288
|
|
|
288
289
|
.sub-menu:not(.disabled):not(.selected) .sub-menu-header:active {
|
|
@@ -294,30 +295,78 @@ const menuStyle = css `
|
|
|
294
295
|
padding-left: var(--nuraly-sub-menu-nested-padding-left);
|
|
295
296
|
}
|
|
296
297
|
|
|
298
|
+
/* Arrow positioning for left arrow */
|
|
299
|
+
.sub-menu.arrow-left .sub-menu-header {
|
|
300
|
+
padding-left: var(--nuraly-sub-menu-arrow-left-padding, 8px); /* Add space for left arrow */
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.sub-menu.arrow-left .sub-menu-header #toggle-icon {
|
|
304
|
+
margin-right: 8px; /* Space between arrow and text */
|
|
305
|
+
order: -1; /* Place arrow at the beginning */
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/* Arrow positioning for right arrow (default) */
|
|
309
|
+
.sub-menu.arrow-right .sub-menu-header #toggle-icon {
|
|
310
|
+
margin-left: 8px; /* Space between text and arrow */
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/* Ensure proper spacing in the header */
|
|
314
|
+
.sub-menu.arrow-left .sub-menu-header span {
|
|
315
|
+
padding-left: 0; /* Remove left padding when arrow is on the left */
|
|
316
|
+
}
|
|
317
|
+
|
|
297
318
|
/* Size Variants */
|
|
298
319
|
.menu--small .menu-link {
|
|
299
|
-
padding: var(--nuraly-menu-link-padding-
|
|
320
|
+
padding: var(--nuraly-menu-link-padding-small, 1px);
|
|
300
321
|
}
|
|
301
322
|
|
|
302
323
|
.menu--small .sub-menu .sub-menu-header {
|
|
303
|
-
padding: var(--nuraly-sub-menu-padding-
|
|
324
|
+
padding: var(--nuraly-sub-menu-header-padding-small, 1px);
|
|
304
325
|
}
|
|
305
326
|
|
|
306
327
|
.menu--medium .menu-link {
|
|
307
|
-
padding: var(--nuraly-menu-link-padding-
|
|
328
|
+
padding: var(--nuraly-menu-link-padding-medium, 1px);
|
|
308
329
|
}
|
|
309
330
|
|
|
310
331
|
.menu--medium .sub-menu .sub-menu-header {
|
|
311
|
-
padding: var(--nuraly-sub-menu-padding-
|
|
332
|
+
padding: var(--nuraly-sub-menu-header-padding-medium, 1px);
|
|
312
333
|
}
|
|
313
334
|
|
|
314
335
|
.menu--large .menu-link {
|
|
315
|
-
padding: var(--nuraly-menu-link-padding-
|
|
336
|
+
padding: var(--nuraly-menu-link-padding-large, 1px);
|
|
316
337
|
}
|
|
317
338
|
|
|
318
339
|
.menu--large .sub-menu .sub-menu-header {
|
|
319
|
-
padding: var(--nuraly-sub-menu-padding-
|
|
340
|
+
padding: var(--nuraly-sub-menu-header-padding-large, 1px);
|
|
320
341
|
}
|
|
342
|
+
|
|
343
|
+
/* Edit input styles */
|
|
344
|
+
.edit-input {
|
|
345
|
+
flex: 1;
|
|
346
|
+
min-width: 0;
|
|
347
|
+
font-size: inherit;
|
|
348
|
+
font-family: inherit;
|
|
349
|
+
font-weight: inherit;
|
|
350
|
+
line-height: inherit;
|
|
351
|
+
color: inherit;
|
|
352
|
+
background-color: var(--nuraly-menu-edit-input-background, transparent);
|
|
353
|
+
border: none;
|
|
354
|
+
border-radius: 0;
|
|
355
|
+
padding: 0;
|
|
356
|
+
margin: 0;
|
|
357
|
+
outline: none;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.edit-input:focus {
|
|
361
|
+
outline: none;
|
|
362
|
+
box-shadow: none;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.menu-link.editing,
|
|
366
|
+
.sub-menu.editing > .sub-menu-header {
|
|
367
|
+
background-color: var(--nuraly-menu-edit-background, transparent);
|
|
368
|
+
}
|
|
369
|
+
|
|
321
370
|
`;
|
|
322
371
|
export const styles = [menuStyle];
|
|
323
372
|
//# sourceMappingURL=menu.style.js.map
|
package/menu.style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.style.js","sourceRoot":"","sources":["../../../src/components/menu/menu.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,SAAS,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+TpB,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC","sourcesContent":["import { css } from 'lit';\n\nconst menuStyle = css`\n /* Root menu container */\n :host {\n display: block;\n }\n\n .menu-root {\n font-size: var(--nuraly-menu-font-size);\n font-family: var(--nuraly-menu-font-family);\n font-weight: var(--nuraly-menu-font-weight);\n line-height: var(--nuraly-menu-line-height);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n /* Menu Link Styles */\n .menu-link {\n list-style: none;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: var(--nuraly-menu-link-padding-vertical) var(--nuraly-menu-link-padding-horizontal);\n color: var(--nuraly-menu-link-color);\n background-color: var(--nuraly-menu-link-background-color);\n border-left: 4px solid transparent;\n border-top: 2px solid transparent;\n border-right: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: var(--nuraly-menu-border-radius);\n transition: background-color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing),\n color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing),\n border-color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing);\n }\n\n .menu-link.disabled {\n color: var(--nuraly-menu-disabled-link-color);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .menu-link:not(.disabled):not(.selected):hover {\n background-color: var(--nuraly-menu-hover-link-background-color);\n color: var(--nuraly-menu-hover-link-color);\n }\n\n .menu-link.selected {\n background-color: var(--nuraly-menu-selected-link-background-color);\n color: var(--nuraly-menu-selected-color);\n border-left: var(--nuraly-menu-selected-link-border);\n }\n\n .menu-link:not(.disabled):not(.selected):focus {\n outline: none;\n border-left: 4px solid transparent;\n border-top: var(--nuraly-menu-focus-border);\n border-right: var(--nuraly-menu-focus-border);\n border-bottom: var(--nuraly-menu-focus-border);\n color: var(--nuraly-menu-focus-color);\n }\n\n .menu-link.selected:not(.disabled):focus {\n outline: none;\n border-left: var(--nuraly-menu-selected-link-border);\n border-top: var(--nuraly-menu-focus-border);\n border-right: var(--nuraly-menu-focus-border);\n border-bottom: var(--nuraly-menu-focus-border);\n color: var(--nuraly-menu-focus-color);\n }\n\n /* Focus-visible for keyboard navigation */\n .menu-link:not(.disabled):focus-visible {\n outline: none;\n border-top: var(--nuraly-menu-focus-border);\n border-right: var(--nuraly-menu-focus-border);\n border-bottom: var(--nuraly-menu-focus-border);\n }\n\n .menu-link:not(.disabled):not(.selected):focus-visible {\n border-left: var(--nuraly-menu-focus-border);\n color: var(--nuraly-menu-focus-color);\n }\n\n .menu-link.selected:not(.disabled):focus-visible {\n border-left: var(--nuraly-menu-selected-link-border) !important;\n color: var(--nuraly-menu-focus-color);\n }\n\n .menu-link:not(.disabled):not(.selected):active {\n color: var(--nuraly-menu-active-color);\n background-color: var(--nuraly-menu-active-background-color);\n }\n\n .menu-link.selected:not(.disabled):active {\n background-color: var(--nuraly-menu-active-background-color);\n color: var(--nuraly-menu-active-color);\n border-left: var(--nuraly-menu-selected-link-border) !important;\n border-top: 2px solid transparent;\n border-right: 2px solid transparent;\n border-bottom: 2px solid transparent;\n }\n\n .menu-link .action-text-container {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n }\n\n .menu-link .text-container {\n flex: 1;\n min-width: 0;\n }\n\n .menu-link nr-icon {\n display: flex;\n align-items: center;\n --nuraly-icon-color: var(--nuraly-menu-link-icon-color);\n }\n\n .menu-link nr-icon:first-child {\n padding-right: var(--nuraly-menu-icon-padding-right);\n padding-left: var(--nuraly-menu-icon-padding-left);\n }\n\n /* Sub Menu Styles */\n .sub-menu {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n list-style: none;\n color: var(--nuraly-sub-menu-color);\n }\n\n .sub-menu.disabled .sub-menu-header {\n color: var(--nuraly-sub-menu-disabled-color);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .sub-menu.highlighted .sub-menu-header {\n background-color: var(--nuraly-sub-menu-highlighted-background-color);\n color: var(--nuraly-sub-menu-highlighted-color);\n }\n\n .sub-menu .sub-menu-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n padding: var(--nuraly-sub-menu-padding-vertical) var(--nuraly-sub-menu-padding-horizontal);\n border-left: 4px solid transparent;\n border-top: 2px solid transparent;\n border-right: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: var(--nuraly-menu-border-radius);\n transition: background-color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing),\n color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing),\n border-color var(--nuraly-menu-transition-duration) var(--nuraly-menu-transition-timing);\n }\n\n .sub-menu .sub-menu-header span {\n flex: 1;\n min-width: 0;\n padding-left: var(--nuraly-sub-menu-icon-padding-right);\n }\n\n .sub-menu .text-icon {\n flex-shrink: 0;\n }\n\n .sub-menu .icons-container {\n display: flex;\n align-items: center;\n gap: var(--nuraly-sub-menu-icon-padding-right);\n position: relative;\n flex-shrink: 0;\n /* Reserve space for dropdown to prevent layout shift */\n min-width: fit-content;\n /* Fixed height to prevent vertical shifting */\n height: 100%;\n min-height: 24px;\n }\n\n .menu-link .icon-container {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n /* Fixed height to prevent vertical shifting */\n height: 100%;\n min-height: 24px;\n }\n\n .sub-menu nr-dropdown,\n .menu-link nr-dropdown {\n /* Keep in normal flow but ensure it doesn't grow/shrink */\n display: inline-flex;\n flex-shrink: 0;\n flex-grow: 0;\n align-items: center;\n vertical-align: middle;\n }\n\n .sub-menu .action-icon,\n .menu-link .action-icon {\n flex-shrink: 0;\n cursor: pointer;\n }\n\n .sub-menu .action-icon {\n --nuraly-icon-color: var(--nuraly-sub-menu-action-icon-color);\n }\n\n .sub-menu .status-icon {\n --nuraly-icon-color: var(--nuraly-sub-menu-status-icon-color);\n }\n\n .sub-menu .text-icon {\n --nuraly-icon-color: var(--nuraly-sub-menu-text-icon-color);\n }\n\n .sub-menu #toggle-icon {\n --nuraly-icon-color: var(--nuraly-sub-menu-toggle-icon-color);\n }\n\n .sub-menu:not(.disabled):not(.selected) .sub-menu-header:focus {\n outline: none;\n border-left: 4px solid transparent;\n border-top: var(--nuraly-sub-menu-focus-border);\n border-right: var(--nuraly-sub-menu-focus-border);\n border-bottom: var(--nuraly-sub-menu-focus-border);\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header:focus {\n outline: none;\n border-left: var(--nuraly-menu-selected-link-border);\n border-top: var(--nuraly-sub-menu-focus-border);\n border-right: var(--nuraly-sub-menu-focus-border);\n border-bottom: var(--nuraly-sub-menu-focus-border);\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n /* Focus-visible for keyboard navigation on submenus */\n .sub-menu:not(.disabled) .sub-menu-header:focus-visible {\n outline: none;\n border-top: var(--nuraly-sub-menu-focus-border);\n border-right: var(--nuraly-sub-menu-focus-border);\n border-bottom: var(--nuraly-sub-menu-focus-border);\n }\n\n .sub-menu:not(.disabled):not(.selected) .sub-menu-header:focus-visible {\n border-left: var(--nuraly-sub-menu-focus-border);\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header:focus-visible {\n border-left: var(--nuraly-menu-selected-link-border) !important;\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n .sub-menu:not(.disabled) .sub-menu-header:hover {\n background-color: var(--nuraly-sub-menu-hover-background-color);\n color: var(--nuraly-sub-menu-hover-color);\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header {\n background-color: var(--nuraly-menu-selected-link-background-color);\n color: var(--nuraly-menu-selected-color);\n border-left: var(--nuraly-menu-selected-link-border);\n border-top: 2px solid transparent;\n border-right: 2px solid transparent;\n border-bottom: 2px solid transparent;\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header:active {\n background-color: var(--nuraly-sub-menu-active-background-color);\n color: var(--nuraly-sub-menu-active-color);\n border-left: var(--nuraly-menu-selected-link-border);\n border-top: 2px solid transparent;\n border-right: 2px solid transparent;\n border-bottom: 2px solid transparent;\n }\n\n .sub-menu:not(.disabled):not(.selected) .sub-menu-header:active {\n background-color: var(--nuraly-sub-menu-active-background-color);\n color: var(--nuraly-sub-menu-active-color);\n }\n\n .sub-menu-children {\n padding-left: var(--nuraly-sub-menu-nested-padding-left);\n }\n\n /* Size Variants */\n .menu--small .menu-link {\n padding: var(--nuraly-menu-link-padding-vertical-small) var(--nuraly-menu-link-padding-horizontal-small);\n }\n\n .menu--small .sub-menu .sub-menu-header {\n padding: var(--nuraly-sub-menu-padding-vertical-small) var(--nuraly-sub-menu-padding-horizontal-small);\n }\n\n .menu--medium .menu-link {\n padding: var(--nuraly-menu-link-padding-vertical-medium) var(--nuraly-menu-link-padding-horizontal-medium);\n }\n\n .menu--medium .sub-menu .sub-menu-header {\n padding: var(--nuraly-sub-menu-padding-vertical-medium) var(--nuraly-sub-menu-padding-horizontal-medium);\n }\n\n .menu--large .menu-link {\n padding: var(--nuraly-menu-link-padding-vertical-large) var(--nuraly-menu-link-padding-horizontal-large);\n }\n\n .menu--large .sub-menu .sub-menu-header {\n padding: var(--nuraly-sub-menu-padding-vertical-large) var(--nuraly-sub-menu-padding-horizontal-large);\n }\n`;\n\nexport const styles = [menuStyle];\n"]}
|
|
1
|
+
{"version":3,"file":"menu.style.js","sourceRoot":"","sources":["../../../../src/components/menu/menu.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,SAAS,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgXpB,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC","sourcesContent":["import { css } from 'lit';\n\nconst menuStyle = css`\n /* Root menu container */\n :host {\n display: block;\n }\n\n .menu-root {\n font-size: var(--nuraly-menu-font-size);\n font-family: var(--nuraly-menu-font-family);\n font-weight: var(--nuraly-menu-font-weight);\n line-height: var(--nuraly-menu-line-height);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n /* Menu Link Styles */\n .menu-link {\n list-style: none;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: var(--nuraly-menu-link-padding, 1px);\n color: var(--nuraly-menu-link-color);\n background-color: var(--nuraly-menu-link-background-color);\n border-left: 4px solid transparent;\n border-top: 2px solid transparent;\n border-right: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: var(--nuraly-menu-border-radius);\n margin-bottom: 4px;\n gap: 8px;\n }\n\n .menu-link.disabled {\n color: var(--nuraly-menu-disabled-link-color);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .menu-link:not(.disabled):not(.selected):hover {\n background-color: var(--nuraly-menu-hover-link-background-color);\n color: var(--nuraly-menu-hover-link-color);\n }\n\n .menu-link.selected {\n background-color: var(--nuraly-menu-selected-link-background-color);\n color: var(--nuraly-menu-selected-color);\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n }\n\n .menu-link:not(.disabled):not(.selected):focus {\n outline: none;\n border-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n border-left-color: transparent;\n color: var(--nuraly-menu-focus-color);\n }\n\n .menu-link.selected:not(.disabled):focus {\n outline: none;\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n border-top-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n border-right-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n border-bottom-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n color: var(--nuraly-menu-focus-color);\n }\n\n /* Focus-visible for keyboard navigation */\n .menu-link:not(.disabled):focus-visible {\n outline: none;\n border-top-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n border-right-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n border-bottom-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n }\n\n .menu-link:not(.disabled):not(.selected):focus-visible {\n border-left-color: var(--nuraly-menu-focus-border-color, var(--nuraly-menu-focus-color));\n color: var(--nuraly-menu-focus-color);\n }\n\n .menu-link.selected:not(.disabled):focus-visible {\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n color: var(--nuraly-menu-focus-color);\n }\n\n .menu-link:not(.disabled):not(.selected):active {\n color: var(--nuraly-menu-active-color);\n background-color: var(--nuraly-menu-active-background-color);\n }\n\n .menu-link.selected:not(.disabled):active {\n background-color: var(--nuraly-menu-active-background-color);\n color: var(--nuraly-menu-active-color);\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n }\n\n .menu-link .action-text-container {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n }\n\n .menu-link .text-container {\n flex: 1;\n min-width: 0;\n }\n\n .menu-link nr-icon {\n display: flex;\n align-items: center;\n --nuraly-color-icon: var(--nuraly-menu-link-icon-color);\n --nuraly-icon-size: var(--nuraly-menu-icon-size, 20px);\n flex-shrink: 0;\n }\n\n .menu-link nr-icon:first-child {\n padding-right: 0;\n padding-left: 0;\n }\n\n .menu-link:not(.disabled):not(.selected):hover nr-icon {\n --nuraly-color-icon: var(--nuraly-menu-hover-link-icon-color);\n }\n\n .menu-link.selected nr-icon {\n --nuraly-color-icon: var(--nuraly-menu-selected-link-icon-color);\n }\n\n /* Sub Menu Styles */\n .sub-menu {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n list-style: none;\n color: var(--nuraly-sub-menu-color);\n margin-bottom: 4px;\n }\n\n .sub-menu.disabled .sub-menu-header {\n color: var(--nuraly-sub-menu-disabled-color);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .sub-menu.highlighted .sub-menu-header {\n background-color: var(--nuraly-sub-menu-highlighted-background-color);\n color: var(--nuraly-sub-menu-highlighted-color);\n }\n\n .sub-menu .sub-menu-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n cursor: pointer;\n padding: var(--nuraly-sub-menu-header-padding, 1px);\n border-left: 4px solid transparent;\n border-top: 2px solid transparent;\n border-right: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: var(--nuraly-menu-border-radius);\n gap: 8px;\n }\n\n .sub-menu .sub-menu-header span {\n flex: 1;\n min-width: 0;\n padding-left: 0;\n }\n\n .sub-menu .text-icon {\n flex-shrink: 0;\n --nuraly-color-icon: var(--nuraly-sub-menu-text-icon-color);\n --nuraly-icon-size: var(--nuraly-menu-icon-size, 20px);\n }\n\n .sub-menu .icons-container {\n display: flex;\n align-items: center;\n gap: 8px;\n position: relative;\n flex-shrink: 0;\n /* Reserve space for dropdown to prevent layout shift */\n min-width: fit-content;\n /* Fixed height to prevent vertical shifting */\n height: 100%;\n min-height: 20px;\n }\n\n .menu-link .icon-container {\n display: flex;\n align-items: center;\n position: relative;\n flex-shrink: 0;\n /* Fixed height to prevent vertical shifting */\n height: 100%;\n min-height: 20px;\n }\n\n .sub-menu nr-dropdown,\n .menu-link nr-dropdown {\n /* Keep in normal flow but ensure it doesn't grow/shrink */\n display: inline-flex;\n flex-shrink: 0;\n flex-grow: 0;\n align-items: center;\n vertical-align: middle;\n }\n\n .sub-menu .action-icon,\n .menu-link .action-icon {\n flex-shrink: 0;\n cursor: pointer;\n }\n\n .sub-menu .action-icon {\n --nuraly-color-icon: var(--nuraly-sub-menu-action-icon-color);\n --nuraly-icon-size: var(--nuraly-menu-icon-size, 16px);\n }\n\n .sub-menu .status-icon {\n --nuraly-color-icon: var(--nuraly-sub-menu-status-icon-color);\n --nuraly-icon-size: var(--nuraly-menu-icon-size, 16px);\n }\n\n .sub-menu .text-icon {\n --nuraly-color-icon: var(--nuraly-sub-menu-text-icon-color);\n --nuraly-icon-size: var(--nuraly-menu-icon-size, 20px);\n }\n\n .sub-menu #toggle-icon {\n --nuraly-color-icon: var(--nuraly-sub-menu-toggle-icon-color);\n --nuraly-icon-size: var(--nuraly-menu-icon-size, 16px);\n }\n\n .sub-menu:not(.disabled):not(.selected) .sub-menu-header:focus {\n outline: none;\n border-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n border-left-color: transparent;\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header:focus {\n outline: none;\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n border-top-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n border-right-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n border-bottom-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n /* Focus-visible for keyboard navigation on submenus */\n .sub-menu:not(.disabled) .sub-menu-header:focus-visible {\n outline: none;\n border-top-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n border-right-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n border-bottom-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n }\n\n .sub-menu:not(.disabled):not(.selected) .sub-menu-header:focus-visible {\n border-left-color: var(--nuraly-sub-menu-focus-border-color, var(--nuraly-sub-menu-focus-color));\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header:focus-visible {\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n color: var(--nuraly-sub-menu-focus-color);\n }\n\n .sub-menu:not(.disabled) .sub-menu-header:hover {\n background-color: var(--nuraly-sub-menu-hover-background-color);\n color: var(--nuraly-sub-menu-hover-color);\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header {\n background-color: var(--nuraly-menu-selected-link-background-color);\n color: var(--nuraly-menu-selected-color);\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n }\n\n .sub-menu.selected:not(.disabled) .sub-menu-header:active {\n background-color: var(--nuraly-sub-menu-active-background-color);\n color: var(--nuraly-sub-menu-active-color);\n border-left-color: var(--nuraly-menu-selected-link-border-color, var(--nuraly-menu-selected-color));\n }\n\n .sub-menu:not(.disabled):not(.selected) .sub-menu-header:active {\n background-color: var(--nuraly-sub-menu-active-background-color);\n color: var(--nuraly-sub-menu-active-color);\n }\n\n .sub-menu-children {\n padding-left: var(--nuraly-sub-menu-nested-padding-left);\n }\n\n /* Arrow positioning for left arrow */\n .sub-menu.arrow-left .sub-menu-header {\n padding-left: var(--nuraly-sub-menu-arrow-left-padding, 8px); /* Add space for left arrow */\n }\n\n .sub-menu.arrow-left .sub-menu-header #toggle-icon {\n margin-right: 8px; /* Space between arrow and text */\n order: -1; /* Place arrow at the beginning */\n }\n\n /* Arrow positioning for right arrow (default) */\n .sub-menu.arrow-right .sub-menu-header #toggle-icon {\n margin-left: 8px; /* Space between text and arrow */\n }\n\n /* Ensure proper spacing in the header */\n .sub-menu.arrow-left .sub-menu-header span {\n padding-left: 0; /* Remove left padding when arrow is on the left */\n }\n\n /* Size Variants */\n .menu--small .menu-link {\n padding: var(--nuraly-menu-link-padding-small, 1px);\n }\n\n .menu--small .sub-menu .sub-menu-header {\n padding: var(--nuraly-sub-menu-header-padding-small, 1px);\n }\n\n .menu--medium .menu-link {\n padding: var(--nuraly-menu-link-padding-medium, 1px);\n }\n\n .menu--medium .sub-menu .sub-menu-header {\n padding: var(--nuraly-sub-menu-header-padding-medium, 1px);\n }\n\n .menu--large .menu-link {\n padding: var(--nuraly-menu-link-padding-large, 1px);\n }\n\n .menu--large .sub-menu .sub-menu-header {\n padding: var(--nuraly-sub-menu-header-padding-large, 1px);\n }\n\n /* Edit input styles */\n .edit-input {\n flex: 1;\n min-width: 0;\n font-size: inherit;\n font-family: inherit;\n font-weight: inherit;\n line-height: inherit;\n color: inherit;\n background-color: var(--nuraly-menu-edit-input-background, transparent);\n border: none;\n border-radius: 0;\n padding: 0;\n margin: 0;\n outline: none;\n }\n\n .edit-input:focus {\n outline: none;\n box-shadow: none;\n }\n\n .menu-link.editing,\n .sub-menu.editing > .sub-menu-header {\n background-color: var(--nuraly-menu-edit-background, transparent);\n }\n\n`;\n\nexport const styles = [menuStyle];\n"]}
|
package/menu.types.d.ts
CHANGED
|
@@ -47,6 +47,8 @@ export interface IMenu {
|
|
|
47
47
|
disabled?: boolean;
|
|
48
48
|
/** Whether the submenu is opened */
|
|
49
49
|
opened?: boolean;
|
|
50
|
+
/** Whether the menu item label can be edited (double-click to edit) */
|
|
51
|
+
editable?: boolean;
|
|
50
52
|
/** Child menu items for nested menus */
|
|
51
53
|
children?: IMenu[];
|
|
52
54
|
}
|
|
@@ -58,5 +60,7 @@ export interface IAction {
|
|
|
58
60
|
label: string;
|
|
59
61
|
/** Action value */
|
|
60
62
|
value: string;
|
|
63
|
+
/** Action icon */
|
|
64
|
+
icon?: string;
|
|
61
65
|
}
|
|
62
66
|
//# sourceMappingURL=menu.types.d.ts.map
|
package/menu.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.types.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"menu.types.js","sourceRoot":"","sources":["../../../../src/components/menu/menu.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport const EMPTY_STRING = '';\n\n/**\n * Menu size variants\n */\nexport const enum MenuSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large'\n}\n\n/**\n * Icon position in menu items\n */\nexport const enum IconPosition {\n Left = 'left',\n Right = 'right',\n}\n\n/**\n * Menu item configuration interface\n */\nexport interface IMenu {\n /** Display text for the menu item */\n text: string;\n /** URL link for navigation */\n link?: string;\n /** Menu configuration with icon and actions */\n menu?: { icon: string; actions: IAction[] };\n /** Status indicator with icon and label */\n status?: { icon: string; label: string };\n /** Icon name */\n icon?: string;\n /** Icon position (left or right) */\n iconPosition?: IconPosition | string;\n /** Whether the menu item is selected */\n selected?: boolean;\n /** Whether the menu item is disabled */\n disabled?: boolean;\n /** Whether the submenu is opened */\n opened?: boolean;\n /** Whether the menu item label can be edited (double-click to edit) */\n editable?: boolean;\n /** Child menu items for nested menus */\n children?: IMenu[];\n}\n\n/**\n * Menu action configuration interface\n */\nexport interface IAction {\n /** Action label */\n label: string;\n /** Action value */\n value: string;\n /** Action icon */\n icon?: string;\n}\n"]}
|
package/package.json
CHANGED
package/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../../src/components/menu/react.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,MAAM,CAAC,MAAM,MAAM,GAAG,eAAe,CAAC;IACpC,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE;QACN,MAAM,EAAE,QAAQ;KACjB;CACF,CAAC,CAAC","sourcesContent":["import { createComponent } from '@lit-labs/react';\nimport * as React from 'react';\nimport { NrMenuElement } from './menu.component.js';\nexport const NrMenu = createComponent({\n tagName: 'nr-menu',\n elementClass: NrMenuElement,\n react: React,\n events: {\n change: 'change',\n },\n});\n"]}
|