@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
package/dist/list.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../src/list/ListItemElement.ts","../../src/list/ListElement.ts","../../src/list/ExpandableListItemElement.ts","../../src/list/ActionListElement.ts","../../src/list/ListItemButtonElement.ts","../../src/list/ListActionElement.ts","../../src/list/ListOptionElement.ts","../../src/list/SelectionListElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n computeLineCount,\r\n DesignToken,\r\n ResizeController,\r\n Role,\r\n setCustomState,\r\n ReconnectedCallback,\r\n} from \"@m3e/web/core\";\r\n\r\nimport type { M3eListElement } from \"./ListElement\";\r\nimport { ListItemContentType } from \"./ListItemContentType\";\r\n\r\n/**\r\n * An item in a list.\r\n *\r\n * @description\r\n * The `m3e-list-item` component represents a single item within a list. It supports rich\r\n * content, leading/trailing media, overline, supporting text, and trailing supporting text\r\n * via named slots. The component is highly customizable through CSS custom properties and\r\n * is designed for accessibility and flexible layout.\r\n *\r\n * @example\r\n * The following example illustrates a list with a single item using all supported slots.\r\n *\r\n * Note: This example uses the `@m3e/icon` package to present Material Design symbols, but any icon package can be\r\n * substituted depending on your design system or preferences\r\n *\r\n * ```html\r\n * <m3e-list>\r\n * <m3e-list-item>\r\n * <m3e-icon slot=\"leading\" name=\"person\"></m3e-icon>\r\n * <span slot=\"overline\">Overline</span>\r\n * Headline\r\n * <span slot=\"supporting-text\">Supporting text</span>\r\n * <m3e-icon slot=\"trailing\" name=\"arrow_right\"></m3e-icon>\r\n * </m3e-list-item>\r\n * </m3e-list>\r\n * ```\r\n *\r\n * @tag m3e-list-item\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot trailing - Renders the trailing content of the list item.\r\n *\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-leading-space - Horizontal padding for the leading side.\r\n * @cssprop --m3e-list-item-trailing-space - Horizontal padding for the trailing side.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-one-line-top-space - Top padding for one-line items.\r\n * @cssprop --m3e-list-item-one-line-bottom-space - Bottom padding for one-line items.\r\n * @cssprop --m3e-list-item-two-line-top-space - Top padding for two-line items.\r\n * @cssprop --m3e-list-item-two-line-bottom-space - Bottom padding for two-line items.\r\n * @cssprop --m3e-list-item-three-line-top-space - Top padding for three-line items.\r\n * @cssprop --m3e-list-item-three-line-bottom-space - Bottom padding for three-line items.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-one-line-height - Minimum height of a one line list item.\r\n * @cssprop --m3e-list-item-two-line-height - Minimum height of a two line list item.\r\n * @cssprop --m3e-list-item-three-line-height - Minimum height of a three line list item.\r\n */\r\n@customElement(\"m3e-list-item\")\r\nexport class M3eListItemElement extends ReconnectedCallback(AttachInternals(Role(LitElement, \"listitem\"))) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n min-height: inherit;\r\n width: 100%;\r\n box-sizing: border-box;\r\n column-gap: var(--m3e-list-item-between-space, 1rem);\r\n padding-inline-start: var(--m3e-list-item-leading-space, 1rem);\r\n padding-inline-end: var(--m3e-list-item-trailing-space, 1rem);\r\n border-top-left-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n border-top-right-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n border-bottom-left-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n border-bottom-right-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n transition: ${unsafeCSS(\r\n `border-radius ${DesignToken.motion.spring.fastEffects}, background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n :host(:is(:state(--one-line), :--one-line)) {\r\n min-height: calc(var(--m3e-list-item-one-line-height, 3.5rem) + ${DesignToken.density.calc(-3)});\r\n }\r\n :host(:is(:state(--one-line), :--one-line)) .base {\r\n padding-block-start: var(--m3e-list-item-one-line-top-space, 0.5rem);\r\n padding-block-end: var(--m3e-list-item-one-line-bottom-space, 0.5rem);\r\n }\r\n :host(:is(:state(--two-line), :--two-line)) {\r\n min-height: calc(var(--m3e-list-item-two-line-height, 4.5rem) + ${DesignToken.density.calc(-3)});\r\n }\r\n :host(:is(:state(--two-line), :--two-line)) .base {\r\n padding-block-start: var(--m3e-list-item-two-line-top-space, 0.5rem);\r\n padding-block-end: var(--m3e-list-item-two-line-bottom-space, 0.5rem);\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) {\r\n min-height: calc(var(--m3e-list-item-three-line-height, 5.5rem) + ${DesignToken.density.calc(-3)});\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) .base {\r\n padding-block-start: var(--m3e-list-item-three-line-top-space, 0.75rem);\r\n padding-block-end: var(--m3e-list-item-three-line-bottom-space, 0.75rem);\r\n }\r\n :host(:not(:is(:state(--three-line), :--three-line))) .base {\r\n align-items: center;\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) .base {\r\n align-items: flex-start;\r\n }\r\n :host(:not(:disabled):not([selected])) .base:not(.hover).focus-visible:not(.pressed) {\r\n border-top-left-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n border-top-right-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n border-bottom-left-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n border-bottom-right-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n }\r\n :host(:not(:disabled):not([selected])) .base.hover,\r\n :host(:not(:disabled):not([selected])) .base.pressed {\r\n border-top-left-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n border-top-right-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n border-bottom-left-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n border-bottom-right-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n }\r\n .content {\r\n flex: 1 1 auto;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: unset;\r\n justify-content: unset;\r\n }\r\n ::slotted([slot=\"overline\"]) {\r\n font-size: var(--m3e-list-item-overline-font-size, ${DesignToken.typescale.standard.label.small.fontSize});\r\n font-weight: var(--m3e-list-item-overline-font-weight, ${DesignToken.typescale.standard.label.small.fontWeight});\r\n line-height: var(--m3e-list-item-overline-line-height, ${DesignToken.typescale.standard.label.small.lineHeight});\r\n letter-spacing: var(--m3e-list-item-overline-tracking, ${DesignToken.typescale.standard.label.small.tracking});\r\n }\r\n ::slotted([slot=\"supporting-text\"]) {\r\n font-size: var(--m3e-list-item-supporting-text-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(\r\n --m3e-list-item-supporting-text-font-weight,\r\n ${DesignToken.typescale.standard.body.medium.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-list-item-supporting-text-line-height,\r\n ${DesignToken.typescale.standard.body.medium.lineHeight}\r\n );\r\n letter-spacing: var(\r\n --m3e-list-item-supporting-text-tracking,\r\n ${DesignToken.typescale.standard.body.medium.tracking}\r\n );\r\n }\r\n ::slotted(:not([slot])) {\r\n font-size: var(--m3e-list-item-font-size, ${DesignToken.typescale.standard.body.large.fontSize});\r\n font-weight: var(--m3e-list-item-font-weight, ${DesignToken.typescale.standard.body.large.fontWeight});\r\n line-height: var(--m3e-list-item-line-height, ${DesignToken.typescale.standard.body.large.lineHeight});\r\n letter-spacing: var(--m3e-list-item-tracking, ${DesignToken.typescale.standard.body.large.tracking});\r\n }\r\n :host(:is(:state(--has-leading), :--has-leading)) slot[name=\"leading\"],\r\n :host(:is(:state(--has-trailing), :--has-trailing)) slot[name=\"trailing\"] {\r\n display: flex;\r\n justify-content: center;\r\n }\r\n :host(:not(:is(:state(--has-leading), :--has-leading))) slot[name=\"leading\"] {\r\n display: var(--_list-item-leading-reserved-display, contents);\r\n }\r\n :host(:not(:is(:state(--has-trailing), :--has-trailing))) slot[name=\"trailing\"] {\r\n display: var(--_list-item-trailing-reserved-display, contents);\r\n }\r\n slot[name=\"leading\"] {\r\n min-width: var(--_list-item-leading-reserved-space, 0px);\r\n margin-inline-start: calc(0px - var(--_list-item-leading-reserved-outset, 0px));\r\n }\r\n slot[name=\"trailing\"] {\r\n min-width: var(--_list-item-trailing-reserved-space, 0px);\r\n margin-inline-end: calc(0px - var(--_list-item-trailing-reserved-outset, 0px));\r\n }\r\n ::slotted(span[slot=\"trailing\"]),\r\n ::slotted([slot=\"trailing-supporting-text\"]) {\r\n white-space: nowrap;\r\n font-size: var(--m3e-list-item-trailing-text-font-size, ${DesignToken.typescale.standard.label.small.fontSize});\r\n font-weight: var(\r\n --m3e-list-item-trailing-text-font-weight,\r\n ${DesignToken.typescale.standard.label.small.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-list-item-trailing-text-line-height,\r\n ${DesignToken.typescale.standard.label.small.lineHeight}\r\n );\r\n letter-spacing: var(\r\n --m3e-list-item-trailing-text-tracking,\r\n ${DesignToken.typescale.standard.label.small.tracking}\r\n );\r\n }\r\n ::slotted(video[slot=\"leading\"]),\r\n ::slotted(video[slot=\"trailing\"]),\r\n ::slotted(img[slot=\"leading\"]),\r\n ::slotted(img[slot=\"trailing\"]) {\r\n display: block;\r\n margin: 0 auto;\r\n overflow: hidden;\r\n object-fit: cover;\r\n }\r\n ::slotted(video) {\r\n width: var(--m3e-list-item-video-width, 6.25rem);\r\n height: var(--m3e-list-item-video-height, 3.5rem);\r\n }\r\n ::slotted(video[slot=\"leading\"]),\r\n ::slotted(video[slot=\"trailing\"]) {\r\n border-radius: var(--m3e-list-item-video-shape, ${DesignToken.shape.corner.none});\r\n }\r\n ::slotted(video[slot=\"leading\"]) {\r\n margin-inline-start: calc(0px - var(--_list-item-leading-video-outset, 0px));\r\n }\r\n ::slotted(video[slot=\"trailing\"]) {\r\n margin-inline-end: calc(0px - var(--_list-item-trailing-video-outset, 0px));\r\n }\r\n ::slotted(img) {\r\n user-drag: none;\r\n user-select: none;\r\n pointer-events: none;\r\n width: var(--m3e-list-item-image-width, 3.5rem);\r\n height: var(--m3e-list-item-image-height, 3.5rem);\r\n }\r\n ::slotted(img[slot=\"leading\"]),\r\n ::slotted(img[slot=\"trailing\"]) {\r\n border-radius: var(--m3e-list-item-image-shape, ${DesignToken.shape.corner.none});\r\n }\r\n ::slotted(m3e-icon[slot=\"leading\"]),\r\n ::slotted(m3e-icon[slot=\"leading-icon\"]),\r\n ::slotted(m3e-icon[slot=\"trailing\"]),\r\n ::slotted(m3e-icon[slot=\"trailing-icon\"]) {\r\n --m3e-icon-size: var(--m3e-list-item-icon-size, 1.5rem);\r\n }\r\n :host(:not(:disabled)) ::slotted(m3e-icon[slot=\"leading\"]),\r\n :host(:not(:disabled)) ::slotted(m3e-icon[slot=\"leading-icon\"]) {\r\n color: var(--m3e-list-item-leading-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) .content {\r\n color: var(--m3e-list-item-label-text-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:disabled)) ::slotted([slot=\"overline\"]) {\r\n color: var(--m3e-list-item-overline-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) ::slotted([slot=\"supporting-text\"]) {\r\n color: var(--m3e-list-item-supporting-text-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) ::slotted([slot=\"trailing\"]),\r\n :host(:not(:disabled)) ::slotted([slot=\"trailing-supporting-text\"]),\r\n :host(:not(:disabled)) ::slotted([slot=\"trailing-icon\"]) {\r\n color: var(--m3e-list-item-trailing-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) .base {\r\n background-color: var(--_list-item-container-color, var(--m3e-list-item-container-color, transparent));\r\n }\r\n :host(:disabled) .base {\r\n background-color: var(--m3e-list-item-disabled-container-color, transparent);\r\n }\r\n :host(:disabled) ::slotted(video),\r\n :host(:disabled) ::slotted(img),\r\n :host(:disabled) ::slotted(m3e-avatar) {\r\n opacity: var(--m3e-list-item-disabled-media-opacity, 38%);\r\n }\r\n :host(:disabled) .content {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-label-text-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-label-text-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"overline\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-overline-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-overline-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"supporting-text\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-supporting-text-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-supporting-text-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"leading\"]),\r\n :host(:disabled) ::slotted([slot=\"leading-icon\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-leading-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-leading-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"trailing\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-supporting-text\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-icon\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-trailing-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-trailing-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:not(:disabled)) .state-layer {\r\n --m3e-state-layer-hover-color: var(--m3e-list-item-hover-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-hover-opacity: var(\r\n --m3e-list-item-hover-state-layer-opacity,\r\n ${DesignToken.state.hoverStateLayerOpacity}\r\n );\r\n --m3e-state-layer-focus-color: var(--m3e-list-item-focus-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-focus-opacity: var(\r\n --m3e-list-item-focus-state-layer-opacity,\r\n ${DesignToken.state.focusStateLayerOpacity}\r\n );\r\n }\r\n :host(:not(:disabled)) .ripple {\r\n --m3e-ripple-color: var(--m3e-list-item-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-ripple-opacity: var(\r\n --m3e-list-item-pressed-state-layer-opacity,\r\n ${DesignToken.state.pressedStateLayerOpacity}\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n .base {\r\n transition: none;\r\n }\r\n :host(:disabled) ::slotted([slot=\"leading\"]),\r\n :host(:disabled) ::slotted([slot=\"leading-icon\"]),\r\n :host(:disabled) .content,\r\n :host(:disabled) ::slotted([slot=\"overline\"]),\r\n :host(:disabled) ::slotted([slot=\"supporting-text\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-supporting-text\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-icon\"]) {\r\n color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */\r\n #resizeController = new ResizeController(this, { target: null, callback: () => this.#updateMultiline() });\r\n\r\n /** @private */ #leadingContentType: ListItemContentType;\r\n /** @private */ #trailingContentType: ListItemContentType;\r\n\r\n /** The type of leading content. */\r\n get leadingContentType(): ListItemContentType {\r\n return this.#leadingContentType;\r\n }\r\n\r\n /** The type of trailing content. */\r\n get trailingContentType(): ListItemContentType {\r\n return this.#trailingContentType;\r\n }\r\n\r\n /** @inheritdoc */\r\n override reconnectedCallback(): void {\r\n super.reconnectedCallback();\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n this.#initialize();\r\n }\r\n\r\n /** @private */\r\n #initialize(): void {\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\");\r\n if (content) {\r\n this.#resizeController.observe(content);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">${this._renderBase()}</div>`;\r\n }\r\n\r\n /** @internal */\r\n protected _renderBase(): unknown {\r\n return html`<slot name=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\">\r\n <slot name=\"leading-icon\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n </slot>\r\n <div class=\"content\">\r\n <slot name=\"overline\"></slot>\r\n <slot></slot>\r\n <slot name=\"supporting-text\"></slot>\r\n </div>\r\n <slot name=\"trailing\" @slotchange=\"${this._handleTrailingSlotChange}\">\r\n <slot name=\"trailing-supporting-text\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n <slot name=\"trailing-icon\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n </slot>`;\r\n }\r\n\r\n /** @private */\r\n #updateMultiline(): void {\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\") ?? null;\r\n const lines = content === null ? 0 : computeLineCount(content);\r\n setCustomState(this, \"--one-line\", lines <= 1);\r\n setCustomState(this, \"--two-line\", lines == 2);\r\n setCustomState(this, \"--three-line\", lines > 2);\r\n }\r\n\r\n /** @internal */\r\n protected _handleLeadingSlotChange(e: Event): void {\r\n const contentType = this.#leadingContentType;\r\n this.#leadingContentType = this.#getSlotContentType(e.target as HTMLSlotElement);\r\n setCustomState(this, \"--has-leading\", this.#leadingContentType !== undefined);\r\n if (contentType !== this.#leadingContentType) {\r\n this.closest<M3eListElement>(\"m3e-list,m3e-action-list,m3e-selection-list\")?.notifyLeadingContentTypeChange(\r\n contentType,\r\n this.#leadingContentType,\r\n );\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected _handleTrailingSlotChange(e: Event): void {\r\n const contentType = this.#trailingContentType;\r\n this.#trailingContentType = this.#getSlotContentType(e.target as HTMLSlotElement);\r\n setCustomState(this, \"--has-trailing\", this.#trailingContentType !== undefined);\r\n if (contentType !== this.#trailingContentType) {\r\n this.closest<M3eListElement>(\"m3e-list,m3e-action-list,m3e-selection-list\")?.notifyTrailingContentTypeChange(\r\n contentType,\r\n this.#trailingContentType,\r\n );\r\n }\r\n }\r\n\r\n /** @private */\r\n #getSlotContentType(slot: HTMLSlotElement): ListItemContentType {\r\n const elements = slot.assignedElements({ flatten: true });\r\n if (elements.some((x) => x.tagName === \"VIDEO\")) return \"video\";\r\n if (elements.some((x) => x.tagName === \"IMG\")) return \"image\";\r\n if (elements.some((x) => x.tagName === \"M3E-AVATAR\")) return \"avatar\";\r\n if (elements.some((x) => x.tagName === \"M3E-ICON\")) return \"icon\";\r\n return elements.length > 0 ? \"text\" : undefined;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list-item\": M3eListItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { AttachInternals, customElement, DesignToken, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\nimport { ListVariant } from \"./ListVariant\";\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\nimport { ListItemContentType } from \"./ListItemContentType\";\r\n\r\n/**\r\n * A list of items.\r\n *\r\n * @description\r\n * The `m3e-list` component provides a list container for organizing and displaying\r\n * multiple list items. It supports flexible layout, custom padding, and divider insets\r\n * via CSS custom properties.\r\n *\r\n * @example\r\n * The following example illustrates a list with a single item using all supported slots.\r\n *\r\n * Note: This example uses the `@m3e/icon` package to present Material Design symbols, but any icon package can be\r\n * substituted depending on your design system or preferences\r\n *\r\n * ```html\r\n * <m3e-list>\r\n * <m3e-list-item>\r\n * <m3e-icon slot=\"leading-icon\" name=\"person\"></m3e-icon>\r\n * <span slot=\"overline\">Overline</span>\r\n * Headline\r\n * <span slot=\"supporting-text\">Supporting text</span>\r\n * <span slot=\"trailing-text\">100+</span>\r\n * <m3e-icon slot=\"trailing-icon\" name=\"arrow_right\"></m3e-icon>\r\n * </m3e-list-item>\r\n * </m3e-list>\r\n * ```\r\n *\r\n * @tag m3e-list\r\n *\r\n * @slot - Renders the items of the list.\r\n *\r\n * @attr variant - The appearance variant of the list.\r\n *\r\n * @cssprop --m3e-list-divider-inset-start-size - Start inset for dividers within the list.\r\n * @cssprop --m3e-list-divider-inset-end-size - End inset for dividers within the list.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list items in segmented variant.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container.\r\n * @cssprop --m3e-segmented-list-item-container-color - Background color of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-disabled-container-color - Background color of disabled items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-container-shape - Border radius of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-hover-container-shape - Border radius of items in segmented variant on hover.\r\n * @cssprop --m3e-segmented-list-item-focus-container-shape - Border radius of items in segmented variant on focus.\r\n * @cssprop --m3e-segmented-list-item-selected-container-shape - Border radius of items in segmented variant when selected.\r\n */\r\n@customElement(\"m3e-list\")\r\nexport class M3eListElement extends AttachInternals(Role(LitElement, \"list\")) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n box-sizing: border-box;\r\n padding-block: var(--m3e-list-block-padding, 0px);\r\n\r\n --m3e-divider-inset-start-size: var(--m3e-list-divider-inset-start-size, 1rem);\r\n --m3e-divider-inset-end-size: var(--m3e-list-divider-inset-end-size, 1.5rem);\r\n }\r\n :host([variant=\"standard\"]) {\r\n --_list-item-leading-video-outset: var(--m3e-list-item-leading-space, 1rem);\r\n --_list-item-trailing-video-outset: var(--m3e-list-item-trailing-space, 1rem);\r\n --_expandable-list-item-expanded-toggle-icon-container-color: transparent;\r\n }\r\n :host([variant=\"segmented\"]) {\r\n row-gap: var(--m3e-segmented-list-segment-gap, 0.125rem);\r\n }\r\n :host([variant=\"segmented\"]) {\r\n --m3e-list-item-container-color: var(--m3e-segmented-list-item-container-color, ${DesignToken.color.surface});\r\n --m3e-list-item-disabled-container-color: var(\r\n --m3e-segmented-list-item-disabled-container-color,\r\n ${DesignToken.color.surface}\r\n );\r\n --m3e-list-item-container-shape: var(\r\n --m3e-segmented-list-item-container-shape,\r\n ${DesignToken.shape.corner.extraSmall}\r\n );\r\n --m3e-list-item-hover-container-shape: var(\r\n --m3e-segmented-list-item-hover-container-shape,\r\n ${DesignToken.shape.corner.medium}\r\n );\r\n --m3e-list-item-focus-container-shape: var(\r\n --m3e-segmented-list-item-focus-container-shape,\r\n ${DesignToken.shape.corner.large}\r\n );\r\n --m3e-list-item-selected-container-shape: var(\r\n --m3e-segmented-list-item-selected-container-shape,\r\n ${DesignToken.shape.corner.large}\r\n );\r\n --m3e-list-item-video-shape: var(--m3e-segmented-list-item-video-shape, ${DesignToken.shape.corner.small});\r\n --m3e-list-item-image-shape: var(--m3e-segmented-list-item-image-shape, ${DesignToken.shape.corner.small});\r\n --m3e-list-item-between-space: var(--m3e-segmented-list-item-spacing, 0.75rem);\r\n --_expandable-list-item-items-segment-gap: var(--m3e-segmented-list-segment-gap, 0.125rem);\r\n --_expandable-list-item-expanded-top-shape: var(\r\n --m3e-segmented-list-container-shape,\r\n ${DesignToken.shape.corner.large}\r\n );\r\n }\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--first), :--first)),\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--has-previous-open), :--has-previous-open):not([open])) {\r\n --_list-item-top-container-shape: var(--m3e-segmented-list-container-shape, ${DesignToken.shape.corner.large});\r\n }\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--has-next-open), :--has-next-open):not([open])),\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--last), :--last)) {\r\n --_list-item-bottom-container-shape: var(--m3e-segmented-list-container-shape, ${DesignToken.shape.corner.large});\r\n }\r\n :host([variant=\"segmented\"]) ::slotted(m3e-divider) {\r\n display: none;\r\n }\r\n :host(:is(:state(--has-leading-video), :--has-leading-video)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-list-item-video-width, 6.25rem);\r\n }\r\n :host([variant=\"standard\"]:is(:state(--has-leading-video), :--has-leading-video)) {\r\n --_list-item-leading-reserved-outset: var(--m3e-list-item-leading-space, 1rem);\r\n --_list-item-trailing-reserved-outset: var(--m3e-list-item-trailing-space, 1rem);\r\n }\r\n :host(:is(:state(--has-leading-image), :--has-leading-image)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-list-item-image-width, 3.5rem);\r\n }\r\n :host(:is(:state(--has-leading-avatar), :--has-leading-avatar)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-avatar-size, 2.5rem);\r\n }\r\n :host(:is(:state(--has-leading-icon), :--has-leading-icon)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-list-item-icon-size, 1.5rem);\r\n }\r\n `;\r\n\r\n /** @private */ #items = new Array<M3eListItemElement>();\r\n /** @private */ #leadingContentTypes = { video: 0, image: 0, avatar: 0, icon: 0, text: 0 };\r\n /** @private */ #trailingContentTypes = { video: 0, image: 0, avatar: 0, icon: 0, text: 0 };\r\n\r\n /**\r\n * The appearance variant of the list.\r\n * @default \"standard\"\r\n */\r\n @property({ reflect: true }) variant: ListVariant = \"standard\";\r\n\r\n /** The items of the list. */\r\n get items(): ReadonlyArray<M3eListItemElement> {\r\n return this.#items;\r\n }\r\n\r\n /** The type of leading content. */\r\n get leadingContentType(): ListItemContentType {\r\n return this.#leadingContentTypes.video > 0\r\n ? \"video\"\r\n : this.#leadingContentTypes.image > 0\r\n ? \"image\"\r\n : this.#leadingContentTypes.avatar > 0\r\n ? \"avatar\"\r\n : this.#leadingContentTypes.icon > 0\r\n ? \"icon\"\r\n : this.#leadingContentTypes.text > 0\r\n ? \"text\"\r\n : undefined;\r\n }\r\n\r\n /** The type of trailing content. */\r\n get trailingContentType(): ListItemContentType {\r\n return this.#trailingContentTypes.video > 0\r\n ? \"video\"\r\n : this.#trailingContentTypes.image > 0\r\n ? \"image\"\r\n : this.#trailingContentTypes.avatar > 0\r\n ? \"avatar\"\r\n : this.#trailingContentTypes.icon > 0\r\n ? \"icon\"\r\n : this.#trailingContentTypes.text > 0\r\n ? \"text\"\r\n : undefined;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<slot @slotchange=\"${this.#handleSlotChange}\"></slot>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#items = (e.target as HTMLSlotElement)\r\n .assignedElements({ flatten: true })\r\n .filter((x) => x instanceof M3eListItemElement);\r\n\r\n this.#items.forEach((x, i) => {\r\n setCustomState(x, \"--first\", i === 0);\r\n setCustomState(x, \"--last\", i === this.#items.length - 1);\r\n });\r\n\r\n this.notifyItemsChange();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Notifies the list that items have changed.\r\n */\r\n notifyItemsChange(): void {}\r\n\r\n /**\r\n * @internal\r\n * Notifies the list that the leading content of an item has changed.\r\n */\r\n notifyLeadingContentTypeChange(oldType: ListItemContentType, newType: ListItemContentType): void {\r\n if (oldType) {\r\n this.#leadingContentTypes[oldType]--;\r\n }\r\n if (newType) {\r\n this.#leadingContentTypes[newType]++;\r\n }\r\n\r\n [\"video\", \"image\", \"avatar\", \"icon\"].forEach((x) => {\r\n setCustomState(this, `--has-leading-${x}`, this.leadingContentType === x);\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n * Notifies the list that the trailing content of an item has changed.\r\n */\r\n notifyTrailingContentTypeChange(oldType: ListItemContentType, newType: ListItemContentType): void {\r\n if (oldType) {\r\n this.#trailingContentTypes[oldType]--;\r\n }\r\n if (newType) {\r\n this.#trailingContentTypes[newType]--;\r\n }\r\n\r\n [\"video\", \"image\", \"avatar\", \"icon\"].forEach((x) => {\r\n setCustomState(this, `--has-trailing-${x}`, this.trailingContentType === x);\r\n });\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list\": M3eListElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport { customElement, DesignToken, setCustomState } from \"@m3e/web/core\";\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport type { M3eListElement } from \"./ListElement\";\r\nimport { M3eListItemButtonElement } from \"./ListItemButtonElement\";\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * An item in a list that can be expanded to show more items.\r\n *\r\n * @description\r\n * The `m3e-expandable-list-item` provides a hierarchical navigation structure that allows\r\n * users to expand and collapse content sections. It follows Material 3 design principles\r\n * with smooth animations, semantic color tokens, and accessible interactions. The component\r\n * extends the base `m3e-list-item` functionality with toggle state management and nested\r\n * content support.\r\n *\r\n * @example\r\n * The following example illustrates an expandable list item.\r\n * ```html\r\n * <m3e-action-list>\r\n * <m3e-expandable-list-item>\r\n * Pick up supplies\r\n * <span slot=\"supporting-text\">Due monday</span>\r\n * <div slot=\"items\">\r\n * <m3e-list-action>\r\n * Dry-erase board\r\n * <span slot=\"supporting-text\">$35.99</span>\r\n * </m3e-list-action>\r\n * <m3e-list-action>\r\n * Markers\r\n * <span slot=\"supporting-text\">$8.99</span>\r\n * </m3e-list-action>\r\n * </div>\r\n * </m3e-expandable-list-item>\r\n * </m3e-action-list>\r\n * ```\r\n *\r\n * @tag m3e-expandable-list-item\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot toggle-icon - Renders a custom icon for the expand/collapse toggle.\r\n * @slot items - Container for child list items displayed when expanded.\r\n * @slot trailing - This component does not expose the base trailing slot.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr open - Whether the item is expanded.\r\n *\r\n * @fires opening - Emitted when the item begins to open.\r\n * @fires opened - Emitted when the item has opened.\r\n * @fires closing - Emitted when the item begins to close.\r\n * @fires closed - Emitted when the item has closed.\r\n *\r\n * @cssprop --m3e-expandable-list-item-toggle-icon-container-width - Width of the toggle icon container.\r\n * @cssprop --m3e-expandable-list-item-toggle-icon-container-shape - Border radius of the toggle icon container.\r\n * @cssprop --m3e-expandable-list-item-toggle-icon-size - Size of the toggle icon.\r\n * @cssprop --m3e-expandable-list-item-expanded-toggle-icon-container-color - Background color of the toggle icon container when expanded.\r\n * @cssprop --m3e-expandable-list-item-bounce-duration - Duration of the bounce animation when expanding.\r\n * @cssprop --m3e-expandable-list-item-bounce-factor - Multiplication factor for the bounce effect.\r\n * @cssprop --m3e-expandable-list-item-expand-duration - Duration of the expand/collapse animation.\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-height - Minimum height of the list item.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-disabled-label-text-color - Color for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-opacity - Opacity for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-color - Color for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-opacity - Opacity for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-color - Color for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-opacity - Opacity for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-color - Color for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-opacity - Opacity for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-color - Color for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-opacity - Opacity for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-hover-state-layer-color - Color for the hover state layer.\r\n * @cssprop --m3e-list-item-hover-state-layer-opacity - Opacity for the hover state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-color - Color for the focus state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-opacity - Opacity for the focus state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-color - Color for the pressed state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-opacity - Opacity for the pressed state layer.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container shape.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list item segments.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-disabled-media-opacity - Opacity for media when disabled.\r\n */\r\n@customElement(\"m3e-expandable-list-item\")\r\nexport class M3eExpandableListItemElement extends M3eListItemElement {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .header {\r\n width: 100%;\r\n margin-bottom: 0px;\r\n transition: ${unsafeCSS(\r\n `margin-bottom \r\n var(--m3e-expandable-list-item-bounce-duration, ${DesignToken.motion.duration.medium1})\r\n ${DesignToken.motion.easing.standard}`,\r\n )};\r\n --_list-item-button-trailing-align-self: stretch;\r\n }\r\n .toggle-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n align-self: stretch;\r\n width: var(--m3e-expandable-list-item-toggle-icon-container-width, 2rem);\r\n border-radius: var(--m3e-expandable-list-item-toggle-icon-container-shape, ${DesignToken.shape.corner.full});\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n .toggle {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n vertical-align: middle;\r\n font-size: var(--m3e-expandable-list-item-toggle-icon-size, 1.5rem);\r\n transition: ${unsafeCSS(`transform ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n .toggle svg,\r\n ::slotted(svg[slot=\"toggle-icon\"]) {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n :host([open]) .toggle-container {\r\n background-color: var(\r\n --_expandable-list-item-expanded-toggle-icon-container-color,\r\n var(--m3e-expandable-list-item-expanded-toggle-icon-container-color, ${DesignToken.color.surfaceContainer})\r\n );\r\n }\r\n :host([open]) .toggle {\r\n transform: rotate(180deg);\r\n }\r\n :host([open]) .header {\r\n --_list-item-top-container-shape: var(--_expandable-list-item-expanded-top-shape, initial);\r\n --_list-item-bottom-container-shape: initial;\r\n margin-bottom: var(--_expandable-list-item-items-segment-gap, 0px);\r\n }\r\n :host([open]) .header.opening {\r\n margin-bottom: calc(\r\n var(--_expandable-list-item-items-segment-gap, 0px) * var(--m3e-expandable-list-item-bounce-factor, 4)\r\n );\r\n }\r\n :host([open]) .header,\r\n :host([open]) .items {\r\n --_list-item-container-color: var(\r\n --m3e-expandable-list-item-expanded-container-color,\r\n var(--m3e-list-item-container-color, transparent)\r\n );\r\n }\r\n .base,\r\n ::slotted([slot=\"items\"]) {\r\n display: flex;\r\n flex-direction: column;\r\n box-sizing: border-box;\r\n }\r\n ::slotted([slot=\"items\"]) {\r\n flex: none;\r\n --_list-item-top-container-shape: initial;\r\n --_list-item-bottom-container-shape: initial;\r\n row-gap: var(--_expandable-list-item-items-segment-gap, 0px);\r\n }\r\n .items {\r\n --m3e-collapsible-animation-duration: var(\r\n --m3e-expandable-list-item-expand-duration,\r\n ${DesignToken.motion.duration.medium1}\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n .header {\r\n transition: none;\r\n }\r\n :host([open]) .header.opening {\r\n margin-bottom: var(--_expandable-list-item-items-segment-gap, 0px);\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .header,\r\n .toggle-container,\r\n .toggle {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #id = M3eExpandableListItemElement.__nextId++;\r\n /** @private */ #contentId = `m3e-expandable-list-item-${this.#id}-content`;\r\n /** @private */ #headerId = `m3e-expandable-list-item-${this.#id}-header`;\r\n /** @private */ #items = new Array<M3eListItemElement>();\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /**\r\n * Whether the item is expanded.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /** @internal */\r\n @query(\".header\") readonly button!: M3eListItemButtonElement;\r\n\r\n /** The direct child items of this item. */\r\n get items(): ReadonlyArray<M3eListItemElement> {\r\n return this.#items;\r\n }\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this.button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this.button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this.button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n\r\n if (_changedProperties.has(\"open\")) {\r\n for (let sibling = this.previousElementSibling; sibling; sibling = sibling.previousElementSibling) {\r\n if (sibling instanceof M3eListItemElement) {\r\n setCustomState(sibling, \"--has-next-open\", this.open);\r\n break;\r\n }\r\n }\r\n for (let sibling = this.nextElementSibling; sibling; sibling = sibling.nextElementSibling) {\r\n if (sibling instanceof M3eListItemElement) {\r\n setCustomState(sibling, \"--has-previous-open\", this.open);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-list-item-button\r\n id=\"${this.#headerId}\"\r\n class=\"header\"\r\n ?disabled=\"${this.disabled}\"\r\n aria-expanded=\"${this.open}\"\r\n aria-controls=\"${this.#contentId}\"\r\n @click=\"${this.#handleHeaderClick}\"\r\n >\r\n <slot name=\"leading\" slot=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n <slot name=\"overline\" slot=\"overline\"></slot>\r\n <slot></slot>\r\n <slot name=\"supporting-text\" slot=\"supporting-text\"></slot>\r\n <div class=\"toggle-container\" slot=\"trailing\" aria-hidden=\"true\">\r\n <div class=\"toggle\">\r\n <slot name=\"toggle-icon\">\r\n <svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M480-344 240-584l56-56 184 184 184-184 56 56-240 240Z\" />\r\n </svg>\r\n </slot>\r\n </div>\r\n </div>\r\n </m3e-list-item-button>\r\n <m3e-collapsible\r\n id=\"${this.#contentId}\"\r\n class=\"items\"\r\n role=\"list\"\r\n aria-labelledby=\"${this.#headerId}\"\r\n ?open=\"${this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot name=\"items\" @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-collapsible>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleHeaderClick(e: Event) {\r\n if (!e.defaultPrevented) {\r\n this.open = !this.open;\r\n this.closest(\"m3e-action-list\")?.[selectionManager].updateActiveItem(this.button);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCollapsibleEvent(e: Event): void {\r\n e.stopPropagation();\r\n [\"opening\", \"opened\", \"closing\", \"closed\"].forEach((x) => {\r\n this.button?.classList.toggle(x, e.type === x);\r\n });\r\n\r\n this.dispatchEvent(new Event(e.type, { bubbles: true }));\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#items = (e.target as HTMLSlotElement)\r\n .assignedElements({ flatten: true })\r\n .flatMap((x) => [...x.childNodes].filter((x) => x instanceof M3eListItemElement));\r\n\r\n this.#items.forEach((x, i) => {\r\n if (i == this.#items.length - 1) {\r\n x.style.setProperty(\r\n \"--_list-item-bottom-container-shape\",\r\n `var(--m3e-segmented-list-container-shape, ${DesignToken.shape.corner.large})`,\r\n );\r\n } else {\r\n x.style.removeProperty(\"--_list-item-bottom-container-shape\");\r\n }\r\n });\r\n\r\n this.closest<M3eListElement>(\"m3e-list, m3e-action-list, m3e-selection-list\")?.notifyItemsChange();\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-expandable-list-item\": M3eExpandableListItemElement;\r\n }\r\n}\r\n","import { customElement } from \"@m3e/web/core\";\r\nimport { RovingTabIndexManager, selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListElement } from \"./ListElement\";\r\nimport { M3eListActionElement } from \"./ListActionElement\";\r\nimport { M3eExpandableListItemElement } from \"./ExpandableListItemElement\";\r\nimport { M3eListItemButtonElement } from \"./ListItemButtonElement\";\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * A list of actions.\r\n *\r\n * @description\r\n * The `m3e-action-list` component provides a specialized list container for action-based\r\n * interactions following Material 3 design principles. It manages keyboard navigation with\r\n * roving tab index, supporting arrow keys, Home/End navigation, and vertical orientation.\r\n * The component is optimized for scenarios where each list item represents a clickable action.\r\n *\r\n * @tag m3e-action-list\r\n *\r\n * @slot - Renders the items of the list.\r\n *\r\n * @attr variant - The appearance variant of the list.\r\n *\r\n * @cssprop --m3e-list-divider-inset-start-size - Start inset for dividers within the list.\r\n * @cssprop --m3e-list-divider-inset-end-size - End inset for dividers within the list.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list items in segmented variant.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container.\r\n * @cssprop --m3e-segmented-list-item-container-color - Background color of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-disabled-container-color - Background color of disabled items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-container-shape - Border radius of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-hover-container-shape - Border radius of items in segmented variant on hover.\r\n * @cssprop --m3e-segmented-list-item-focus-container-shape - Border radius of items in segmented variant on focus.\r\n * @cssprop --m3e-segmented-list-item-selected-container-shape - Border radius of items in segmented variant when selected.\r\n */\r\n@customElement(\"m3e-action-list\")\r\nexport class M3eActionListElement extends M3eListElement {\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this[selectionManager].onKeyDown(e);\r\n\r\n /** @private */\r\n readonly [selectionManager] = new RovingTabIndexManager<M3eListItemButtonElement>()\r\n .withWrap()\r\n .withHomeAndEnd()\r\n .withVerticalOrientation()\r\n .withSkipPredicate((x) => {\r\n if (x.disabled) return true;\r\n\r\n const listItem = (x.getRootNode() as ShadowRoot).host as M3eListItemElement;\r\n if (listItem.parentElement?.slot === \"items\") {\r\n let expandable = listItem.closest(\"m3e-expandable-list-item\");\r\n while (expandable) {\r\n if (!expandable.open) {\r\n return true;\r\n }\r\n\r\n const ancestor = expandable.closest<M3eExpandableListItemElement | M3eActionListElement>(\r\n \"m3e-expandable-list-item,m3e-action-list\",\r\n );\r\n if (ancestor instanceof M3eExpandableListItemElement) {\r\n expandable = ancestor;\r\n continue;\r\n }\r\n break;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override async notifyItemsChange(): Promise<void> {\r\n const items = [\r\n ...this.querySelectorAll<M3eListActionElement | M3eExpandableListItemElement>(\r\n \"m3e-list-action,m3e-expandable-list-item\",\r\n ),\r\n ];\r\n\r\n for (const item of items) {\r\n if (item.isUpdatePending) {\r\n await item.updateComplete;\r\n }\r\n }\r\n\r\n if (this.isUpdatePending) {\r\n await this.updateComplete;\r\n }\r\n\r\n const { added } = this[selectionManager].setItems(\r\n items.map((x) => (x instanceof M3eExpandableListItemElement ? x.button : x.button)),\r\n );\r\n\r\n if (!this[selectionManager].activeItem) {\r\n this[selectionManager].updateActiveItem(added.find((x) => !x.disabled));\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-action-list\": M3eActionListElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, PropertyValues } from \"lit\";\r\nimport { query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n Disabled,\r\n Focusable,\r\n FocusController,\r\n HoverController,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n PressedController,\r\n renderPseudoLink,\r\n Role,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * @internal\r\n * An internal interactive element used to present the content of a list item.\r\n */\r\n@customElement(\"m3e-list-item-button\")\r\nexport class M3eListItemButtonElement extends KeyboardClick(\r\n LinkButton(Focusable(Disabled(AttachInternals(Role(M3eListItemElement, \"button\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n M3eListItemElement.styles,\r\n css`\r\n :host {\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n position: relative;\r\n }\r\n :host(:not(:disabled)) {\r\n cursor: pointer;\r\n }\r\n a {\r\n all: unset;\r\n display: block;\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n z-index: 1;\r\n }\r\n slot[name=\"trailing\"] {\r\n align-self: var(--_list-item-button-trailing-align-self, auto);\r\n }\r\n `,\r\n ];\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n constructor() {\r\n super();\r\n new FocusController(this, {\r\n callback: (_, focusVisible) =>\r\n this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"focus-visible\", focusVisible),\r\n });\r\n new PressedController(this, {\r\n callback: (pressed) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"pressed\", pressed),\r\n });\r\n new HoverController(this, {\r\n callback: (hovering) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"hover\", hovering),\r\n });\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n ${this[renderPseudoLink]()} ${super._renderBase()}\r\n </div>`;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, LinkButton } from \"@m3e/web/core\";\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\nimport { M3eListItemButtonElement } from \"./ListItemButtonElement\";\r\n\r\nimport \"./ListItemButtonElement\";\r\n\r\n/**\r\n * An item in a list that performs an action.\r\n *\r\n * @description\r\n * The `m3e-list-action` component represents an interactive list item that performs a\r\n * user-initiated action. It combines the semantic structure of a list item with\r\n * button-like interactions, supporting keyboard navigation, ripple effects, and state layers.\r\n *\r\n * @tag m3e-list-action\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot trailing - Renders the trailing content of the list item.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr download - A value indicating whether the `target` of the link button will be downloaded, optionally specifying the new name of the file.\r\n * @attr href - The URL to which the link button points.\r\n * @attr rel - The relationship between the `target` of the link button and the document.\r\n * @attr target - The target of the link button.\r\n *\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-height - Minimum height of the list item.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-disabled-container-color - Background color of the list item when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-color - Color for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-opacity - Opacity for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-color - Color for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-opacity - Opacity for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-color - Color for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-opacity - Opacity for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-color - Color for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-opacity - Opacity for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-color - Color for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-opacity - Opacity for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-hover-state-layer-color - Color for the hover state layer.\r\n * @cssprop --m3e-list-item-hover-state-layer-opacity - Opacity for the hover state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-color - Color for the focus state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-opacity - Opacity for the focus state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-color - Color for the pressed state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-opacity - Opacity for the pressed state layer.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-disabled-media-opacity - Opacity for media when disabled.\r\n */\r\n@customElement(\"m3e-list-action\")\r\nexport class M3eListActionElement extends LinkButton(M3eListItemElement, true) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .button {\r\n width: 100%;\r\n }\r\n `;\r\n\r\n /** @internal */\r\n @query(\".button\") readonly button!: M3eListItemButtonElement;\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this.button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this.button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this.button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<m3e-list-item-button\r\n class=\"button\"\r\n ?disabled=\"${this.disabled}\"\r\n href=\"${ifDefined(this.href || undefined)}\"\r\n target=\"${ifDefined(this.target || undefined)}\"\r\n download=\"${ifDefined(this.download || undefined)}\"\r\n rel=\"${ifDefined(this.rel || undefined)}\"\r\n @click=\"${this.#handleClick}\"\r\n >\r\n <slot name=\"leading\" slot=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n <slot name=\"overline\" slot=\"overline\"></slot>\r\n <slot></slot>\r\n <slot name=\"supporting-text\" slot=\"supporting-text\"></slot>\r\n <slot name=\"trailing\" slot=\"trailing\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n </m3e-list-item-button>`;\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n if (!e.defaultPrevented) {\r\n this.closest(\"m3e-action-list\")?.[selectionManager].updateActiveItem(this.button);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list-action\": M3eListActionElement;\r\n }\r\n}\r\n","import { CSSResultGroup, css, PropertyValues, html } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n KeyboardClick,\r\n Focusable,\r\n Disabled,\r\n AttachInternals,\r\n Role,\r\n Selected,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n DesignToken,\r\n getTextContent,\r\n FocusController,\r\n PressedController,\r\n HoverController,\r\n customElement,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * A selectable option in a list.\r\n *\r\n * @description\r\n * The `m3e-list-option` component represents a selectable item within a list container. It extends\r\n * the base `m3e-list-item` functionality with selection state management, providing visual feedback\r\n * for selected and unselected states. The component is designed for use with `m3e-selection-list`\r\n * and supports rich content through multiple slots, comprehensive styling via CSS custom properties,\r\n * and accessible interactions following Material 3 design principles.\r\n *\r\n * @tag m3e-list-option\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot trailing - Renders the trailing content of the list item.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr selected - Whether the element is selected.\r\n *\r\n * @fires input - Emitted when the selected state changes.\r\n * @fires change - Emitted when the selected state changes.\r\n * @fires click - Emitted when the element is clicked.\r\n *\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-height - Minimum height of the list item.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-disabled-container-color - Background color of the list item when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-color - Color for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-opacity - Opacity for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-color - Color for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-opacity - Opacity for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-color - Color for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-opacity - Opacity for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-color - Color for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-opacity - Opacity for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-color - Color for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-opacity - Opacity for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-hover-state-layer-color - Color for the hover state layer.\r\n * @cssprop --m3e-list-item-hover-state-layer-opacity - Opacity for the hover state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-color - Color for the focus state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-opacity - Opacity for the focus state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-color - Color for the pressed state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-opacity - Opacity for the pressed state layer.\r\n * @cssprop --m3e-list-item-selected-label-text-color - Selected color for the main content.\r\n * @cssprop --m3e-list-item-selected-overline-color - Selected color for the overline slot.\r\n * @cssprop --m3e-list-item-selected-supporting-text-color - Selected color for the supporting text slot.\r\n * @cssprop --m3e-list-item-selected-leading-color - Selected color for the leading content.\r\n * @cssprop --m3e-list-item-selected-trailing-color - Selected color for the trailing content.\r\n * @cssprop --m3e-list-item-selected-container-color - Selected background color of the list item.\r\n * @cssprop --m3e-list-item-selected-container-shape - Selected border radius of the list item.\r\n * @cssprop --m3e-list-item-selected-disabled-container-color - Selected background color when disabled.\r\n * @cssprop --m3e-list-item-selected-disabled-container-opacity - Selected opacity when disabled.\r\n * @cssprop --m3e-list-item-selected-hover-state-layer-color - Color for the hover state layer when selected.\r\n * @cssprop --m3e-list-item-selected-hover-state-layer-opacity - Opacity for the hover state layer when selected.\r\n * @cssprop --m3e-list-item-selected-focus-state-layer-color - Color for the focus state layer when selected.\r\n * @cssprop --m3e-list-item-selected-focus-state-layer-opacity - Opacity for the focus state layer when selected.\r\n * @cssprop --m3e-list-item-selected-pressed-state-layer-color - Color for the pressed state layer when selected.\r\n * @cssprop --m3e-list-item-selected-pressed-state-layer-opacity - Opacity for the pressed state layer when selected.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-disabled-media-opacity - Opacity for media when disabled.\r\n */\r\n@customElement(\"m3e-list-option\")\r\nexport class M3eListOptionElement extends KeyboardClick(\r\n Focusable(Selected(Disabled(AttachInternals(Role(M3eListItemElement, \"option\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n M3eListItemElement.styles,\r\n css`\r\n :host {\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n position: relative;\r\n }\r\n .indicator {\r\n min-width: 1.5rem;\r\n min-height: 1.5rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n :host(:not(:disabled)) {\r\n cursor: pointer;\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) .indicator {\r\n align-self: flex-start;\r\n margin-top: var(--m3e-list-item-three-line-top-offset, 0.25rem);\r\n }\r\n :host([selected]) .base,\r\n :host([selected]) .state-layer,\r\n :host([selected]) .ripple,\r\n :host([selected]) .focus-ring {\r\n border-radius: var(--m3e-list-item-selected-container-shape, ${DesignToken.shape.corner.large});\r\n }\r\n :host([selected]:not(:disabled)) .content {\r\n color: var(--m3e-list-item-selected-label-text-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"overline\"]) {\r\n color: var(--m3e-list-item-selected-overline-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"supporting-text\"]) {\r\n color: var(--m3e-list-item-selected-supporting-text-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"leading\"]) {\r\n color: var(--m3e-list-item-selected-leading-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"trailing\"]) {\r\n color: var(--m3e-list-item-selected-trailing-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) .base {\r\n background-color: var(--m3e-list-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n }\r\n :host([selected]:disabled) .base {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-selected-disabled-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-selected-disabled-container-opacity, 10%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:disabled)) .state-layer {\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-list-item-selected-hover-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-opacity: var(\r\n --m3e-list-item-selected-hover-state-layer-opacity,\r\n ${DesignToken.state.hoverStateLayerOpacity}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-list-item-selected-focus-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-focus-opacity: var(\r\n --m3e-list-item-selected-focus-state-layer-opacity,\r\n ${DesignToken.state.focusStateLayerOpacity}\r\n );\r\n }\r\n :host([selected]:not(:disabled)) .ripple {\r\n --m3e-ripple-color: var(--m3e-list-item-selected-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-ripple-opacity: var(\r\n --m3e-list-item-selected-pressed-state-layer-opacity,\r\n ${DesignToken.state.pressedStateLayerOpacity}\r\n );\r\n }\r\n :host(:is(:state(--hide-selection), :--hide-selection)) .indicator,\r\n :host(:not(:is(:state(--hide-selection), :--hide-selection))) ::slotted([slot=\"trailing\"]) {\r\n display: none;\r\n }\r\n @media (forced-colors: active) {\r\n :host([selected]:not(:disabled)) .content,\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"overline\"]),\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"supporting-text\"]),\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"leading\"]),\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"trailing\"]) {\r\n color: HighlightText;\r\n forced-color-adjust: none;\r\n }\r\n :host([selected]:not(:disabled)) .base {\r\n background-color: Highlight;\r\n }\r\n }\r\n `,\r\n ];\r\n\r\n /** @private */ #value?: string;\r\n /** @private */ #textContent = \"\";\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n /** @private */ readonly #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n constructor() {\r\n super();\r\n new FocusController(this, {\r\n callback: (_, focusVisible) =>\r\n this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"focus-visible\", focusVisible),\r\n });\r\n new PressedController(this, {\r\n callback: (pressed) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"pressed\", pressed),\r\n });\r\n new HoverController(this, {\r\n callback: (hovering) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"hover\", hovering),\r\n });\r\n }\r\n\r\n /** A string representing the value of the option. */\r\n @property() get value() {\r\n return this.#value ?? this.#textContent;\r\n }\r\n set value(value: string) {\r\n this.#value = value;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n this.closest(\"m3e-selection-list\")?.[selectionManager].notifySelectionChange(this);\r\n\r\n for (const icon of this.querySelectorAll(\"m3e-icon\")) {\r\n icon.toggleAttribute(\"filled\", this.selected);\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n <slot name=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n <div class=\"content\">\r\n <slot name=\"overline\"></slot>\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n <slot name=\"supporting-text\"></slot>\r\n </div>\r\n <slot name=\"trailing\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n <div class=\"indicator\">\r\n ${this.closest(\"m3e-selection-list\")?.multi\r\n ? html`<m3e-pseudo-checkbox ?checked=\"${this.selected}\" ?disabled=\"${this.disabled}\"></m3e-pseudo-checkbox>`\r\n : html`<m3e-pseudo-radio ?checked=\"${this.selected}\" ?disabled=\"${this.disabled}\"></m3e-pseudo-radio>`}\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#textContent = getTextContent(<HTMLSlotElement>e.target);\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n const selectionList = this.closest(\"m3e-selection-list\");\r\n if (e.defaultPrevented || !selectionList) return;\r\n\r\n if (selectionList.multi || !this.selected) {\r\n const selected = this.selected;\r\n this.selected = !this.selected;\r\n if (this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true, cancelable: true }))) {\r\n selectionList[selectionManager].notifySelectionChange(this);\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n } else {\r\n this.selected = selected;\r\n }\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list-option\": M3eListOptionElement;\r\n }\r\n}\r\n","import { PropertyValues } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n Dirty,\r\n Disabled,\r\n FormAssociated,\r\n formValue,\r\n Labelled,\r\n Role,\r\n setCustomState,\r\n Touched,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SelectionManager, selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListElement } from \"./ListElement\";\r\nimport { M3eListOptionElement } from \"./ListOptionElement\";\r\n\r\n/**\r\n * A list of selectable options.\r\n *\r\n * @description\r\n * The `m3e-selection-list` component provides a container for managing selectable list items with\r\n * single or multi-select capabilities. It implements robust keyboard navigation, form association,\r\n * and state management for both individual options and the list as a whole. The component supports\r\n * flexible layout, custom theming via CSS custom properties, and comprehensive accessibility features\r\n * including aria roles, roving tabindex management, and semantic event handling following Material 3\r\n * design principles.\r\n *\r\n * @tag m3e-selection-list\r\n *\r\n * @slot - Renders the items of the list.\r\n *\r\n * @attr hide-selection-indicator - Whether to hide the selection indicator.\r\n * @attr multi - Whether multiple items can be selected.\r\n * @attr variant - The appearance variant of the list.\r\n *\r\n * @fires input - Emitted when the selected state of an option changes.\r\n * @fires change - Emitted when the selected state of an option changes.\r\n *\r\n * @cssprop --m3e-list-divider-inset-start-size - Start inset for dividers within the list.\r\n * @cssprop --m3e-list-divider-inset-end-size - End inset for dividers within the list.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list items in segmented variant.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container.\r\n * @cssprop --m3e-segmented-list-item-container-color - Background color of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-disabled-container-color - Background color of disabled items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-container-shape - Border radius of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-hover-container-shape - Border radius of items in segmented variant on hover.\r\n * @cssprop --m3e-segmented-list-item-focus-container-shape - Border radius of items in segmented variant on focus.\r\n * @cssprop --m3e-segmented-list-item-selected-container-shape - Border radius of items in segmented variant when selected.\r\n */\r\n@customElement(\"m3e-selection-list\")\r\nexport class M3eSelectionListElement extends Labelled(\r\n Dirty(Touched(FormAssociated(Disabled(AttachInternals(Role(M3eListElement, \"listbox\")))))),\r\n) {\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this[selectionManager].onKeyDown(e);\r\n /** @private */ readonly #changeHandler = (e: Event) => this.#handleChange(e);\r\n\r\n /** @private */\r\n readonly [selectionManager] = new SelectionManager<M3eListOptionElement>()\r\n .withWrap()\r\n .withHomeAndEnd()\r\n .withVerticalOrientation();\r\n\r\n /**\r\n * Whether multiple items can be selected.\r\n * @default false\r\n */\r\n @property({ type: Boolean }) multi = false;\r\n\r\n /**\r\n * Whether to hide the selection indicator.\r\n * @default false\r\n */\r\n @property({ attribute: \"hide-selection-indicator\", type: Boolean }) hideSelectionIndicator = false;\r\n\r\n /** The options of the list. */\r\n get options(): readonly M3eListOptionElement[] {\r\n return this[selectionManager]?.items ?? [];\r\n }\r\n\r\n /** The selected option(s) of the list. */\r\n get selected(): readonly M3eListOptionElement[] {\r\n return this[selectionManager]?.selectedItems ?? [];\r\n }\r\n\r\n /** The selected (enabled) value(s) of the set. */\r\n get value(): string | readonly string[] | null {\r\n const values = this.selected.filter((x) => !x.disabled).map((x) => x.value);\r\n switch (values.length) {\r\n case 0:\r\n return null;\r\n case 1:\r\n return values[0];\r\n default:\r\n return values;\r\n }\r\n }\r\n\r\n /** @inheritdoc @internal */\r\n override get [formValue]() {\r\n const values = this.value;\r\n if (Array.isArray(values)) {\r\n const data = new FormData();\r\n for (const value of values) {\r\n data.append(this.name, value);\r\n }\r\n return data;\r\n }\r\n return <string | null>values;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"change\", this.#changeHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"change\", this.#changeHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"disabled\") && (changedProperties.get(\"disabled\") !== undefined || this.disabled)) {\r\n this[selectionManager].disabled = this.disabled;\r\n }\r\n\r\n if (changedProperties.has(\"multi\")) {\r\n this[selectionManager].multi = this.multi;\r\n\r\n if (this.multi) {\r\n this.setAttribute(\"aria-multiselectable\", \"true\");\r\n } else {\r\n this.removeAttribute(\"aria-multiselectable\");\r\n }\r\n\r\n this[selectionManager].items.forEach((x) => x.requestUpdate());\r\n }\r\n\r\n if (changedProperties.has(\"hideSelectionIndicator\")) {\r\n this[selectionManager].items.forEach((x) => setCustomState(x, \"--hide-selection\", this.hideSelectionIndicator));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override notifyItemsChange(): void {\r\n const { added } = this[selectionManager].setItems(this.items.filter((x) => x instanceof M3eListOptionElement));\r\n added.forEach((x) => setCustomState(x, \"--hide-selection\", this.hideSelectionIndicator));\r\n\r\n if (!this[selectionManager].activeItem) {\r\n this[selectionManager].updateActiveItem(added.find((x) => !x.disabled));\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleChange(e: Event): void {\r\n if (e.target !== this) {\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-selection-list\": M3eSelectionListElement;\r\n }\r\n}\r\n"],"names":["M3eListItemElement","ReconnectedCallback","AttachInternals","Role","LitElement","constructor","_M3eListItemElement_resizeController","set","ResizeController","target","callback","__classPrivateFieldGet","_M3eListItemElement_instances","_M3eListItemElement_updateMultiline","_M3eListItemElement_leadingContentType","_M3eListItemElement_trailingContentType","leadingContentType","trailingContentType","reconnectedCallback","_M3eListItemElement_initialize","call","firstUpdated","_changedProperties","render","html","_renderBase","_handleLeadingSlotChange","_handleTrailingSlotChange","e","contentType","__classPrivateFieldSet","_M3eListItemElement_getSlotContentType","setCustomState","undefined","closest","notifyLeadingContentTypeChange","notifyTrailingContentTypeChange","content","shadowRoot","querySelector","observe","lines","computeLineCount","slot","elements","assignedElements","flatten","some","x","tagName","length","styles","css","DesignToken","shape","corner","none","unsafeCSS","motion","spring","fastEffects","duration","short4","easing","standard","density","calc","large","medium","typescale","label","small","fontSize","fontWeight","lineHeight","tracking","body","color","onSurfaceVariant","onSurface","state","hoverStateLayerOpacity","focusStateLayerOpacity","pressedStateLayerOpacity","__decorate","customElement","M3eListElement","_M3eListElement_items","Array","_M3eListElement_leadingContentTypes","video","image","avatar","icon","text","_M3eListElement_trailingContentTypes","variant","items","_M3eListElement_instances","_M3eListElement_handleSlotChange","notifyItemsChange","oldType","newType","forEach","filter","i","surface","extraSmall","property","reflect","prototype","M3eExpandableListItemElement","M3eExpandableListItemElement_1","_M3eExpandableListItemElement_id","__nextId","_M3eExpandableListItemElement_contentId","_M3eExpandableListItemElement_headerId","_M3eExpandableListItemElement_items","disabled","open","focus","options","button","blur","click","updated","has","sibling","previousElementSibling","nextElementSibling","_M3eExpandableListItemElement_instances","_M3eExpandableListItemElement_handleHeaderClick","_M3eExpandableListItemElement_handleCollapsibleEvent","_M3eExpandableListItemElement_handleSlotChange","defaultPrevented","selectionManager","updateActiveItem","stopPropagation","classList","toggle","type","dispatchEvent","Event","bubbles","flatMap","childNodes","style","setProperty","removeProperty","medium1","full","surfaceContainer","Boolean","query","M3eActionListElement","_M3eActionListElement_keyDownHandler","onKeyDown","_a","RovingTabIndexManager","withWrap","withHomeAndEnd","withVerticalOrientation","withSkipPredicate","listItem","getRootNode","host","parentElement","expandable","ancestor","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","querySelectorAll","item","isUpdatePending","updateComplete","added","setItems","map","activeItem","find","M3eListItemButtonElement","KeyboardClick","LinkButton","Focusable","Disabled","FocusController","_","focusVisible","PressedController","pressed","HoverController","hovering","_focusRing","_stateLayer","_ripple","attach","renderPseudoLink","M3eListActionElement","ifDefined","href","download","rel","_M3eListActionElement_instances","_M3eListActionElement_handleClick","M3eListOptionElement","Selected","_M3eListOptionElement_value","_M3eListOptionElement_textContent","_M3eListOptionElement_clickHandler","value","update","changedProperties","notifySelectionChange","toggleAttribute","selected","_M3eListOptionElement_instances","_M3eListOptionElement_handleSlotChange","multi","getTextContent","selectionList","composed","cancelable","onSecondaryContainer","secondaryContainer","M3eSelectionListElement","Labelled","Dirty","Touched","FormAssociated","_M3eSelectionListElement_keyDownHandler","_M3eSelectionListElement_changeHandler","SelectionManager","hideSelectionIndicator","selectedItems","values","WeakMap","_M3eSelectionListElement_instances","WeakSet","formValue","isArray","data","FormData","append","name","get","setAttribute","removeAttribute","requestUpdate","stopImmediatePropagation","attribute"],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sources":["../../src/list/ListItemElement.ts","../../src/list/ListElement.ts","../../src/list/ExpandableListItemElement.ts","../../src/list/ActionListElement.ts","../../src/list/ListItemButtonElement.ts","../../src/list/ListActionElement.ts","../../src/list/ListOptionElement.ts","../../src/list/SelectionListElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement, PropertyValues, unsafeCSS } from \"lit\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n computeLineCount,\r\n DesignToken,\r\n ResizeController,\r\n Role,\r\n setCustomState,\r\n ReconnectedCallback,\r\n} from \"@m3e/web/core\";\r\n\r\nimport type { M3eListElement } from \"./ListElement\";\r\nimport { ListItemContentType } from \"./ListItemContentType\";\r\n\r\n/**\r\n * An item in a list.\r\n *\r\n * @description\r\n * The `m3e-list-item` component represents a single item within a list. It supports rich\r\n * content, leading/trailing media, overline, supporting text, and trailing supporting text\r\n * via named slots. The component is highly customizable through CSS custom properties and\r\n * is designed for accessibility and flexible layout.\r\n *\r\n * @example\r\n * The following example illustrates a list with a single item using all supported slots.\r\n *\r\n * Note: This example uses the `@m3e/icon` package to present Material Design symbols, but any icon package can be\r\n * substituted depending on your design system or preferences\r\n *\r\n * ```html\r\n * <m3e-list>\r\n * <m3e-list-item>\r\n * <m3e-icon slot=\"leading\" name=\"person\"></m3e-icon>\r\n * <span slot=\"overline\">Overline</span>\r\n * Headline\r\n * <span slot=\"supporting-text\">Supporting text</span>\r\n * <m3e-icon slot=\"trailing\" name=\"arrow_right\"></m3e-icon>\r\n * </m3e-list-item>\r\n * </m3e-list>\r\n * ```\r\n *\r\n * @tag m3e-list-item\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot trailing - Renders the trailing content of the list item.\r\n *\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-leading-space - Horizontal padding for the leading side.\r\n * @cssprop --m3e-list-item-trailing-space - Horizontal padding for the trailing side.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-one-line-top-space - Top padding for one-line items.\r\n * @cssprop --m3e-list-item-one-line-bottom-space - Bottom padding for one-line items.\r\n * @cssprop --m3e-list-item-two-line-top-space - Top padding for two-line items.\r\n * @cssprop --m3e-list-item-two-line-bottom-space - Bottom padding for two-line items.\r\n * @cssprop --m3e-list-item-three-line-top-space - Top padding for three-line items.\r\n * @cssprop --m3e-list-item-three-line-bottom-space - Bottom padding for three-line items.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-one-line-height - Minimum height of a one line list item.\r\n * @cssprop --m3e-list-item-two-line-height - Minimum height of a two line list item.\r\n * @cssprop --m3e-list-item-three-line-height - Minimum height of a three line list item.\r\n */\r\n@customElement(\"m3e-list-item\")\r\nexport class M3eListItemElement extends ReconnectedCallback(AttachInternals(Role(LitElement, \"listitem\"))) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n min-height: inherit;\r\n width: 100%;\r\n box-sizing: border-box;\r\n column-gap: var(--m3e-list-item-between-space, 1rem);\r\n padding-inline-start: var(--m3e-list-item-leading-space, 1rem);\r\n padding-inline-end: var(--m3e-list-item-trailing-space, 1rem);\r\n border-top-left-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n border-top-right-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n border-bottom-left-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n border-bottom-right-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-container-shape, ${DesignToken.shape.corner.none})\r\n );\r\n transition: ${unsafeCSS(\r\n `border-radius ${DesignToken.motion.spring.fastEffects}, background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n :host(:is(:state(--one-line), :--one-line)) {\r\n min-height: calc(var(--m3e-list-item-one-line-height, 3.5rem) + ${DesignToken.density.calc(-3)});\r\n }\r\n :host(:is(:state(--one-line), :--one-line)) .base {\r\n padding-block-start: var(--m3e-list-item-one-line-top-space, 0.5rem);\r\n padding-block-end: var(--m3e-list-item-one-line-bottom-space, 0.5rem);\r\n }\r\n :host(:is(:state(--two-line), :--two-line)) {\r\n min-height: calc(var(--m3e-list-item-two-line-height, 4.5rem) + ${DesignToken.density.calc(-3)});\r\n }\r\n :host(:is(:state(--two-line), :--two-line)) .base {\r\n padding-block-start: var(--m3e-list-item-two-line-top-space, 0.5rem);\r\n padding-block-end: var(--m3e-list-item-two-line-bottom-space, 0.5rem);\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) {\r\n min-height: calc(var(--m3e-list-item-three-line-height, 5.5rem) + ${DesignToken.density.calc(-3)});\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) .base {\r\n padding-block-start: var(--m3e-list-item-three-line-top-space, 0.75rem);\r\n padding-block-end: var(--m3e-list-item-three-line-bottom-space, 0.75rem);\r\n }\r\n :host(:not(:is(:state(--three-line), :--three-line))) .base {\r\n align-items: center;\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) .base {\r\n align-items: flex-start;\r\n }\r\n :host(:not(:disabled):not([selected])) .base:not(.hover).focus-visible:not(.pressed) {\r\n border-top-left-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n border-top-right-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n border-bottom-left-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n border-bottom-right-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-focus-container-shape, ${DesignToken.shape.corner.large})\r\n );\r\n }\r\n :host(:not(:disabled):not([selected])) .base.hover,\r\n :host(:not(:disabled):not([selected])) .base.pressed {\r\n border-top-left-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n border-top-right-radius: var(\r\n --_list-item-top-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n border-bottom-left-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n border-bottom-right-radius: var(\r\n --_list-item-bottom-container-shape,\r\n var(--m3e-list-item-hover-container-shape, ${DesignToken.shape.corner.medium})\r\n );\r\n }\r\n .content {\r\n flex: 1 1 auto;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: unset;\r\n justify-content: unset;\r\n }\r\n ::slotted([slot=\"overline\"]) {\r\n font-size: var(--m3e-list-item-overline-font-size, ${DesignToken.typescale.standard.label.small.fontSize});\r\n font-weight: var(--m3e-list-item-overline-font-weight, ${DesignToken.typescale.standard.label.small.fontWeight});\r\n line-height: var(--m3e-list-item-overline-line-height, ${DesignToken.typescale.standard.label.small.lineHeight});\r\n letter-spacing: var(--m3e-list-item-overline-tracking, ${DesignToken.typescale.standard.label.small.tracking});\r\n }\r\n ::slotted([slot=\"supporting-text\"]) {\r\n font-size: var(--m3e-list-item-supporting-text-font-size, ${DesignToken.typescale.standard.body.medium.fontSize});\r\n font-weight: var(\r\n --m3e-list-item-supporting-text-font-weight,\r\n ${DesignToken.typescale.standard.body.medium.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-list-item-supporting-text-line-height,\r\n ${DesignToken.typescale.standard.body.medium.lineHeight}\r\n );\r\n letter-spacing: var(\r\n --m3e-list-item-supporting-text-tracking,\r\n ${DesignToken.typescale.standard.body.medium.tracking}\r\n );\r\n }\r\n ::slotted(:not([slot])) {\r\n font-size: var(--m3e-list-item-font-size, ${DesignToken.typescale.standard.body.large.fontSize});\r\n font-weight: var(--m3e-list-item-font-weight, ${DesignToken.typescale.standard.body.large.fontWeight});\r\n line-height: var(--m3e-list-item-line-height, ${DesignToken.typescale.standard.body.large.lineHeight});\r\n letter-spacing: var(--m3e-list-item-tracking, ${DesignToken.typescale.standard.body.large.tracking});\r\n }\r\n :host(:is(:state(--has-leading), :--has-leading)) slot[name=\"leading\"],\r\n :host(:is(:state(--has-trailing), :--has-trailing)) slot[name=\"trailing\"] {\r\n display: flex;\r\n justify-content: center;\r\n }\r\n :host(:not(:is(:state(--has-leading), :--has-leading))) slot[name=\"leading\"] {\r\n display: var(--_list-item-leading-reserved-display, contents);\r\n }\r\n :host(:not(:is(:state(--has-trailing), :--has-trailing))) slot[name=\"trailing\"] {\r\n display: var(--_list-item-trailing-reserved-display, contents);\r\n }\r\n slot[name=\"leading\"] {\r\n min-width: var(--_list-item-leading-reserved-space, 0px);\r\n margin-inline-start: calc(0px - var(--_list-item-leading-reserved-outset, 0px));\r\n }\r\n slot[name=\"trailing\"] {\r\n min-width: var(--_list-item-trailing-reserved-space, 0px);\r\n margin-inline-end: calc(0px - var(--_list-item-trailing-reserved-outset, 0px));\r\n }\r\n ::slotted(span[slot=\"trailing\"]),\r\n ::slotted([slot=\"trailing-supporting-text\"]) {\r\n white-space: nowrap;\r\n font-size: var(--m3e-list-item-trailing-text-font-size, ${DesignToken.typescale.standard.label.small.fontSize});\r\n font-weight: var(\r\n --m3e-list-item-trailing-text-font-weight,\r\n ${DesignToken.typescale.standard.label.small.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-list-item-trailing-text-line-height,\r\n ${DesignToken.typescale.standard.label.small.lineHeight}\r\n );\r\n letter-spacing: var(\r\n --m3e-list-item-trailing-text-tracking,\r\n ${DesignToken.typescale.standard.label.small.tracking}\r\n );\r\n }\r\n ::slotted(video[slot=\"leading\"]),\r\n ::slotted(video[slot=\"trailing\"]),\r\n ::slotted(img[slot=\"leading\"]),\r\n ::slotted(img[slot=\"trailing\"]) {\r\n display: block;\r\n margin: 0 auto;\r\n overflow: hidden;\r\n object-fit: cover;\r\n }\r\n ::slotted(video) {\r\n width: var(--m3e-list-item-video-width, 6.25rem);\r\n height: var(--m3e-list-item-video-height, 3.5rem);\r\n }\r\n ::slotted(video[slot=\"leading\"]),\r\n ::slotted(video[slot=\"trailing\"]) {\r\n border-radius: var(--m3e-list-item-video-shape, ${DesignToken.shape.corner.none});\r\n }\r\n ::slotted(video[slot=\"leading\"]) {\r\n margin-inline-start: calc(0px - var(--_list-item-leading-video-outset, 0px));\r\n }\r\n ::slotted(video[slot=\"trailing\"]) {\r\n margin-inline-end: calc(0px - var(--_list-item-trailing-video-outset, 0px));\r\n }\r\n ::slotted(img) {\r\n user-drag: none;\r\n user-select: none;\r\n pointer-events: none;\r\n width: var(--m3e-list-item-image-width, 3.5rem);\r\n height: var(--m3e-list-item-image-height, 3.5rem);\r\n }\r\n ::slotted(img[slot=\"leading\"]),\r\n ::slotted(img[slot=\"trailing\"]) {\r\n border-radius: var(--m3e-list-item-image-shape, ${DesignToken.shape.corner.none});\r\n }\r\n ::slotted(m3e-icon[slot=\"leading\"]),\r\n ::slotted(m3e-icon[slot=\"leading-icon\"]),\r\n ::slotted(m3e-icon[slot=\"trailing\"]),\r\n ::slotted(m3e-icon[slot=\"trailing-icon\"]) {\r\n --m3e-icon-size: var(--m3e-list-item-icon-size, 1.5rem);\r\n }\r\n :host(:not(:disabled)) ::slotted(m3e-icon[slot=\"leading\"]),\r\n :host(:not(:disabled)) ::slotted(m3e-icon[slot=\"leading-icon\"]) {\r\n color: var(--m3e-list-item-leading-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) .content {\r\n color: var(--m3e-list-item-label-text-color, ${DesignToken.color.onSurface});\r\n }\r\n :host(:not(:disabled)) ::slotted([slot=\"overline\"]) {\r\n color: var(--m3e-list-item-overline-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) ::slotted([slot=\"supporting-text\"]) {\r\n color: var(--m3e-list-item-supporting-text-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) ::slotted([slot=\"trailing\"]),\r\n :host(:not(:disabled)) ::slotted([slot=\"trailing-supporting-text\"]),\r\n :host(:not(:disabled)) ::slotted([slot=\"trailing-icon\"]) {\r\n color: var(--m3e-list-item-trailing-color, ${DesignToken.color.onSurfaceVariant});\r\n }\r\n :host(:not(:disabled)) .base {\r\n background-color: var(--_list-item-container-color, var(--m3e-list-item-container-color, transparent));\r\n }\r\n :host(:disabled) .base {\r\n background-color: var(--m3e-list-item-disabled-container-color, transparent);\r\n }\r\n :host(:disabled) ::slotted(video),\r\n :host(:disabled) ::slotted(img),\r\n :host(:disabled) ::slotted(m3e-avatar) {\r\n opacity: var(--m3e-list-item-disabled-media-opacity, 38%);\r\n }\r\n :host(:disabled) .content {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-label-text-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-label-text-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"overline\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-overline-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-overline-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"supporting-text\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-supporting-text-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-supporting-text-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"leading\"]),\r\n :host(:disabled) ::slotted([slot=\"leading-icon\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-leading-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-leading-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:disabled) ::slotted([slot=\"trailing\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-supporting-text\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-icon\"]) {\r\n color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-disabled-trailing-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-disabled-trailing-opacity, 38%),\r\n transparent\r\n );\r\n }\r\n :host(:not(:disabled)) .state-layer {\r\n --m3e-state-layer-hover-color: var(--m3e-list-item-hover-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-hover-opacity: var(\r\n --m3e-list-item-hover-state-layer-opacity,\r\n ${DesignToken.state.hoverStateLayerOpacity}\r\n );\r\n --m3e-state-layer-focus-color: var(--m3e-list-item-focus-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-focus-opacity: var(\r\n --m3e-list-item-focus-state-layer-opacity,\r\n ${DesignToken.state.focusStateLayerOpacity}\r\n );\r\n }\r\n :host(:not(:disabled)) .ripple {\r\n --m3e-ripple-color: var(--m3e-list-item-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-ripple-opacity: var(\r\n --m3e-list-item-pressed-state-layer-opacity,\r\n ${DesignToken.state.pressedStateLayerOpacity}\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n .base {\r\n transition: none;\r\n }\r\n :host(:disabled) ::slotted([slot=\"leading\"]),\r\n :host(:disabled) ::slotted([slot=\"leading-icon\"]),\r\n :host(:disabled) .content,\r\n :host(:disabled) ::slotted([slot=\"overline\"]),\r\n :host(:disabled) ::slotted([slot=\"supporting-text\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-supporting-text\"]),\r\n :host(:disabled) ::slotted([slot=\"trailing-icon\"]) {\r\n color: GrayText;\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .base {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */\r\n #resizeController = new ResizeController(this, { target: null, callback: () => this.#updateMultiline() });\r\n\r\n /** @private */ #leadingContentType: ListItemContentType;\r\n /** @private */ #trailingContentType: ListItemContentType;\r\n\r\n /** The type of leading content. */\r\n get leadingContentType(): ListItemContentType {\r\n return this.#leadingContentType;\r\n }\r\n\r\n /** The type of trailing content. */\r\n get trailingContentType(): ListItemContentType {\r\n return this.#trailingContentType;\r\n }\r\n\r\n /** @inheritdoc */\r\n override reconnectedCallback(): void {\r\n super.reconnectedCallback();\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n this.#initialize();\r\n }\r\n\r\n /** @private */\r\n #initialize(): void {\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\");\r\n if (content) {\r\n this.#resizeController.observe(content);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">${this._renderBase()}</div>`;\r\n }\r\n\r\n /** @internal */\r\n protected _renderBase(): unknown {\r\n return html`<slot name=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\">\r\n <slot name=\"leading-icon\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n </slot>\r\n <div class=\"content\">\r\n <slot name=\"overline\"></slot>\r\n <slot></slot>\r\n <slot name=\"supporting-text\"></slot>\r\n </div>\r\n <slot name=\"trailing\" @slotchange=\"${this._handleTrailingSlotChange}\">\r\n <slot name=\"trailing-supporting-text\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n <slot name=\"trailing-icon\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n </slot>`;\r\n }\r\n\r\n /** @private */\r\n #updateMultiline(): void {\r\n const content = this.shadowRoot?.querySelector<HTMLElement>(\".content\") ?? null;\r\n const lines = content === null ? 0 : computeLineCount(content);\r\n setCustomState(this, \"--one-line\", lines <= 1);\r\n setCustomState(this, \"--two-line\", lines == 2);\r\n setCustomState(this, \"--three-line\", lines > 2);\r\n }\r\n\r\n /** @internal */\r\n protected _handleLeadingSlotChange(e: Event): void {\r\n const contentType = this.#leadingContentType;\r\n this.#leadingContentType = this.#getSlotContentType(e.target as HTMLSlotElement);\r\n setCustomState(this, \"--has-leading\", this.#leadingContentType !== undefined);\r\n if (contentType !== this.#leadingContentType) {\r\n this.closest<M3eListElement>(\"m3e-list,m3e-action-list,m3e-selection-list\")?.notifyLeadingContentTypeChange(\r\n contentType,\r\n this.#leadingContentType,\r\n );\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected _handleTrailingSlotChange(e: Event): void {\r\n const contentType = this.#trailingContentType;\r\n this.#trailingContentType = this.#getSlotContentType(e.target as HTMLSlotElement);\r\n setCustomState(this, \"--has-trailing\", this.#trailingContentType !== undefined);\r\n if (contentType !== this.#trailingContentType) {\r\n this.closest<M3eListElement>(\"m3e-list,m3e-action-list,m3e-selection-list\")?.notifyTrailingContentTypeChange(\r\n contentType,\r\n this.#trailingContentType,\r\n );\r\n }\r\n }\r\n\r\n /** @private */\r\n #getSlotContentType(slot: HTMLSlotElement): ListItemContentType {\r\n const elements = slot.assignedElements({ flatten: true });\r\n if (elements.some((x) => x.tagName === \"VIDEO\")) return \"video\";\r\n if (elements.some((x) => x.tagName === \"IMG\")) return \"image\";\r\n if (elements.some((x) => x.tagName === \"M3E-AVATAR\")) return \"avatar\";\r\n if (elements.some((x) => x.tagName === \"M3E-ICON\")) return \"icon\";\r\n return elements.length > 0 ? \"text\" : undefined;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list-item\": M3eListItemElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, LitElement } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { AttachInternals, customElement, DesignToken, Role, setCustomState } from \"@m3e/web/core\";\r\n\r\nimport { ListVariant } from \"./ListVariant\";\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\nimport { ListItemContentType } from \"./ListItemContentType\";\r\n\r\n/**\r\n * A list of items.\r\n *\r\n * @description\r\n * The `m3e-list` component provides a list container for organizing and displaying\r\n * multiple list items. It supports flexible layout, custom padding, and divider insets\r\n * via CSS custom properties.\r\n *\r\n * @example\r\n * The following example illustrates a list with a single item using all supported slots.\r\n *\r\n * Note: This example uses the `@m3e/icon` package to present Material Design symbols, but any icon package can be\r\n * substituted depending on your design system or preferences\r\n *\r\n * ```html\r\n * <m3e-list>\r\n * <m3e-list-item>\r\n * <m3e-icon slot=\"leading-icon\" name=\"person\"></m3e-icon>\r\n * <span slot=\"overline\">Overline</span>\r\n * Headline\r\n * <span slot=\"supporting-text\">Supporting text</span>\r\n * <span slot=\"trailing-text\">100+</span>\r\n * <m3e-icon slot=\"trailing-icon\" name=\"arrow_right\"></m3e-icon>\r\n * </m3e-list-item>\r\n * </m3e-list>\r\n * ```\r\n *\r\n * @tag m3e-list\r\n *\r\n * @slot - Renders the items of the list.\r\n *\r\n * @attr variant - The appearance variant of the list.\r\n *\r\n * @cssprop --m3e-list-divider-inset-start-size - Start inset for dividers within the list.\r\n * @cssprop --m3e-list-divider-inset-end-size - End inset for dividers within the list.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list items in segmented variant.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container.\r\n * @cssprop --m3e-segmented-list-item-container-color - Background color of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-disabled-container-color - Background color of disabled items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-container-shape - Border radius of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-hover-container-shape - Border radius of items in segmented variant on hover.\r\n * @cssprop --m3e-segmented-list-item-focus-container-shape - Border radius of items in segmented variant on focus.\r\n * @cssprop --m3e-segmented-list-item-selected-container-shape - Border radius of items in segmented variant when selected.\r\n */\r\n@customElement(\"m3e-list\")\r\nexport class M3eListElement extends AttachInternals(Role(LitElement, \"list\")) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: auto;\r\n box-sizing: border-box;\r\n padding-block: var(--m3e-list-block-padding, 0px);\r\n\r\n --m3e-divider-inset-start-size: var(--m3e-list-divider-inset-start-size, 1rem);\r\n --m3e-divider-inset-end-size: var(--m3e-list-divider-inset-end-size, 1.5rem);\r\n }\r\n :host([variant=\"standard\"]) {\r\n --_list-item-leading-video-outset: var(--m3e-list-item-leading-space, 1rem);\r\n --_list-item-trailing-video-outset: var(--m3e-list-item-trailing-space, 1rem);\r\n --_expandable-list-item-expanded-toggle-icon-container-color: transparent;\r\n }\r\n :host([variant=\"segmented\"]) {\r\n row-gap: var(--m3e-segmented-list-segment-gap, 0.125rem);\r\n }\r\n :host([variant=\"segmented\"]) {\r\n --m3e-list-item-container-color: var(--m3e-segmented-list-item-container-color, ${DesignToken.color.surface});\r\n --m3e-list-item-disabled-container-color: var(\r\n --m3e-segmented-list-item-disabled-container-color,\r\n ${DesignToken.color.surface}\r\n );\r\n --m3e-list-item-container-shape: var(\r\n --m3e-segmented-list-item-container-shape,\r\n ${DesignToken.shape.corner.extraSmall}\r\n );\r\n --m3e-list-item-hover-container-shape: var(\r\n --m3e-segmented-list-item-hover-container-shape,\r\n ${DesignToken.shape.corner.medium}\r\n );\r\n --m3e-list-item-focus-container-shape: var(\r\n --m3e-segmented-list-item-focus-container-shape,\r\n ${DesignToken.shape.corner.large}\r\n );\r\n --m3e-list-item-selected-container-shape: var(\r\n --m3e-segmented-list-item-selected-container-shape,\r\n ${DesignToken.shape.corner.large}\r\n );\r\n --m3e-list-item-video-shape: var(--m3e-segmented-list-item-video-shape, ${DesignToken.shape.corner.small});\r\n --m3e-list-item-image-shape: var(--m3e-segmented-list-item-image-shape, ${DesignToken.shape.corner.small});\r\n --m3e-list-item-between-space: var(--m3e-segmented-list-item-spacing, 0.75rem);\r\n --_expandable-list-item-items-segment-gap: var(--m3e-segmented-list-segment-gap, 0.125rem);\r\n --_expandable-list-item-expanded-top-shape: var(\r\n --m3e-segmented-list-container-shape,\r\n ${DesignToken.shape.corner.large}\r\n );\r\n }\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--first), :--first)),\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--has-previous-open), :--has-previous-open):not([open])) {\r\n --_list-item-top-container-shape: var(--m3e-segmented-list-container-shape, ${DesignToken.shape.corner.large});\r\n }\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--has-next-open), :--has-next-open):not([open])),\r\n :host([variant=\"segmented\"]) ::slotted(:is(:state(--last), :--last)) {\r\n --_list-item-bottom-container-shape: var(--m3e-segmented-list-container-shape, ${DesignToken.shape.corner.large});\r\n }\r\n :host([variant=\"segmented\"]) ::slotted(m3e-divider) {\r\n display: none;\r\n }\r\n :host(:is(:state(--has-leading-video), :--has-leading-video)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-list-item-video-width, 6.25rem);\r\n }\r\n :host([variant=\"standard\"]:is(:state(--has-leading-video), :--has-leading-video)) {\r\n --_list-item-leading-reserved-outset: var(--m3e-list-item-leading-space, 1rem);\r\n --_list-item-trailing-reserved-outset: var(--m3e-list-item-trailing-space, 1rem);\r\n }\r\n :host(:is(:state(--has-leading-image), :--has-leading-image)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-list-item-image-width, 3.5rem);\r\n }\r\n :host(:is(:state(--has-leading-avatar), :--has-leading-avatar)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-avatar-size, 2.5rem);\r\n }\r\n :host(:is(:state(--has-leading-icon), :--has-leading-icon)) {\r\n --_list-item-leading-reserved-display: block;\r\n --_list-item-leading-reserved-space: var(--m3e-list-item-icon-size, 1.5rem);\r\n }\r\n `;\r\n\r\n /** @private */ #items = new Array<M3eListItemElement>();\r\n /** @private */ #leadingContentTypes = { video: 0, image: 0, avatar: 0, icon: 0, text: 0 };\r\n /** @private */ #trailingContentTypes = { video: 0, image: 0, avatar: 0, icon: 0, text: 0 };\r\n\r\n /**\r\n * The appearance variant of the list.\r\n * @default \"standard\"\r\n */\r\n @property({ reflect: true }) variant: ListVariant = \"standard\";\r\n\r\n /** The items of the list. */\r\n get items(): ReadonlyArray<M3eListItemElement> {\r\n return this.#items;\r\n }\r\n\r\n /** The type of leading content. */\r\n get leadingContentType(): ListItemContentType {\r\n return this.#leadingContentTypes.video > 0\r\n ? \"video\"\r\n : this.#leadingContentTypes.image > 0\r\n ? \"image\"\r\n : this.#leadingContentTypes.avatar > 0\r\n ? \"avatar\"\r\n : this.#leadingContentTypes.icon > 0\r\n ? \"icon\"\r\n : this.#leadingContentTypes.text > 0\r\n ? \"text\"\r\n : undefined;\r\n }\r\n\r\n /** The type of trailing content. */\r\n get trailingContentType(): ListItemContentType {\r\n return this.#trailingContentTypes.video > 0\r\n ? \"video\"\r\n : this.#trailingContentTypes.image > 0\r\n ? \"image\"\r\n : this.#trailingContentTypes.avatar > 0\r\n ? \"avatar\"\r\n : this.#trailingContentTypes.icon > 0\r\n ? \"icon\"\r\n : this.#trailingContentTypes.text > 0\r\n ? \"text\"\r\n : undefined;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<slot @slotchange=\"${this.#handleSlotChange}\"></slot>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#items = (e.target as HTMLSlotElement)\r\n .assignedElements({ flatten: true })\r\n .filter((x) => x instanceof M3eListItemElement);\r\n\r\n this.#items.forEach((x, i) => {\r\n setCustomState(x, \"--first\", i === 0);\r\n setCustomState(x, \"--last\", i === this.#items.length - 1);\r\n });\r\n\r\n this.notifyItemsChange();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Notifies the list that items have changed.\r\n */\r\n notifyItemsChange(): void {}\r\n\r\n /**\r\n * @internal\r\n * Notifies the list that the leading content of an item has changed.\r\n */\r\n notifyLeadingContentTypeChange(oldType: ListItemContentType, newType: ListItemContentType): void {\r\n if (oldType) {\r\n this.#leadingContentTypes[oldType]--;\r\n }\r\n if (newType) {\r\n this.#leadingContentTypes[newType]++;\r\n }\r\n\r\n [\"video\", \"image\", \"avatar\", \"icon\"].forEach((x) => {\r\n setCustomState(this, `--has-leading-${x}`, this.leadingContentType === x);\r\n });\r\n }\r\n\r\n /**\r\n * @internal\r\n * Notifies the list that the trailing content of an item has changed.\r\n */\r\n notifyTrailingContentTypeChange(oldType: ListItemContentType, newType: ListItemContentType): void {\r\n if (oldType) {\r\n this.#trailingContentTypes[oldType]--;\r\n }\r\n if (newType) {\r\n this.#trailingContentTypes[newType]--;\r\n }\r\n\r\n [\"video\", \"image\", \"avatar\", \"icon\"].forEach((x) => {\r\n setCustomState(this, `--has-trailing-${x}`, this.trailingContentType === x);\r\n });\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list\": M3eListElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport { customElement, DesignToken, setCustomState } from \"@m3e/web/core\";\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport type { M3eListElement } from \"./ListElement\";\r\nimport { M3eListItemButtonElement } from \"./ListItemButtonElement\";\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * An item in a list that can be expanded to show more items.\r\n *\r\n * @description\r\n * The `m3e-expandable-list-item` provides a hierarchical navigation structure that allows\r\n * users to expand and collapse content sections. It follows Material 3 design principles\r\n * with smooth animations, semantic color tokens, and accessible interactions. The component\r\n * extends the base `m3e-list-item` functionality with toggle state management and nested\r\n * content support.\r\n *\r\n * @example\r\n * The following example illustrates an expandable list item.\r\n * ```html\r\n * <m3e-action-list>\r\n * <m3e-expandable-list-item>\r\n * Pick up supplies\r\n * <span slot=\"supporting-text\">Due monday</span>\r\n * <div slot=\"items\">\r\n * <m3e-list-action>\r\n * Dry-erase board\r\n * <span slot=\"supporting-text\">$35.99</span>\r\n * </m3e-list-action>\r\n * <m3e-list-action>\r\n * Markers\r\n * <span slot=\"supporting-text\">$8.99</span>\r\n * </m3e-list-action>\r\n * </div>\r\n * </m3e-expandable-list-item>\r\n * </m3e-action-list>\r\n * ```\r\n *\r\n * @tag m3e-expandable-list-item\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot toggle-icon - Renders a custom icon for the expand/collapse toggle.\r\n * @slot items - Container for child list items displayed when expanded.\r\n * @slot trailing - This component does not expose the base trailing slot.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr open - Whether the item is expanded.\r\n *\r\n * @fires opening - Dispatched when the item begins to open.\r\n * @fires opened - Dispatched when the item has opened.\r\n * @fires closing - Dispatched when the item begins to close.\r\n * @fires closed - Dispatched when the item has closed.\r\n *\r\n * @cssprop --m3e-expandable-list-item-toggle-icon-container-width - Width of the toggle icon container.\r\n * @cssprop --m3e-expandable-list-item-toggle-icon-container-shape - Border radius of the toggle icon container.\r\n * @cssprop --m3e-expandable-list-item-toggle-icon-size - Size of the toggle icon.\r\n * @cssprop --m3e-expandable-list-item-expanded-toggle-icon-container-color - Background color of the toggle icon container when expanded.\r\n * @cssprop --m3e-expandable-list-item-bounce-duration - Duration of the bounce animation when expanding.\r\n * @cssprop --m3e-expandable-list-item-bounce-factor - Multiplication factor for the bounce effect.\r\n * @cssprop --m3e-expandable-list-item-expand-duration - Duration of the expand/collapse animation.\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-height - Minimum height of the list item.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-disabled-label-text-color - Color for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-opacity - Opacity for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-color - Color for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-opacity - Opacity for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-color - Color for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-opacity - Opacity for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-color - Color for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-opacity - Opacity for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-color - Color for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-opacity - Opacity for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-hover-state-layer-color - Color for the hover state layer.\r\n * @cssprop --m3e-list-item-hover-state-layer-opacity - Opacity for the hover state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-color - Color for the focus state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-opacity - Opacity for the focus state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-color - Color for the pressed state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-opacity - Opacity for the pressed state layer.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container shape.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list item segments.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-disabled-media-opacity - Opacity for media when disabled.\r\n */\r\n@customElement(\"m3e-expandable-list-item\")\r\nexport class M3eExpandableListItemElement extends M3eListItemElement {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .header {\r\n width: 100%;\r\n margin-bottom: 0px;\r\n transition: ${unsafeCSS(\r\n `margin-bottom \r\n var(--m3e-expandable-list-item-bounce-duration, ${DesignToken.motion.duration.medium1})\r\n ${DesignToken.motion.easing.standard}`,\r\n )};\r\n --_list-item-button-trailing-align-self: stretch;\r\n }\r\n .toggle-container {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n align-self: stretch;\r\n width: var(--m3e-expandable-list-item-toggle-icon-container-width, 2rem);\r\n border-radius: var(--m3e-expandable-list-item-toggle-icon-container-shape, ${DesignToken.shape.corner.full});\r\n transition: ${unsafeCSS(\r\n `background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`,\r\n )};\r\n }\r\n .toggle {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n vertical-align: middle;\r\n font-size: var(--m3e-expandable-list-item-toggle-icon-size, 1.5rem);\r\n transition: ${unsafeCSS(`transform ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard}`)};\r\n }\r\n .toggle svg,\r\n ::slotted(svg[slot=\"toggle-icon\"]) {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n :host([open]) .toggle-container {\r\n background-color: var(\r\n --_expandable-list-item-expanded-toggle-icon-container-color,\r\n var(--m3e-expandable-list-item-expanded-toggle-icon-container-color, ${DesignToken.color.surfaceContainer})\r\n );\r\n }\r\n :host([open]) .toggle {\r\n transform: rotate(180deg);\r\n }\r\n :host([open]) .header {\r\n --_list-item-top-container-shape: var(--_expandable-list-item-expanded-top-shape, initial);\r\n --_list-item-bottom-container-shape: initial;\r\n margin-bottom: var(--_expandable-list-item-items-segment-gap, 0px);\r\n }\r\n :host([open]) .header.opening {\r\n margin-bottom: calc(\r\n var(--_expandable-list-item-items-segment-gap, 0px) * var(--m3e-expandable-list-item-bounce-factor, 4)\r\n );\r\n }\r\n :host([open]) .header,\r\n :host([open]) .items {\r\n --_list-item-container-color: var(\r\n --m3e-expandable-list-item-expanded-container-color,\r\n var(--m3e-list-item-container-color, transparent)\r\n );\r\n }\r\n .base,\r\n ::slotted([slot=\"items\"]) {\r\n display: flex;\r\n flex-direction: column;\r\n box-sizing: border-box;\r\n }\r\n ::slotted([slot=\"items\"]) {\r\n flex: none;\r\n --_list-item-top-container-shape: initial;\r\n --_list-item-bottom-container-shape: initial;\r\n row-gap: var(--_expandable-list-item-items-segment-gap, 0px);\r\n }\r\n .items {\r\n --m3e-collapsible-animation-duration: var(\r\n --m3e-expandable-list-item-expand-duration,\r\n ${DesignToken.motion.duration.medium1}\r\n );\r\n }\r\n @media (forced-colors: active) {\r\n .header {\r\n transition: none;\r\n }\r\n :host([open]) .header.opening {\r\n margin-bottom: var(--_expandable-list-item-items-segment-gap, 0px);\r\n }\r\n }\r\n @media (prefers-reduced-motion) {\r\n .header,\r\n .toggle-container,\r\n .toggle {\r\n transition: none;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ private static __nextId = 0;\r\n /** @private */ #id = M3eExpandableListItemElement.__nextId++;\r\n /** @private */ #contentId = `m3e-expandable-list-item-${this.#id}-content`;\r\n /** @private */ #headerId = `m3e-expandable-list-item-${this.#id}-header`;\r\n /** @private */ #items = new Array<M3eListItemElement>();\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /**\r\n * Whether the item is expanded.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) open = false;\r\n\r\n /** @internal */\r\n @query(\".header\") readonly button!: M3eListItemButtonElement;\r\n\r\n /** The direct child items of this item. */\r\n get items(): ReadonlyArray<M3eListItemElement> {\r\n return this.#items;\r\n }\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this.button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this.button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this.button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues<this>): void {\r\n super.updated(_changedProperties);\r\n\r\n if (_changedProperties.has(\"open\")) {\r\n for (let sibling = this.previousElementSibling; sibling; sibling = sibling.previousElementSibling) {\r\n if (sibling instanceof M3eListItemElement) {\r\n setCustomState(sibling, \"--has-next-open\", this.open);\r\n break;\r\n }\r\n }\r\n for (let sibling = this.nextElementSibling; sibling; sibling = sibling.nextElementSibling) {\r\n if (sibling instanceof M3eListItemElement) {\r\n setCustomState(sibling, \"--has-previous-open\", this.open);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-list-item-button\r\n id=\"${this.#headerId}\"\r\n class=\"header\"\r\n ?disabled=\"${this.disabled}\"\r\n aria-expanded=\"${this.open}\"\r\n aria-controls=\"${this.#contentId}\"\r\n @click=\"${this.#handleHeaderClick}\"\r\n >\r\n <slot name=\"leading\" slot=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n <slot name=\"overline\" slot=\"overline\"></slot>\r\n <slot></slot>\r\n <slot name=\"supporting-text\" slot=\"supporting-text\"></slot>\r\n <div class=\"toggle-container\" slot=\"trailing\" aria-hidden=\"true\">\r\n <div class=\"toggle\">\r\n <slot name=\"toggle-icon\">\r\n <svg viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path d=\"M480-344 240-584l56-56 184 184 184-184 56 56-240 240Z\" />\r\n </svg>\r\n </slot>\r\n </div>\r\n </div>\r\n </m3e-list-item-button>\r\n <m3e-collapsible\r\n id=\"${this.#contentId}\"\r\n class=\"items\"\r\n role=\"list\"\r\n aria-labelledby=\"${this.#headerId}\"\r\n ?open=\"${this.open}\"\r\n @opening=\"${this.#handleCollapsibleEvent}\"\r\n @opened=\"${this.#handleCollapsibleEvent}\"\r\n @closing=\"${this.#handleCollapsibleEvent}\"\r\n @closed=\"${this.#handleCollapsibleEvent}\"\r\n >\r\n <slot name=\"items\" @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n </m3e-collapsible>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleHeaderClick(e: Event) {\r\n if (!e.defaultPrevented) {\r\n this.open = !this.open;\r\n this.closest(\"m3e-action-list\")?.[selectionManager].updateActiveItem(this.button);\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleCollapsibleEvent(e: Event): void {\r\n e.stopPropagation();\r\n [\"opening\", \"opened\", \"closing\", \"closed\"].forEach((x) => {\r\n this.button?.classList.toggle(x, e.type === x);\r\n });\r\n\r\n this.dispatchEvent(new Event(e.type, { bubbles: true }));\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#items = (e.target as HTMLSlotElement)\r\n .assignedElements({ flatten: true })\r\n .flatMap((x) => [...x.childNodes].filter((x) => x instanceof M3eListItemElement));\r\n\r\n this.#items.forEach((x, i) => {\r\n if (i == this.#items.length - 1) {\r\n x.style.setProperty(\r\n \"--_list-item-bottom-container-shape\",\r\n `var(--m3e-segmented-list-container-shape, ${DesignToken.shape.corner.large})`,\r\n );\r\n } else {\r\n x.style.removeProperty(\"--_list-item-bottom-container-shape\");\r\n }\r\n });\r\n\r\n this.closest<M3eListElement>(\"m3e-list, m3e-action-list, m3e-selection-list\")?.notifyItemsChange();\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-expandable-list-item\": M3eExpandableListItemElement;\r\n }\r\n}\r\n","import { customElement } from \"@m3e/web/core\";\r\nimport { RovingTabIndexManager, selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListElement } from \"./ListElement\";\r\nimport { M3eListActionElement } from \"./ListActionElement\";\r\nimport { M3eExpandableListItemElement } from \"./ExpandableListItemElement\";\r\nimport { M3eListItemButtonElement } from \"./ListItemButtonElement\";\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * A list of actions.\r\n *\r\n * @description\r\n * The `m3e-action-list` component provides a specialized list container for action-based\r\n * interactions following Material 3 design principles. It manages keyboard navigation with\r\n * roving tab index, supporting arrow keys, Home/End navigation, and vertical orientation.\r\n * The component is optimized for scenarios where each list item represents a clickable action.\r\n *\r\n * @tag m3e-action-list\r\n *\r\n * @slot - Renders the items of the list.\r\n *\r\n * @attr variant - The appearance variant of the list.\r\n *\r\n * @cssprop --m3e-list-divider-inset-start-size - Start inset for dividers within the list.\r\n * @cssprop --m3e-list-divider-inset-end-size - End inset for dividers within the list.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list items in segmented variant.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container.\r\n * @cssprop --m3e-segmented-list-item-container-color - Background color of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-disabled-container-color - Background color of disabled items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-container-shape - Border radius of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-hover-container-shape - Border radius of items in segmented variant on hover.\r\n * @cssprop --m3e-segmented-list-item-focus-container-shape - Border radius of items in segmented variant on focus.\r\n * @cssprop --m3e-segmented-list-item-selected-container-shape - Border radius of items in segmented variant when selected.\r\n */\r\n@customElement(\"m3e-action-list\")\r\nexport class M3eActionListElement extends M3eListElement {\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this[selectionManager].onKeyDown(e);\r\n\r\n /** @private */\r\n readonly [selectionManager] = new RovingTabIndexManager<M3eListItemButtonElement>()\r\n .withWrap()\r\n .withHomeAndEnd()\r\n .withVerticalOrientation()\r\n .withSkipPredicate((x) => {\r\n if (x.disabled) return true;\r\n\r\n const listItem = (x.getRootNode() as ShadowRoot).host as M3eListItemElement;\r\n if (listItem.parentElement?.slot === \"items\") {\r\n let expandable = listItem.closest(\"m3e-expandable-list-item\");\r\n while (expandable) {\r\n if (!expandable.open) {\r\n return true;\r\n }\r\n\r\n const ancestor = expandable.closest<M3eExpandableListItemElement | M3eActionListElement>(\r\n \"m3e-expandable-list-item,m3e-action-list\",\r\n );\r\n if (ancestor instanceof M3eExpandableListItemElement) {\r\n expandable = ancestor;\r\n continue;\r\n }\r\n break;\r\n }\r\n }\r\n return false;\r\n });\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override async notifyItemsChange(): Promise<void> {\r\n const items = [\r\n ...this.querySelectorAll<M3eListActionElement | M3eExpandableListItemElement>(\r\n \"m3e-list-action,m3e-expandable-list-item\",\r\n ),\r\n ];\r\n\r\n for (const item of items) {\r\n if (item.isUpdatePending) {\r\n await item.updateComplete;\r\n }\r\n }\r\n\r\n if (this.isUpdatePending) {\r\n await this.updateComplete;\r\n }\r\n\r\n const { added } = this[selectionManager].setItems(\r\n items.map((x) => (x instanceof M3eExpandableListItemElement ? x.button : x.button)),\r\n );\r\n\r\n if (!this[selectionManager].activeItem) {\r\n this[selectionManager].updateActiveItem(added.find((x) => !x.disabled));\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-action-list\": M3eActionListElement;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html, PropertyValues } from \"lit\";\r\nimport { query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n Disabled,\r\n Focusable,\r\n FocusController,\r\n HoverController,\r\n KeyboardClick,\r\n LinkButton,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n PressedController,\r\n renderPseudoLink,\r\n Role,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * @internal\r\n * An internal interactive element used to present the content of a list item.\r\n */\r\n@customElement(\"m3e-list-item-button\")\r\nexport class M3eListItemButtonElement extends KeyboardClick(\r\n LinkButton(Focusable(Disabled(AttachInternals(Role(M3eListItemElement, \"button\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n M3eListItemElement.styles,\r\n css`\r\n :host {\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n position: relative;\r\n }\r\n :host(:not(:disabled)) {\r\n cursor: pointer;\r\n }\r\n a {\r\n all: unset;\r\n display: block;\r\n position: absolute;\r\n top: 0px;\r\n left: 0px;\r\n right: 0px;\r\n bottom: 0px;\r\n z-index: 1;\r\n }\r\n slot[name=\"trailing\"] {\r\n align-self: var(--_list-item-button-trailing-align-self, auto);\r\n }\r\n `,\r\n ];\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n constructor() {\r\n super();\r\n new FocusController(this, {\r\n callback: (_, focusVisible) =>\r\n this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"focus-visible\", focusVisible),\r\n });\r\n new PressedController(this, {\r\n callback: (pressed) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"pressed\", pressed),\r\n });\r\n new HoverController(this, {\r\n callback: (hovering) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"hover\", hovering),\r\n });\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n ${this[renderPseudoLink]()} ${super._renderBase()}\r\n </div>`;\r\n }\r\n}\r\n","import { css, CSSResultGroup, html } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport { customElement, LinkButton } from \"@m3e/web/core\";\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\nimport { M3eListItemButtonElement } from \"./ListItemButtonElement\";\r\n\r\nimport \"./ListItemButtonElement\";\r\n\r\n/**\r\n * An item in a list that performs an action.\r\n *\r\n * @description\r\n * The `m3e-list-action` component represents an interactive list item that performs a\r\n * user-initiated action. It combines the semantic structure of a list item with\r\n * button-like interactions, supporting keyboard navigation, ripple effects, and state layers.\r\n *\r\n * @tag m3e-list-action\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot trailing - Renders the trailing content of the list item.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr download - A value indicating whether the `target` of the link button will be downloaded, optionally specifying the new name of the file.\r\n * @attr href - The URL to which the link button points.\r\n * @attr rel - The relationship between the `target` of the link button and the document.\r\n * @attr target - The target of the link button.\r\n *\r\n * @fires click - Dispatched when the element is clicked.\r\n *\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-height - Minimum height of the list item.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-disabled-container-color - Background color of the list item when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-color - Color for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-opacity - Opacity for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-color - Color for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-opacity - Opacity for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-color - Color for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-opacity - Opacity for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-color - Color for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-opacity - Opacity for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-color - Color for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-opacity - Opacity for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-hover-state-layer-color - Color for the hover state layer.\r\n * @cssprop --m3e-list-item-hover-state-layer-opacity - Opacity for the hover state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-color - Color for the focus state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-opacity - Opacity for the focus state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-color - Color for the pressed state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-opacity - Opacity for the pressed state layer.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-disabled-media-opacity - Opacity for media when disabled.\r\n */\r\n@customElement(\"m3e-list-action\")\r\nexport class M3eListActionElement extends LinkButton(M3eListItemElement, true) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .button {\r\n width: 100%;\r\n }\r\n `;\r\n\r\n /** @internal */\r\n @query(\".button\") readonly button!: M3eListItemButtonElement;\r\n\r\n /**\r\n * Whether the element is disabled.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) disabled = false;\r\n\r\n /** @inheritdoc */\r\n override focus(options?: FocusOptions): void {\r\n this.button?.focus(options);\r\n }\r\n\r\n /** @inheritdoc */\r\n override blur(): void {\r\n this.button?.blur();\r\n }\r\n\r\n /** @inheritdoc */\r\n override click(): void {\r\n this.button?.click();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<m3e-list-item-button\r\n class=\"button\"\r\n ?disabled=\"${this.disabled}\"\r\n href=\"${ifDefined(this.href || undefined)}\"\r\n target=\"${ifDefined(this.target || undefined)}\"\r\n download=\"${ifDefined(this.download || undefined)}\"\r\n rel=\"${ifDefined(this.rel || undefined)}\"\r\n @click=\"${this.#handleClick}\"\r\n >\r\n <slot name=\"leading\" slot=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n <slot name=\"overline\" slot=\"overline\"></slot>\r\n <slot></slot>\r\n <slot name=\"supporting-text\" slot=\"supporting-text\"></slot>\r\n <slot name=\"trailing\" slot=\"trailing\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n </m3e-list-item-button>`;\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n if (!e.defaultPrevented) {\r\n this.closest(\"m3e-action-list\")?.[selectionManager].updateActiveItem(this.button);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list-action\": M3eListActionElement;\r\n }\r\n}\r\n","import { CSSResultGroup, css, PropertyValues, html } from \"lit\";\r\nimport { property, query } from \"lit/decorators.js\";\r\n\r\nimport {\r\n KeyboardClick,\r\n Focusable,\r\n Disabled,\r\n AttachInternals,\r\n Role,\r\n Selected,\r\n M3eFocusRingElement,\r\n M3eRippleElement,\r\n M3eStateLayerElement,\r\n DesignToken,\r\n getTextContent,\r\n FocusController,\r\n PressedController,\r\n HoverController,\r\n customElement,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListItemElement } from \"./ListItemElement\";\r\n\r\n/**\r\n * A selectable option in a list.\r\n *\r\n * @description\r\n * The `m3e-list-option` component represents a selectable item within a list container. It extends\r\n * the base `m3e-list-item` functionality with selection state management, providing visual feedback\r\n * for selected and unselected states. The component is designed for use with `m3e-selection-list`\r\n * and supports rich content through multiple slots, comprehensive styling via CSS custom properties,\r\n * and accessible interactions following Material 3 design principles.\r\n *\r\n * @tag m3e-list-option\r\n *\r\n * @slot - Renders the content of the list item.\r\n * @slot leading - Renders the leading content of the list item.\r\n * @slot overline - Renders the overline of the list item.\r\n * @slot supporting-text - Renders the supporting text of the list item.\r\n * @slot trailing - Renders the trailing content of the list item.\r\n *\r\n * @attr disabled - Whether the element is disabled.\r\n * @attr selected - Whether the element is selected.\r\n *\r\n * @fires beforeinput - Dispatched before the selected state changes.\r\n * @fires input - Dispatched when the selected state changes.\r\n * @fires change - Dispatched when the selected state changes.\r\n * @fires click - Dispatched when the element is clicked.\r\n *\r\n * @cssprop --m3e-list-item-between-space - Horizontal gap between elements.\r\n * @cssprop --m3e-list-item-padding-inline - Horizontal padding for the list item.\r\n * @cssprop --m3e-list-item-padding-block - Vertical padding for the list item.\r\n * @cssprop --m3e-list-item-height - Minimum height of the list item.\r\n * @cssprop --m3e-list-item-font-size - Font size for main content.\r\n * @cssprop --m3e-list-item-font-weight - Font weight for main content.\r\n * @cssprop --m3e-list-item-line-height - Line height for main content.\r\n * @cssprop --m3e-list-item-tracking - Letter spacing for main content.\r\n * @cssprop --m3e-list-item-overline-font-size - Font size for overline slot.\r\n * @cssprop --m3e-list-item-overline-font-weight - Font weight for overline slot.\r\n * @cssprop --m3e-list-item-overline-line-height - Line height for overline slot.\r\n * @cssprop --m3e-list-item-overline-tracking - Letter spacing for overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-size - Font size for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-font-weight - Font weight for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-line-height - Line height for supporting text slot.\r\n * @cssprop --m3e-list-item-supporting-text-tracking - Letter spacing for supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-size - Font size for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-font-weight - Font weight for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-line-height - Line height for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-trailing-text-tracking - Letter spacing for trailing supporting text slot.\r\n * @cssprop --m3e-list-item-icon-size - Size for leading/trailing icons.\r\n * @cssprop --m3e-list-item-label-text-color - Color for the main content.\r\n * @cssprop --m3e-list-item-overline-color - Color for the overline slot.\r\n * @cssprop --m3e-list-item-supporting-text-color - Color for the supporting text slot.\r\n * @cssprop --m3e-list-item-leading-color - Color for the leading content.\r\n * @cssprop --m3e-list-item-trailing-color - Color for the trailing content.\r\n * @cssprop --m3e-list-item-container-color - Background color of the list item.\r\n * @cssprop --m3e-list-item-container-shape - Border radius of the list item.\r\n * @cssprop --m3e-list-item-hover-container-shape - Border radius of the list item on hover.\r\n * @cssprop --m3e-list-item-focus-container-shape - Border radius of the list item on focus.\r\n * @cssprop --m3e-list-item-video-width - Width of the video slot.\r\n * @cssprop --m3e-list-item-video-height - Height of the video slot.\r\n * @cssprop --m3e-list-item-video-shape - Border radius of the video slot.\r\n * @cssprop --m3e-list-item-image-width - Width of the image slot.\r\n * @cssprop --m3e-list-item-image-height - Height of the image slot.\r\n * @cssprop --m3e-list-item-image-shape - Border radius of the image slot.\r\n * @cssprop --m3e-list-item-disabled-container-color - Background color of the list item when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-color - Color for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-label-text-opacity - Opacity for the main content when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-color - Color for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-overline-opacity - Opacity for the overline slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-color - Color for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-supporting-text-opacity - Opacity for the supporting text slot when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-color - Color for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-leading-opacity - Opacity for the leading icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-color - Color for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-disabled-trailing-opacity - Opacity for the trailing icon when disabled.\r\n * @cssprop --m3e-list-item-hover-state-layer-color - Color for the hover state layer.\r\n * @cssprop --m3e-list-item-hover-state-layer-opacity - Opacity for the hover state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-color - Color for the focus state layer.\r\n * @cssprop --m3e-list-item-focus-state-layer-opacity - Opacity for the focus state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-color - Color for the pressed state layer.\r\n * @cssprop --m3e-list-item-pressed-state-layer-opacity - Opacity for the pressed state layer.\r\n * @cssprop --m3e-list-item-selected-label-text-color - Selected color for the main content.\r\n * @cssprop --m3e-list-item-selected-overline-color - Selected color for the overline slot.\r\n * @cssprop --m3e-list-item-selected-supporting-text-color - Selected color for the supporting text slot.\r\n * @cssprop --m3e-list-item-selected-leading-color - Selected color for the leading content.\r\n * @cssprop --m3e-list-item-selected-trailing-color - Selected color for the trailing content.\r\n * @cssprop --m3e-list-item-selected-container-color - Selected background color of the list item.\r\n * @cssprop --m3e-list-item-selected-container-shape - Selected border radius of the list item.\r\n * @cssprop --m3e-list-item-selected-disabled-container-color - Selected background color when disabled.\r\n * @cssprop --m3e-list-item-selected-disabled-container-opacity - Selected opacity when disabled.\r\n * @cssprop --m3e-list-item-selected-hover-state-layer-color - Color for the hover state layer when selected.\r\n * @cssprop --m3e-list-item-selected-hover-state-layer-opacity - Opacity for the hover state layer when selected.\r\n * @cssprop --m3e-list-item-selected-focus-state-layer-color - Color for the focus state layer when selected.\r\n * @cssprop --m3e-list-item-selected-focus-state-layer-opacity - Opacity for the focus state layer when selected.\r\n * @cssprop --m3e-list-item-selected-pressed-state-layer-color - Color for the pressed state layer when selected.\r\n * @cssprop --m3e-list-item-selected-pressed-state-layer-opacity - Opacity for the pressed state layer when selected.\r\n * @cssprop --m3e-list-item-three-line-top-offset - Top offset for media in three line items.\r\n * @cssprop --m3e-list-item-disabled-media-opacity - Opacity for media when disabled.\r\n */\r\n@customElement(\"m3e-list-option\")\r\nexport class M3eListOptionElement extends KeyboardClick(\r\n Focusable(Selected(Disabled(AttachInternals(Role(M3eListItemElement, \"option\"), true)))),\r\n) {\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = [\r\n M3eListItemElement.styles,\r\n css`\r\n :host {\r\n outline: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n .base {\r\n position: relative;\r\n }\r\n .indicator {\r\n min-width: 1.5rem;\r\n min-height: 1.5rem;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n :host(:not(:disabled)) {\r\n cursor: pointer;\r\n }\r\n :host(:is(:state(--three-line), :--three-line)) .indicator {\r\n align-self: flex-start;\r\n margin-top: var(--m3e-list-item-three-line-top-offset, 0.25rem);\r\n }\r\n :host([selected]) .base,\r\n :host([selected]) .state-layer,\r\n :host([selected]) .ripple,\r\n :host([selected]) .focus-ring {\r\n border-radius: var(--m3e-list-item-selected-container-shape, ${DesignToken.shape.corner.large});\r\n }\r\n :host([selected]:not(:disabled)) .content {\r\n color: var(--m3e-list-item-selected-label-text-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"overline\"]) {\r\n color: var(--m3e-list-item-selected-overline-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"supporting-text\"]) {\r\n color: var(--m3e-list-item-selected-supporting-text-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"leading\"]) {\r\n color: var(--m3e-list-item-selected-leading-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"trailing\"]) {\r\n color: var(--m3e-list-item-selected-trailing-color, ${DesignToken.color.onSecondaryContainer});\r\n }\r\n :host([selected]:not(:disabled)) .base {\r\n background-color: var(--m3e-list-item-selected-container-color, ${DesignToken.color.secondaryContainer});\r\n }\r\n :host([selected]:disabled) .base {\r\n background-color: color-mix(\r\n in srgb,\r\n var(--m3e-list-item-selected-disabled-container-color, ${DesignToken.color.onSurface})\r\n var(--m3e-list-item-selected-disabled-container-opacity, 10%),\r\n transparent\r\n );\r\n }\r\n :host([selected]:not(:disabled)) .state-layer {\r\n --m3e-state-layer-hover-color: var(\r\n --m3e-list-item-selected-hover-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-hover-opacity: var(\r\n --m3e-list-item-selected-hover-state-layer-opacity,\r\n ${DesignToken.state.hoverStateLayerOpacity}\r\n );\r\n --m3e-state-layer-focus-color: var(\r\n --m3e-list-item-selected-focus-state-layer-color,\r\n ${DesignToken.color.onSurface}\r\n );\r\n --m3e-state-layer-focus-opacity: var(\r\n --m3e-list-item-selected-focus-state-layer-opacity,\r\n ${DesignToken.state.focusStateLayerOpacity}\r\n );\r\n }\r\n :host([selected]:not(:disabled)) .ripple {\r\n --m3e-ripple-color: var(--m3e-list-item-selected-pressed-state-layer-color, ${DesignToken.color.onSurface});\r\n --m3e-ripple-opacity: var(\r\n --m3e-list-item-selected-pressed-state-layer-opacity,\r\n ${DesignToken.state.pressedStateLayerOpacity}\r\n );\r\n }\r\n :host(:is(:state(--hide-selection), :--hide-selection)) .indicator,\r\n :host(:not(:is(:state(--hide-selection), :--hide-selection))) ::slotted([slot=\"trailing\"]) {\r\n display: none;\r\n }\r\n @media (forced-colors: active) {\r\n :host([selected]:not(:disabled)) .content,\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"overline\"]),\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"supporting-text\"]),\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"leading\"]),\r\n :host([selected]:not(:disabled)) ::slotted([slot=\"trailing\"]) {\r\n color: HighlightText;\r\n forced-color-adjust: none;\r\n }\r\n :host([selected]:not(:disabled)) .base {\r\n background-color: Highlight;\r\n }\r\n }\r\n `,\r\n ];\r\n\r\n /** @private */ #value?: string;\r\n /** @private */ #textContent = \"\";\r\n\r\n /** @private */ @query(\".focus-ring\") private readonly _focusRing?: M3eFocusRingElement;\r\n /** @private */ @query(\".state-layer\") private readonly _stateLayer?: M3eStateLayerElement;\r\n /** @private */ @query(\".ripple\") private readonly _ripple?: M3eRippleElement;\r\n\r\n /** @private */ readonly #clickHandler = (e: Event) => this.#handleClick(e);\r\n\r\n constructor() {\r\n super();\r\n new FocusController(this, {\r\n callback: (_, focusVisible) =>\r\n this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"focus-visible\", focusVisible),\r\n });\r\n new PressedController(this, {\r\n callback: (pressed) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"pressed\", pressed),\r\n });\r\n new HoverController(this, {\r\n callback: (hovering) => this.shadowRoot?.querySelector(\".base\")?.classList.toggle(\"hover\", hovering),\r\n });\r\n }\r\n\r\n /** A string representing the value of the option. */\r\n @property() get value() {\r\n return this.#value ?? this.#textContent;\r\n }\r\n set value(value: string) {\r\n this.#value = value;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n this.addEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n this.removeEventListener(\"click\", this.#clickHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues<this>): void {\r\n super.firstUpdated(_changedProperties);\r\n [this._focusRing, this._stateLayer, this._ripple].forEach((x) => x?.attach(this));\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"selected\")) {\r\n this.closest(\"m3e-selection-list\")?.[selectionManager].notifySelectionChange(this);\r\n\r\n for (const icon of this.querySelectorAll(\"m3e-icon\")) {\r\n icon.toggleAttribute(\"filled\", this.selected);\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <m3e-state-layer class=\"state-layer\" ?disabled=\"${this.disabled}\"> </m3e-state-layer>\r\n <m3e-focus-ring class=\"focus-ring\" inward ?disabled=\"${this.disabled}\"></m3e-focus-ring>\r\n <m3e-ripple class=\"ripple\" ?disabled=\"${this.disabled}\"></m3e-ripple>\r\n <slot name=\"leading\" @slotchange=\"${this._handleLeadingSlotChange}\"></slot>\r\n <div class=\"content\">\r\n <slot name=\"overline\"></slot>\r\n <slot @slotchange=\"${this.#handleSlotChange}\"></slot>\r\n <slot name=\"supporting-text\"></slot>\r\n </div>\r\n <slot name=\"trailing\" @slotchange=\"${this._handleTrailingSlotChange}\"></slot>\r\n <div class=\"indicator\">\r\n ${this.closest(\"m3e-selection-list\")?.multi\r\n ? html`<m3e-pseudo-checkbox ?checked=\"${this.selected}\" ?disabled=\"${this.disabled}\"></m3e-pseudo-checkbox>`\r\n : html`<m3e-pseudo-radio ?checked=\"${this.selected}\" ?disabled=\"${this.disabled}\"></m3e-pseudo-radio>`}\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(e: Event): void {\r\n this.#textContent = getTextContent(<HTMLSlotElement>e.target);\r\n }\r\n\r\n /** @private */\r\n #handleClick(e: Event): void {\r\n const selectionList = this.closest(\"m3e-selection-list\");\r\n if (e.defaultPrevented || !selectionList) return;\r\n\r\n if (selectionList.multi || !this.selected) {\r\n if (this.dispatchEvent(new Event(\"beforeinput\", { bubbles: true, cancelable: true }))) {\r\n this.selected = !this.selected;\r\n selectionList[selectionManager].notifySelectionChange(this);\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 }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-list-option\": M3eListOptionElement;\r\n }\r\n}\r\n","import { PropertyValues } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport {\r\n AttachInternals,\r\n customElement,\r\n Dirty,\r\n Disabled,\r\n FormAssociated,\r\n formValue,\r\n Labelled,\r\n Role,\r\n setCustomState,\r\n Touched,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { SelectionManager, selectionManager } from \"@m3e/web/core/a11y\";\r\n\r\nimport { M3eListElement } from \"./ListElement\";\r\nimport { M3eListOptionElement } from \"./ListOptionElement\";\r\n\r\n/**\r\n * A list of selectable options.\r\n *\r\n * @description\r\n * The `m3e-selection-list` component provides a container for managing selectable list items with\r\n * single or multi-select capabilities. It implements robust keyboard navigation, form association,\r\n * and state management for both individual options and the list as a whole. The component supports\r\n * flexible layout, custom theming via CSS custom properties, and comprehensive accessibility features\r\n * including aria roles, roving tabindex management, and semantic event handling following Material 3\r\n * design principles.\r\n *\r\n * @tag m3e-selection-list\r\n *\r\n * @slot - Renders the items of the list.\r\n *\r\n * @attr hide-selection-indicator - Whether to hide the selection indicator.\r\n * @attr multi - Whether multiple items can be selected.\r\n * @attr variant - The appearance variant of the list.\r\n *\r\n * @fires beforeinput - Dispatched before the selected state of an option changes.\r\n * @fires input - Dispatched when the selected state of an option changes.\r\n * @fires change - Dispatched when the selected state of an option changes.\r\n *\r\n * @cssprop --m3e-list-divider-inset-start-size - Start inset for dividers within the list.\r\n * @cssprop --m3e-list-divider-inset-end-size - End inset for dividers within the list.\r\n * @cssprop --m3e-segmented-list-segment-gap - Gap between list items in segmented variant.\r\n * @cssprop --m3e-segmented-list-container-shape - Border radius of the segmented list container.\r\n * @cssprop --m3e-segmented-list-item-container-color - Background color of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-disabled-container-color - Background color of disabled items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-container-shape - Border radius of items in segmented variant.\r\n * @cssprop --m3e-segmented-list-item-hover-container-shape - Border radius of items in segmented variant on hover.\r\n * @cssprop --m3e-segmented-list-item-focus-container-shape - Border radius of items in segmented variant on focus.\r\n * @cssprop --m3e-segmented-list-item-selected-container-shape - Border radius of items in segmented variant when selected.\r\n */\r\n@customElement(\"m3e-selection-list\")\r\nexport class M3eSelectionListElement extends Labelled(\r\n Dirty(Touched(FormAssociated(Disabled(AttachInternals(Role(M3eListElement, \"listbox\")))))),\r\n) {\r\n /** @private */ readonly #keyDownHandler = (e: KeyboardEvent) => this[selectionManager].onKeyDown(e);\r\n /** @private */ readonly #changeHandler = (e: Event) => this.#handleChange(e);\r\n\r\n /** @private */\r\n readonly [selectionManager] = new SelectionManager<M3eListOptionElement>()\r\n .withWrap()\r\n .withHomeAndEnd()\r\n .withVerticalOrientation();\r\n\r\n /**\r\n * Whether multiple items can be selected.\r\n * @default false\r\n */\r\n @property({ type: Boolean }) multi = false;\r\n\r\n /**\r\n * Whether to hide the selection indicator.\r\n * @default false\r\n */\r\n @property({ attribute: \"hide-selection-indicator\", type: Boolean }) hideSelectionIndicator = false;\r\n\r\n /** The options of the list. */\r\n get options(): readonly M3eListOptionElement[] {\r\n return this[selectionManager]?.items ?? [];\r\n }\r\n\r\n /** The selected option(s) of the list. */\r\n get selected(): readonly M3eListOptionElement[] {\r\n return this[selectionManager]?.selectedItems ?? [];\r\n }\r\n\r\n /** The selected (enabled) value(s) of the set. */\r\n get value(): string | readonly string[] | null {\r\n const values = this.selected.filter((x) => !x.disabled).map((x) => x.value);\r\n switch (values.length) {\r\n case 0:\r\n return null;\r\n case 1:\r\n return values[0];\r\n default:\r\n return values;\r\n }\r\n }\r\n\r\n /** @inheritdoc @internal */\r\n override get [formValue]() {\r\n const values = this.value;\r\n if (Array.isArray(values)) {\r\n const data = new FormData();\r\n for (const value of values) {\r\n data.append(this.name, value);\r\n }\r\n return data;\r\n }\r\n return <string | null>values;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.addEventListener(\"keydown\", this.#keyDownHandler);\r\n this.addEventListener(\"change\", this.#changeHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"keydown\", this.#keyDownHandler);\r\n this.removeEventListener(\"change\", this.#changeHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override update(changedProperties: PropertyValues<this>): void {\r\n super.update(changedProperties);\r\n\r\n if (changedProperties.has(\"disabled\") && (changedProperties.get(\"disabled\") !== undefined || this.disabled)) {\r\n this[selectionManager].disabled = this.disabled;\r\n }\r\n\r\n if (changedProperties.has(\"multi\")) {\r\n this[selectionManager].multi = this.multi;\r\n\r\n if (this.multi) {\r\n this.setAttribute(\"aria-multiselectable\", \"true\");\r\n } else {\r\n this.removeAttribute(\"aria-multiselectable\");\r\n }\r\n\r\n this[selectionManager].items.forEach((x) => x.requestUpdate());\r\n }\r\n\r\n if (changedProperties.has(\"hideSelectionIndicator\")) {\r\n this[selectionManager].items.forEach((x) => setCustomState(x, \"--hide-selection\", this.hideSelectionIndicator));\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override notifyItemsChange(): void {\r\n const { added } = this[selectionManager].setItems(this.items.filter((x) => x instanceof M3eListOptionElement));\r\n added.forEach((x) => setCustomState(x, \"--hide-selection\", this.hideSelectionIndicator));\r\n\r\n if (!this[selectionManager].activeItem) {\r\n this[selectionManager].updateActiveItem(added.find((x) => !x.disabled));\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleChange(e: Event): void {\r\n if (e.target !== this) {\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-selection-list\": M3eSelectionListElement;\r\n }\r\n}\r\n"],"names":["M3eListItemElement","ReconnectedCallback","AttachInternals","Role","LitElement","constructor","_M3eListItemElement_resizeController","set","ResizeController","target","callback","__classPrivateFieldGet","_M3eListItemElement_instances","_M3eListItemElement_updateMultiline","_M3eListItemElement_leadingContentType","_M3eListItemElement_trailingContentType","leadingContentType","trailingContentType","reconnectedCallback","_M3eListItemElement_initialize","call","firstUpdated","_changedProperties","render","html","_renderBase","_handleLeadingSlotChange","_handleTrailingSlotChange","e","contentType","__classPrivateFieldSet","_M3eListItemElement_getSlotContentType","setCustomState","undefined","closest","notifyLeadingContentTypeChange","notifyTrailingContentTypeChange","content","shadowRoot","querySelector","observe","lines","computeLineCount","slot","elements","assignedElements","flatten","some","x","tagName","length","styles","css","DesignToken","shape","corner","none","unsafeCSS","motion","spring","fastEffects","duration","short4","easing","standard","density","calc","large","medium","typescale","label","small","fontSize","fontWeight","lineHeight","tracking","body","color","onSurfaceVariant","onSurface","state","hoverStateLayerOpacity","focusStateLayerOpacity","pressedStateLayerOpacity","__decorate","customElement","M3eListElement","_M3eListElement_items","Array","_M3eListElement_leadingContentTypes","video","image","avatar","icon","text","_M3eListElement_trailingContentTypes","variant","items","_M3eListElement_instances","_M3eListElement_handleSlotChange","notifyItemsChange","oldType","newType","forEach","filter","i","surface","extraSmall","property","reflect","prototype","M3eExpandableListItemElement","M3eExpandableListItemElement_1","_M3eExpandableListItemElement_id","__nextId","_M3eExpandableListItemElement_contentId","_M3eExpandableListItemElement_headerId","_M3eExpandableListItemElement_items","disabled","open","focus","options","button","blur","click","updated","has","sibling","previousElementSibling","nextElementSibling","_M3eExpandableListItemElement_instances","_M3eExpandableListItemElement_handleHeaderClick","_M3eExpandableListItemElement_handleCollapsibleEvent","_M3eExpandableListItemElement_handleSlotChange","defaultPrevented","selectionManager","updateActiveItem","stopPropagation","classList","toggle","type","dispatchEvent","Event","bubbles","flatMap","childNodes","style","setProperty","removeProperty","medium1","full","surfaceContainer","Boolean","query","M3eActionListElement","_M3eActionListElement_keyDownHandler","onKeyDown","_a","RovingTabIndexManager","withWrap","withHomeAndEnd","withVerticalOrientation","withSkipPredicate","listItem","getRootNode","host","parentElement","expandable","ancestor","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","querySelectorAll","item","isUpdatePending","updateComplete","added","setItems","map","activeItem","find","M3eListItemButtonElement","KeyboardClick","LinkButton","Focusable","Disabled","FocusController","_","focusVisible","PressedController","pressed","HoverController","hovering","_focusRing","_stateLayer","_ripple","attach","renderPseudoLink","M3eListActionElement","ifDefined","href","download","rel","_M3eListActionElement_instances","_M3eListActionElement_handleClick","M3eListOptionElement","Selected","_M3eListOptionElement_value","_M3eListOptionElement_textContent","_M3eListOptionElement_clickHandler","value","update","changedProperties","notifySelectionChange","toggleAttribute","selected","_M3eListOptionElement_instances","_M3eListOptionElement_handleSlotChange","multi","getTextContent","selectionList","cancelable","onSecondaryContainer","secondaryContainer","M3eSelectionListElement","Labelled","Dirty","Touched","FormAssociated","_M3eSelectionListElement_keyDownHandler","_M3eSelectionListElement_changeHandler","SelectionManager","hideSelectionIndicator","selectedItems","values","WeakMap","_M3eSelectionListElement_instances","WeakSet","formValue","isArray","data","FormData","append","name","get","setAttribute","removeAttribute","requestUpdate","stopImmediatePropagation","attribute"],"mappings":"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"}