@m3e/web 2.5.0 → 2.5.2

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 (73) hide show
  1. package/dist/all.js +35 -19
  2. package/dist/all.js.map +1 -1
  3. package/dist/all.min.js +41 -41
  4. package/dist/all.min.js.map +1 -1
  5. package/dist/breadcrumb.js +1 -0
  6. package/dist/breadcrumb.js.map +1 -1
  7. package/dist/breadcrumb.min.js.map +1 -1
  8. package/dist/button.js +1 -1
  9. package/dist/button.js.map +1 -1
  10. package/dist/button.min.js +1 -1
  11. package/dist/button.min.js.map +1 -1
  12. package/dist/calendar.js +6 -2
  13. package/dist/calendar.js.map +1 -1
  14. package/dist/calendar.min.js +1 -1
  15. package/dist/calendar.min.js.map +1 -1
  16. package/dist/content-pane.js +2 -2
  17. package/dist/content-pane.js.map +1 -1
  18. package/dist/content-pane.min.js +1 -1
  19. package/dist/content-pane.min.js.map +1 -1
  20. package/dist/core.js +2 -0
  21. package/dist/core.js.map +1 -1
  22. package/dist/core.min.js.map +1 -1
  23. package/dist/css-custom-data.json +237 -237
  24. package/dist/custom-elements.json +2671 -2631
  25. package/dist/html-custom-data.json +175 -175
  26. package/dist/icon-button.js +1 -1
  27. package/dist/icon-button.js.map +1 -1
  28. package/dist/icon-button.min.js +1 -1
  29. package/dist/icon-button.min.js.map +1 -1
  30. package/dist/nav-bar.js +7 -4
  31. package/dist/nav-bar.js.map +1 -1
  32. package/dist/nav-bar.min.js +1 -1
  33. package/dist/nav-bar.min.js.map +1 -1
  34. package/dist/nav-menu.js +6 -5
  35. package/dist/nav-menu.js.map +1 -1
  36. package/dist/nav-menu.min.js +1 -1
  37. package/dist/nav-menu.min.js.map +1 -1
  38. package/dist/search.js +2 -2
  39. package/dist/search.js.map +1 -1
  40. package/dist/search.min.js +1 -1
  41. package/dist/search.min.js.map +1 -1
  42. package/dist/slider.js +2 -0
  43. package/dist/slider.js.map +1 -1
  44. package/dist/slider.min.js.map +1 -1
  45. package/dist/split-pane.js +3 -3
  46. package/dist/split-pane.js.map +1 -1
  47. package/dist/split-pane.min.js +1 -1
  48. package/dist/split-pane.min.js.map +1 -1
  49. package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts +1 -0
  50. package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts.map +1 -1
  51. package/dist/src/button/styles/ButtonStyle.d.ts.map +1 -1
  52. package/dist/src/calendar/MonthViewElement.d.ts.map +1 -1
  53. package/dist/src/content-pane/ContentPaneElement.d.ts.map +1 -1
  54. package/dist/src/core/shared/primitives/SlideElement.d.ts +2 -0
  55. package/dist/src/core/shared/primitives/SlideElement.d.ts.map +1 -1
  56. package/dist/src/icon-button/styles/IconButtonStyle.d.ts.map +1 -1
  57. package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
  58. package/dist/src/nav-menu/NavMenuElement.d.ts.map +1 -1
  59. package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
  60. package/dist/src/slider/SliderElement.d.ts +2 -0
  61. package/dist/src/slider/SliderElement.d.ts.map +1 -1
  62. package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
  63. package/dist/src/theme/ThemeElement.d.ts +2 -0
  64. package/dist/src/theme/ThemeElement.d.ts.map +1 -1
  65. package/dist/src/tree/TreeElement.d.ts.map +1 -1
  66. package/dist/theme.js +2 -0
  67. package/dist/theme.js.map +1 -1
  68. package/dist/theme.min.js.map +1 -1
  69. package/dist/tree.js +5 -4
  70. package/dist/tree.js.map +1 -1
  71. package/dist/tree.min.js +1 -1
  72. package/dist/tree.min.js.map +1 -1
  73. package/package.json +1 -1
@@ -181,6 +181,7 @@ var _M3eBreadcrumbItemElement_instances, _M3eBreadcrumbItemElement_defaultSepara
181
181
  * @tag m3e-breadcrumb-item
182
182
  *
183
183
  * @slot - Renders the content of the breadcrumb item.
184
+ * @slot icon - Renders an icon before the item's label.
184
185
  *
185
186
  * @attr item-label - The accessible label used by the internal breadcrumb button.
186
187
  * @attr disabled - Whether the breadcrumb item is disabled.
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb.js","sources":["../../src/breadcrumb/BreadcrumbElement.ts","../../src/breadcrumb/isIconOnly.ts","../../src/breadcrumb/BreadcrumbItemButtonElement.ts","../../src/breadcrumb/BreadcrumbItemElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { customElement, Role } from \"@m3e/web/core\";\r\n\r\nimport type { M3eBreadcrumbItemElement } from \"./BreadcrumbItemElement\";\r\n\r\n/**\r\n * Displays a hierarchical navigation path and identifies the user's\r\n * current location within an application.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb` component arranges `m3e-breadcrumb-item` children into\r\n * a trail of navigation steps. It tracks the last item as the current page and\r\n * supports a custom separator slot for alternate divider content.\r\n *\r\n * @example\r\n * The following example illustrates a simple breadcrumb with three items.\r\n * ```html\r\n * <m3e-breadcrumb>\r\n * <m3e-breadcrumb-item href=\"/dashboard\">Dashboard</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports\">Reports</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports/annual\">Annual</m3e-breadcrumb-item>\r\n * </m3e-breadcrumb>\r\n * ```\r\n *\r\n * @tag m3e-breadcrumb\r\n *\r\n * @slot - Renders breadcrumb items.\r\n * @slot separator - Renders a custom separator between breadcrumb items.\r\n *\r\n * @attr wrap - Whether breadcrumb items should wrap onto a new line.\r\n */\r\n@customElement(\"m3e-breadcrumb\")\r\nexport class M3eBreadcrumbElement extends Role(LitElement, \"navigation\") {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n }\r\n :host([wrap]) .base {\r\n flex-wrap: wrap;\r\n }\r\n slot[name=\"separator\"] {\r\n display: none;\r\n }\r\n `;\r\n\r\n /** @private */ #customSeparator: Element[] = [];\r\n\r\n /**\r\n * Whether items wrap to a new line.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) wrap = false;\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" role=\"list\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n <slot name=\"separator\" @slotchange=\"${this.#handleSeparatorSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n const items = this.querySelectorAll(\"m3e-breadcrumb-item\");\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (i < items.length - 1) {\r\n item.removeAttribute(\"current\");\r\n } else if (!item.hasAttribute(\"current\")) {\r\n item.setAttribute(\"current\", \"page\");\r\n }\r\n this.#setSeparator(item);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleSeparatorSlotChange(e: Event): void {\r\n this.#customSeparator = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\r\n this.querySelectorAll(\"m3e-breadcrumb-item\").forEach((x) => this.#setSeparator(x));\r\n }\r\n\r\n /** @private */\r\n #setSeparator(item: M3eBreadcrumbItemElement): void {\r\n item._setSeparator(\r\n this.#customSeparator.map((x) => {\r\n const clone = <Element>x.cloneNode(true);\r\n clone.part = \"separator\";\r\n return clone;\r\n }),\r\n );\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb\": M3eBreadcrumbElement;\r\n }\r\n}\r\n","/** @internal */\r\nexport function isIconOnly(slot: HTMLSlotElement): boolean {\r\n const elements = slot.assignedElements({ flatten: true });\r\n if (elements.length === 1) {\r\n const rect = elements[0].getBoundingClientRect();\r\n return rect.width <= 28 && rect.height <= 28;\r\n }\r\n return false;\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n Focusable,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n renderPseudoLink,\r\n Role,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\n/**\r\n * @internal\r\n * An internal interactive element used to present the content of a breadcrumb item.\r\n */\r\n@customElement(\"m3e-breadcrumb-item-button\")\r\nexport class M3eBreadcrumbItemButtonElement extends KeyboardClick(\r\n LinkButton(Focusable(Disabled(AttachInternals(Role(LitElement, \"button\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n border-radius: var(--m3e-breadcrumb-item-shape, ${DesignToken.shape.corner.full});\r\n height: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n column-gap: var(--m3e-breadcrumb-item-icon-label-space, 0.5rem);\r\n }\r\n .icon {\r\n font-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n --m3e-icon-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n }\r\n ::slotted([slot=\"icon\"]) {\r\n font-size: inherit !important;\r\n flex: none;\r\n }\r\n ::slotted(svg[slot=\"icon\"]) {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n :host(:state(-icon-only)) .overflow {\r\n flex: none;\r\n }\r\n :host(:not(:state(-icon-only))),\r\n :host(:not(:state(-icon-only))) .base {\r\n min-width: 0;\r\n }\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-icon-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:state(-icon-only)) .base {\r\n width: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n padding-inline: var(--m3e-breadcrumb-item-icon-padding-inline, 0px);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-icon-hover-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-icon-focus-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-icon-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-label-color, ${DesignToken.color.primary});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n font-size: var(--m3e-breadcrumb-item-label-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(\r\n --m3e-breadcrumb-item-label-font-weight,\r\n ${DesignToken.typescale.standard.label.large.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-breadcrumb-item-label-line-height,\r\n ${DesignToken.typescale.standard.label.large.lineHeight}\r\n );\r\n letter-spacing: var(--m3e-breadcrumb-item-label-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n padding-inline: var(--m3e-breadcrumb-item-label-padding-inline, 0.75rem);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-label-hover-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-label-focus-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-label-pressed-state-layer-color, ${DesignToken.color.primary});\r\n }\r\n :host([current]) .base {\r\n color: var(--m3e-breadcrumb-item-last-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:disabled):not([current])) {\r\n cursor: pointer;\r\n user-select: none;\r\n }\r\n :host(:disabled:not([current])) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-breadcrumb-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-breadcrumb-item-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n width: max(3rem, 100%);\r\n margin: auto;\r\n }\r\n a {\r\n all: unset;\r\n display: block;\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n z-index: 1;\r\n }\r\n @media (forced-colors: active) {\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base,\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: LinkText;\r\n outline: 1px solid LinkText;\r\n }\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n /** @private */ #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n super.connectedCallback();\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"disabled\") || changedProperties.has(\"current\")) {\r\n this.ariaDisabled = this.disabled && !this.current ? \"true\" : null;\r\n }\r\n\r\n if (changedProperties.has(\"current\")) {\r\n if (this.current) {\r\n this.role = null;\r\n } else if (this.hasAttribute(\"href\")) {\r\n this.role = \"link\";\r\n } else {\r\n this.role = \"button\";\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" aria-current=\"${ifDefined(this.current)}\">\r\n ${this.current\r\n ? nothing\r\n : html`<m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n ${this[renderPseudoLink]()}`}\r\n <slot class=\"icon\" name=\"icon\" aria-hidden=\"true\"></slot>\r\n <m3e-text-overflow class=\"overflow\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-text-overflow>\r\n ${this.current ? nothing : html`<div class=\"touch\" aria-hidden=\"true\"></div>`}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n // If current and link, disable default link click handler behavior.\r\n if (this.current && this.href) {\r\n e.preventDefault();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item-button\": M3eBreadcrumbItemButtonElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { AttachInternals, customElement, LinkButton, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\nimport { M3eBreadcrumbItemButtonElement } from \"./BreadcrumbItemButtonElement\";\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\nimport \"./BreadcrumbItemButtonElement\";\r\n\r\n/**\r\n * An item in a breadcrumb.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb-item` element represents a single item in a breadcrumb\r\n * navigation trail. It renders an internal button and supports navigation\r\n * attributes for link behavior.\r\n *\r\n * @tag m3e-breadcrumb-item\r\n *\r\n * @slot - Renders the content of the breadcrumb item.\r\n *\r\n * @attr item-label - The accessible label used by the internal breadcrumb button.\r\n * @attr disabled - Whether the breadcrumb item is disabled.\r\n * @attr current - Marks the breadcrumb item as the current location in the trail.\r\n * @attr href - The URL to which the internal breadcrumb link button points.\r\n * @attr target - The target of the internal breadcrumb link button.\r\n * @attr download - A value indicating whether the internal link target will be downloaded, optionally specifying a file name.\r\n * @attr rel - The relationship between the internal link target and the document.\r\n *\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-breadcrumb-item-shape - Shape of the internal breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-container-height - Height of the internal breadcrumb item button container.\r\n * @cssprop --m3e-breadcrumb-item-icon-color - Color of breadcrumb item icon-only content.\r\n * @cssprop --m3e-breadcrumb-item-icon-padding-inline - Horizontal padding for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-hover-state-layer-color - Hover state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-focus-state-layer-color - Focus state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-pressed-state-layer-color - Pressed state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-color - Color of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-size - Font size of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-weight - Font weight of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-line-height - Line height of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-tracking - Letter spacing of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-padding-inline - Horizontal padding for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-hover-state-layer-color - Hover state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-focus-state-layer-color - Focus state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-pressed-state-layer-color - Pressed state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-last-color - Color used for the current breadcrumb item.\r\n * @cssprop --m3e-breadcrumb-item-icon-label-space - Space between icon and label.\r\n * @cssprop --m3e-breadcrumb-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-breadcrumb-item-disabled-color - Disabled color used by the breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-disabled-opacity - Disabled opacity used by the breadcrumb item button.\r\n */\r\n@customElement(\"m3e-breadcrumb-item\")\r\nexport class M3eBreadcrumbItemElement extends LinkButton(AttachInternals(Role(LitElement, \"listitem\")), true) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n }\r\n :host(:not(:state(-icon-only))[current]),\r\n :host(:not(:state(-icon-only))[current]) .base {\r\n min-width: 0;\r\n }\r\n .button {\r\n flex: 1 1 auto;\r\n }\r\n .separator {\r\n flex: none;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n min-width: 0.5rem;\r\n --m3e-icon-size: var(--m3e-breadcrumb-separator-icon-size, 1.5rem);\r\n }\r\n .separator-icon {\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-icon-size);\r\n vertical-align: middle;\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".button\") private readonly _button!: M3eBreadcrumbItemButtonElement;\r\n /** @private */ #defaultSeparator?: Element;\r\n\r\n /**\r\n * The accessible label given to the item's internal button.\r\n * @default \"\"\r\n */\r\n @property({ attribute: \"item-label\" }) itemLabel = \"\";\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this._button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this._button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this._button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n if (_changedProperties.has(\"current\")) {\r\n this.#updateIconFilled();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-breadcrumb-item-button\r\n class=\"button\"\r\n aria-label=\"${ifDefined(this.itemLabel || undefined)}\"\r\n ?disabled=\"${this.disabled}\"\r\n current=\"${ifDefined(this.current)}\"\r\n href=\"${ifDefined(this.href || undefined)}\"\r\n target=\"${ifDefined(this.target || undefined)}\"\r\n download=\"${ifDefined(this.download || undefined)}\"\r\n rel=\"${ifDefined(this.rel || undefined)}\"\r\n >\r\n <slot name=\"icon\" slot=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-breadcrumb-item-button>\r\n ${this.#renderSeparator()}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderSeparator(): unknown {\r\n return this.current\r\n ? nothing\r\n : html`<div class=\"separator\" aria-hidden=\"true\">\r\n <svg class=\"separator-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(): void {\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #updateIconFilled(): void {\r\n this.querySelectorAll(\"m3e-icon\").forEach((x) => (x.filled = this.current !== undefined && this.current !== null));\r\n }\r\n\r\n /** @internal */\r\n _setSeparator(nodes: Array<Node>) {\r\n const separator = this.shadowRoot?.querySelector(\".separator\");\r\n if (!separator) return;\r\n\r\n if (nodes.length > 0) {\r\n if (!this.#defaultSeparator && separator.firstElementChild) {\r\n this.#defaultSeparator = separator.firstElementChild;\r\n }\r\n separator.replaceChildren(...nodes);\r\n } else if (this.#defaultSeparator) {\r\n separator.replaceChildren(this.#defaultSeparator);\r\n this.#defaultSeparator = undefined;\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item\": M3eBreadcrumbItemElement;\r\n }\r\n}\r\n"],"names":["M3eBreadcrumbElement","Role","LitElement","constructor","_M3eBreadcrumbElement_customSeparator","set","wrap","render","html","__classPrivateFieldGet","_M3eBreadcrumbElement_instances","_M3eBreadcrumbElement_handleSlotChange","_M3eBreadcrumbElement_handleSeparatorSlotChange","items","querySelectorAll","i","length","item","removeAttribute","hasAttribute","setAttribute","_M3eBreadcrumbElement_setSeparator","call","e","__classPrivateFieldSet","target","assignedElements","flatten","forEach","x","_setSeparator","map","clone","cloneNode","part","styles","css","__decorate","property","type","Boolean","reflect","prototype","customElement","isIconOnly","slot","elements","rect","getBoundingClientRect","width","height","M3eBreadcrumbItemButtonElement","KeyboardClick","LinkButton","Focusable","Disabled","AttachInternals","_M3eBreadcrumbItemButtonElement_clickHandler","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","firstUpdated","_changedProperties","_focusRing","_stateLayer","_ripple","attach","update","changedProperties","has","ariaDisabled","disabled","current","role","ifDefined","nothing","renderPseudoLink","_M3eBreadcrumbItemButtonElement_instances","_M3eBreadcrumbItemButtonElement_handleSlotChange","setCustomState","href","preventDefault","DesignToken","shape","corner","full","density","calc","color","onSurfaceVariant","onSurface","primary","typescale","standard","label","large","fontSize","fontWeight","lineHeight","tracking","query","M3eBreadcrumbItemElement","_M3eBreadcrumbItemElement_defaultSeparator","itemLabel","focus","options","_button","blur","click","updated","_M3eBreadcrumbItemElement_instances","_M3eBreadcrumbItemElement_updateIconFilled","undefined","download","rel","_M3eBreadcrumbItemElement_handleIconSlotChange","_M3eBreadcrumbItemElement_handleSlotChange","_M3eBreadcrumbItemElement_renderSeparator","nodes","separator","shadowRoot","querySelector","firstElementChild","replaceChildren","filled","attribute"],"mappings":"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"}
1
+ {"version":3,"file":"breadcrumb.js","sources":["../../src/breadcrumb/BreadcrumbElement.ts","../../src/breadcrumb/isIconOnly.ts","../../src/breadcrumb/BreadcrumbItemButtonElement.ts","../../src/breadcrumb/BreadcrumbItemElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { customElement, Role } from \"@m3e/web/core\";\r\n\r\nimport type { M3eBreadcrumbItemElement } from \"./BreadcrumbItemElement\";\r\n\r\n/**\r\n * Displays a hierarchical navigation path and identifies the user's\r\n * current location within an application.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb` component arranges `m3e-breadcrumb-item` children into\r\n * a trail of navigation steps. It tracks the last item as the current page and\r\n * supports a custom separator slot for alternate divider content.\r\n *\r\n * @example\r\n * The following example illustrates a simple breadcrumb with three items.\r\n * ```html\r\n * <m3e-breadcrumb>\r\n * <m3e-breadcrumb-item href=\"/dashboard\">Dashboard</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports\">Reports</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports/annual\">Annual</m3e-breadcrumb-item>\r\n * </m3e-breadcrumb>\r\n * ```\r\n *\r\n * @tag m3e-breadcrumb\r\n *\r\n * @slot - Renders breadcrumb items.\r\n * @slot separator - Renders a custom separator between breadcrumb items.\r\n *\r\n * @attr wrap - Whether breadcrumb items should wrap onto a new line.\r\n */\r\n@customElement(\"m3e-breadcrumb\")\r\nexport class M3eBreadcrumbElement extends Role(LitElement, \"navigation\") {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n }\r\n :host([wrap]) .base {\r\n flex-wrap: wrap;\r\n }\r\n slot[name=\"separator\"] {\r\n display: none;\r\n }\r\n `;\r\n\r\n /** @private */ #customSeparator: Element[] = [];\r\n\r\n /**\r\n * Whether items wrap to a new line.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) wrap = false;\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" role=\"list\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n <slot name=\"separator\" @slotchange=\"${this.#handleSeparatorSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n const items = this.querySelectorAll(\"m3e-breadcrumb-item\");\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (i < items.length - 1) {\r\n item.removeAttribute(\"current\");\r\n } else if (!item.hasAttribute(\"current\")) {\r\n item.setAttribute(\"current\", \"page\");\r\n }\r\n this.#setSeparator(item);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleSeparatorSlotChange(e: Event): void {\r\n this.#customSeparator = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\r\n this.querySelectorAll(\"m3e-breadcrumb-item\").forEach((x) => this.#setSeparator(x));\r\n }\r\n\r\n /** @private */\r\n #setSeparator(item: M3eBreadcrumbItemElement): void {\r\n item._setSeparator(\r\n this.#customSeparator.map((x) => {\r\n const clone = <Element>x.cloneNode(true);\r\n clone.part = \"separator\";\r\n return clone;\r\n }),\r\n );\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb\": M3eBreadcrumbElement;\r\n }\r\n}\r\n","/** @internal */\r\nexport function isIconOnly(slot: HTMLSlotElement): boolean {\r\n const elements = slot.assignedElements({ flatten: true });\r\n if (elements.length === 1) {\r\n const rect = elements[0].getBoundingClientRect();\r\n return rect.width <= 28 && rect.height <= 28;\r\n }\r\n return false;\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n Focusable,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n renderPseudoLink,\r\n Role,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\n/**\r\n * @internal\r\n * An internal interactive element used to present the content of a breadcrumb item.\r\n */\r\n@customElement(\"m3e-breadcrumb-item-button\")\r\nexport class M3eBreadcrumbItemButtonElement extends KeyboardClick(\r\n LinkButton(Focusable(Disabled(AttachInternals(Role(LitElement, \"button\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n border-radius: var(--m3e-breadcrumb-item-shape, ${DesignToken.shape.corner.full});\r\n height: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n column-gap: var(--m3e-breadcrumb-item-icon-label-space, 0.5rem);\r\n }\r\n .icon {\r\n font-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n --m3e-icon-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n }\r\n ::slotted([slot=\"icon\"]) {\r\n font-size: inherit !important;\r\n flex: none;\r\n }\r\n ::slotted(svg[slot=\"icon\"]) {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n :host(:state(-icon-only)) .overflow {\r\n flex: none;\r\n }\r\n :host(:not(:state(-icon-only))),\r\n :host(:not(:state(-icon-only))) .base {\r\n min-width: 0;\r\n }\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-icon-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:state(-icon-only)) .base {\r\n width: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n padding-inline: var(--m3e-breadcrumb-item-icon-padding-inline, 0px);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-icon-hover-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-icon-focus-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-icon-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-label-color, ${DesignToken.color.primary});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n font-size: var(--m3e-breadcrumb-item-label-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(\r\n --m3e-breadcrumb-item-label-font-weight,\r\n ${DesignToken.typescale.standard.label.large.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-breadcrumb-item-label-line-height,\r\n ${DesignToken.typescale.standard.label.large.lineHeight}\r\n );\r\n letter-spacing: var(--m3e-breadcrumb-item-label-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n padding-inline: var(--m3e-breadcrumb-item-label-padding-inline, 0.75rem);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-label-hover-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-label-focus-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-label-pressed-state-layer-color, ${DesignToken.color.primary});\r\n }\r\n :host([current]) .base {\r\n color: var(--m3e-breadcrumb-item-last-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:disabled):not([current])) {\r\n cursor: pointer;\r\n user-select: none;\r\n }\r\n :host(:disabled:not([current])) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-breadcrumb-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-breadcrumb-item-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n width: max(3rem, 100%);\r\n margin: auto;\r\n }\r\n a {\r\n all: unset;\r\n display: block;\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n z-index: 1;\r\n }\r\n @media (forced-colors: active) {\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base,\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: LinkText;\r\n outline: 1px solid LinkText;\r\n }\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n /** @private */ #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n super.connectedCallback();\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"disabled\") || changedProperties.has(\"current\")) {\r\n this.ariaDisabled = this.disabled && !this.current ? \"true\" : null;\r\n }\r\n\r\n if (changedProperties.has(\"current\")) {\r\n if (this.current) {\r\n this.role = null;\r\n } else if (this.hasAttribute(\"href\")) {\r\n this.role = \"link\";\r\n } else {\r\n this.role = \"button\";\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" aria-current=\"${ifDefined(this.current)}\">\r\n ${this.current\r\n ? nothing\r\n : html`<m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n ${this[renderPseudoLink]()}`}\r\n <slot class=\"icon\" name=\"icon\" aria-hidden=\"true\"></slot>\r\n <m3e-text-overflow class=\"overflow\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-text-overflow>\r\n ${this.current ? nothing : html`<div class=\"touch\" aria-hidden=\"true\"></div>`}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n // If current and link, disable default link click handler behavior.\r\n if (this.current && this.href) {\r\n e.preventDefault();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item-button\": M3eBreadcrumbItemButtonElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { AttachInternals, customElement, LinkButton, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\nimport { M3eBreadcrumbItemButtonElement } from \"./BreadcrumbItemButtonElement\";\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\nimport \"./BreadcrumbItemButtonElement\";\r\n\r\n/**\r\n * An item in a breadcrumb.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb-item` element represents a single item in a breadcrumb\r\n * navigation trail. It renders an internal button and supports navigation\r\n * attributes for link behavior.\r\n *\r\n * @tag m3e-breadcrumb-item\r\n *\r\n * @slot - Renders the content of the breadcrumb item.\r\n * @slot icon - Renders an icon before the item's label.\r\n *\r\n * @attr item-label - The accessible label used by the internal breadcrumb button.\r\n * @attr disabled - Whether the breadcrumb item is disabled.\r\n * @attr current - Marks the breadcrumb item as the current location in the trail.\r\n * @attr href - The URL to which the internal breadcrumb link button points.\r\n * @attr target - The target of the internal breadcrumb link button.\r\n * @attr download - A value indicating whether the internal link target will be downloaded, optionally specifying a file name.\r\n * @attr rel - The relationship between the internal link target and the document.\r\n *\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-breadcrumb-item-shape - Shape of the internal breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-container-height - Height of the internal breadcrumb item button container.\r\n * @cssprop --m3e-breadcrumb-item-icon-color - Color of breadcrumb item icon-only content.\r\n * @cssprop --m3e-breadcrumb-item-icon-padding-inline - Horizontal padding for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-hover-state-layer-color - Hover state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-focus-state-layer-color - Focus state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-pressed-state-layer-color - Pressed state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-color - Color of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-size - Font size of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-weight - Font weight of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-line-height - Line height of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-tracking - Letter spacing of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-padding-inline - Horizontal padding for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-hover-state-layer-color - Hover state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-focus-state-layer-color - Focus state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-pressed-state-layer-color - Pressed state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-last-color - Color used for the current breadcrumb item.\r\n * @cssprop --m3e-breadcrumb-item-icon-label-space - Space between icon and label.\r\n * @cssprop --m3e-breadcrumb-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-breadcrumb-item-disabled-color - Disabled color used by the breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-disabled-opacity - Disabled opacity used by the breadcrumb item button.\r\n */\r\n@customElement(\"m3e-breadcrumb-item\")\r\nexport class M3eBreadcrumbItemElement extends LinkButton(AttachInternals(Role(LitElement, \"listitem\")), true) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n }\r\n :host(:not(:state(-icon-only))[current]),\r\n :host(:not(:state(-icon-only))[current]) .base {\r\n min-width: 0;\r\n }\r\n .button {\r\n flex: 1 1 auto;\r\n }\r\n .separator {\r\n flex: none;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n min-width: 0.5rem;\r\n --m3e-icon-size: var(--m3e-breadcrumb-separator-icon-size, 1.5rem);\r\n }\r\n .separator-icon {\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-icon-size);\r\n vertical-align: middle;\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".button\") private readonly _button!: M3eBreadcrumbItemButtonElement;\r\n /** @private */ #defaultSeparator?: Element;\r\n\r\n /**\r\n * The accessible label given to the item's internal button.\r\n * @default \"\"\r\n */\r\n @property({ attribute: \"item-label\" }) itemLabel = \"\";\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this._button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this._button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this._button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n if (_changedProperties.has(\"current\")) {\r\n this.#updateIconFilled();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-breadcrumb-item-button\r\n class=\"button\"\r\n aria-label=\"${ifDefined(this.itemLabel || undefined)}\"\r\n ?disabled=\"${this.disabled}\"\r\n current=\"${ifDefined(this.current)}\"\r\n href=\"${ifDefined(this.href || undefined)}\"\r\n target=\"${ifDefined(this.target || undefined)}\"\r\n download=\"${ifDefined(this.download || undefined)}\"\r\n rel=\"${ifDefined(this.rel || undefined)}\"\r\n >\r\n <slot name=\"icon\" slot=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-breadcrumb-item-button>\r\n ${this.#renderSeparator()}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderSeparator(): unknown {\r\n return this.current\r\n ? nothing\r\n : html`<div class=\"separator\" aria-hidden=\"true\">\r\n <svg class=\"separator-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(): void {\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #updateIconFilled(): void {\r\n this.querySelectorAll(\"m3e-icon\").forEach((x) => (x.filled = this.current !== undefined && this.current !== null));\r\n }\r\n\r\n /** @internal */\r\n _setSeparator(nodes: Array<Node>) {\r\n const separator = this.shadowRoot?.querySelector(\".separator\");\r\n if (!separator) return;\r\n\r\n if (nodes.length > 0) {\r\n if (!this.#defaultSeparator && separator.firstElementChild) {\r\n this.#defaultSeparator = separator.firstElementChild;\r\n }\r\n separator.replaceChildren(...nodes);\r\n } else if (this.#defaultSeparator) {\r\n separator.replaceChildren(this.#defaultSeparator);\r\n this.#defaultSeparator = undefined;\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item\": M3eBreadcrumbItemElement;\r\n }\r\n}\r\n"],"names":["M3eBreadcrumbElement","Role","LitElement","constructor","_M3eBreadcrumbElement_customSeparator","set","wrap","render","html","__classPrivateFieldGet","_M3eBreadcrumbElement_instances","_M3eBreadcrumbElement_handleSlotChange","_M3eBreadcrumbElement_handleSeparatorSlotChange","items","querySelectorAll","i","length","item","removeAttribute","hasAttribute","setAttribute","_M3eBreadcrumbElement_setSeparator","call","e","__classPrivateFieldSet","target","assignedElements","flatten","forEach","x","_setSeparator","map","clone","cloneNode","part","styles","css","__decorate","property","type","Boolean","reflect","prototype","customElement","isIconOnly","slot","elements","rect","getBoundingClientRect","width","height","M3eBreadcrumbItemButtonElement","KeyboardClick","LinkButton","Focusable","Disabled","AttachInternals","_M3eBreadcrumbItemButtonElement_clickHandler","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","firstUpdated","_changedProperties","_focusRing","_stateLayer","_ripple","attach","update","changedProperties","has","ariaDisabled","disabled","current","role","ifDefined","nothing","renderPseudoLink","_M3eBreadcrumbItemButtonElement_instances","_M3eBreadcrumbItemButtonElement_handleSlotChange","setCustomState","href","preventDefault","DesignToken","shape","corner","full","density","calc","color","onSurfaceVariant","onSurface","primary","typescale","standard","label","large","fontSize","fontWeight","lineHeight","tracking","query","M3eBreadcrumbItemElement","_M3eBreadcrumbItemElement_defaultSeparator","itemLabel","focus","options","_button","blur","click","updated","_M3eBreadcrumbItemElement_instances","_M3eBreadcrumbItemElement_updateIconFilled","undefined","download","rel","_M3eBreadcrumbItemElement_handleIconSlotChange","_M3eBreadcrumbItemElement_handleSlotChange","_M3eBreadcrumbItemElement_renderSeparator","nodes","separator","shadowRoot","querySelector","firstElementChild","replaceChildren","filled","attribute"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumb.min.js","sources":["../../src/breadcrumb/BreadcrumbElement.ts","../../src/breadcrumb/isIconOnly.ts","../../src/breadcrumb/BreadcrumbItemButtonElement.ts","../../src/breadcrumb/BreadcrumbItemElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { customElement, Role } from \"@m3e/web/core\";\r\n\r\nimport type { M3eBreadcrumbItemElement } from \"./BreadcrumbItemElement\";\r\n\r\n/**\r\n * Displays a hierarchical navigation path and identifies the user's\r\n * current location within an application.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb` component arranges `m3e-breadcrumb-item` children into\r\n * a trail of navigation steps. It tracks the last item as the current page and\r\n * supports a custom separator slot for alternate divider content.\r\n *\r\n * @example\r\n * The following example illustrates a simple breadcrumb with three items.\r\n * ```html\r\n * <m3e-breadcrumb>\r\n * <m3e-breadcrumb-item href=\"/dashboard\">Dashboard</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports\">Reports</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports/annual\">Annual</m3e-breadcrumb-item>\r\n * </m3e-breadcrumb>\r\n * ```\r\n *\r\n * @tag m3e-breadcrumb\r\n *\r\n * @slot - Renders breadcrumb items.\r\n * @slot separator - Renders a custom separator between breadcrumb items.\r\n *\r\n * @attr wrap - Whether breadcrumb items should wrap onto a new line.\r\n */\r\n@customElement(\"m3e-breadcrumb\")\r\nexport class M3eBreadcrumbElement extends Role(LitElement, \"navigation\") {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n }\r\n :host([wrap]) .base {\r\n flex-wrap: wrap;\r\n }\r\n slot[name=\"separator\"] {\r\n display: none;\r\n }\r\n `;\r\n\r\n /** @private */ #customSeparator: Element[] = [];\r\n\r\n /**\r\n * Whether items wrap to a new line.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) wrap = false;\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" role=\"list\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n <slot name=\"separator\" @slotchange=\"${this.#handleSeparatorSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n const items = this.querySelectorAll(\"m3e-breadcrumb-item\");\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (i < items.length - 1) {\r\n item.removeAttribute(\"current\");\r\n } else if (!item.hasAttribute(\"current\")) {\r\n item.setAttribute(\"current\", \"page\");\r\n }\r\n this.#setSeparator(item);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleSeparatorSlotChange(e: Event): void {\r\n this.#customSeparator = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\r\n this.querySelectorAll(\"m3e-breadcrumb-item\").forEach((x) => this.#setSeparator(x));\r\n }\r\n\r\n /** @private */\r\n #setSeparator(item: M3eBreadcrumbItemElement): void {\r\n item._setSeparator(\r\n this.#customSeparator.map((x) => {\r\n const clone = <Element>x.cloneNode(true);\r\n clone.part = \"separator\";\r\n return clone;\r\n }),\r\n );\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb\": M3eBreadcrumbElement;\r\n }\r\n}\r\n","/** @internal */\r\nexport function isIconOnly(slot: HTMLSlotElement): boolean {\r\n const elements = slot.assignedElements({ flatten: true });\r\n if (elements.length === 1) {\r\n const rect = elements[0].getBoundingClientRect();\r\n return rect.width <= 28 && rect.height <= 28;\r\n }\r\n return false;\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n Focusable,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n renderPseudoLink,\r\n Role,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\n/**\r\n * @internal\r\n * An internal interactive element used to present the content of a breadcrumb item.\r\n */\r\n@customElement(\"m3e-breadcrumb-item-button\")\r\nexport class M3eBreadcrumbItemButtonElement extends KeyboardClick(\r\n LinkButton(Focusable(Disabled(AttachInternals(Role(LitElement, \"button\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n border-radius: var(--m3e-breadcrumb-item-shape, ${DesignToken.shape.corner.full});\r\n height: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n column-gap: var(--m3e-breadcrumb-item-icon-label-space, 0.5rem);\r\n }\r\n .icon {\r\n font-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n --m3e-icon-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n }\r\n ::slotted([slot=\"icon\"]) {\r\n font-size: inherit !important;\r\n flex: none;\r\n }\r\n ::slotted(svg[slot=\"icon\"]) {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n :host(:state(-icon-only)) .overflow {\r\n flex: none;\r\n }\r\n :host(:not(:state(-icon-only))),\r\n :host(:not(:state(-icon-only))) .base {\r\n min-width: 0;\r\n }\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-icon-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:state(-icon-only)) .base {\r\n width: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n padding-inline: var(--m3e-breadcrumb-item-icon-padding-inline, 0px);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-icon-hover-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-icon-focus-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-icon-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-label-color, ${DesignToken.color.primary});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n font-size: var(--m3e-breadcrumb-item-label-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(\r\n --m3e-breadcrumb-item-label-font-weight,\r\n ${DesignToken.typescale.standard.label.large.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-breadcrumb-item-label-line-height,\r\n ${DesignToken.typescale.standard.label.large.lineHeight}\r\n );\r\n letter-spacing: var(--m3e-breadcrumb-item-label-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n padding-inline: var(--m3e-breadcrumb-item-label-padding-inline, 0.75rem);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-label-hover-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-label-focus-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-label-pressed-state-layer-color, ${DesignToken.color.primary});\r\n }\r\n :host([current]) .base {\r\n color: var(--m3e-breadcrumb-item-last-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:disabled):not([current])) {\r\n cursor: pointer;\r\n user-select: none;\r\n }\r\n :host(:disabled:not([current])) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-breadcrumb-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-breadcrumb-item-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n width: max(3rem, 100%);\r\n margin: auto;\r\n }\r\n a {\r\n all: unset;\r\n display: block;\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n z-index: 1;\r\n }\r\n @media (forced-colors: active) {\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base,\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: LinkText;\r\n outline: 1px solid LinkText;\r\n }\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n /** @private */ #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n super.connectedCallback();\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"disabled\") || changedProperties.has(\"current\")) {\r\n this.ariaDisabled = this.disabled && !this.current ? \"true\" : null;\r\n }\r\n\r\n if (changedProperties.has(\"current\")) {\r\n if (this.current) {\r\n this.role = null;\r\n } else if (this.hasAttribute(\"href\")) {\r\n this.role = \"link\";\r\n } else {\r\n this.role = \"button\";\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" aria-current=\"${ifDefined(this.current)}\">\r\n ${this.current\r\n ? nothing\r\n : html`<m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n ${this[renderPseudoLink]()}`}\r\n <slot class=\"icon\" name=\"icon\" aria-hidden=\"true\"></slot>\r\n <m3e-text-overflow class=\"overflow\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-text-overflow>\r\n ${this.current ? nothing : html`<div class=\"touch\" aria-hidden=\"true\"></div>`}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n // If current and link, disable default link click handler behavior.\r\n if (this.current && this.href) {\r\n e.preventDefault();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item-button\": M3eBreadcrumbItemButtonElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { AttachInternals, customElement, LinkButton, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\nimport { M3eBreadcrumbItemButtonElement } from \"./BreadcrumbItemButtonElement\";\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\nimport \"./BreadcrumbItemButtonElement\";\r\n\r\n/**\r\n * An item in a breadcrumb.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb-item` element represents a single item in a breadcrumb\r\n * navigation trail. It renders an internal button and supports navigation\r\n * attributes for link behavior.\r\n *\r\n * @tag m3e-breadcrumb-item\r\n *\r\n * @slot - Renders the content of the breadcrumb item.\r\n *\r\n * @attr item-label - The accessible label used by the internal breadcrumb button.\r\n * @attr disabled - Whether the breadcrumb item is disabled.\r\n * @attr current - Marks the breadcrumb item as the current location in the trail.\r\n * @attr href - The URL to which the internal breadcrumb link button points.\r\n * @attr target - The target of the internal breadcrumb link button.\r\n * @attr download - A value indicating whether the internal link target will be downloaded, optionally specifying a file name.\r\n * @attr rel - The relationship between the internal link target and the document.\r\n *\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-breadcrumb-item-shape - Shape of the internal breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-container-height - Height of the internal breadcrumb item button container.\r\n * @cssprop --m3e-breadcrumb-item-icon-color - Color of breadcrumb item icon-only content.\r\n * @cssprop --m3e-breadcrumb-item-icon-padding-inline - Horizontal padding for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-hover-state-layer-color - Hover state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-focus-state-layer-color - Focus state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-pressed-state-layer-color - Pressed state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-color - Color of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-size - Font size of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-weight - Font weight of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-line-height - Line height of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-tracking - Letter spacing of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-padding-inline - Horizontal padding for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-hover-state-layer-color - Hover state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-focus-state-layer-color - Focus state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-pressed-state-layer-color - Pressed state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-last-color - Color used for the current breadcrumb item.\r\n * @cssprop --m3e-breadcrumb-item-icon-label-space - Space between icon and label.\r\n * @cssprop --m3e-breadcrumb-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-breadcrumb-item-disabled-color - Disabled color used by the breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-disabled-opacity - Disabled opacity used by the breadcrumb item button.\r\n */\r\n@customElement(\"m3e-breadcrumb-item\")\r\nexport class M3eBreadcrumbItemElement extends LinkButton(AttachInternals(Role(LitElement, \"listitem\")), true) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n }\r\n :host(:not(:state(-icon-only))[current]),\r\n :host(:not(:state(-icon-only))[current]) .base {\r\n min-width: 0;\r\n }\r\n .button {\r\n flex: 1 1 auto;\r\n }\r\n .separator {\r\n flex: none;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n min-width: 0.5rem;\r\n --m3e-icon-size: var(--m3e-breadcrumb-separator-icon-size, 1.5rem);\r\n }\r\n .separator-icon {\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-icon-size);\r\n vertical-align: middle;\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".button\") private readonly _button!: M3eBreadcrumbItemButtonElement;\r\n /** @private */ #defaultSeparator?: Element;\r\n\r\n /**\r\n * The accessible label given to the item's internal button.\r\n * @default \"\"\r\n */\r\n @property({ attribute: \"item-label\" }) itemLabel = \"\";\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this._button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this._button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this._button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n if (_changedProperties.has(\"current\")) {\r\n this.#updateIconFilled();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-breadcrumb-item-button\r\n class=\"button\"\r\n aria-label=\"${ifDefined(this.itemLabel || undefined)}\"\r\n ?disabled=\"${this.disabled}\"\r\n current=\"${ifDefined(this.current)}\"\r\n href=\"${ifDefined(this.href || undefined)}\"\r\n target=\"${ifDefined(this.target || undefined)}\"\r\n download=\"${ifDefined(this.download || undefined)}\"\r\n rel=\"${ifDefined(this.rel || undefined)}\"\r\n >\r\n <slot name=\"icon\" slot=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-breadcrumb-item-button>\r\n ${this.#renderSeparator()}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderSeparator(): unknown {\r\n return this.current\r\n ? nothing\r\n : html`<div class=\"separator\" aria-hidden=\"true\">\r\n <svg class=\"separator-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(): void {\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #updateIconFilled(): void {\r\n this.querySelectorAll(\"m3e-icon\").forEach((x) => (x.filled = this.current !== undefined && this.current !== null));\r\n }\r\n\r\n /** @internal */\r\n _setSeparator(nodes: Array<Node>) {\r\n const separator = this.shadowRoot?.querySelector(\".separator\");\r\n if (!separator) return;\r\n\r\n if (nodes.length > 0) {\r\n if (!this.#defaultSeparator && separator.firstElementChild) {\r\n this.#defaultSeparator = separator.firstElementChild;\r\n }\r\n separator.replaceChildren(...nodes);\r\n } else if (this.#defaultSeparator) {\r\n separator.replaceChildren(this.#defaultSeparator);\r\n this.#defaultSeparator = undefined;\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item\": M3eBreadcrumbItemElement;\r\n }\r\n}\r\n"],"names":["M3eBreadcrumbElement","Role","LitElement","constructor","_M3eBreadcrumbElement_customSeparator","set","this","wrap","render","html","__classPrivateFieldGet","_M3eBreadcrumbElement_instances","_M3eBreadcrumbElement_handleSlotChange","_M3eBreadcrumbElement_handleSeparatorSlotChange","isIconOnly","slot","elements","assignedElements","flatten","length","rect","getBoundingClientRect","width","height","items","querySelectorAll","i","item","removeAttribute","hasAttribute","setAttribute","_M3eBreadcrumbElement_setSeparator","call","e","__classPrivateFieldSet","target","forEach","x","_setSeparator","map","clone","cloneNode","part","styles","css","__decorate","property","type","Boolean","reflect","prototype","customElement","M3eBreadcrumbItemButtonElement","KeyboardClick","LinkButton","Focusable","Disabled","AttachInternals","_M3eBreadcrumbItemButtonElement_clickHandler","connectedCallback","addEventListener","super","disconnectedCallback","removeEventListener","firstUpdated","_changedProperties","_focusRing","_stateLayer","_ripple","attach","update","changedProperties","has","ariaDisabled","disabled","current","role","ifDefined","nothing","renderPseudoLink","_M3eBreadcrumbItemButtonElement_instances","_M3eBreadcrumbItemButtonElement_handleSlotChange","setCustomState","href","preventDefault","DesignToken","shape","corner","full","density","calc","color","onSurfaceVariant","onSurface","primary","typescale","standard","label","large","fontSize","fontWeight","lineHeight","tracking","query","M3eBreadcrumbItemElement","_M3eBreadcrumbItemElement_defaultSeparator","itemLabel","focus","options","_button","blur","click","updated","_M3eBreadcrumbItemElement_instances","_M3eBreadcrumbItemElement_updateIconFilled","undefined","download","rel","_M3eBreadcrumbItemElement_handleIconSlotChange","_M3eBreadcrumbItemElement_handleSlotChange","_M3eBreadcrumbItemElement_renderSeparator","nodes","separator","shadowRoot","querySelector","firstElementChild","replaceChildren","filled","attribute"],"mappings":"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"}
1
+ {"version":3,"file":"breadcrumb.min.js","sources":["../../src/breadcrumb/BreadcrumbElement.ts","../../src/breadcrumb/isIconOnly.ts","../../src/breadcrumb/BreadcrumbItemButtonElement.ts","../../src/breadcrumb/BreadcrumbItemElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { customElement, Role } from \"@m3e/web/core\";\r\n\r\nimport type { M3eBreadcrumbItemElement } from \"./BreadcrumbItemElement\";\r\n\r\n/**\r\n * Displays a hierarchical navigation path and identifies the user's\r\n * current location within an application.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb` component arranges `m3e-breadcrumb-item` children into\r\n * a trail of navigation steps. It tracks the last item as the current page and\r\n * supports a custom separator slot for alternate divider content.\r\n *\r\n * @example\r\n * The following example illustrates a simple breadcrumb with three items.\r\n * ```html\r\n * <m3e-breadcrumb>\r\n * <m3e-breadcrumb-item href=\"/dashboard\">Dashboard</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports\">Reports</m3e-breadcrumb-item>\r\n * <m3e-breadcrumb-item href=\"/dashboard/reports/annual\">Annual</m3e-breadcrumb-item>\r\n * </m3e-breadcrumb>\r\n * ```\r\n *\r\n * @tag m3e-breadcrumb\r\n *\r\n * @slot - Renders breadcrumb items.\r\n * @slot separator - Renders a custom separator between breadcrumb items.\r\n *\r\n * @attr wrap - Whether breadcrumb items should wrap onto a new line.\r\n */\r\n@customElement(\"m3e-breadcrumb\")\r\nexport class M3eBreadcrumbElement extends Role(LitElement, \"navigation\") {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n }\r\n :host([wrap]) .base {\r\n flex-wrap: wrap;\r\n }\r\n slot[name=\"separator\"] {\r\n display: none;\r\n }\r\n `;\r\n\r\n /** @private */ #customSeparator: Element[] = [];\r\n\r\n /**\r\n * Whether items wrap to a new line.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) wrap = false;\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" role=\"list\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n <slot name=\"separator\" @slotchange=\"${this.#handleSeparatorSlotChange}\"></slot>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n const items = this.querySelectorAll(\"m3e-breadcrumb-item\");\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n if (i < items.length - 1) {\r\n item.removeAttribute(\"current\");\r\n } else if (!item.hasAttribute(\"current\")) {\r\n item.setAttribute(\"current\", \"page\");\r\n }\r\n this.#setSeparator(item);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleSeparatorSlotChange(e: Event): void {\r\n this.#customSeparator = (e.target as HTMLSlotElement).assignedElements({ flatten: true });\r\n this.querySelectorAll(\"m3e-breadcrumb-item\").forEach((x) => this.#setSeparator(x));\r\n }\r\n\r\n /** @private */\r\n #setSeparator(item: M3eBreadcrumbItemElement): void {\r\n item._setSeparator(\r\n this.#customSeparator.map((x) => {\r\n const clone = <Element>x.cloneNode(true);\r\n clone.part = \"separator\";\r\n return clone;\r\n }),\r\n );\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb\": M3eBreadcrumbElement;\r\n }\r\n}\r\n","/** @internal */\r\nexport function isIconOnly(slot: HTMLSlotElement): boolean {\r\n const elements = slot.assignedElements({ flatten: true });\r\n if (elements.length === 1) {\r\n const rect = elements[0].getBoundingClientRect();\r\n return rect.width <= 28 && rect.height <= 28;\r\n }\r\n return false;\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n Focusable,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n renderPseudoLink,\r\n Role,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\n/**\r\n * @internal\r\n * An internal interactive element used to present the content of a breadcrumb item.\r\n */\r\n@customElement(\"m3e-breadcrumb-item-button\")\r\nexport class M3eBreadcrumbItemButtonElement extends KeyboardClick(\r\n LinkButton(Focusable(Disabled(AttachInternals(Role(LitElement, \"button\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n outline: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n border-radius: var(--m3e-breadcrumb-item-shape, ${DesignToken.shape.corner.full});\r\n height: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n column-gap: var(--m3e-breadcrumb-item-icon-label-space, 0.5rem);\r\n }\r\n .icon {\r\n font-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n --m3e-icon-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem);\r\n }\r\n ::slotted([slot=\"icon\"]) {\r\n font-size: inherit !important;\r\n flex: none;\r\n }\r\n ::slotted(svg[slot=\"icon\"]) {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n :host(:state(-icon-only)) .overflow {\r\n flex: none;\r\n }\r\n :host(:not(:state(-icon-only))),\r\n :host(:not(:state(-icon-only))) .base {\r\n min-width: 0;\r\n }\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-icon-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:state(-icon-only)) .base {\r\n width: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)});\r\n padding-inline: var(--m3e-breadcrumb-item-icon-padding-inline, 0px);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-icon-hover-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-icon-focus-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-icon-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-label-color, ${DesignToken.color.primary});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n font-size: var(--m3e-breadcrumb-item-label-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(\r\n --m3e-breadcrumb-item-label-font-weight,\r\n ${DesignToken.typescale.standard.label.large.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-breadcrumb-item-label-line-height,\r\n ${DesignToken.typescale.standard.label.large.lineHeight}\r\n );\r\n letter-spacing: var(--m3e-breadcrumb-item-label-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n }\r\n :host(:not(:state(-icon-only))) .base {\r\n padding-inline: var(--m3e-breadcrumb-item-label-padding-inline, 0.75rem);\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-breadcrumb-item-label-hover-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-breadcrumb-item-label-focus-state-layer-color,\r\n ${DesignToken.color.primary}\r\n );\r\n --m3e-ripple-color: var(--m3e-breadcrumb-item-label-pressed-state-layer-color, ${DesignToken.color.primary});\r\n }\r\n :host([current]) .base {\r\n color: var(--m3e-breadcrumb-item-last-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:disabled):not([current])) {\r\n cursor: pointer;\r\n user-select: none;\r\n }\r\n :host(:disabled:not([current])) .base {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-breadcrumb-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-breadcrumb-item-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n width: max(3rem, 100%);\r\n margin: auto;\r\n }\r\n a {\r\n all: unset;\r\n display: block;\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n z-index: 1;\r\n }\r\n @media (forced-colors: active) {\r\n :host(:state(-icon-only):not([current]):not(:disabled)) .base,\r\n :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base {\r\n color: LinkText;\r\n outline: 1px solid LinkText;\r\n }\r\n :host(:disabled) .base {\r\n color: GrayText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n /** @private */ #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n super.connectedCallback();\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"disabled\") || changedProperties.has(\"current\")) {\r\n this.ariaDisabled = this.disabled && !this.current ? \"true\" : null;\r\n }\r\n\r\n if (changedProperties.has(\"current\")) {\r\n if (this.current) {\r\n this.role = null;\r\n } else if (this.hasAttribute(\"href\")) {\r\n this.role = \"link\";\r\n } else {\r\n this.role = \"button\";\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" aria-current=\"${ifDefined(this.current)}\">\r\n ${this.current\r\n ? nothing\r\n : html`<m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n ${this[renderPseudoLink]()}`}\r\n <slot class=\"icon\" name=\"icon\" aria-hidden=\"true\"></slot>\r\n <m3e-text-overflow class=\"overflow\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-text-overflow>\r\n ${this.current ? nothing : html`<div class=\"touch\" aria-hidden=\"true\"></div>`}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n // If current and link, disable default link click handler behavior.\r\n if (this.current && this.href) {\r\n e.preventDefault();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item-button\": M3eBreadcrumbItemButtonElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { AttachInternals, customElement, LinkButton, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\nimport { M3eBreadcrumbItemButtonElement } from \"./BreadcrumbItemButtonElement\";\r\nimport { BreadcrumbItemCurrent } from \"./BreadcrumbItemCurrent\";\r\nimport { isIconOnly } from \"./isIconOnly\";\r\n\r\nimport \"./BreadcrumbItemButtonElement\";\r\n\r\n/**\r\n * An item in a breadcrumb.\r\n *\r\n * @description\r\n * The `m3e-breadcrumb-item` element represents a single item in a breadcrumb\r\n * navigation trail. It renders an internal button and supports navigation\r\n * attributes for link behavior.\r\n *\r\n * @tag m3e-breadcrumb-item\r\n *\r\n * @slot - Renders the content of the breadcrumb item.\r\n * @slot icon - Renders an icon before the item's label.\r\n *\r\n * @attr item-label - The accessible label used by the internal breadcrumb button.\r\n * @attr disabled - Whether the breadcrumb item is disabled.\r\n * @attr current - Marks the breadcrumb item as the current location in the trail.\r\n * @attr href - The URL to which the internal breadcrumb link button points.\r\n * @attr target - The target of the internal breadcrumb link button.\r\n * @attr download - A value indicating whether the internal link target will be downloaded, optionally specifying a file name.\r\n * @attr rel - The relationship between the internal link target and the document.\r\n *\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-breadcrumb-item-shape - Shape of the internal breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-container-height - Height of the internal breadcrumb item button container.\r\n * @cssprop --m3e-breadcrumb-item-icon-color - Color of breadcrumb item icon-only content.\r\n * @cssprop --m3e-breadcrumb-item-icon-padding-inline - Horizontal padding for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-hover-state-layer-color - Hover state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-focus-state-layer-color - Focus state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-icon-pressed-state-layer-color - Pressed state layer color for icon-only breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-color - Color of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-size - Font size of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-font-weight - Font weight of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-line-height - Line height of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-tracking - Letter spacing of breadcrumb item label content.\r\n * @cssprop --m3e-breadcrumb-item-label-padding-inline - Horizontal padding for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-hover-state-layer-color - Hover state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-focus-state-layer-color - Focus state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-label-pressed-state-layer-color - Pressed state layer color for label breadcrumb items.\r\n * @cssprop --m3e-breadcrumb-item-last-color - Color used for the current breadcrumb item.\r\n * @cssprop --m3e-breadcrumb-item-icon-label-space - Space between icon and label.\r\n * @cssprop --m3e-breadcrumb-item-icon-size - Size of the icon.\r\n * @cssprop --m3e-breadcrumb-item-disabled-color - Disabled color used by the breadcrumb item button.\r\n * @cssprop --m3e-breadcrumb-item-disabled-opacity - Disabled opacity used by the breadcrumb item button.\r\n */\r\n@customElement(\"m3e-breadcrumb-item\")\r\nexport class M3eBreadcrumbItemElement extends LinkButton(AttachInternals(Role(LitElement, \"listitem\")), true) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n height: 100%;\r\n }\r\n :host(:not(:state(-icon-only))[current]),\r\n :host(:not(:state(-icon-only))[current]) .base {\r\n min-width: 0;\r\n }\r\n .button {\r\n flex: 1 1 auto;\r\n }\r\n .separator {\r\n flex: none;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n min-width: 0.5rem;\r\n --m3e-icon-size: var(--m3e-breadcrumb-separator-icon-size, 1.5rem);\r\n }\r\n .separator-icon {\r\n width: 1em;\r\n height: 1em;\r\n font-size: var(--m3e-icon-size);\r\n vertical-align: middle;\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".button\") private readonly _button!: M3eBreadcrumbItemButtonElement;\r\n /** @private */ #defaultSeparator?: Element;\r\n\r\n /**\r\n * The accessible label given to the item's internal button.\r\n * @default \"\"\r\n */\r\n @property({ attribute: \"item-label\" }) itemLabel = \"\";\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /**\r\n * Indicates the current item in the breadcrumb path.\r\n * @default undefined\r\n */\r\n @property({ reflect: true }) current?: BreadcrumbItemCurrent;\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this._button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this._button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this._button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n if (_changedProperties.has(\"current\")) {\r\n this.#updateIconFilled();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-breadcrumb-item-button\r\n class=\"button\"\r\n aria-label=\"${ifDefined(this.itemLabel || undefined)}\"\r\n ?disabled=\"${this.disabled}\"\r\n current=\"${ifDefined(this.current)}\"\r\n href=\"${ifDefined(this.href || undefined)}\"\r\n target=\"${ifDefined(this.target || undefined)}\"\r\n download=\"${ifDefined(this.download || undefined)}\"\r\n rel=\"${ifDefined(this.rel || undefined)}\"\r\n >\r\n <slot name=\"icon\" slot=\"icon\" @slotchange=\"${this.#handleIconSlotChange}\"></slot>\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-breadcrumb-item-button>\r\n ${this.#renderSeparator()}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderSeparator(): unknown {\r\n return this.current\r\n ? nothing\r\n : html`<div class=\"separator\" aria-hidden=\"true\">\r\n <svg class=\"separator-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleIconSlotChange(): void {\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n setCustomState(this, \"-icon-only\", isIconOnly(e.target as HTMLSlotElement));\r\n this.#updateIconFilled();\r\n }\r\n\r\n /** @private */\r\n #updateIconFilled(): void {\r\n this.querySelectorAll(\"m3e-icon\").forEach((x) => (x.filled = this.current !== undefined && this.current !== null));\r\n }\r\n\r\n /** @internal */\r\n _setSeparator(nodes: Array<Node>) {\r\n const separator = this.shadowRoot?.querySelector(\".separator\");\r\n if (!separator) return;\r\n\r\n if (nodes.length > 0) {\r\n if (!this.#defaultSeparator && separator.firstElementChild) {\r\n this.#defaultSeparator = separator.firstElementChild;\r\n }\r\n separator.replaceChildren(...nodes);\r\n } else if (this.#defaultSeparator) {\r\n separator.replaceChildren(this.#defaultSeparator);\r\n this.#defaultSeparator = undefined;\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-breadcrumb-item\": M3eBreadcrumbItemElement;\r\n }\r\n}\r\n"],"names":["M3eBreadcrumbElement","Role","LitElement","constructor","_M3eBreadcrumbElement_customSeparator","set","this","wrap","render","html","__classPrivateFieldGet","_M3eBreadcrumbElement_instances","_M3eBreadcrumbElement_handleSlotChange","_M3eBreadcrumbElement_handleSeparatorSlotChange","isIconOnly","slot","elements","assignedElements","flatten","length","rect","getBoundingClientRect","width","height","items","querySelectorAll","i","item","removeAttribute","hasAttribute","setAttribute","_M3eBreadcrumbElement_setSeparator","call","e","__classPrivateFieldSet","target","forEach","x","_setSeparator","map","clone","cloneNode","part","styles","css","__decorate","property","type","Boolean","reflect","prototype","customElement","M3eBreadcrumbItemButtonElement","KeyboardClick","LinkButton","Focusable","Disabled","AttachInternals","_M3eBreadcrumbItemButtonElement_clickHandler","connectedCallback","addEventListener","super","disconnectedCallback","removeEventListener","firstUpdated","_changedProperties","_focusRing","_stateLayer","_ripple","attach","update","changedProperties","has","ariaDisabled","disabled","current","role","ifDefined","nothing","renderPseudoLink","_M3eBreadcrumbItemButtonElement_instances","_M3eBreadcrumbItemButtonElement_handleSlotChange","setCustomState","href","preventDefault","DesignToken","shape","corner","full","density","calc","color","onSurfaceVariant","onSurface","primary","typescale","standard","label","large","fontSize","fontWeight","lineHeight","tracking","query","M3eBreadcrumbItemElement","_M3eBreadcrumbItemElement_defaultSeparator","itemLabel","focus","options","_button","blur","click","updated","_M3eBreadcrumbItemElement_instances","_M3eBreadcrumbItemElement_updateIconFilled","undefined","download","rel","_M3eBreadcrumbItemElement_handleIconSlotChange","_M3eBreadcrumbItemElement_handleSlotChange","_M3eBreadcrumbItemElement_renderSeparator","nodes","separator","shadowRoot","querySelector","firstElementChild","replaceChildren","filled","attribute"],"mappings":"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"}
package/dist/button.js CHANGED
@@ -115,7 +115,7 @@ const ButtonSizeStyle = [buttonStyle("extra-small"), buttonStyle("small"), butto
115
115
  * @internal
116
116
  */
117
117
  const ButtonStyle = css`:host { display: inline-block; outline: none; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .base { box-sizing: border-box; vertical-align: middle; display: inline-flex; align-items: center; justify-content: center; position: relative; width: 100%; transition: ${unsafeCSS(`background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)}; } .touch { position: absolute; height: 3rem; left: 0; right: 0; } :host(:state(-pressed)) .base, :host(:state(-resting)) .base { transition: ${unsafeCSS(`background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},
118
- border-radius ${DesignToken.motion.spring.fastEffects}`)}; } .wrapper { width: 100%; overflow: hidden; display: inline-flex; align-items: center; } .label { justify-self: center; flex: 1 1 auto; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)}; } .icon { transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)}; } :host(:not(:disabled):not([disabled-interactive])) { cursor: pointer; } :host([disabled-interactive]) { cursor: not-allowed; } ::slotted([slot="icon"]), ::slotted([slot="selected-icon"]), ::slotted([slot="trailing-icon"]) { font-size: inherit !important; flex: none; } ::slotted(svg[slot="icon"]), ::slotted(svg[slot="selected-icon"]), ::slotted(svg[slot="trailing-icon"]) { width: 1em; height: 1em; } :host([toggle]:not([selected])) .base.with-selected-icon slot[name="selected-icon"], :host([toggle][selected]) .base.with-selected-icon slot[name="icon"] { display: none; } a { all: unset; display: block; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; z-index: 1; } :host(:state(-grouped):state(-connected)) { flex: 1 1 auto; } :host(:state(-grouped):not(:state(-connected))) { transition: ${unsafeCSS(`padding-inline ${DesignToken.motion.spring.fastEffects}`)}; } :host(:state(-grouped):not(:state(-connected)):not(:state(-adjacent-pressed)):not(:state(-pressed))) { flex-shrink: 0; flex-grow: 0; } :host(:state(-grouped):not(:state(-connected)):state(-adjacent-pressed):not(:state(-pressed))) { flex-shrink: 1; min-width: 0; } :host(:state(-grouped):not(:state(-connected)):state(-adjacent-pressed):not(:state(-pressed))) .label { text-overflow: clip; } :host(:state(-grouped):not(:state(-connected)):state(-pressed):not([disabled-interactive]):not(:disabled)) { flex-shrink: 0; flex-basis: calc( var(--_button-width) + calc(var(--_button-width) * var(--m3e-standard-button-group-width-multiplier, 0.15)) ); } @media (forced-colors: active) { .base, .label, .icon { transition: none; } :host(:state(-pressed)) .base, :host(:state(-resting)) .base { transition: ${unsafeCSS(`border-radius ${DesignToken.motion.spring.fastEffects}`)}; } :host([variant]:not(:disabled):not([disabled-interactive]):not([toggle])) .base { background-color: ButtonFace; outline-color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive]):not([toggle])) .label, :host([variant]:not(:disabled):not([disabled-interactive]):not([toggle])) .icon { color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .base { background-color: ButtonFace; outline-color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .label, :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .icon { color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]) .base { background-color: ButtonText; outline: none; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]) .label, :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]) .icon { forced-color-adjust: none; color: ButtonFace; background-color: ButtonText; } :host([variant]:disabled) .base, :host([variant][disabled-interactive]) .base { outline-color: GrayText; background-color: unset; } :host([variant]:disabled) .label, :host([variant][disabled-interactive]) .label, :host([variant]:disabled) .icon, :host([variant][disabled-interactive]) .icon { color: GrayText; } .base { outline-style: solid; } :host([size="extra-small"]) .base { outline-offset: calc(0px - var(--m3e-button-extra-small-outline-thickness, 1px)); outline-width: var(--m3e-button-extra-small-outline-thickness, 1px); } :host([size="small"]) .base { outline-offset: calc(0px - var(--m3e-button-small-outline-thickness, 1px)); outline-width: var(--m3e-button-small-outline-thickness, 1px); } :host([size="medium"]) .base { outline-offset: calc(0px - var(--m3e-button-medium-outline-thickness, 1px)); outline-width: var(--m3e-button-medium-outline-thickness, 1px); } :host([size="large"]) .base { outline-offset: calc(0px - var(--m3e-button-large-outline-thickness, 2px)); outline-width: var(--m3e-button-large-outline-thickness, 2px); } :host([size="extra-large"]) .base { outline-offset: calc(0px - var(--m3e-button-extra-large-outline-thickness, 3px)); outline-width: var(--m3e-button-extra-large-outline-thickness, 3px); } } @media (prefers-reduced-motion) { :host(:state(-pressed)) .base, :host(:state(-resting)) .base, .base, .label, .icon { transition: none; } }`;
118
+ border-radius ${DesignToken.motion.spring.fastEffects}`)}; } .wrapper { width: 100%; overflow: hidden; display: inline-flex; align-items: center; } .label { justify-self: center; flex: 1 1 auto; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)}; } .icon { transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)}; } :host(:not(:disabled):not([disabled-interactive])) { cursor: pointer; } :host([disabled-interactive]) { cursor: not-allowed; } ::slotted([slot="icon"]), ::slotted([slot="selected-icon"]), ::slotted([slot="trailing-icon"]) { font-size: inherit !important; flex: none; } ::slotted(svg[slot="icon"]), ::slotted(svg[slot="selected-icon"]), ::slotted(svg[slot="trailing-icon"]) { width: 1em; height: 1em; } :host([toggle]:not([selected])) .base.with-selected-icon slot[name="selected-icon"], :host([toggle][selected]) .base.with-selected-icon slot[name="icon"] { display: none; } a { all: unset; display: block; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; z-index: 1; } :host(:state(-grouped):state(-connected)) { flex: 1 1 auto; } :host(:state(-grouped):not(:state(-connected))) { transition: ${unsafeCSS(`padding-inline ${DesignToken.motion.spring.fastEffects}`)}; } :host(:state(-grouped):not(:state(-connected)):not(:state(-adjacent-pressed)):not(:state(-pressed))) { flex-shrink: 0; flex-grow: 0; } :host(:state(-grouped):not(:state(-connected)):state(-adjacent-pressed):not(:state(-pressed))) { flex-shrink: 1; min-width: 0; } :host(:state(-grouped):not(:state(-connected)):state(-adjacent-pressed):not(:state(-pressed))) .label { text-overflow: clip; } :host(:state(-grouped):not(:state(-connected)):state(-pressed):not([disabled-interactive]):not(:disabled)) { flex-shrink: 0; flex-basis: calc( var(--_button-width) + calc(var(--_button-width) * var(--m3e-standard-button-group-width-multiplier, 0.15)) ); } @media (forced-colors: active) { .base, .label, .icon { transition: none; } :host(:state(-pressed)) .base, :host(:state(-resting)) .base { transition: ${unsafeCSS(`border-radius ${DesignToken.motion.spring.fastEffects}`)}; } :host([variant]:not(:disabled):not([disabled-interactive]):not([toggle])) .base { background-color: ButtonFace; outline-color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive]):not([toggle])) .label, :host([variant]:not(:disabled):not([disabled-interactive]):not([toggle])) .icon { color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .base { background-color: ButtonFace; outline-color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .label, :host([variant]:hover:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .label, :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected]):focus) .label, :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .icon, :host([variant]:hover:not(:disabled):not([disabled-interactive])[toggle]:not([selected])) .icon, :host([variant]:not(:disabled):not([disabled-interactive])[toggle]:not([selected]):focus) .icon { color: ButtonText; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]) .base { background-color: ButtonText; outline: none; } :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]) .label, :host([variant]:hover:not(:disabled):not([disabled-interactive])[toggle][selected]) .label, :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]:focus) .label, :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]) .icon, :host([variant]:hover:not(:disabled):not([disabled-interactive])[toggle][selected]) .icon, :host([variant]:not(:disabled):not([disabled-interactive])[toggle][selected]:focus) .icon { forced-color-adjust: none; color: ButtonFace; background-color: ButtonText; } :host([variant]:disabled) .base, :host([variant][disabled-interactive]) .base { outline-color: GrayText; background-color: unset; } :host([variant]:disabled) .label, :host([variant][disabled-interactive]) .label, :host([variant]:disabled) .icon, :host([variant][disabled-interactive]) .icon { color: GrayText; } .base { outline-style: solid; } :host([size="extra-small"]) .base { outline-offset: calc(0px - var(--m3e-button-extra-small-outline-thickness, 1px)); outline-width: var(--m3e-button-extra-small-outline-thickness, 1px); } :host([size="small"]) .base { outline-offset: calc(0px - var(--m3e-button-small-outline-thickness, 1px)); outline-width: var(--m3e-button-small-outline-thickness, 1px); } :host([size="medium"]) .base { outline-offset: calc(0px - var(--m3e-button-medium-outline-thickness, 1px)); outline-width: var(--m3e-button-medium-outline-thickness, 1px); } :host([size="large"]) .base { outline-offset: calc(0px - var(--m3e-button-large-outline-thickness, 2px)); outline-width: var(--m3e-button-large-outline-thickness, 2px); } :host([size="extra-large"]) .base { outline-offset: calc(0px - var(--m3e-button-extra-large-outline-thickness, 3px)); outline-width: var(--m3e-button-extra-large-outline-thickness, 3px); } } @media (prefers-reduced-motion) { :host(:state(-pressed)) .base, :host(:state(-resting)) .base, .base, .label, .icon { transition: none; } }`;
119
119
 
120
120
  /**
121
121
  * Component design tokens that control the appearance variants of `M3eButtonElement`.