@m3e/web 2.5.5 → 2.5.7

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 (211) hide show
  1. package/README.md +1 -1
  2. package/dist/all.js +511 -248
  3. package/dist/all.js.map +1 -1
  4. package/dist/all.min.js +31 -31
  5. package/dist/all.min.js.map +1 -1
  6. package/dist/autocomplete.js +3 -3
  7. package/dist/autocomplete.js.map +1 -1
  8. package/dist/autocomplete.min.js.map +1 -1
  9. package/dist/bottom-sheet.js +5 -5
  10. package/dist/bottom-sheet.js.map +1 -1
  11. package/dist/bottom-sheet.min.js.map +1 -1
  12. package/dist/breadcrumb.js +1 -1
  13. package/dist/breadcrumb.js.map +1 -1
  14. package/dist/breadcrumb.min.js.map +1 -1
  15. package/dist/button.js +7 -8
  16. package/dist/button.js.map +1 -1
  17. package/dist/button.min.js +1 -1
  18. package/dist/button.min.js.map +1 -1
  19. package/dist/calendar.js +1 -1
  20. package/dist/calendar.js.map +1 -1
  21. package/dist/calendar.min.js.map +1 -1
  22. package/dist/card.js +1 -1
  23. package/dist/card.js.map +1 -1
  24. package/dist/card.min.js.map +1 -1
  25. package/dist/checkbox.js +10 -9
  26. package/dist/checkbox.js.map +1 -1
  27. package/dist/checkbox.min.js +1 -1
  28. package/dist/checkbox.min.js.map +1 -1
  29. package/dist/chips.js +17 -16
  30. package/dist/chips.js.map +1 -1
  31. package/dist/chips.min.js +1 -1
  32. package/dist/chips.min.js.map +1 -1
  33. package/dist/core.js +5 -5
  34. package/dist/core.js.map +1 -1
  35. package/dist/core.min.js.map +1 -1
  36. package/dist/css-custom-data.json +314 -314
  37. package/dist/custom-elements.json +5222 -4838
  38. package/dist/datepicker.js +26 -2
  39. package/dist/datepicker.js.map +1 -1
  40. package/dist/datepicker.min.js +1 -1
  41. package/dist/datepicker.min.js.map +1 -1
  42. package/dist/dialog.js +5 -5
  43. package/dist/dialog.js.map +1 -1
  44. package/dist/dialog.min.js.map +1 -1
  45. package/dist/drawer-container.js +1 -1
  46. package/dist/drawer-container.js.map +1 -1
  47. package/dist/drawer-container.min.js.map +1 -1
  48. package/dist/expansion-panel.js +5 -5
  49. package/dist/expansion-panel.js.map +1 -1
  50. package/dist/expansion-panel.min.js.map +1 -1
  51. package/dist/fab-menu.js +1 -1
  52. package/dist/fab-menu.js.map +1 -1
  53. package/dist/fab-menu.min.js.map +1 -1
  54. package/dist/fab.js +1 -1
  55. package/dist/fab.js.map +1 -1
  56. package/dist/fab.min.js.map +1 -1
  57. package/dist/html-custom-data.json +296 -291
  58. package/dist/icon-button.js +7 -8
  59. package/dist/icon-button.js.map +1 -1
  60. package/dist/icon-button.min.js +1 -1
  61. package/dist/icon-button.min.js.map +1 -1
  62. package/dist/list.js +17 -16
  63. package/dist/list.js.map +1 -1
  64. package/dist/list.min.js +1 -1
  65. package/dist/list.min.js.map +1 -1
  66. package/dist/menu.js +3 -3
  67. package/dist/menu.js.map +1 -1
  68. package/dist/menu.min.js.map +1 -1
  69. package/dist/nav-bar.js +12 -9
  70. package/dist/nav-bar.js.map +1 -1
  71. package/dist/nav-bar.min.js +1 -1
  72. package/dist/nav-bar.min.js.map +1 -1
  73. package/dist/nav-menu.js +5 -5
  74. package/dist/nav-menu.js.map +1 -1
  75. package/dist/nav-menu.min.js.map +1 -1
  76. package/dist/nav-rail.js +3 -1
  77. package/dist/nav-rail.js.map +1 -1
  78. package/dist/nav-rail.min.js.map +1 -1
  79. package/dist/paginator.js +1 -1
  80. package/dist/paginator.js.map +1 -1
  81. package/dist/paginator.min.js.map +1 -1
  82. package/dist/radio-group.js +12 -9
  83. package/dist/radio-group.js.map +1 -1
  84. package/dist/radio-group.min.js +1 -1
  85. package/dist/radio-group.min.js.map +1 -1
  86. package/dist/segmented-button.js +12 -11
  87. package/dist/segmented-button.js.map +1 -1
  88. package/dist/segmented-button.min.js +1 -1
  89. package/dist/segmented-button.min.js.map +1 -1
  90. package/dist/select.js +9 -9
  91. package/dist/select.js.map +1 -1
  92. package/dist/select.min.js +1 -1
  93. package/dist/select.min.js.map +1 -1
  94. package/dist/slide-group.js +6 -1
  95. package/dist/slide-group.js.map +1 -1
  96. package/dist/slide-group.min.js +1 -1
  97. package/dist/slide-group.min.js.map +1 -1
  98. package/dist/slider.js +46 -25
  99. package/dist/slider.js.map +1 -1
  100. package/dist/slider.min.js +1 -1
  101. package/dist/slider.min.js.map +1 -1
  102. package/dist/split-pane.js +17 -19
  103. package/dist/split-pane.js.map +1 -1
  104. package/dist/split-pane.min.js +1 -1
  105. package/dist/split-pane.min.js.map +1 -1
  106. package/dist/src/autocomplete/AutocompleteElement.d.ts +3 -3
  107. package/dist/src/autocomplete/AutocompleteQueryEventDetail.d.ts +1 -1
  108. package/dist/src/autocomplete/QueryEventDetail.d.ts +1 -1
  109. package/dist/src/bottom-sheet/BottomSheetElement.d.ts +5 -5
  110. package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts +1 -1
  111. package/dist/src/button/ButtonElement.d.ts +2 -1
  112. package/dist/src/button/ButtonElement.d.ts.map +1 -1
  113. package/dist/src/calendar/CalendarElement.d.ts +1 -1
  114. package/dist/src/card/CardElement.d.ts +1 -1
  115. package/dist/src/checkbox/CheckboxElement.d.ts +5 -4
  116. package/dist/src/checkbox/CheckboxElement.d.ts.map +1 -1
  117. package/dist/src/chips/AssistChipElement.d.ts +1 -1
  118. package/dist/src/chips/FilterChipElement.d.ts +4 -3
  119. package/dist/src/chips/FilterChipElement.d.ts.map +1 -1
  120. package/dist/src/chips/FilterChipSetElement.d.ts +3 -2
  121. package/dist/src/chips/FilterChipSetElement.d.ts.map +1 -1
  122. package/dist/src/chips/InputChipElement.d.ts +2 -2
  123. package/dist/src/chips/InputChipSetElement.d.ts +1 -1
  124. package/dist/src/chips/SuggestionChipElement.d.ts +1 -1
  125. package/dist/src/core/shared/primitives/CollapsibleElement.d.ts +4 -4
  126. package/dist/src/core/shared/primitives/TextHighlightElement.d.ts +1 -1
  127. package/dist/src/datepicker/DatepickerElement.d.ts +6 -0
  128. package/dist/src/datepicker/DatepickerElement.d.ts.map +1 -1
  129. package/dist/src/dialog/DialogElement.d.ts +5 -5
  130. package/dist/src/drawer-container/DrawerContainerElement.d.ts +1 -1
  131. package/dist/src/expansion-panel/ExpansionHeaderElement.d.ts +1 -1
  132. package/dist/src/expansion-panel/ExpansionPanelElement.d.ts +4 -4
  133. package/dist/src/fab/FabElement.d.ts +1 -1
  134. package/dist/src/fab-menu/FabMenuItemElement.d.ts +1 -1
  135. package/dist/src/icon-button/IconButtonElement.d.ts +2 -1
  136. package/dist/src/icon-button/IconButtonElement.d.ts.map +1 -1
  137. package/dist/src/list/ExpandableListItemElement.d.ts +4 -4
  138. package/dist/src/list/ListActionElement.d.ts +1 -1
  139. package/dist/src/list/ListOptionElement.d.ts +4 -3
  140. package/dist/src/list/ListOptionElement.d.ts.map +1 -1
  141. package/dist/src/list/SelectionListElement.d.ts +3 -2
  142. package/dist/src/list/SelectionListElement.d.ts.map +1 -1
  143. package/dist/src/menu/MenuItemCheckboxElement.d.ts +1 -1
  144. package/dist/src/menu/MenuItemElement.d.ts +1 -1
  145. package/dist/src/menu/MenuItemRadioElement.d.ts +1 -1
  146. package/dist/src/nav-bar/NavBarElement.d.ts +3 -1
  147. package/dist/src/nav-bar/NavBarElement.d.ts.map +1 -1
  148. package/dist/src/nav-bar/NavItemElement.d.ts +4 -3
  149. package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
  150. package/dist/src/nav-menu/NavMenuItemElement.d.ts +5 -5
  151. package/dist/src/nav-rail/NavRailElement.d.ts +3 -1
  152. package/dist/src/nav-rail/NavRailElement.d.ts.map +1 -1
  153. package/dist/src/paginator/PageEventDetail.d.ts +1 -1
  154. package/dist/src/paginator/PaginatorElement.d.ts +1 -1
  155. package/dist/src/paginator/PaginatorPageEventDetail.d.ts +1 -1
  156. package/dist/src/paginator/PaginatorPageEventDetail.d.ts.map +1 -1
  157. package/dist/src/radio-group/RadioElement.d.ts +4 -3
  158. package/dist/src/radio-group/RadioElement.d.ts.map +1 -1
  159. package/dist/src/radio-group/RadioGroupElement.d.ts +3 -1
  160. package/dist/src/radio-group/RadioGroupElement.d.ts.map +1 -1
  161. package/dist/src/search/SearchViewQueryEventDetail.d.ts +1 -1
  162. package/dist/src/segmented-button/ButtonSegmentElement.d.ts +4 -3
  163. package/dist/src/segmented-button/ButtonSegmentElement.d.ts.map +1 -1
  164. package/dist/src/segmented-button/SegmentedButtonElement.d.ts +3 -2
  165. package/dist/src/segmented-button/SegmentedButtonElement.d.ts.map +1 -1
  166. package/dist/src/select/SelectElement.d.ts +3 -2
  167. package/dist/src/select/SelectElement.d.ts.map +1 -1
  168. package/dist/src/slide-group/SlideGroupElement.d.ts.map +1 -1
  169. package/dist/src/slider/SliderElement.d.ts +4 -0
  170. package/dist/src/slider/SliderElement.d.ts.map +1 -1
  171. package/dist/src/slider/SliderThumbElement.d.ts +4 -3
  172. package/dist/src/slider/SliderThumbElement.d.ts.map +1 -1
  173. package/dist/src/split-pane/SplitPaneElement.d.ts +3 -2
  174. package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
  175. package/dist/src/stepper/StepElement.d.ts +4 -3
  176. package/dist/src/stepper/StepElement.d.ts.map +1 -1
  177. package/dist/src/stepper/StepperElement.d.ts +5 -1
  178. package/dist/src/stepper/StepperElement.d.ts.map +1 -1
  179. package/dist/src/switch/SwitchElement.d.ts +4 -3
  180. package/dist/src/switch/SwitchElement.d.ts.map +1 -1
  181. package/dist/src/tabs/TabElement.d.ts +4 -3
  182. package/dist/src/tabs/TabElement.d.ts.map +1 -1
  183. package/dist/src/tabs/TabsElement.d.ts +5 -2
  184. package/dist/src/tabs/TabsElement.d.ts.map +1 -1
  185. package/dist/src/theme/ThemeElement.d.ts.map +1 -1
  186. package/dist/src/toc/TocItemElement.d.ts +1 -1
  187. package/dist/src/tree/TreeElement.d.ts +1 -1
  188. package/dist/src/tree/TreeItemElement.d.ts +5 -5
  189. package/dist/stepper.js +26 -17
  190. package/dist/stepper.js.map +1 -1
  191. package/dist/stepper.min.js +1 -1
  192. package/dist/stepper.min.js.map +1 -1
  193. package/dist/switch.js +9 -8
  194. package/dist/switch.js.map +1 -1
  195. package/dist/switch.min.js +1 -1
  196. package/dist/switch.min.js.map +1 -1
  197. package/dist/tabs.js +198 -24
  198. package/dist/tabs.js.map +1 -1
  199. package/dist/tabs.min.js +1 -1
  200. package/dist/tabs.min.js.map +1 -1
  201. package/dist/theme.js +34 -13
  202. package/dist/theme.js.map +1 -1
  203. package/dist/theme.min.js +23 -23
  204. package/dist/theme.min.js.map +1 -1
  205. package/dist/toc.js +1 -1
  206. package/dist/toc.js.map +1 -1
  207. package/dist/toc.min.js.map +1 -1
  208. package/dist/tree.js +6 -6
  209. package/dist/tree.js.map +1 -1
  210. package/dist/tree.min.js.map +1 -1
  211. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"switch.min.js","sources":["../../src/switch/styles/SwitchToken.ts","../../src/switch/styles/SwitchHandleStyle.ts","../../src/switch/styles/SwitchIconStyle.ts","../../src/switch/styles/SwitchStateLayerStyle.ts","../../src/switch/styles/SwitchStyle.ts","../../src/switch/styles/SwitchTrackStyle.ts","../../src/switch/SwitchElement.ts"],"sourcesContent":["import { unsafeCSS } from \"lit\";\r\n\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\n/**\r\n * Component design tokens that control `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchToken = {\r\n selectedIconColor: unsafeCSS(`var(--m3e-switch-selected-icon-color, ${DesignToken.color.onPrimaryContainer})`),\r\n selectedIconSize: unsafeCSS(\"var(--m3e-switch-selected-icon-size, 1rem)\"),\r\n unselectedIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedIconSize: unsafeCSS(\"var(--m3e-switch-unselected-icon-size, 1rem)\"),\r\n trackHeight: unsafeCSS(\"var(--m3e-switch-track-height, 2rem)\"),\r\n trackWidth: unsafeCSS(\"var(--m3e-switch-track-width, 3.25rem)\"),\r\n trackOutlineColor: unsafeCSS(`var(--m3e-switch-track-outline-color, ${DesignToken.color.outline})`),\r\n trackOutlineWidth: unsafeCSS(\"var(--m3e-switch-track-outline-width, 2px)\"),\r\n trackShape: unsafeCSS(`var(--m3e-switch-track-shape, ${DesignToken.shape.corner.full})`),\r\n selectedTrackColor: unsafeCSS(`var(--m3e-switch-selected-track-color, ${DesignToken.color.primary})`),\r\n unselectedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedHandleHeight: unsafeCSS(\"var(--m3e-switch-unselected-handle-height, 1rem)\"),\r\n unselectedHandleWidth: unsafeCSS(\"var(--m3e-switch-unselected-handle-width, 1rem)\"),\r\n withIconHandleHeight: unsafeCSS(\"var(--m3e-switch-with-icon-handle-height, 1.5rem)\"),\r\n withIconHandleWidth: unsafeCSS(\"var(--m3e-switch-with-icon-handle-width, 1.5rem)\"),\r\n selectedHandleHeight: unsafeCSS(\"var(--m3e-switch-selected-handle-height, 1.5rem)\"),\r\n selectedHandleWidth: unsafeCSS(\"var(--m3e-switch-selected-handle-width, 1.5rem)\"),\r\n pressedHandleHeight: unsafeCSS(\"var(--m3e-switch-pressed-handle-height, 1.75rem)\"),\r\n pressedHandleWidth: unsafeCSS(\"var(--m3e-switch-pressed-handle-width, 1.75rem)\"),\r\n handleShape: unsafeCSS(`var(--m3e-switch-handle-shape, ${DesignToken.shape.corner.full})`),\r\n selectedHandleColor: unsafeCSS(`var(--m3e-switch-selected-handle-color, ${DesignToken.color.onPrimary})`),\r\n unselectedHandleColor: unsafeCSS(`var(--m3e-switch-unselected-handle-color, ${DesignToken.color.outline})`),\r\n stateLayerSize: unsafeCSS(\"var(--m3e-switch-state-layer-size, 2.5rem)\"),\r\n stateLayerShape: unsafeCSS(`var(--m3e-switch-state-layer-shape, ${DesignToken.shape.corner.full})`),\r\n disabledSelectedIconColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-selected-icon-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n disabledSelectedIconOpacity: unsafeCSS(\"var(--m3e-switch-disabled-selected-icon-opacity, 38%)\"),\r\n disabledUnselectedIconColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n disabledUnselectedIconOpacity: unsafeCSS(\"var(--m3e-switch-disabled-unselected-icon-opacity, 38%)\"),\r\n disabledTrackOpacity: unsafeCSS(\"var(--m3e-switch-disabled-track-opacity, 12%)\"),\r\n disabledSelectedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-selected-track-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n disabledUnselectedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n disabledUnselectedTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-track-outline-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n disabledUnselectedHandleOpacity: unsafeCSS(\"var(--m3e-switch-disabled-unselected-handle-opacity, 38%)\"),\r\n disabledSelectedHandleOpacity: unsafeCSS(\"var(--m3e-switch-disabled-selected-handle-opacity, 100%)\"),\r\n disabledSelectedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-selected-handle-color, ${DesignToken.color.surface})`,\r\n ),\r\n disabledUnselectedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-handle-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n selectedHoverIconColor: unsafeCSS(\r\n `var(--m3e-switch-selected-hover-icon-color, ${DesignToken.color.onPrimaryContainer})`,\r\n ),\r\n unselectedHoverIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n selectedHoverTrackColor: unsafeCSS(`var(--m3e-switch-selected-hover-track-color, ${DesignToken.color.primary})`),\r\n selectedHoverStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-selected-hover-state-layer-color, ${DesignToken.color.primary})`,\r\n ),\r\n selectedHoverStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-selected-hover-state-layer-opacity, 8%)\"),\r\n unselectedHoverTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedHoverTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-track-outline-color, ${DesignToken.color.outline})`,\r\n ),\r\n unselectedHoverStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-state-layer-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n unselectedHoverStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-unselected-hover-state-layer-opacity, 8%)\"),\r\n selectedHoverHandleColor: unsafeCSS(\r\n `var(--m3e-switch-selected-hover-handle-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedHoverHandleColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-handle-color, ${DesignToken.color.onSurfaceVariant})`,\r\n ),\r\n selectedFocusIconColor: unsafeCSS(\r\n `var(--m3e-switch-selected-focus-icon-color, ${DesignToken.color.onPrimaryContainer})`,\r\n ),\r\n unselectedFocusIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n selectedFocusTrackColor: unsafeCSS(`var(--m3e-switch-selected-focus-track-color, ${DesignToken.color.primary})`),\r\n selectedFocusStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-selected-focus-state-layer-color, ${DesignToken.color.primary})`,\r\n ),\r\n selectedFocusStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-selected-focus-state-layer-opacity, 10%)\"),\r\n unselectedFocusTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedFocusTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-track-outline-color, ${DesignToken.color.outline})`,\r\n ),\r\n unselectedFocusStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-state-layer-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n unselectedFocusStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-unselected-focus-state-layer-opacity, 10%)\"),\r\n selectedFocusHandleColor: unsafeCSS(\r\n `var(--m3e-switch-selected-focus-handle-color, ${DesignToken.color.primaryContainer})`,\r\n ),\r\n unselectedFocusHandleColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-handle-color, ${DesignToken.color.onSurfaceVariant})`,\r\n ),\r\n selectedPressedIconColor: unsafeCSS(\r\n `var(--m3e-switch-selected-pressed-icon-color, ${DesignToken.color.onPrimaryContainer})`,\r\n ),\r\n unselectedPressedIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n selectedPressedTrackColor: unsafeCSS(`var(--m3e-switch-selected-pressed-track-color, ${DesignToken.color.primary})`),\r\n selectedPressedStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-selected-pressed-state-layer-color, ${DesignToken.color.primary})`,\r\n ),\r\n selectedPressedStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-selected-pressed-state-layer-opacity, 10%)\"),\r\n unselectedPressedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedPressedTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-track-outline-color, ${DesignToken.color.outline})`,\r\n ),\r\n unselectedPressedStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-state-layer-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n unselectedPressedStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-unselected-pressed-state-layer-opacity, 10%)\"),\r\n selectedPressedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-selected-pressed-handle-color, ${DesignToken.color.primaryContainer})`,\r\n ),\r\n unselectedPressedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-handle-color, ${DesignToken.color.onSurfaceVariant})`,\r\n ),\r\n} as const;\r\n","import { css, unsafeCSS } from \"lit\";\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Handle styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchHandleStyle = css`\r\n .handle {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n pointer-events: none;\r\n transform-origin: center center;\r\n border-radius: ${SwitchToken.handleShape};\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n transform var(--_switch-handle-effect),\r\n width ${DesignToken.motion.spring.fastEffects},\r\n height ${DesignToken.motion.spring.fastEffects}`,\r\n )};\r\n }\r\n .track:not(.pressed) .handle {\r\n --_switch-handle-effect: ${DesignToken.motion.spring.fastSpatial};\r\n }\r\n .track.pressed .handle {\r\n --_switch-handle-effect: ${DesignToken.motion.spring.fastEffects};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])[icons=\"both\"]) .track:not(.pressed) .handle {\r\n width: ${SwitchToken.withIconHandleWidth};\r\n height: ${SwitchToken.withIconHandleHeight};\r\n }\r\n :host(:not([checked]):not([icons=\"both\"])) .track:not(.pressed) .handle,\r\n :host([aria-disabled=\"true\"]:not([checked])) .handle {\r\n width: ${SwitchToken.unselectedHandleWidth};\r\n height: ${SwitchToken.unselectedHandleHeight};\r\n }\r\n :host([checked]) .track:not(.pressed) .handle {\r\n width: ${SwitchToken.selectedHandleWidth};\r\n height: ${SwitchToken.selectedHandleHeight};\r\n }\r\n .track.pressed .handle {\r\n width: ${SwitchToken.pressedHandleWidth};\r\n height: ${SwitchToken.pressedHandleHeight};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.unselectedHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.unselectedHoverHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.unselectedFocusHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .handle {\r\n background-color: ${SwitchToken.unselectedPressedHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.selectedHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.selectedHoverHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.selectedFocusHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .handle {\r\n background-color: ${SwitchToken.selectedPressedHandleColor};\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .handle {\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedHandleColor} ${SwitchToken.disabledUnselectedHandleOpacity},\r\n transparent\r\n );\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .handle {\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledSelectedHandleColor} ${SwitchToken.disabledSelectedHandleOpacity},\r\n transparent\r\n );\r\n }\r\n :host(:not(:dir(rtl))[checked]) .track:not(.pressed) .handle {\r\n transform: translateX(\r\n calc(${SwitchToken.trackWidth} - ${SwitchToken.selectedHandleWidth} - calc(${SwitchToken.trackOutlineWidth} * 2))\r\n );\r\n }\r\n :host(:dir(rtl)[checked]) .track:not(.pressed) .handle {\r\n transform: translateX(\r\n calc(\r\n 0px - calc(\r\n ${SwitchToken.trackWidth} - ${SwitchToken.selectedHandleWidth} - calc(${SwitchToken.trackOutlineWidth} * 2)\r\n )\r\n )\r\n );\r\n }\r\n :host(:not(:dir(rtl))[checked]) .track.pressed .handle {\r\n transform: translateX(\r\n calc(${SwitchToken.trackWidth} - ${SwitchToken.pressedHandleWidth} - ${SwitchToken.trackOutlineWidth})\r\n );\r\n }\r\n :host(:dir(rtl)[checked]) .track.pressed .handle {\r\n transform: translateX(\r\n calc(0px - calc(${SwitchToken.trackWidth} - ${SwitchToken.pressedHandleWidth} - ${SwitchToken.trackOutlineWidth}))\r\n );\r\n }\r\n :host(:not(:dir(rtl)):not([checked]):not([icons=\"both\"])) .track:not(.pressed) .handle,\r\n :host(:not(:dir(rtl))[aria-disabled=\"true\"]:not([checked])) .handle {\r\n transform: translateX(\r\n calc(\r\n ${SwitchToken.trackOutlineWidth} + calc(${SwitchToken.pressedHandleWidth} - ${SwitchToken.withIconHandleWidth})\r\n )\r\n );\r\n }\r\n :host(:dir(rtl):not([checked]):not([icons=\"both\"])) .track:not(.pressed) .handle,\r\n :host(:dir(rtl)[aria-disabled=\"true\"]:not([checked])) .handle {\r\n transform: translateX(\r\n calc(\r\n 0px - calc(\r\n ${SwitchToken.trackOutlineWidth} +\r\n calc(${SwitchToken.pressedHandleWidth} - ${SwitchToken.withIconHandleWidth})\r\n )\r\n )\r\n );\r\n }\r\n :host(:not(:dir(rtl)):not([aria-disabled=\"true\"]):not([checked])[icons=\"both\"]) .track:not(.pressed) .handle {\r\n transform: translateX(${SwitchToken.trackOutlineWidth});\r\n }\r\n :host(:dir(rtl):not([aria-disabled=\"true\"]):not([checked])[icons=\"both\"]) .track:not(.pressed) .handle {\r\n transform: translateX(calc(0px - ${SwitchToken.trackOutlineWidth}));\r\n }\r\n @media (forced-colors: active) {\r\n .handle {\r\n transition: ${unsafeCSS(\r\n `transform var(--_switch-handle-effect),\r\n width ${DesignToken.motion.spring.fastEffects},\r\n height ${DesignToken.motion.spring.fastEffects}`,\r\n )};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .handle {\r\n background-color: ButtonText;\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .handle {\r\n background-color: GrayText;\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .handle {\r\n background-color: Canvas;\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .handle {\r\n background-color: Canvas;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .handle {\r\n transition: none;\r\n }\r\n }\r\n`;\r\n","import { css, unsafeCSS } from \"lit\";\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Icon styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchIconStyle = css`\r\n :host([icons=\"none\"]) .icon,\r\n :host([icons=\"selected\"]:not([checked])) .icon,\r\n :host([aria-disabled=\"true\"]:not([checked])) .icon {\r\n display: none;\r\n }\r\n .icon {\r\n width: 1em;\r\n transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not([checked])) .icon {\r\n font-size: ${SwitchToken.unselectedIconSize};\r\n }\r\n :host([checked]) .icon {\r\n font-size: ${SwitchToken.selectedIconSize};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.unselectedIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.unselectedHoverIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.unselectedFocusIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .icon {\r\n color: ${SwitchToken.unselectedPressedIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.selectedIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.selectedHoverIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.selectedFocusIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .icon {\r\n color: ${SwitchToken.selectedPressedIconColor};\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .icon {\r\n color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedIconColor} ${SwitchToken.disabledUnselectedIconOpacity},\r\n transparent\r\n );\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .icon {\r\n color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledSelectedIconColor} ${SwitchToken.disabledSelectedIconOpacity},\r\n transparent\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .icon {\r\n color: Canvas;\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .icon {\r\n color: CanvasText;\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .icon {\r\n color: Canvas;\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .icon {\r\n color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .icon {\r\n transition: none;\r\n }\r\n }\r\n`;\r\n","import { css, unsafeCSS } from \"lit\";\r\n\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * State layer styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchStateLayerStyle = css`\r\n .state-layer {\r\n width: ${SwitchToken.stateLayerSize};\r\n height: ${SwitchToken.stateLayerSize};\r\n border-radius: ${SwitchToken.stateLayerShape};\r\n transition: ${unsafeCSS(\r\n `top ${DesignToken.motion.spring.fastEffects},\r\n left ${DesignToken.motion.spring.fastEffects},\r\n right ${DesignToken.motion.spring.fastEffects}`,\r\n )};\r\n }\r\n :host(:not([checked])[icons=\"both\"]) .track:not(.pressed) .state-layer {\r\n inset-inline-start: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.withIconHandleWidth}) / 2));\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.withIconHandleHeight}) / 2));\r\n }\r\n :host(:not([checked]):not([icons=\"both\"])) .track:not(.pressed) .state-layer {\r\n inset-inline-start: calc(\r\n 0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.unselectedHandleWidth}) / 2)\r\n );\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.unselectedHandleHeight}) / 2));\r\n }\r\n :host([checked]) .track:not(.pressed) .state-layer {\r\n inset-inline-start: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.selectedHandleWidth}) / 2));\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.selectedHandleHeight}) / 2));\r\n }\r\n .track.pressed .state-layer {\r\n inset-inline-start: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.pressedHandleWidth}) / 2));\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.pressedHandleWidth}) / 2));\r\n }\r\n :host(:not([checked])) .state-layer {\r\n --m3e-state-layer-hover-color: ${SwitchToken.unselectedHoverStateLayerColor};\r\n --m3e-state-layer-hover-opacity: ${SwitchToken.unselectedHoverStateLayerOpacity};\r\n --m3e-state-layer-focus-color: ${SwitchToken.unselectedFocusStateLayerColor};\r\n --m3e-state-layer-focus-opacity: ${SwitchToken.unselectedFocusStateLayerOpacity};\r\n }\r\n :host([checked]) .state-layer {\r\n --m3e-state-layer-hover-color: ${SwitchToken.selectedHoverStateLayerColor};\r\n --m3e-state-layer-hover-opacity: ${SwitchToken.selectedHoverStateLayerOpacity};\r\n --m3e-state-layer-focus-color: ${SwitchToken.selectedFocusStateLayerColor};\r\n --m3e-state-layer-focus-opacity: ${SwitchToken.selectedFocusStateLayerOpacity};\r\n }\r\n`;\r\n","import { css } from \"lit\";\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Baseline styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchStyle = css`\r\n :host {\r\n display: inline-block;\r\n position: relative;\r\n outline: none;\r\n height: fit-content;\r\n width: fit-content;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n :host(:not([aria-disabled=\"true\"])) {\r\n cursor: pointer;\r\n }\r\n .focus-ring {\r\n border-radius: ${SwitchToken.trackShape};\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 .base {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n`;\r\n","import { css, unsafeCSS } from \"lit\";\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Track styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchTrackStyle = css`\r\n .track {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n box-sizing: border-box;\r\n border-radius: ${SwitchToken.trackShape};\r\n width: ${SwitchToken.trackWidth};\r\n height: ${SwitchToken.trackHeight};\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n :host(:not([checked])) .track {\r\n border-width: ${SwitchToken.trackOutlineWidth};\r\n border-style: solid;\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) {\r\n border-color: ${SwitchToken.trackOutlineColor};\r\n background-color: ${SwitchToken.unselectedTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) {\r\n border-color: ${SwitchToken.unselectedHoverTrackOutlineColor};\r\n background-color: ${SwitchToken.unselectedHoverTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) {\r\n border-color: ${SwitchToken.unselectedFocusTrackOutlineColor};\r\n background-color: ${SwitchToken.unselectedFocusTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed {\r\n border-color: ${SwitchToken.unselectedPressedTrackOutlineColor};\r\n background-color: ${SwitchToken.unselectedPressedTrackColor};\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .track {\r\n border-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedTrackOutlineColor} ${SwitchToken.disabledTrackOpacity},\r\n transparent\r\n );\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedTrackColor} ${SwitchToken.disabledTrackOpacity},\r\n transparent\r\n );\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) {\r\n background-color: ${SwitchToken.selectedTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) {\r\n background-color: ${SwitchToken.selectedHoverTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) {\r\n background-color: ${SwitchToken.selectedFocusTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed {\r\n background-color: ${SwitchToken.selectedPressedTrackColor};\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .track {\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledSelectedTrackColor} ${SwitchToken.disabledTrackOpacity},\r\n transparent\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n .track {\r\n transition: none;\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed {\r\n border-color: ButtonText;\r\n background-color: Canvas;\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .track {\r\n border-color: GrayText;\r\n background-color: Canvas;\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed {\r\n background-color: ButtonText;\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .track {\r\n background-color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .track {\r\n transition: none;\r\n }\r\n }\r\n`;\r\n","import { CSSResultGroup, html, LitElement, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n Labelled,\r\n Checked,\r\n ConstraintValidation,\r\n Dirty,\r\n Disabled,\r\n FormAssociated,\r\n formValue,\r\n Touched,\r\n AttachInternals,\r\n Role,\r\n M3eFocusRingElement,\r\n M3eStateLayerElement,\r\n Focusable,\r\n KeyboardClick,\r\n PressedController,\r\n HoverController,\r\n customElement,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SwitchHandleStyle, SwitchIconStyle, SwitchStateLayerStyle, SwitchStyle, SwitchTrackStyle } from \"./styles\";\r\n\r\nimport { SwitchIcons } from \"./SwitchIcons\";\r\n\r\n/**\r\n * An on/off control that can be toggled by clicking.\r\n *\r\n * @description\r\n * The `m3e-switch` component is a semantic, accessible toggle control that reflects a binary state.\r\n * Designed according to Material Design 3 guidelines, it supports shape transitions, and adaptive color\r\n * theming across selected, unselected, and disabled states. The component responds to user interaction\r\n * with smooth motion and expressive feedback. It supports optional icons (`none`, `selected`, or `both`)\r\n * and integrates with form-associated behavior, emitting `input` and `change` events when toggled.\r\n *\r\n * @example\r\n * The following example illustrates a switch wrapped by a `label`.\r\n *\r\n * ```html\r\n * <label>Switch label&nbsp;<m3e-switch></m3e-switch></label>\r\n * ```\r\n *\r\n * @example\r\n * By default, icons are not presented. Use the `icons` attribute to control which icons to show. The next\r\n * example illustrates showing both the unselected and selected icons.\r\n *\r\n * ```html\r\n * <label>Switch label&nbsp;<m3e-switch icons=\"both\"></m3e-switch></label>\r\n * ```\r\n *\r\n * @tag m3e-switch\r\n *\r\n * @attr checked - Whether the element is checked.\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr icons - The icons to present.\r\n * @attr name - The name that identifies the element when submitting the associated form.\r\n * @attr value - A string representing the value of the switch.\r\n *\r\n * @fires input - Emitted when the checked state changes.\r\n * @fires change - Emitted when the checked state changes.\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-switch-selected-icon-color - Color of the icon when the switch is selected.\r\n * @cssprop --m3e-switch-selected-icon-size - Size of the icon in the selected state.\r\n * @cssprop --m3e-switch-unselected-icon-color - Color of the icon when the switch is unselected.\r\n * @cssprop --m3e-switch-unselected-icon-size - Size of the icon in the unselected state.\r\n * @cssprop --m3e-switch-track-height - Height of the switch track.\r\n * @cssprop --m3e-switch-track-width - Width of the switch track.\r\n * @cssprop --m3e-switch-track-outline-color - Color of the track's outline.\r\n * @cssprop --m3e-switch-track-outline-width - Thickness of the track's outline.\r\n * @cssprop --m3e-switch-track-shape - Corner shape of the track.\r\n * @cssprop --m3e-switch-selected-track-color - Track color when selected.\r\n * @cssprop --m3e-switch-unselected-track-color - Track color when unselected.\r\n * @cssprop --m3e-switch-unselected-handle-height - Height of the handle when unselected.\r\n * @cssprop --m3e-switch-unselected-handle-width - Width of the handle when unselected.\r\n * @cssprop --m3e-switch-with-icon-handle-height - Height of the handle when icons are present.\r\n * @cssprop --m3e-switch-with-icon-handle-width - Width of the handle when icons are present.\r\n * @cssprop --m3e-switch-selected-handle-height - Height of the handle when selected.\r\n * @cssprop --m3e-switch-selected-handle-width - Width of the handle when selected.\r\n * @cssprop --m3e-switch-pressed-handle-height - Height of the handle during press.\r\n * @cssprop --m3e-switch-pressed-handle-width - Width of the handle during press.\r\n * @cssprop --m3e-switch-handle-shape - Corner shape of the handle.\r\n * @cssprop --m3e-switch-selected-handle-color - Handle color when selected.\r\n * @cssprop --m3e-switch-unselected-handle-color - Handle color when unselected.\r\n * @cssprop --m3e-switch-state-layer-size - Diameter of the state layer overlay.\r\n * @cssprop --m3e-switch-state-layer-shape - Corner shape of the state layer.\r\n * @cssprop --m3e-switch-disabled-selected-icon-color - Icon color when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-selected-icon-opacity - Icon opacity when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-icon-color - Icon color when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-icon-opacity - Icon opacity when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-track-opacity - Track opacity when disabled.\r\n * @cssprop --m3e-switch-disabled-selected-track-color - Track color when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-track-color - Track color when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-track-outline-color - Outline color when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-handle-opacity - Handle opacity when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-selected-handle-opacity - Handle opacity when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-selected-handle-color - Handle color when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-handle-color - Handle color when unselected and disabled.\r\n * @cssprop --m3e-switch-selected-hover-icon-color - Icon color when selected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-icon-color - Icon color when unselected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-track-color - Track color when selected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-state-layer-color - State layer color when selected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-state-layer-opacity - State layer opacity when selected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-track-color - Track color when unselected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-track-outline-color - Outline color when unselected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-state-layer-color - State layer color when unselected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-state-layer-opacity - State layer opacity when unselected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-handle-color - Handle color when selected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-handle-color - Handle color when unselected and hovered.\r\n * @cssprop --m3e-switch-selected-focus-icon-color - Icon color when selected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-icon-color - Icon color when unselected and focused.\r\n * @cssprop --m3e-switch-selected-focus-track-color - Track color when selected and focused.\r\n * @cssprop --m3e-switch-selected-focus-state-layer-color - State layer color when selected and focused.\r\n * @cssprop --m3e-switch-selected-focus-state-layer-opacity - State layer opacity when selected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-track-color - Track color when unselected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-track-outline-color - Outline color when unselected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-state-layer-color - State layer color when unselected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-state-layer-opacity - State layer opacity when unselected and focused.\r\n * @cssprop --m3e-switch-selected-focus-handle-color - Handle color when selected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-handle-color - Handle color when unselected and focused.\r\n * @cssprop --m3e-switch-selected-pressed-icon-color - Icon color when selected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-icon-color - Icon color when unselected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-track-color - Track color when selected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-state-layer-color - State layer color when selected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-state-layer-opacity - State layer opacity when selected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-track-color - Track color when unselected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-track-outline-color - Outline color when unselected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-state-layer-color - State layer color when unselected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-state-layer-opacity - State layer opacity when unselected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-handle-color - Handle color when selected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-handle-color - Handle color when unselected and pressed.\r\n */\r\n@customElement(\"m3e-switch\")\r\nexport class M3eSwitchElement extends Labelled(\r\n Dirty(\r\n Touched(\r\n ConstraintValidation(\r\n Checked(FormAssociated(KeyboardClick(Focusable(Disabled(AttachInternals(Role(LitElement, \"switch\"))))))),\r\n ),\r\n ),\r\n ),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n SwitchStyle,\r\n SwitchStateLayerStyle,\r\n SwitchTrackStyle,\r\n SwitchHandleStyle,\r\n SwitchIconStyle,\r\n ];\r\n\r\n /** @private */ @query(\".track\") private readonly _track?: HTMLElement;\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ readonly #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /** @private */ readonly #hoverController = new HoverController(this, {\r\n target: null,\r\n callback: (hovering) => {\r\n if (this.disabled) return;\r\n if (hovering) {\r\n this._stateLayer?.show(\"hover\");\r\n } else {\r\n this._stateLayer?.hide(\"hover\");\r\n }\r\n },\r\n });\r\n\r\n /** @private */ readonly #pressedController = new PressedController(this, {\r\n target: null,\r\n callback: (pressed) => this._track?.classList.toggle(\"pressed\", pressed && !this.disabled),\r\n });\r\n\r\n constructor() {\r\n super();\r\n\r\n new PressedController(this, {\r\n isPressedKey: (key) => key === \" \",\r\n callback: (pressed) => this._track?.classList.toggle(\"pressed\", pressed && !this.disabled),\r\n });\r\n }\r\n\r\n /**\r\n * The icons to present.\r\n * @default \"none\"\r\n */\r\n @property({ reflect: true }) icons: SwitchIcons = \"none\";\r\n\r\n /**\r\n * A string representing the value of the switch.\r\n * @default \"on\"\r\n */\r\n @property() value = \"on\";\r\n\r\n /** @inheritdoc @private */\r\n override get [formValue](): string | File | FormData | null {\r\n return this.checked && !this.disabled ? this.value : null;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n for (const label of this.labels) {\r\n this.#hoverController.observe(label);\r\n this.#pressedController.observe(label);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n for (const label of this.labels) {\r\n this.#hoverController.unobserve(label);\r\n this.#pressedController.unobserve(label);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<m3e-focus-ring class=\"focus-ring\"></m3e-focus-ring>\r\n <div class=\"track\" aria-hidden=\"true\">\r\n <div class=\"touch\" aria-hidden=\"true\"></div>\r\n <div class=\"handle\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"></m3e-state-layer>\r\n <div class=\"base\">${this.#renderIcon()}</div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n return this.checked\r\n ? html`<svg class=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n <path fill=\"currentColor\" d=\"M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z\"></path>\r\n </svg>`\r\n : html`<svg class=\"icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\" />\r\n </svg>`;\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n if (e.defaultPrevented) return;\r\n this.checked = !this.checked;\r\n if (this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true, cancelable: true }))) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n } else {\r\n this.checked = !this.checked;\r\n }\r\n\r\n // Prevent default avoids double-click in FireFox.\r\n if (this.closest(\"label\")) {\r\n e.preventDefault();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-switch\": M3eSwitchElement;\r\n }\r\n}\r\n"],"names":["SwitchToken","unsafeCSS","DesignToken","color","onPrimaryContainer","surfaceContainerHighest","outline","shape","corner","full","primary","onPrimary","onSurface","surface","onSurfaceVariant","primaryContainer","SwitchHandleStyle","css","motion","duration","short4","easing","standard","spring","fastEffects","fastSpatial","SwitchIconStyle","SwitchStateLayerStyle","SwitchStyle","SwitchTrackStyle","M3eSwitchElement","Labelled","Dirty","Touched","ConstraintValidation","Checked","FormAssociated","KeyboardClick","Focusable","Disabled","AttachInternals","Role","LitElement","constructor","super","_M3eSwitchElement_clickHandler","set","this","e","__classPrivateFieldGet","call","_M3eSwitchElement_hoverController","HoverController","target","callback","hovering","disabled","_stateLayer","show","hide","_M3eSwitchElement_pressedController","PressedController","pressed","_track","classList","toggle","icons","value","isPressedKey","key","WeakMap","_M3eSwitchElement_instances","WeakSet","formValue","checked","connectedCallback","addEventListener","label","labels","observe","disconnectedCallback","removeEventListener","unobserve","firstUpdated","_changedProperties","_focusRing","forEach","x","attach","render","html","_M3eSwitchElement_renderIcon","defaultPrevented","dispatchEvent","Event","bubbles","composed","cancelable","closest","preventDefault","styles","__decorate","query","prototype","property","reflect","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"switch.min.js","sources":["../../src/switch/styles/SwitchToken.ts","../../src/switch/styles/SwitchHandleStyle.ts","../../src/switch/styles/SwitchIconStyle.ts","../../src/switch/styles/SwitchStateLayerStyle.ts","../../src/switch/styles/SwitchStyle.ts","../../src/switch/styles/SwitchTrackStyle.ts","../../src/switch/SwitchElement.ts"],"sourcesContent":["import { unsafeCSS } from \"lit\";\r\n\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\n/**\r\n * Component design tokens that control `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchToken = {\r\n selectedIconColor: unsafeCSS(`var(--m3e-switch-selected-icon-color, ${DesignToken.color.onPrimaryContainer})`),\r\n selectedIconSize: unsafeCSS(\"var(--m3e-switch-selected-icon-size, 1rem)\"),\r\n unselectedIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedIconSize: unsafeCSS(\"var(--m3e-switch-unselected-icon-size, 1rem)\"),\r\n trackHeight: unsafeCSS(\"var(--m3e-switch-track-height, 2rem)\"),\r\n trackWidth: unsafeCSS(\"var(--m3e-switch-track-width, 3.25rem)\"),\r\n trackOutlineColor: unsafeCSS(`var(--m3e-switch-track-outline-color, ${DesignToken.color.outline})`),\r\n trackOutlineWidth: unsafeCSS(\"var(--m3e-switch-track-outline-width, 2px)\"),\r\n trackShape: unsafeCSS(`var(--m3e-switch-track-shape, ${DesignToken.shape.corner.full})`),\r\n selectedTrackColor: unsafeCSS(`var(--m3e-switch-selected-track-color, ${DesignToken.color.primary})`),\r\n unselectedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedHandleHeight: unsafeCSS(\"var(--m3e-switch-unselected-handle-height, 1rem)\"),\r\n unselectedHandleWidth: unsafeCSS(\"var(--m3e-switch-unselected-handle-width, 1rem)\"),\r\n withIconHandleHeight: unsafeCSS(\"var(--m3e-switch-with-icon-handle-height, 1.5rem)\"),\r\n withIconHandleWidth: unsafeCSS(\"var(--m3e-switch-with-icon-handle-width, 1.5rem)\"),\r\n selectedHandleHeight: unsafeCSS(\"var(--m3e-switch-selected-handle-height, 1.5rem)\"),\r\n selectedHandleWidth: unsafeCSS(\"var(--m3e-switch-selected-handle-width, 1.5rem)\"),\r\n pressedHandleHeight: unsafeCSS(\"var(--m3e-switch-pressed-handle-height, 1.75rem)\"),\r\n pressedHandleWidth: unsafeCSS(\"var(--m3e-switch-pressed-handle-width, 1.75rem)\"),\r\n handleShape: unsafeCSS(`var(--m3e-switch-handle-shape, ${DesignToken.shape.corner.full})`),\r\n selectedHandleColor: unsafeCSS(`var(--m3e-switch-selected-handle-color, ${DesignToken.color.onPrimary})`),\r\n unselectedHandleColor: unsafeCSS(`var(--m3e-switch-unselected-handle-color, ${DesignToken.color.outline})`),\r\n stateLayerSize: unsafeCSS(\"var(--m3e-switch-state-layer-size, 2.5rem)\"),\r\n stateLayerShape: unsafeCSS(`var(--m3e-switch-state-layer-shape, ${DesignToken.shape.corner.full})`),\r\n disabledSelectedIconColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-selected-icon-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n disabledSelectedIconOpacity: unsafeCSS(\"var(--m3e-switch-disabled-selected-icon-opacity, 38%)\"),\r\n disabledUnselectedIconColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n disabledUnselectedIconOpacity: unsafeCSS(\"var(--m3e-switch-disabled-unselected-icon-opacity, 38%)\"),\r\n disabledTrackOpacity: unsafeCSS(\"var(--m3e-switch-disabled-track-opacity, 12%)\"),\r\n disabledSelectedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-selected-track-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n disabledUnselectedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n disabledUnselectedTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-track-outline-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n disabledUnselectedHandleOpacity: unsafeCSS(\"var(--m3e-switch-disabled-unselected-handle-opacity, 38%)\"),\r\n disabledSelectedHandleOpacity: unsafeCSS(\"var(--m3e-switch-disabled-selected-handle-opacity, 100%)\"),\r\n disabledSelectedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-selected-handle-color, ${DesignToken.color.surface})`,\r\n ),\r\n disabledUnselectedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-disabled-unselected-handle-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n selectedHoverIconColor: unsafeCSS(\r\n `var(--m3e-switch-selected-hover-icon-color, ${DesignToken.color.onPrimaryContainer})`,\r\n ),\r\n unselectedHoverIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n selectedHoverTrackColor: unsafeCSS(`var(--m3e-switch-selected-hover-track-color, ${DesignToken.color.primary})`),\r\n selectedHoverStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-selected-hover-state-layer-color, ${DesignToken.color.primary})`,\r\n ),\r\n selectedHoverStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-selected-hover-state-layer-opacity, 8%)\"),\r\n unselectedHoverTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedHoverTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-track-outline-color, ${DesignToken.color.outline})`,\r\n ),\r\n unselectedHoverStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-state-layer-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n unselectedHoverStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-unselected-hover-state-layer-opacity, 8%)\"),\r\n selectedHoverHandleColor: unsafeCSS(\r\n `var(--m3e-switch-selected-hover-handle-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedHoverHandleColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-hover-handle-color, ${DesignToken.color.onSurfaceVariant})`,\r\n ),\r\n selectedFocusIconColor: unsafeCSS(\r\n `var(--m3e-switch-selected-focus-icon-color, ${DesignToken.color.onPrimaryContainer})`,\r\n ),\r\n unselectedFocusIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n selectedFocusTrackColor: unsafeCSS(`var(--m3e-switch-selected-focus-track-color, ${DesignToken.color.primary})`),\r\n selectedFocusStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-selected-focus-state-layer-color, ${DesignToken.color.primary})`,\r\n ),\r\n selectedFocusStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-selected-focus-state-layer-opacity, 10%)\"),\r\n unselectedFocusTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedFocusTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-track-outline-color, ${DesignToken.color.outline})`,\r\n ),\r\n unselectedFocusStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-state-layer-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n unselectedFocusStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-unselected-focus-state-layer-opacity, 10%)\"),\r\n selectedFocusHandleColor: unsafeCSS(\r\n `var(--m3e-switch-selected-focus-handle-color, ${DesignToken.color.primaryContainer})`,\r\n ),\r\n unselectedFocusHandleColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-focus-handle-color, ${DesignToken.color.onSurfaceVariant})`,\r\n ),\r\n selectedPressedIconColor: unsafeCSS(\r\n `var(--m3e-switch-selected-pressed-icon-color, ${DesignToken.color.onPrimaryContainer})`,\r\n ),\r\n unselectedPressedIconColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-icon-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n selectedPressedTrackColor: unsafeCSS(`var(--m3e-switch-selected-pressed-track-color, ${DesignToken.color.primary})`),\r\n selectedPressedStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-selected-pressed-state-layer-color, ${DesignToken.color.primary})`,\r\n ),\r\n selectedPressedStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-selected-pressed-state-layer-opacity, 10%)\"),\r\n unselectedPressedTrackColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-track-color, ${DesignToken.color.surfaceContainerHighest})`,\r\n ),\r\n unselectedPressedTrackOutlineColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-track-outline-color, ${DesignToken.color.outline})`,\r\n ),\r\n unselectedPressedStateLayerColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-state-layer-color, ${DesignToken.color.onSurface})`,\r\n ),\r\n unselectedPressedStateLayerOpacity: unsafeCSS(\"var(--m3e-switch-unselected-pressed-state-layer-opacity, 10%)\"),\r\n selectedPressedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-selected-pressed-handle-color, ${DesignToken.color.primaryContainer})`,\r\n ),\r\n unselectedPressedHandleColor: unsafeCSS(\r\n `var(--m3e-switch-unselected-pressed-handle-color, ${DesignToken.color.onSurfaceVariant})`,\r\n ),\r\n} as const;\r\n","import { css, unsafeCSS } from \"lit\";\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Handle styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchHandleStyle = css`\r\n .handle {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n pointer-events: none;\r\n transform-origin: center center;\r\n border-radius: ${SwitchToken.handleShape};\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n transform var(--_switch-handle-effect),\r\n width ${DesignToken.motion.spring.fastEffects},\r\n height ${DesignToken.motion.spring.fastEffects}`,\r\n )};\r\n }\r\n .track:not(.pressed) .handle {\r\n --_switch-handle-effect: ${DesignToken.motion.spring.fastSpatial};\r\n }\r\n .track.pressed .handle {\r\n --_switch-handle-effect: ${DesignToken.motion.spring.fastEffects};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])[icons=\"both\"]) .track:not(.pressed) .handle {\r\n width: ${SwitchToken.withIconHandleWidth};\r\n height: ${SwitchToken.withIconHandleHeight};\r\n }\r\n :host(:not([checked]):not([icons=\"both\"])) .track:not(.pressed) .handle,\r\n :host([aria-disabled=\"true\"]:not([checked])) .handle {\r\n width: ${SwitchToken.unselectedHandleWidth};\r\n height: ${SwitchToken.unselectedHandleHeight};\r\n }\r\n :host([checked]) .track:not(.pressed) .handle {\r\n width: ${SwitchToken.selectedHandleWidth};\r\n height: ${SwitchToken.selectedHandleHeight};\r\n }\r\n .track.pressed .handle {\r\n width: ${SwitchToken.pressedHandleWidth};\r\n height: ${SwitchToken.pressedHandleHeight};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.unselectedHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.unselectedHoverHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.unselectedFocusHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .handle {\r\n background-color: ${SwitchToken.unselectedPressedHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.selectedHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.selectedHoverHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .handle {\r\n background-color: ${SwitchToken.selectedFocusHandleColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .handle {\r\n background-color: ${SwitchToken.selectedPressedHandleColor};\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .handle {\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedHandleColor} ${SwitchToken.disabledUnselectedHandleOpacity},\r\n transparent\r\n );\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .handle {\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledSelectedHandleColor} ${SwitchToken.disabledSelectedHandleOpacity},\r\n transparent\r\n );\r\n }\r\n :host(:not(:dir(rtl))[checked]) .track:not(.pressed) .handle {\r\n transform: translateX(\r\n calc(${SwitchToken.trackWidth} - ${SwitchToken.selectedHandleWidth} - calc(${SwitchToken.trackOutlineWidth} * 2))\r\n );\r\n }\r\n :host(:dir(rtl)[checked]) .track:not(.pressed) .handle {\r\n transform: translateX(\r\n calc(\r\n 0px - calc(\r\n ${SwitchToken.trackWidth} - ${SwitchToken.selectedHandleWidth} - calc(${SwitchToken.trackOutlineWidth} * 2)\r\n )\r\n )\r\n );\r\n }\r\n :host(:not(:dir(rtl))[checked]) .track.pressed .handle {\r\n transform: translateX(\r\n calc(${SwitchToken.trackWidth} - ${SwitchToken.pressedHandleWidth} - ${SwitchToken.trackOutlineWidth})\r\n );\r\n }\r\n :host(:dir(rtl)[checked]) .track.pressed .handle {\r\n transform: translateX(\r\n calc(0px - calc(${SwitchToken.trackWidth} - ${SwitchToken.pressedHandleWidth} - ${SwitchToken.trackOutlineWidth}))\r\n );\r\n }\r\n :host(:not(:dir(rtl)):not([checked]):not([icons=\"both\"])) .track:not(.pressed) .handle,\r\n :host(:not(:dir(rtl))[aria-disabled=\"true\"]:not([checked])) .handle {\r\n transform: translateX(\r\n calc(\r\n ${SwitchToken.trackOutlineWidth} + calc(${SwitchToken.pressedHandleWidth} - ${SwitchToken.withIconHandleWidth})\r\n )\r\n );\r\n }\r\n :host(:dir(rtl):not([checked]):not([icons=\"both\"])) .track:not(.pressed) .handle,\r\n :host(:dir(rtl)[aria-disabled=\"true\"]:not([checked])) .handle {\r\n transform: translateX(\r\n calc(\r\n 0px - calc(\r\n ${SwitchToken.trackOutlineWidth} +\r\n calc(${SwitchToken.pressedHandleWidth} - ${SwitchToken.withIconHandleWidth})\r\n )\r\n )\r\n );\r\n }\r\n :host(:not(:dir(rtl)):not([aria-disabled=\"true\"]):not([checked])[icons=\"both\"]) .track:not(.pressed) .handle {\r\n transform: translateX(${SwitchToken.trackOutlineWidth});\r\n }\r\n :host(:dir(rtl):not([aria-disabled=\"true\"]):not([checked])[icons=\"both\"]) .track:not(.pressed) .handle {\r\n transform: translateX(calc(0px - ${SwitchToken.trackOutlineWidth}));\r\n }\r\n @media (forced-colors: active) {\r\n .handle {\r\n transition: ${unsafeCSS(\r\n `transform var(--_switch-handle-effect),\r\n width ${DesignToken.motion.spring.fastEffects},\r\n height ${DesignToken.motion.spring.fastEffects}`,\r\n )};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .handle {\r\n background-color: ButtonText;\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .handle {\r\n background-color: GrayText;\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .handle,\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .handle {\r\n background-color: Canvas;\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .handle {\r\n background-color: Canvas;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .handle {\r\n transition: none;\r\n }\r\n }\r\n`;\r\n","import { css, unsafeCSS } from \"lit\";\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Icon styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchIconStyle = css`\r\n :host([icons=\"none\"]) .icon,\r\n :host([icons=\"selected\"]:not([checked])) .icon,\r\n :host([aria-disabled=\"true\"]:not([checked])) .icon {\r\n display: none;\r\n }\r\n .icon {\r\n width: 1em;\r\n transition: ${unsafeCSS(`color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n :host(:not([checked])) .icon {\r\n font-size: ${SwitchToken.unselectedIconSize};\r\n }\r\n :host([checked]) .icon {\r\n font-size: ${SwitchToken.selectedIconSize};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.unselectedIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.unselectedHoverIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.unselectedFocusIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .icon {\r\n color: ${SwitchToken.unselectedPressedIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.selectedIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.selectedHoverIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .icon {\r\n color: ${SwitchToken.selectedFocusIconColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .icon {\r\n color: ${SwitchToken.selectedPressedIconColor};\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .icon {\r\n color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedIconColor} ${SwitchToken.disabledUnselectedIconOpacity},\r\n transparent\r\n );\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .icon {\r\n color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledSelectedIconColor} ${SwitchToken.disabledSelectedIconOpacity},\r\n transparent\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed .icon {\r\n color: Canvas;\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) .icon,\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed .icon {\r\n color: CanvasText;\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .icon {\r\n color: Canvas;\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .icon {\r\n color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .icon {\r\n transition: none;\r\n }\r\n }\r\n`;\r\n","import { css, unsafeCSS } from \"lit\";\r\n\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * State layer styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchStateLayerStyle = css`\r\n .state-layer {\r\n width: ${SwitchToken.stateLayerSize};\r\n height: ${SwitchToken.stateLayerSize};\r\n border-radius: ${SwitchToken.stateLayerShape};\r\n transition: ${unsafeCSS(\r\n `top ${DesignToken.motion.spring.fastEffects},\r\n left ${DesignToken.motion.spring.fastEffects},\r\n right ${DesignToken.motion.spring.fastEffects}`,\r\n )};\r\n }\r\n :host(:not([checked])[icons=\"both\"]) .track:not(.pressed) .state-layer {\r\n inset-inline-start: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.withIconHandleWidth}) / 2));\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.withIconHandleHeight}) / 2));\r\n }\r\n :host(:not([checked]):not([icons=\"both\"])) .track:not(.pressed) .state-layer {\r\n inset-inline-start: calc(\r\n 0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.unselectedHandleWidth}) / 2)\r\n );\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.unselectedHandleHeight}) / 2));\r\n }\r\n :host([checked]) .track:not(.pressed) .state-layer {\r\n inset-inline-start: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.selectedHandleWidth}) / 2));\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.selectedHandleHeight}) / 2));\r\n }\r\n .track.pressed .state-layer {\r\n inset-inline-start: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.pressedHandleWidth}) / 2));\r\n top: calc(0px - calc(calc(${SwitchToken.stateLayerSize} - ${SwitchToken.pressedHandleWidth}) / 2));\r\n }\r\n :host(:not([checked])) .state-layer {\r\n --m3e-state-layer-hover-color: ${SwitchToken.unselectedHoverStateLayerColor};\r\n --m3e-state-layer-hover-opacity: ${SwitchToken.unselectedHoverStateLayerOpacity};\r\n --m3e-state-layer-focus-color: ${SwitchToken.unselectedFocusStateLayerColor};\r\n --m3e-state-layer-focus-opacity: ${SwitchToken.unselectedFocusStateLayerOpacity};\r\n }\r\n :host([checked]) .state-layer {\r\n --m3e-state-layer-hover-color: ${SwitchToken.selectedHoverStateLayerColor};\r\n --m3e-state-layer-hover-opacity: ${SwitchToken.selectedHoverStateLayerOpacity};\r\n --m3e-state-layer-focus-color: ${SwitchToken.selectedFocusStateLayerColor};\r\n --m3e-state-layer-focus-opacity: ${SwitchToken.selectedFocusStateLayerOpacity};\r\n }\r\n`;\r\n","import { css } from \"lit\";\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Baseline styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchStyle = css`\r\n :host {\r\n display: inline-block;\r\n position: relative;\r\n outline: none;\r\n height: fit-content;\r\n width: fit-content;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n :host(:not([aria-disabled=\"true\"])) {\r\n cursor: pointer;\r\n }\r\n .focus-ring {\r\n border-radius: ${SwitchToken.trackShape};\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 .base {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n`;\r\n","import { css, unsafeCSS } from \"lit\";\r\nimport { DesignToken } from \"@m3e/web/core\";\r\n\r\nimport { SwitchToken } from \"./SwitchToken\";\r\n\r\n/**\r\n * Track styles for `M3eSwitchElement`.\r\n * @internal\r\n */\r\nexport const SwitchTrackStyle = css`\r\n .track {\r\n display: flex;\r\n align-items: center;\r\n position: relative;\r\n box-sizing: border-box;\r\n border-radius: ${SwitchToken.trackShape};\r\n width: ${SwitchToken.trackWidth};\r\n height: ${SwitchToken.trackHeight};\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n :host(:not([checked])) .track {\r\n border-width: ${SwitchToken.trackOutlineWidth};\r\n border-style: solid;\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed) {\r\n border-color: ${SwitchToken.trackOutlineColor};\r\n background-color: ${SwitchToken.unselectedTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed) {\r\n border-color: ${SwitchToken.unselectedHoverTrackOutlineColor};\r\n background-color: ${SwitchToken.unselectedHoverTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed) {\r\n border-color: ${SwitchToken.unselectedFocusTrackOutlineColor};\r\n background-color: ${SwitchToken.unselectedFocusTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed {\r\n border-color: ${SwitchToken.unselectedPressedTrackOutlineColor};\r\n background-color: ${SwitchToken.unselectedPressedTrackColor};\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .track {\r\n border-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedTrackOutlineColor} ${SwitchToken.disabledTrackOpacity},\r\n transparent\r\n );\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledUnselectedTrackColor} ${SwitchToken.disabledTrackOpacity},\r\n transparent\r\n );\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed) {\r\n background-color: ${SwitchToken.selectedTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed) {\r\n background-color: ${SwitchToken.selectedHoverTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed) {\r\n background-color: ${SwitchToken.selectedFocusTrackColor};\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed {\r\n background-color: ${SwitchToken.selectedPressedTrackColor};\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .track {\r\n background-color: color-mix(\r\n in srgb,\r\n ${SwitchToken.disabledSelectedTrackColor} ${SwitchToken.disabledTrackOpacity},\r\n transparent\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n .track {\r\n transition: none;\r\n }\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):not(:hover)) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):not(:focus):hover) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"]):not([checked]):focus) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"]):not([checked])) .track.pressed {\r\n border-color: ButtonText;\r\n background-color: Canvas;\r\n }\r\n :host([aria-disabled=\"true\"]:not([checked])) .track {\r\n border-color: GrayText;\r\n background-color: Canvas;\r\n }\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):not(:hover)) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"])[checked]:not(:focus):hover) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"])[checked]:focus) .track:not(.pressed),\r\n :host(:not([aria-disabled=\"true\"])[checked]) .track.pressed {\r\n background-color: ButtonText;\r\n }\r\n :host([aria-disabled=\"true\"][checked]) .track {\r\n background-color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .track {\r\n transition: none;\r\n }\r\n }\r\n`;\r\n","import { CSSResultGroup, html, LitElement, PropertyValues } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n Labelled,\r\n Checked,\r\n ConstraintValidation,\r\n Dirty,\r\n Disabled,\r\n FormAssociated,\r\n formValue,\r\n Touched,\r\n AttachInternals,\r\n Role,\r\n M3eFocusRingElement,\r\n M3eStateLayerElement,\r\n Focusable,\r\n KeyboardClick,\r\n PressedController,\r\n HoverController,\r\n customElement,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SwitchHandleStyle, SwitchIconStyle, SwitchStateLayerStyle, SwitchStyle, SwitchTrackStyle } from \"./styles\";\r\n\r\nimport { SwitchIcons } from \"./SwitchIcons\";\r\n\r\n/**\r\n * An on/off control that can be toggled by clicking.\r\n *\r\n * @description\r\n * The `m3e-switch` component is a semantic, accessible toggle control that reflects a binary state.\r\n * Designed according to Material Design 3 guidelines, it supports shape transitions, and adaptive color\r\n * theming across selected, unselected, and disabled states. The component responds to user interaction\r\n * with smooth motion and expressive feedback. It supports optional icons (`none`, `selected`, or `both`)\r\n * and integrates with form-associated behavior, emitting `input` and `change` events when toggled.\r\n *\r\n * @example\r\n * The following example illustrates a switch wrapped by a `label`.\r\n *\r\n * ```html\r\n * <label>Switch label&nbsp;<m3e-switch></m3e-switch></label>\r\n * ```\r\n *\r\n * @example\r\n * By default, icons are not presented. Use the `icons` attribute to control which icons to show. The next\r\n * example illustrates showing both the unselected and selected icons.\r\n *\r\n * ```html\r\n * <label>Switch label&nbsp;<m3e-switch icons=\"both\"></m3e-switch></label>\r\n * ```\r\n *\r\n * @tag m3e-switch\r\n *\r\n * @attr checked - Whether the element is checked.\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr icons - The icons to present.\r\n * @attr name - The name that identifies the element when submitting the associated form.\r\n * @attr value - A string representing the value of the switch.\r\n *\r\n * @fires beforeinput - Dispatched before the checked state changes.\r\n * @fires input - Dispatched when the checked state changes.\r\n * @fires change - Dispatched when the checked state changes.\r\n * @fires click - Dispatched when the element is clicked.\r\n *\r\n * @cssprop --m3e-switch-selected-icon-color - Color of the icon when the switch is selected.\r\n * @cssprop --m3e-switch-selected-icon-size - Size of the icon in the selected state.\r\n * @cssprop --m3e-switch-unselected-icon-color - Color of the icon when the switch is unselected.\r\n * @cssprop --m3e-switch-unselected-icon-size - Size of the icon in the unselected state.\r\n * @cssprop --m3e-switch-track-height - Height of the switch track.\r\n * @cssprop --m3e-switch-track-width - Width of the switch track.\r\n * @cssprop --m3e-switch-track-outline-color - Color of the track's outline.\r\n * @cssprop --m3e-switch-track-outline-width - Thickness of the track's outline.\r\n * @cssprop --m3e-switch-track-shape - Corner shape of the track.\r\n * @cssprop --m3e-switch-selected-track-color - Track color when selected.\r\n * @cssprop --m3e-switch-unselected-track-color - Track color when unselected.\r\n * @cssprop --m3e-switch-unselected-handle-height - Height of the handle when unselected.\r\n * @cssprop --m3e-switch-unselected-handle-width - Width of the handle when unselected.\r\n * @cssprop --m3e-switch-with-icon-handle-height - Height of the handle when icons are present.\r\n * @cssprop --m3e-switch-with-icon-handle-width - Width of the handle when icons are present.\r\n * @cssprop --m3e-switch-selected-handle-height - Height of the handle when selected.\r\n * @cssprop --m3e-switch-selected-handle-width - Width of the handle when selected.\r\n * @cssprop --m3e-switch-pressed-handle-height - Height of the handle during press.\r\n * @cssprop --m3e-switch-pressed-handle-width - Width of the handle during press.\r\n * @cssprop --m3e-switch-handle-shape - Corner shape of the handle.\r\n * @cssprop --m3e-switch-selected-handle-color - Handle color when selected.\r\n * @cssprop --m3e-switch-unselected-handle-color - Handle color when unselected.\r\n * @cssprop --m3e-switch-state-layer-size - Diameter of the state layer overlay.\r\n * @cssprop --m3e-switch-state-layer-shape - Corner shape of the state layer.\r\n * @cssprop --m3e-switch-disabled-selected-icon-color - Icon color when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-selected-icon-opacity - Icon opacity when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-icon-color - Icon color when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-icon-opacity - Icon opacity when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-track-opacity - Track opacity when disabled.\r\n * @cssprop --m3e-switch-disabled-selected-track-color - Track color when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-track-color - Track color when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-track-outline-color - Outline color when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-handle-opacity - Handle opacity when unselected and disabled.\r\n * @cssprop --m3e-switch-disabled-selected-handle-opacity - Handle opacity when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-selected-handle-color - Handle color when selected and disabled.\r\n * @cssprop --m3e-switch-disabled-unselected-handle-color - Handle color when unselected and disabled.\r\n * @cssprop --m3e-switch-selected-hover-icon-color - Icon color when selected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-icon-color - Icon color when unselected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-track-color - Track color when selected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-state-layer-color - State layer color when selected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-state-layer-opacity - State layer opacity when selected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-track-color - Track color when unselected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-track-outline-color - Outline color when unselected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-state-layer-color - State layer color when unselected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-state-layer-opacity - State layer opacity when unselected and hovered.\r\n * @cssprop --m3e-switch-selected-hover-handle-color - Handle color when selected and hovered.\r\n * @cssprop --m3e-switch-unselected-hover-handle-color - Handle color when unselected and hovered.\r\n * @cssprop --m3e-switch-selected-focus-icon-color - Icon color when selected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-icon-color - Icon color when unselected and focused.\r\n * @cssprop --m3e-switch-selected-focus-track-color - Track color when selected and focused.\r\n * @cssprop --m3e-switch-selected-focus-state-layer-color - State layer color when selected and focused.\r\n * @cssprop --m3e-switch-selected-focus-state-layer-opacity - State layer opacity when selected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-track-color - Track color when unselected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-track-outline-color - Outline color when unselected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-state-layer-color - State layer color when unselected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-state-layer-opacity - State layer opacity when unselected and focused.\r\n * @cssprop --m3e-switch-selected-focus-handle-color - Handle color when selected and focused.\r\n * @cssprop --m3e-switch-unselected-focus-handle-color - Handle color when unselected and focused.\r\n * @cssprop --m3e-switch-selected-pressed-icon-color - Icon color when selected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-icon-color - Icon color when unselected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-track-color - Track color when selected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-state-layer-color - State layer color when selected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-state-layer-opacity - State layer opacity when selected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-track-color - Track color when unselected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-track-outline-color - Outline color when unselected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-state-layer-color - State layer color when unselected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-state-layer-opacity - State layer opacity when unselected and pressed.\r\n * @cssprop --m3e-switch-selected-pressed-handle-color - Handle color when selected and pressed.\r\n * @cssprop --m3e-switch-unselected-pressed-handle-color - Handle color when unselected and pressed.\r\n */\r\n@customElement(\"m3e-switch\")\r\nexport class M3eSwitchElement extends Labelled(\r\n Dirty(\r\n Touched(\r\n ConstraintValidation(\r\n Checked(FormAssociated(KeyboardClick(Focusable(Disabled(AttachInternals(Role(LitElement, \"switch\"))))))),\r\n ),\r\n ),\r\n ),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n SwitchStyle,\r\n SwitchStateLayerStyle,\r\n SwitchTrackStyle,\r\n SwitchHandleStyle,\r\n SwitchIconStyle,\r\n ];\r\n\r\n /** @private */ @query(\".track\") private readonly _track?: HTMLElement;\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ readonly #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n /** @private */ readonly #hoverController = new HoverController(this, {\r\n target: null,\r\n callback: (hovering) => {\r\n if (this.disabled) return;\r\n if (hovering) {\r\n this._stateLayer?.show(\"hover\");\r\n } else {\r\n this._stateLayer?.hide(\"hover\");\r\n }\r\n },\r\n });\r\n\r\n /** @private */ readonly #pressedController = new PressedController(this, {\r\n target: null,\r\n callback: (pressed) => this._track?.classList.toggle(\"pressed\", pressed && !this.disabled),\r\n });\r\n\r\n constructor() {\r\n super();\r\n\r\n new PressedController(this, {\r\n isPressedKey: (key) => key === \" \",\r\n callback: (pressed) => this._track?.classList.toggle(\"pressed\", pressed && !this.disabled),\r\n });\r\n }\r\n\r\n /**\r\n * The icons to present.\r\n * @default \"none\"\r\n */\r\n @property({ reflect: true }) icons: SwitchIcons = \"none\";\r\n\r\n /**\r\n * A string representing the value of the switch.\r\n * @default \"on\"\r\n */\r\n @property() value = \"on\";\r\n\r\n /** @inheritdoc @private */\r\n override get [formValue](): string | File | FormData | null {\r\n return this.checked && !this.disabled ? this.value : null;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n for (const label of this.labels) {\r\n this.#hoverController.observe(label);\r\n this.#pressedController.observe(label);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n for (const label of this.labels) {\r\n this.#hoverController.unobserve(label);\r\n this.#pressedController.unobserve(label);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<m3e-focus-ring class=\"focus-ring\"></m3e-focus-ring>\r\n <div class=\"track\" aria-hidden=\"true\">\r\n <div class=\"touch\" aria-hidden=\"true\"></div>\r\n <div class=\"handle\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"></m3e-state-layer>\r\n <div class=\"base\">${this.#renderIcon()}</div>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderIcon(): unknown {\r\n return this.checked\r\n ? html`<svg class=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n <path fill=\"currentColor\" d=\"M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z\"></path>\r\n </svg>`\r\n : html`<svg class=\"icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\" />\r\n </svg>`;\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n if (e.defaultPrevented) return;\r\n\r\n if (this.dispatchEvent(new Event(\"beforeinput\", { bubbles: true, cancelable: true }))) {\r\n this.checked = !this.checked;\r\n\r\n this.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n\r\n // Prevent default avoids double-click in FireFox.\r\n if (this.closest(\"label\")) {\r\n e.preventDefault();\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-switch\": M3eSwitchElement;\r\n }\r\n}\r\n"],"names":["SwitchToken","unsafeCSS","DesignToken","color","onPrimaryContainer","surfaceContainerHighest","outline","shape","corner","full","primary","onPrimary","onSurface","surface","onSurfaceVariant","primaryContainer","SwitchHandleStyle","css","motion","duration","short4","easing","standard","spring","fastEffects","fastSpatial","SwitchIconStyle","SwitchStateLayerStyle","SwitchStyle","SwitchTrackStyle","M3eSwitchElement","Labelled","Dirty","Touched","ConstraintValidation","Checked","FormAssociated","KeyboardClick","Focusable","Disabled","AttachInternals","Role","LitElement","constructor","super","_M3eSwitchElement_clickHandler","set","this","e","__classPrivateFieldGet","call","_M3eSwitchElement_hoverController","HoverController","target","callback","hovering","disabled","_stateLayer","show","hide","_M3eSwitchElement_pressedController","PressedController","pressed","_track","classList","toggle","icons","value","isPressedKey","key","WeakMap","_M3eSwitchElement_instances","WeakSet","formValue","checked","connectedCallback","addEventListener","label","labels","observe","disconnectedCallback","removeEventListener","unobserve","firstUpdated","_changedProperties","_focusRing","forEach","x","attach","render","html","_M3eSwitchElement_renderIcon","defaultPrevented","dispatchEvent","Event","bubbles","cancelable","closest","preventDefault","styles","__decorate","query","prototype","property","reflect","customElement"],"mappings":"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"}
package/dist/tabs.js CHANGED
@@ -6,7 +6,7 @@
6
6
  import { __classPrivateFieldGet, __decorate, __classPrivateFieldSet } from 'tslib';
7
7
  import { LitElement, html, css, nothing, unsafeCSS } from 'lit';
8
8
  import { query, state, property } from 'lit/decorators.js';
9
- import { Selected, HtmlFor, KeyboardClick, Focusable, Disabled, AttachInternals, Role, DesignToken, customElement, ResizeController, addCustomState, hasCustomState, deleteCustomState } from '@m3e/web/core';
9
+ import { Selected, HtmlFor, KeyboardClick, Focusable, Disabled, AttachInternals, Role, DesignToken, customElement, VelocityTracker, ResizeController, addCustomState, hasCustomState, prefersReducedMotion, deleteCustomState } from '@m3e/web/core';
10
10
  import { addAriaReferencedId, removeAriaReferencedId, selectionManager, SelectionManager } from '@m3e/web/core/a11y';
11
11
  import { ifDefined } from 'lit/directives/if-defined.js';
12
12
  import { M3eDirectionality } from '@m3e/web/core/bidi';
@@ -46,9 +46,10 @@ var M3eTabElement_1;
46
46
  * @attr for - The identifier of the interactive control to which this element is attached.
47
47
  * @attr selected - Whether the element is selected.
48
48
  *
49
- * @fires input - Emitted when the selected state changes.
50
- * @fires change - Emitted when the selected state changes.
51
- * @fires click - Emitted when the element is clicked.
49
+ * @fires beforeinput - Dispatched before the selected state changes.
50
+ * @fires input - Dispatched when the selected state changes.
51
+ * @fires change - Dispatched when the selected state changes.
52
+ * @fires click - Dispatched when the element is clicked.
52
53
  *
53
54
  * @cssprop --m3e-tab-font-size - Font size for tab label.
54
55
  * @cssprop --m3e-tab-font-weight - Font weight for tab label.
@@ -125,18 +126,18 @@ _M3eTabElement_handleClick = function _M3eTabElement_handleClick(e) {
125
126
  e.stopImmediatePropagation();
126
127
  }
127
128
  if (e.defaultPrevented || this.selected) return;
128
- this.selected = true;
129
- if (this.dispatchEvent(new Event("input", {
129
+ if (this.dispatchEvent(new Event("beforeinput", {
130
130
  bubbles: true,
131
- composed: true,
132
131
  cancelable: true
133
132
  }))) {
133
+ this.selected = true;
134
134
  this.closest("m3e-tabs")?.[selectionManager].notifySelectionChange(this);
135
+ this.dispatchEvent(new Event("input", {
136
+ bubbles: true
137
+ }));
135
138
  this.dispatchEvent(new Event("change", {
136
139
  bubbles: true
137
140
  }));
138
- } else {
139
- this.selected = false;
140
141
  }
141
142
  };
142
143
  /** The styles of the element. */
@@ -192,7 +193,7 @@ let M3eTabPanelElement = class M3eTabPanelElement extends Role(LitElement, "tabp
192
193
  M3eTabPanelElement.styles = css`:host { display: block; overflow-y: auto; scrollbar-width: ${DesignToken.scrollbar.width}; scrollbar-color: ${DesignToken.scrollbar.color}; }`;
193
194
  M3eTabPanelElement = __decorate([customElement("m3e-tab-panel")], M3eTabPanelElement);
194
195
 
195
- var _M3eTabsElement_instances, _M3eTabsElement_directionalitySubscription, _M3eTabsElement_renderHeader, _M3eTabsElement_handleSlotChange, _M3eTabsElement_handleKeyDown, _M3eTabsElement_handleChange, _M3eTabsElement_handleSelectedChange, _M3eTabsElement_updateInkBar, _a;
196
+ var _M3eTabsElement_instances, _M3eTabsElement_directionalitySubscription, _M3eTabsElement_swipe, _M3eTabsElement_velocityTracker, _M3eTabsElement_renderHeader, _M3eTabsElement_handleSlotChange, _M3eTabsElement_handleKeyDown, _M3eTabsElement_handleChange, _M3eTabsElement_handleSelectedChange, _M3eTabsElement_handleActiveItemChange, _M3eTabsElement_handleTabsPaginationChange, _M3eTabsElement_handleTabsPointerDown, _M3eTabsElement_handleTabsPointerMove, _M3eTabsElement_handleTabsPointerUp, _M3eTabsElement_handleTabsPointerCancel, _M3eTabsElement_handleTabsLostPointerCapture, _M3eTabsElement_endSwipeGesture, _M3eTabsElement_scrollTabIntoView, _M3eTabsElement_updateInkBar, _a;
196
197
  const MIN_PRIMARY_TAB_WIDTH = 24;
197
198
  /**
198
199
  * Organizes content into separate views where only one view can be visible at a time.
@@ -234,7 +235,9 @@ const MIN_PRIMARY_TAB_WIDTH = 24;
234
235
  * @attr stretch - Whether tabs are stretched to fill the header.
235
236
  * @attr variant - The appearance variant of the tabs.
236
237
  *
237
- * @fires change - Emitted when the selected tab changes.
238
+ * @fires beforeinput - Dispatched before the selected state of a tab changes.
239
+ * @fires input - Dispatched when the selected state of a tab changes.
240
+ * @fires change - Dispatched when the selected tab changes.
238
241
  *
239
242
  * @cssprop --m3e-tabs-paginator-button-icon-size - Overrides the icon size for paginator buttons.
240
243
  * @cssprop --m3e-tabs-active-indicator-color - Color of the active tab indicator.
@@ -252,13 +255,12 @@ let M3eTabsElement = class M3eTabsElement extends AttachInternals(LitElement) {
252
255
  _M3eTabsElement_directionalitySubscription.set(this, void 0);
253
256
  /** @private */
254
257
  this._selectedIndex = null;
258
+ /** @private */
259
+ _M3eTabsElement_swipe.set(this, void 0);
260
+ /** @private */
261
+ _M3eTabsElement_velocityTracker.set(this, new VelocityTracker());
255
262
  /** @internal */
256
- this[_a] = new SelectionManager().onSelectedItemsChange(() => __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleSelectedChange).call(this)).withHomeAndEnd().withWrap().withDirectionality(M3eDirectionality.current);
257
- /**
258
- * Whether scroll buttons are disabled.
259
- * @default false
260
- */
261
- this.disablePagination = false;
263
+ this[_a] = new SelectionManager().onSelectedItemsChange(() => __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleSelectedChange).call(this)).onActiveItemChange(() => __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleActiveItemChange).call(this)).withHomeAndEnd().withWrap().withDirectionality(M3eDirectionality.current);
262
264
  /**
263
265
  * The position of the tab headers.
264
266
  * @default "before"
@@ -288,10 +290,43 @@ let M3eTabsElement = class M3eTabsElement extends AttachInternals(LitElement) {
288
290
  skipInitial: true,
289
291
  callback: () => {
290
292
  addCustomState(this, "--no-animate");
291
- __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_updateInkBar).call(this);
293
+ const activeTab = this[selectionManager].activeItem ?? this.selectedTab;
294
+ if (activeTab) {
295
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_scrollTabIntoView).call(this, activeTab, true);
296
+ } else {
297
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_updateInkBar).call(this);
298
+ }
292
299
  }
293
300
  });
294
301
  }
302
+ /**
303
+ * Whether scroll buttons are disabled.
304
+ * @default false
305
+ */
306
+ get disablePagination() {
307
+ switch (this.getAttribute("disable-pagination")) {
308
+ case "auto":
309
+ return "auto";
310
+ case "":
311
+ case "true":
312
+ return true;
313
+ default:
314
+ return false;
315
+ }
316
+ }
317
+ set disablePagination(value) {
318
+ switch (value) {
319
+ case false:
320
+ this.removeAttribute("disable-pagination");
321
+ break;
322
+ case true:
323
+ this.toggleAttribute("disable-pagination", true);
324
+ break;
325
+ case "auto":
326
+ this.setAttribute("disable-pagination", "auto");
327
+ break;
328
+ }
329
+ }
295
330
  /** The tabs. */
296
331
  get tabs() {
297
332
  return this[selectionManager]?.items ?? [];
@@ -344,14 +379,16 @@ let M3eTabsElement = class M3eTabsElement extends AttachInternals(LitElement) {
344
379
  panelIndex = undefined;
345
380
  }
346
381
  }
347
- return html`${this.headerPosition === "before" ? __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_renderHeader).call(this) : nothing}<m3e-slide class="tabs" selected-index="${ifDefined(panelIndex)}"><slot name="panel"></slot></m3e-slide>${this.headerPosition === "after" ? __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_renderHeader).call(this) : nothing}`;
382
+ return html`${this.headerPosition === "before" ? __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_renderHeader).call(this) : nothing}<m3e-slide class="tabs" selected-index="${ifDefined(panelIndex)}" @pointerdown="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleTabsPointerDown)}" @pointermove="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleTabsPointerMove)}" @pointerup="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleTabsPointerUp)}" @pointercancel="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleTabsPointerCancel)}" @lostpointercapture="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleTabsLostPointerCapture)}"><slot name="panel"></slot></m3e-slide>${this.headerPosition === "after" ? __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_renderHeader).call(this) : nothing}`;
348
383
  }
349
384
  };
350
385
  _M3eTabsElement_directionalitySubscription = new WeakMap();
386
+ _M3eTabsElement_swipe = new WeakMap();
387
+ _M3eTabsElement_velocityTracker = new WeakMap();
351
388
  _M3eTabsElement_instances = new WeakSet();
352
389
  _a = selectionManager;
353
390
  _M3eTabsElement_renderHeader = function _M3eTabsElement_renderHeader() {
354
- return html`<m3e-slide-group class="tablist" threshold="8" previous-page-label="${this.previousPageLabel}" next-page-label="${this.nextPageLabel}" ?disabled="${this.disablePagination}"><slot name="prev-icon" slot="prev-icon">${M3eDirectionality.current === "ltr" ? html`<svg class="prev icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M640-80 240-480l400-400 71 71-329 329 329 329-71 71Z"/></svg>` : html`<svg class="next icon" viewBox="0 -960 960 960" fill="currentColor"><path d="m321-80-71-71 329-329-329-329 71-71 400 400L321-80Z"/></svg>`}</slot><slot name="next-icon" slot="next-icon">${M3eDirectionality.current === "ltr" ? html`<svg class="next icon" viewBox="0 -960 960 960" fill="currentColor"><path d="m321-80-71-71 329-329-329-329 71-71 400 400L321-80Z"/></svg>` : html`<svg class="prev icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M640-80 240-480l400-400 71 71-329 329 329 329-71 71Z"/></svg>`}</slot><div class="header" role="tablist"><div class="tabs"><slot @slotchange="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleSlotChange)}" @keydown="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleKeyDown)}" @change="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleChange)}"></slot></div><div class="ink-bar" aria-hidden="true"><div class="active-indicator"></div></div></div></m3e-slide-group>`;
391
+ return html`<m3e-slide-group class="tablist" threshold="8" previous-page-label="${this.previousPageLabel}" next-page-label="${this.nextPageLabel}" ?disabled="${this.disablePagination === "auto" ? matchMedia("(hover: none) and (pointer: coarse)").matches : this.disablePagination}" @pagination-changed="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleTabsPaginationChange)}"><slot name="prev-icon" slot="prev-icon">${M3eDirectionality.current === "ltr" ? html`<svg class="prev icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M640-80 240-480l400-400 71 71-329 329 329 329-71 71Z"/></svg>` : html`<svg class="next icon" viewBox="0 -960 960 960" fill="currentColor"><path d="m321-80-71-71 329-329-329-329 71-71 400 400L321-80Z"/></svg>`}</slot><slot name="next-icon" slot="next-icon">${M3eDirectionality.current === "ltr" ? html`<svg class="next icon" viewBox="0 -960 960 960" fill="currentColor"><path d="m321-80-71-71 329-329-329-329 71-71 400 400L321-80Z"/></svg>` : html`<svg class="prev icon" viewBox="0 -960 960 960" fill="currentColor"><path d="M640-80 240-480l400-400 71 71-329 329 329 329-71 71Z"/></svg>`}</slot><div class="header" role="tablist"><div class="tabs"><slot @slotchange="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleSlotChange)}" @keydown="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleKeyDown)}" @change="${__classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_handleChange)}"></slot></div><div class="ink-bar" aria-hidden="true"><div class="active-indicator"></div></div></div></m3e-slide-group>`;
355
392
  };
356
393
  _M3eTabsElement_handleSlotChange = function _M3eTabsElement_handleSlotChange() {
357
394
  this[selectionManager].setItems([...this.querySelectorAll("m3e-tab")]);
@@ -372,6 +409,142 @@ _M3eTabsElement_handleSelectedChange = function _M3eTabsElement_handleSelectedCh
372
409
  selectedIndex = null;
373
410
  }
374
411
  this._selectedIndex = selectedIndex;
412
+ if (selected) {
413
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_scrollTabIntoView).call(this, selected, hasCustomState(this, "--no-animate"));
414
+ } else {
415
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_updateInkBar).call(this);
416
+ }
417
+ };
418
+ _M3eTabsElement_handleActiveItemChange = function _M3eTabsElement_handleActiveItemChange() {
419
+ if (this[selectionManager].activeItem) {
420
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_scrollTabIntoView).call(this, this[selectionManager].activeItem, hasCustomState(this, "--no-animate"));
421
+ }
422
+ };
423
+ _M3eTabsElement_handleTabsPaginationChange = function _M3eTabsElement_handleTabsPaginationChange() {
424
+ if (this.disablePagination) return;
425
+ const activeTab = this[selectionManager].activeItem ?? this.selectedTab;
426
+ if (activeTab) {
427
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_scrollTabIntoView).call(this, activeTab, true);
428
+ }
429
+ };
430
+ _M3eTabsElement_handleTabsPointerDown = function _M3eTabsElement_handleTabsPointerDown(e) {
431
+ if (e.pointerType !== "touch") {
432
+ return; // swipe only supported for touch
433
+ }
434
+ e.currentTarget.setPointerCapture(e.pointerId);
435
+ __classPrivateFieldSet(this, _M3eTabsElement_swipe, {
436
+ x: e.clientX,
437
+ y: e.clientY
438
+ }, "f");
439
+ __classPrivateFieldGet(this, _M3eTabsElement_velocityTracker, "f").reset();
440
+ __classPrivateFieldGet(this, _M3eTabsElement_velocityTracker, "f").add(e.clientX);
441
+ };
442
+ _M3eTabsElement_handleTabsPointerMove = function _M3eTabsElement_handleTabsPointerMove(e) {
443
+ if (!__classPrivateFieldGet(this, _M3eTabsElement_swipe, "f") || !e.currentTarget.hasPointerCapture(e.pointerId)) {
444
+ return;
445
+ }
446
+ let dx = e.clientX - __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").x;
447
+ const dy = e.clientY - __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").y;
448
+ if (this.selectedIndex === 0 && dx > 0) {
449
+ dx = 0;
450
+ }
451
+ if (this.selectedIndex === this.tabs.length - 1 && dx < 0) {
452
+ dx = 0;
453
+ }
454
+ if (!__classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").dir) {
455
+ if (Math.abs(dx) > 10) {
456
+ __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").dir = "horizontal";
457
+ } else if (Math.abs(dy) > 10) {
458
+ __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").dir = "vertical";
459
+ } else {
460
+ return;
461
+ }
462
+ }
463
+ if (__classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").dir === "vertical") {
464
+ return;
465
+ }
466
+ __classPrivateFieldGet(this, _M3eTabsElement_velocityTracker, "f").add(e.clientX);
467
+ __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").currentX = dx;
468
+ this.shadowRoot?.querySelector("m3e-slide")?.classList.add("sliding");
469
+ this.selectedTab?.control?.style.setProperty("--_tabs-slide-offset-x", `${dx}px`);
470
+ const nextTab = this.tabs[dx > 0 ? this.selectedIndex - 1 : this.selectedIndex + 1];
471
+ nextTab?.control?.style.setProperty("--_tabs-slide-offset-x", `${dx}px`);
472
+ nextTab?.control?.style.setProperty("--_tabs-slide-visibility", "visible");
473
+ const prevTab = this.tabs[dx > 0 ? this.selectedIndex + 1 : this.selectedIndex - 1];
474
+ prevTab?.control?.style.removeProperty("--_tabs-slide-offset-x");
475
+ prevTab?.control?.style.removeProperty("--_tabs-slide-visibility");
476
+ };
477
+ _M3eTabsElement_handleTabsPointerUp = function _M3eTabsElement_handleTabsPointerUp(e) {
478
+ if (!e.currentTarget.hasPointerCapture(e.pointerId)) {
479
+ return;
480
+ }
481
+ e.currentTarget.releasePointerCapture(e.pointerId);
482
+ if (__classPrivateFieldGet(this, _M3eTabsElement_swipe, "f") && __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").dir === "horizontal" && __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").currentX !== undefined) {
483
+ const dx = __classPrivateFieldGet(this, _M3eTabsElement_swipe, "f").currentX;
484
+ const threshold = this.clientWidth * 0.33;
485
+ const velocity = __classPrivateFieldGet(this, _M3eTabsElement_velocityTracker, "f").getVelocity();
486
+ const significantVelocityThreshold = e.pointerType === "touch" ? 1200 : 500;
487
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_endSwipeGesture).call(this);
488
+ if (Math.abs(dx) > threshold || Math.abs(velocity) > significantVelocityThreshold) {
489
+ if (dx > threshold) {
490
+ // go to the previous tab only if its not disabled.
491
+ if (this.selectedIndex > 0 && this.tabs.length > 1 && !this.tabs[this.selectedIndex - 1].disabled) {
492
+ this.selectedIndex--;
493
+ }
494
+ } else if (dx < -threshold) {
495
+ // go to the next tab only if its not disabled.
496
+ if (this.selectedIndex < this.tabs.length - 1 && !this.tabs[this.selectedIndex + 1].disabled) {
497
+ this.selectedIndex++;
498
+ }
499
+ }
500
+ }
501
+ } else {
502
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_endSwipeGesture).call(this);
503
+ }
504
+ };
505
+ _M3eTabsElement_handleTabsPointerCancel = function _M3eTabsElement_handleTabsPointerCancel(e) {
506
+ if (e.currentTarget.hasPointerCapture(e.pointerId)) {
507
+ e.currentTarget.releasePointerCapture(e.pointerId);
508
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_endSwipeGesture).call(this);
509
+ }
510
+ };
511
+ _M3eTabsElement_handleTabsLostPointerCapture = function _M3eTabsElement_handleTabsLostPointerCapture() {
512
+ __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_endSwipeGesture).call(this);
513
+ };
514
+ _M3eTabsElement_endSwipeGesture = function _M3eTabsElement_endSwipeGesture() {
515
+ __classPrivateFieldSet(this, _M3eTabsElement_swipe, undefined, "f");
516
+ __classPrivateFieldGet(this, _M3eTabsElement_velocityTracker, "f").reset();
517
+ const slide = this.shadowRoot?.querySelector("m3e-slide");
518
+ if (!slide || !slide.classList.contains("sliding")) {
519
+ return;
520
+ }
521
+ slide.classList.add("snap");
522
+ if (!prefersReducedMotion()) {
523
+ slide.addEventListener("transitionend", () => slide.classList.remove("snap"), {
524
+ once: true
525
+ });
526
+ }
527
+ slide.classList.remove("sliding");
528
+ this.tabs.forEach(x => {
529
+ x.control?.style.removeProperty("--_tabs-slide-offset-x");
530
+ x.control?.style.removeProperty("--_tabs-slide-visibility");
531
+ });
532
+ };
533
+ _M3eTabsElement_scrollTabIntoView = /** @private */
534
+ async function _M3eTabsElement_scrollTabIntoView(tab, instant) {
535
+ await this.updateComplete;
536
+ for (const tab of this.tabs) {
537
+ await tab.updateComplete;
538
+ }
539
+ await this._tablist?.updateComplete;
540
+ const scrollMargin = 48;
541
+ const scrollContainer = this._tablist?.scrollContainer;
542
+ if (!scrollContainer) return;
543
+ scrollContainer?.scrollTo({
544
+ behavior: instant ? "instant" : "smooth",
545
+ top: 0,
546
+ left: Math.min(tab.offsetLeft - scrollContainer.offsetLeft - scrollMargin, Math.max(tab.offsetLeft + tab.offsetWidth - scrollContainer.offsetWidth - scrollContainer.offsetLeft + scrollMargin, scrollContainer.scrollLeft))
547
+ });
375
548
  __classPrivateFieldGet(this, _M3eTabsElement_instances, "m", _M3eTabsElement_updateInkBar).call(this);
376
549
  };
377
550
  _M3eTabsElement_updateInkBar = function _M3eTabsElement_updateInkBar() {
@@ -401,13 +574,14 @@ _M3eTabsElement_updateInkBar = function _M3eTabsElement_updateInkBar() {
401
574
  };
402
575
  /** The styles of the element. */
403
576
  M3eTabsElement.styles = css`:host { display: flex; flex-direction: column; position: relative; } .tablist { position: relative; box-sizing: border-box; flex: none; } ::slotted(prev-icon), ::slotted(next-icon), .icon { width: 1em; font-size: var(--m3e-tabs-paginator-button-icon-size, var(--m3e-icon-button-icon-size, 1.5rem)) !important; } .header { display: flex; flex-direction: column; } .tabs { display: flex; flex-wrap: nowrap; align-items: center; } .ink-bar { box-sizing: border-box; height: var(--_tabs-active-indicator-thickness); } .active-indicator { position: relative; height: var(--_tabs-active-indicator-thickness); left: calc(var(--_tabs-active-tab-position) + var(--_tabs-activate-indicator-inset, 0px)); width: calc(var(--_tabs-active-tab-size) - calc(var(--_tabs-activate-indicator-inset, 0px) * 2)); background-color: var(--m3e-tabs-active-indicator-color, ${DesignToken.color.primary}); transition: ${unsafeCSS(`left var(--m3e-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard},
404
- width var(--m3e-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard}`)}; } :host([header-position="after"]) .header { flex-direction: column-reverse; } :host([header-position="before"]) .ink-bar { margin-top: calc(0px - var(--_tabs-active-indicator-thickness)); } :host([header-position="before"]) .tablist { --m3e-slide-group-divider-bottom: var(--m3e-divider-thickness, 1px) solid var(--m3e-divider-color, ${DesignToken.color.outlineVariant}); } :host([header-position="after"]) .ink-bar { margin-bottom: calc(0px - var(--_tabs-active-indicator-thickness)); } :host([header-position="after"]) .tablist { --m3e-slide-group-divider-top: var(--m3e-divider-thickness, 1px) solid var(--m3e-divider-color, ${DesignToken.color.outlineVariant}); } :host([header-position="before"][variant="primary"]) .active-indicator { border-radius: var(--m3e-tabs-primary-before-active-indicator-shape, ${DesignToken.shape.corner.extraSmallTop}); } :host([header-position="after"][variant="primary"]) .active-indicator { border-radius: var(--m3e-tabs-primary-after-active-indicator-shape, ${DesignToken.shape.corner.extraSmallBottom}); } .tabs { flex: 1 1 auto; } :host([variant="primary"]) .tablist { --_tabs-activate-indicator-inset: var(--m3e-tabs-primary-active-indicator-inset, 0.125rem); --_tabs-active-indicator-thickness: var(--m3e-tabs-primary-active-indicator-thickness, 3px); --_tab-height: 4rem; } :host([header-position="before"]) .tablist { --_tab-focus-ring-bottom-offset: calc(var(--_tabs-active-indicator-thickness) + 1px); } :host([header-position="after"]) .tablist { --_tab-focus-ring-top-offset: calc(var(--_tabs-active-indicator-thickness) + 2px); } :host([header-position="before"][variant="primary"]) .tablist { --_tab-direction: column; } :host([header-position="after"][variant="primary"]) .tablist { --_tab-direction: column-reverse; } :host([variant="secondary"]) .tablist { --_tabs-active-indicator-thickness: var(--m3e-tabs-secondary-active-indicator-thickness, 2px); --_tab-height: 3rem; --_tab-selected-color: ${DesignToken.color.onSurface}; --_tab-selected-container-hover-color: ${DesignToken.color.onSurface}; --_tab-selected-container-focus-color: ${DesignToken.color.onSurface}; --_tab-selected-ripple-color: ${DesignToken.color.onSurface}; } :host([stretch]) .header { width: 100%; --_tab-grow: 1; } :host(:is(:state(--no-animate), :--no-animate)) .active-indicator { transition: none; } @media (prefers-reduced-motion) { .active-indicator { transition: none; } } @media (forced-colors: active) { .active-indicator { background-color: ButtonText; --m3e-divider-color: GrayText; } }`;
577
+ width var(--m3e-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard}`)}; } :host([header-position="after"]) .header { flex-direction: column-reverse; } :host([header-position="before"]) .ink-bar { margin-top: calc(0px - var(--_tabs-active-indicator-thickness)); } :host([header-position="before"]) .tablist { --m3e-slide-group-divider-bottom: var(--m3e-divider-thickness, 1px) solid var(--m3e-divider-color, ${DesignToken.color.outlineVariant}); } :host([header-position="after"]) .ink-bar { margin-bottom: calc(0px - var(--_tabs-active-indicator-thickness)); } :host([header-position="after"]) .tablist { --m3e-slide-group-divider-top: var(--m3e-divider-thickness, 1px) solid var(--m3e-divider-color, ${DesignToken.color.outlineVariant}); } :host([header-position="before"][variant="primary"]) .active-indicator { border-radius: var(--m3e-tabs-primary-before-active-indicator-shape, ${DesignToken.shape.corner.extraSmallTop}); } :host([header-position="after"][variant="primary"]) .active-indicator { border-radius: var(--m3e-tabs-primary-after-active-indicator-shape, ${DesignToken.shape.corner.extraSmallBottom}); } .tabs { flex: 1 1 auto; } :host([variant="primary"]) .tablist { --_tabs-activate-indicator-inset: var(--m3e-tabs-primary-active-indicator-inset, 0.125rem); --_tabs-active-indicator-thickness: var(--m3e-tabs-primary-active-indicator-thickness, 3px); --_tab-height: 4rem; } :host([header-position="before"]) .tablist { --_tab-focus-ring-bottom-offset: calc(var(--_tabs-active-indicator-thickness) + 1px); } :host([header-position="after"]) .tablist { --_tab-focus-ring-top-offset: calc(var(--_tabs-active-indicator-thickness) + 2px); } :host([header-position="before"][variant="primary"]) .tablist { --_tab-direction: column; } :host([header-position="after"][variant="primary"]) .tablist { --_tab-direction: column-reverse; } :host([variant="secondary"]) .tablist { --_tabs-active-indicator-thickness: var(--m3e-tabs-secondary-active-indicator-thickness, 2px); --_tab-height: 3rem; --_tab-selected-color: ${DesignToken.color.onSurface}; --_tab-selected-container-hover-color: ${DesignToken.color.onSurface}; --_tab-selected-container-focus-color: ${DesignToken.color.onSurface}; --_tab-selected-ripple-color: ${DesignToken.color.onSurface}; } :host([stretch]) .header { width: 100%; --_tab-grow: 1; } .tabs.sliding ::slotted([slot="panel"]) { transform: translateX(var(--_tabs-slide-offset-x)); visibility: var(--_tabs-slide-visibility, "hidden"); } .tabs.snap ::slotted([slot="panel"]) { transition: ${unsafeCSS(`inset-inline-start var(--m3e-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard},
578
+ transform var(--m3e-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard},
579
+ visibility var(--m3e-slide-animation-duration, ${DesignToken.motion.duration.long2}) ${DesignToken.motion.easing.standard} allow-discrete`)}; } .tabs:not(.sliding) ::slotted([slot="panel"]) { transform: translateX(0); } :host(:is(:state(--no-animate), :--no-animate)) .active-indicator { transition: none; } @media (prefers-reduced-motion) { .active-indicator { transition: none; } .tabs.snap ::slotted([slot="panel"]) { transition: none; } } @media (forced-colors: active) { .active-indicator { background-color: ButtonText; --m3e-divider-color: GrayText; } }`;
405
580
  __decorate([query(".tablist")], M3eTabsElement.prototype, "_tablist", void 0);
406
581
  __decorate([state()], M3eTabsElement.prototype, "_selectedIndex", void 0);
407
582
  __decorate([property({
408
- attribute: "disable-pagination",
409
- type: Boolean
410
- })], M3eTabsElement.prototype, "disablePagination", void 0);
583
+ attribute: false
584
+ })], M3eTabsElement.prototype, "disablePagination", null);
411
585
  __decorate([property({
412
586
  attribute: "header-position",
413
587
  reflect: true