@m3e/web 2.5.13 → 2.5.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/all.js +410 -168
  2. package/dist/all.js.map +1 -1
  3. package/dist/all.min.js +64 -64
  4. package/dist/all.min.js.map +1 -1
  5. package/dist/avatar.js +1 -1
  6. package/dist/avatar.js.map +1 -1
  7. package/dist/avatar.min.js +1 -1
  8. package/dist/avatar.min.js.map +1 -1
  9. package/dist/badge.js +29 -8
  10. package/dist/badge.js.map +1 -1
  11. package/dist/badge.min.js +1 -1
  12. package/dist/badge.min.js.map +1 -1
  13. package/dist/bottom-sheet.js +1 -1
  14. package/dist/bottom-sheet.js.map +1 -1
  15. package/dist/bottom-sheet.min.js +1 -1
  16. package/dist/bottom-sheet.min.js.map +1 -1
  17. package/dist/calendar.js +1 -1
  18. package/dist/calendar.js.map +1 -1
  19. package/dist/calendar.min.js +1 -1
  20. package/dist/calendar.min.js.map +1 -1
  21. package/dist/checkbox.js +1 -1
  22. package/dist/checkbox.js.map +1 -1
  23. package/dist/checkbox.min.js +1 -1
  24. package/dist/checkbox.min.js.map +1 -1
  25. package/dist/core-anchoring.js +40 -10
  26. package/dist/core-anchoring.js.map +1 -1
  27. package/dist/core-anchoring.min.js +1 -1
  28. package/dist/core-anchoring.min.js.map +1 -1
  29. package/dist/core.js +56 -17
  30. package/dist/core.js.map +1 -1
  31. package/dist/core.min.js +1 -1
  32. package/dist/core.min.js.map +1 -1
  33. package/dist/css-custom-data.json +20 -0
  34. package/dist/custom-elements.json +290 -46
  35. package/dist/datepicker.js +23 -10
  36. package/dist/datepicker.js.map +1 -1
  37. package/dist/datepicker.min.js +1 -1
  38. package/dist/datepicker.min.js.map +1 -1
  39. package/dist/dialog.js +1 -1
  40. package/dist/dialog.js.map +1 -1
  41. package/dist/dialog.min.js +1 -1
  42. package/dist/dialog.min.js.map +1 -1
  43. package/dist/divider.js +1 -1
  44. package/dist/divider.js.map +1 -1
  45. package/dist/divider.min.js +1 -1
  46. package/dist/divider.min.js.map +1 -1
  47. package/dist/drawer-container.js +2 -2
  48. package/dist/drawer-container.js.map +1 -1
  49. package/dist/drawer-container.min.js +1 -1
  50. package/dist/drawer-container.min.js.map +1 -1
  51. package/dist/expansion-panel.js +6 -3
  52. package/dist/expansion-panel.js.map +1 -1
  53. package/dist/expansion-panel.min.js +1 -1
  54. package/dist/expansion-panel.min.js.map +1 -1
  55. package/dist/fab-menu.js +1 -1
  56. package/dist/fab-menu.js.map +1 -1
  57. package/dist/fab-menu.min.js +1 -1
  58. package/dist/fab-menu.min.js.map +1 -1
  59. package/dist/form-field.js +1 -1
  60. package/dist/form-field.js.map +1 -1
  61. package/dist/form-field.min.js +1 -1
  62. package/dist/form-field.min.js.map +1 -1
  63. package/dist/html-custom-data.json +3 -3
  64. package/dist/icon.js +7 -8
  65. package/dist/icon.js.map +1 -1
  66. package/dist/icon.min.js +1 -1
  67. package/dist/icon.min.js.map +1 -1
  68. package/dist/menu.js +20 -7
  69. package/dist/menu.js.map +1 -1
  70. package/dist/menu.min.js +1 -1
  71. package/dist/menu.min.js.map +1 -1
  72. package/dist/nav-bar.js +4 -2
  73. package/dist/nav-bar.js.map +1 -1
  74. package/dist/nav-bar.min.js +1 -1
  75. package/dist/nav-bar.min.js.map +1 -1
  76. package/dist/nav-menu.js +2 -2
  77. package/dist/nav-menu.js.map +1 -1
  78. package/dist/nav-menu.min.js +1 -1
  79. package/dist/nav-menu.min.js.map +1 -1
  80. package/dist/nav-rail.js +1 -1
  81. package/dist/nav-rail.js.map +1 -1
  82. package/dist/nav-rail.min.js +1 -1
  83. package/dist/nav-rail.min.js.map +1 -1
  84. package/dist/radio-group.js +1 -1
  85. package/dist/radio-group.js.map +1 -1
  86. package/dist/radio-group.min.js +1 -1
  87. package/dist/radio-group.min.js.map +1 -1
  88. package/dist/search.js +31 -11
  89. package/dist/search.js.map +1 -1
  90. package/dist/search.min.js +1 -1
  91. package/dist/search.min.js.map +1 -1
  92. package/dist/skeleton.js +106 -45
  93. package/dist/skeleton.js.map +1 -1
  94. package/dist/skeleton.min.js +1 -1
  95. package/dist/skeleton.min.js.map +1 -1
  96. package/dist/slide-group.js +1 -1
  97. package/dist/slide-group.js.map +1 -1
  98. package/dist/slide-group.min.js +1 -1
  99. package/dist/slide-group.min.js.map +1 -1
  100. package/dist/slider.js +3 -2
  101. package/dist/slider.js.map +1 -1
  102. package/dist/slider.min.js +1 -1
  103. package/dist/slider.min.js.map +1 -1
  104. package/dist/snackbar.js +1 -1
  105. package/dist/snackbar.js.map +1 -1
  106. package/dist/snackbar.min.js +1 -1
  107. package/dist/snackbar.min.js.map +1 -1
  108. package/dist/split-pane.js +1 -1
  109. package/dist/split-pane.js.map +1 -1
  110. package/dist/split-pane.min.js +1 -1
  111. package/dist/split-pane.min.js.map +1 -1
  112. package/dist/src/avatar/AvatarElement.d.ts.map +1 -1
  113. package/dist/src/badge/BadgeElement.d.ts +1 -0
  114. package/dist/src/badge/BadgeElement.d.ts.map +1 -1
  115. package/dist/src/bottom-sheet/BottomSheetElement.d.ts.map +1 -1
  116. package/dist/src/calendar/CalendarElement.d.ts.map +1 -1
  117. package/dist/src/checkbox/CheckboxElement.d.ts.map +1 -1
  118. package/dist/src/core/anchoring/FloatingPanelElement.d.ts.map +1 -1
  119. package/dist/src/core/anchoring/positionAnchor.d.ts.map +1 -1
  120. package/dist/src/core/shared/mixins/AttachInternals.d.ts.map +1 -1
  121. package/dist/src/core/shared/primitives/CollapsibleElement.d.ts +1 -1
  122. package/dist/src/core/shared/primitives/CollapsibleElement.d.ts.map +1 -1
  123. package/dist/src/core/shared/primitives/CollapsibleOrientation.d.ts +1 -1
  124. package/dist/src/core/shared/primitives/CollapsibleOrientation.d.ts.map +1 -1
  125. package/dist/src/core/shared/primitives/FocusRingElement.d.ts.map +1 -1
  126. package/dist/src/core/shared/primitives/PseudoCheckboxElement.d.ts.map +1 -1
  127. package/dist/src/core/shared/primitives/PseudoRadioElement.d.ts.map +1 -1
  128. package/dist/src/core/shared/primitives/RippleElement.d.ts.map +1 -1
  129. package/dist/src/core/shared/primitives/StateLayerElement.d.ts.map +1 -1
  130. package/dist/src/datepicker/DatepickerElement.d.ts.map +1 -1
  131. package/dist/src/dialog/DialogElement.d.ts.map +1 -1
  132. package/dist/src/divider/DividerElement.d.ts.map +1 -1
  133. package/dist/src/drawer-container/styles/DrawerContainerStyle.d.ts.map +1 -1
  134. package/dist/src/expansion-panel/ExpansionPanelElement.d.ts.map +1 -1
  135. package/dist/src/expansion-panel/styles/ExpansionHeaderStyle.d.ts.map +1 -1
  136. package/dist/src/expansion-panel/styles/ExpansionPanelStyle.d.ts.map +1 -1
  137. package/dist/src/fab-menu/FabMenuElement.d.ts.map +1 -1
  138. package/dist/src/form-field/FormFieldElement.d.ts.map +1 -1
  139. package/dist/src/menu/MenuElement.d.ts.map +1 -1
  140. package/dist/src/nav-bar/NavBarElement.d.ts +2 -0
  141. package/dist/src/nav-bar/NavBarElement.d.ts.map +1 -1
  142. package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
  143. package/dist/src/nav-menu/NavMenuElement.d.ts.map +1 -1
  144. package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
  145. package/dist/src/nav-rail/NavRailElement.d.ts.map +1 -1
  146. package/dist/src/radio-group/RadioElement.d.ts.map +1 -1
  147. package/dist/src/search/SearchViewElement.d.ts.map +1 -1
  148. package/dist/src/search/styles/SearchBarStyle.d.ts.map +1 -1
  149. package/dist/src/search/styles/SearchViewStyle.d.ts.map +1 -1
  150. package/dist/src/skeleton/SkeletonElement.d.ts +17 -1
  151. package/dist/src/skeleton/SkeletonElement.d.ts.map +1 -1
  152. package/dist/src/slide-group/SlideGroupElement.d.ts.map +1 -1
  153. package/dist/src/slider/SliderElement.d.ts.map +1 -1
  154. package/dist/src/slider/SliderThumbElement.d.ts.map +1 -1
  155. package/dist/src/snackbar/SnackbarElement.d.ts.map +1 -1
  156. package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
  157. package/dist/src/stepper/StepElement.d.ts.map +1 -1
  158. package/dist/src/stepper/StepPanelElement.d.ts.map +1 -1
  159. package/dist/src/stepper/StepperElement.d.ts.map +1 -1
  160. package/dist/src/switch/styles/SwitchStyle.d.ts.map +1 -1
  161. package/dist/src/switch/styles/SwitchTrackStyle.d.ts.map +1 -1
  162. package/dist/src/tabs/TabElement.d.ts.map +1 -1
  163. package/dist/src/tabs/TabPanelElement.d.ts.map +1 -1
  164. package/dist/src/tabs/TabsElement.d.ts.map +1 -1
  165. package/dist/src/toc/TocElement.d.ts.map +1 -1
  166. package/dist/src/toc/TocItemElement.d.ts.map +1 -1
  167. package/dist/src/tooltip/RichTooltipElement.d.ts +2 -0
  168. package/dist/src/tooltip/RichTooltipElement.d.ts.map +1 -1
  169. package/dist/src/tooltip/TooltipElement.d.ts +4 -0
  170. package/dist/src/tooltip/TooltipElement.d.ts.map +1 -1
  171. package/dist/src/tree/TreeElement.d.ts.map +1 -1
  172. package/dist/src/tree/TreeItemElement.d.ts.map +1 -1
  173. package/dist/stepper.js +3 -3
  174. package/dist/stepper.js.map +1 -1
  175. package/dist/stepper.min.js +1 -1
  176. package/dist/stepper.min.js.map +1 -1
  177. package/dist/switch.js +2 -2
  178. package/dist/switch.js.map +1 -1
  179. package/dist/switch.min.js +1 -1
  180. package/dist/switch.min.js.map +1 -1
  181. package/dist/tabs.js +3 -3
  182. package/dist/tabs.js.map +1 -1
  183. package/dist/tabs.min.js +1 -1
  184. package/dist/tabs.min.js.map +1 -1
  185. package/dist/toc.js +2 -2
  186. package/dist/toc.js.map +1 -1
  187. package/dist/toc.min.js +1 -1
  188. package/dist/toc.min.js.map +1 -1
  189. package/dist/tooltip.js +58 -18
  190. package/dist/tooltip.js.map +1 -1
  191. package/dist/tooltip.min.js +1 -1
  192. package/dist/tooltip.min.js.map +1 -1
  193. package/dist/tree.js +2 -2
  194. package/dist/tree.js.map +1 -1
  195. package/dist/tree.min.js +1 -1
  196. package/dist/tree.min.js.map +1 -1
  197. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fab-menu.min.js","sources":["../../src/fab-menu/FabMenuElement.ts","../../src/fab-menu/FabMenuItemElement.ts","../../src/fab-menu/FabMenuTriggerElement.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n ClickOutsideController,\r\n customElement,\r\n DesignToken,\r\n DisabledMixin,\r\n Role,\r\n ScrollController,\r\n setCustomState,\r\n SuppressInitialAnimation,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { RovingTabIndexManager } from \"@m3e/web/core/a11y\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\nimport { positionAnchor } from \"@m3e/web/core/anchoring\";\r\n\r\nimport { M3eFabElement } from \"@m3e/web/fab\";\r\n\r\nimport { FabMenuVariant } from \"./FabMenuVariant\";\r\n\r\n/**\r\n * A menu, opened from a floating action button (FAB), used to display multiple related actions.\r\n *\r\n * @description\r\n * The `m3e-fab-menu` component presents a dynamic menu of related actions, elegantly revealed from a\r\n * floating action button (FAB). Designed using expressive, adaptive surfaces, it enables seamless access\r\n * to contextual actions in modern, visually rich interfaces.\r\n *\r\n * @example\r\n * The following example illustrates triggering a `m3e-fab-menu` from an `m3e-fab` using a `m3e-fab-menu-trigger`.\r\n * ```html\r\n * <m3e-fab variant=\"primary\" size=\"large\">\r\n * <m3e-fab-menu-trigger for=\"fabmenu\">\r\n * <m3e-icon name=\"edit\"></m3e-icon>\r\n * </m3e-fab-menu-trigger>\r\n * </m3e-fab>\r\n * <m3e-fab-menu id=\"fabmenu\" variant=\"secondary\">\r\n * <m3e-fab-menu-item>First</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Second</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Third</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Forth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Fifth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Sixth</m3e-fab-menu-item>\r\n * </m3e-fab-menu>\r\n * ```\r\n *\r\n * @tag m3e-fab-menu\r\n *\r\n * @slot - Renders the contents of the menu.\r\n *\r\n * @attr variant - The appearance variant of the menu.\r\n *\r\n * @fires beforetoggle - Dispatched before the toggle state changes.\r\n * @fires toggle - Dispatched after the toggle state has changed.\r\n *\r\n * @cssprop --m3e-fab-menu-spacing - Vertical gap between menu items.\r\n * @cssprop --m3e-fab-menu-max-width - Maximum width of the menu.\r\n * @cssprop --m3e-primary-fab-color - Foreground color for primary variant items.\r\n * @cssprop --m3e-primary-fab-container-color - Container color for primary variant items.\r\n * @cssprop --m3e-primary-fab-hover-color - Hover background color for primary variant items.\r\n * @cssprop --m3e-primary-fab-focus-color - Focus background color for primary variant items.\r\n * @cssprop --m3e-primary-fab-ripple-color - Ripple color for primary variant items.\r\n * @cssprop --m3e-secondary-fab-color - Foreground color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-container-color - Container color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-hover-color - Hover background color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-focus-color - Focus background color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-ripple-color - Ripple color for secondary variant items.\r\n * @cssprop --m3e-tertiary-fab-color - Foreground color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-container-color - Container color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-hover-color - Hover background color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-focus-color - Focus background color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-ripple-color - Ripple color for tertiary variant items.\r\n */\r\n@customElement(\"m3e-fab-menu\")\r\nexport class M3eFabMenuElement extends SuppressInitialAnimation(AttachInternals(Role(LitElement, \"menu\"))) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n position: absolute;\r\n flex-direction: column;\r\n row-gap: var(--m3e-fab-menu-spacing, 0.25rem);\r\n padding: unset;\r\n margin: unset;\r\n border: unset;\r\n overflow: visible;\r\n max-width: var(--m3e-fab-menu-max-width, 17.5rem);\r\n opacity: 0;\r\n background-color: transparent;\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--no-animate), :--no-animate))) {\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.spring.fastEffects}, \r\n transform ${DesignToken.motion.spring.fastSpatial},\r\n overlay ${DesignToken.motion.spring.fastEffects} allow-discrete,\r\n display ${DesignToken.motion.spring.fastEffects} allow-discrete`,\r\n )};\r\n }\r\n .base {\r\n display: contents;\r\n }\r\n :host([variant=\"primary\"]) .base {\r\n --_fab-menu-item-color: var(--m3e-primary-fab-color, ${DesignToken.color.onPrimaryContainer});\r\n --_fab-menu-item-container-color: var(--m3e-primary-fab-container-color, ${DesignToken.color.primaryContainer});\r\n --_fab-menu-background-hover-color: var(--m3e-primary-fab-hover-color, ${DesignToken.color.onPrimaryContainer});\r\n --_fab-menu-background-focus-color: var(--m3e-primary-fab-focus-color, ${DesignToken.color.onPrimaryContainer});\r\n --_fab-menu-ripple-color: var(--m3e-primary-fab-ripple-color, ${DesignToken.color.onPrimaryContainer});\r\n }\r\n :host([variant=\"secondary\"]) .base {\r\n --_fab-menu-item-color: var(--m3e-secondary-fab-color, ${DesignToken.color.onSecondaryContainer});\r\n --_fab-menu-item-container-color: var(\r\n --m3e-secondary-fab-container-color,\r\n ${DesignToken.color.secondaryContainer}\r\n );\r\n --_fab-menu-background-hover-color: var(\r\n --m3e-secondary-fab-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --_fab-menu-background-focus-color: var(\r\n --m3e-secondary-fab-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --_fab-menu-ripple-color: var(--m3e-secondary-fab-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([variant=\"tertiary\"]) .base {\r\n --_fab-menu-item-color: var(--m3e-tertiary-fab-color, ${DesignToken.color.onTertiaryContainer});\r\n --_fab-menu-item-container-color: var(--m3e-tertiary-fab-container-color, ${DesignToken.color.tertiaryContainer});\r\n --_fab-menu-background-hover-color: var(--m3e-tertiary-fab-hover-color, ${DesignToken.color.onTertiaryContainer});\r\n --_fab-menu-background-focus-color: var(--m3e-tertiary-fab-focus-color, ${DesignToken.color.onTertiaryContainer});\r\n --_fab-menu-ripple-color: var(--m3e-tertiary-fab-ripple-color, ${DesignToken.color.onTertiaryContainer});\r\n }\r\n :host {\r\n transform: scaleX(0.8);\r\n }\r\n :host(:is(:state(--left), :--left)) {\r\n align-items: flex-start;\r\n transform-origin: left;\r\n }\r\n :host(:is(:state(--right), :--right)) {\r\n align-items: flex-end;\r\n transform-origin: right;\r\n }\r\n :host(:popover-open) {\r\n transform: scaleX(1);\r\n display: inline-flex;\r\n opacity: 1;\r\n }\r\n :host::backdrop {\r\n background-color: transparent;\r\n }\r\n @starting-style {\r\n :host(:popover-open) {\r\n opacity: 0;\r\n }\r\n :host(:popover-open) {\r\n transform: scaleX(0.8);\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n :host(:not(:is(:state(--no-animate), :--no-animate))) {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n :host {\r\n border-radius: ${DesignToken.shape.corner.medium};\r\n outline: 1px solid MenuText;\r\n background-color: Menu;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ #fabTabIndex?: number;\r\n /** @private */ #trigger?: HTMLElement;\r\n /** @private */ #anchoringCleanup?: () => void;\r\n\r\n /** @private */\r\n readonly #listManager = new RovingTabIndexManager<LitElement & DisabledMixin>()\r\n .withWrap()\r\n .withHomeAndEnd()\r\n .withVerticalOrientation();\r\n\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n\r\n /** @private */\r\n readonly #scrollController = new ScrollController(this, { target: null, callback: () => this.hide() });\r\n\r\n /** @private */ readonly #clickOutsideController = new ClickOutsideController(this, {\r\n target: null,\r\n callback: () => this.hide(),\r\n });\r\n\r\n /** @private */\r\n readonly #toggleHandler = (e: ToggleEvent) => {\r\n switch (e.newState) {\r\n case \"open\":\r\n this.#clickOutsideController.observe(this);\r\n if (this.#trigger) {\r\n this.#clickOutsideController.observe(this.#trigger);\r\n }\r\n setTimeout(() => this.#listManager.setActiveItem(this.#listManager.items.find((x) => !x.disabled)), 40);\r\n break;\r\n\r\n case \"closed\":\r\n this.#clickOutsideController.unobserveAll();\r\n this.#anchoringCleanup?.();\r\n this.#anchoringCleanup = undefined;\r\n break;\r\n }\r\n };\r\n\r\n /**\r\n * The appearance variant of the menu.\r\n * @default \"primary\"\r\n */\r\n @property({ reflect: true }) variant: FabMenuVariant = \"primary\";\r\n\r\n /** Whether the menu is open. */\r\n get isOpen() {\r\n return this.#trigger !== undefined;\r\n }\r\n\r\n /**\r\n * Opens the menu.\r\n * @param {HTMLElement} trigger The element that triggered the menu.\r\n * @returns {Promise<void>} A `Promise` that resolves when the menu is opened.\r\n */\r\n async show(trigger: HTMLElement): Promise<void> {\r\n if (this.#trigger && this.#trigger !== trigger) {\r\n this.hide();\r\n }\r\n\r\n this.#anchoringCleanup?.();\r\n this.#anchoringCleanup = await positionAnchor(\r\n this,\r\n trigger,\r\n {\r\n position: \"top-end\",\r\n inline: true,\r\n shift: \"main\",\r\n flip: true,\r\n offset: 8,\r\n },\r\n (x, y, position) => {\r\n setCustomState(this, \"--right\", position.includes(\"end\"));\r\n setCustomState(this, \"--left\", position.includes(\"start\"));\r\n if (M3eDirectionality.current === \"rtl\") {\r\n this.style.right = `${window.innerWidth - x - this.clientWidth}px`;\r\n this.style.left = \"\";\r\n } else {\r\n this.style.left = `${x}px`;\r\n this.style.right = \"\";\r\n }\r\n this.style.top = `${y}px`;\r\n },\r\n );\r\n\r\n this.showPopover();\r\n\r\n this.#trigger = trigger;\r\n this.#trigger.ariaExpanded = \"true\";\r\n this.#scrollController.observe(this.#trigger);\r\n\r\n this.#attachFab();\r\n }\r\n\r\n /**\r\n * Hides the menu.\r\n * @param {boolean} [restoreFocus=false] A value indicating whether to restore focus to the menu's trigger.\r\n */\r\n hide(restoreFocus: boolean = false): void {\r\n this.#anchoringCleanup?.();\r\n this.#anchoringCleanup = undefined;\r\n\r\n if (this.#trigger) {\r\n this.#trigger.ariaExpanded = \"false\";\r\n if (restoreFocus) {\r\n this.#trigger.focus();\r\n }\r\n\r\n this.#detachFab();\r\n\r\n this.#scrollController.unobserve(this.#trigger);\r\n this.#trigger = undefined;\r\n }\r\n this.hidePopover();\r\n }\r\n\r\n /**\r\n * Toggles the menu.\r\n * @param {HTMLElement} trigger The element that triggered the menu.\r\n * @returns {Promise<void>} A `Promise` that resolves when the menu is opened or closed.\r\n */\r\n async toggle(trigger: HTMLElement): Promise<void> {\r\n if (this.#trigger) {\r\n this.hide();\r\n } else {\r\n await this.show(trigger);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.tabIndex = -1;\r\n this.setAttribute(\"popover\", \"manual\");\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"toggle\", this.#toggleHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"toggle\", this.#toggleHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\"><slot @slotchange=\"${this.#handleSlotChange}\"></slot></div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n const { added } = this.#listManager.setItems([...this.querySelectorAll(\"m3e-fab-menu-item\")]);\r\n if (!this.#listManager.activeItem) {\r\n this.#listManager.updateActiveItem(added.find((x) => !x.disabled));\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n switch (e.key) {\r\n case \"Tab\":\r\n this.hide();\r\n break;\r\n\r\n case \"Escape\":\r\n if (!e.shiftKey && !e.ctrlKey) {\r\n this.hide(true);\r\n }\r\n break;\r\n\r\n default:\r\n this.#listManager.onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #attachFab(): void {\r\n const fab = this.#trigger?.closest<M3eFabElement>(\"m3e-fab\");\r\n if (fab) {\r\n this.#fabTabIndex = fab.tabIndex;\r\n fab.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.#listManager.setItems([...this.#listManager.items, fab]);\r\n }\r\n }\r\n\r\n /** @private */\r\n #detachFab(): void {\r\n const fab = this.#trigger?.closest<M3eFabElement>(\"m3e-fab\");\r\n if (fab) {\r\n if (this.#fabTabIndex !== undefined) {\r\n fab.tabIndex = this.#fabTabIndex;\r\n }\r\n fab.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.#listManager.setItems([...this.#listManager.items.filter((x) => x !== fab)]);\r\n }\r\n }\r\n}\r\n\r\ninterface M3eFabMenuElementEventMap extends HTMLElementEventMap {\r\n beforetoggle: ToggleEvent;\r\n toggle: ToggleEvent;\r\n}\r\n\r\nexport interface M3eFabMenuElement {\r\n addEventListener<K extends keyof M3eFabMenuElementEventMap>(\r\n type: K,\r\n listener: (this: M3eFabMenuElement, ev: M3eFabMenuElementEventMap[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 M3eFabMenuElementEventMap>(\r\n type: K,\r\n listener: (this: M3eFabMenuElement, ev: M3eFabMenuElementEventMap[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-fab-menu\": M3eFabMenuElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eElevationElement,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n renderPseudoLink,\r\n Role,\r\n} from \"@m3e/web/core\";\r\n\r\nimport type { M3eFabMenuElement } from \"./FabMenuElement\";\r\n\r\n/**\r\n * An item of a floating action button (FAB) menu.\r\n *\r\n * @example\r\n * The following example illustrates triggering a `m3e-fab-menu` from an `m3e-fab` using a `m3e-fab-menu-trigger`.\r\n * ```html\r\n * <m3e-fab variant=\"primary\" size=\"large\">\r\n * <m3e-fab-menu-trigger for=\"fabmenu\">\r\n * <m3e-icon name=\"edit\"></m3e-icon>\r\n * </m3e-fab-menu-trigger>\r\n * </m3e-fab>\r\n * <m3e-fab-menu id=\"fabmenu\" variant=\"secondary\">\r\n * <m3e-fab-menu-item>First</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Second</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Third</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Forth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Fifth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Sixth</m3e-fab-menu-item>\r\n * </m3e-fab-menu>\r\n * ```\r\n *\r\n * @tag m3e-menu-item\r\n *\r\n * @slot - Renders the label of the item.\r\n * @slot icon - Renders an icon before the items's label.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr download - A value indicating whether the `target` of the link button will be downloaded, optionally specifying the new name of the file.\r\n * @attr href - The URL to which the link button points.\r\n * @attr rel - The relationship between the `target` of the link button and the document.\r\n * @attr target - The target of the link button.\r\n *\r\n * @fires click - Dispatched when the element is clicked.\r\n *\r\n * @cssprop --m3e-fab-menu-item-height - Height of the menu item.\r\n * @cssprop --m3e-fab-menu-item-font-size - Font size of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-font-weight - Font weight of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-line-height - Line height of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-tracking - Letter spacing of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-shape - Border radius of the menu item.\r\n * @cssprop --m3e-fab-menu-item-leading-space - Padding at the start of the menu item.\r\n * @cssprop --m3e-fab-menu-item-trailing-space - Padding at the end of the menu item.\r\n * @cssprop --m3e-fab-menu-item-spacing - Gap between icon and label.\r\n * @cssprop --m3e-fab-menu-item-icon-size - Size of the icon in the menu item.\r\n */\r\n@customElement(\"m3e-fab-menu-item\")\r\nexport class M3eFabMenuItemElement extends KeyboardClick(\r\n LinkButton(Disabled(AttachInternals(Role(LitElement, \"menuitem\"), true))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: inline-block;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n box-sizing: border-box;\r\n vertical-align: middle;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n width: 100%;\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n height: var(--m3e-fab-menu-item-height, 3.5rem);\r\n font-size: var(--m3e-fab-menu-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-fab-menu-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-fab-menu-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-fab-menu-item-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n border-radius: var(--m3e-fab-menu-item-shape, ${DesignToken.shape.corner.full});\r\n }\r\n :host(:not(:disabled)) .label,\r\n :host(:not(:disabled)) .icon {\r\n color: var(--_fab-menu-item-color);\r\n }\r\n :host(:not(:disabled)) .base {\r\n background-color: var(--_fab-menu-item-container-color);\r\n --m3e-state-layer-hover-color: var(--_fab-menu-background-hover-color);\r\n --m3e-state-layer-focus-color: var(--_fab-menu-background-focus-color);\r\n --m3e-ripple-color: var(--_fab-menu-ripple-color);\r\n }\r\n :host(:disabled) .base {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-fab-menu-item-disabled-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-fab-menu-item-disabled-container-opacity, 10%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) .label,\r\n :host(:disabled) .icon {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-fab-menu-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-fab-menu-item-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n left: 0;\r\n right: 0;\r\n }\r\n .wrapper {\r\n width: 100%;\r\n overflow: hidden;\r\n display: inline-flex;\r\n align-items: center;\r\n padding-inline-start: var(--m3e-fab-menu-item-leading-space, 1.5rem);\r\n padding-inline-end: var(--m3e-fab-menu-item-trailing-space, 1.5rem);\r\n column-gap: var(--m3e-fab-menu-item-spacing, 0.5rem);\r\n }\r\n .label {\r\n justify-self: center;\r\n flex: 1 1 auto;\r\n text-align: center;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n .icon {\r\n font-size: var(--m3e-fab-menu-item-icon-size, 1.5rem);\r\n transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not(:disabled)) {\r\n cursor: pointer;\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 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 (prefers-reduced-motion) {\r\n .base,\r\n .label,\r\n .icon {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .label,\r\n .icon {\r\n transition: none;\r\n }\r\n :host(:not(:disabled)) .base {\r\n background-color: Menu;\r\n }\r\n :host(:not(:disabled)) .label,\r\n :host(:not(:disabled)) .icon {\r\n color: MenuText;\r\n }\r\n :host(:disabled) .label,\r\n :host(:disabled) .icon {\r\n color: GrayText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".elevation\") private readonly _elevation?: M3eElevationElement;\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 */ readonly #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /** The floating action button (FAB) menu to which this item belongs. */\r\n get menu(): M3eFabMenuElement | null {\r\n return this.closest(\"m3e-fab-menu\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n this.addEventListener(\"click\", this.#clickHandler);\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._elevation, this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-elevation class=\"elevation\" ?disabled=\"${this.disabled}\"></m3e-elevation>\r\n <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 <div class=\"touch\" aria-hidden=\"true\"></div>\r\n ${this[renderPseudoLink]()}\r\n <div class=\"wrapper\">\r\n <slot class=\"icon\" name=\"icon\" aria-hidden=\"true\"></slot>\r\n <div class=\"label\"><slot></slot></div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n if (!e.defaultPrevented) {\r\n this.menu?.hide(true);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-fab-menu-item\": M3eFabMenuItemElement;\r\n }\r\n}\r\n","import { ActionElementBase, customElement, HtmlFor } from \"@m3e/web/core\";\r\nimport { addAriaReferencedId, removeAriaReferencedId } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eFabMenuElement } from \"./FabMenuElement\";\r\n\r\n/**\r\n * An element, nested within a clickable element, used to open a floating action button (FAB) menu.\r\n *\r\n * @example\r\n * The following example illustrates triggering a `m3e-fab-menu` from an `m3e-fab` using a `m3e-fab-menu-trigger`.\r\n * ```html\r\n * <m3e-fab variant=\"primary\" size=\"large\">\r\n * <m3e-fab-menu-trigger for=\"fabmenu\">\r\n * <m3e-icon name=\"edit\"></m3e-icon>\r\n * </m3e-fab-menu-trigger>\r\n * </m3e-fab>\r\n * <m3e-fab-menu id=\"fabmenu\" variant=\"secondary\">\r\n * <m3e-fab-menu-item>First</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Second</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Third</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Forth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Fifth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Sixth</m3e-fab-menu-item>\r\n * </m3e-fab-menu>\r\n * ```\r\n *\r\n * @tag m3e-fab-menu-trigger\r\n */\r\n@customElement(\"m3e-fab-menu-trigger\")\r\nexport class M3eFabMenuTriggerElement extends HtmlFor(ActionElementBase) {\r\n /** The menu triggered by the element. */\r\n get menu(): M3eFabMenuElement | null {\r\n return this.control instanceof M3eFabMenuElement ? this.control : null;\r\n }\r\n\r\n /** @inheritdoc */\r\n override attach(control: HTMLElement): void {\r\n super.attach(control);\r\n\r\n if (this.parentElement && control instanceof M3eFabMenuElement) {\r\n this.parentElement.ariaHasPopup = \"menu\";\r\n this.parentElement.ariaExpanded = \"false\";\r\n if (control.id) {\r\n addAriaReferencedId(this.parentElement, \"aria-controls\", control.id);\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override detach(): void {\r\n if (this.parentElement) {\r\n this.parentElement.ariaHasPopup = null;\r\n this.parentElement.ariaExpanded = null;\r\n if (this.control?.id) {\r\n removeAriaReferencedId(this.parentElement, \"aria-controls\", this.control.id);\r\n }\r\n }\r\n\r\n super.detach();\r\n }\r\n\r\n /** @inheritdoc */\r\n override _onClick(): void {\r\n if (this.parentElement) {\r\n this.menu?.toggle(this.parentElement);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-fab-menu-trigger\": M3eFabMenuTriggerElement;\r\n }\r\n}\r\n"],"names":["M3eFabMenuElement","SuppressInitialAnimation","AttachInternals","Role","LitElement","constructor","_M3eFabMenuElement_fabTabIndex","set","this","_M3eFabMenuElement_trigger","_M3eFabMenuElement_anchoringCleanup","_M3eFabMenuElement_listManager","RovingTabIndexManager","withWrap","withHomeAndEnd","withVerticalOrientation","_M3eFabMenuElement_keyDownHandler","e","__classPrivateFieldGet","call","_M3eFabMenuElement_scrollController","ScrollController","target","callback","hide","_M3eFabMenuElement_clickOutsideController","ClickOutsideController","_M3eFabMenuElement_toggleHandler","newState","observe","setTimeout","setActiveItem","items","find","x","disabled","unobserveAll","__classPrivateFieldSet","undefined","variant","isOpen","show","trigger","positionAnchor","position","inline","shift","flip","offset","y","setCustomState","includes","M3eDirectionality","current","style","right","window","innerWidth","clientWidth","left","top","showPopover","ariaExpanded","_M3eFabMenuElement_instances","_M3eFabMenuElement_attachFab","restoreFocus","focus","_M3eFabMenuElement_detachFab","unobserve","hidePopover","toggle","connectedCallback","super","tabIndex","setAttribute","addEventListener","disconnectedCallback","removeEventListener","render","html","_M3eFabMenuElement_handleSlotChange","added","setItems","querySelectorAll","activeItem","updateActiveItem","key","shiftKey","ctrlKey","onKeyDown","fab","closest","filter","styles","css","unsafeCSS","DesignToken","motion","spring","fastEffects","fastSpatial","color","onPrimaryContainer","primaryContainer","onSecondaryContainer","secondaryContainer","onTertiaryContainer","tertiaryContainer","shape","corner","medium","__decorate","property","reflect","prototype","customElement","M3eFabMenuItemElement","KeyboardClick","LinkButton","Disabled","_M3eFabMenuItemElement_clickHandler","menu","firstUpdated","_changedProperties","_elevation","_focusRing","_stateLayer","_ripple","forEach","attach","renderPseudoLink","defaultPrevented","duration","short4","easing","standard","typescale","label","large","fontSize","fontWeight","lineHeight","tracking","full","onSurface","query","M3eFabMenuTriggerElement","HtmlFor","ActionElementBase","control","parentElement","ariaHasPopup","id","addAriaReferencedId","detach","removeAriaReferencedId","_onClick"],"mappings":"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"}
1
+ {"version":3,"file":"fab-menu.min.js","sources":["../../src/fab-menu/FabMenuElement.ts","../../src/fab-menu/FabMenuItemElement.ts","../../src/fab-menu/FabMenuTriggerElement.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\nimport { css, CSSResultGroup, html, LitElement, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n ClickOutsideController,\r\n customElement,\r\n DesignToken,\r\n DisabledMixin,\r\n Role,\r\n ScrollController,\r\n setCustomState,\r\n SuppressInitialAnimation,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { RovingTabIndexManager } from \"@m3e/web/core/a11y\";\r\nimport { M3eDirectionality } from \"@m3e/web/core/bidi\";\r\nimport { positionAnchor } from \"@m3e/web/core/anchoring\";\r\n\r\nimport { M3eFabElement } from \"@m3e/web/fab\";\r\n\r\nimport { FabMenuVariant } from \"./FabMenuVariant\";\r\n\r\n/**\r\n * A menu, opened from a floating action button (FAB), used to display multiple related actions.\r\n *\r\n * @description\r\n * The `m3e-fab-menu` component presents a dynamic menu of related actions, elegantly revealed from a\r\n * floating action button (FAB). Designed using expressive, adaptive surfaces, it enables seamless access\r\n * to contextual actions in modern, visually rich interfaces.\r\n *\r\n * @example\r\n * The following example illustrates triggering a `m3e-fab-menu` from an `m3e-fab` using a `m3e-fab-menu-trigger`.\r\n * ```html\r\n * <m3e-fab variant=\"primary\" size=\"large\">\r\n * <m3e-fab-menu-trigger for=\"fabmenu\">\r\n * <m3e-icon name=\"edit\"></m3e-icon>\r\n * </m3e-fab-menu-trigger>\r\n * </m3e-fab>\r\n * <m3e-fab-menu id=\"fabmenu\" variant=\"secondary\">\r\n * <m3e-fab-menu-item>First</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Second</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Third</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Forth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Fifth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Sixth</m3e-fab-menu-item>\r\n * </m3e-fab-menu>\r\n * ```\r\n *\r\n * @tag m3e-fab-menu\r\n *\r\n * @slot - Renders the contents of the menu.\r\n *\r\n * @attr variant - The appearance variant of the menu.\r\n *\r\n * @fires beforetoggle - Dispatched before the toggle state changes.\r\n * @fires toggle - Dispatched after the toggle state has changed.\r\n *\r\n * @cssprop --m3e-fab-menu-spacing - Vertical gap between menu items.\r\n * @cssprop --m3e-fab-menu-max-width - Maximum width of the menu.\r\n * @cssprop --m3e-primary-fab-color - Foreground color for primary variant items.\r\n * @cssprop --m3e-primary-fab-container-color - Container color for primary variant items.\r\n * @cssprop --m3e-primary-fab-hover-color - Hover background color for primary variant items.\r\n * @cssprop --m3e-primary-fab-focus-color - Focus background color for primary variant items.\r\n * @cssprop --m3e-primary-fab-ripple-color - Ripple color for primary variant items.\r\n * @cssprop --m3e-secondary-fab-color - Foreground color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-container-color - Container color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-hover-color - Hover background color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-focus-color - Focus background color for secondary variant items.\r\n * @cssprop --m3e-secondary-fab-ripple-color - Ripple color for secondary variant items.\r\n * @cssprop --m3e-tertiary-fab-color - Foreground color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-container-color - Container color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-hover-color - Hover background color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-focus-color - Focus background color for tertiary variant items.\r\n * @cssprop --m3e-tertiary-fab-ripple-color - Ripple color for tertiary variant items.\r\n */\r\n@customElement(\"m3e-fab-menu\")\r\nexport class M3eFabMenuElement extends SuppressInitialAnimation(AttachInternals(Role(LitElement, \"menu\"))) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n contain: layout style;\r\n position: absolute;\r\n flex-direction: column;\r\n row-gap: var(--m3e-fab-menu-spacing, 0.25rem);\r\n padding: unset;\r\n margin: unset;\r\n border: unset;\r\n overflow: visible;\r\n max-width: var(--m3e-fab-menu-max-width, 17.5rem);\r\n opacity: 0;\r\n background-color: transparent;\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--no-animate), :--no-animate))) {\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.spring.fastEffects}, \r\n transform ${DesignToken.motion.spring.fastSpatial},\r\n overlay ${DesignToken.motion.spring.fastEffects} allow-discrete,\r\n display ${DesignToken.motion.spring.fastEffects} allow-discrete`,\r\n )};\r\n }\r\n .base {\r\n display: contents;\r\n }\r\n :host([variant=\"primary\"]) .base {\r\n --_fab-menu-item-color: var(--m3e-primary-fab-color, ${DesignToken.color.onPrimaryContainer});\r\n --_fab-menu-item-container-color: var(--m3e-primary-fab-container-color, ${DesignToken.color.primaryContainer});\r\n --_fab-menu-background-hover-color: var(--m3e-primary-fab-hover-color, ${DesignToken.color.onPrimaryContainer});\r\n --_fab-menu-background-focus-color: var(--m3e-primary-fab-focus-color, ${DesignToken.color.onPrimaryContainer});\r\n --_fab-menu-ripple-color: var(--m3e-primary-fab-ripple-color, ${DesignToken.color.onPrimaryContainer});\r\n }\r\n :host([variant=\"secondary\"]) .base {\r\n --_fab-menu-item-color: var(--m3e-secondary-fab-color, ${DesignToken.color.onSecondaryContainer});\r\n --_fab-menu-item-container-color: var(\r\n --m3e-secondary-fab-container-color,\r\n ${DesignToken.color.secondaryContainer}\r\n );\r\n --_fab-menu-background-hover-color: var(\r\n --m3e-secondary-fab-hover-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --_fab-menu-background-focus-color: var(\r\n --m3e-secondary-fab-focus-color,\r\n ${DesignToken.color.onSecondaryContainer}\r\n );\r\n --_fab-menu-ripple-color: var(--m3e-secondary-fab-ripple-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([variant=\"tertiary\"]) .base {\r\n --_fab-menu-item-color: var(--m3e-tertiary-fab-color, ${DesignToken.color.onTertiaryContainer});\r\n --_fab-menu-item-container-color: var(--m3e-tertiary-fab-container-color, ${DesignToken.color.tertiaryContainer});\r\n --_fab-menu-background-hover-color: var(--m3e-tertiary-fab-hover-color, ${DesignToken.color.onTertiaryContainer});\r\n --_fab-menu-background-focus-color: var(--m3e-tertiary-fab-focus-color, ${DesignToken.color.onTertiaryContainer});\r\n --_fab-menu-ripple-color: var(--m3e-tertiary-fab-ripple-color, ${DesignToken.color.onTertiaryContainer});\r\n }\r\n :host {\r\n transform: scaleX(0.8);\r\n }\r\n :host(:is(:state(--left), :--left)) {\r\n align-items: flex-start;\r\n transform-origin: left;\r\n }\r\n :host(:is(:state(--right), :--right)) {\r\n align-items: flex-end;\r\n transform-origin: right;\r\n }\r\n :host(:popover-open) {\r\n transform: scaleX(1);\r\n display: inline-flex;\r\n opacity: 1;\r\n }\r\n :host::backdrop {\r\n background-color: transparent;\r\n }\r\n @starting-style {\r\n :host(:popover-open) {\r\n opacity: 0;\r\n }\r\n :host(:popover-open) {\r\n transform: scaleX(0.8);\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n :host(:not(:is(:state(--no-animate), :--no-animate))) {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n :host {\r\n border-radius: ${DesignToken.shape.corner.medium};\r\n outline: 1px solid MenuText;\r\n background-color: Menu;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ #fabTabIndex?: number;\r\n /** @private */ #trigger?: HTMLElement;\r\n /** @private */ #anchoringCleanup?: () => void;\r\n\r\n /** @private */\r\n readonly #listManager = new RovingTabIndexManager<LitElement & DisabledMixin>()\r\n .withWrap()\r\n .withHomeAndEnd()\r\n .withVerticalOrientation();\r\n\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this.#handleKeyDown(e);\r\n\r\n /** @private */\r\n readonly #scrollController = new ScrollController(this, { target: null, callback: () => this.hide() });\r\n\r\n /** @private */ readonly #clickOutsideController = new ClickOutsideController(this, {\r\n target: null,\r\n callback: () => this.hide(),\r\n });\r\n\r\n /** @private */\r\n readonly #toggleHandler = (e: ToggleEvent) => {\r\n switch (e.newState) {\r\n case \"open\":\r\n this.#clickOutsideController.observe(this);\r\n if (this.#trigger) {\r\n this.#clickOutsideController.observe(this.#trigger);\r\n }\r\n setTimeout(() => this.#listManager.setActiveItem(this.#listManager.items.find((x) => !x.disabled)), 40);\r\n break;\r\n\r\n case \"closed\":\r\n this.#clickOutsideController.unobserveAll();\r\n this.#anchoringCleanup?.();\r\n this.#anchoringCleanup = undefined;\r\n break;\r\n }\r\n };\r\n\r\n /**\r\n * The appearance variant of the menu.\r\n * @default \"primary\"\r\n */\r\n @property({ reflect: true }) variant: FabMenuVariant = \"primary\";\r\n\r\n /** Whether the menu is open. */\r\n get isOpen() {\r\n return this.#trigger !== undefined;\r\n }\r\n\r\n /**\r\n * Opens the menu.\r\n * @param {HTMLElement} trigger The element that triggered the menu.\r\n * @returns {Promise<void>} A `Promise` that resolves when the menu is opened.\r\n */\r\n async show(trigger: HTMLElement): Promise<void> {\r\n if (this.#trigger && this.#trigger !== trigger) {\r\n this.hide();\r\n }\r\n\r\n this.#anchoringCleanup?.();\r\n this.#anchoringCleanup = await positionAnchor(\r\n this,\r\n trigger,\r\n {\r\n position: \"top-end\",\r\n inline: true,\r\n shift: \"main\",\r\n flip: true,\r\n offset: 8,\r\n },\r\n (x, y, position) => {\r\n setCustomState(this, \"--right\", position.includes(\"end\"));\r\n setCustomState(this, \"--left\", position.includes(\"start\"));\r\n if (M3eDirectionality.current === \"rtl\") {\r\n this.style.right = `${window.innerWidth - x - this.clientWidth}px`;\r\n this.style.left = \"\";\r\n } else {\r\n this.style.left = `${x}px`;\r\n this.style.right = \"\";\r\n }\r\n this.style.top = `${y}px`;\r\n },\r\n );\r\n\r\n this.showPopover();\r\n\r\n this.#trigger = trigger;\r\n this.#trigger.ariaExpanded = \"true\";\r\n this.#scrollController.observe(this.#trigger);\r\n\r\n this.#attachFab();\r\n }\r\n\r\n /**\r\n * Hides the menu.\r\n * @param {boolean} [restoreFocus=false] A value indicating whether to restore focus to the menu's trigger.\r\n */\r\n hide(restoreFocus: boolean = false): void {\r\n this.#anchoringCleanup?.();\r\n this.#anchoringCleanup = undefined;\r\n\r\n if (this.#trigger) {\r\n this.#trigger.ariaExpanded = \"false\";\r\n if (restoreFocus) {\r\n this.#trigger.focus();\r\n }\r\n\r\n this.#detachFab();\r\n\r\n this.#scrollController.unobserve(this.#trigger);\r\n this.#trigger = undefined;\r\n }\r\n this.hidePopover();\r\n }\r\n\r\n /**\r\n * Toggles the menu.\r\n * @param {HTMLElement} trigger The element that triggered the menu.\r\n * @returns {Promise<void>} A `Promise` that resolves when the menu is opened or closed.\r\n */\r\n async toggle(trigger: HTMLElement): Promise<void> {\r\n if (this.#trigger) {\r\n this.hide();\r\n } else {\r\n await this.show(trigger);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.tabIndex = -1;\r\n this.setAttribute(\"popover\", \"manual\");\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"toggle\", this.#toggleHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"toggle\", this.#toggleHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\"><slot @slotchange=\"${this.#handleSlotChange}\"></slot></div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(): void {\r\n const { added } = this.#listManager.setItems([...this.querySelectorAll(\"m3e-fab-menu-item\")]);\r\n if (!this.#listManager.activeItem) {\r\n this.#listManager.updateActiveItem(added.find((x) => !x.disabled));\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n switch (e.key) {\r\n case \"Tab\":\r\n this.hide();\r\n break;\r\n\r\n case \"Escape\":\r\n if (!e.shiftKey && !e.ctrlKey) {\r\n this.hide(true);\r\n }\r\n break;\r\n\r\n default:\r\n this.#listManager.onKeyDown(e);\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #attachFab(): void {\r\n const fab = this.#trigger?.closest<M3eFabElement>(\"m3e-fab\");\r\n if (fab) {\r\n this.#fabTabIndex = fab.tabIndex;\r\n fab.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.#listManager.setItems([...this.#listManager.items, fab]);\r\n }\r\n }\r\n\r\n /** @private */\r\n #detachFab(): void {\r\n const fab = this.#trigger?.closest<M3eFabElement>(\"m3e-fab\");\r\n if (fab) {\r\n if (this.#fabTabIndex !== undefined) {\r\n fab.tabIndex = this.#fabTabIndex;\r\n }\r\n fab.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.#listManager.setItems([...this.#listManager.items.filter((x) => x !== fab)]);\r\n }\r\n }\r\n}\r\n\r\ninterface M3eFabMenuElementEventMap extends HTMLElementEventMap {\r\n beforetoggle: ToggleEvent;\r\n toggle: ToggleEvent;\r\n}\r\n\r\nexport interface M3eFabMenuElement {\r\n addEventListener<K extends keyof M3eFabMenuElementEventMap>(\r\n type: K,\r\n listener: (this: M3eFabMenuElement, ev: M3eFabMenuElementEventMap[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 M3eFabMenuElementEventMap>(\r\n type: K,\r\n listener: (this: M3eFabMenuElement, ev: M3eFabMenuElementEventMap[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-fab-menu\": M3eFabMenuElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n Disabled,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eElevationElement,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n renderPseudoLink,\r\n Role,\r\n} from \"@m3e/web/core\";\r\n\r\nimport type { M3eFabMenuElement } from \"./FabMenuElement\";\r\n\r\n/**\r\n * An item of a floating action button (FAB) menu.\r\n *\r\n * @example\r\n * The following example illustrates triggering a `m3e-fab-menu` from an `m3e-fab` using a `m3e-fab-menu-trigger`.\r\n * ```html\r\n * <m3e-fab variant=\"primary\" size=\"large\">\r\n * <m3e-fab-menu-trigger for=\"fabmenu\">\r\n * <m3e-icon name=\"edit\"></m3e-icon>\r\n * </m3e-fab-menu-trigger>\r\n * </m3e-fab>\r\n * <m3e-fab-menu id=\"fabmenu\" variant=\"secondary\">\r\n * <m3e-fab-menu-item>First</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Second</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Third</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Forth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Fifth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Sixth</m3e-fab-menu-item>\r\n * </m3e-fab-menu>\r\n * ```\r\n *\r\n * @tag m3e-menu-item\r\n *\r\n * @slot - Renders the label of the item.\r\n * @slot icon - Renders an icon before the items's label.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr download - A value indicating whether the `target` of the link button will be downloaded, optionally specifying the new name of the file.\r\n * @attr href - The URL to which the link button points.\r\n * @attr rel - The relationship between the `target` of the link button and the document.\r\n * @attr target - The target of the link button.\r\n *\r\n * @fires click - Dispatched when the element is clicked.\r\n *\r\n * @cssprop --m3e-fab-menu-item-height - Height of the menu item.\r\n * @cssprop --m3e-fab-menu-item-font-size - Font size of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-font-weight - Font weight of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-line-height - Line height of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-tracking - Letter spacing of the menu item label.\r\n * @cssprop --m3e-fab-menu-item-shape - Border radius of the menu item.\r\n * @cssprop --m3e-fab-menu-item-leading-space - Padding at the start of the menu item.\r\n * @cssprop --m3e-fab-menu-item-trailing-space - Padding at the end of the menu item.\r\n * @cssprop --m3e-fab-menu-item-spacing - Gap between icon and label.\r\n * @cssprop --m3e-fab-menu-item-icon-size - Size of the icon in the menu item.\r\n */\r\n@customElement(\"m3e-fab-menu-item\")\r\nexport class M3eFabMenuItemElement extends KeyboardClick(\r\n LinkButton(Disabled(AttachInternals(Role(LitElement, \"menuitem\"), true))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: inline-block;\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n box-sizing: border-box;\r\n vertical-align: middle;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: relative;\r\n width: 100%;\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n height: var(--m3e-fab-menu-item-height, 3.5rem);\r\n font-size: var(--m3e-fab-menu-item-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(--m3e-fab-menu-item-font-weight, ${DesignToken.typescale.standard.label.large.fontWeight});\r\n line-height: var(--m3e-fab-menu-item-line-height, ${DesignToken.typescale.standard.label.large.lineHeight});\r\n letter-spacing: var(--m3e-fab-menu-item-tracking, ${DesignToken.typescale.standard.label.large.tracking});\r\n border-radius: var(--m3e-fab-menu-item-shape, ${DesignToken.shape.corner.full});\r\n }\r\n :host(:not(:disabled)) .label,\r\n :host(:not(:disabled)) .icon {\r\n color: var(--_fab-menu-item-color);\r\n }\r\n :host(:not(:disabled)) .base {\r\n background-color: var(--_fab-menu-item-container-color);\r\n --m3e-state-layer-hover-color: var(--_fab-menu-background-hover-color);\r\n --m3e-state-layer-focus-color: var(--_fab-menu-background-focus-color);\r\n --m3e-ripple-color: var(--_fab-menu-ripple-color);\r\n }\r\n :host(:disabled) .base {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-fab-menu-item-disabled-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-fab-menu-item-disabled-container-opacity, 10%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) .label,\r\n :host(:disabled) .icon {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-fab-menu-item-disabled-color, ${DesignToken.color.onSurface})\r\n var(--m3e-fab-menu-item-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n .touch {\r\n position: absolute;\r\n height: 3rem;\r\n left: 0;\r\n right: 0;\r\n }\r\n .wrapper {\r\n width: 100%;\r\n overflow: hidden;\r\n display: inline-flex;\r\n align-items: center;\r\n padding-inline-start: var(--m3e-fab-menu-item-leading-space, 1.5rem);\r\n padding-inline-end: var(--m3e-fab-menu-item-trailing-space, 1.5rem);\r\n column-gap: var(--m3e-fab-menu-item-spacing, 0.5rem);\r\n }\r\n .label {\r\n justify-self: center;\r\n flex: 1 1 auto;\r\n text-align: center;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n .icon {\r\n font-size: var(--m3e-fab-menu-item-icon-size, 1.5rem);\r\n transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not(:disabled)) {\r\n cursor: pointer;\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 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 (prefers-reduced-motion) {\r\n .base,\r\n .label,\r\n .icon {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n .base,\r\n .label,\r\n .icon {\r\n transition: none;\r\n }\r\n :host(:not(:disabled)) .base {\r\n background-color: Menu;\r\n }\r\n :host(:not(:disabled)) .label,\r\n :host(:not(:disabled)) .icon {\r\n color: MenuText;\r\n }\r\n :host(:disabled) .label,\r\n :host(:disabled) .icon {\r\n color: GrayText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @query(\".elevation\") private readonly _elevation?: M3eElevationElement;\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 */ readonly #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /** The floating action button (FAB) menu to which this item belongs. */\r\n get menu(): M3eFabMenuElement | null {\r\n return this.closest(\"m3e-fab-menu\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n this.addEventListener(\"click\", this.#clickHandler);\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._elevation, this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-elevation class=\"elevation\" ?disabled=\"${this.disabled}\"></m3e-elevation>\r\n <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 <div class=\"touch\" aria-hidden=\"true\"></div>\r\n ${this[renderPseudoLink]()}\r\n <div class=\"wrapper\">\r\n <slot class=\"icon\" name=\"icon\" aria-hidden=\"true\"></slot>\r\n <div class=\"label\"><slot></slot></div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n if (!e.defaultPrevented) {\r\n this.menu?.hide(true);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-fab-menu-item\": M3eFabMenuItemElement;\r\n }\r\n}\r\n","import { ActionElementBase, customElement, HtmlFor } from \"@m3e/web/core\";\r\nimport { addAriaReferencedId, removeAriaReferencedId } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eFabMenuElement } from \"./FabMenuElement\";\r\n\r\n/**\r\n * An element, nested within a clickable element, used to open a floating action button (FAB) menu.\r\n *\r\n * @example\r\n * The following example illustrates triggering a `m3e-fab-menu` from an `m3e-fab` using a `m3e-fab-menu-trigger`.\r\n * ```html\r\n * <m3e-fab variant=\"primary\" size=\"large\">\r\n * <m3e-fab-menu-trigger for=\"fabmenu\">\r\n * <m3e-icon name=\"edit\"></m3e-icon>\r\n * </m3e-fab-menu-trigger>\r\n * </m3e-fab>\r\n * <m3e-fab-menu id=\"fabmenu\" variant=\"secondary\">\r\n * <m3e-fab-menu-item>First</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Second</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Third</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Forth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Fifth</m3e-fab-menu-item>\r\n * <m3e-fab-menu-item>Sixth</m3e-fab-menu-item>\r\n * </m3e-fab-menu>\r\n * ```\r\n *\r\n * @tag m3e-fab-menu-trigger\r\n */\r\n@customElement(\"m3e-fab-menu-trigger\")\r\nexport class M3eFabMenuTriggerElement extends HtmlFor(ActionElementBase) {\r\n /** The menu triggered by the element. */\r\n get menu(): M3eFabMenuElement | null {\r\n return this.control instanceof M3eFabMenuElement ? this.control : null;\r\n }\r\n\r\n /** @inheritdoc */\r\n override attach(control: HTMLElement): void {\r\n super.attach(control);\r\n\r\n if (this.parentElement && control instanceof M3eFabMenuElement) {\r\n this.parentElement.ariaHasPopup = \"menu\";\r\n this.parentElement.ariaExpanded = \"false\";\r\n if (control.id) {\r\n addAriaReferencedId(this.parentElement, \"aria-controls\", control.id);\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override detach(): void {\r\n if (this.parentElement) {\r\n this.parentElement.ariaHasPopup = null;\r\n this.parentElement.ariaExpanded = null;\r\n if (this.control?.id) {\r\n removeAriaReferencedId(this.parentElement, \"aria-controls\", this.control.id);\r\n }\r\n }\r\n\r\n super.detach();\r\n }\r\n\r\n /** @inheritdoc */\r\n override _onClick(): void {\r\n if (this.parentElement) {\r\n this.menu?.toggle(this.parentElement);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-fab-menu-trigger\": M3eFabMenuTriggerElement;\r\n }\r\n}\r\n"],"names":["M3eFabMenuElement","SuppressInitialAnimation","AttachInternals","Role","LitElement","constructor","_M3eFabMenuElement_fabTabIndex","set","this","_M3eFabMenuElement_trigger","_M3eFabMenuElement_anchoringCleanup","_M3eFabMenuElement_listManager","RovingTabIndexManager","withWrap","withHomeAndEnd","withVerticalOrientation","_M3eFabMenuElement_keyDownHandler","e","__classPrivateFieldGet","call","_M3eFabMenuElement_scrollController","ScrollController","target","callback","hide","_M3eFabMenuElement_clickOutsideController","ClickOutsideController","_M3eFabMenuElement_toggleHandler","newState","observe","setTimeout","setActiveItem","items","find","x","disabled","unobserveAll","__classPrivateFieldSet","undefined","variant","isOpen","show","trigger","positionAnchor","position","inline","shift","flip","offset","y","setCustomState","includes","M3eDirectionality","current","style","right","window","innerWidth","clientWidth","left","top","showPopover","ariaExpanded","_M3eFabMenuElement_instances","_M3eFabMenuElement_attachFab","restoreFocus","focus","_M3eFabMenuElement_detachFab","unobserve","hidePopover","toggle","connectedCallback","super","tabIndex","setAttribute","addEventListener","disconnectedCallback","removeEventListener","render","html","_M3eFabMenuElement_handleSlotChange","added","setItems","querySelectorAll","activeItem","updateActiveItem","key","shiftKey","ctrlKey","onKeyDown","fab","closest","filter","styles","css","unsafeCSS","DesignToken","motion","spring","fastEffects","fastSpatial","color","onPrimaryContainer","primaryContainer","onSecondaryContainer","secondaryContainer","onTertiaryContainer","tertiaryContainer","shape","corner","medium","__decorate","property","reflect","prototype","customElement","M3eFabMenuItemElement","KeyboardClick","LinkButton","Disabled","_M3eFabMenuItemElement_clickHandler","menu","firstUpdated","_changedProperties","_elevation","_focusRing","_stateLayer","_ripple","forEach","attach","renderPseudoLink","defaultPrevented","duration","short4","easing","standard","typescale","label","large","fontSize","fontWeight","lineHeight","tracking","full","onSurface","query","M3eFabMenuTriggerElement","HtmlFor","ActionElementBase","control","parentElement","ariaHasPopup","id","addAriaReferencedId","detach","removeAriaReferencedId","_onClick"],"mappings":"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"}
@@ -446,7 +446,7 @@ _M3eFormFieldElement_handleErrorChange = function _M3eFormFieldElement_handleErr
446
446
  }
447
447
  };
448
448
  (() => {
449
- registerStyleSheet(css`m3e-form-field input::placeholder, m3e-form-field textarea::placeholder { user-select: none; color: currentColor; transition: opacity ${DesignToken.motion.duration.extraLong1}; } m3e-form-field[float-label="auto"]:not(:is(:state(--float-label), :--float-label)):is( :state(--with-label), :--with-label ) input::placeholder, m3e-form-field[float-label="auto"]:not(:is(:state(--float-label), :--float-label)):is( :state(--with-label), :--with-label ) textarea::placeholder { opacity: 0; transition: opacity 0s; } m3e-form-field[variant="outlined"] m3e-input-chip-set { margin-block: calc(calc(3.5rem + ${DesignToken.density.calc(-3)}) / 4); } @media (prefers-reduced-motion) { m3e-form-field input::placeholder, m3e-form-field textarea::placeholder { transition: none !important; } }`);
449
+ registerStyleSheet(css`m3e-form-field input::placeholder, m3e-form-field textarea::placeholder { user-select: none; color: currentColor; transition: opacity ${DesignToken.motion.duration.extraLong1}; } m3e-form-field[float-label="auto"]:not(:is(:state(--float-label), :--float-label)):is( :state(--with-label), :--with-label ) input::placeholder, m3e-form-field[float-label="auto"]:not(:is(:state(--float-label), :--float-label)):is( :state(--with-label), :--with-label ) textarea::placeholder { opacity: 0; transition: opacity 0s; } m3e-form-field[variant="outlined"] m3e-input-chip-set { margin-block: calc(calc(3.5rem + ${DesignToken.density.calc(-3)}) / 4); } m3e-form-field[variant="outlined"] textarea { margin-block: calc( var(--m3e-form-field-label-line-height, var(--md-sys-typescale-body-small-line-height, 1rem)) / 2 ); } @media (prefers-reduced-motion) { m3e-form-field input::placeholder, m3e-form-field textarea::placeholder { transition: none !important; } }`);
450
450
  })();
451
451
  /** The styles of the element. */
452
452
  M3eFormFieldElement.styles = css`:host { display: inline-flex; flex-direction: column; vertical-align: middle; font-size: var(--m3e-form-field-font-size, ${DesignToken.typescale.standard.body.large.fontSize}); font-weight: var(--m3e-form-field-font-weight, ${DesignToken.typescale.standard.body.large.fontWeight}); line-height: var(--m3e-form-field-line-height, ${DesignToken.typescale.standard.body.large.lineHeight}); letter-spacing: var(--m3e-form-field-tracking, ${DesignToken.typescale.standard.body.large.tracking}); width: var(--m3e-form-field-width, 14.5rem); color: var(--_form-field-color); } :host(:not(:is(:state(--disabled), :--disabled))) .base { cursor: var(--_form-field-cursor); } .base { display: flex; align-items: center; position: relative; min-height: calc(3.5rem + ${DesignToken.density.calc(-3)}); --_form-field-label-font-size: var( --m3e-form-field-label-font-size, ${DesignToken.typescale.standard.body.small.fontSize} ); --_form-field-label-line-height: var( --m3e-form-field-label-line-height, ${DesignToken.typescale.standard.body.small.lineHeight} ); } .content { display: flex; align-items: center; position: relative; flex: 1 1 auto; min-width: 0; min-height: var(--m3e-form-field-icon-size, 1.5rem); } .prefix, .suffix { display: flex; align-items: center; position: relative; user-select: none; flex: none; font-size: var(--m3e-form-field-icon-size, 1.5rem); } .prefix-text, .suffix-text { opacity: 1; transition: opacity ${DesignToken.motion.duration.extraLong1}; user-select: none; flex: none; } .input { display: inline-flex; flex-wrap: wrap; flex: 1 1 auto; min-width: 0; } .label { display: flex; position: absolute; pointer-events: none; user-select: none; top: 0; left: 0; right: 0; font-size: var(--m3e-form-field-label-font-size, ${DesignToken.typescale.standard.body.small.fontSize}); font-weight: var(--m3e-form-field-label-font-weight, ${DesignToken.typescale.standard.body.small.fontWeight}); line-height: var(--m3e-form-field-label-line-height, ${DesignToken.typescale.standard.body.small.lineHeight}); letter-spacing: var(--m3e-form-field-label-tracking, ${DesignToken.typescale.standard.body.small.tracking}); color: var(--_form-field-label-color, inherit); transition: ${unsafeCSS(`top ${DesignToken.motion.duration.short4},
@@ -1 +1 @@
1
- {"version":3,"file":"form-field.js","sources":["../../src/form-field/FormFieldControl.ts","../../src/form-field/FormFieldElement.ts"],"sourcesContent":["/**\r\n * Adapted from Angular Material Form Field Control\r\n * Source: https://github.com/angular/components/blob/main/src/material/form-field/form-field-control.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\n/** An interface which allows a control to work inside of a `M3eFormField`. */\r\nexport interface FormFieldControl extends HTMLElement {\r\n /** A value indicating whether the control is disabled. */\r\n disabled: boolean;\r\n\r\n /** The value of the control. */\r\n value?: unknown;\r\n\r\n /** A value indicating whether the control is required. */\r\n required?: boolean;\r\n\r\n /** A value indicated whether the content of the control is read-only. */\r\n readonly?: boolean;\r\n\r\n /** A value indicating whether the form field's label should try to float. */\r\n readonly shouldLabelFloat?: boolean;\r\n\r\n /** The error message that would be displayed if the user submits the form, or an empty string if no error message. */\r\n readonly validationMessage?: string;\r\n\r\n /** The `HTMLFormElement` associated with this element. */\r\n readonly form?: HTMLFormElement | null;\r\n\r\n /**\r\n * Handles the click event on the control's container.\r\n * @param {MouseEvent} event The `MouseEvent`.\r\n */\r\n onContainerClick?: (event: MouseEvent) => void;\r\n\r\n /**\r\n * Returns `true` if the element has no validity problems; otherwise,\r\n * returns `false`, fires an invalid event.\r\n */\r\n checkValidity?: () => boolean;\r\n}\r\n\r\nconst KNOWN_FORM_FIELD_TAGS = [\"m3e-input-chip-set\", \"m3e-select\"];\r\n\r\n/**\r\n * Determines whether a value is a `FormFieldControl`.\r\n * @param {unknown} value The value to test.\r\n * @returns {value is FormFieldControl} A value indicating whether `value` is a `FormFieldControl`.\r\n */\r\nexport function isFormFieldControl(value: unknown): value is FormFieldControl {\r\n return (\r\n value instanceof HTMLElement &&\r\n (value instanceof HTMLInputElement ||\r\n value instanceof HTMLTextAreaElement ||\r\n value instanceof HTMLSelectElement ||\r\n KNOWN_FORM_FIELD_TAGS.includes(value.tagName.toLowerCase()))\r\n );\r\n}\r\n\r\n/**\r\n * Locates the first `FormFieldControl` in a given slot.\r\n * @param {HTMLSlotElement} slot The slot in which to locate a `FormFieldControl`.\r\n * @returns {FormFieldControl | null} The `FormFieldControl` located in `slot`.\r\n */\r\nexport function findFormFieldControl(slot: HTMLSlotElement): FormFieldControl | null {\r\n for (const element of slot.assignedElements({ flatten: true })) {\r\n if (isFormFieldControl(element)) {\r\n return element;\r\n }\r\n\r\n const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT);\r\n while (walker.nextNode()) {\r\n if (isFormFieldControl(walker.currentNode)) {\r\n return walker.currentNode;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n","/**\r\n * Adapted from Angular Material Form Field\r\n * Source: https://github.com/angular/components/blob/main/src/material/form-field/form-field.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n FocusController,\r\n getTextContent,\r\n hasAssignedNodes,\r\n hasCustomState,\r\n HoverController,\r\n interceptProperty,\r\n isReadOnlyMixin,\r\n MutationController,\r\n PressedController,\r\n ReconnectedCallback,\r\n registerStyleSheet,\r\n ResizeController,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { M3eAriaDescriber } from \"@m3e/web/core/a11y\";\r\n\r\nimport { findFormFieldControl, FormFieldControl } from \"./FormFieldControl\";\r\nimport { FormFieldVariant } from \"./FormFieldVariant\";\r\nimport { HideSubscriptType } from \"./HideSubscriptType\";\r\nimport { FloatLabelType } from \"./FloatLabelType\";\r\n\r\n/**\r\n * A container for form controls that applies Material Design styling and behavior.\r\n *\r\n * @description\r\n * The `m3e-form-field` component is a semantic, expressive container for form controls that anchors\r\n * label behavior, subscript messaging, and variant-specific layout. Designed according to Material Design 3\r\n * guidelines, it supports two visual variants—`outlined` and `filled`—each with dynamic elevation,\r\n * shape transitions, and adaptive color theming. The component responds to control state changes\r\n * (focus, hover, press, disabled, invalid) with smooth motion and semantic clarity, ensuring\r\n * visual hierarchy and emotional resonance.\r\n\r\n * The component is accessible by default, with ARIA annotations, contrast-safe color tokens,\r\n * and dynamic descriptions for hint and error messaging. It supports prefix and suffix content,\r\n * floating labels, and adaptive subscript visibility. When hosting a control with validation,\r\n * error messages are surfaced with `aria-invalid` and described for assistive technology.\r\n\r\n * Native form controls may not expose full state or messaging on their own. `m3e-form-field` bridges\r\n * these gaps by coordinating label floating, container styling, and subscript feedback.\r\n *\r\n * @example\r\n * The following example illustrates a basic usage of the `m3e-form-field`.\r\n * ```html\r\n * <m3e-form-field>\r\n * <label slot=\"label\" for=\"field\">Text field</label>\r\n * <input id=\"field\" />\r\n * </m3e-form-field>\r\n * ```\r\n * \r\n * @tag m3e-form-field\r\n *\r\n * @slot - Renders the control of the field.\r\n * @slot prefix - Renders content before the fields's control.\r\n * @slot prefix-text - Renders text before the fields's control.\r\n * @slot suffix - Renders content after the fields's control.\r\n * @slot suffix-text - Renders text after the fields's control.\r\n * @slot hint - Renders hint text in the fields's subscript, when the control is valid.\r\n * @slot error - Renders error text in the fields's subscript, when the control is invalid.\r\n *\r\n * @attr float-label - Specifies whether the label should float always or only when necessary.\r\n * @attr hide-required-marker - Whether the required marker should be hidden.\r\n * @attr hide-subscript - Whether subscript content is hidden.\r\n * @attr variant - The appearance variant of the field.\r\n *\r\n * @cssprop --m3e-form-field-font-size - Font size for the form field container text.\r\n * @cssprop --m3e-form-field-font-weight - Font weight for the form field container text.\r\n * @cssprop --m3e-form-field-line-height - Line height for the form field container text.\r\n * @cssprop --m3e-form-field-tracking - Letter spacing for the form field container text.\r\n * @cssprop --m3e-form-field-label-font-size - Font size for the floating label.\r\n * @cssprop --m3e-form-field-label-font-weight - Font weight for the floating label.\r\n * @cssprop --m3e-form-field-label-line-height - Line height for the floating label.\r\n * @cssprop --m3e-form-field-label-tracking - Letter spacing for the floating label.\r\n * @cssprop --m3e-form-field-subscript-font-size - Font size for hint and error text.\r\n * @cssprop --m3e-form-field-subscript-font-weight - Font weight for hint and error text.\r\n * @cssprop --m3e-form-field-subscript-line-height - Line height for hint and error text.\r\n * @cssprop --m3e-form-field-subscript-tracking - Letter spacing for hint and error text.\r\n * @cssprop --m3e-form-field-color - Text color for the form field container.\r\n * @cssprop --m3e-form-field-subscript-color - Color for hint and error text.\r\n * @cssprop --m3e-form-field-invalid-color - Color used when the control is invalid.\r\n * @cssprop --m3e-form-field-focused-outline-color - Outline color when focused.\r\n * @cssprop --m3e-form-field-focused-color - Label color when focused.\r\n * @cssprop --m3e-form-field-outline-color - Outline color in outlined variant.\r\n * @cssprop --m3e-form-field-container-color - Background color in filled variant.\r\n * @cssprop --m3e-form-field-hover-container-color - Hover background color in filled variant.\r\n * @cssprop --m3e-form-field-width - Width of the form field container.\r\n * @cssprop --m3e-form-field-icon-size - Size of prefix and suffix icons.\r\n * @cssprop --m3e-outlined-form-field-container-shape - Corner radius for outlined container.\r\n * @cssprop --m3e-form-field-container-shape - Corner radius for filled container.\r\n * @cssprop --m3e-form-field-hover-container-opacity - Opacity for hover background in filled variant.\r\n * @cssprop --m3e-form-field-disabled-opacity - Opacity for disabled text.\r\n * @cssprop --m3e-form-field-disabled-container-opacity - Opacity for disabled container background.\r\n */\r\n@customElement(\"m3e-form-field\")\r\nexport class M3eFormFieldElement extends ReconnectedCallback(AttachInternals(LitElement)) {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-form-field input::placeholder,\r\n m3e-form-field textarea::placeholder {\r\n user-select: none;\r\n color: currentColor;\r\n transition: opacity ${DesignToken.motion.duration.extraLong1};\r\n }\r\n m3e-form-field[float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(\r\n :state(--with-label),\r\n :--with-label\r\n )\r\n input::placeholder,\r\n m3e-form-field[float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(\r\n :state(--with-label),\r\n :--with-label\r\n )\r\n textarea::placeholder {\r\n opacity: 0;\r\n transition: opacity 0s;\r\n }\r\n m3e-form-field[variant=\"outlined\"] m3e-input-chip-set {\r\n margin-block: calc(calc(3.5rem + ${DesignToken.density.calc(-3)}) / 4);\r\n }\r\n @media (prefers-reduced-motion) {\r\n m3e-form-field input::placeholder,\r\n m3e-form-field textarea::placeholder {\r\n transition: none !important;\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: inline-flex;\r\n flex-direction: column;\r\n vertical-align: middle;\r\n font-size: var(--m3e-form-field-font-size, ${DesignToken.typescale.standard.body.large.fontSize});\r\n font-weight: var(--m3e-form-field-font-weight, ${DesignToken.typescale.standard.body.large.fontWeight});\r\n line-height: var(--m3e-form-field-line-height, ${DesignToken.typescale.standard.body.large.lineHeight});\r\n letter-spacing: var(--m3e-form-field-tracking, ${DesignToken.typescale.standard.body.large.tracking});\r\n width: var(--m3e-form-field-width, 14.5rem);\r\n color: var(--_form-field-color);\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled))) .base {\r\n cursor: var(--_form-field-cursor);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n min-height: calc(3.5rem + ${DesignToken.density.calc(-3)});\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n --_form-field-label-line-height: var(\r\n --m3e-form-field-label-line-height,\r\n ${DesignToken.typescale.standard.body.small.lineHeight}\r\n );\r\n }\r\n .content {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n min-height: var(--m3e-form-field-icon-size, 1.5rem);\r\n }\r\n .prefix,\r\n .suffix {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n user-select: none;\r\n flex: none;\r\n font-size: var(--m3e-form-field-icon-size, 1.5rem);\r\n }\r\n .prefix-text,\r\n .suffix-text {\r\n opacity: 1;\r\n transition: opacity ${DesignToken.motion.duration.extraLong1};\r\n user-select: none;\r\n flex: none;\r\n }\r\n .input {\r\n display: inline-flex;\r\n flex-wrap: wrap;\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n .label {\r\n display: flex;\r\n position: absolute;\r\n pointer-events: none;\r\n user-select: none;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n font-size: var(--m3e-form-field-label-font-size, ${DesignToken.typescale.standard.body.small.fontSize});\r\n font-weight: var(--m3e-form-field-label-font-weight, ${DesignToken.typescale.standard.body.small.fontWeight});\r\n line-height: var(--m3e-form-field-label-line-height, ${DesignToken.typescale.standard.body.small.lineHeight});\r\n letter-spacing: var(--m3e-form-field-label-tracking, ${DesignToken.typescale.standard.body.small.tracking});\r\n color: var(--_form-field-label-color, inherit);\r\n transition: ${unsafeCSS(\r\n `top ${DesignToken.motion.duration.short4}, \r\n font-size ${DesignToken.motion.duration.short4}, \r\n line-height ${DesignToken.motion.duration.short4}`,\r\n )};\r\n }\r\n :host(:is(:state(--with-select), :--with-select)) .label {\r\n margin-inline-end: 1.5rem;\r\n }\r\n ::slotted([slot=\"label\"]) {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n .subscript {\r\n display: inline-flex;\r\n width: 100%;\r\n margin-top: 0.25rem;\r\n font-size: var(--m3e-form-field-subscript-font-size, ${DesignToken.typescale.standard.body.small.fontSize});\r\n font-weight: var(--m3e-form-field-subscript-font-weight, ${DesignToken.typescale.standard.body.small.fontWeight});\r\n line-height: var(--m3e-form-field-subscript-line-height, ${DesignToken.typescale.standard.body.small.lineHeight});\r\n letter-spacing: var(--m3e-form-field-subscript-tracking, ${DesignToken.typescale.standard.body.small.tracking});\r\n min-height: var(--m3e-form-field-subscript-line-height, ${DesignToken.typescale.standard.body.small.lineHeight});\r\n color: var(--m3e-form-field-subscript-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n .error,\r\n .hint {\r\n flex: 1 1 auto;\r\n }\r\n :host([hide-subscript=\"always\"]) .subscript {\r\n display: none;\r\n }\r\n :host([hide-subscript=\"auto\"]:not(:is(:state(--invalid), :--invalid))) .subscript {\r\n opacity: 0;\r\n margin-top: 0.25rem;\r\n transform: translateY(-0.25rem);\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.duration.short4}, \r\n transform ${DesignToken.motion.duration.short4}`,\r\n )};\r\n }\r\n :host([hide-subscript=\"auto\"]:not(:is(:state(--invalid), :--invalid)):focus-within) .subscript,\r\n :host([hide-subscript=\"auto\"]:not(:is(:state(--invalid), :--invalid)):is(:state(--pressed), :--pressed))\r\n .subscript {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n :host(:is(:state(--invalid), :--invalid)) .hint {\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--invalid), :--invalid))) .error {\r\n display: none;\r\n }\r\n ::slotted(input),\r\n ::slotted(textarea),\r\n ::slotted(select) {\r\n outline: unset;\r\n border: unset;\r\n background-color: transparent;\r\n box-shadow: none;\r\n font-family: inherit;\r\n font-size: inherit;\r\n line-height: inherit;\r\n letter-spacing: inherit;\r\n color: var(--_form-field-input-color, inherit);\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n padding: unset;\r\n }\r\n ::slotted(textarea) {\r\n scrollbar-width: ${DesignToken.scrollbar.thinWidth};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n }\r\n ::slotted(m3e-select),\r\n ::slotted(m3e-input-chip-set) {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n :host([float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(:is(:state(--pressed), :--pressed)))\r\n .label {\r\n font-size: inherit;\r\n }\r\n\r\n :host([float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(:state(--with-label), :--with-label))\r\n .prefix-text,\r\n :host([float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(:state(--with-label), :--with-label))\r\n .suffix-text {\r\n opacity: 0;\r\n transition: opacity 0s;\r\n }\r\n .prefix {\r\n margin-inline-start: 1rem;\r\n }\r\n :host(:is(:state(--with-prefix), :--with-prefix)) .prefix {\r\n margin-inline-end: 1rem;\r\n margin-inline-start: 0.75rem;\r\n }\r\n .suffix {\r\n margin-inline-end: 1rem;\r\n }\r\n :host(:is(:state(--with-suffix), :--with-suffix)) .suffix {\r\n margin-inline-start: 0.25rem;\r\n margin-inline-end: 0.5rem;\r\n }\r\n :host(:is(:state(--with-suffix), :--with-suffix):is(:state(--with-select), :--with-select)) .suffix {\r\n margin-inline-start: unset;\r\n }\r\n :host(:is(:state(--with-select), :--with-select)) .suffix-text {\r\n display: none;\r\n }\r\n :host([variant=\"outlined\"]) .label {\r\n margin-top: calc(0px - var(--_form-field-label-line-height) / 2);\r\n }\r\n :host([variant=\"outlined\"]) .outline {\r\n position: absolute;\r\n display: flex;\r\n pointer-events: none;\r\n left: 0;\r\n top: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n :host([variant=\"outlined\"]) .pseudo-label {\r\n visibility: hidden;\r\n margin-inline-end: 0.5rem;\r\n font-size: var(--_form-field-label-font-size);\r\n line-height: var(--_form-field-label-line-height);\r\n letter-spacing: var(--_form-field-label-tracking);\r\n max-width: 100%;\r\n transition-property: max-width, margin-inline-end;\r\n transition-duration: 1ms;\r\n }\r\n :host(\r\n :is(:state(--required), :--required):not([hide-required-marker]):not(:is(:state(--with-label), :--with-label))\r\n )\r\n .pseudo-label,\r\n :host(\r\n :is(:state(--required), :--required):not([hide-required-marker]):not(:is(:state(--with-label), :--with-label))\r\n )\r\n .required-marker {\r\n display: none;\r\n }\r\n :host([variant=\"outlined\"]:is(:state(--required), :--required):not([hide-required-marker])) .pseudo-label {\r\n margin-inline-end: 0.25rem;\r\n }\r\n :host(\r\n [variant=\"outlined\"][float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(\r\n :is(:state(--pressed), :--pressed)\r\n )\r\n )\r\n .pseudo-label {\r\n max-width: 0;\r\n margin-inline-end: 0px;\r\n transition-delay: ${DesignToken.motion.duration.short2};\r\n }\r\n :host([variant=\"outlined\"]) .outline-start,\r\n :host([variant=\"outlined\"]) .outline-notch,\r\n :host([variant=\"outlined\"]) .outline-end {\r\n box-sizing: border-box;\r\n border-width: var(--_form-field-outline-size, 1px);\r\n border-color: var(--_form-field-outline-color);\r\n transition: border-color ${DesignToken.motion.duration.short4};\r\n }\r\n :host([variant=\"outlined\"]:not(:is(:state(--with-label), :--with-label))) .outline-notch {\r\n display: none;\r\n }\r\n :host([variant=\"outlined\"]) .outline-start {\r\n min-width: 0.75rem;\r\n border-top-style: solid;\r\n border-inline-start-style: solid;\r\n border-bottom-style: solid;\r\n border-start-start-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n border-end-start-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n }\r\n :host([variant=\"outlined\"]) .outline-notch {\r\n border-bottom-style: solid;\r\n }\r\n :host([variant=\"outlined\"]) .outline-end {\r\n flex-grow: 1;\r\n min-width: 1rem;\r\n border-top-style: solid;\r\n border-inline-end-style: solid;\r\n border-bottom-style: solid;\r\n border-start-end-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n border-end-end-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n }\r\n :host([variant=\"outlined\"]:is(:state(--with-prefix), :--with-prefix)) .outline-start {\r\n min-width: calc(1.25rem + var(--_prefix-width, 0px) + 0.25rem);\r\n }\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled))) .base:hover .outline,\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):focus-within) .outline,\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):is(:state(--pressed), :--pressed)) .outline {\r\n --_form-field-outline-size: 2px;\r\n }\r\n :host([variant=\"outlined\"]) .subscript {\r\n margin-inline: 1rem;\r\n width: calc(100% - 2rem);\r\n }\r\n :host([variant=\"outlined\"]) .content {\r\n min-height: calc(3.5rem + ${DesignToken.density.calc(-3)});\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n }\r\n :host(\r\n [variant=\"outlined\"][float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(\r\n :is(:state(--pressed), :--pressed)\r\n )\r\n )\r\n .label {\r\n margin-top: unset;\r\n line-height: calc(3.5rem + ${DesignToken.density.calc(-3)});\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n }\r\n :host([variant=\"filled\"]) .base {\r\n --_select-arrow-margin-top: calc(\r\n 0px - calc(1rem / max(calc(0 - calc(var(--md-sys-density-scale, 0) + var(--md-sys-density-scale, 0))), 1))\r\n );\r\n }\r\n :host([variant=\"filled\"]) .base::before {\r\n content: \"\";\r\n box-sizing: border-box;\r\n position: absolute;\r\n pointer-events: none;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n border-bottom-style: solid;\r\n border-width: 1px;\r\n border-radius: var(--m3e-form-field-container-shape, ${DesignToken.shape.corner.extraSmallTop});\r\n border-color: var(--_form-field-outline-color);\r\n background-color: var(--_form-field-container-color);\r\n }\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled))) .base:hover::before,\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):focus-within) .base::before,\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):is(:state(--pressed), :--pressed))\r\n .base::before {\r\n border-width: 3px;\r\n }\r\n :host([variant=\"filled\"]) .base::after {\r\n content: \"\";\r\n box-sizing: border-box;\r\n position: absolute;\r\n pointer-events: none;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: var(--_form-field-hover-container-color);\r\n transition: background-color ${DesignToken.motion.duration.short4};\r\n }\r\n :host([variant=\"filled\"]) .subscript {\r\n margin-inline: 1rem;\r\n width: calc(100% - 2rem);\r\n }\r\n :host([variant=\"filled\"]) .content {\r\n padding-top: calc(1.5rem + ${DesignToken.density.calc(-3)});\r\n margin-bottom: 0.5rem;\r\n }\r\n :host([variant=\"filled\"]) .label {\r\n top: max(0px, calc(0.5rem + ${DesignToken.density.calc(-3)}));\r\n }\r\n :host(\r\n [variant=\"filled\"][float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(\r\n :is(:state(--pressed), :--pressed)\r\n )\r\n )\r\n .label {\r\n top: 0px;\r\n line-height: calc(3.5rem + ${DesignToken.density.calc(-3)} - 0.0625rem);\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):not(:focus-within):not(:is(:state(--pressed), :--pressed)))\r\n .base:hover {\r\n --_form-field-hover-container-color: color-mix(\r\n in srgb,\r\n var(--m3e-form-field-hover-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-form-field-hover-container-opacity, 8%),\r\n transparent\r\n );\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid))) {\r\n color: var(--m3e-form-field-color, ${DesignToken.color.onSurface});\r\n }\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid)))\r\n .base {\r\n --_form-field-outline-color: var(--m3e-form-field-outline-color, ${DesignToken.color.outline});\r\n }\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid))) .base {\r\n --_form-field-outline-color: var(--m3e-form-field-outline-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(\r\n [variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):not(\r\n :is(:state(--invalid), :--invalid)\r\n ):focus-within\r\n )\r\n .base,\r\n :host(\r\n [variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid)):is(\r\n :state(--pressed),\r\n :--pressed\r\n )\r\n )\r\n .base,\r\n :host(\r\n [variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):not(\r\n :is(:state(--invalid), :--invalid)\r\n ):focus-within\r\n )\r\n .base,\r\n :host(\r\n [variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid)):is(\r\n :state(--pressed),\r\n :--pressed\r\n )\r\n )\r\n .base {\r\n --_form-field-outline-color: var(--m3e-form-field-focused-outline-color, ${DesignToken.color.primary});\r\n --_form-field-label-color: var(--m3e-form-field-focused-color, ${DesignToken.color.primary});\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled))) .base {\r\n --_form-field-container-color: var(\r\n --m3e-form-field-container-color,\r\n ${DesignToken.color.surfaceContainerHighest}\r\n );\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):is(:state(--invalid), :--invalid)) .base {\r\n --_form-field-label-color: var(--m3e-form-field-invalid-color, ${DesignToken.color.error});\r\n --_form-field-outline-color: var(--m3e-form-field-invalid-color, ${DesignToken.color.error});\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):is(:state(--invalid), :--invalid)) .subscript {\r\n color: var(--m3e-form-field-invalid-color, ${DesignToken.color.error});\r\n }\r\n :host(:is(:state(--disabled), :--disabled)) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-form-field-disabled-color, ${DesignToken.color.onSurface}) var(--m3e-form-field-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:is(:state(--disabled), :--disabled)) .base {\r\n --_form-field-container-color: color-mix(\r\n in srgb,\r\n var(--m3e-form-field-disabled-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-form-field-disabled-container-opacity, 4%),\r\n transparent\r\n );\r\n }\r\n :host(:is(:state(--no-animate), :--no-animate)) *,\r\n :host(:is(:state(--no-animate), :--no-animate)) *::before,\r\n :host(:is(:state(--no-animate), :--no-animate)) *::after {\r\n transition: none !important;\r\n }\r\n @media (forced-colors: active) {\r\n :host([variant=\"filled\"]) .base::after {\r\n transition: none;\r\n }\r\n :host {\r\n --_form-field-outline-color: CanvasText;\r\n }\r\n :host(:is(:state(--disabled), :--disabled)) {\r\n --_form-field-input-color: GrayText;\r\n --_form-field-color: GrayText;\r\n --_form-field-label-color: GrayText;\r\n --_form-field-outline-color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base::before,\r\n .prefix-text,\r\n .suffix-text,\r\n .label,\r\n .subscript,\r\n .outline-start,\r\n .outline-notch,\r\n .outline-end,\r\n .pseudo-label {\r\n transition: none !important;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ #control: FormFieldControl | null = null;\r\n /** @private */ #removeValueInterceptor?: () => void;\r\n /** @private */ readonly #formResetHandler = () => this.#handleFormReset();\r\n /** @private */ readonly #controlInvalidHandler = () => this.#handleControlInvalid();\r\n\r\n /** @private */\r\n readonly #controlMutationController = new MutationController(this, {\r\n target: null,\r\n config: { attributeFilter: [\"disabled\", \"readonly\", \"required\"] },\r\n callback: () => this.notifyControlStateChange(),\r\n });\r\n\r\n /** @private */\r\n readonly #resizeController = new ResizeController(this, {\r\n target: null,\r\n callback: () => this.#handlePrefixResize(),\r\n });\r\n\r\n /** @private */\r\n readonly #focusController = new FocusController(this, {\r\n target: null,\r\n filter: (e) => this.#ignoreEvent(e),\r\n callback: (focused) => {\r\n focused = focused && !(this.#control?.disabled ?? true);\r\n setCustomState(this, \"--no-animate\", false);\r\n this.#focused = focused;\r\n if (focused) {\r\n setCustomState(this, \"--float-label\", true);\r\n } else {\r\n this._invalid = !(this.#control?.checkValidity?.() ?? true);\r\n this.notifyControlStateChange();\r\n }\r\n },\r\n });\r\n\r\n /** @private */ @query(\".base\") private readonly _base!: HTMLElement;\r\n /** @private */ @query(\".prefix\") private readonly _prefix!: HTMLElement;\r\n /** @private */ @query(\".suffix\") private readonly _suffix!: HTMLElement;\r\n /** @private */ @query(\".error\") private readonly _error!: HTMLElement;\r\n /** @private */ @query(\".hint\") private readonly _hint!: HTMLElement;\r\n\r\n /** @private */\r\n readonly #hintMutationController = new MutationController(this, {\r\n target: null,\r\n config: { childList: true, subtree: true },\r\n callback: () => this.#handleHintChange(),\r\n });\r\n\r\n /** @private */\r\n readonly #errorMutationController = new MutationController(this, {\r\n target: null,\r\n config: { childList: true, subtree: true },\r\n callback: () => this.#handleErrorChange(),\r\n });\r\n\r\n /** @private */\r\n readonly #pressedController = new PressedController(this, {\r\n target: null,\r\n filter: (e) => this.#ignoreEvent(e),\r\n callback: (pressed) => setCustomState(this, \"--pressed\", pressed && !(this.#control?.disabled ?? true)),\r\n });\r\n\r\n /** @private */ #focused = false;\r\n /** @private */ @state() private _pseudoLabel = \"\";\r\n /** @private */ @state() private _required = false;\r\n /** @private */ @state() private _invalid = false;\r\n /** @private */ @state() private _validationMessage = \"\";\r\n /** @private */ #hintText = \"\";\r\n /** @private */ #errorText = \"\";\r\n\r\n constructor() {\r\n super();\r\n\r\n new HoverController(this, { callback: () => setCustomState(this, \"--no-animate\", false) });\r\n }\r\n\r\n /** @private */\r\n get #shouldFloatLabel(): boolean {\r\n return this.#control?.shouldLabelFloat !== undefined\r\n ? this.#control.shouldLabelFloat === true\r\n : typeof this.#control?.value == \"string\" && this.#control.value.length > 0;\r\n }\r\n\r\n /** A reference to the element used to anchor dropdown menus. */\r\n get menuAnchor() {\r\n return this._base;\r\n }\r\n\r\n /** A reference to the hosted form field control. */\r\n get control() {\r\n return this.#control;\r\n }\r\n\r\n /**\r\n * The appearance variant of the field.\r\n * @default \"outlined\"\r\n */\r\n @property({ reflect: true }) variant: FormFieldVariant = \"outlined\";\r\n\r\n /**\r\n * Whether the required marker should be hidden.\r\n * @default false\r\n */\r\n @property({ attribute: \"hide-required-marker\", type: Boolean, reflect: true }) hideRequiredMarker = false;\r\n\r\n /**\r\n * Whether subscript content is hidden.\r\n * @default \"auto\"\r\n */\r\n @property({ attribute: \"hide-subscript\", reflect: true }) hideSubscript: HideSubscriptType = \"auto\";\r\n\r\n /**\r\n * Specifies whether the label should float always or only when necessary.\r\n * @default \"auto\"\r\n */\r\n @property({ attribute: \"float-label\", reflect: true }) floatLabel: FloatLabelType = \"auto\";\r\n\r\n /**\r\n * Notifies the form field that the state of the hosted `control` has changed.\r\n * @param {boolean} [checkValidity=false] Whether to check validity.\r\n */\r\n notifyControlStateChange(checkValidity: boolean = false): void {\r\n this._required = this.#control?.required === true;\r\n setCustomState(this, \"--required\", this._required);\r\n setCustomState(this, \"--disabled\", this.#control?.disabled === true);\r\n setCustomState(this, \"--readonly\", isReadOnlyMixin(this.#control) && this.#control.readOnly === true);\r\n if (this.floatLabel === \"auto\") {\r\n setCustomState(this, \"--float-label\", this.#shouldFloatLabel || this.#focused);\r\n }\r\n\r\n if (checkValidity) {\r\n this._invalid = !(this.#control?.checkValidity?.() ?? true);\r\n }\r\n\r\n setCustomState(this, \"--invalid\", this._invalid);\r\n\r\n this._validationMessage = this.#control?.validationMessage ?? \"\";\r\n if (!this.isUpdatePending) {\r\n this.performUpdate();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n // Label animations are disabled on initial paint.\r\n setCustomState(this, \"--no-animate\", true);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.#changeControl(null);\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 protected 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 update(changedProperties: PropertyValues): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"_invalid\") && this.#control) {\r\n this.#control.ariaInvalid = this._invalid ? \"true\" : null;\r\n\r\n if (this.#errorText) {\r\n if (this._invalid) {\r\n M3eAriaDescriber.describe(this.#control, this.#errorText);\r\n } else {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#errorText);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" @click=\"${this.#handleContainerClick}\">\r\n ${this.variant === \"outlined\"\r\n ? html`<div class=\"outline\" aria-hidden=\"true\">\r\n <div class=\"outline-start\"></div>\r\n <div class=\"outline-notch\">\r\n <div class=\"pseudo-label\">\r\n ${this._pseudoLabel} ${!this.hideRequiredMarker && this._required ? html`&nbsp;*` : nothing}\r\n </div>\r\n </div>\r\n <div class=\"outline-end\"></div>\r\n </div>`\r\n : nothing}\r\n <div class=\"prefix\">\r\n <slot name=\"prefix\" @slotchange=\"${this.#handlePrefixSlotChange}\"></slot>\r\n </div>\r\n <div class=\"content\">\r\n <span class=\"prefix-text\"><slot name=\"prefix-text\"></slot></span>\r\n <span class=\"input\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\" @change=\"${this.#handleControlChange}\"></slot>\r\n </span>\r\n <span class=\"suffix-text\"><slot name=\"suffix-text\"></slot></span>\r\n <span class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleLabelSlotChange}\"></slot>\r\n ${!this.hideRequiredMarker && this._required\r\n ? html`<span class=\"required-marker\" aria-hidden=\"true\">&nbsp;*</span>`\r\n : nothing}\r\n </span>\r\n </div>\r\n <div class=\"suffix\">\r\n <slot name=\"suffix\" @slotchange=\"${this.#handleSuffixSlotChange}\"></slot>\r\n </div>\r\n </div>\r\n <span class=\"subscript\" aria-hidden=\"true\">\r\n <span class=\"error\"><slot name=\"error\">${this._validationMessage}</slot></span>\r\n <span class=\"hint\"><slot name=\"hint\"></slot></span>\r\n </span>`;\r\n }\r\n\r\n /** @private */\r\n #initialize(): void {\r\n this.#focusController.observe(this._base);\r\n this.#pressedController.observe(this._base);\r\n\r\n this.#hintMutationController.observe(this._hint);\r\n this.#handleHintChange();\r\n\r\n this.#errorMutationController.observe(this._error);\r\n this.#handleErrorChange();\r\n }\r\n\r\n /** @private */\r\n #handleLabelSlotChange(e: Event): void {\r\n const assignedElements = (<HTMLSlotElement>e.target).assignedElements({ flatten: true });\r\n setCustomState(this, \"--with-label\", assignedElements.length > 0);\r\n this._pseudoLabel = assignedElements[0]?.textContent ?? \"\";\r\n }\r\n\r\n /** @private */\r\n #handlePrefixSlotChange(e: Event): void {\r\n setCustomState(this, \"--with-prefix\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n this.#resizeController.observe(this._prefix);\r\n }\r\n\r\n /** @private */\r\n #handleSuffixSlotChange(e: Event): void {\r\n setCustomState(this, \"--with-suffix\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handlePrefixResize(): void {\r\n if (this.variant === \"outlined\") {\r\n this._base.style.setProperty(\"--_prefix-width\", `${this._prefix.clientWidth}px`);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#changeControl(findFormFieldControl(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleContainerClick(e: MouseEvent): void {\r\n if (this.#ignoreEvent(e)) return;\r\n\r\n if (this.#control && !this.#focused && !this.#control.disabled) {\r\n if (this.#control.onContainerClick) {\r\n this.#control.onContainerClick(e);\r\n } else {\r\n this.#control.focus();\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleControlInvalid(): void {\r\n this._invalid = true;\r\n this.notifyControlStateChange();\r\n }\r\n\r\n /** @private */\r\n #handleControlChange(): void {\r\n this._invalid = !(this.#control?.checkValidity?.() ?? true);\r\n this.notifyControlStateChange();\r\n }\r\n\r\n /** @private */\r\n #handleFormReset(): void {\r\n this._invalid = false;\r\n setTimeout(() => this.notifyControlStateChange());\r\n }\r\n\r\n /** @private */\r\n #ignoreEvent(e: Event): boolean {\r\n return e.composed && e.composedPath().includes(this._suffix);\r\n }\r\n\r\n /** @private */\r\n #changeControl(control: FormFieldControl | null): void {\r\n if (this.#control === control) return;\r\n if (this.#control) {\r\n if (this.#hintText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#hintText);\r\n }\r\n if (this.#errorText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#errorText);\r\n }\r\n\r\n this.#controlMutationController.unobserve(this.#control);\r\n this.#control.removeEventListener(\"invalid\", this.#controlInvalidHandler);\r\n this.#control.form?.removeEventListener(\"reset\", this.#formResetHandler);\r\n this.#removeValueInterceptor?.();\r\n this.#removeValueInterceptor = undefined;\r\n }\r\n this.#control = control;\r\n\r\n if ([\"INPUT\", \"TEXTAREA\"].includes(this.#control?.tagName ?? \"\")) {\r\n this._base.style.setProperty(\"--_form-field-cursor\", \"text\");\r\n } else {\r\n this._base.style.removeProperty(\"--_form-field-cursor\");\r\n }\r\n\r\n setCustomState(this, \"--with-select\", this.#control?.tagName === \"M3E-SELECT\");\r\n if (hasCustomState(this, \"--with-select\")) {\r\n this._base.style.setProperty(\"--_form-field-cursor\", \"pointer\");\r\n }\r\n\r\n if (this.#control) {\r\n this.#controlMutationController.observe(this.#control);\r\n this.#control.addEventListener(\"invalid\", this.#controlInvalidHandler);\r\n this.#control.form?.addEventListener(\"reset\", this.#formResetHandler);\r\n this.#control.removeAttribute(\"aria-invalid\");\r\n\r\n if (this.#hintText) {\r\n M3eAriaDescriber.describe(this.#control, this.#hintText);\r\n }\r\n\r\n this.notifyControlStateChange();\r\n\r\n const tagname = this.#control.tagName.toLowerCase();\r\n if (tagname.startsWith(\"m3e-\") && !customElements.get(tagname)) {\r\n customElements.whenDefined(tagname).then(() => this.#bindValueInterceptor());\r\n } else {\r\n this.#bindValueInterceptor();\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #bindValueInterceptor(): void {\r\n if (!this.#control) return;\r\n this.#removeValueInterceptor = interceptProperty(this.#control, \"value\", {\r\n set: (value, setter) => {\r\n setter(value);\r\n this.notifyControlStateChange(true);\r\n },\r\n });\r\n }\r\n\r\n /** @private */\r\n #handleHintChange(): void {\r\n const hintText = getTextContent(this._hint, true);\r\n if (hintText === this.#hintText) return;\r\n\r\n if (this.#control && this.#hintText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#hintText);\r\n }\r\n\r\n this.#hintText = hintText;\r\n\r\n if (this.#control && this.#hintText) {\r\n M3eAriaDescriber.describe(this.#control, this.#hintText);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleErrorChange(): void {\r\n const errorText = getTextContent(this._error, true);\r\n if (errorText === this.#errorText) return;\r\n\r\n if (this.#control && this.#errorText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#errorText);\r\n }\r\n\r\n this.#errorText = errorText;\r\n\r\n if (this.#control && this.#errorText && this._invalid) {\r\n M3eAriaDescriber.describe(this.#control, this.#errorText);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-form-field\": M3eFormFieldElement;\r\n }\r\n}\r\n"],"names":["KNOWN_FORM_FIELD_TAGS","isFormFieldControl","value","HTMLElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","includes","tagName","toLowerCase","findFormFieldControl","slot","element","assignedElements","flatten","walker","document","createTreeWalker","NodeFilter","SHOW_ELEMENT","nextNode","currentNode","M3eFormFieldElement","ReconnectedCallback","AttachInternals","LitElement","constructor","_M3eFormFieldElement_control","set","_M3eFormFieldElement_removeValueInterceptor","_M3eFormFieldElement_formResetHandler","__classPrivateFieldGet","_M3eFormFieldElement_instances","_M3eFormFieldElement_handleFormReset","call","_M3eFormFieldElement_controlInvalidHandler","_M3eFormFieldElement_handleControlInvalid","_M3eFormFieldElement_controlMutationController","MutationController","target","config","attributeFilter","callback","notifyControlStateChange","_M3eFormFieldElement_resizeController","ResizeController","_M3eFormFieldElement_handlePrefixResize","_M3eFormFieldElement_focusController","FocusController","filter","e","_M3eFormFieldElement_ignoreEvent","focused","disabled","setCustomState","__classPrivateFieldSet","_M3eFormFieldElement_focused","_invalid","checkValidity","_M3eFormFieldElement_hintMutationController","childList","subtree","_M3eFormFieldElement_handleHintChange","_M3eFormFieldElement_errorMutationController","_M3eFormFieldElement_handleErrorChange","_M3eFormFieldElement_pressedController","PressedController","pressed","_pseudoLabel","_required","_validationMessage","_M3eFormFieldElement_hintText","_M3eFormFieldElement_errorText","variant","hideRequiredMarker","hideSubscript","floatLabel","HoverController","menuAnchor","_base","control","required","isReadOnlyMixin","readOnly","_M3eFormFieldElement_shouldFloatLabel_get","validationMessage","isUpdatePending","performUpdate","connectedCallback","disconnectedCallback","_M3eFormFieldElement_changeControl","reconnectedCallback","_M3eFormFieldElement_initialize","firstUpdated","_changedProperties","update","changedProperties","has","ariaInvalid","M3eAriaDescriber","describe","removeDescription","render","html","_M3eFormFieldElement_handleContainerClick","nothing","_M3eFormFieldElement_handlePrefixSlotChange","_M3eFormFieldElement_handleSlotChange","_M3eFormFieldElement_handleControlChange","_M3eFormFieldElement_handleLabelSlotChange","_M3eFormFieldElement_handleSuffixSlotChange","shouldLabelFloat","undefined","length","observe","_hint","_error","textContent","hasAssignedNodes","_prefix","style","setProperty","clientWidth","onContainerClick","focus","setTimeout","composed","composedPath","_suffix","unobserve","removeEventListener","form","removeProperty","hasCustomState","addEventListener","removeAttribute","tagname","startsWith","customElements","get","whenDefined","then","_M3eFormFieldElement_bindValueInterceptor","interceptProperty","setter","hintText","getTextContent","errorText","registerStyleSheet","css","DesignToken","motion","duration","extraLong1","density","calc","styles","typescale","standard","body","large","fontSize","fontWeight","lineHeight","tracking","small","unsafeCSS","short4","color","onSurfaceVariant","scrollbar","thinWidth","short2","shape","corner","extraSmall","extraSmallTop","onSurface","outline","primary","surfaceContainerHighest","error","__decorate","query","prototype","state","property","reflect","attribute","type","Boolean","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"form-field.js","sources":["../../src/form-field/FormFieldControl.ts","../../src/form-field/FormFieldElement.ts"],"sourcesContent":["/**\r\n * Adapted from Angular Material Form Field Control\r\n * Source: https://github.com/angular/components/blob/main/src/material/form-field/form-field-control.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\n/** An interface which allows a control to work inside of a `M3eFormField`. */\r\nexport interface FormFieldControl extends HTMLElement {\r\n /** A value indicating whether the control is disabled. */\r\n disabled: boolean;\r\n\r\n /** The value of the control. */\r\n value?: unknown;\r\n\r\n /** A value indicating whether the control is required. */\r\n required?: boolean;\r\n\r\n /** A value indicated whether the content of the control is read-only. */\r\n readonly?: boolean;\r\n\r\n /** A value indicating whether the form field's label should try to float. */\r\n readonly shouldLabelFloat?: boolean;\r\n\r\n /** The error message that would be displayed if the user submits the form, or an empty string if no error message. */\r\n readonly validationMessage?: string;\r\n\r\n /** The `HTMLFormElement` associated with this element. */\r\n readonly form?: HTMLFormElement | null;\r\n\r\n /**\r\n * Handles the click event on the control's container.\r\n * @param {MouseEvent} event The `MouseEvent`.\r\n */\r\n onContainerClick?: (event: MouseEvent) => void;\r\n\r\n /**\r\n * Returns `true` if the element has no validity problems; otherwise,\r\n * returns `false`, fires an invalid event.\r\n */\r\n checkValidity?: () => boolean;\r\n}\r\n\r\nconst KNOWN_FORM_FIELD_TAGS = [\"m3e-input-chip-set\", \"m3e-select\"];\r\n\r\n/**\r\n * Determines whether a value is a `FormFieldControl`.\r\n * @param {unknown} value The value to test.\r\n * @returns {value is FormFieldControl} A value indicating whether `value` is a `FormFieldControl`.\r\n */\r\nexport function isFormFieldControl(value: unknown): value is FormFieldControl {\r\n return (\r\n value instanceof HTMLElement &&\r\n (value instanceof HTMLInputElement ||\r\n value instanceof HTMLTextAreaElement ||\r\n value instanceof HTMLSelectElement ||\r\n KNOWN_FORM_FIELD_TAGS.includes(value.tagName.toLowerCase()))\r\n );\r\n}\r\n\r\n/**\r\n * Locates the first `FormFieldControl` in a given slot.\r\n * @param {HTMLSlotElement} slot The slot in which to locate a `FormFieldControl`.\r\n * @returns {FormFieldControl | null} The `FormFieldControl` located in `slot`.\r\n */\r\nexport function findFormFieldControl(slot: HTMLSlotElement): FormFieldControl | null {\r\n for (const element of slot.assignedElements({ flatten: true })) {\r\n if (isFormFieldControl(element)) {\r\n return element;\r\n }\r\n\r\n const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT);\r\n while (walker.nextNode()) {\r\n if (isFormFieldControl(walker.currentNode)) {\r\n return walker.currentNode;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n","/**\r\n * Adapted from Angular Material Form Field\r\n * Source: https://github.com/angular/components/blob/main/src/material/form-field/form-field.ts\r\n *\r\n * @license MIT\r\n * Copyright (c) 2025 Google LLC\r\n * See LICENSE file in the project root for full license text.\r\n */\r\n\r\nimport { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n DesignToken,\r\n FocusController,\r\n getTextContent,\r\n hasAssignedNodes,\r\n hasCustomState,\r\n HoverController,\r\n interceptProperty,\r\n isReadOnlyMixin,\r\n MutationController,\r\n PressedController,\r\n ReconnectedCallback,\r\n registerStyleSheet,\r\n ResizeController,\r\n setCustomState,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { M3eAriaDescriber } from \"@m3e/web/core/a11y\";\r\n\r\nimport { findFormFieldControl, FormFieldControl } from \"./FormFieldControl\";\r\nimport { FormFieldVariant } from \"./FormFieldVariant\";\r\nimport { HideSubscriptType } from \"./HideSubscriptType\";\r\nimport { FloatLabelType } from \"./FloatLabelType\";\r\n\r\n/**\r\n * A container for form controls that applies Material Design styling and behavior.\r\n *\r\n * @description\r\n * The `m3e-form-field` component is a semantic, expressive container for form controls that anchors\r\n * label behavior, subscript messaging, and variant-specific layout. Designed according to Material Design 3\r\n * guidelines, it supports two visual variants—`outlined` and `filled`—each with dynamic elevation,\r\n * shape transitions, and adaptive color theming. The component responds to control state changes\r\n * (focus, hover, press, disabled, invalid) with smooth motion and semantic clarity, ensuring\r\n * visual hierarchy and emotional resonance.\r\n\r\n * The component is accessible by default, with ARIA annotations, contrast-safe color tokens,\r\n * and dynamic descriptions for hint and error messaging. It supports prefix and suffix content,\r\n * floating labels, and adaptive subscript visibility. When hosting a control with validation,\r\n * error messages are surfaced with `aria-invalid` and described for assistive technology.\r\n\r\n * Native form controls may not expose full state or messaging on their own. `m3e-form-field` bridges\r\n * these gaps by coordinating label floating, container styling, and subscript feedback.\r\n *\r\n * @example\r\n * The following example illustrates a basic usage of the `m3e-form-field`.\r\n * ```html\r\n * <m3e-form-field>\r\n * <label slot=\"label\" for=\"field\">Text field</label>\r\n * <input id=\"field\" />\r\n * </m3e-form-field>\r\n * ```\r\n * \r\n * @tag m3e-form-field\r\n *\r\n * @slot - Renders the control of the field.\r\n * @slot prefix - Renders content before the fields's control.\r\n * @slot prefix-text - Renders text before the fields's control.\r\n * @slot suffix - Renders content after the fields's control.\r\n * @slot suffix-text - Renders text after the fields's control.\r\n * @slot hint - Renders hint text in the fields's subscript, when the control is valid.\r\n * @slot error - Renders error text in the fields's subscript, when the control is invalid.\r\n *\r\n * @attr float-label - Specifies whether the label should float always or only when necessary.\r\n * @attr hide-required-marker - Whether the required marker should be hidden.\r\n * @attr hide-subscript - Whether subscript content is hidden.\r\n * @attr variant - The appearance variant of the field.\r\n *\r\n * @cssprop --m3e-form-field-font-size - Font size for the form field container text.\r\n * @cssprop --m3e-form-field-font-weight - Font weight for the form field container text.\r\n * @cssprop --m3e-form-field-line-height - Line height for the form field container text.\r\n * @cssprop --m3e-form-field-tracking - Letter spacing for the form field container text.\r\n * @cssprop --m3e-form-field-label-font-size - Font size for the floating label.\r\n * @cssprop --m3e-form-field-label-font-weight - Font weight for the floating label.\r\n * @cssprop --m3e-form-field-label-line-height - Line height for the floating label.\r\n * @cssprop --m3e-form-field-label-tracking - Letter spacing for the floating label.\r\n * @cssprop --m3e-form-field-subscript-font-size - Font size for hint and error text.\r\n * @cssprop --m3e-form-field-subscript-font-weight - Font weight for hint and error text.\r\n * @cssprop --m3e-form-field-subscript-line-height - Line height for hint and error text.\r\n * @cssprop --m3e-form-field-subscript-tracking - Letter spacing for hint and error text.\r\n * @cssprop --m3e-form-field-color - Text color for the form field container.\r\n * @cssprop --m3e-form-field-subscript-color - Color for hint and error text.\r\n * @cssprop --m3e-form-field-invalid-color - Color used when the control is invalid.\r\n * @cssprop --m3e-form-field-focused-outline-color - Outline color when focused.\r\n * @cssprop --m3e-form-field-focused-color - Label color when focused.\r\n * @cssprop --m3e-form-field-outline-color - Outline color in outlined variant.\r\n * @cssprop --m3e-form-field-container-color - Background color in filled variant.\r\n * @cssprop --m3e-form-field-hover-container-color - Hover background color in filled variant.\r\n * @cssprop --m3e-form-field-width - Width of the form field container.\r\n * @cssprop --m3e-form-field-icon-size - Size of prefix and suffix icons.\r\n * @cssprop --m3e-outlined-form-field-container-shape - Corner radius for outlined container.\r\n * @cssprop --m3e-form-field-container-shape - Corner radius for filled container.\r\n * @cssprop --m3e-form-field-hover-container-opacity - Opacity for hover background in filled variant.\r\n * @cssprop --m3e-form-field-disabled-opacity - Opacity for disabled text.\r\n * @cssprop --m3e-form-field-disabled-container-opacity - Opacity for disabled container background.\r\n */\r\n@customElement(\"m3e-form-field\")\r\nexport class M3eFormFieldElement extends ReconnectedCallback(AttachInternals(LitElement)) {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-form-field input::placeholder,\r\n m3e-form-field textarea::placeholder {\r\n user-select: none;\r\n color: currentColor;\r\n transition: opacity ${DesignToken.motion.duration.extraLong1};\r\n }\r\n m3e-form-field[float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(\r\n :state(--with-label),\r\n :--with-label\r\n )\r\n input::placeholder,\r\n m3e-form-field[float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(\r\n :state(--with-label),\r\n :--with-label\r\n )\r\n textarea::placeholder {\r\n opacity: 0;\r\n transition: opacity 0s;\r\n }\r\n m3e-form-field[variant=\"outlined\"] m3e-input-chip-set {\r\n margin-block: calc(calc(3.5rem + ${DesignToken.density.calc(-3)}) / 4);\r\n }\r\n m3e-form-field[variant=\"outlined\"] textarea {\r\n margin-block: calc(\r\n var(--m3e-form-field-label-line-height, var(--md-sys-typescale-body-small-line-height, 1rem)) / 2\r\n );\r\n }\r\n @media (prefers-reduced-motion) {\r\n m3e-form-field input::placeholder,\r\n m3e-form-field textarea::placeholder {\r\n transition: none !important;\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: inline-flex;\r\n flex-direction: column;\r\n vertical-align: middle;\r\n font-size: var(--m3e-form-field-font-size, ${DesignToken.typescale.standard.body.large.fontSize});\r\n font-weight: var(--m3e-form-field-font-weight, ${DesignToken.typescale.standard.body.large.fontWeight});\r\n line-height: var(--m3e-form-field-line-height, ${DesignToken.typescale.standard.body.large.lineHeight});\r\n letter-spacing: var(--m3e-form-field-tracking, ${DesignToken.typescale.standard.body.large.tracking});\r\n width: var(--m3e-form-field-width, 14.5rem);\r\n color: var(--_form-field-color);\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled))) .base {\r\n cursor: var(--_form-field-cursor);\r\n }\r\n .base {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n min-height: calc(3.5rem + ${DesignToken.density.calc(-3)});\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n --_form-field-label-line-height: var(\r\n --m3e-form-field-label-line-height,\r\n ${DesignToken.typescale.standard.body.small.lineHeight}\r\n );\r\n }\r\n .content {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n min-height: var(--m3e-form-field-icon-size, 1.5rem);\r\n }\r\n .prefix,\r\n .suffix {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n user-select: none;\r\n flex: none;\r\n font-size: var(--m3e-form-field-icon-size, 1.5rem);\r\n }\r\n .prefix-text,\r\n .suffix-text {\r\n opacity: 1;\r\n transition: opacity ${DesignToken.motion.duration.extraLong1};\r\n user-select: none;\r\n flex: none;\r\n }\r\n .input {\r\n display: inline-flex;\r\n flex-wrap: wrap;\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n .label {\r\n display: flex;\r\n position: absolute;\r\n pointer-events: none;\r\n user-select: none;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n font-size: var(--m3e-form-field-label-font-size, ${DesignToken.typescale.standard.body.small.fontSize});\r\n font-weight: var(--m3e-form-field-label-font-weight, ${DesignToken.typescale.standard.body.small.fontWeight});\r\n line-height: var(--m3e-form-field-label-line-height, ${DesignToken.typescale.standard.body.small.lineHeight});\r\n letter-spacing: var(--m3e-form-field-label-tracking, ${DesignToken.typescale.standard.body.small.tracking});\r\n color: var(--_form-field-label-color, inherit);\r\n transition: ${unsafeCSS(\r\n `top ${DesignToken.motion.duration.short4}, \r\n font-size ${DesignToken.motion.duration.short4}, \r\n line-height ${DesignToken.motion.duration.short4}`,\r\n )};\r\n }\r\n :host(:is(:state(--with-select), :--with-select)) .label {\r\n margin-inline-end: 1.5rem;\r\n }\r\n ::slotted([slot=\"label\"]) {\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n .subscript {\r\n display: inline-flex;\r\n width: 100%;\r\n margin-top: 0.25rem;\r\n font-size: var(--m3e-form-field-subscript-font-size, ${DesignToken.typescale.standard.body.small.fontSize});\r\n font-weight: var(--m3e-form-field-subscript-font-weight, ${DesignToken.typescale.standard.body.small.fontWeight});\r\n line-height: var(--m3e-form-field-subscript-line-height, ${DesignToken.typescale.standard.body.small.lineHeight});\r\n letter-spacing: var(--m3e-form-field-subscript-tracking, ${DesignToken.typescale.standard.body.small.tracking});\r\n min-height: var(--m3e-form-field-subscript-line-height, ${DesignToken.typescale.standard.body.small.lineHeight});\r\n color: var(--m3e-form-field-subscript-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n .error,\r\n .hint {\r\n flex: 1 1 auto;\r\n }\r\n :host([hide-subscript=\"always\"]) .subscript {\r\n display: none;\r\n }\r\n :host([hide-subscript=\"auto\"]:not(:is(:state(--invalid), :--invalid))) .subscript {\r\n opacity: 0;\r\n margin-top: 0.25rem;\r\n transform: translateY(-0.25rem);\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.duration.short4}, \r\n transform ${DesignToken.motion.duration.short4}`,\r\n )};\r\n }\r\n :host([hide-subscript=\"auto\"]:not(:is(:state(--invalid), :--invalid)):focus-within) .subscript,\r\n :host([hide-subscript=\"auto\"]:not(:is(:state(--invalid), :--invalid)):is(:state(--pressed), :--pressed))\r\n .subscript {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n :host(:is(:state(--invalid), :--invalid)) .hint {\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--invalid), :--invalid))) .error {\r\n display: none;\r\n }\r\n ::slotted(input),\r\n ::slotted(textarea),\r\n ::slotted(select) {\r\n outline: unset;\r\n border: unset;\r\n background-color: transparent;\r\n box-shadow: none;\r\n font-family: inherit;\r\n font-size: inherit;\r\n line-height: inherit;\r\n letter-spacing: inherit;\r\n color: var(--_form-field-input-color, inherit);\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n padding: unset;\r\n }\r\n ::slotted(textarea) {\r\n scrollbar-width: ${DesignToken.scrollbar.thinWidth};\r\n scrollbar-color: ${DesignToken.scrollbar.color};\r\n }\r\n ::slotted(m3e-select),\r\n ::slotted(m3e-input-chip-set) {\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n }\r\n :host([float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(:is(:state(--pressed), :--pressed)))\r\n .label {\r\n font-size: inherit;\r\n }\r\n\r\n :host([float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(:state(--with-label), :--with-label))\r\n .prefix-text,\r\n :host([float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):is(:state(--with-label), :--with-label))\r\n .suffix-text {\r\n opacity: 0;\r\n transition: opacity 0s;\r\n }\r\n .prefix {\r\n margin-inline-start: 1rem;\r\n }\r\n :host(:is(:state(--with-prefix), :--with-prefix)) .prefix {\r\n margin-inline-end: 1rem;\r\n margin-inline-start: 0.75rem;\r\n }\r\n .suffix {\r\n margin-inline-end: 1rem;\r\n }\r\n :host(:is(:state(--with-suffix), :--with-suffix)) .suffix {\r\n margin-inline-start: 0.25rem;\r\n margin-inline-end: 0.5rem;\r\n }\r\n :host(:is(:state(--with-suffix), :--with-suffix):is(:state(--with-select), :--with-select)) .suffix {\r\n margin-inline-start: unset;\r\n }\r\n :host(:is(:state(--with-select), :--with-select)) .suffix-text {\r\n display: none;\r\n }\r\n :host([variant=\"outlined\"]) .label {\r\n margin-top: calc(0px - var(--_form-field-label-line-height) / 2);\r\n }\r\n :host([variant=\"outlined\"]) .outline {\r\n position: absolute;\r\n display: flex;\r\n pointer-events: none;\r\n left: 0;\r\n top: 0;\r\n bottom: 0;\r\n right: 0;\r\n }\r\n :host([variant=\"outlined\"]) .pseudo-label {\r\n visibility: hidden;\r\n margin-inline-end: 0.5rem;\r\n font-size: var(--_form-field-label-font-size);\r\n line-height: var(--_form-field-label-line-height);\r\n letter-spacing: var(--_form-field-label-tracking);\r\n max-width: 100%;\r\n transition-property: max-width, margin-inline-end;\r\n transition-duration: 1ms;\r\n }\r\n :host(\r\n :is(:state(--required), :--required):not([hide-required-marker]):not(:is(:state(--with-label), :--with-label))\r\n )\r\n .pseudo-label,\r\n :host(\r\n :is(:state(--required), :--required):not([hide-required-marker]):not(:is(:state(--with-label), :--with-label))\r\n )\r\n .required-marker {\r\n display: none;\r\n }\r\n :host([variant=\"outlined\"]:is(:state(--required), :--required):not([hide-required-marker])) .pseudo-label {\r\n margin-inline-end: 0.25rem;\r\n }\r\n :host(\r\n [variant=\"outlined\"][float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(\r\n :is(:state(--pressed), :--pressed)\r\n )\r\n )\r\n .pseudo-label {\r\n max-width: 0;\r\n margin-inline-end: 0px;\r\n transition-delay: ${DesignToken.motion.duration.short2};\r\n }\r\n :host([variant=\"outlined\"]) .outline-start,\r\n :host([variant=\"outlined\"]) .outline-notch,\r\n :host([variant=\"outlined\"]) .outline-end {\r\n box-sizing: border-box;\r\n border-width: var(--_form-field-outline-size, 1px);\r\n border-color: var(--_form-field-outline-color);\r\n transition: border-color ${DesignToken.motion.duration.short4};\r\n }\r\n :host([variant=\"outlined\"]:not(:is(:state(--with-label), :--with-label))) .outline-notch {\r\n display: none;\r\n }\r\n :host([variant=\"outlined\"]) .outline-start {\r\n min-width: 0.75rem;\r\n border-top-style: solid;\r\n border-inline-start-style: solid;\r\n border-bottom-style: solid;\r\n border-start-start-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n border-end-start-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n }\r\n :host([variant=\"outlined\"]) .outline-notch {\r\n border-bottom-style: solid;\r\n }\r\n :host([variant=\"outlined\"]) .outline-end {\r\n flex-grow: 1;\r\n min-width: 1rem;\r\n border-top-style: solid;\r\n border-inline-end-style: solid;\r\n border-bottom-style: solid;\r\n border-start-end-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n border-end-end-radius: var(--m3e-outlined-form-field-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n }\r\n :host([variant=\"outlined\"]:is(:state(--with-prefix), :--with-prefix)) .outline-start {\r\n min-width: calc(1.25rem + var(--_prefix-width, 0px) + 0.25rem);\r\n }\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled))) .base:hover .outline,\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):focus-within) .outline,\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):is(:state(--pressed), :--pressed)) .outline {\r\n --_form-field-outline-size: 2px;\r\n }\r\n :host([variant=\"outlined\"]) .subscript {\r\n margin-inline: 1rem;\r\n width: calc(100% - 2rem);\r\n }\r\n :host([variant=\"outlined\"]) .content {\r\n min-height: calc(3.5rem + ${DesignToken.density.calc(-3)});\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n }\r\n :host(\r\n [variant=\"outlined\"][float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(\r\n :is(:state(--pressed), :--pressed)\r\n )\r\n )\r\n .label {\r\n margin-top: unset;\r\n line-height: calc(3.5rem + ${DesignToken.density.calc(-3)});\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n }\r\n :host([variant=\"filled\"]) .base {\r\n --_select-arrow-margin-top: calc(\r\n 0px - calc(1rem / max(calc(0 - calc(var(--md-sys-density-scale, 0) + var(--md-sys-density-scale, 0))), 1))\r\n );\r\n }\r\n :host([variant=\"filled\"]) .base::before {\r\n content: \"\";\r\n box-sizing: border-box;\r\n position: absolute;\r\n pointer-events: none;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n border-bottom-style: solid;\r\n border-width: 1px;\r\n border-radius: var(--m3e-form-field-container-shape, ${DesignToken.shape.corner.extraSmallTop});\r\n border-color: var(--_form-field-outline-color);\r\n background-color: var(--_form-field-container-color);\r\n }\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled))) .base:hover::before,\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):focus-within) .base::before,\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):is(:state(--pressed), :--pressed))\r\n .base::before {\r\n border-width: 3px;\r\n }\r\n :host([variant=\"filled\"]) .base::after {\r\n content: \"\";\r\n box-sizing: border-box;\r\n position: absolute;\r\n pointer-events: none;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background-color: var(--_form-field-hover-container-color);\r\n transition: background-color ${DesignToken.motion.duration.short4};\r\n }\r\n :host([variant=\"filled\"]) .subscript {\r\n margin-inline: 1rem;\r\n width: calc(100% - 2rem);\r\n }\r\n :host([variant=\"filled\"]) .content {\r\n padding-top: calc(1.5rem + ${DesignToken.density.calc(-3)});\r\n margin-bottom: 0.5rem;\r\n }\r\n :host([variant=\"filled\"]) .label {\r\n top: max(0px, calc(0.5rem + ${DesignToken.density.calc(-3)}));\r\n }\r\n :host(\r\n [variant=\"filled\"][float-label=\"auto\"]:not(:is(:state(--float-label), :--float-label)):not(\r\n :is(:state(--pressed), :--pressed)\r\n )\r\n )\r\n .label {\r\n top: 0px;\r\n line-height: calc(3.5rem + ${DesignToken.density.calc(-3)} - 0.0625rem);\r\n --_form-field-label-font-size: var(\r\n --m3e-form-field-label-font-size,\r\n ${DesignToken.typescale.standard.body.small.fontSize}\r\n );\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):not(:focus-within):not(:is(:state(--pressed), :--pressed)))\r\n .base:hover {\r\n --_form-field-hover-container-color: color-mix(\r\n in srgb,\r\n var(--m3e-form-field-hover-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-form-field-hover-container-opacity, 8%),\r\n transparent\r\n );\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid))) {\r\n color: var(--m3e-form-field-color, ${DesignToken.color.onSurface});\r\n }\r\n :host([variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid)))\r\n .base {\r\n --_form-field-outline-color: var(--m3e-form-field-outline-color, ${DesignToken.color.outline});\r\n }\r\n :host([variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid))) .base {\r\n --_form-field-outline-color: var(--m3e-form-field-outline-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(\r\n [variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):not(\r\n :is(:state(--invalid), :--invalid)\r\n ):focus-within\r\n )\r\n .base,\r\n :host(\r\n [variant=\"outlined\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid)):is(\r\n :state(--pressed),\r\n :--pressed\r\n )\r\n )\r\n .base,\r\n :host(\r\n [variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):not(\r\n :is(:state(--invalid), :--invalid)\r\n ):focus-within\r\n )\r\n .base,\r\n :host(\r\n [variant=\"filled\"]:not(:is(:state(--disabled), :--disabled)):not(:is(:state(--invalid), :--invalid)):is(\r\n :state(--pressed),\r\n :--pressed\r\n )\r\n )\r\n .base {\r\n --_form-field-outline-color: var(--m3e-form-field-focused-outline-color, ${DesignToken.color.primary});\r\n --_form-field-label-color: var(--m3e-form-field-focused-color, ${DesignToken.color.primary});\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled))) .base {\r\n --_form-field-container-color: var(\r\n --m3e-form-field-container-color,\r\n ${DesignToken.color.surfaceContainerHighest}\r\n );\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):is(:state(--invalid), :--invalid)) .base {\r\n --_form-field-label-color: var(--m3e-form-field-invalid-color, ${DesignToken.color.error});\r\n --_form-field-outline-color: var(--m3e-form-field-invalid-color, ${DesignToken.color.error});\r\n }\r\n :host(:not(:is(:state(--disabled), :--disabled)):is(:state(--invalid), :--invalid)) .subscript {\r\n color: var(--m3e-form-field-invalid-color, ${DesignToken.color.error});\r\n }\r\n :host(:is(:state(--disabled), :--disabled)) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-form-field-disabled-color, ${DesignToken.color.onSurface}) var(--m3e-form-field-disabled-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:is(:state(--disabled), :--disabled)) .base {\r\n --_form-field-container-color: color-mix(\r\n in srgb,\r\n var(--m3e-form-field-disabled-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-form-field-disabled-container-opacity, 4%),\r\n transparent\r\n );\r\n }\r\n :host(:is(:state(--no-animate), :--no-animate)) *,\r\n :host(:is(:state(--no-animate), :--no-animate)) *::before,\r\n :host(:is(:state(--no-animate), :--no-animate)) *::after {\r\n transition: none !important;\r\n }\r\n @media (forced-colors: active) {\r\n :host([variant=\"filled\"]) .base::after {\r\n transition: none;\r\n }\r\n :host {\r\n --_form-field-outline-color: CanvasText;\r\n }\r\n :host(:is(:state(--disabled), :--disabled)) {\r\n --_form-field-input-color: GrayText;\r\n --_form-field-color: GrayText;\r\n --_form-field-label-color: GrayText;\r\n --_form-field-outline-color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base::before,\r\n .prefix-text,\r\n .suffix-text,\r\n .label,\r\n .subscript,\r\n .outline-start,\r\n .outline-notch,\r\n .outline-end,\r\n .pseudo-label {\r\n transition: none !important;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ #control: FormFieldControl | null = null;\r\n /** @private */ #removeValueInterceptor?: () => void;\r\n /** @private */ readonly #formResetHandler = () => this.#handleFormReset();\r\n /** @private */ readonly #controlInvalidHandler = () => this.#handleControlInvalid();\r\n\r\n /** @private */\r\n readonly #controlMutationController = new MutationController(this, {\r\n target: null,\r\n config: { attributeFilter: [\"disabled\", \"readonly\", \"required\"] },\r\n callback: () => this.notifyControlStateChange(),\r\n });\r\n\r\n /** @private */\r\n readonly #resizeController = new ResizeController(this, {\r\n target: null,\r\n callback: () => this.#handlePrefixResize(),\r\n });\r\n\r\n /** @private */\r\n readonly #focusController = new FocusController(this, {\r\n target: null,\r\n filter: (e) => this.#ignoreEvent(e),\r\n callback: (focused) => {\r\n focused = focused && !(this.#control?.disabled ?? true);\r\n setCustomState(this, \"--no-animate\", false);\r\n this.#focused = focused;\r\n if (focused) {\r\n setCustomState(this, \"--float-label\", true);\r\n } else {\r\n this._invalid = !(this.#control?.checkValidity?.() ?? true);\r\n this.notifyControlStateChange();\r\n }\r\n },\r\n });\r\n\r\n /** @private */ @query(\".base\") private readonly _base!: HTMLElement;\r\n /** @private */ @query(\".prefix\") private readonly _prefix!: HTMLElement;\r\n /** @private */ @query(\".suffix\") private readonly _suffix!: HTMLElement;\r\n /** @private */ @query(\".error\") private readonly _error!: HTMLElement;\r\n /** @private */ @query(\".hint\") private readonly _hint!: HTMLElement;\r\n\r\n /** @private */\r\n readonly #hintMutationController = new MutationController(this, {\r\n target: null,\r\n config: { childList: true, subtree: true },\r\n callback: () => this.#handleHintChange(),\r\n });\r\n\r\n /** @private */\r\n readonly #errorMutationController = new MutationController(this, {\r\n target: null,\r\n config: { childList: true, subtree: true },\r\n callback: () => this.#handleErrorChange(),\r\n });\r\n\r\n /** @private */\r\n readonly #pressedController = new PressedController(this, {\r\n target: null,\r\n filter: (e) => this.#ignoreEvent(e),\r\n callback: (pressed) => setCustomState(this, \"--pressed\", pressed && !(this.#control?.disabled ?? true)),\r\n });\r\n\r\n /** @private */ #focused = false;\r\n /** @private */ @state() private _pseudoLabel = \"\";\r\n /** @private */ @state() private _required = false;\r\n /** @private */ @state() private _invalid = false;\r\n /** @private */ @state() private _validationMessage = \"\";\r\n /** @private */ #hintText = \"\";\r\n /** @private */ #errorText = \"\";\r\n\r\n constructor() {\r\n super();\r\n\r\n new HoverController(this, { callback: () => setCustomState(this, \"--no-animate\", false) });\r\n }\r\n\r\n /** @private */\r\n get #shouldFloatLabel(): boolean {\r\n return this.#control?.shouldLabelFloat !== undefined\r\n ? this.#control.shouldLabelFloat === true\r\n : typeof this.#control?.value == \"string\" && this.#control.value.length > 0;\r\n }\r\n\r\n /** A reference to the element used to anchor dropdown menus. */\r\n get menuAnchor() {\r\n return this._base;\r\n }\r\n\r\n /** A reference to the hosted form field control. */\r\n get control() {\r\n return this.#control;\r\n }\r\n\r\n /**\r\n * The appearance variant of the field.\r\n * @default \"outlined\"\r\n */\r\n @property({ reflect: true }) variant: FormFieldVariant = \"outlined\";\r\n\r\n /**\r\n * Whether the required marker should be hidden.\r\n * @default false\r\n */\r\n @property({ attribute: \"hide-required-marker\", type: Boolean, reflect: true }) hideRequiredMarker = false;\r\n\r\n /**\r\n * Whether subscript content is hidden.\r\n * @default \"auto\"\r\n */\r\n @property({ attribute: \"hide-subscript\", reflect: true }) hideSubscript: HideSubscriptType = \"auto\";\r\n\r\n /**\r\n * Specifies whether the label should float always or only when necessary.\r\n * @default \"auto\"\r\n */\r\n @property({ attribute: \"float-label\", reflect: true }) floatLabel: FloatLabelType = \"auto\";\r\n\r\n /**\r\n * Notifies the form field that the state of the hosted `control` has changed.\r\n * @param {boolean} [checkValidity=false] Whether to check validity.\r\n */\r\n notifyControlStateChange(checkValidity: boolean = false): void {\r\n this._required = this.#control?.required === true;\r\n setCustomState(this, \"--required\", this._required);\r\n setCustomState(this, \"--disabled\", this.#control?.disabled === true);\r\n setCustomState(this, \"--readonly\", isReadOnlyMixin(this.#control) && this.#control.readOnly === true);\r\n if (this.floatLabel === \"auto\") {\r\n setCustomState(this, \"--float-label\", this.#shouldFloatLabel || this.#focused);\r\n }\r\n\r\n if (checkValidity) {\r\n this._invalid = !(this.#control?.checkValidity?.() ?? true);\r\n }\r\n\r\n setCustomState(this, \"--invalid\", this._invalid);\r\n\r\n this._validationMessage = this.#control?.validationMessage ?? \"\";\r\n if (!this.isUpdatePending) {\r\n this.performUpdate();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n // Label animations are disabled on initial paint.\r\n setCustomState(this, \"--no-animate\", true);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.#changeControl(null);\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 protected 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 update(changedProperties: PropertyValues): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"_invalid\") && this.#control) {\r\n this.#control.ariaInvalid = this._invalid ? \"true\" : null;\r\n\r\n if (this.#errorText) {\r\n if (this._invalid) {\r\n M3eAriaDescriber.describe(this.#control, this.#errorText);\r\n } else {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#errorText);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\" @click=\"${this.#handleContainerClick}\">\r\n ${this.variant === \"outlined\"\r\n ? html`<div class=\"outline\" aria-hidden=\"true\">\r\n <div class=\"outline-start\"></div>\r\n <div class=\"outline-notch\">\r\n <div class=\"pseudo-label\">\r\n ${this._pseudoLabel} ${!this.hideRequiredMarker && this._required ? html`&nbsp;*` : nothing}\r\n </div>\r\n </div>\r\n <div class=\"outline-end\"></div>\r\n </div>`\r\n : nothing}\r\n <div class=\"prefix\">\r\n <slot name=\"prefix\" @slotchange=\"${this.#handlePrefixSlotChange}\"></slot>\r\n </div>\r\n <div class=\"content\">\r\n <span class=\"prefix-text\"><slot name=\"prefix-text\"></slot></span>\r\n <span class=\"input\">\r\n <slot @slotchange=\"${this.#handleSlotChange}\" @change=\"${this.#handleControlChange}\"></slot>\r\n </span>\r\n <span class=\"suffix-text\"><slot name=\"suffix-text\"></slot></span>\r\n <span class=\"label\">\r\n <slot name=\"label\" @slotchange=\"${this.#handleLabelSlotChange}\"></slot>\r\n ${!this.hideRequiredMarker && this._required\r\n ? html`<span class=\"required-marker\" aria-hidden=\"true\">&nbsp;*</span>`\r\n : nothing}\r\n </span>\r\n </div>\r\n <div class=\"suffix\">\r\n <slot name=\"suffix\" @slotchange=\"${this.#handleSuffixSlotChange}\"></slot>\r\n </div>\r\n </div>\r\n <span class=\"subscript\" aria-hidden=\"true\">\r\n <span class=\"error\"><slot name=\"error\">${this._validationMessage}</slot></span>\r\n <span class=\"hint\"><slot name=\"hint\"></slot></span>\r\n </span>`;\r\n }\r\n\r\n /** @private */\r\n #initialize(): void {\r\n this.#focusController.observe(this._base);\r\n this.#pressedController.observe(this._base);\r\n\r\n this.#hintMutationController.observe(this._hint);\r\n this.#handleHintChange();\r\n\r\n this.#errorMutationController.observe(this._error);\r\n this.#handleErrorChange();\r\n }\r\n\r\n /** @private */\r\n #handleLabelSlotChange(e: Event): void {\r\n const assignedElements = (<HTMLSlotElement>e.target).assignedElements({ flatten: true });\r\n setCustomState(this, \"--with-label\", assignedElements.length > 0);\r\n this._pseudoLabel = assignedElements[0]?.textContent ?? \"\";\r\n }\r\n\r\n /** @private */\r\n #handlePrefixSlotChange(e: Event): void {\r\n setCustomState(this, \"--with-prefix\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n this.#resizeController.observe(this._prefix);\r\n }\r\n\r\n /** @private */\r\n #handleSuffixSlotChange(e: Event): void {\r\n setCustomState(this, \"--with-suffix\", hasAssignedNodes(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handlePrefixResize(): void {\r\n if (this.variant === \"outlined\") {\r\n this._base.style.setProperty(\"--_prefix-width\", `${this._prefix.clientWidth}px`);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#changeControl(findFormFieldControl(<HTMLSlotElement>e.target));\r\n }\r\n\r\n /** @private */\r\n #handleContainerClick(e: MouseEvent): void {\r\n if (this.#ignoreEvent(e)) return;\r\n\r\n if (this.#control && !this.#focused && !this.#control.disabled) {\r\n if (this.#control.onContainerClick) {\r\n this.#control.onContainerClick(e);\r\n } else {\r\n this.#control.focus();\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleControlInvalid(): void {\r\n this._invalid = true;\r\n this.notifyControlStateChange();\r\n }\r\n\r\n /** @private */\r\n #handleControlChange(): void {\r\n this._invalid = !(this.#control?.checkValidity?.() ?? true);\r\n this.notifyControlStateChange();\r\n }\r\n\r\n /** @private */\r\n #handleFormReset(): void {\r\n this._invalid = false;\r\n setTimeout(() => this.notifyControlStateChange());\r\n }\r\n\r\n /** @private */\r\n #ignoreEvent(e: Event): boolean {\r\n return e.composed && e.composedPath().includes(this._suffix);\r\n }\r\n\r\n /** @private */\r\n #changeControl(control: FormFieldControl | null): void {\r\n if (this.#control === control) return;\r\n if (this.#control) {\r\n if (this.#hintText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#hintText);\r\n }\r\n if (this.#errorText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#errorText);\r\n }\r\n\r\n this.#controlMutationController.unobserve(this.#control);\r\n this.#control.removeEventListener(\"invalid\", this.#controlInvalidHandler);\r\n this.#control.form?.removeEventListener(\"reset\", this.#formResetHandler);\r\n this.#removeValueInterceptor?.();\r\n this.#removeValueInterceptor = undefined;\r\n }\r\n this.#control = control;\r\n\r\n if ([\"INPUT\", \"TEXTAREA\"].includes(this.#control?.tagName ?? \"\")) {\r\n this._base.style.setProperty(\"--_form-field-cursor\", \"text\");\r\n } else {\r\n this._base.style.removeProperty(\"--_form-field-cursor\");\r\n }\r\n\r\n setCustomState(this, \"--with-select\", this.#control?.tagName === \"M3E-SELECT\");\r\n if (hasCustomState(this, \"--with-select\")) {\r\n this._base.style.setProperty(\"--_form-field-cursor\", \"pointer\");\r\n }\r\n\r\n if (this.#control) {\r\n this.#controlMutationController.observe(this.#control);\r\n this.#control.addEventListener(\"invalid\", this.#controlInvalidHandler);\r\n this.#control.form?.addEventListener(\"reset\", this.#formResetHandler);\r\n this.#control.removeAttribute(\"aria-invalid\");\r\n\r\n if (this.#hintText) {\r\n M3eAriaDescriber.describe(this.#control, this.#hintText);\r\n }\r\n\r\n this.notifyControlStateChange();\r\n\r\n const tagname = this.#control.tagName.toLowerCase();\r\n if (tagname.startsWith(\"m3e-\") && !customElements.get(tagname)) {\r\n customElements.whenDefined(tagname).then(() => this.#bindValueInterceptor());\r\n } else {\r\n this.#bindValueInterceptor();\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #bindValueInterceptor(): void {\r\n if (!this.#control) return;\r\n this.#removeValueInterceptor = interceptProperty(this.#control, \"value\", {\r\n set: (value, setter) => {\r\n setter(value);\r\n this.notifyControlStateChange(true);\r\n },\r\n });\r\n }\r\n\r\n /** @private */\r\n #handleHintChange(): void {\r\n const hintText = getTextContent(this._hint, true);\r\n if (hintText === this.#hintText) return;\r\n\r\n if (this.#control && this.#hintText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#hintText);\r\n }\r\n\r\n this.#hintText = hintText;\r\n\r\n if (this.#control && this.#hintText) {\r\n M3eAriaDescriber.describe(this.#control, this.#hintText);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleErrorChange(): void {\r\n const errorText = getTextContent(this._error, true);\r\n if (errorText === this.#errorText) return;\r\n\r\n if (this.#control && this.#errorText) {\r\n M3eAriaDescriber.removeDescription(this.#control, this.#errorText);\r\n }\r\n\r\n this.#errorText = errorText;\r\n\r\n if (this.#control && this.#errorText && this._invalid) {\r\n M3eAriaDescriber.describe(this.#control, this.#errorText);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-form-field\": M3eFormFieldElement;\r\n }\r\n}\r\n"],"names":["KNOWN_FORM_FIELD_TAGS","isFormFieldControl","value","HTMLElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","includes","tagName","toLowerCase","findFormFieldControl","slot","element","assignedElements","flatten","walker","document","createTreeWalker","NodeFilter","SHOW_ELEMENT","nextNode","currentNode","M3eFormFieldElement","ReconnectedCallback","AttachInternals","LitElement","constructor","_M3eFormFieldElement_control","set","_M3eFormFieldElement_removeValueInterceptor","_M3eFormFieldElement_formResetHandler","__classPrivateFieldGet","_M3eFormFieldElement_instances","_M3eFormFieldElement_handleFormReset","call","_M3eFormFieldElement_controlInvalidHandler","_M3eFormFieldElement_handleControlInvalid","_M3eFormFieldElement_controlMutationController","MutationController","target","config","attributeFilter","callback","notifyControlStateChange","_M3eFormFieldElement_resizeController","ResizeController","_M3eFormFieldElement_handlePrefixResize","_M3eFormFieldElement_focusController","FocusController","filter","e","_M3eFormFieldElement_ignoreEvent","focused","disabled","setCustomState","__classPrivateFieldSet","_M3eFormFieldElement_focused","_invalid","checkValidity","_M3eFormFieldElement_hintMutationController","childList","subtree","_M3eFormFieldElement_handleHintChange","_M3eFormFieldElement_errorMutationController","_M3eFormFieldElement_handleErrorChange","_M3eFormFieldElement_pressedController","PressedController","pressed","_pseudoLabel","_required","_validationMessage","_M3eFormFieldElement_hintText","_M3eFormFieldElement_errorText","variant","hideRequiredMarker","hideSubscript","floatLabel","HoverController","menuAnchor","_base","control","required","isReadOnlyMixin","readOnly","_M3eFormFieldElement_shouldFloatLabel_get","validationMessage","isUpdatePending","performUpdate","connectedCallback","disconnectedCallback","_M3eFormFieldElement_changeControl","reconnectedCallback","_M3eFormFieldElement_initialize","firstUpdated","_changedProperties","update","changedProperties","has","ariaInvalid","M3eAriaDescriber","describe","removeDescription","render","html","_M3eFormFieldElement_handleContainerClick","nothing","_M3eFormFieldElement_handlePrefixSlotChange","_M3eFormFieldElement_handleSlotChange","_M3eFormFieldElement_handleControlChange","_M3eFormFieldElement_handleLabelSlotChange","_M3eFormFieldElement_handleSuffixSlotChange","shouldLabelFloat","undefined","length","observe","_hint","_error","textContent","hasAssignedNodes","_prefix","style","setProperty","clientWidth","onContainerClick","focus","setTimeout","composed","composedPath","_suffix","unobserve","removeEventListener","form","removeProperty","hasCustomState","addEventListener","removeAttribute","tagname","startsWith","customElements","get","whenDefined","then","_M3eFormFieldElement_bindValueInterceptor","interceptProperty","setter","hintText","getTextContent","errorText","registerStyleSheet","css","DesignToken","motion","duration","extraLong1","density","calc","styles","typescale","standard","body","large","fontSize","fontWeight","lineHeight","tracking","small","unsafeCSS","short4","color","onSurfaceVariant","scrollbar","thinWidth","short2","shape","corner","extraSmall","extraSmallTop","onSurface","outline","primary","surfaceContainerHighest","error","__decorate","query","prototype","state","property","reflect","attribute","type","Boolean","customElement"],"mappings":"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"}