@m3e/web 2.5.3 → 2.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/all.js +394 -348
- package/dist/all.js.map +1 -1
- package/dist/all.min.js +56 -56
- package/dist/all.min.js.map +1 -1
- package/dist/autocomplete.js +14 -14
- package/dist/autocomplete.js.map +1 -1
- package/dist/autocomplete.min.js +1 -1
- package/dist/autocomplete.min.js.map +1 -1
- package/dist/bottom-sheet.js +11 -14
- package/dist/bottom-sheet.js.map +1 -1
- package/dist/bottom-sheet.min.js +1 -1
- package/dist/bottom-sheet.min.js.map +1 -1
- package/dist/breadcrumb.js +4 -4
- package/dist/breadcrumb.js.map +1 -1
- package/dist/breadcrumb.min.js +1 -1
- package/dist/breadcrumb.min.js.map +1 -1
- package/dist/button-group.js +5 -5
- package/dist/button-group.js.map +1 -1
- package/dist/button-group.min.js +1 -1
- package/dist/button-group.min.js.map +1 -1
- package/dist/button.js +15 -15
- package/dist/button.js.map +1 -1
- package/dist/button.min.js +1 -1
- package/dist/button.min.js.map +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.js.map +1 -1
- package/dist/checkbox.min.js +1 -1
- package/dist/checkbox.min.js.map +1 -1
- package/dist/chips.js +11 -11
- package/dist/chips.js.map +1 -1
- package/dist/chips.min.js +1 -1
- package/dist/chips.min.js.map +1 -1
- package/dist/core-a11y.js +5 -3
- package/dist/core-a11y.js.map +1 -1
- package/dist/core-a11y.min.js +4 -4
- package/dist/core-a11y.min.js.map +1 -1
- package/dist/core-anchoring.js +4 -4
- package/dist/core-anchoring.js.map +1 -1
- package/dist/core-anchoring.min.js +1 -1
- package/dist/core-anchoring.min.js.map +1 -1
- package/dist/core.js +78 -64
- package/dist/core.js.map +1 -1
- package/dist/core.min.js +1 -1
- package/dist/core.min.js.map +1 -1
- package/dist/css-custom-data.json +200 -185
- package/dist/custom-elements.json +1598 -1524
- package/dist/datepicker.js +12 -12
- package/dist/datepicker.js.map +1 -1
- package/dist/datepicker.min.js +1 -1
- package/dist/datepicker.min.js.map +1 -1
- package/dist/dialog.js +4 -4
- package/dist/dialog.js.map +1 -1
- package/dist/dialog.min.js +1 -1
- package/dist/dialog.min.js.map +1 -1
- package/dist/drawer-container.js +14 -14
- package/dist/drawer-container.js.map +1 -1
- package/dist/drawer-container.min.js +1 -1
- package/dist/drawer-container.min.js.map +1 -1
- package/dist/expansion-panel.js +4 -4
- package/dist/expansion-panel.js.map +1 -1
- package/dist/expansion-panel.min.js +1 -1
- package/dist/expansion-panel.min.js.map +1 -1
- package/dist/fab-menu.js +4 -4
- package/dist/fab-menu.js.map +1 -1
- package/dist/fab-menu.min.js +1 -1
- package/dist/fab-menu.min.js.map +1 -1
- package/dist/fab.js +2 -2
- package/dist/fab.js.map +1 -1
- package/dist/fab.min.js +1 -1
- package/dist/fab.min.js.map +1 -1
- package/dist/form-field.js +19 -19
- package/dist/form-field.js.map +1 -1
- package/dist/form-field.min.js +2 -2
- package/dist/form-field.min.js.map +1 -1
- package/dist/html-custom-data.json +54 -44
- package/dist/icon-button.js +15 -15
- package/dist/icon-button.js.map +1 -1
- package/dist/icon-button.min.js +1 -1
- package/dist/icon-button.min.js.map +1 -1
- package/dist/icon.js +1 -1
- package/dist/icon.js.map +1 -1
- package/dist/icon.min.js +1 -1
- package/dist/icon.min.js.map +1 -1
- package/dist/list.js +16 -16
- package/dist/list.js.map +1 -1
- package/dist/list.min.js +1 -1
- package/dist/list.min.js.map +1 -1
- package/dist/menu.js +20 -20
- package/dist/menu.js.map +1 -1
- package/dist/menu.min.js +1 -1
- package/dist/menu.min.js.map +1 -1
- package/dist/nav-bar.js +40 -10
- package/dist/nav-bar.js.map +1 -1
- package/dist/nav-bar.min.js +1 -1
- package/dist/nav-bar.min.js.map +1 -1
- package/dist/nav-menu.js +10 -10
- package/dist/nav-menu.js.map +1 -1
- package/dist/nav-menu.min.js +1 -1
- package/dist/nav-menu.min.js.map +1 -1
- package/dist/nav-rail.js +15 -11
- package/dist/nav-rail.js.map +1 -1
- package/dist/nav-rail.min.js +1 -1
- package/dist/nav-rail.min.js.map +1 -1
- package/dist/option.js +13 -13
- package/dist/option.js.map +1 -1
- package/dist/option.min.js +1 -1
- package/dist/option.min.js.map +1 -1
- package/dist/paginator.js +2 -2
- package/dist/paginator.js.map +1 -1
- package/dist/paginator.min.js +2 -2
- package/dist/paginator.min.js.map +1 -1
- package/dist/radio-group.js +2 -2
- package/dist/radio-group.js.map +1 -1
- package/dist/radio-group.min.js +1 -1
- package/dist/radio-group.min.js.map +1 -1
- package/dist/search.js +15 -15
- package/dist/search.js.map +1 -1
- package/dist/search.min.js +1 -1
- package/dist/search.min.js.map +1 -1
- package/dist/segmented-button.js +7 -7
- package/dist/segmented-button.js.map +1 -1
- package/dist/segmented-button.min.js +1 -1
- package/dist/segmented-button.min.js.map +1 -1
- package/dist/select.js +6 -6
- package/dist/select.js.map +1 -1
- package/dist/select.min.js +1 -1
- package/dist/select.min.js.map +1 -1
- package/dist/slider.js +5 -5
- package/dist/slider.js.map +1 -1
- package/dist/slider.min.js +1 -1
- package/dist/slider.min.js.map +1 -1
- package/dist/split-pane.js +10 -10
- package/dist/split-pane.js.map +1 -1
- package/dist/split-pane.min.js +1 -1
- package/dist/split-pane.min.js.map +1 -1
- package/dist/src/autocomplete/AutocompleteElement.d.ts.map +1 -1
- package/dist/src/bottom-sheet/BottomSheetElement.d.ts +1 -1
- package/dist/src/bottom-sheet/BottomSheetElement.d.ts.map +1 -1
- package/dist/src/button/styles/ButtonSizeStyle.d.ts.map +1 -1
- package/dist/src/button/styles/ButtonStyle.d.ts.map +1 -1
- package/dist/src/button/styles/ButtonVariantStyle.d.ts.map +1 -1
- package/dist/src/button-group/ButtonGroupElement.d.ts.map +1 -1
- package/dist/src/checkbox/CheckboxElement.d.ts.map +1 -1
- package/dist/src/chips/InputChipElement.d.ts.map +1 -1
- package/dist/src/core/a11y/InteractivityChecker.d.ts +2 -1
- package/dist/src/core/a11y/InteractivityChecker.d.ts.map +1 -1
- package/dist/src/core/anchoring/FloatingPanelElement.d.ts +1 -1
- package/dist/src/core/shared/mixins/SuppressInitialAnimation.d.ts +9 -2
- package/dist/src/core/shared/mixins/SuppressInitialAnimation.d.ts.map +1 -1
- package/dist/src/core/shared/mixins/index.d.ts +0 -1
- package/dist/src/core/shared/mixins/index.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/CollapsibleElement.d.ts +13 -0
- package/dist/src/core/shared/primitives/CollapsibleElement.d.ts.map +1 -1
- package/dist/src/core/shared/primitives/CollapsibleOrientation.d.ts +3 -0
- package/dist/src/core/shared/primitives/CollapsibleOrientation.d.ts.map +1 -0
- package/dist/src/core/shared/primitives/index.d.ts +1 -0
- package/dist/src/core/shared/primitives/index.d.ts.map +1 -1
- package/dist/src/datepicker/DatepickerElement.d.ts +1 -1
- package/dist/src/dialog/DialogElement.d.ts.map +1 -1
- package/dist/src/drawer-container/styles/DrawerContainerStyle.d.ts.map +1 -1
- package/dist/src/expansion-panel/ExpansionPanelElement.d.ts.map +1 -1
- package/dist/src/fab/FabElement.d.ts.map +1 -1
- package/dist/src/fab/styles/FabStyle.d.ts.map +1 -1
- package/dist/src/fab-menu/FabMenuElement.d.ts +1 -1
- package/dist/src/form-field/FormFieldElement.d.ts.map +1 -1
- package/dist/src/icon/IconElement.d.ts.map +1 -1
- package/dist/src/icon-button/styles/IconButtonSizeStyle.d.ts.map +1 -1
- package/dist/src/icon-button/styles/IconButtonStyle.d.ts.map +1 -1
- package/dist/src/icon-button/styles/IconButtonVariantStyle.d.ts.map +1 -1
- package/dist/src/menu/MenuElement.d.ts +1 -1
- package/dist/src/nav-bar/NavItemElement.d.ts +7 -1
- package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
- package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
- package/dist/src/nav-rail/NavRailElement.d.ts +10 -5
- package/dist/src/nav-rail/NavRailElement.d.ts.map +1 -1
- package/dist/src/paginator/PaginatorElement.d.ts.map +1 -1
- package/dist/src/search/SearchBarElement.d.ts.map +1 -1
- package/dist/src/search/SearchViewElement.d.ts.map +1 -1
- package/dist/src/search/styles/SearchBarStyle.d.ts.map +1 -1
- package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
- package/dist/src/stepper/StepperElement.d.ts.map +1 -1
- package/dist/src/toolbar/ToolbarElement.d.ts.map +1 -1
- package/dist/src/tree/TreeItemElement.d.ts.map +1 -1
- package/dist/stepper.js +6 -6
- package/dist/stepper.js.map +1 -1
- package/dist/stepper.min.js +1 -1
- package/dist/stepper.min.js.map +1 -1
- package/dist/tabs.js +5 -5
- package/dist/tabs.js.map +1 -1
- package/dist/tabs.min.js +1 -1
- package/dist/tabs.min.js.map +1 -1
- package/dist/toc.js +7 -7
- package/dist/toc.js.map +1 -1
- package/dist/toc.min.js +1 -1
- package/dist/toc.min.js.map +1 -1
- package/dist/toolbar.js +2 -1
- package/dist/toolbar.js.map +1 -1
- package/dist/toolbar.min.js +1 -1
- package/dist/toolbar.min.js.map +1 -1
- package/dist/tooltip.js +3 -3
- package/dist/tooltip.js.map +1 -1
- package/dist/tooltip.min.js +1 -1
- package/dist/tooltip.min.js.map +1 -1
- package/dist/tree.js +9 -9
- package/dist/tree.js.map +1 -1
- package/dist/tree.min.js +1 -1
- package/dist/tree.min.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/core/shared/mixins/EventAttribute.d.ts +0 -11
- package/dist/src/core/shared/mixins/EventAttribute.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bottom-sheet.min.js","sources":["../../src/bottom-sheet/BottomSheetActionElement.ts","../../src/bottom-sheet/BottomSheetElement.ts","../../src/bottom-sheet/BottomSheetTriggerElement.ts"],"sourcesContent":["import { ActionElementBase, customElement } from \"@m3e/web/core\";\r\n\r\n/**\r\n * An element, nested within a clickable element, used to close a parenting bottom sheet.\r\n * @tag m3e-bottom-sheet-action\r\n *\r\n * @slot - Renders the content of the action.\r\n */\r\n@customElement(\"m3e-bottom-sheet-action\")\r\nexport class M3eBottomSheetActionElement extends ActionElementBase {\r\n /** @inheritdoc */\r\n protected override _onClick(): void {\r\n this.closest(\"m3e-bottom-sheet\")?.hide();\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-bottom-sheet-action\": M3eBottomSheetActionElement;\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n computeCssSize,\r\n DesignToken,\r\n EventAttribute,\r\n focusWhenReady,\r\n hasAssignedNodes,\r\n hasCustomState,\r\n prefersReducedMotion,\r\n ResizeController,\r\n ScrollLockController,\r\n setCustomState,\r\n spaceSeparatedStringConverter,\r\n VelocityTracker,\r\n SuppressInitialAnimation,\r\n ReconnectedCallback,\r\n registerStyleSheet,\r\n InertController,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { isModifierAllowed, M3eInteractivityChecker } from \"@m3e/web/core/a11y\";\r\nimport \"@m3e/web/core/a11y\";\r\n\r\n/**\r\n * A sheet used to show secondary content anchored to the bottom of the screen.\r\n *\r\n * @description\r\n * The `m3e-bottom-sheet` component implements a Material 3 bottom sheet with\r\n * gesture‑driven resizing, detent snapping, and adaptive motion. It behaves as\r\n * a heavy surface: transitions use non‑bouncy, decelerating motion.\r\n *\r\n * The sheet supports direct manipulation through vertical drag gestures.\r\n * Movement below an 8px threshold is ignored to ensure reliable tap‑to‑cycle\r\n * behavior on the handle. Once activated, dragging updates the sheet height\r\n * with friction near the minimum height to prevent abrupt collapse.\r\n *\r\n * When detents are defined, the sheet snaps to the nearest detent on release.\r\n * If hideable, downward gestures may dismiss the sheet using either velocity\r\n * or a small distance threshold below the collapsed detent. When no detents\r\n * are present, the sheet behaves as a simple open/hidden surface with a\r\n * bottom‑measured hide threshold.\r\n *\r\n * @example\r\n * The following example shows a modal bottom sheet with a drag handle,\r\n * three detents (`fit`, `half`, and `full`), and an action list. The sheet\r\n * is opened using a dedicated `m3e-bottom-sheet-trigger` associated by ID.\r\n * ```html\r\n * <m3e-button>\r\n * <m3e-bottom-sheet-trigger for=\"bottomSheet\">\r\n * Open Bottom sheet\r\n * </m3e-bottom-sheet-trigger>\r\n * </m3e-button>\r\n *\r\n * <m3e-bottom-sheet id=\"bottomSheet\" modal handle hideable detents=\"fit half full\">\r\n * <m3e-action-list>\r\n * <m3e-list-action autofocus>\r\n * <m3e-bottom-sheet-action>Google Keep</m3e-bottom-sheet-action>\r\n * <span slot=\"supporting-text\">Add to a note</span>\r\n * </m3e-list-action>\r\n * <m3e-list-action>\r\n * <m3e-bottom-sheet-action>Google Docs</m3e-bottom-sheet-action>\r\n * <span slot=\"supporting-text\">Embed in a document</span>\r\n * </m3e-list-action>\r\n * </m3e-action-list>\r\n * </m3e-bottom-sheet>\r\n * ```\r\n *\r\n * @tag m3e-bottom-sheet\r\n *\r\n * @slot - Renders the content of the sheet.\r\n * @slot header - Renders the header of the sheet.\r\n *\r\n * @attr detent - The zero‑based index of the detent the sheet should open to.\r\n * @attr detents - Detents (discrete height states) the sheet can snap to.\r\n * @attr handle - Whether to display a drag handle and enable the top region of the sheet as a gesture surface for dragging between detents.\r\n * @attr handle-label - The accessible label given to the drag handle.\r\n * @attr hideable - Whether the bottom sheet can hide when its swiped down.\r\n * @attr hide-friction - The friction coefficient to hide the sheet.\r\n * @attr modal - Whether the bottom sheet behaves as modal.\r\n * @attr open - Whether the bottom sheet is open.\r\n * @attr overshoot-limit - A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n *\r\n * @fires opening - Emitted when the sheet begins to open.\r\n * @fires opened - Emitted when the sheet has opened.\r\n * @fires cancel - Emitted when the sheet is cancelled.\r\n * @fires closing - Emitted when the sheet begins to close.\r\n * @fires closed - Emitted when the sheet has closed.\r\n *\r\n * @cssprop --m3e-bottom-sheet-width - The width of the sheet.\r\n * @cssprop --m3e-bottom-sheet-max-width - The maximum width of the sheet.\r\n * @cssprop --m3e-bottom-sheet-container-color - The background color of the sheet container.\r\n * @cssprop --m3e-bottom-sheet-elevation - The elevation level when not modal.\r\n * @cssprop --m3e-bottom-sheet-modal-elevation - The elevation level when modal.\r\n * @cssprop --m3e-bottom-sheet-full-elevation - The elevation level when full height.\r\n * @cssprop --m3e-bottom-sheet-z-index - The z-index of the non-modal sheet.\r\n * @cssprop --m3e-bottom-sheet-minimized-container-shape - The border radius when minimized.\r\n * @cssprop --m3e-bottom-sheet-container-shape - The border radius of the sheet container.\r\n * @cssprop --m3e-bottom-sheet-full-container-shape - The border radius when full height.\r\n * @cssprop --m3e-bottom-sheet-scrim-color - The color of the scrim overlay.\r\n * @cssprop --m3e-bottom-sheet-scrim-opacity - The opacity of the scrim overlay.\r\n * @cssprop --m3e-bottom-sheet-peek-height - The visible height when minimized.\r\n * @cssprop --m3e-bottom-sheet-compact-top-space - The top space in compact mode.\r\n * @cssprop --m3e-bottom-sheet-top-space - The top space in standard mode.\r\n * @cssprop --m3e-bottom-sheet-padding-block - The vertical padding.\r\n * @cssprop --m3e-bottom-sheet-padding-inline - The horizontal padding.\r\n * @cssprop --m3e-bottom-sheet-handle-container-height - The height of the drag handle container.\r\n * @cssprop --m3e-bottom-sheet-handle-width - The width of the drag handle.\r\n * @cssprop --m3e-bottom-sheet-handle-height - The height of the drag handle.\r\n * @cssprop --m3e-bottom-sheet-handle-shape - The border radius of the handle.\r\n * @cssprop --m3e-bottom-sheet-handle-color - The color of the drag handle.\r\n * @cssprop --m3e-bottom-sheet-handle-focus-ring-offset - The offset of the focus ring around the handle.\r\n * @cssprop --m3e-bottom-sheet-color - The foreground (text) color of the sheet.\r\n * @cssprop --m3e-bottom-sheet-content-font-size - Font size for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-content-font-weight - Font weight for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-content-line-height - Line height for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-content-tracking - Letter spacing (tracking) for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-header-font-size - Font size for the sheet header.\r\n * @cssprop --m3e-bottom-sheet-header-font-weight - Font weight for the sheet header.\r\n * @cssprop --m3e-bottom-sheet-header-line-height - Line height for the sheet header.\r\n * @cssprop --m3e-bottom-sheet-header-tracking - Letter spacing (tracking) for the sheet header.\r\n */\r\n@customElement(\"m3e-bottom-sheet\")\r\nexport class M3eBottomSheetElement extends EventAttribute(\r\n ReconnectedCallback(SuppressInitialAnimation(AttachInternals(LitElement))),\r\n \"opening\",\r\n \"opened\",\r\n \"cancel\",\r\n \"closing\",\r\n \"closed\",\r\n) {\r\n static {\r\n registerStyleSheet(css`\r\n @property --_bottom-sheet-height {\r\n syntax: \"<length>\";\r\n inherits: false;\r\n initial-value: 50vh;\r\n }\r\n m3e-bottom-sheet > [slot=\"header\"] {\r\n margin-block-end: var(--m3e-bottom-sheet-padding-block, 0.5rem);\r\n margin-inline: var(--m3e-bottom-sheet-padding-inline, 1rem);\r\n }\r\n `);\r\n }\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 position: fixed;\r\n left: 50%;\r\n top: calc(100vh - var(--_bottom-sheet-height));\r\n margin: 0;\r\n padding: 0;\r\n outline: none;\r\n overflow: hidden;\r\n border: none;\r\n box-sizing: border-box;\r\n width: var(--m3e-bottom-sheet-width, 100%);\r\n max-width: var(--m3e-bottom-sheet-max-width, 40rem);\r\n height: var(--_bottom-sheet-height);\r\n color: var(--m3e-bottom-sheet-color, ${DesignToken.color.onSurface});\r\n background-color: var(--m3e-bottom-sheet-container-color, ${DesignToken.color.surfaceContainerLow});\r\n }\r\n :host(:not(:state(-no-animate))) {\r\n transition: ${unsafeCSS(\r\n `transform ${DesignToken.motion.duration.medium2} ${DesignToken.motion.easing.standardDecelerate},\r\n border-radius ${DesignToken.motion.duration.medium2} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n :host(:not([modal]):not(:state(-full))) .elevation {\r\n --m3e-elevation-level: var(--m3e-bottom-sheet-elevation, ${DesignToken.elevation.level1});\r\n }\r\n :host([modal]:not(:state(-full))) .elevation {\r\n --m3e-elevation-level: var(--m3e-bottom-sheet-modal-elevation, ${DesignToken.elevation.level1});\r\n }\r\n :host(:state(-full)) .elevation {\r\n --m3e-elevation-level: var(--m3e-bottom-sheet-full-elevation, ${DesignToken.elevation.level1});\r\n }\r\n :host(:not([modal])) {\r\n z-index: var(--m3e-bottom-sheet-z-index, 10);\r\n }\r\n :host(:not([modal]):not([open])),\r\n :host([modal]:not(:popover-open)) {\r\n border-radius: var(--m3e-bottom-sheet-minimized-container-shape, ${DesignToken.shape.corner.none});\r\n transform: translateX(-50%) translateY(100%);\r\n }\r\n :host(:not([modal])[open]:not(:state(-full))),\r\n :host([modal]:not(:state(-full)):popover-open) {\r\n border-radius: var(--m3e-bottom-sheet-container-shape, ${DesignToken.shape.corner.extraLargeTop});\r\n }\r\n :host(:not([modal])[open]:state(-full)),\r\n :host([modal]:state(-full):popover-open) {\r\n border-radius: var(--m3e-bottom-sheet-full-container-shape, ${DesignToken.shape.corner.extraLargeTop});\r\n }\r\n :host(:not([modal])[open]),\r\n :host([modal]:popover-open) {\r\n transform: translateX(-50%) translateY(0);\r\n }\r\n :host([modal]:not(:state(-no-animate)))::backdrop {\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard}, \r\n overlay ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete,\r\n visibility ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n :host([modal]:popover-open)::backdrop {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-bottom-sheet-scrim-color, ${DesignToken.color.scrim}) var(--m3e-bottom-sheet-scrim-opacity, 32%),\r\n transparent\r\n );\r\n }\r\n :host([modal]:popover-open:not(:state(-no-animate)))::backdrop {\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.long2} ${DesignToken.motion.easing.standard}, \r\n overlay ${DesignToken.motion.duration.long2} ${DesignToken.motion.easing.standard} allow-discrete,\r\n visibility ${DesignToken.motion.duration.long2} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n @starting-style {\r\n :host([modal]:popover-open)::backdrop {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-bottom-sheet-scrim-color, ${DesignToken.color.scrim}) 0%,\r\n transparent\r\n );\r\n }\r\n }\r\n .base {\r\n display: flex;\r\n border-radius: inherit;\r\n flex-direction: column;\r\n height: 100%;\r\n --_bottom-sheet-peek-height: var(--m3e-bottom-sheet-peek-height, 0);\r\n --_bottom-sheet-top-space: var(--m3e-bottom-sheet-compact-top-space, 4.5rem);\r\n }\r\n @media (max-height: 640px) {\r\n .base {\r\n --_bottom-sheet-top-space: var(--m3e-bottom-sheet-top-space, 3.5rem);\r\n }\r\n }\r\n .body {\r\n flex: 1 1 auto;\r\n overflow-y: auto;\r\n scrollbar-width: ${DesignToken.scrollbar.thinWidth};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n padding-block-end: var(--m3e-bottom-sheet-padding-block, 0.5rem);\r\n padding-inline: var(--m3e-bottom-sheet-padding-inline, 1rem);\r\n font-size: var(--m3e-bottom-sheet-content-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(\r\n --m3e-bottom-sheet-content-font-weight,\r\n ${DesignToken.typescale.standard.body.medium.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-bottom-sheet-content-line-height,\r\n ${DesignToken.typescale.standard.body.medium.lineHeight}\r\n );\r\n letter-spacing: var(--m3e-bottom-sheet-content-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n .content {\r\n height: fit-content;\r\n }\r\n :host(:not([handle])) .header {\r\n display: none;\r\n }\r\n :host(:not([handle])) .body,\r\n .header {\r\n border-top-left-radius: inherit;\r\n border-top-right-radius: inherit;\r\n padding-block-start: var(--m3e-bottom-sheet-padding-block, 0.5rem);\r\n font-size: var(--m3e-bottom-sheet-header-font-size, ${DesignToken.typescale.standard.title.large.fontSize});\r\n font-weight: var(--m3e-bottom-sheet-header-font-weight, ${DesignToken.typescale.standard.title.large.fontWeight});\r\n line-height: var(--m3e-bottom-sheet-header-line-height, ${DesignToken.typescale.standard.title.large.lineHeight});\r\n letter-spacing: var(--m3e-bottom-sheet-header-tracking, ${DesignToken.typescale.standard.title.large.tracking});\r\n }\r\n .header {\r\n cursor: grab;\r\n touch-action: none;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n box-sizing: border-box;\r\n flex: none;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 3rem;\r\n --m3e-app-bar-container-color: var(--m3e-bottom-sheet-container-color, ${DesignToken.color.surfaceContainerLow});\r\n }\r\n .handle-row {\r\n position: relative;\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 1;\r\n visibility: visible;\r\n height: var(--m3e-bottom-sheet-handle-container-height, 1.5rem);\r\n }\r\n :host(:not(:state(-no-animate))) .handle-row {\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard},\r\n padding ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard},\r\n height ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard},\r\n visibility ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .handle {\r\n position: relative;\r\n width: var(--m3e-bottom-sheet-handle-width, 2rem);\r\n height: var(--m3e-bottom-sheet-handle-height, 4px);\r\n border-radius: var(--m3e-bottom-sheet-handle-shape, ${DesignToken.shape.corner.full});\r\n background-color: var(--m3e-bottom-sheet-handle-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n .handle-touch {\r\n position: absolute;\r\n aspect-ratio: 1 / 1;\r\n height: 3rem;\r\n left: calc(0px - calc(calc(3rem - var(--m3e-bottom-sheet-handle-width, 2rem)) / 2));\r\n right: calc(0px - calc(calc(3rem - var(--m3e-bottom-sheet-handle-width, 2rem)) / 2));\r\n top: calc(\r\n 0px - calc(\r\n calc(3rem - var(--m3e-bottom-sheet-handle-container-height, 1.5rem)) - calc(\r\n var(--m3e-bottom-sheet-handle-height, 4px) / 2\r\n )\r\n )\r\n );\r\n }\r\n @media (prefers-reduced-motion) {\r\n :host(:not(:state(-no-animate))),\r\n :host([modal]:not(:state(-no-animate)))::backdrop,\r\n :host([modal]:popover-open:not(:state(-no-animate)))::backdrop,\r\n :host(:not(:state(-no-animate))) .handle-row {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n :host([modal]:not(:state(-no-animate)))::backdrop,\r\n :host([modal]:popover-open:not(:state(-no-animate)))::backdrop {\r\n transition: none;\r\n }\r\n .base {\r\n border-style: solid;\r\n border-width: 1px;\r\n border-color: CanvasText;\r\n }\r\n .handle {\r\n background-color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ private static __openSheet?: M3eBottomSheetElement;\r\n\r\n /** @private */ readonly #documentClickHandler = (e: Event) => this.#handleDocumentClick(e);\r\n /** @private */ readonly #documentKeyDownHandler = (e: KeyboardEvent) => this.#handleDocumentKeyDown(e);\r\n /** @private */ readonly #windowResizeHandler = () => this.#handleWindowResize();\r\n /** @private */ readonly #velocityTracker = new VelocityTracker();\r\n /** @private */ readonly #scrollLockController = new ScrollLockController(this);\r\n /** @private */ readonly #inertController = new InertController(this);\r\n\r\n /** @private */\r\n readonly #resizeController = new ResizeController(this, {\r\n target: null,\r\n skipInitial: true,\r\n callback: (x) => this.#handleSectionResize(x),\r\n });\r\n\r\n /** @private */ #trigger: Element | null = null;\r\n /** @private */ #dragState?: {\r\n startY: number;\r\n startHeight: number;\r\n effectiveMaxHeight: number;\r\n maxHeight: number;\r\n minHeight: number;\r\n };\r\n /** @private */ #dragged = false;\r\n /** @private */ #activeDetent = 0;\r\n /** @private */ #requestDetent?: number;\r\n /** @private */ #cachedContentHeight = 0;\r\n /** @private */ #cachedHeaderHeight = 0;\r\n /** @private */ #snapAnimation?: Animation;\r\n\r\n /**\r\n * Whether the bottom sheet behaves as modal.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) modal = false;\r\n\r\n /**\r\n * Whether the bottom sheet is open.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /**\r\n * Whether to display a drag handle and enable the top region of the sheet as a gesture\r\n * surface for dragging between detents.\r\n * @default false\r\n */\r\n @property({ type: Boolean }) handle = false;\r\n\r\n /**\r\n * The accessible label given to the drag handle.\r\n * @default \"Drag handle\"\r\n */\r\n @property({ attribute: \"handle-label\" }) handleLabel = \"Drag handle\";\r\n\r\n /**\r\n * Detents (discrete height states) the sheet can snap to.\r\n * @default []\r\n */\r\n @property({ attribute: \"detents\", converter: spaceSeparatedStringConverter }) detents: string[] = [];\r\n\r\n /**\r\n * The zero‑based index of the detent the sheet should open to.\r\n * @default 0\r\n */\r\n @property({ type: Number }) detent = 0;\r\n\r\n /**\r\n * Whether the bottom sheet can hide when its swiped down.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) hideable = false;\r\n\r\n /**\r\n * The friction coefficient to hide the sheet.\r\n * @default 0.5\r\n */\r\n @property({ attribute: \"hide-friction\", type: Number }) hideFriction = 0.5;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n * @default 4\r\n */\r\n @property({ attribute: \"overshoot-limit\", type: Number }) overshootLimit = 4;\r\n\r\n /**\r\n * Shows the sheet.\r\n * @param {number} detent The zero‑based index of the detent the sheet should open to.\r\n */\r\n show(detent: number = this.detent): void {\r\n if (!this.open) {\r\n this.#requestDetent = detent;\r\n this.open = true;\r\n } else if (detent !== undefined && this.#activeDetent !== detent) {\r\n this.#snapToDetent(detent);\r\n }\r\n }\r\n\r\n /** Hides the sheet. */\r\n hide(): void {\r\n this.open = false;\r\n }\r\n\r\n /**\r\n * Toggles the opened state of the sheet.\r\n * @param {number} detent The zero‑based index of the detent the sheet should open to.\r\n */\r\n toggle(detent?: number): void {\r\n if (this.open) {\r\n this.hide();\r\n } else {\r\n this.show(detent);\r\n }\r\n }\r\n\r\n /** Moves the sheet to the next detent. */\r\n cycle(): void {\r\n if (!this.open) {\r\n this.show();\r\n } else if (this.detents.length > 0) {\r\n if (this.#activeDetent < this.detents.length - 1) {\r\n this.#activeDetent++;\r\n this.#snapToDetent(this.#activeDetent);\r\n } else if (this.hideable) {\r\n this.hide();\r\n }\r\n } else {\r\n this.hide();\r\n }\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(\"modal\")) {\r\n this.role = this.modal ? \"dialog\" : \"region\";\r\n this.ariaModal = this.modal ? \"true\" : null;\r\n this.popover = this.modal ? \"manual\" : null;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override reconnectedCallback(): void {\r\n super.reconnectedCallback();\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues): void {\r\n super.updated(_changedProperties);\r\n\r\n if (_changedProperties.has(\"open\")) {\r\n if (this.open) {\r\n if (!this.dispatchEvent(new Event(\"opening\", { cancelable: true }))) {\r\n this.open = false;\r\n return;\r\n }\r\n\r\n // Only one sheet can be open at a time.\r\n if (M3eBottomSheetElement.__openSheet !== this) {\r\n M3eBottomSheetElement.__openSheet?.hide();\r\n }\r\n M3eBottomSheetElement.__openSheet = this;\r\n\r\n this.inert = false;\r\n\r\n window.addEventListener(\"resize\", this.#windowResizeHandler);\r\n\r\n // If there are detents (regardless of handle) open to the requested, default (or first) detent.\r\n // Otherwise, open to fit unless its greater than half.\r\n\r\n if (this.detents.length > 0) {\r\n this.#activeDetent = Math.min(Math.max(0, this.#requestDetent ?? this.detent), this.detents.length - 1);\r\n this.#updateHeight(this.#computeDetentHeight(this.detents[this.#activeDetent]));\r\n } else {\r\n this.#updateHeight(Math.min(this.#computeDetentHeight(\"fit\"), this.#computeDetentHeight(\"half\")));\r\n }\r\n this.#requestDetent = undefined;\r\n } else {\r\n if (!this.dispatchEvent(new Event(\"closing\", { cancelable: true }))) {\r\n this.open = true;\r\n return;\r\n }\r\n\r\n // The following ensures layout is stable so that first tab isn't \"skipped\"\r\n requestAnimationFrame(() => (this.inert = true));\r\n\r\n window.removeEventListener(\"resize\", this.#windowResizeHandler);\r\n\r\n if (M3eBottomSheetElement.__openSheet === this) {\r\n M3eBottomSheetElement.__openSheet = undefined;\r\n }\r\n }\r\n\r\n if (this.modal) {\r\n if (this.open) {\r\n this.#trigger = document.activeElement;\r\n this.#inertController.lock();\r\n this.#scrollLockController.lock();\r\n this.showPopover();\r\n requestAnimationFrame(() => {\r\n document.addEventListener(\"click\", this.#documentClickHandler);\r\n document.addEventListener(\"keydown\", this.#documentKeyDownHandler);\r\n });\r\n\r\n let focusable: HTMLElement | null | undefined = this.querySelector<HTMLElement>(\"[autofocus]\");\r\n if (!focusable || !M3eInteractivityChecker.isFocusable(focusable)) {\r\n focusable = this.shadowRoot?.querySelector(\".handle\");\r\n }\r\n if (focusable) {\r\n focusWhenReady(focusable);\r\n }\r\n } else {\r\n this.#snapToHeight(0).then(() => {\r\n this.#inertController.unlock();\r\n this.#scrollLockController.unlock();\r\n document.removeEventListener(\"click\", this.#documentClickHandler);\r\n document.removeEventListener(\"keydown\", this.#documentKeyDownHandler);\r\n this.hidePopover();\r\n if (this.#trigger instanceof HTMLElement) {\r\n this.#trigger.focus();\r\n }\r\n this.#trigger = null;\r\n });\r\n }\r\n }\r\n\r\n this.dispatchEvent(new Event(this.open ? \"opened\" : \"closed\"));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<m3e-focus-trap ?disabled=\"${!this.modal}\">\r\n <div class=\"base\">\r\n <m3e-elevation class=\"elevation\"></m3e-elevation>\r\n <div\r\n class=\"header\"\r\n @pointerdown=\"${this.#handleHeaderPointerDown}\"\r\n @pointermove=\"${this.#handleHeaderPointerMove}\"\r\n @pointerup=\"${this.#handleHeaderPointerUp}\"\r\n >\r\n ${this.handle\r\n ? html`<div class=\"handle-row\">\r\n <div\r\n id=\"handle\"\r\n class=\"handle\"\r\n role=\"button\"\r\n aria-label=\"${this.handleLabel}\"\r\n tabindex=\"0\"\r\n @click=\"${this.#handleDragHandleClick}\"\r\n @keydown=\"${this.#handleDragHandleKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"handle\"></m3e-focus-ring>\r\n <div class=\"handle-touch\" aria-hidden=\"true\"></div>\r\n </div>\r\n </div>`\r\n : nothing}\r\n <slot name=\"header\" @slotchange=\"${this.#handleHeaderSlotChange}\"></slot>\r\n </div>\r\n <div class=\"body\">\r\n <div class=\"content\">\r\n <slot></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </m3e-focus-trap>`;\r\n }\r\n\r\n /** @private */\r\n #initialize(): void {\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\");\r\n if (content) {\r\n this.#cachedContentHeight = content.clientHeight;\r\n this.#resizeController.observe(content);\r\n }\r\n\r\n const header = this.shadowRoot?.querySelector<HTMLElement>(\".header\");\r\n if (header) {\r\n this.#cachedHeaderHeight = header.clientHeight;\r\n this.#resizeController.observe(header);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleHeaderSlotChange(e: Event): void {\r\n setCustomState(this, \"has-header\", hasAssignedNodes(e.target as HTMLSlotElement));\r\n }\r\n\r\n /** @private */\r\n #handleHeaderPointerDown(e: PointerEvent): void {\r\n if (e.target instanceof HTMLElement && M3eInteractivityChecker.isFocusable(e.target)) {\r\n return;\r\n }\r\n\r\n (<HTMLElement>e.target).setPointerCapture(e.pointerId);\r\n (<HTMLElement>e.target).style.cursor = \"grabbing\";\r\n\r\n this.#velocityTracker.reset();\r\n this.#velocityTracker.add(e.clientY);\r\n\r\n const maxHeight = this.#computeMaxHeight();\r\n const effectiveMaxHeight =\r\n this.detents.length > 0 ? Math.max(...this.detents.map((x) => this.#computeDetentHeight(x))) : maxHeight;\r\n\r\n this.#dragState = {\r\n startY: e.clientY,\r\n startHeight: this.clientHeight,\r\n effectiveMaxHeight,\r\n maxHeight,\r\n minHeight: this.#computeMinHeight(),\r\n };\r\n this.#dragged = false;\r\n }\r\n\r\n /** @private */\r\n #handleHeaderPointerMove(e: PointerEvent): void {\r\n if (!this.#dragState) {\r\n return;\r\n }\r\n\r\n const minDragThreshold = 8;\r\n if (Math.abs(e.clientY - this.#dragState.startY) <= minDragThreshold) {\r\n // Ignore movement under threshold\r\n return;\r\n }\r\n\r\n (e.getCoalescedEvents?.() ?? [e]).forEach((x) => this.#velocityTracker.add(x.clientY, e.timeStamp));\r\n\r\n let newHeight = this.#dragState.startHeight - (e.clientY - this.#dragState.startY);\r\n if (newHeight < this.#dragState.minHeight) {\r\n if (this.hideable) {\r\n const overshoot = (this.#dragState.minHeight - newHeight) * this.hideFriction;\r\n newHeight = this.#dragState.minHeight - overshoot;\r\n } else {\r\n const overshoot = this.#dragState.minHeight - newHeight;\r\n const overshootLimit = this.#dragState.maxHeight * (this.overshootLimit / 100);\r\n const compressed = (overshootLimit * overshoot) / (overshoot + overshootLimit);\r\n newHeight = this.#dragState.minHeight - compressed;\r\n }\r\n } else if (newHeight > this.#dragState.effectiveMaxHeight) {\r\n const overshoot = newHeight - this.#dragState.effectiveMaxHeight;\r\n const overshootLimit = this.#dragState.maxHeight * (this.overshootLimit / 100);\r\n const compressed = (overshootLimit * overshoot) / (overshoot + overshootLimit);\r\n newHeight = this.#dragState.effectiveMaxHeight + compressed;\r\n }\r\n\r\n this.#updateHeight(newHeight);\r\n this.#dragged = true;\r\n }\r\n\r\n /** @private */\r\n #handleHeaderPointerUp(e: PointerEvent): void {\r\n if (!this.#dragState) return;\r\n\r\n try {\r\n (<HTMLElement>e.target).releasePointerCapture(e.pointerId);\r\n (<HTMLElement>e.target).style.cursor = \"\";\r\n\r\n if (!this.#dragged) return;\r\n\r\n const significantVelocityThreshold = e.pointerType === \"touch\" ? 1200 : 500;\r\n const velocity = this.#velocityTracker.getVelocity();\r\n\r\n this.#velocityTracker.reset();\r\n\r\n if (this.hideable && velocity >= significantVelocityThreshold) {\r\n if (this.dispatchEvent(new Event(\"cancel\", { cancelable: true }))) {\r\n this.hide();\r\n }\r\n } else if (Math.abs(velocity) >= significantVelocityThreshold) {\r\n if (this.detents.length > 0) {\r\n const nextDetent = this.#getNextHigherDetent();\r\n if (nextDetent !== this.#activeDetent) {\r\n this.#snapToDetent(nextDetent);\r\n }\r\n } else {\r\n this.#snapToHeight(this.#computeDetentHeight(\"full\"));\r\n }\r\n } else {\r\n const hideDistanceThreshold = 20;\r\n if (this.hideable) {\r\n const collapsed = this.#dragState.minHeight;\r\n if (this.clientHeight < collapsed - hideDistanceThreshold) {\r\n this.hide();\r\n return;\r\n }\r\n }\r\n\r\n if (this.detents.length > 0) {\r\n this.#snapToDetent(this.#getClosestDetent());\r\n } else if (this.clientHeight < this.#dragState.minHeight) {\r\n this.#snapToHeight(this.#dragState.minHeight);\r\n } else if (this.clientHeight > this.#dragState.effectiveMaxHeight) {\r\n this.#snapToHeight(this.#dragState.effectiveMaxHeight);\r\n }\r\n }\r\n } finally {\r\n this.#dragState = undefined;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDocumentClick(e: Event): void {\r\n if (\r\n this.open &&\r\n this.modal &&\r\n !e.composedPath().includes(this) &&\r\n this.dispatchEvent(new Event(\"cancel\", { cancelable: true }))\r\n ) {\r\n this.hide();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDocumentKeyDown(e: KeyboardEvent): void {\r\n if (this.open && this.modal && e.key === \"Escape\" && !e.shiftKey && !e.ctrlKey) {\r\n e.preventDefault();\r\n\r\n if (this.dispatchEvent(new Event(\"cancel\", { cancelable: true }))) {\r\n this.hide();\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleWindowResize(): void {\r\n if (this.detents.length > 0 && this.detents[this.#activeDetent] === \"half\") {\r\n this.#updateHeight(this.#computeDetentHeight(\"half\"));\r\n return;\r\n }\r\n\r\n const maxHeight = this.#computeMaxHeight();\r\n if (hasCustomState(this, \"-full\")) {\r\n this.#updateHeight(maxHeight);\r\n } else if (this.clientHeight > maxHeight) {\r\n this.#updateHeight(maxHeight);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDragHandleClick(): void {\r\n if (!this.#dragged) {\r\n this.cycle();\r\n }\r\n this.#dragged = false;\r\n }\r\n\r\n /** @private */\r\n #handleDragHandleKeyDown(e: KeyboardEvent): void {\r\n if (e.defaultPrevented || !isModifierAllowed(e)) return;\r\n\r\n switch (e.key) {\r\n case \"Up\":\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n if (this.detents.length > 0) {\r\n const nextDetent = this.#getNextHigherDetent();\r\n if (nextDetent !== this.#activeDetent) {\r\n this.#snapToDetent(nextDetent);\r\n }\r\n } else {\r\n this.#snapToHeight(this.#computeDetentHeight(\"full\"));\r\n }\r\n break;\r\n\r\n case \"Down\":\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n if (this.detents.length > 0) {\r\n const nextDetent = this.#getNextLowerDetent();\r\n if (nextDetent !== this.#activeDetent) {\r\n this.#snapToDetent(nextDetent);\r\n } else if (this.hideable) {\r\n this.hide();\r\n }\r\n } else if (this.hideable) {\r\n this.hide();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #getNextHigherDetent(): number {\r\n const currentHeight = this.clientHeight;\r\n let nextHeight = Infinity;\r\n let nextDetent = this.#activeDetent;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === this.#activeDetent) continue;\r\n const detentHeight = this.#computeDetentHeight(this.detents[i]);\r\n if (detentHeight > currentHeight && detentHeight < nextHeight) {\r\n nextHeight = detentHeight;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #getNextLowerDetent(): number {\r\n const currentHeight = this.clientHeight;\r\n let nextHeight = -Infinity;\r\n let nextDetent = this.#activeDetent;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === this.#activeDetent) continue;\r\n const detentHeight = this.#computeDetentHeight(this.detents[i]);\r\n if (detentHeight < currentHeight && detentHeight > nextHeight) {\r\n nextHeight = detentHeight;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #getClosestDetent(): number {\r\n const currentHeight = this.clientHeight;\r\n let closestDetent = this.#activeDetent;\r\n let closestDistance = Infinity;\r\n\r\n for (let i = 0; i < this.detents.length; i++) {\r\n const detentHeight = this.#computeDetentHeight(this.detents[i]);\r\n const distance = Math.abs(currentHeight - detentHeight);\r\n\r\n if (distance < closestDistance) {\r\n closestDistance = distance;\r\n closestDetent = i;\r\n }\r\n }\r\n return closestDetent;\r\n }\r\n\r\n /** @private */\r\n #computeDetentHeight(detent: string): number {\r\n switch (detent) {\r\n case \"collapsed\":\r\n return this.#computeMinHeight();\r\n case \"half\":\r\n return this.#computeMaxHeight() * 0.5;\r\n case \"full\":\r\n return this.#computeMaxHeight();\r\n case \"fit\":\r\n return this.#computeFitHeight();\r\n }\r\n\r\n if (detent.endsWith(\"%\")) {\r\n return this.#computeMaxHeight() * (parseFloat(detent) / 100);\r\n }\r\n\r\n if (detent.endsWith(\"px\")) {\r\n return parseFloat(detent);\r\n }\r\n\r\n return this.#computeMinHeight();\r\n }\r\n\r\n /** @private */\r\n #computeMaxHeight(): number {\r\n const base = this.shadowRoot?.querySelector<HTMLElement>(\".base\");\r\n return window.innerHeight - (base ? computeCssSize(base, \"var(--_bottom-sheet-top-space)\") : 0);\r\n }\r\n\r\n /** @private */\r\n #computeMinHeight(): number {\r\n return this.detents.includes(\"fit\") && !this.detents.includes(\"collapsed\")\r\n ? this.#computeFitHeight()\r\n : this.#computePeekHeight();\r\n }\r\n\r\n /** @private */\r\n #computePeekHeight(): number {\r\n const base = this.shadowRoot?.querySelector<HTMLElement>(\".base\");\r\n return this.#cachedHeaderHeight + (base ? computeCssSize(base, \"var(--_bottom-sheet-peek-height)\") : 0);\r\n }\r\n\r\n /** @private */\r\n #computeFitHeight(): number {\r\n const body = this.shadowRoot?.querySelector<HTMLElement>(\".body\");\r\n if (!body) {\r\n return 0;\r\n }\r\n\r\n const bodyStyle = getComputedStyle(body);\r\n return (\r\n this.#cachedHeaderHeight +\r\n this.#cachedContentHeight +\r\n parseFloat(bodyStyle.paddingBlockStart) +\r\n parseFloat(bodyStyle.paddingBlockEnd)\r\n );\r\n }\r\n\r\n /** @private */\r\n #handleSectionResize(entries: ResizeObserverEntry[]): void {\r\n const oldCachedContentHeight = this.#cachedContentHeight;\r\n const oldCachedHeaderHeight = this.#cachedHeaderHeight;\r\n\r\n for (const entry of entries) {\r\n if (entry.target.classList.contains(\"content\")) {\r\n this.#cachedContentHeight = (<ResizeObserverSize>(\r\n (Array.isArray(entry.borderBoxSize) ? entry.borderBoxSize[0] : entry.borderBoxSize)\r\n )).blockSize;\r\n } else if (entry.target.classList.contains(\"header\")) {\r\n this.#cachedHeaderHeight = (<ResizeObserverSize>(\r\n (Array.isArray(entry.borderBoxSize) ? entry.borderBoxSize[0] : entry.borderBoxSize)\r\n )).blockSize;\r\n }\r\n }\r\n\r\n if (\r\n this.open &&\r\n this.detents.length > 0 &&\r\n (oldCachedContentHeight !== this.#cachedContentHeight || oldCachedHeaderHeight !== this.#cachedHeaderHeight)\r\n ) {\r\n switch (this.detents[this.#activeDetent]) {\r\n case \"fit\":\r\n this.#updateHeight(this.#computeFitHeight());\r\n break;\r\n\r\n case \"collapsed\":\r\n this.#updateHeight(this.#computeMinHeight());\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #snapToDetent(detent: number): void {\r\n if (detent >= 0 && detent < this.detents.length) {\r\n this.#activeDetent = detent;\r\n this.#snapToHeight(this.#computeDetentHeight(this.detents[detent]));\r\n }\r\n }\r\n\r\n /** @private */\r\n async #snapToHeight(height: number): Promise<void> {\r\n if (this.#snapAnimation) {\r\n this.#updateHeight(this.clientHeight);\r\n this.#snapAnimation?.cancel();\r\n this.#snapAnimation = undefined;\r\n }\r\n\r\n if (!prefersReducedMotion()) {\r\n this.#snapAnimation = this.animate(\r\n [{ \"--_bottom-sheet-height\": `${this.clientHeight}px` }, { \"--_bottom-sheet-height\": `${height}px` }],\r\n {\r\n duration: 250,\r\n easing: \"cubic-bezier(0.2, 0.0, 0, 1.0)\",\r\n },\r\n );\r\n this.#snapAnimation.onfinish = () => {\r\n this.#updateHeight(height);\r\n this.#snapAnimation = undefined;\r\n };\r\n await this.#snapAnimation.finished;\r\n } else {\r\n this.#updateHeight(height);\r\n }\r\n }\r\n\r\n /** @private */\r\n #updateHeight(height: number): void {\r\n this.style.setProperty(\"--_bottom-sheet-height\", `${height}px`);\r\n setCustomState(this, \"-full\", height === this.#computeMaxHeight());\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\");\r\n if (content) {\r\n content.inert = height <= this.#computePeekHeight();\r\n }\r\n }\r\n}\r\n\r\ninterface M3eBottomSheetElementEventMap extends HTMLElementEventMap {\r\n opening: Event;\r\n opened: Event;\r\n closing: Event;\r\n closed: Event;\r\n cancel: Event;\r\n}\r\n\r\nexport interface M3eBottomSheetElement {\r\n addEventListener<K extends keyof M3eBottomSheetElementEventMap>(\r\n type: K,\r\n listener: (this: M3eBottomSheetElement, ev: M3eBottomSheetElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eBottomSheetElementEventMap>(\r\n type: K,\r\n listener: (this: M3eBottomSheetElement, ev: M3eBottomSheetElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-bottom-sheet\": M3eBottomSheetElement;\r\n }\r\n}\r\n","import { property } from \"lit/decorators.js\";\r\n\r\nimport { ActionElementBase, customElement, HtmlFor } from \"@m3e/web/core\";\r\nimport { addAriaReferencedId, removeAriaReferencedId } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eBottomSheetElement } from \"./BottomSheetElement\";\r\n\r\n/**\r\n * An element, nested within a clickable element, used to trigger a bottom sheet.\r\n * @tag m3e-bottom-sheet-trigger\r\n *\r\n * @slot - Renders the content of the trigger.\r\n *\r\n * @attr detent - The zero‑based index of the detent the sheet should open to.\r\n * @attr secondary - Marks this trigger as a secondary trigger for accessibility. Secondary triggers do not receive ARIA ownership.\r\n */\r\n@customElement(\"m3e-bottom-sheet-trigger\")\r\nexport class M3eBottomSheetTriggerElement extends HtmlFor(ActionElementBase) {\r\n /**\r\n * The zero‑based index of the detent the sheet should open to.\r\n * @default undefined\r\n */\r\n @property({ type: Number }) detent?: number;\r\n\r\n /**\r\n * Marks this trigger as a secondary trigger for accessibility. Secondary triggers do not receive ARIA ownership.\r\n * @default false\r\n */\r\n @property({ type: Boolean }) secondary = false;\r\n\r\n /** @inheritdoc */\r\n override attach(control: HTMLElement): void {\r\n if (control instanceof M3eBottomSheetElement) {\r\n super.attach(control);\r\n\r\n if (this.parentElement) {\r\n if (!control.modal) {\r\n if (!this.secondary) {\r\n this.parentElement.ariaExpanded = \"false\";\r\n addAriaReferencedId(this.parentElement, \"aria-controls\", control.id);\r\n if (this.parentElement.id) {\r\n addAriaReferencedId(control, \"aria-labelledby\", this.parentElement.id);\r\n }\r\n }\r\n } else {\r\n this.parentElement.ariaHasPopup = \"dialog\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override detach(): void {\r\n if (this.control && this.parentElement && !this.secondary) {\r\n removeAriaReferencedId(this.parentElement, \"aria-controls\", this.control.id);\r\n }\r\n super.detach();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override _onClick(): void {\r\n if (this.control instanceof M3eBottomSheetElement) {\r\n if (this.control.modal) {\r\n this.control.show(this.detent);\r\n } else {\r\n this.control.toggle(this.detent);\r\n if (!this.secondary && this.parentElement) {\r\n this.parentElement.ariaExpanded = `${this.control.open}`;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-bottom-sheet-trigger\": M3eBottomSheetTriggerElement;\r\n }\r\n}\r\n"],"names":["M3eBottomSheetActionElement","ActionElementBase","_onClick","this","closest","hide","__decorate","customElement","M3eBottomSheetElement","M3eBottomSheetElement_1","EventAttribute","ReconnectedCallback","SuppressInitialAnimation","AttachInternals","LitElement","constructor","_M3eBottomSheetElement_documentClickHandler","set","e","__classPrivateFieldGet","call","_M3eBottomSheetElement_documentKeyDownHandler","_M3eBottomSheetElement_windowResizeHandler","_M3eBottomSheetElement_instances","_M3eBottomSheetElement_handleWindowResize","_M3eBottomSheetElement_velocityTracker","VelocityTracker","_M3eBottomSheetElement_scrollLockController","ScrollLockController","_M3eBottomSheetElement_inertController","InertController","_M3eBottomSheetElement_resizeController","ResizeController","target","skipInitial","callback","x","_M3eBottomSheetElement_handleSectionResize","_M3eBottomSheetElement_trigger","_M3eBottomSheetElement_dragState","_M3eBottomSheetElement_dragged","_M3eBottomSheetElement_activeDetent","_M3eBottomSheetElement_requestDetent","_M3eBottomSheetElement_cachedContentHeight","_M3eBottomSheetElement_cachedHeaderHeight","_M3eBottomSheetElement_snapAnimation","modal","open","handle","handleLabel","detents","detent","hideable","hideFriction","overshootLimit","show","undefined","_M3eBottomSheetElement_snapToDetent","__classPrivateFieldSet","toggle","cycle","length","_a","update","changedProperties","super","has","role","ariaModal","popover","reconnectedCallback","_M3eBottomSheetElement_initialize","firstUpdated","_changedProperties","updated","dispatchEvent","Event","cancelable","__openSheet","inert","window","addEventListener","Math","min","max","_M3eBottomSheetElement_updateHeight","_M3eBottomSheetElement_computeDetentHeight","requestAnimationFrame","removeEventListener","document","activeElement","lock","showPopover","focusable","querySelector","M3eInteractivityChecker","isFocusable","shadowRoot","focusWhenReady","_M3eBottomSheetElement_snapToHeight","then","unlock","hidePopover","HTMLElement","focus","render","html","_M3eBottomSheetElement_handleHeaderPointerDown","_M3eBottomSheetElement_handleHeaderPointerMove","_M3eBottomSheetElement_handleHeaderPointerUp","_M3eBottomSheetElement_handleDragHandleClick","_M3eBottomSheetElement_handleDragHandleKeyDown","nothing","_M3eBottomSheetElement_handleHeaderSlotChange","content","clientHeight","observe","header","setCustomState","hasAssignedNodes","setPointerCapture","pointerId","style","cursor","reset","add","clientY","maxHeight","effectiveMaxHeight","map","startY","startHeight","minHeight","_M3eBottomSheetElement_computeMinHeight","abs","getCoalescedEvents","forEach","timeStamp","newHeight","overshoot","compressed","releasePointerCapture","significantVelocityThreshold","pointerType","velocity","getVelocity","nextDetent","hideDistanceThreshold","collapsed","_M3eBottomSheetElement_getClosestDetent","composedPath","includes","key","shiftKey","ctrlKey","preventDefault","hasCustomState","defaultPrevented","isModifierAllowed","currentHeight","nextHeight","Infinity","i","detentHeight","closestDetent","closestDistance","distance","_M3eBottomSheetElement_computeMaxHeight","_M3eBottomSheetElement_computeFitHeight","endsWith","parseFloat","base","innerHeight","computeCssSize","body","bodyStyle","getComputedStyle","paddingBlockStart","paddingBlockEnd","entries","oldCachedContentHeight","oldCachedHeaderHeight","entry","classList","contains","Array","isArray","borderBoxSize","blockSize","async","height","cancel","prefersReducedMotion","animate","duration","easing","onfinish","finished","setProperty","_M3eBottomSheetElement_computePeekHeight","registerStyleSheet","css","styles","DesignToken","color","onSurface","surfaceContainerLow","unsafeCSS","motion","medium2","standardDecelerate","standard","elevation","level1","shape","corner","none","extraLargeTop","short3","scrim","long2","scrollbar","thinWidth","typescale","medium","fontSize","fontWeight","lineHeight","tracking","title","large","full","onSurfaceVariant","property","type","Boolean","reflect","prototype","attribute","converter","spaceSeparatedStringConverter","Number","M3eBottomSheetTriggerElement","HtmlFor","secondary","attach","control","parentElement","ariaHasPopup","ariaExpanded","addAriaReferencedId","id","detach","removeAriaReferencedId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bottom-sheet.min.js","sources":["../../src/bottom-sheet/BottomSheetActionElement.ts","../../src/bottom-sheet/BottomSheetElement.ts","../../src/bottom-sheet/BottomSheetTriggerElement.ts"],"sourcesContent":["import { ActionElementBase, customElement } from \"@m3e/web/core\";\r\n\r\n/**\r\n * An element, nested within a clickable element, used to close a parenting bottom sheet.\r\n * @tag m3e-bottom-sheet-action\r\n *\r\n * @slot - Renders the content of the action.\r\n */\r\n@customElement(\"m3e-bottom-sheet-action\")\r\nexport class M3eBottomSheetActionElement extends ActionElementBase {\r\n /** @inheritdoc */\r\n protected override _onClick(): void {\r\n this.closest(\"m3e-bottom-sheet\")?.hide();\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-bottom-sheet-action\": M3eBottomSheetActionElement;\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n computeCssSize,\r\n DesignToken,\r\n focusWhenReady,\r\n hasCustomState,\r\n prefersReducedMotion,\r\n ResizeController,\r\n ScrollLockController,\r\n setCustomState,\r\n spaceSeparatedStringConverter,\r\n VelocityTracker,\r\n SuppressInitialAnimation,\r\n ReconnectedCallback,\r\n registerStyleSheet,\r\n InertController,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { isModifierAllowed, M3eInteractivityChecker } from \"@m3e/web/core/a11y\";\r\nimport \"@m3e/web/core/a11y\";\r\n\r\n/**\r\n * A sheet used to show secondary content anchored to the bottom of the screen.\r\n *\r\n * @description\r\n * The `m3e-bottom-sheet` component implements a Material 3 bottom sheet with\r\n * gesture‑driven resizing, detent snapping, and adaptive motion. It behaves as\r\n * a heavy surface: transitions use non‑bouncy, decelerating motion.\r\n *\r\n * The sheet supports direct manipulation through vertical drag gestures.\r\n * Movement below an 8px threshold is ignored to ensure reliable tap‑to‑cycle\r\n * behavior on the handle. Once activated, dragging updates the sheet height\r\n * with friction near the minimum height to prevent abrupt collapse.\r\n *\r\n * When detents are defined, the sheet snaps to the nearest detent on release.\r\n * If hideable, downward gestures may dismiss the sheet using either velocity\r\n * or a small distance threshold below the collapsed detent. When no detents\r\n * are present, the sheet behaves as a simple open/hidden surface with a\r\n * bottom‑measured hide threshold.\r\n *\r\n * @example\r\n * The following example shows a modal bottom sheet with a drag handle,\r\n * three detents (`fit`, `half`, and `full`), and an action list. The sheet\r\n * is opened using a dedicated `m3e-bottom-sheet-trigger` associated by ID.\r\n * ```html\r\n * <m3e-button>\r\n * <m3e-bottom-sheet-trigger for=\"bottomSheet\">\r\n * Open Bottom sheet\r\n * </m3e-bottom-sheet-trigger>\r\n * </m3e-button>\r\n *\r\n * <m3e-bottom-sheet id=\"bottomSheet\" modal handle hideable detents=\"fit half full\">\r\n * <m3e-action-list>\r\n * <m3e-list-action autofocus>\r\n * <m3e-bottom-sheet-action>Google Keep</m3e-bottom-sheet-action>\r\n * <span slot=\"supporting-text\">Add to a note</span>\r\n * </m3e-list-action>\r\n * <m3e-list-action>\r\n * <m3e-bottom-sheet-action>Google Docs</m3e-bottom-sheet-action>\r\n * <span slot=\"supporting-text\">Embed in a document</span>\r\n * </m3e-list-action>\r\n * </m3e-action-list>\r\n * </m3e-bottom-sheet>\r\n * ```\r\n *\r\n * @tag m3e-bottom-sheet\r\n *\r\n * @slot - Renders the content of the sheet.\r\n * @slot header - Renders the header of the sheet.\r\n *\r\n * @attr detent - The zero‑based index of the detent the sheet should open to.\r\n * @attr detents - Detents (discrete height states) the sheet can snap to.\r\n * @attr handle - Whether to display a drag handle and enable the top region of the sheet as a gesture surface for dragging between detents.\r\n * @attr handle-label - The accessible label given to the drag handle.\r\n * @attr hideable - Whether the bottom sheet can hide when its swiped down.\r\n * @attr hide-friction - The friction coefficient to hide the sheet.\r\n * @attr modal - Whether the bottom sheet behaves as modal.\r\n * @attr open - Whether the bottom sheet is open.\r\n * @attr overshoot-limit - A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n *\r\n * @fires opening - Emitted when the sheet begins to open.\r\n * @fires opened - Emitted when the sheet has opened.\r\n * @fires cancel - Emitted when the sheet is cancelled.\r\n * @fires closing - Emitted when the sheet begins to close.\r\n * @fires closed - Emitted when the sheet has closed.\r\n *\r\n * @cssprop --m3e-bottom-sheet-width - The width of the sheet.\r\n * @cssprop --m3e-bottom-sheet-max-width - The maximum width of the sheet.\r\n * @cssprop --m3e-bottom-sheet-container-color - The background color of the sheet container.\r\n * @cssprop --m3e-bottom-sheet-elevation - The elevation level when not modal.\r\n * @cssprop --m3e-bottom-sheet-modal-elevation - The elevation level when modal.\r\n * @cssprop --m3e-bottom-sheet-full-elevation - The elevation level when full height.\r\n * @cssprop --m3e-bottom-sheet-z-index - The z-index of the non-modal sheet.\r\n * @cssprop --m3e-bottom-sheet-minimized-container-shape - The border radius when minimized.\r\n * @cssprop --m3e-bottom-sheet-container-shape - The border radius of the sheet container.\r\n * @cssprop --m3e-bottom-sheet-full-container-shape - The border radius when full height.\r\n * @cssprop --m3e-bottom-sheet-scrim-color - The color of the scrim overlay.\r\n * @cssprop --m3e-bottom-sheet-scrim-opacity - The opacity of the scrim overlay.\r\n * @cssprop --m3e-bottom-sheet-peek-height - The visible height when minimized.\r\n * @cssprop --m3e-bottom-sheet-compact-top-space - The top space in compact mode.\r\n * @cssprop --m3e-bottom-sheet-top-space - The top space in standard mode.\r\n * @cssprop --m3e-bottom-sheet-padding-block - The vertical padding.\r\n * @cssprop --m3e-bottom-sheet-padding-inline - The horizontal padding.\r\n * @cssprop --m3e-bottom-sheet-handle-container-height - The height of the drag handle container.\r\n * @cssprop --m3e-bottom-sheet-handle-width - The width of the drag handle.\r\n * @cssprop --m3e-bottom-sheet-handle-height - The height of the drag handle.\r\n * @cssprop --m3e-bottom-sheet-handle-shape - The border radius of the handle.\r\n * @cssprop --m3e-bottom-sheet-handle-color - The color of the drag handle.\r\n * @cssprop --m3e-bottom-sheet-handle-focus-ring-offset - The offset of the focus ring around the handle.\r\n * @cssprop --m3e-bottom-sheet-color - The foreground (text) color of the sheet.\r\n * @cssprop --m3e-bottom-sheet-content-font-size - Font size for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-content-font-weight - Font weight for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-content-line-height - Line height for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-content-tracking - Letter spacing (tracking) for the sheet content.\r\n * @cssprop --m3e-bottom-sheet-header-font-size - Font size for the sheet header.\r\n * @cssprop --m3e-bottom-sheet-header-font-weight - Font weight for the sheet header.\r\n * @cssprop --m3e-bottom-sheet-header-line-height - Line height for the sheet header.\r\n * @cssprop --m3e-bottom-sheet-header-tracking - Letter spacing (tracking) for the sheet header.\r\n */\r\n@customElement(\"m3e-bottom-sheet\")\r\nexport class M3eBottomSheetElement extends ReconnectedCallback(SuppressInitialAnimation(AttachInternals(LitElement))) {\r\n static {\r\n registerStyleSheet(css`\r\n @property --_bottom-sheet-height {\r\n syntax: \"<length>\";\r\n inherits: false;\r\n initial-value: 50vh;\r\n }\r\n m3e-bottom-sheet > [slot=\"header\"] {\r\n margin-block-end: var(--m3e-bottom-sheet-padding-block, 0.5rem);\r\n margin-inline: var(--m3e-bottom-sheet-padding-inline, 1rem);\r\n }\r\n `);\r\n }\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 position: fixed;\r\n left: 50%;\r\n top: calc(100vh - var(--_bottom-sheet-height));\r\n margin: 0;\r\n padding: 0;\r\n outline: none;\r\n overflow: hidden;\r\n border: none;\r\n box-sizing: border-box;\r\n width: var(--m3e-bottom-sheet-width, 100%);\r\n max-width: var(--m3e-bottom-sheet-max-width, 40rem);\r\n height: var(--_bottom-sheet-height);\r\n color: var(--m3e-bottom-sheet-color, ${DesignToken.color.onSurface});\r\n background-color: var(--m3e-bottom-sheet-container-color, ${DesignToken.color.surfaceContainerLow});\r\n }\r\n :host(:not(:is(:state(--no-animate), :--no-animate))) {\r\n transition: ${unsafeCSS(\r\n `transform ${DesignToken.motion.duration.medium2} ${DesignToken.motion.easing.standardDecelerate},\r\n border-radius ${DesignToken.motion.duration.medium2} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n :host(:not([modal]):not(:is(:state(--full), :--full))) .elevation {\r\n --m3e-elevation-level: var(--m3e-bottom-sheet-elevation, ${DesignToken.elevation.level1});\r\n }\r\n :host([modal]:not(:is(:state(--full), :--full))) .elevation {\r\n --m3e-elevation-level: var(--m3e-bottom-sheet-modal-elevation, ${DesignToken.elevation.level1});\r\n }\r\n :host(:is(:state(--full), :--full)) .elevation {\r\n --m3e-elevation-level: var(--m3e-bottom-sheet-full-elevation, ${DesignToken.elevation.level1});\r\n }\r\n :host(:not([modal])) {\r\n z-index: var(--m3e-bottom-sheet-z-index, 10);\r\n }\r\n :host(:not([modal]):not([open])),\r\n :host([modal]:not(:popover-open)) {\r\n border-radius: var(--m3e-bottom-sheet-minimized-container-shape, ${DesignToken.shape.corner.none});\r\n transform: translateX(-50%) translateY(100%);\r\n }\r\n :host(:not([modal])[open]:not(:is(:state(--full), :--full))),\r\n :host([modal]:not(:is(:state(--full), :--full)):popover-open) {\r\n border-radius: var(--m3e-bottom-sheet-container-shape, ${DesignToken.shape.corner.extraLargeTop});\r\n }\r\n :host(:not([modal])[open]:is(:state(--full), :--full)),\r\n :host([modal]:is(:state(--full), :--full):popover-open) {\r\n border-radius: var(--m3e-bottom-sheet-full-container-shape, ${DesignToken.shape.corner.extraLargeTop});\r\n }\r\n :host(:not([modal])[open]),\r\n :host([modal]:popover-open) {\r\n transform: translateX(-50%) translateY(0);\r\n }\r\n :host([modal]:not(:is(:state(--no-animate), :--no-animate)))::backdrop {\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard}, \r\n overlay ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete,\r\n visibility ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n :host([modal]:popover-open)::backdrop {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-bottom-sheet-scrim-color, ${DesignToken.color.scrim}) var(--m3e-bottom-sheet-scrim-opacity, 32%),\r\n transparent\r\n );\r\n }\r\n :host([modal]:popover-open:not(:is(:state(--no-animate), :--no-animate)))::backdrop {\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.long2} ${DesignToken.motion.easing.standard}, \r\n overlay ${DesignToken.motion.duration.long2} ${DesignToken.motion.easing.standard} allow-discrete,\r\n visibility ${DesignToken.motion.duration.long2} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n @starting-style {\r\n :host([modal]:popover-open)::backdrop {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-bottom-sheet-scrim-color, ${DesignToken.color.scrim}) 0%,\r\n transparent\r\n );\r\n }\r\n }\r\n .base {\r\n display: flex;\r\n border-radius: inherit;\r\n flex-direction: column;\r\n height: 100%;\r\n --_bottom-sheet-peek-height: var(--m3e-bottom-sheet-peek-height, 0);\r\n --_bottom-sheet-top-space: var(--m3e-bottom-sheet-compact-top-space, 4.5rem);\r\n }\r\n @media (max-height: 640px) {\r\n .base {\r\n --_bottom-sheet-top-space: var(--m3e-bottom-sheet-top-space, 3.5rem);\r\n }\r\n }\r\n .body {\r\n flex: 1 1 auto;\r\n overflow-y: auto;\r\n scrollbar-width: ${DesignToken.scrollbar.thinWidth};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n padding-block-end: var(--m3e-bottom-sheet-padding-block, 0.5rem);\r\n padding-inline: var(--m3e-bottom-sheet-padding-inline, 1rem);\r\n font-size: var(--m3e-bottom-sheet-content-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(\r\n --m3e-bottom-sheet-content-font-weight,\r\n ${DesignToken.typescale.standard.body.medium.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-bottom-sheet-content-line-height,\r\n ${DesignToken.typescale.standard.body.medium.lineHeight}\r\n );\r\n letter-spacing: var(--m3e-bottom-sheet-content-tracking, ${DesignToken.typescale.standard.body.medium.tracking});\r\n }\r\n .content {\r\n height: fit-content;\r\n }\r\n :host(:not([handle])) .header {\r\n display: none;\r\n }\r\n :host(:not([handle])) .body,\r\n .header {\r\n border-top-left-radius: inherit;\r\n border-top-right-radius: inherit;\r\n padding-block-start: var(--m3e-bottom-sheet-padding-block, 0.5rem);\r\n font-size: var(--m3e-bottom-sheet-header-font-size, ${DesignToken.typescale.standard.title.large.fontSize});\r\n font-weight: var(--m3e-bottom-sheet-header-font-weight, ${DesignToken.typescale.standard.title.large.fontWeight});\r\n line-height: var(--m3e-bottom-sheet-header-line-height, ${DesignToken.typescale.standard.title.large.lineHeight});\r\n letter-spacing: var(--m3e-bottom-sheet-header-tracking, ${DesignToken.typescale.standard.title.large.tracking});\r\n }\r\n .header {\r\n cursor: grab;\r\n touch-action: none;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n box-sizing: border-box;\r\n flex: none;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 3rem;\r\n --m3e-app-bar-container-color: var(--m3e-bottom-sheet-container-color, ${DesignToken.color.surfaceContainerLow});\r\n }\r\n .handle-row {\r\n position: relative;\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n opacity: 1;\r\n visibility: visible;\r\n height: var(--m3e-bottom-sheet-handle-container-height, 1.5rem);\r\n }\r\n :host(:not(:is(:state(--no-animate), :--no-animate))) .handle-row {\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard},\r\n padding ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard},\r\n height ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard},\r\n visibility ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n .handle {\r\n position: relative;\r\n width: var(--m3e-bottom-sheet-handle-width, 2rem);\r\n height: var(--m3e-bottom-sheet-handle-height, 4px);\r\n border-radius: var(--m3e-bottom-sheet-handle-shape, ${DesignToken.shape.corner.full});\r\n background-color: var(--m3e-bottom-sheet-handle-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n .handle-touch {\r\n position: absolute;\r\n aspect-ratio: 1 / 1;\r\n height: 3rem;\r\n left: calc(0px - calc(calc(3rem - var(--m3e-bottom-sheet-handle-width, 2rem)) / 2));\r\n right: calc(0px - calc(calc(3rem - var(--m3e-bottom-sheet-handle-width, 2rem)) / 2));\r\n top: calc(\r\n 0px - calc(\r\n calc(3rem - var(--m3e-bottom-sheet-handle-container-height, 1.5rem)) - calc(\r\n var(--m3e-bottom-sheet-handle-height, 4px) / 2\r\n )\r\n )\r\n );\r\n }\r\n @media (prefers-reduced-motion) {\r\n :host(:not(:is(:state(--no-animate), :--no-animate))),\r\n :host([modal]:not(:is(:state(--no-animate), :--no-animate)))::backdrop,\r\n :host([modal]:popover-open:not(:is(:state(--no-animate), :--no-animate)))::backdrop,\r\n :host(:not(:is(:state(--no-animate), :--no-animate))) .handle-row {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n :host([modal]:not(:is(:state(--no-animate), :--no-animate)))::backdrop,\r\n :host([modal]:popover-open:not(:is(:state(--no-animate), :--no-animate)))::backdrop {\r\n transition: none;\r\n }\r\n .base {\r\n border-style: solid;\r\n border-width: 1px;\r\n border-color: CanvasText;\r\n }\r\n .handle {\r\n background-color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ private static __openSheet?: M3eBottomSheetElement;\r\n\r\n /** @private */ readonly #documentClickHandler = (e: Event) => this.#handleDocumentClick(e);\r\n /** @private */ readonly #documentKeyDownHandler = (e: KeyboardEvent) => this.#handleDocumentKeyDown(e);\r\n /** @private */ readonly #windowResizeHandler = () => this.#handleWindowResize();\r\n /** @private */ readonly #velocityTracker = new VelocityTracker();\r\n /** @private */ readonly #scrollLockController = new ScrollLockController(this);\r\n /** @private */ readonly #inertController = new InertController(this);\r\n\r\n /** @private */\r\n readonly #resizeController = new ResizeController(this, {\r\n target: null,\r\n skipInitial: true,\r\n callback: (x) => this.#handleSectionResize(x),\r\n });\r\n\r\n /** @private */ #trigger: Element | null = null;\r\n /** @private */ #dragState?: {\r\n startY: number;\r\n startHeight: number;\r\n effectiveMaxHeight: number;\r\n maxHeight: number;\r\n minHeight: number;\r\n };\r\n /** @private */ #dragged = false;\r\n /** @private */ #activeDetent = 0;\r\n /** @private */ #requestDetent?: number;\r\n /** @private */ #cachedContentHeight = 0;\r\n /** @private */ #cachedHeaderHeight = 0;\r\n /** @private */ #snapAnimation?: Animation;\r\n\r\n /**\r\n * Whether the bottom sheet behaves as modal.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) modal = false;\r\n\r\n /**\r\n * Whether the bottom sheet is open.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /**\r\n * Whether to display a drag handle and enable the top region of the sheet as a gesture\r\n * surface for dragging between detents.\r\n * @default false\r\n */\r\n @property({ type: Boolean }) handle = false;\r\n\r\n /**\r\n * The accessible label given to the drag handle.\r\n * @default \"Drag handle\"\r\n */\r\n @property({ attribute: \"handle-label\" }) handleLabel = \"Drag handle\";\r\n\r\n /**\r\n * Detents (discrete height states) the sheet can snap to.\r\n * @default []\r\n */\r\n @property({ attribute: \"detents\", converter: spaceSeparatedStringConverter }) detents: string[] = [];\r\n\r\n /**\r\n * The zero‑based index of the detent the sheet should open to.\r\n * @default 0\r\n */\r\n @property({ type: Number }) detent = 0;\r\n\r\n /**\r\n * Whether the bottom sheet can hide when its swiped down.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) hideable = false;\r\n\r\n /**\r\n * The friction coefficient to hide the sheet.\r\n * @default 0.5\r\n */\r\n @property({ attribute: \"hide-friction\", type: Number }) hideFriction = 0.5;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n * @default 4\r\n */\r\n @property({ attribute: \"overshoot-limit\", type: Number }) overshootLimit = 4;\r\n\r\n /**\r\n * Shows the sheet.\r\n * @param {number} detent The zero‑based index of the detent the sheet should open to.\r\n */\r\n show(detent: number = this.detent): void {\r\n if (!this.open) {\r\n this.#requestDetent = detent;\r\n this.open = true;\r\n } else if (detent !== undefined && this.#activeDetent !== detent) {\r\n this.#snapToDetent(detent);\r\n }\r\n }\r\n\r\n /** Hides the sheet. */\r\n hide(): void {\r\n this.open = false;\r\n }\r\n\r\n /**\r\n * Toggles the opened state of the sheet.\r\n * @param {number} detent The zero‑based index of the detent the sheet should open to.\r\n */\r\n toggle(detent?: number): void {\r\n if (this.open) {\r\n this.hide();\r\n } else {\r\n this.show(detent);\r\n }\r\n }\r\n\r\n /** Moves the sheet to the next detent. */\r\n cycle(): void {\r\n if (!this.open) {\r\n this.show();\r\n } else if (this.detents.length > 0) {\r\n if (this.#activeDetent < this.detents.length - 1) {\r\n this.#activeDetent++;\r\n this.#snapToDetent(this.#activeDetent);\r\n } else if (this.hideable) {\r\n this.hide();\r\n }\r\n } else {\r\n this.hide();\r\n }\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(\"modal\")) {\r\n this.role = this.modal ? \"dialog\" : \"region\";\r\n this.ariaModal = this.modal ? \"true\" : null;\r\n this.popover = this.modal ? \"manual\" : null;\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override reconnectedCallback(): void {\r\n super.reconnectedCallback();\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues): void {\r\n super.updated(_changedProperties);\r\n\r\n if (_changedProperties.has(\"open\")) {\r\n if (this.open) {\r\n if (!this.dispatchEvent(new Event(\"opening\", { cancelable: true }))) {\r\n this.open = false;\r\n return;\r\n }\r\n\r\n // Only one sheet can be open at a time.\r\n if (M3eBottomSheetElement.__openSheet !== this) {\r\n M3eBottomSheetElement.__openSheet?.hide();\r\n }\r\n M3eBottomSheetElement.__openSheet = this;\r\n\r\n this.inert = false;\r\n\r\n window.addEventListener(\"resize\", this.#windowResizeHandler);\r\n\r\n // If there are detents (regardless of handle) open to the requested, default (or first) detent.\r\n // Otherwise, open to fit unless its greater than half.\r\n\r\n if (this.detents.length > 0) {\r\n this.#activeDetent = Math.min(Math.max(0, this.#requestDetent ?? this.detent), this.detents.length - 1);\r\n this.#updateHeight(this.#computeDetentHeight(this.detents[this.#activeDetent]));\r\n } else {\r\n this.#updateHeight(Math.min(this.#computeDetentHeight(\"fit\"), this.#computeDetentHeight(\"half\")));\r\n }\r\n this.#requestDetent = undefined;\r\n } else {\r\n if (!this.dispatchEvent(new Event(\"closing\", { cancelable: true }))) {\r\n this.open = true;\r\n return;\r\n }\r\n\r\n // The following ensures layout is stable so that first tab isn't \"skipped\"\r\n requestAnimationFrame(() => (this.inert = true));\r\n\r\n window.removeEventListener(\"resize\", this.#windowResizeHandler);\r\n\r\n if (M3eBottomSheetElement.__openSheet === this) {\r\n M3eBottomSheetElement.__openSheet = undefined;\r\n }\r\n }\r\n\r\n if (this.modal) {\r\n if (this.open) {\r\n this.#trigger = document.activeElement;\r\n this.#inertController.lock();\r\n this.#scrollLockController.lock();\r\n this.showPopover();\r\n requestAnimationFrame(() => {\r\n document.addEventListener(\"click\", this.#documentClickHandler);\r\n document.addEventListener(\"keydown\", this.#documentKeyDownHandler);\r\n });\r\n\r\n let focusable: HTMLElement | null | undefined = this.querySelector<HTMLElement>(\"[autofocus]\");\r\n if (!focusable || !M3eInteractivityChecker.isFocusable(focusable)) {\r\n focusable = this.shadowRoot?.querySelector(\".handle\");\r\n }\r\n if (focusable) {\r\n focusWhenReady(focusable);\r\n }\r\n } else {\r\n this.#snapToHeight(0).then(() => {\r\n this.#inertController.unlock();\r\n this.#scrollLockController.unlock();\r\n document.removeEventListener(\"click\", this.#documentClickHandler);\r\n document.removeEventListener(\"keydown\", this.#documentKeyDownHandler);\r\n this.hidePopover();\r\n if (this.#trigger instanceof HTMLElement) {\r\n this.#trigger.focus();\r\n }\r\n this.#trigger = null;\r\n });\r\n }\r\n }\r\n\r\n this.dispatchEvent(new Event(this.open ? \"opened\" : \"closed\"));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<m3e-focus-trap ?disabled=\"${!this.modal}\">\r\n <div class=\"base\">\r\n <m3e-elevation class=\"elevation\"></m3e-elevation>\r\n <div\r\n class=\"header\"\r\n @pointerdown=\"${this.#handleHeaderPointerDown}\"\r\n @pointermove=\"${this.#handleHeaderPointerMove}\"\r\n @pointerup=\"${this.#handleHeaderPointerUp}\"\r\n >\r\n ${this.handle\r\n ? html`<div class=\"handle-row\">\r\n <div\r\n id=\"handle\"\r\n class=\"handle\"\r\n role=\"button\"\r\n aria-label=\"${this.handleLabel}\"\r\n tabindex=\"0\"\r\n @click=\"${this.#handleDragHandleClick}\"\r\n @keydown=\"${this.#handleDragHandleKeyDown}\"\r\n >\r\n <m3e-focus-ring class=\"focus-ring\" for=\"handle\"></m3e-focus-ring>\r\n <div class=\"handle-touch\" aria-hidden=\"true\"></div>\r\n </div>\r\n </div>`\r\n : nothing}\r\n <slot name=\"header\"></slot>\r\n </div>\r\n <div class=\"body\">\r\n <div class=\"content\">\r\n <slot></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </m3e-focus-trap>`;\r\n }\r\n\r\n /** @private */\r\n #initialize(): void {\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\");\r\n if (content) {\r\n this.#cachedContentHeight = content.clientHeight;\r\n this.#resizeController.observe(content);\r\n }\r\n\r\n const header = this.shadowRoot?.querySelector<HTMLElement>(\".header\");\r\n if (header) {\r\n this.#cachedHeaderHeight = header.clientHeight;\r\n this.#resizeController.observe(header);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleHeaderPointerDown(e: PointerEvent): void {\r\n if (e.target instanceof HTMLElement && M3eInteractivityChecker.isFocusable(e.target)) {\r\n return;\r\n }\r\n\r\n (<HTMLElement>e.target).setPointerCapture(e.pointerId);\r\n (<HTMLElement>e.target).style.cursor = \"grabbing\";\r\n\r\n this.#velocityTracker.reset();\r\n this.#velocityTracker.add(e.clientY);\r\n\r\n const maxHeight = this.#computeMaxHeight();\r\n const effectiveMaxHeight =\r\n this.detents.length > 0 ? Math.max(...this.detents.map((x) => this.#computeDetentHeight(x))) : maxHeight;\r\n\r\n this.#dragState = {\r\n startY: e.clientY,\r\n startHeight: this.clientHeight,\r\n effectiveMaxHeight,\r\n maxHeight,\r\n minHeight: this.#computeMinHeight(),\r\n };\r\n this.#dragged = false;\r\n }\r\n\r\n /** @private */\r\n #handleHeaderPointerMove(e: PointerEvent): void {\r\n if (!this.#dragState) {\r\n return;\r\n }\r\n\r\n const minDragThreshold = 8;\r\n if (Math.abs(e.clientY - this.#dragState.startY) <= minDragThreshold) {\r\n // Ignore movement under threshold\r\n return;\r\n }\r\n\r\n (e.getCoalescedEvents?.() ?? [e]).forEach((x) => this.#velocityTracker.add(x.clientY, e.timeStamp));\r\n\r\n let newHeight = this.#dragState.startHeight - (e.clientY - this.#dragState.startY);\r\n if (newHeight < this.#dragState.minHeight) {\r\n if (this.hideable) {\r\n const overshoot = (this.#dragState.minHeight - newHeight) * this.hideFriction;\r\n newHeight = this.#dragState.minHeight - overshoot;\r\n } else {\r\n const overshoot = this.#dragState.minHeight - newHeight;\r\n const overshootLimit = this.#dragState.maxHeight * (this.overshootLimit / 100);\r\n const compressed = (overshootLimit * overshoot) / (overshoot + overshootLimit);\r\n newHeight = this.#dragState.minHeight - compressed;\r\n }\r\n } else if (newHeight > this.#dragState.effectiveMaxHeight) {\r\n const overshoot = newHeight - this.#dragState.effectiveMaxHeight;\r\n const overshootLimit = this.#dragState.maxHeight * (this.overshootLimit / 100);\r\n const compressed = (overshootLimit * overshoot) / (overshoot + overshootLimit);\r\n newHeight = this.#dragState.effectiveMaxHeight + compressed;\r\n }\r\n\r\n this.#updateHeight(newHeight);\r\n this.#dragged = true;\r\n }\r\n\r\n /** @private */\r\n #handleHeaderPointerUp(e: PointerEvent): void {\r\n if (!this.#dragState) return;\r\n\r\n try {\r\n (<HTMLElement>e.target).releasePointerCapture(e.pointerId);\r\n (<HTMLElement>e.target).style.cursor = \"\";\r\n\r\n if (!this.#dragged) return;\r\n\r\n const significantVelocityThreshold = e.pointerType === \"touch\" ? 1200 : 500;\r\n const velocity = this.#velocityTracker.getVelocity();\r\n\r\n this.#velocityTracker.reset();\r\n\r\n if (this.hideable && velocity >= significantVelocityThreshold) {\r\n if (this.dispatchEvent(new Event(\"cancel\", { cancelable: true }))) {\r\n this.hide();\r\n }\r\n } else if (Math.abs(velocity) >= significantVelocityThreshold) {\r\n if (this.detents.length > 0) {\r\n const nextDetent = this.#getNextHigherDetent();\r\n if (nextDetent !== this.#activeDetent) {\r\n this.#snapToDetent(nextDetent);\r\n }\r\n } else {\r\n this.#snapToHeight(this.#computeDetentHeight(\"full\"));\r\n }\r\n } else {\r\n const hideDistanceThreshold = 20;\r\n if (this.hideable) {\r\n const collapsed = this.#dragState.minHeight;\r\n if (this.clientHeight < collapsed - hideDistanceThreshold) {\r\n this.hide();\r\n return;\r\n }\r\n }\r\n\r\n if (this.detents.length > 0) {\r\n this.#snapToDetent(this.#getClosestDetent());\r\n } else if (this.clientHeight < this.#dragState.minHeight) {\r\n this.#snapToHeight(this.#dragState.minHeight);\r\n } else if (this.clientHeight > this.#dragState.effectiveMaxHeight) {\r\n this.#snapToHeight(this.#dragState.effectiveMaxHeight);\r\n }\r\n }\r\n } finally {\r\n this.#dragState = undefined;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDocumentClick(e: Event): void {\r\n if (\r\n this.open &&\r\n this.modal &&\r\n !e.composedPath().includes(this) &&\r\n this.dispatchEvent(new Event(\"cancel\", { cancelable: true }))\r\n ) {\r\n this.hide();\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDocumentKeyDown(e: KeyboardEvent): void {\r\n if (this.open && this.modal && e.key === \"Escape\" && !e.shiftKey && !e.ctrlKey) {\r\n e.preventDefault();\r\n\r\n if (this.dispatchEvent(new Event(\"cancel\", { cancelable: true }))) {\r\n this.hide();\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleWindowResize(): void {\r\n if (this.detents.length > 0 && this.detents[this.#activeDetent] === \"half\") {\r\n this.#updateHeight(this.#computeDetentHeight(\"half\"));\r\n return;\r\n }\r\n\r\n const maxHeight = this.#computeMaxHeight();\r\n if (hasCustomState(this, \"--full\")) {\r\n this.#updateHeight(maxHeight);\r\n } else if (this.clientHeight > maxHeight) {\r\n this.#updateHeight(maxHeight);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleDragHandleClick(): void {\r\n if (!this.#dragged) {\r\n this.cycle();\r\n }\r\n this.#dragged = false;\r\n }\r\n\r\n /** @private */\r\n #handleDragHandleKeyDown(e: KeyboardEvent): void {\r\n if (e.defaultPrevented || !isModifierAllowed(e)) return;\r\n\r\n switch (e.key) {\r\n case \"Up\":\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n if (this.detents.length > 0) {\r\n const nextDetent = this.#getNextHigherDetent();\r\n if (nextDetent !== this.#activeDetent) {\r\n this.#snapToDetent(nextDetent);\r\n }\r\n } else {\r\n this.#snapToHeight(this.#computeDetentHeight(\"full\"));\r\n }\r\n break;\r\n\r\n case \"Down\":\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n if (this.detents.length > 0) {\r\n const nextDetent = this.#getNextLowerDetent();\r\n if (nextDetent !== this.#activeDetent) {\r\n this.#snapToDetent(nextDetent);\r\n } else if (this.hideable) {\r\n this.hide();\r\n }\r\n } else if (this.hideable) {\r\n this.hide();\r\n }\r\n\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #getNextHigherDetent(): number {\r\n const currentHeight = this.clientHeight;\r\n let nextHeight = Infinity;\r\n let nextDetent = this.#activeDetent;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === this.#activeDetent) continue;\r\n const detentHeight = this.#computeDetentHeight(this.detents[i]);\r\n if (detentHeight > currentHeight && detentHeight < nextHeight) {\r\n nextHeight = detentHeight;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #getNextLowerDetent(): number {\r\n const currentHeight = this.clientHeight;\r\n let nextHeight = -Infinity;\r\n let nextDetent = this.#activeDetent;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === this.#activeDetent) continue;\r\n const detentHeight = this.#computeDetentHeight(this.detents[i]);\r\n if (detentHeight < currentHeight && detentHeight > nextHeight) {\r\n nextHeight = detentHeight;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #getClosestDetent(): number {\r\n const currentHeight = this.clientHeight;\r\n let closestDetent = this.#activeDetent;\r\n let closestDistance = Infinity;\r\n\r\n for (let i = 0; i < this.detents.length; i++) {\r\n const detentHeight = this.#computeDetentHeight(this.detents[i]);\r\n const distance = Math.abs(currentHeight - detentHeight);\r\n\r\n if (distance < closestDistance) {\r\n closestDistance = distance;\r\n closestDetent = i;\r\n }\r\n }\r\n return closestDetent;\r\n }\r\n\r\n /** @private */\r\n #computeDetentHeight(detent: string): number {\r\n switch (detent) {\r\n case \"collapsed\":\r\n return this.#computeMinHeight();\r\n case \"half\":\r\n return this.#computeMaxHeight() * 0.5;\r\n case \"full\":\r\n return this.#computeMaxHeight();\r\n case \"fit\":\r\n return this.#computeFitHeight();\r\n }\r\n\r\n if (detent.endsWith(\"%\")) {\r\n return this.#computeMaxHeight() * (parseFloat(detent) / 100);\r\n }\r\n\r\n if (detent.endsWith(\"px\")) {\r\n return parseFloat(detent);\r\n }\r\n\r\n return this.#computeMinHeight();\r\n }\r\n\r\n /** @private */\r\n #computeMaxHeight(): number {\r\n const base = this.shadowRoot?.querySelector<HTMLElement>(\".base\");\r\n return window.innerHeight - (base ? computeCssSize(base, \"var(--_bottom-sheet-top-space)\") : 0);\r\n }\r\n\r\n /** @private */\r\n #computeMinHeight(): number {\r\n return this.detents.includes(\"fit\") && !this.detents.includes(\"collapsed\")\r\n ? this.#computeFitHeight()\r\n : this.#computePeekHeight();\r\n }\r\n\r\n /** @private */\r\n #computePeekHeight(): number {\r\n const base = this.shadowRoot?.querySelector<HTMLElement>(\".base\");\r\n return this.#cachedHeaderHeight + (base ? computeCssSize(base, \"var(--_bottom-sheet-peek-height)\") : 0);\r\n }\r\n\r\n /** @private */\r\n #computeFitHeight(): number {\r\n const body = this.shadowRoot?.querySelector<HTMLElement>(\".body\");\r\n if (!body) {\r\n return 0;\r\n }\r\n\r\n const bodyStyle = getComputedStyle(body);\r\n return (\r\n this.#cachedHeaderHeight +\r\n this.#cachedContentHeight +\r\n parseFloat(bodyStyle.paddingBlockStart) +\r\n parseFloat(bodyStyle.paddingBlockEnd)\r\n );\r\n }\r\n\r\n /** @private */\r\n #handleSectionResize(entries: ResizeObserverEntry[]): void {\r\n const oldCachedContentHeight = this.#cachedContentHeight;\r\n const oldCachedHeaderHeight = this.#cachedHeaderHeight;\r\n\r\n for (const entry of entries) {\r\n if (entry.target.classList.contains(\"content\")) {\r\n this.#cachedContentHeight = (<ResizeObserverSize>(\r\n (Array.isArray(entry.borderBoxSize) ? entry.borderBoxSize[0] : entry.borderBoxSize)\r\n )).blockSize;\r\n } else if (entry.target.classList.contains(\"header\")) {\r\n this.#cachedHeaderHeight = (<ResizeObserverSize>(\r\n (Array.isArray(entry.borderBoxSize) ? entry.borderBoxSize[0] : entry.borderBoxSize)\r\n )).blockSize;\r\n }\r\n }\r\n\r\n if (\r\n this.open &&\r\n this.detents.length > 0 &&\r\n (oldCachedContentHeight !== this.#cachedContentHeight || oldCachedHeaderHeight !== this.#cachedHeaderHeight)\r\n ) {\r\n switch (this.detents[this.#activeDetent]) {\r\n case \"fit\":\r\n this.#updateHeight(this.#computeFitHeight());\r\n break;\r\n\r\n case \"collapsed\":\r\n this.#updateHeight(this.#computeMinHeight());\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #snapToDetent(detent: number): void {\r\n if (detent >= 0 && detent < this.detents.length) {\r\n this.#activeDetent = detent;\r\n this.#snapToHeight(this.#computeDetentHeight(this.detents[detent]));\r\n }\r\n }\r\n\r\n /** @private */\r\n async #snapToHeight(height: number): Promise<void> {\r\n if (this.#snapAnimation) {\r\n this.#updateHeight(this.clientHeight);\r\n this.#snapAnimation?.cancel();\r\n this.#snapAnimation = undefined;\r\n }\r\n\r\n if (!prefersReducedMotion()) {\r\n this.#snapAnimation = this.animate(\r\n [{ \"--_bottom-sheet-height\": `${this.clientHeight}px` }, { \"--_bottom-sheet-height\": `${height}px` }],\r\n {\r\n duration: 250,\r\n easing: \"cubic-bezier(0.2, 0.0, 0, 1.0)\",\r\n },\r\n );\r\n this.#snapAnimation.onfinish = () => {\r\n this.#updateHeight(height);\r\n this.#snapAnimation = undefined;\r\n };\r\n await this.#snapAnimation.finished;\r\n } else {\r\n this.#updateHeight(height);\r\n }\r\n }\r\n\r\n /** @private */\r\n #updateHeight(height: number): void {\r\n this.style.setProperty(\"--_bottom-sheet-height\", `${height}px`);\r\n setCustomState(this, \"--full\", height === this.#computeMaxHeight());\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\");\r\n if (content) {\r\n content.inert = height <= this.#computePeekHeight();\r\n }\r\n }\r\n}\r\n\r\ninterface M3eBottomSheetElementEventMap extends HTMLElementEventMap {\r\n opening: Event;\r\n opened: Event;\r\n closing: Event;\r\n closed: Event;\r\n cancel: Event;\r\n}\r\n\r\nexport interface M3eBottomSheetElement {\r\n addEventListener<K extends keyof M3eBottomSheetElementEventMap>(\r\n type: K,\r\n listener: (this: M3eBottomSheetElement, ev: M3eBottomSheetElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eBottomSheetElementEventMap>(\r\n type: K,\r\n listener: (this: M3eBottomSheetElement, ev: M3eBottomSheetElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-bottom-sheet\": M3eBottomSheetElement;\r\n }\r\n}\r\n","import { property } from \"lit/decorators.js\";\r\n\r\nimport { ActionElementBase, customElement, HtmlFor } from \"@m3e/web/core\";\r\nimport { addAriaReferencedId, removeAriaReferencedId } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eBottomSheetElement } from \"./BottomSheetElement\";\r\n\r\n/**\r\n * An element, nested within a clickable element, used to trigger a bottom sheet.\r\n * @tag m3e-bottom-sheet-trigger\r\n *\r\n * @slot - Renders the content of the trigger.\r\n *\r\n * @attr detent - The zero‑based index of the detent the sheet should open to.\r\n * @attr secondary - Marks this trigger as a secondary trigger for accessibility. Secondary triggers do not receive ARIA ownership.\r\n */\r\n@customElement(\"m3e-bottom-sheet-trigger\")\r\nexport class M3eBottomSheetTriggerElement extends HtmlFor(ActionElementBase) {\r\n /**\r\n * The zero‑based index of the detent the sheet should open to.\r\n * @default undefined\r\n */\r\n @property({ type: Number }) detent?: number;\r\n\r\n /**\r\n * Marks this trigger as a secondary trigger for accessibility. Secondary triggers do not receive ARIA ownership.\r\n * @default false\r\n */\r\n @property({ type: Boolean }) secondary = false;\r\n\r\n /** @inheritdoc */\r\n override attach(control: HTMLElement): void {\r\n if (control instanceof M3eBottomSheetElement) {\r\n super.attach(control);\r\n\r\n if (this.parentElement) {\r\n if (!control.modal) {\r\n if (!this.secondary) {\r\n this.parentElement.ariaExpanded = \"false\";\r\n addAriaReferencedId(this.parentElement, \"aria-controls\", control.id);\r\n if (this.parentElement.id) {\r\n addAriaReferencedId(control, \"aria-labelledby\", this.parentElement.id);\r\n }\r\n }\r\n } else {\r\n this.parentElement.ariaHasPopup = \"dialog\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override detach(): void {\r\n if (this.control && this.parentElement && !this.secondary) {\r\n removeAriaReferencedId(this.parentElement, \"aria-controls\", this.control.id);\r\n }\r\n super.detach();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override _onClick(): void {\r\n if (this.control instanceof M3eBottomSheetElement) {\r\n if (this.control.modal) {\r\n this.control.show(this.detent);\r\n } else {\r\n this.control.toggle(this.detent);\r\n if (!this.secondary && this.parentElement) {\r\n this.parentElement.ariaExpanded = `${this.control.open}`;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-bottom-sheet-trigger\": M3eBottomSheetTriggerElement;\r\n }\r\n}\r\n"],"names":["M3eBottomSheetActionElement","ActionElementBase","_onClick","this","closest","hide","__decorate","customElement","M3eBottomSheetElement","M3eBottomSheetElement_1","ReconnectedCallback","SuppressInitialAnimation","AttachInternals","LitElement","constructor","_M3eBottomSheetElement_documentClickHandler","set","e","__classPrivateFieldGet","call","_M3eBottomSheetElement_documentKeyDownHandler","_M3eBottomSheetElement_windowResizeHandler","_M3eBottomSheetElement_instances","_M3eBottomSheetElement_handleWindowResize","_M3eBottomSheetElement_velocityTracker","VelocityTracker","_M3eBottomSheetElement_scrollLockController","ScrollLockController","_M3eBottomSheetElement_inertController","InertController","_M3eBottomSheetElement_resizeController","ResizeController","target","skipInitial","callback","x","_M3eBottomSheetElement_handleSectionResize","_M3eBottomSheetElement_trigger","_M3eBottomSheetElement_dragState","_M3eBottomSheetElement_dragged","_M3eBottomSheetElement_activeDetent","_M3eBottomSheetElement_requestDetent","_M3eBottomSheetElement_cachedContentHeight","_M3eBottomSheetElement_cachedHeaderHeight","_M3eBottomSheetElement_snapAnimation","modal","open","handle","handleLabel","detents","detent","hideable","hideFriction","overshootLimit","show","undefined","_M3eBottomSheetElement_snapToDetent","__classPrivateFieldSet","toggle","cycle","length","_a","update","changedProperties","super","has","role","ariaModal","popover","reconnectedCallback","_M3eBottomSheetElement_initialize","firstUpdated","_changedProperties","updated","dispatchEvent","Event","cancelable","__openSheet","inert","window","addEventListener","Math","min","max","_M3eBottomSheetElement_updateHeight","_M3eBottomSheetElement_computeDetentHeight","requestAnimationFrame","removeEventListener","document","activeElement","lock","showPopover","focusable","querySelector","M3eInteractivityChecker","isFocusable","shadowRoot","focusWhenReady","_M3eBottomSheetElement_snapToHeight","then","unlock","hidePopover","HTMLElement","focus","render","html","_M3eBottomSheetElement_handleHeaderPointerDown","_M3eBottomSheetElement_handleHeaderPointerMove","_M3eBottomSheetElement_handleHeaderPointerUp","_M3eBottomSheetElement_handleDragHandleClick","_M3eBottomSheetElement_handleDragHandleKeyDown","nothing","content","clientHeight","observe","header","setPointerCapture","pointerId","style","cursor","reset","add","clientY","maxHeight","effectiveMaxHeight","map","startY","startHeight","minHeight","_M3eBottomSheetElement_computeMinHeight","abs","getCoalescedEvents","forEach","timeStamp","newHeight","overshoot","compressed","releasePointerCapture","significantVelocityThreshold","pointerType","velocity","getVelocity","nextDetent","hideDistanceThreshold","collapsed","_M3eBottomSheetElement_getClosestDetent","composedPath","includes","key","shiftKey","ctrlKey","preventDefault","hasCustomState","defaultPrevented","isModifierAllowed","currentHeight","nextHeight","Infinity","i","detentHeight","closestDetent","closestDistance","distance","_M3eBottomSheetElement_computeMaxHeight","_M3eBottomSheetElement_computeFitHeight","endsWith","parseFloat","base","innerHeight","computeCssSize","body","bodyStyle","getComputedStyle","paddingBlockStart","paddingBlockEnd","entries","oldCachedContentHeight","oldCachedHeaderHeight","entry","classList","contains","Array","isArray","borderBoxSize","blockSize","async","height","cancel","prefersReducedMotion","animate","duration","easing","onfinish","finished","setProperty","setCustomState","_M3eBottomSheetElement_computePeekHeight","registerStyleSheet","css","styles","DesignToken","color","onSurface","surfaceContainerLow","unsafeCSS","motion","medium2","standardDecelerate","standard","elevation","level1","shape","corner","none","extraLargeTop","short3","scrim","long2","scrollbar","thinWidth","typescale","medium","fontSize","fontWeight","lineHeight","tracking","title","large","full","onSurfaceVariant","property","type","Boolean","reflect","prototype","attribute","converter","spaceSeparatedStringConverter","Number","M3eBottomSheetTriggerElement","HtmlFor","secondary","attach","control","parentElement","ariaHasPopup","ariaExpanded","addAriaReferencedId","id","detach","removeAriaReferencedId"],"mappings":"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"}
|
package/dist/breadcrumb.js
CHANGED
|
@@ -151,7 +151,7 @@ let M3eBreadcrumbItemButtonElement = class M3eBreadcrumbItemButtonElement extend
|
|
|
151
151
|
_M3eBreadcrumbItemButtonElement_clickHandler = new WeakMap();
|
|
152
152
|
_M3eBreadcrumbItemButtonElement_instances = new WeakSet();
|
|
153
153
|
_M3eBreadcrumbItemButtonElement_handleSlotChange = function _M3eBreadcrumbItemButtonElement_handleSlotChange(e) {
|
|
154
|
-
setCustomState(this, "
|
|
154
|
+
setCustomState(this, "--icon-only", isIconOnly(e.target));
|
|
155
155
|
};
|
|
156
156
|
_M3eBreadcrumbItemButtonElement_handleClick = function _M3eBreadcrumbItemButtonElement_handleClick(e) {
|
|
157
157
|
// If current and link, disable default link click handler behavior.
|
|
@@ -160,7 +160,7 @@ _M3eBreadcrumbItemButtonElement_handleClick = function _M3eBreadcrumbItemButtonE
|
|
|
160
160
|
}
|
|
161
161
|
};
|
|
162
162
|
/** The styles of the element. */
|
|
163
|
-
M3eBreadcrumbItemButtonElement.styles = css`:host { display: block; outline: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .base { display: flex; align-items: center; justify-content: center; position: relative; border-radius: var(--m3e-breadcrumb-item-shape, ${DesignToken.shape.corner.full}); height: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)}); column-gap: var(--m3e-breadcrumb-item-icon-label-space, 0.5rem); } .icon { font-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem); --m3e-icon-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem); } ::slotted([slot="icon"]) { font-size: inherit !important; flex: none; } ::slotted(svg[slot="icon"]) { width: 1em; height: 1em; } :host(:state(-icon-only)) .overflow { flex: none; } :host(:not(:state(-icon-only))), :host(:not(:state(-icon-only))) .base { min-width: 0; } :host(:state(-icon-only):not([current]):not(:disabled)) .base { color: var(--m3e-breadcrumb-item-icon-color, ${DesignToken.color.onSurfaceVariant}); } :host(:state(-icon-only)) .base { width: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)}); padding-inline: var(--m3e-breadcrumb-item-icon-padding-inline, 0px); --m3e-state-layer-hover-color: var( --m3e-breadcrumb-item-icon-hover-state-layer-color, ${DesignToken.color.onSurface} ); --m3e-state-layer-focus-color: var( --m3e-breadcrumb-item-icon-focus-state-layer-color, ${DesignToken.color.onSurface} ); --m3e-ripple-color: var(--m3e-breadcrumb-item-icon-pressed-state-layer-color, ${DesignToken.color.onSurface}); } :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base { color: var(--m3e-breadcrumb-item-label-color, ${DesignToken.color.primary}); } :host(:not(:state(-icon-only))) .base { font-size: var(--m3e-breadcrumb-item-label-font-size, ${DesignToken.typescale.standard.label.large.fontSize}); font-weight: var( --m3e-breadcrumb-item-label-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight} ); line-height: var( --m3e-breadcrumb-item-label-line-height, ${DesignToken.typescale.standard.label.large.lineHeight} ); letter-spacing: var(--m3e-breadcrumb-item-label-tracking, ${DesignToken.typescale.standard.label.large.tracking}); } :host(:not(:state(-icon-only))) .base { padding-inline: var(--m3e-breadcrumb-item-label-padding-inline, 0.75rem); --m3e-state-layer-hover-color: var( --m3e-breadcrumb-item-label-hover-state-layer-color, ${DesignToken.color.primary} ); --m3e-state-layer-focus-color: var( --m3e-breadcrumb-item-label-focus-state-layer-color, ${DesignToken.color.primary} ); --m3e-ripple-color: var(--m3e-breadcrumb-item-label-pressed-state-layer-color, ${DesignToken.color.primary}); } :host([current]) .base { color: var(--m3e-breadcrumb-item-last-color, ${DesignToken.color.onSurface}); } :host(:not(:disabled):not([current])) { cursor: pointer; user-select: none; } :host(:disabled:not([current])) .base { color: color-mix( in srgb, var(--m3e-breadcrumb-item-disabled-color, ${DesignToken.color.onSurface}) var(--m3e-breadcrumb-item-disabled-opacity, 38%), transparent ); } .touch { position: absolute; height: 3rem; width: max(3rem, 100%); margin: auto; } a { all: unset; display: block; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; z-index: 1; } @media (forced-colors: active) { :host(:state(-icon-only):not([current]):not(:disabled)) .base, :host(:not(:state(-icon-only)):not([current]):not(:disabled)) .base { color: LinkText; outline: 1px solid LinkText; } :host(:disabled) .base { color: GrayText; } }`;
|
|
163
|
+
M3eBreadcrumbItemButtonElement.styles = css`:host { display: block; outline: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .base { display: flex; align-items: center; justify-content: center; position: relative; border-radius: var(--m3e-breadcrumb-item-shape, ${DesignToken.shape.corner.full}); height: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)}); column-gap: var(--m3e-breadcrumb-item-icon-label-space, 0.5rem); } .icon { font-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem); --m3e-icon-size: var(--m3e-breadcrumb-item--icon-size, 1.25rem); } ::slotted([slot="icon"]) { font-size: inherit !important; flex: none; } ::slotted(svg[slot="icon"]) { width: 1em; height: 1em; } :host(:is(:state(--icon-only), :--icon-only)) .overflow { flex: none; } :host(:not(:is(:state(--icon-only), :--icon-only))), :host(:not(:is(:state(--icon-only), :--icon-only))) .base { min-width: 0; } :host(:is(:state(--icon-only), :--icon-only):not([current]):not(:disabled)) .base { color: var(--m3e-breadcrumb-item-icon-color, ${DesignToken.color.onSurfaceVariant}); } :host(:is(:state(--icon-only), :--icon-only)) .base { width: calc(var(--m3e-breadcrumb-item-container-height, 2.5rem) + ${DesignToken.density.calc(-1)}); padding-inline: var(--m3e-breadcrumb-item-icon-padding-inline, 0px); --m3e-state-layer-hover-color: var( --m3e-breadcrumb-item-icon-hover-state-layer-color, ${DesignToken.color.onSurface} ); --m3e-state-layer-focus-color: var( --m3e-breadcrumb-item-icon-focus-state-layer-color, ${DesignToken.color.onSurface} ); --m3e-ripple-color: var(--m3e-breadcrumb-item-icon-pressed-state-layer-color, ${DesignToken.color.onSurface}); } :host(:not(:is(:state(--icon-only), :--icon-only)):not([current]):not(:disabled)) .base { color: var(--m3e-breadcrumb-item-label-color, ${DesignToken.color.primary}); } :host(:not(:is(:state(--icon-only), :--icon-only))) .base { font-size: var(--m3e-breadcrumb-item-label-font-size, ${DesignToken.typescale.standard.label.large.fontSize}); font-weight: var( --m3e-breadcrumb-item-label-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight} ); line-height: var( --m3e-breadcrumb-item-label-line-height, ${DesignToken.typescale.standard.label.large.lineHeight} ); letter-spacing: var(--m3e-breadcrumb-item-label-tracking, ${DesignToken.typescale.standard.label.large.tracking}); } :host(:not(:is(:state(--icon-only), :--icon-only))) .base { padding-inline: var(--m3e-breadcrumb-item-label-padding-inline, 0.75rem); --m3e-state-layer-hover-color: var( --m3e-breadcrumb-item-label-hover-state-layer-color, ${DesignToken.color.primary} ); --m3e-state-layer-focus-color: var( --m3e-breadcrumb-item-label-focus-state-layer-color, ${DesignToken.color.primary} ); --m3e-ripple-color: var(--m3e-breadcrumb-item-label-pressed-state-layer-color, ${DesignToken.color.primary}); } :host([current]) .base { color: var(--m3e-breadcrumb-item-last-color, ${DesignToken.color.onSurface}); } :host(:not(:disabled):not([current])) { cursor: pointer; user-select: none; } :host(:disabled:not([current])) .base { color: color-mix( in srgb, var(--m3e-breadcrumb-item-disabled-color, ${DesignToken.color.onSurface}) var(--m3e-breadcrumb-item-disabled-opacity, 38%), transparent ); } .touch { position: absolute; height: 3rem; width: max(3rem, 100%); margin: auto; } a { all: unset; display: block; position: absolute; top: 0px; left: 0px; right: 0px; bottom: 0px; z-index: 1; } @media (forced-colors: active) { :host(:is(:state(--icon-only), :--icon-only):not([current]):not(:disabled)) .base, :host(:not(:is(:state(--icon-only), :--icon-only)):not([current]):not(:disabled)) .base { color: LinkText; outline: 1px solid LinkText; } :host(:disabled) .base { color: GrayText; } }`;
|
|
164
164
|
__decorate([query(".focus-ring")], M3eBreadcrumbItemButtonElement.prototype, "_focusRing", void 0);
|
|
165
165
|
__decorate([query(".state-layer")], M3eBreadcrumbItemButtonElement.prototype, "_stateLayer", void 0);
|
|
166
166
|
__decorate([query(".ripple")], M3eBreadcrumbItemButtonElement.prototype, "_ripple", void 0);
|
|
@@ -279,14 +279,14 @@ _M3eBreadcrumbItemElement_handleIconSlotChange = function _M3eBreadcrumbItemElem
|
|
|
279
279
|
__classPrivateFieldGet(this, _M3eBreadcrumbItemElement_instances, "m", _M3eBreadcrumbItemElement_updateIconFilled).call(this);
|
|
280
280
|
};
|
|
281
281
|
_M3eBreadcrumbItemElement_handleSlotChange = function _M3eBreadcrumbItemElement_handleSlotChange(e) {
|
|
282
|
-
setCustomState(this, "
|
|
282
|
+
setCustomState(this, "--icon-only", isIconOnly(e.target));
|
|
283
283
|
__classPrivateFieldGet(this, _M3eBreadcrumbItemElement_instances, "m", _M3eBreadcrumbItemElement_updateIconFilled).call(this);
|
|
284
284
|
};
|
|
285
285
|
_M3eBreadcrumbItemElement_updateIconFilled = function _M3eBreadcrumbItemElement_updateIconFilled() {
|
|
286
286
|
this.querySelectorAll("m3e-icon").forEach(x => x.filled = this.current !== undefined && this.current !== null);
|
|
287
287
|
};
|
|
288
288
|
/** The styles of the element. */
|
|
289
|
-
M3eBreadcrumbItemElement.styles = css`:host { display: block; } .base { display: flex; align-items: center; height: 100%; } :host(:not(:state(-icon-only))[current]), :host(:not(:state(-icon-only))[current]) .base { min-width: 0; } .button { flex: 1 1 auto; } .separator { flex: none; display: flex; justify-content: center; align-items: center; min-width: 0.5rem; --m3e-icon-size: var(--m3e-breadcrumb-separator-icon-size, 1.5rem); } .separator-icon { width: 1em; height: 1em; font-size: var(--m3e-icon-size); vertical-align: middle; }`;
|
|
289
|
+
M3eBreadcrumbItemElement.styles = css`:host { display: block; } .base { display: flex; align-items: center; height: 100%; } :host(:not(:is(:state(--icon-only), :--icon-only))[current]), :host(:not(:is(:state(--icon-only), :--icon-only))[current]) .base { min-width: 0; } .button { flex: 1 1 auto; } .separator { flex: none; display: flex; justify-content: center; align-items: center; min-width: 0.5rem; --m3e-icon-size: var(--m3e-breadcrumb-separator-icon-size, 1.5rem); } .separator-icon { width: 1em; height: 1em; font-size: var(--m3e-icon-size); vertical-align: middle; }`;
|
|
290
290
|
__decorate([query(".button")], M3eBreadcrumbItemElement.prototype, "_button", void 0);
|
|
291
291
|
__decorate([property({
|
|
292
292
|
attribute: "item-label"
|
package/dist/breadcrumb.js.map
CHANGED
|
@@ -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 * @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
|
+
{"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(:is(:state(--icon-only), :--icon-only)) .overflow {\r\n flex: none;\r\n }\r\n :host(:not(:is(:state(--icon-only), :--icon-only))),\r\n :host(:not(:is(:state(--icon-only), :--icon-only))) .base {\r\n min-width: 0;\r\n }\r\n :host(:is(:state(--icon-only), :--icon-only):not([current]):not(:disabled)) .base {\r\n color: var(--m3e-breadcrumb-item-icon-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:is(:state(--icon-only), :--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(:is(:state(--icon-only), :--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(:is(:state(--icon-only), :--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(:is(:state(--icon-only), :--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(:is(:state(--icon-only), :--icon-only):not([current]):not(:disabled)) .base,\r\n :host(:not(:is(:state(--icon-only), :--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(:is(:state(--icon-only), :--icon-only))[current]),\r\n :host(:not(:is(:state(--icon-only), :--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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"}
|