@m3e/web 2.5.12 → 2.5.14

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 (218) hide show
  1. package/dist/all.js +20840 -16242
  2. package/dist/all.js.map +1 -1
  3. package/dist/all.min.js +174 -62
  4. package/dist/all.min.js.map +1 -1
  5. package/dist/avatar.js +1 -1
  6. package/dist/avatar.js.map +1 -1
  7. package/dist/avatar.min.js +1 -1
  8. package/dist/avatar.min.js.map +1 -1
  9. package/dist/badge.js +29 -8
  10. package/dist/badge.js.map +1 -1
  11. package/dist/badge.min.js +1 -1
  12. package/dist/badge.min.js.map +1 -1
  13. package/dist/bottom-sheet.js +1 -1
  14. package/dist/bottom-sheet.js.map +1 -1
  15. package/dist/bottom-sheet.min.js +1 -1
  16. package/dist/bottom-sheet.min.js.map +1 -1
  17. package/dist/calendar.js +46 -10
  18. package/dist/calendar.js.map +1 -1
  19. package/dist/calendar.min.js +5 -5
  20. package/dist/calendar.min.js.map +1 -1
  21. package/dist/checkbox.js +1 -1
  22. package/dist/checkbox.js.map +1 -1
  23. package/dist/checkbox.min.js +1 -1
  24. package/dist/checkbox.min.js.map +1 -1
  25. package/dist/core-anchoring.js +58 -25
  26. package/dist/core-anchoring.js.map +1 -1
  27. package/dist/core-anchoring.min.js +1 -1
  28. package/dist/core-anchoring.min.js.map +1 -1
  29. package/dist/core.js +105 -88
  30. package/dist/core.js.map +1 -1
  31. package/dist/core.min.js +1 -1
  32. package/dist/core.min.js.map +1 -1
  33. package/dist/css-custom-data.json +50 -50
  34. package/dist/custom-elements.json +1746 -935
  35. package/dist/datepicker.js +75 -34
  36. package/dist/datepicker.js.map +1 -1
  37. package/dist/datepicker.min.js +1 -1
  38. package/dist/datepicker.min.js.map +1 -1
  39. package/dist/dialog.js +1 -1
  40. package/dist/dialog.js.map +1 -1
  41. package/dist/dialog.min.js +1 -1
  42. package/dist/dialog.min.js.map +1 -1
  43. package/dist/divider.js +1 -1
  44. package/dist/divider.js.map +1 -1
  45. package/dist/divider.min.js +1 -1
  46. package/dist/divider.min.js.map +1 -1
  47. package/dist/drawer-container.js +2 -2
  48. package/dist/drawer-container.js.map +1 -1
  49. package/dist/drawer-container.min.js +1 -1
  50. package/dist/drawer-container.min.js.map +1 -1
  51. package/dist/expansion-panel.js +6 -3
  52. package/dist/expansion-panel.js.map +1 -1
  53. package/dist/expansion-panel.min.js +1 -1
  54. package/dist/expansion-panel.min.js.map +1 -1
  55. package/dist/fab-menu.js +116 -114
  56. package/dist/fab-menu.js.map +1 -1
  57. package/dist/fab-menu.min.js +1 -1
  58. package/dist/fab-menu.min.js.map +1 -1
  59. package/dist/form-field.js +9 -6
  60. package/dist/form-field.js.map +1 -1
  61. package/dist/form-field.min.js +1 -1
  62. package/dist/form-field.min.js.map +1 -1
  63. package/dist/html-custom-data.json +28 -13
  64. package/dist/icon.js +8 -9
  65. package/dist/icon.js.map +1 -1
  66. package/dist/icon.min.js +1 -1
  67. package/dist/icon.min.js.map +1 -1
  68. package/dist/menu.js +45 -25
  69. package/dist/menu.js.map +1 -1
  70. package/dist/menu.min.js +1 -1
  71. package/dist/menu.min.js.map +1 -1
  72. package/dist/nav-bar.js +2 -2
  73. package/dist/nav-bar.js.map +1 -1
  74. package/dist/nav-bar.min.js +1 -1
  75. package/dist/nav-bar.min.js.map +1 -1
  76. package/dist/nav-menu.js +2 -2
  77. package/dist/nav-menu.js.map +1 -1
  78. package/dist/nav-menu.min.js +1 -1
  79. package/dist/nav-menu.min.js.map +1 -1
  80. package/dist/nav-rail.js +1 -1
  81. package/dist/nav-rail.js.map +1 -1
  82. package/dist/nav-rail.min.js +1 -1
  83. package/dist/nav-rail.min.js.map +1 -1
  84. package/dist/radio-group.js +1 -1
  85. package/dist/radio-group.js.map +1 -1
  86. package/dist/radio-group.min.js +1 -1
  87. package/dist/radio-group.min.js.map +1 -1
  88. package/dist/search.js +31 -11
  89. package/dist/search.js.map +1 -1
  90. package/dist/search.min.js +1 -1
  91. package/dist/search.min.js.map +1 -1
  92. package/dist/skeleton.js +89 -44
  93. package/dist/skeleton.js.map +1 -1
  94. package/dist/skeleton.min.js +1 -1
  95. package/dist/skeleton.min.js.map +1 -1
  96. package/dist/slide-group.js +1 -1
  97. package/dist/slide-group.js.map +1 -1
  98. package/dist/slide-group.min.js +1 -1
  99. package/dist/slide-group.min.js.map +1 -1
  100. package/dist/slider.js +2 -2
  101. package/dist/slider.js.map +1 -1
  102. package/dist/slider.min.js +1 -1
  103. package/dist/slider.min.js.map +1 -1
  104. package/dist/snackbar.js +1 -1
  105. package/dist/snackbar.js.map +1 -1
  106. package/dist/snackbar.min.js +1 -1
  107. package/dist/snackbar.min.js.map +1 -1
  108. package/dist/split-pane.js +1 -1
  109. package/dist/split-pane.js.map +1 -1
  110. package/dist/split-pane.min.js +1 -1
  111. package/dist/split-pane.min.js.map +1 -1
  112. package/dist/src/avatar/AvatarElement.d.ts.map +1 -1
  113. package/dist/src/badge/BadgeElement.d.ts +1 -0
  114. package/dist/src/badge/BadgeElement.d.ts.map +1 -1
  115. package/dist/src/bottom-sheet/BottomSheetElement.d.ts.map +1 -1
  116. package/dist/src/calendar/CalendarElement.d.ts +2 -0
  117. package/dist/src/calendar/CalendarElement.d.ts.map +1 -1
  118. package/dist/src/calendar/CalendarViewElementBase.d.ts +2 -0
  119. package/dist/src/calendar/CalendarViewElementBase.d.ts.map +1 -1
  120. package/dist/src/calendar/MonthViewElement.d.ts +1 -0
  121. package/dist/src/calendar/MonthViewElement.d.ts.map +1 -1
  122. package/dist/src/calendar/MultiYearViewElement.d.ts.map +1 -1
  123. package/dist/src/calendar/YearViewElement.d.ts.map +1 -1
  124. package/dist/src/checkbox/CheckboxElement.d.ts.map +1 -1
  125. package/dist/src/core/anchoring/FloatingPanelElement.d.ts.map +1 -1
  126. package/dist/src/core/anchoring/positionAnchor.d.ts.map +1 -1
  127. package/dist/src/core/shared/controllers/ClickOutsideController.d.ts +24 -0
  128. package/dist/src/core/shared/controllers/ClickOutsideController.d.ts.map +1 -0
  129. package/dist/src/core/shared/controllers/FocusController.d.ts +5 -11
  130. package/dist/src/core/shared/controllers/FocusController.d.ts.map +1 -1
  131. package/dist/src/core/shared/controllers/HoverController.d.ts +2 -8
  132. package/dist/src/core/shared/controllers/HoverController.d.ts.map +1 -1
  133. package/dist/src/core/shared/controllers/IntersectionController.d.ts +2 -8
  134. package/dist/src/core/shared/controllers/IntersectionController.d.ts.map +1 -1
  135. package/dist/src/core/shared/controllers/LongPressController.d.ts +2 -8
  136. package/dist/src/core/shared/controllers/LongPressController.d.ts.map +1 -1
  137. package/dist/src/core/shared/controllers/MonitorControllerBase.d.ts +4 -0
  138. package/dist/src/core/shared/controllers/MonitorControllerBase.d.ts.map +1 -1
  139. package/dist/src/core/shared/controllers/PressedController.d.ts +6 -8
  140. package/dist/src/core/shared/controllers/PressedController.d.ts.map +1 -1
  141. package/dist/src/core/shared/controllers/ResizeController.d.ts +2 -8
  142. package/dist/src/core/shared/controllers/ResizeController.d.ts.map +1 -1
  143. package/dist/src/core/shared/controllers/index.d.ts +1 -0
  144. package/dist/src/core/shared/controllers/index.d.ts.map +1 -1
  145. package/dist/src/core/shared/mixins/AttachInternals.d.ts.map +1 -1
  146. package/dist/src/core/shared/primitives/FocusRingElement.d.ts.map +1 -1
  147. package/dist/src/core/shared/primitives/PseudoCheckboxElement.d.ts.map +1 -1
  148. package/dist/src/core/shared/primitives/PseudoRadioElement.d.ts.map +1 -1
  149. package/dist/src/core/shared/primitives/RippleElement.d.ts.map +1 -1
  150. package/dist/src/core/shared/primitives/StateLayerElement.d.ts.map +1 -1
  151. package/dist/src/datepicker/DatepickerElement.d.ts +1 -2
  152. package/dist/src/datepicker/DatepickerElement.d.ts.map +1 -1
  153. package/dist/src/dialog/DialogElement.d.ts.map +1 -1
  154. package/dist/src/divider/DividerElement.d.ts.map +1 -1
  155. package/dist/src/drawer-container/styles/DrawerContainerStyle.d.ts.map +1 -1
  156. package/dist/src/expansion-panel/ExpansionPanelElement.d.ts.map +1 -1
  157. package/dist/src/expansion-panel/styles/ExpansionHeaderStyle.d.ts.map +1 -1
  158. package/dist/src/expansion-panel/styles/ExpansionPanelStyle.d.ts.map +1 -1
  159. package/dist/src/fab-menu/FabMenuElement.d.ts.map +1 -1
  160. package/dist/src/form-field/FormFieldElement.d.ts +1 -0
  161. package/dist/src/form-field/FormFieldElement.d.ts.map +1 -1
  162. package/dist/src/menu/MenuElement.d.ts.map +1 -1
  163. package/dist/src/nav-bar/NavBarElement.d.ts.map +1 -1
  164. package/dist/src/nav-bar/NavItemElement.d.ts.map +1 -1
  165. package/dist/src/nav-menu/NavMenuElement.d.ts.map +1 -1
  166. package/dist/src/nav-menu/NavMenuItemElement.d.ts.map +1 -1
  167. package/dist/src/nav-rail/NavRailElement.d.ts.map +1 -1
  168. package/dist/src/radio-group/RadioElement.d.ts.map +1 -1
  169. package/dist/src/search/SearchViewElement.d.ts.map +1 -1
  170. package/dist/src/search/styles/SearchBarStyle.d.ts.map +1 -1
  171. package/dist/src/search/styles/SearchViewStyle.d.ts.map +1 -1
  172. package/dist/src/skeleton/SkeletonElement.d.ts +11 -1
  173. package/dist/src/skeleton/SkeletonElement.d.ts.map +1 -1
  174. package/dist/src/slide-group/SlideGroupElement.d.ts.map +1 -1
  175. package/dist/src/slider/SliderElement.d.ts.map +1 -1
  176. package/dist/src/slider/SliderThumbElement.d.ts.map +1 -1
  177. package/dist/src/snackbar/SnackbarElement.d.ts.map +1 -1
  178. package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
  179. package/dist/src/stepper/StepElement.d.ts.map +1 -1
  180. package/dist/src/stepper/StepPanelElement.d.ts.map +1 -1
  181. package/dist/src/stepper/StepperElement.d.ts.map +1 -1
  182. package/dist/src/switch/styles/SwitchStyle.d.ts.map +1 -1
  183. package/dist/src/switch/styles/SwitchTrackStyle.d.ts.map +1 -1
  184. package/dist/src/tabs/TabElement.d.ts.map +1 -1
  185. package/dist/src/tabs/TabPanelElement.d.ts.map +1 -1
  186. package/dist/src/tabs/TabsElement.d.ts.map +1 -1
  187. package/dist/src/toc/TocElement.d.ts.map +1 -1
  188. package/dist/src/toc/TocItemElement.d.ts.map +1 -1
  189. package/dist/src/tooltip/RichTooltipElement.d.ts.map +1 -1
  190. package/dist/src/tooltip/TooltipElement.d.ts +4 -0
  191. package/dist/src/tooltip/TooltipElement.d.ts.map +1 -1
  192. package/dist/src/tree/TreeElement.d.ts.map +1 -1
  193. package/dist/src/tree/TreeItemElement.d.ts.map +1 -1
  194. package/dist/stepper.js +3 -3
  195. package/dist/stepper.js.map +1 -1
  196. package/dist/stepper.min.js +1 -1
  197. package/dist/stepper.min.js.map +1 -1
  198. package/dist/switch.js +2 -2
  199. package/dist/switch.js.map +1 -1
  200. package/dist/switch.min.js +1 -1
  201. package/dist/switch.min.js.map +1 -1
  202. package/dist/tabs.js +3 -3
  203. package/dist/tabs.js.map +1 -1
  204. package/dist/tabs.min.js +1 -1
  205. package/dist/tabs.min.js.map +1 -1
  206. package/dist/toc.js +2 -2
  207. package/dist/toc.js.map +1 -1
  208. package/dist/toc.min.js +1 -1
  209. package/dist/toc.min.js.map +1 -1
  210. package/dist/tooltip.js +77 -38
  211. package/dist/tooltip.js.map +1 -1
  212. package/dist/tooltip.min.js +1 -1
  213. package/dist/tooltip.min.js.map +1 -1
  214. package/dist/tree.js +2 -2
  215. package/dist/tree.js.map +1 -1
  216. package/dist/tree.min.js +1 -1
  217. package/dist/tree.min.js.map +1 -1
  218. package/package.json +1 -1
@@ -3,5 +3,5 @@
3
3
  * Copyright (c) 2025–2026 matraic
4
4
  * See LICENSE file in the project root for full license text.
5
5
  */
6
- import{LitElement as e,html as t,nothing as o,css as r,unsafeCSS as a,isServer as n}from"lit";import{Role as i,registerStyleSheet as s,DesignToken as c,customElement as l,prefersReducedMotion as d}from"@m3e/web/core";import{__classPrivateFieldGet as m,__classPrivateFieldSet as b,__decorate as p}from"tslib";import{property as u}from"lit/decorators.js";import"@m3e/web/button";import"@m3e/web/icon-button";var v,h,g,k,f,x,y,$,w;let S=w=class extends(i(e,"status")){constructor(){super(...arguments),v.add(this),h.set(this,-1),g.set(this,!1),k.set(this,e=>m(this,v,"m",$).call(this,e)),this.duration=3e3,this.action="",this.dismissible=!1,this.closeLabel="Close"}static get current(){return w.__current}get isActionTaken(){return m(this,g,"f")}connectedCallback(){super.connectedCallback(),this.addEventListener("beforetoggle",m(this,k,"f")),this.setAttribute("popover","manual"),this.ariaLive="polite"}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("beforetoggle",m(this,k,"f"))}render(){return t`<div class="base"><span class="supporting-text"><slot></slot></span>${m(this,v,"m",f).call(this)} ${m(this,v,"m",x).call(this)}</div>`}updated(e){super.updated(e),this.style.setProperty("--_snackbar-height",this.getBoundingClientRect().height/.8+"px")}};h=new WeakMap,g=new WeakMap,k=new WeakMap,v=new WeakSet,f=function(){return this.action?t`<m3e-button @click="${m(this,v,"m",y)}">${this.action}</m3e-button>`:o},x=function(){return this.dismissible?t`<m3e-icon-button aria-label="${this.closeLabel}" @click="${this.hidePopover}"><slot name="close-icon"><svg class="close-icon" viewBox="0 -960 960 960" fill="currentColor"><path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z"/></svg></slot></m3e-icon-button>`:o},y=function(){b(this,g,!0,"f"),this.hidePopover()},$=function(e){"open"==e.newState?(w.__current?.hidePopover(),w.__current=this,this.duration>0&&b(this,h,setTimeout(()=>this.hidePopover(),this.duration),"f")):(w.__current===this&&(w.__current=null),clearTimeout(m(this,h,"f")))},s(r`m3e-snackbar { margin-inline: auto; }`),S.styles=r`:host { position: fixed; top: calc(100vh - var(--_snackbar-height, 0px) - var(--m3e-snackbar-margin, 1rem)); display: inline-flex; align-items: center; min-width: var(--m3e-snackbar-min-width, 21.5rem); max-width: var(--m3e-snackbar-max-width, 42rem); visibility: hidden; border: none; margin: 0; padding: 0; opacity: 0; transform: scaleY(0.8); transform-origin: bottom; transition: ${a(`opacity ${c.motion.duration.short3} ${c.motion.easing.standard}, \n transform ${c.motion.duration.short3} ${c.motion.easing.standard}, \n overlay ${c.motion.duration.short3} ${c.motion.easing.standard} allow-discrete,\n visibility ${c.motion.duration.short3} ${c.motion.easing.standard} allow-discrete`)}; } :host::backdrop { background-color: transparent; } :host(:popover-open) { visibility: visible; opacity: 1; transform: scaleY(1); } @starting-style { :host(:popover-open) { opacity: 0; transform: scaleY(0.8); } } .base { display: inline-flex; align-items: center; flex: 1 1 auto; box-sizing: border-box; padding: var(--m3e-snackbar-padding, 0 1rem 0 1rem); border-radius: var(--m3e-snackbar-container-shape, ${c.shape.corner.extraSmall}); background-color: var(--m3e-snackbar-container-color, ${c.color.inverseSurface}); font-size: var(--m3e-snackbar-supporting-text-font-size, ${c.typescale.standard.label.large.fontSize}); font-weight: var( --m3e-snackbar-supporting-text-font-weight, ${c.typescale.standard.label.large.fontWeight} ); line-height: var( --m3e-snackbar-supporting-text-line-height, ${c.typescale.standard.label.large.lineHeight} ); letter-spacing: var( --m3e-snackbar-supporting-text-tracking, ${c.typescale.standard.label.large.tracking} ); color: var(--m3e-snackbar-supporting-text-color, ${c.color.inverseOnSurface}); --m3e-text-button-label-text-color: var(--m3e-snackbar-action-text-color, ${c.color.inversePrimary}); --m3e-text-button-hover-label-text-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-hover-state-layer-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-focus-label-text-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-focus-state-layer-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-pressed-label-text-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-pressed-state-layer-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-standard-icon-button-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-hover-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-hover-state-layer-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-focus-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-focus-state-layer-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-pressed-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-pressed-state-layer-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); } :host([dismissible]) .base { padding-inline-end: 0.5rem; } .supporting-text { flex: 1 1 auto; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-clamp: 2; margin-block: var(--m3e-snackbar-supporting-text-margin-block, 0.875rem); } ::slotted([slot="close-icon"]), .close-icon { width: 1em; font-size: var(--m3e-icon-button-icon-size, 1.5rem) !important; } @media (forced-colors: active) { :host { background-color: Canvas; color: CanvasText; border-radius: ${c.shape.corner.small}; box-sizing: border-box; outline: 1px solid CanvasText; } }`,S.__current=null,p([u({type:Number})],S.prototype,"duration",void 0),p([u()],S.prototype,"action",void 0),p([u({type:Boolean,reflect:!0})],S.prototype,"dismissible",void 0),p([u({attribute:"close-label"})],S.prototype,"closeLabel",void 0),S=w=p([l("m3e-snackbar")],S);class P{static open(e,t,o,r){if(n)return;const a=document.createElement("m3e-snackbar");let i;a.append(document.createTextNode(e)),"string"==typeof t?a.action=t:"boolean"==typeof t?a.dismissible=t:i=t,"boolean"==typeof o?a.dismissible=o:i=o,r&&(i=r),void 0!==i?.duration&&(a.duration=i.duration),i?.closeLabel&&(a.closeLabel=i.closeLabel),a.addEventListener("toggle",e=>{"closed"===e.newState&&(d()?a.remove():a.addEventListener("transitionend",()=>a.remove(),{once:!0}),a.isActionTaken&&i?.actionCallback?.())}),(document.querySelector("m3e-theme")??document.body).append(a),a.showPopover()}static dismiss(){S.current?.hidePopover()}}globalThis.M3eSnackbar=P;export{P as M3eSnackbar,S as M3eSnackbarElement};
6
+ import{LitElement as e,html as t,nothing as o,css as r,unsafeCSS as a,isServer as n}from"lit";import{Role as i,registerStyleSheet as s,DesignToken as c,customElement as l,prefersReducedMotion as d}from"@m3e/web/core";import{__classPrivateFieldGet as m,__classPrivateFieldSet as b,__decorate as p}from"tslib";import{property as u}from"lit/decorators.js";import"@m3e/web/button";import"@m3e/web/icon-button";var v,h,g,k,f,x,y,$,w;let S=w=class extends(i(e,"status")){constructor(){super(...arguments),v.add(this),h.set(this,-1),g.set(this,!1),k.set(this,e=>m(this,v,"m",$).call(this,e)),this.duration=3e3,this.action="",this.dismissible=!1,this.closeLabel="Close"}static get current(){return w.__current}get isActionTaken(){return m(this,g,"f")}connectedCallback(){super.connectedCallback(),this.addEventListener("beforetoggle",m(this,k,"f")),this.setAttribute("popover","manual"),this.ariaLive="polite"}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("beforetoggle",m(this,k,"f"))}render(){return t`<div class="base"><span class="supporting-text"><slot></slot></span>${m(this,v,"m",f).call(this)} ${m(this,v,"m",x).call(this)}</div>`}updated(e){super.updated(e),this.style.setProperty("--_snackbar-height",this.getBoundingClientRect().height/.8+"px")}};h=new WeakMap,g=new WeakMap,k=new WeakMap,v=new WeakSet,f=function(){return this.action?t`<m3e-button @click="${m(this,v,"m",y)}">${this.action}</m3e-button>`:o},x=function(){return this.dismissible?t`<m3e-icon-button aria-label="${this.closeLabel}" @click="${this.hidePopover}"><slot name="close-icon"><svg class="close-icon" viewBox="0 -960 960 960" fill="currentColor"><path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z"/></svg></slot></m3e-icon-button>`:o},y=function(){b(this,g,!0,"f"),this.hidePopover()},$=function(e){"open"==e.newState?(w.__current?.hidePopover(),w.__current=this,this.duration>0&&b(this,h,setTimeout(()=>this.hidePopover(),this.duration),"f")):(w.__current===this&&(w.__current=null),clearTimeout(m(this,h,"f")))},s(r`m3e-snackbar { margin-inline: auto; }`),S.styles=r`:host { contain: layout style paint; position: fixed; top: calc(100vh - var(--_snackbar-height, 0px) - var(--m3e-snackbar-margin, 1rem)); display: inline-flex; align-items: center; min-width: var(--m3e-snackbar-min-width, 21.5rem); max-width: var(--m3e-snackbar-max-width, 42rem); visibility: hidden; border: none; margin: 0; padding: 0; opacity: 0; transform: scaleY(0.8); transform-origin: bottom; transition: ${a(`opacity ${c.motion.duration.short3} ${c.motion.easing.standard}, \n transform ${c.motion.duration.short3} ${c.motion.easing.standard}, \n overlay ${c.motion.duration.short3} ${c.motion.easing.standard} allow-discrete,\n visibility ${c.motion.duration.short3} ${c.motion.easing.standard} allow-discrete`)}; } :host::backdrop { background-color: transparent; } :host(:popover-open) { visibility: visible; opacity: 1; transform: scaleY(1); } @starting-style { :host(:popover-open) { opacity: 0; transform: scaleY(0.8); } } .base { display: inline-flex; align-items: center; flex: 1 1 auto; box-sizing: border-box; padding: var(--m3e-snackbar-padding, 0 1rem 0 1rem); border-radius: var(--m3e-snackbar-container-shape, ${c.shape.corner.extraSmall}); background-color: var(--m3e-snackbar-container-color, ${c.color.inverseSurface}); font-size: var(--m3e-snackbar-supporting-text-font-size, ${c.typescale.standard.label.large.fontSize}); font-weight: var( --m3e-snackbar-supporting-text-font-weight, ${c.typescale.standard.label.large.fontWeight} ); line-height: var( --m3e-snackbar-supporting-text-line-height, ${c.typescale.standard.label.large.lineHeight} ); letter-spacing: var( --m3e-snackbar-supporting-text-tracking, ${c.typescale.standard.label.large.tracking} ); color: var(--m3e-snackbar-supporting-text-color, ${c.color.inverseOnSurface}); --m3e-text-button-label-text-color: var(--m3e-snackbar-action-text-color, ${c.color.inversePrimary}); --m3e-text-button-hover-label-text-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-hover-state-layer-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-focus-label-text-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-focus-state-layer-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-pressed-label-text-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-text-button-pressed-state-layer-color: var( --m3e-snackbar-action-text-color, ${c.color.inversePrimary} ); --m3e-standard-icon-button-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-hover-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-hover-state-layer-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-focus-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-focus-state-layer-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-pressed-icon-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); --m3e-standard-icon-button-pressed-state-layer-color: var( --m3e-snackbar-close-icon-color, ${c.color.inverseOnSurface} ); } :host([dismissible]) .base { padding-inline-end: 0.5rem; } .supporting-text { flex: 1 1 auto; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; line-clamp: 2; margin-block: var(--m3e-snackbar-supporting-text-margin-block, 0.875rem); } ::slotted([slot="close-icon"]), .close-icon { width: 1em; font-size: var(--m3e-icon-button-icon-size, 1.5rem) !important; } @media (forced-colors: active) { :host { background-color: Canvas; color: CanvasText; border-radius: ${c.shape.corner.small}; box-sizing: border-box; outline: 1px solid CanvasText; } }`,S.__current=null,p([u({type:Number})],S.prototype,"duration",void 0),p([u()],S.prototype,"action",void 0),p([u({type:Boolean,reflect:!0})],S.prototype,"dismissible",void 0),p([u({attribute:"close-label"})],S.prototype,"closeLabel",void 0),S=w=p([l("m3e-snackbar")],S);class P{static open(e,t,o,r){if(n)return;const a=document.createElement("m3e-snackbar");let i;a.append(document.createTextNode(e)),"string"==typeof t?a.action=t:"boolean"==typeof t?a.dismissible=t:i=t,"boolean"==typeof o?a.dismissible=o:i=o,r&&(i=r),void 0!==i?.duration&&(a.duration=i.duration),i?.closeLabel&&(a.closeLabel=i.closeLabel),a.addEventListener("toggle",e=>{"closed"===e.newState&&(d()?a.remove():a.addEventListener("transitionend",()=>a.remove(),{once:!0}),a.isActionTaken&&i?.actionCallback?.())}),(document.querySelector("m3e-theme")??document.body).append(a),a.showPopover()}static dismiss(){S.current?.hidePopover()}}globalThis.M3eSnackbar=P;export{P as M3eSnackbar,S as M3eSnackbarElement};
7
7
  //# sourceMappingURL=snackbar.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snackbar.min.js","sources":["../../src/snackbar/SnackbarElement.ts","../../src/snackbar/Snackbar.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\n\r\nimport { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { customElement, DesignToken, registerStyleSheet, Role } from \"@m3e/web/core\";\r\n\r\nimport \"@m3e/web/button\";\r\nimport \"@m3e/web/icon-button\";\r\n\r\n/**\r\n * Presents short updates about application processes at the bottom of the screen.\r\n * @tag m3e-snackbar\r\n *\r\n * @slot - Renders the content of the snackbar.\r\n * @slot close-icon - Renders the icon of the button used to close the snackbar.\r\n *\r\n * @attr action - The label of the snackbar's action.\r\n * @attr close-label - The accessible label given to the button used to dismiss the snackbar.\r\n * @attr dismissible - Whether a button is presented that can be used to close the snackbar.\r\n * @attr duration - The length of time, in milliseconds, to wait before automatically dismissing the snackbar.\r\n *\r\n * @fires beforetoggle - Dispatched before the toggle state changes.\r\n * @fires toggle - Dispatched after the toggle state has changed.\r\n *\r\n * @cssprop --m3e-snackbar-margin - Vertical offset from the bottom of the viewport.\r\n * @cssprop --m3e-snackbar-container-shape - Border radius of the snackbar container.\r\n * @cssprop --m3e-snackbar-container-color - Background color of the snackbar.\r\n * @cssprop --m3e-snackbar-padding - Internal spacing of the snackbar container.\r\n * @cssprop --m3e-snackbar-min-width - Minimum width of the snackbar.\r\n * @cssprop --m3e-snackbar-max-width - Maximum width of the snackbar.\r\n */\r\n@customElement(\"m3e-snackbar\")\r\nexport class M3eSnackbarElement extends Role(LitElement, \"status\") {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-snackbar {\r\n margin-inline: auto;\r\n }\r\n `);\r\n }\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n position: fixed;\r\n top: calc(100vh - var(--_snackbar-height, 0px) - var(--m3e-snackbar-margin, 1rem));\r\n display: inline-flex;\r\n align-items: center;\r\n min-width: var(--m3e-snackbar-min-width, 21.5rem);\r\n max-width: var(--m3e-snackbar-max-width, 42rem);\r\n visibility: hidden;\r\n border: none;\r\n margin: 0;\r\n padding: 0;\r\n opacity: 0;\r\n transform: scaleY(0.8);\r\n transform-origin: bottom;\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard}, \r\n transform ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard}, \r\n overlay ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete,\r\n visibility ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n :host::backdrop {\r\n background-color: transparent;\r\n }\r\n :host(:popover-open) {\r\n visibility: visible;\r\n opacity: 1;\r\n transform: scaleY(1);\r\n }\r\n @starting-style {\r\n :host(:popover-open) {\r\n opacity: 0;\r\n transform: scaleY(0.8);\r\n }\r\n }\r\n .base {\r\n display: inline-flex;\r\n align-items: center;\r\n flex: 1 1 auto;\r\n box-sizing: border-box;\r\n padding: var(--m3e-snackbar-padding, 0 1rem 0 1rem);\r\n border-radius: var(--m3e-snackbar-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n background-color: var(--m3e-snackbar-container-color, ${DesignToken.color.inverseSurface});\r\n font-size: var(--m3e-snackbar-supporting-text-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(\r\n --m3e-snackbar-supporting-text-font-weight,\r\n ${DesignToken.typescale.standard.label.large.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-snackbar-supporting-text-line-height,\r\n ${DesignToken.typescale.standard.label.large.lineHeight}\r\n );\r\n letter-spacing: var(\r\n --m3e-snackbar-supporting-text-tracking,\r\n ${DesignToken.typescale.standard.label.large.tracking}\r\n );\r\n color: var(--m3e-snackbar-supporting-text-color, ${DesignToken.color.inverseOnSurface});\r\n\r\n --m3e-text-button-label-text-color: var(--m3e-snackbar-action-text-color, ${DesignToken.color.inversePrimary});\r\n --m3e-text-button-hover-label-text-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-hover-state-layer-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-focus-label-text-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-focus-state-layer-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-pressed-label-text-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-pressed-state-layer-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-standard-icon-button-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-hover-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-hover-state-layer-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-focus-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-focus-state-layer-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-pressed-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-pressed-state-layer-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n }\r\n :host([dismissible]) .base {\r\n padding-inline-end: 0.5rem;\r\n }\r\n .supporting-text {\r\n flex: 1 1 auto;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n line-clamp: 2;\r\n margin-block: var(--m3e-snackbar-supporting-text-margin-block, 0.875rem);\r\n }\r\n ::slotted([slot=\"close-icon\"]),\r\n .close-icon {\r\n width: 1em;\r\n font-size: var(--m3e-icon-button-icon-size, 1.5rem) !important;\r\n }\r\n @media (forced-colors: active) {\r\n :host {\r\n background-color: Canvas;\r\n color: CanvasText;\r\n border-radius: ${DesignToken.shape.corner.small};\r\n box-sizing: border-box;\r\n outline: 1px solid CanvasText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ static __current: M3eSnackbarElement | null = null;\r\n\r\n /** @private */ #timeoutId = -1;\r\n /** @private */ #actionTaken = false;\r\n /** @private */ readonly #beforeToggleHandler = (e: ToggleEvent) => this.#handleBeforeToggle(e);\r\n\r\n /** The currently open snackbar. */\r\n static get current(): M3eSnackbarElement | null {\r\n return M3eSnackbarElement.__current;\r\n }\r\n\r\n /**\r\n * The length of time, in milliseconds, to wait before automatically dismissing the snackbar.\r\n * @default 3000\r\n */\r\n @property({ type: Number }) duration = 3000;\r\n\r\n /**\r\n * The label of the snackbar's action.\r\n * @default \"\"\r\n */\r\n @property() action = \"\";\r\n\r\n /**\r\n * Whether a button is presented that can be used to close the snackbar.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) dismissible = false;\r\n\r\n /**\r\n * The accessible label given to the button used to dismiss the snackbar.\r\n * @default \"Close\"\r\n */\r\n @property({ attribute: \"close-label\" }) closeLabel = \"Close\";\r\n\r\n /** Whether the user clicked the action. */\r\n get isActionTaken(): boolean {\r\n return this.#actionTaken;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.addEventListener(\"beforetoggle\", this.#beforeToggleHandler);\r\n this.setAttribute(\"popover\", \"manual\");\r\n this.ariaLive = \"polite\";\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"beforetoggle\", this.#beforeToggleHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render() {\r\n return html`<div class=\"base\">\r\n <span class=\"supporting-text\"><slot></slot></span>\r\n ${this.#renderActionButton()} ${this.#renderCloseButton()}\r\n </div>`;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues): void {\r\n super.updated(_changedProperties);\r\n\r\n // After render, compute the (unscaled) height of the snackbar in order\r\n // to properly position it relative to the viewport.\r\n // top: calc(100vh - var(--_snackbar-height, 0px) - var(--m3e-snackbar-margin, 1rem));\r\n\r\n this.style.setProperty(\"--_snackbar-height\", `${this.getBoundingClientRect().height / 0.8}px`);\r\n }\r\n\r\n /** @private */\r\n #renderActionButton(): unknown {\r\n return !this.action ? nothing : html`<m3e-button @click=\"${this.#handleActionClick}\">${this.action}</m3e-button>`;\r\n }\r\n\r\n /** @private */\r\n #renderCloseButton(): unknown {\r\n return !this.dismissible\r\n ? nothing\r\n : html`<m3e-icon-button aria-label=\"${this.closeLabel}\" @click=\"${this.hidePopover}\">\r\n <slot name=\"close-icon\">\r\n <svg class=\"close-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path\r\n d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"\r\n />\r\n </svg>\r\n </slot>\r\n </m3e-icon-button>`;\r\n }\r\n\r\n /** @private */\r\n #handleActionClick(): void {\r\n this.#actionTaken = true;\r\n this.hidePopover();\r\n }\r\n\r\n /** @private */\r\n #handleBeforeToggle(e: ToggleEvent): void {\r\n if (e.newState == \"open\") {\r\n M3eSnackbarElement.__current?.hidePopover();\r\n M3eSnackbarElement.__current = this;\r\n\r\n if (this.duration > 0) {\r\n this.#timeoutId = setTimeout(() => this.hidePopover(), this.duration);\r\n }\r\n } else {\r\n if (M3eSnackbarElement.__current === this) {\r\n M3eSnackbarElement.__current = null;\r\n }\r\n\r\n clearTimeout(this.#timeoutId);\r\n }\r\n }\r\n}\r\n\r\ninterface M3eSnackbarElementEventMap extends HTMLElementEventMap {\r\n beforetoggle: ToggleEvent;\r\n toggle: ToggleEvent;\r\n}\r\n\r\nexport interface M3eSnackbarElement {\r\n addEventListener<K extends keyof M3eSnackbarElementEventMap>(\r\n type: K,\r\n listener: (this: M3eSnackbarElement, ev: M3eSnackbarElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eSnackbarElementEventMap>(\r\n type: K,\r\n listener: (this: M3eSnackbarElement, ev: M3eSnackbarElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-snackbar\": M3eSnackbarElement;\r\n }\r\n}\r\n","import { isServer } from \"lit\";\r\n\r\nimport { prefersReducedMotion } from \"@m3e/web/core\";\r\n\r\nimport { M3eSnackbarElement } from \"./SnackbarElement\";\r\n\r\n/** Encapsulates options used to present a snackbar message. */\r\nexport interface SnackbarOptions {\r\n /** The length of time, in milliseconds, to wait before automatically dismissing the snackbar. */\r\n duration?: number;\r\n\r\n /** The accessible label given to the close button used to dismiss the snackbar. */\r\n closeLabel?: string;\r\n\r\n /** The callback function invoked when the action is clicked. */\r\n actionCallback?: () => void;\r\n}\r\n\r\n/**\r\n * Presents short updates about application processes at the bottom of the screen from anywhere in an application.\r\n * @example\r\n * The following example illustrates basic usage.\r\n * ```js\r\n * M3eSnackbar.open(\"File deleted\");\r\n * ```\r\n * @example\r\n * The next example illustrates presenting a snackbar with an action and callback.\r\n * ```js\r\n * M3eSnackbar.open(\"File deleted\", \"Undo\", {\r\n * actionCallback: () => {\r\n * // Undo logic here\r\n * },\r\n * });\r\n */\r\nexport class M3eSnackbar {\r\n /**\r\n * Opens a snackbar with a message.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, options?: SnackbarOptions): void;\r\n\r\n /**\r\n * Opens a snackbar with a message and action.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {string} action The label for the snackbar action.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, action: string, options?: SnackbarOptions): void;\r\n\r\n /**\r\n * Opens a snackbar with a message, action and optional close affordance.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {string} action The label for the snackbar action.\r\n * @param {boolean} dismissible Whether to present close affordance.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, action: string, dismissible: boolean, options?: SnackbarOptions): void;\r\n\r\n /**\r\n * Opens a snackbar with a message and optional close affordance.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {boolean} dismissible Whether to present close affordance.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, dismissible: boolean, options?: SnackbarOptions): void;\r\n\r\n static open(\r\n message: string,\r\n actionOrDismissibleOrOptions?: string | boolean | SnackbarOptions,\r\n dismissibleOrOptions?: boolean | SnackbarOptions,\r\n options?: SnackbarOptions,\r\n ): void {\r\n if (isServer) return;\r\n\r\n const snackbar = document.createElement(\"m3e-snackbar\");\r\n snackbar.append(document.createTextNode(message));\r\n\r\n let actualOptions: SnackbarOptions | undefined = undefined;\r\n\r\n if (typeof actionOrDismissibleOrOptions == \"string\") {\r\n snackbar.action = actionOrDismissibleOrOptions;\r\n } else if (typeof actionOrDismissibleOrOptions == \"boolean\") {\r\n snackbar.dismissible = actionOrDismissibleOrOptions;\r\n } else {\r\n actualOptions = actionOrDismissibleOrOptions;\r\n }\r\n\r\n if (typeof dismissibleOrOptions == \"boolean\") {\r\n snackbar.dismissible = dismissibleOrOptions;\r\n } else {\r\n actualOptions = dismissibleOrOptions;\r\n }\r\n\r\n if (options) {\r\n actualOptions = options;\r\n }\r\n\r\n if (actualOptions?.duration !== undefined) {\r\n snackbar.duration = actualOptions.duration;\r\n }\r\n if (actualOptions?.closeLabel) {\r\n snackbar.closeLabel = actualOptions.closeLabel;\r\n }\r\n\r\n snackbar.addEventListener(\"toggle\", (e) => {\r\n if (e.newState === \"closed\") {\r\n if (prefersReducedMotion()) {\r\n snackbar.remove();\r\n } else {\r\n snackbar.addEventListener(\"transitionend\", () => snackbar.remove(), { once: true });\r\n }\r\n\r\n if (snackbar.isActionTaken) {\r\n actualOptions?.actionCallback?.();\r\n }\r\n }\r\n });\r\n\r\n (document.querySelector(\"m3e-theme\") ?? document.body).append(snackbar);\r\n snackbar.showPopover();\r\n }\r\n\r\n /** Dismisses the currently visible snackbar. */\r\n static dismiss(): void {\r\n M3eSnackbarElement.current?.hidePopover();\r\n }\r\n}\r\n\r\n// This is the class type, as opposed to an instance of the class.\r\ntype M3eSnackbarClass = typeof M3eSnackbar;\r\n\r\ndeclare global {\r\n /** Presents short updates about application processes at the bottom of the screen from anywhere in an application. */\r\n var M3eSnackbar: M3eSnackbarClass;\r\n}\r\n\r\nglobalThis.M3eSnackbar = M3eSnackbar;\r\n"],"names":["M3eSnackbarElement","M3eSnackbarElement_1","Role","LitElement","constructor","_M3eSnackbarElement_timeoutId","set","this","_M3eSnackbarElement_actionTaken","_M3eSnackbarElement_beforeToggleHandler","e","__classPrivateFieldGet","call","duration","action","dismissible","closeLabel","current","__current","isActionTaken","connectedCallback","super","addEventListener","setAttribute","ariaLive","disconnectedCallback","removeEventListener","render","html","_M3eSnackbarElement_instances","_M3eSnackbarElement_renderActionButton","_M3eSnackbarElement_renderCloseButton","updated","_changedProperties","style","setProperty","getBoundingClientRect","height","_M3eSnackbarElement_handleActionClick","nothing","hidePopover","__classPrivateFieldSet","newState","setTimeout","clearTimeout","registerStyleSheet","css","styles","unsafeCSS","DesignToken","motion","short3","easing","standard","shape","corner","extraSmall","color","inverseSurface","typescale","label","large","fontSize","fontWeight","lineHeight","tracking","inverseOnSurface","inversePrimary","small","__decorate","property","type","Number","prototype","Boolean","reflect","attribute","customElement","M3eSnackbar","open","message","actionOrDismissibleOrOptions","dismissibleOrOptions","options","isServer","snackbar","document","createElement","actualOptions","append","createTextNode","undefined","prefersReducedMotion","remove","once","actionCallback","querySelector","body","showPopover","dismiss","globalThis"],"mappings":"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"}
1
+ {"version":3,"file":"snackbar.min.js","sources":["../../src/snackbar/SnackbarElement.ts","../../src/snackbar/Snackbar.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */\r\n\r\nimport { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property } from \"lit/decorators.js\";\r\n\r\nimport { customElement, DesignToken, registerStyleSheet, Role } from \"@m3e/web/core\";\r\n\r\nimport \"@m3e/web/button\";\r\nimport \"@m3e/web/icon-button\";\r\n\r\n/**\r\n * Presents short updates about application processes at the bottom of the screen.\r\n * @tag m3e-snackbar\r\n *\r\n * @slot - Renders the content of the snackbar.\r\n * @slot close-icon - Renders the icon of the button used to close the snackbar.\r\n *\r\n * @attr action - The label of the snackbar's action.\r\n * @attr close-label - The accessible label given to the button used to dismiss the snackbar.\r\n * @attr dismissible - Whether a button is presented that can be used to close the snackbar.\r\n * @attr duration - The length of time, in milliseconds, to wait before automatically dismissing the snackbar.\r\n *\r\n * @fires beforetoggle - Dispatched before the toggle state changes.\r\n * @fires toggle - Dispatched after the toggle state has changed.\r\n *\r\n * @cssprop --m3e-snackbar-margin - Vertical offset from the bottom of the viewport.\r\n * @cssprop --m3e-snackbar-container-shape - Border radius of the snackbar container.\r\n * @cssprop --m3e-snackbar-container-color - Background color of the snackbar.\r\n * @cssprop --m3e-snackbar-padding - Internal spacing of the snackbar container.\r\n * @cssprop --m3e-snackbar-min-width - Minimum width of the snackbar.\r\n * @cssprop --m3e-snackbar-max-width - Maximum width of the snackbar.\r\n */\r\n@customElement(\"m3e-snackbar\")\r\nexport class M3eSnackbarElement extends Role(LitElement, \"status\") {\r\n static {\r\n registerStyleSheet(css`\r\n m3e-snackbar {\r\n margin-inline: auto;\r\n }\r\n `);\r\n }\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n contain: layout style paint;\r\n position: fixed;\r\n top: calc(100vh - var(--_snackbar-height, 0px) - var(--m3e-snackbar-margin, 1rem));\r\n display: inline-flex;\r\n align-items: center;\r\n min-width: var(--m3e-snackbar-min-width, 21.5rem);\r\n max-width: var(--m3e-snackbar-max-width, 42rem);\r\n visibility: hidden;\r\n border: none;\r\n margin: 0;\r\n padding: 0;\r\n opacity: 0;\r\n transform: scaleY(0.8);\r\n transform-origin: bottom;\r\n transition: ${unsafeCSS(\r\n `opacity ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard}, \r\n transform ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard}, \r\n overlay ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete,\r\n visibility ${DesignToken.motion.duration.short3} ${DesignToken.motion.easing.standard} allow-discrete`,\r\n )};\r\n }\r\n :host::backdrop {\r\n background-color: transparent;\r\n }\r\n :host(:popover-open) {\r\n visibility: visible;\r\n opacity: 1;\r\n transform: scaleY(1);\r\n }\r\n @starting-style {\r\n :host(:popover-open) {\r\n opacity: 0;\r\n transform: scaleY(0.8);\r\n }\r\n }\r\n .base {\r\n display: inline-flex;\r\n align-items: center;\r\n flex: 1 1 auto;\r\n box-sizing: border-box;\r\n padding: var(--m3e-snackbar-padding, 0 1rem 0 1rem);\r\n border-radius: var(--m3e-snackbar-container-shape, ${DesignToken.shape.corner.extraSmall});\r\n background-color: var(--m3e-snackbar-container-color, ${DesignToken.color.inverseSurface});\r\n font-size: var(--m3e-snackbar-supporting-text-font-size, ${DesignToken.typescale.standard.label.large.fontSize});\r\n font-weight: var(\r\n --m3e-snackbar-supporting-text-font-weight,\r\n ${DesignToken.typescale.standard.label.large.fontWeight}\r\n );\r\n line-height: var(\r\n --m3e-snackbar-supporting-text-line-height,\r\n ${DesignToken.typescale.standard.label.large.lineHeight}\r\n );\r\n letter-spacing: var(\r\n --m3e-snackbar-supporting-text-tracking,\r\n ${DesignToken.typescale.standard.label.large.tracking}\r\n );\r\n color: var(--m3e-snackbar-supporting-text-color, ${DesignToken.color.inverseOnSurface});\r\n\r\n --m3e-text-button-label-text-color: var(--m3e-snackbar-action-text-color, ${DesignToken.color.inversePrimary});\r\n --m3e-text-button-hover-label-text-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-hover-state-layer-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-focus-label-text-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-focus-state-layer-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-pressed-label-text-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-text-button-pressed-state-layer-color: var(\r\n --m3e-snackbar-action-text-color,\r\n ${DesignToken.color.inversePrimary}\r\n );\r\n --m3e-standard-icon-button-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-hover-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-hover-state-layer-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-focus-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-focus-state-layer-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-pressed-icon-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n --m3e-standard-icon-button-pressed-state-layer-color: var(\r\n --m3e-snackbar-close-icon-color,\r\n ${DesignToken.color.inverseOnSurface}\r\n );\r\n }\r\n :host([dismissible]) .base {\r\n padding-inline-end: 0.5rem;\r\n }\r\n .supporting-text {\r\n flex: 1 1 auto;\r\n display: -webkit-box;\r\n -webkit-line-clamp: 2;\r\n -webkit-box-orient: vertical;\r\n overflow: hidden;\r\n line-clamp: 2;\r\n margin-block: var(--m3e-snackbar-supporting-text-margin-block, 0.875rem);\r\n }\r\n ::slotted([slot=\"close-icon\"]),\r\n .close-icon {\r\n width: 1em;\r\n font-size: var(--m3e-icon-button-icon-size, 1.5rem) !important;\r\n }\r\n @media (forced-colors: active) {\r\n :host {\r\n background-color: Canvas;\r\n color: CanvasText;\r\n border-radius: ${DesignToken.shape.corner.small};\r\n box-sizing: border-box;\r\n outline: 1px solid CanvasText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ static __current: M3eSnackbarElement | null = null;\r\n\r\n /** @private */ #timeoutId = -1;\r\n /** @private */ #actionTaken = false;\r\n /** @private */ readonly #beforeToggleHandler = (e: ToggleEvent) => this.#handleBeforeToggle(e);\r\n\r\n /** The currently open snackbar. */\r\n static get current(): M3eSnackbarElement | null {\r\n return M3eSnackbarElement.__current;\r\n }\r\n\r\n /**\r\n * The length of time, in milliseconds, to wait before automatically dismissing the snackbar.\r\n * @default 3000\r\n */\r\n @property({ type: Number }) duration = 3000;\r\n\r\n /**\r\n * The label of the snackbar's action.\r\n * @default \"\"\r\n */\r\n @property() action = \"\";\r\n\r\n /**\r\n * Whether a button is presented that can be used to close the snackbar.\r\n * @default false\r\n */\r\n @property({ type: Boolean, reflect: true }) dismissible = false;\r\n\r\n /**\r\n * The accessible label given to the button used to dismiss the snackbar.\r\n * @default \"Close\"\r\n */\r\n @property({ attribute: \"close-label\" }) closeLabel = \"Close\";\r\n\r\n /** Whether the user clicked the action. */\r\n get isActionTaken(): boolean {\r\n return this.#actionTaken;\r\n }\r\n\r\n /** @inheritdoc */\r\n override connectedCallback(): void {\r\n super.connectedCallback();\r\n\r\n this.addEventListener(\"beforetoggle\", this.#beforeToggleHandler);\r\n this.setAttribute(\"popover\", \"manual\");\r\n this.ariaLive = \"polite\";\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.removeEventListener(\"beforetoggle\", this.#beforeToggleHandler);\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render() {\r\n return html`<div class=\"base\">\r\n <span class=\"supporting-text\"><slot></slot></span>\r\n ${this.#renderActionButton()} ${this.#renderCloseButton()}\r\n </div>`;\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues): void {\r\n super.updated(_changedProperties);\r\n\r\n // After render, compute the (unscaled) height of the snackbar in order\r\n // to properly position it relative to the viewport.\r\n // top: calc(100vh - var(--_snackbar-height, 0px) - var(--m3e-snackbar-margin, 1rem));\r\n\r\n this.style.setProperty(\"--_snackbar-height\", `${this.getBoundingClientRect().height / 0.8}px`);\r\n }\r\n\r\n /** @private */\r\n #renderActionButton(): unknown {\r\n return !this.action ? nothing : html`<m3e-button @click=\"${this.#handleActionClick}\">${this.action}</m3e-button>`;\r\n }\r\n\r\n /** @private */\r\n #renderCloseButton(): unknown {\r\n return !this.dismissible\r\n ? nothing\r\n : html`<m3e-icon-button aria-label=\"${this.closeLabel}\" @click=\"${this.hidePopover}\">\r\n <slot name=\"close-icon\">\r\n <svg class=\"close-icon\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">\r\n <path\r\n d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"\r\n />\r\n </svg>\r\n </slot>\r\n </m3e-icon-button>`;\r\n }\r\n\r\n /** @private */\r\n #handleActionClick(): void {\r\n this.#actionTaken = true;\r\n this.hidePopover();\r\n }\r\n\r\n /** @private */\r\n #handleBeforeToggle(e: ToggleEvent): void {\r\n if (e.newState == \"open\") {\r\n M3eSnackbarElement.__current?.hidePopover();\r\n M3eSnackbarElement.__current = this;\r\n\r\n if (this.duration > 0) {\r\n this.#timeoutId = setTimeout(() => this.hidePopover(), this.duration);\r\n }\r\n } else {\r\n if (M3eSnackbarElement.__current === this) {\r\n M3eSnackbarElement.__current = null;\r\n }\r\n\r\n clearTimeout(this.#timeoutId);\r\n }\r\n }\r\n}\r\n\r\ninterface M3eSnackbarElementEventMap extends HTMLElementEventMap {\r\n beforetoggle: ToggleEvent;\r\n toggle: ToggleEvent;\r\n}\r\n\r\nexport interface M3eSnackbarElement {\r\n addEventListener<K extends keyof M3eSnackbarElementEventMap>(\r\n type: K,\r\n listener: (this: M3eSnackbarElement, ev: M3eSnackbarElementEventMap[K]) => void,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n addEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | AddEventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener<K extends keyof M3eSnackbarElementEventMap>(\r\n type: K,\r\n listener: (this: M3eSnackbarElement, ev: M3eSnackbarElementEventMap[K]) => void,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n\r\n removeEventListener(\r\n type: string,\r\n listener: EventListenerOrEventListenerObject,\r\n options?: boolean | EventListenerOptions,\r\n ): void;\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-snackbar\": M3eSnackbarElement;\r\n }\r\n}\r\n","import { isServer } from \"lit\";\r\n\r\nimport { prefersReducedMotion } from \"@m3e/web/core\";\r\n\r\nimport { M3eSnackbarElement } from \"./SnackbarElement\";\r\n\r\n/** Encapsulates options used to present a snackbar message. */\r\nexport interface SnackbarOptions {\r\n /** The length of time, in milliseconds, to wait before automatically dismissing the snackbar. */\r\n duration?: number;\r\n\r\n /** The accessible label given to the close button used to dismiss the snackbar. */\r\n closeLabel?: string;\r\n\r\n /** The callback function invoked when the action is clicked. */\r\n actionCallback?: () => void;\r\n}\r\n\r\n/**\r\n * Presents short updates about application processes at the bottom of the screen from anywhere in an application.\r\n * @example\r\n * The following example illustrates basic usage.\r\n * ```js\r\n * M3eSnackbar.open(\"File deleted\");\r\n * ```\r\n * @example\r\n * The next example illustrates presenting a snackbar with an action and callback.\r\n * ```js\r\n * M3eSnackbar.open(\"File deleted\", \"Undo\", {\r\n * actionCallback: () => {\r\n * // Undo logic here\r\n * },\r\n * });\r\n */\r\nexport class M3eSnackbar {\r\n /**\r\n * Opens a snackbar with a message.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, options?: SnackbarOptions): void;\r\n\r\n /**\r\n * Opens a snackbar with a message and action.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {string} action The label for the snackbar action.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, action: string, options?: SnackbarOptions): void;\r\n\r\n /**\r\n * Opens a snackbar with a message, action and optional close affordance.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {string} action The label for the snackbar action.\r\n * @param {boolean} dismissible Whether to present close affordance.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, action: string, dismissible: boolean, options?: SnackbarOptions): void;\r\n\r\n /**\r\n * Opens a snackbar with a message and optional close affordance.\r\n * @param {string} message The message to show in the snackbar.\r\n * @param {boolean} dismissible Whether to present close affordance.\r\n * @param {SnackbarOptions | undefined} options Options that control the behavior of the snackbar.\r\n */\r\n static open(message: string, dismissible: boolean, options?: SnackbarOptions): void;\r\n\r\n static open(\r\n message: string,\r\n actionOrDismissibleOrOptions?: string | boolean | SnackbarOptions,\r\n dismissibleOrOptions?: boolean | SnackbarOptions,\r\n options?: SnackbarOptions,\r\n ): void {\r\n if (isServer) return;\r\n\r\n const snackbar = document.createElement(\"m3e-snackbar\");\r\n snackbar.append(document.createTextNode(message));\r\n\r\n let actualOptions: SnackbarOptions | undefined = undefined;\r\n\r\n if (typeof actionOrDismissibleOrOptions == \"string\") {\r\n snackbar.action = actionOrDismissibleOrOptions;\r\n } else if (typeof actionOrDismissibleOrOptions == \"boolean\") {\r\n snackbar.dismissible = actionOrDismissibleOrOptions;\r\n } else {\r\n actualOptions = actionOrDismissibleOrOptions;\r\n }\r\n\r\n if (typeof dismissibleOrOptions == \"boolean\") {\r\n snackbar.dismissible = dismissibleOrOptions;\r\n } else {\r\n actualOptions = dismissibleOrOptions;\r\n }\r\n\r\n if (options) {\r\n actualOptions = options;\r\n }\r\n\r\n if (actualOptions?.duration !== undefined) {\r\n snackbar.duration = actualOptions.duration;\r\n }\r\n if (actualOptions?.closeLabel) {\r\n snackbar.closeLabel = actualOptions.closeLabel;\r\n }\r\n\r\n snackbar.addEventListener(\"toggle\", (e) => {\r\n if (e.newState === \"closed\") {\r\n if (prefersReducedMotion()) {\r\n snackbar.remove();\r\n } else {\r\n snackbar.addEventListener(\"transitionend\", () => snackbar.remove(), { once: true });\r\n }\r\n\r\n if (snackbar.isActionTaken) {\r\n actualOptions?.actionCallback?.();\r\n }\r\n }\r\n });\r\n\r\n (document.querySelector(\"m3e-theme\") ?? document.body).append(snackbar);\r\n snackbar.showPopover();\r\n }\r\n\r\n /** Dismisses the currently visible snackbar. */\r\n static dismiss(): void {\r\n M3eSnackbarElement.current?.hidePopover();\r\n }\r\n}\r\n\r\n// This is the class type, as opposed to an instance of the class.\r\ntype M3eSnackbarClass = typeof M3eSnackbar;\r\n\r\ndeclare global {\r\n /** Presents short updates about application processes at the bottom of the screen from anywhere in an application. */\r\n var M3eSnackbar: M3eSnackbarClass;\r\n}\r\n\r\nglobalThis.M3eSnackbar = M3eSnackbar;\r\n"],"names":["M3eSnackbarElement","M3eSnackbarElement_1","Role","LitElement","constructor","_M3eSnackbarElement_timeoutId","set","this","_M3eSnackbarElement_actionTaken","_M3eSnackbarElement_beforeToggleHandler","e","__classPrivateFieldGet","call","duration","action","dismissible","closeLabel","current","__current","isActionTaken","connectedCallback","super","addEventListener","setAttribute","ariaLive","disconnectedCallback","removeEventListener","render","html","_M3eSnackbarElement_instances","_M3eSnackbarElement_renderActionButton","_M3eSnackbarElement_renderCloseButton","updated","_changedProperties","style","setProperty","getBoundingClientRect","height","_M3eSnackbarElement_handleActionClick","nothing","hidePopover","__classPrivateFieldSet","newState","setTimeout","clearTimeout","registerStyleSheet","css","styles","unsafeCSS","DesignToken","motion","short3","easing","standard","shape","corner","extraSmall","color","inverseSurface","typescale","label","large","fontSize","fontWeight","lineHeight","tracking","inverseOnSurface","inversePrimary","small","__decorate","property","type","Number","prototype","Boolean","reflect","attribute","customElement","M3eSnackbar","open","message","actionOrDismissibleOrOptions","dismissibleOrOptions","options","isServer","snackbar","document","createElement","actualOptions","append","createTextNode","undefined","prefersReducedMotion","remove","once","actionCallback","querySelector","body","showPopover","dismiss","globalThis"],"mappings":"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"}
@@ -628,7 +628,7 @@ _M3eSplitPaneElement_cycleDetent = function _M3eSplitPaneElement_cycleDetent() {
628
628
  registerStyleSheet(css`@property --_split-pane-value { syntax: "<length-percentage>"; inherits: true; initial-value: 50%; }</length-percentage>`);
629
629
  })();
630
630
  /** The styles of the element. */
631
- M3eSplitPaneElement.styles = css`:host { display: block; } .base { display: flex; width: 100%; height: 100%; overflow: hidden; } :host(:not(:is(:state(--vertical), :--vertical))) .base { flex-direction: row; } :host(:is(:state(--vertical), :--vertical)) .base { flex-direction: column; } :host(:is(:state(--with-start), :--with-start):is(:state(--with-end), :--with-end)) .start { flex: 0 1 calc(var(--_split-pane-value) - calc(var(--m3e-split-pane-drag-handle-container-width, 1.5rem) / 2)); } :host(:not(:is(:state(--with-end), :--with-end))) .start { flex: 1 1 auto; } :host(:is(:state(--with-end), :--with-end)) .end { flex: 1 1 auto; } :host(:not(:is(:state(--with-end), :--with-end))) .end { display: none; } :host(:not(:is(:state(--animating), :--animating))) .start[inert], :host(:not(:is(:state(--animating), :--animating))) .end[inert] { visibility: hidden; } .drag-handle { flex: none; display: flex; align-items: center; justify-content: center; outline: none; touch-action: none; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); --m3e-state-layer-hover-color: var(--m3e-split-pane-drag-handle-hover-color, ${DesignToken.color.onSurface}); --m3e-state-layer-hover-opacity: var(--m3e-split-pane-drag-handle-hover-opacity, 8%); --m3e-state-layer-focus-color: var(--m3e-split-pane-drag-handle-focus-color, ${DesignToken.color.onSurface}); --m3e-state-layer-focus-opacity: var(--m3e-split-pane-drag-handle-focus-opacity, 10%); } :host(:is(:not(:is(:state(--with-start), :--with-start)), :not(:is(:state(--with-end), :--with-end)))) .drag-handle { display: none; } :host(:not(:is(:state(--pressed), :--pressed))) .drag-handle:not([aria-disabled]) { cursor: grab; } :host(:is(:state(--pressed), :--pressed)) .drag-handle:not([aria-disabled]) { cursor: grabbing; } .handle { position: relative; transition: ${unsafeCSS(`background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},
631
+ M3eSplitPaneElement.styles = css`:host { display: block; } .base { contain: layout style; display: flex; width: 100%; height: 100%; overflow: hidden; } :host(:not(:is(:state(--vertical), :--vertical))) .base { flex-direction: row; } :host(:is(:state(--vertical), :--vertical)) .base { flex-direction: column; } :host(:is(:state(--with-start), :--with-start):is(:state(--with-end), :--with-end)) .start { flex: 0 1 calc(var(--_split-pane-value) - calc(var(--m3e-split-pane-drag-handle-container-width, 1.5rem) / 2)); } :host(:not(:is(:state(--with-end), :--with-end))) .start { flex: 1 1 auto; } :host(:is(:state(--with-end), :--with-end)) .end { flex: 1 1 auto; } :host(:not(:is(:state(--with-end), :--with-end))) .end { display: none; } :host(:not(:is(:state(--animating), :--animating))) .start[inert], :host(:not(:is(:state(--animating), :--animating))) .end[inert] { visibility: hidden; } .drag-handle { contain: layout style; flex: none; display: flex; align-items: center; justify-content: center; outline: none; touch-action: none; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); --m3e-state-layer-hover-color: var(--m3e-split-pane-drag-handle-hover-color, ${DesignToken.color.onSurface}); --m3e-state-layer-hover-opacity: var(--m3e-split-pane-drag-handle-hover-opacity, 8%); --m3e-state-layer-focus-color: var(--m3e-split-pane-drag-handle-focus-color, ${DesignToken.color.onSurface}); --m3e-state-layer-focus-opacity: var(--m3e-split-pane-drag-handle-focus-opacity, 10%); } :host(:is(:not(:is(:state(--with-start), :--with-start)), :not(:is(:state(--with-end), :--with-end)))) .drag-handle { display: none; } :host(:not(:is(:state(--pressed), :--pressed))) .drag-handle:not([aria-disabled]) { cursor: grab; } :host(:is(:state(--pressed), :--pressed)) .drag-handle:not([aria-disabled]) { cursor: grabbing; } .handle { contain: layout style; position: relative; transition: ${unsafeCSS(`background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},
632
632
  width ${DesignToken.motion.spring.fastEffects}, height ${DesignToken.motion.spring.fastEffects}`)}; } .touch { z-index: 1; position: absolute; height: 3rem; width: 3rem; margin: auto; touch-action: none; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } :host(:not(:is(:state(--pressed), :--pressed))) .handle { background-color: var(--m3e-split-pane-drag-handle-color, ${DesignToken.color.outline}); border-radius: var(--m3e-split-pane-drag-handle-shape, ${DesignToken.shape.corner.full}); } :host(:is(:state(--pressed), :--pressed)) .handle { background-color: var(--m3e-split-pane-drag-handle-pressed-color, ${DesignToken.color.onSurface}); border-radius: var(--m3e-split-pane-drag-handle-pressed-shape, ${DesignToken.shape.corner.medium}); } :host(:not(:is(:state(--vertical), :--vertical))) .drag-handle { flex-direction: column; width: var(--m3e-split-pane-drag-handle-container-width, 1.5rem); } :host(:not(:is(:state(--vertical), :--vertical)):not(:is(:state(--pressed), :--pressed))) .handle { width: var(--m3e-split-pane-drag-handle-width, 0.25rem); height: var(--m3e-split-pane-drag-handle-height, 3rem); } :host(:not(:is(:state(--vertical), :--vertical)):is(:state(--pressed), :--pressed)) .handle { width: var(--m3e-split-pane-drag-handle-pressed-width, 0.75rem); height: var(--m3e-split-pane-drag-handle-pressed-height, 3.25rem); } :host(:is(:state(--vertical), :--vertical)) .drag-handle { height: var(--m3e-split-pane-drag-handle-container-width, 1.5rem); } :host(:is(:state(--vertical), :--vertical):not(:is(:state(--pressed), :--pressed))) .handle { width: var(--m3e-split-pane-drag-handle-height, 3rem); height: var(--m3e-split-pane-drag-handle-width, 0.25rem); } :host(:is(:state(--vertical), :--vertical):is(:state(--pressed), :--pressed)) .handle { width: var(--m3e-split-pane-drag-handle-pressed-height, 3.25rem); height: var(--m3e-split-pane-drag-handle-pressed-width, 0.75rem); } @media (prefers-reduced-motion) { .handle { transition: none; } } @media (forced-colors: active) { :host(:is(:state(--pressed), :--pressed)) .handle, :host(:not(:is(:state(--pressed), :--pressed))) .handle { background-color: ButtonText; } }`;
633
633
  __decorate([state()], M3eSplitPaneElement.prototype, "_orientation", void 0);
634
634
  __decorate([query(".base")], M3eSplitPaneElement.prototype, "_base", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"split-pane.js","sources":["../../src/split-pane/SplitPaneElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n addCustomState,\r\n AttachInternals,\r\n customElement,\r\n deleteCustomState,\r\n DesignToken,\r\n Disabled,\r\n FormAssociated,\r\n formValue,\r\n MutationController,\r\n prefersReducedMotion,\r\n PressedController,\r\n ReconnectedCallback,\r\n registerStyleSheet,\r\n setCustomState,\r\n spaceSeparatedStringConverter,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { Breakpoint, M3eBreakpointObserver } from \"@m3e/web/core/layout\";\r\nimport { Direction, M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { SplitPaneOrientation } from \"./SplitPaneOrientation\";\r\n\r\n/**\r\n * A dual-view layout that separates content with a movable drag handle.\r\n * @description\r\n * The `m3e-split-pane` component delivers a Material 3-inspired split view with a\r\n * movable drag handle, enabling responsive layout composition and pane resizing.\r\n * It supports keyboard interaction, adaptive orientation, and optional detent snapping\r\n * for consistent, accessible content distribution.\r\n *\r\n * @example\r\n * The following example illustrates the basic use of the `m3e-split-pane` with start and end content.\r\n * In this example, the start pane occupies 25% of the available width.\r\n * ```html\r\n * <m3e-split-pane value=\"25\">\r\n * <m3e-card slot=\"start\"></m3e-card>\r\n * <m3e-card slot=\"end\"></m3e-card>\r\n * </m3e-split-pane>\r\n * ```\r\n *\r\n * @example\r\n * The next example demonstrates minimum and maximum constraints, where the start pane\r\n * may shrink to 25% but cannot grow beyond 50% of the available space.\r\n * ```html\r\n * <m3e-split-pane value=\"25\" min=\"25\" max=\"50\">\r\n * <m3e-card slot=\"start\"></m3e-card>\r\n * <m3e-card slot=\"end\"></m3e-card>\r\n * </m3e-split-pane>\r\n * ```\r\n *\r\n * @example\r\n * The next example demonstrates percentage‑based detents, allowing the drag handle to snap at\r\n * 0%, 25%, 50%, 75%, and 100% of the available space.\r\n * ```html\r\n * <m3e-split-pane value=\"50\" detents=\"0 25 50 75 100\">\r\n * <m3e-card slot=\"start\"></m3e-card>\r\n * <m3e-card slot=\"end\"></m3e-card>\r\n * </m3e-split-pane>\r\n * ```\r\n *\r\n * @tag m3e-split-pane\r\n *\r\n * @slot start - Renders content at the logical start side of the pane.\r\n * @slot end - Renders content at the logical end side of the pane.\r\n *\r\n * @attr detents - Detents (discrete sizes) the start pane can snap to.\r\n * @attr label - The accessible label given to the moveable drag handle.\r\n * @attr max - A fractional value, between 0 and 100, indicating the maximum size of the start pane.\r\n * @attr min - A fractional value, between 0 and 100, indicating the minimum size of the start pane.\r\n * @attr orientation - The orientation of the split.\r\n * @attr overshoot-limit - A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n * @attr step - A fractional value, between 0 and 100, indicating the increment by which to adjust the value when resized via keyboard.\r\n * @attr value - A fractional value, between 0 and 100, indicating the size of the start pane.\r\n * @attr wrap-detents - Whether cycling through detents will wrap.\r\n *\r\n * @fires beforeinput - Dispatched continuously before the user adjusts the drag handle.\r\n * @fires input - Dispatched continuously while the user adjusts the drag handle.\r\n * @fires change - Dispatched when the user finishes adjusting the drag handle.\r\n *\r\n * @cssprop --m3e-split-pane-drag-handle-hover-color - Color used for the drag handle hover state.\r\n * @cssprop --m3e-split-pane-drag-handle-hover-opacity - Opacity used for the drag handle hover state.\r\n * @cssprop --m3e-split-pane-drag-handle-focus-color - Color used for the drag handle focus state.\r\n * @cssprop --m3e-split-pane-drag-handle-focus-opacity - Opacity used for the drag handle focus state.\r\n * @cssprop --m3e-split-pane-drag-handle-color - Background color of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-shape - Corner shape of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-color - Background color of the drag handle when pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-shape - Corner shape of the drag handle when pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-container-width - Width of the drag handle container.\r\n * @cssprop --m3e-split-pane-drag-handle-width - Thickness of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-height - Length of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-width - Thickness of the drag handle when pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-height - Length of the drag handle when pressed.\r\n */\r\n@customElement(\"m3e-split-pane\")\r\nexport class M3eSplitPaneElement extends FormAssociated(Disabled(ReconnectedCallback(AttachInternals(LitElement)))) {\r\n static {\r\n registerStyleSheet(css`\r\n @property --_split-pane-value {\r\n syntax: \"<length-percentage>\";\r\n inherits: true;\r\n initial-value: 50%;\r\n }\r\n `);\r\n }\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n display: flex;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical))) .base {\r\n flex-direction: row;\r\n }\r\n :host(:is(:state(--vertical), :--vertical)) .base {\r\n flex-direction: column;\r\n }\r\n :host(:is(:state(--with-start), :--with-start):is(:state(--with-end), :--with-end)) .start {\r\n flex: 0 1 calc(var(--_split-pane-value) - calc(var(--m3e-split-pane-drag-handle-container-width, 1.5rem) / 2));\r\n }\r\n :host(:not(:is(:state(--with-end), :--with-end))) .start {\r\n flex: 1 1 auto;\r\n }\r\n :host(:is(:state(--with-end), :--with-end)) .end {\r\n flex: 1 1 auto;\r\n }\r\n :host(:not(:is(:state(--with-end), :--with-end))) .end {\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--animating), :--animating))) .start[inert],\r\n :host(:not(:is(:state(--animating), :--animating))) .end[inert] {\r\n visibility: hidden;\r\n }\r\n .drag-handle {\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n outline: none;\r\n touch-action: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n\r\n --m3e-state-layer-hover-color: var(--m3e-split-pane-drag-handle-hover-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-hover-opacity: var(--m3e-split-pane-drag-handle-hover-opacity, 8%);\r\n --m3e-state-layer-focus-color: var(--m3e-split-pane-drag-handle-focus-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-focus-opacity: var(--m3e-split-pane-drag-handle-focus-opacity, 10%);\r\n }\r\n :host(:is(:not(:is(:state(--with-start), :--with-start)), :not(:is(:state(--with-end), :--with-end))))\r\n .drag-handle {\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--pressed), :--pressed))) .drag-handle:not([aria-disabled]) {\r\n cursor: grab;\r\n }\r\n :host(:is(:state(--pressed), :--pressed)) .drag-handle:not([aria-disabled]) {\r\n cursor: grabbing;\r\n }\r\n .handle {\r\n position: relative;\r\n transition: ${unsafeCSS(`background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n width ${DesignToken.motion.spring.fastEffects}, height ${DesignToken.motion.spring.fastEffects}`)};\r\n }\r\n .touch {\r\n z-index: 1;\r\n position: absolute;\r\n height: 3rem;\r\n width: 3rem;\r\n margin: auto;\r\n touch-action: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n :host(:not(:is(:state(--pressed), :--pressed))) .handle {\r\n background-color: var(--m3e-split-pane-drag-handle-color, ${DesignToken.color.outline});\r\n border-radius: var(--m3e-split-pane-drag-handle-shape, ${DesignToken.shape.corner.full});\r\n }\r\n :host(:is(:state(--pressed), :--pressed)) .handle {\r\n background-color: var(--m3e-split-pane-drag-handle-pressed-color, ${DesignToken.color.onSurface});\r\n border-radius: var(--m3e-split-pane-drag-handle-pressed-shape, ${DesignToken.shape.corner.medium});\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical))) .drag-handle {\r\n flex-direction: column;\r\n width: var(--m3e-split-pane-drag-handle-container-width, 1.5rem);\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical)):not(:is(:state(--pressed), :--pressed))) .handle {\r\n width: var(--m3e-split-pane-drag-handle-width, 0.25rem);\r\n height: var(--m3e-split-pane-drag-handle-height, 3rem);\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical)):is(:state(--pressed), :--pressed)) .handle {\r\n width: var(--m3e-split-pane-drag-handle-pressed-width, 0.75rem);\r\n height: var(--m3e-split-pane-drag-handle-pressed-height, 3.25rem);\r\n }\r\n :host(:is(:state(--vertical), :--vertical)) .drag-handle {\r\n height: var(--m3e-split-pane-drag-handle-container-width, 1.5rem);\r\n }\r\n :host(:is(:state(--vertical), :--vertical):not(:is(:state(--pressed), :--pressed))) .handle {\r\n width: var(--m3e-split-pane-drag-handle-height, 3rem);\r\n height: var(--m3e-split-pane-drag-handle-width, 0.25rem);\r\n }\r\n :host(:is(:state(--vertical), :--vertical):is(:state(--pressed), :--pressed)) .handle {\r\n width: var(--m3e-split-pane-drag-handle-pressed-height, 3.25rem);\r\n height: var(--m3e-split-pane-drag-handle-pressed-width, 0.75rem);\r\n }\r\n @media (prefers-reduced-motion) {\r\n .handle {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n :host(:is(:state(--pressed), :--pressed)) .handle,\r\n :host(:not(:is(:state(--pressed), :--pressed))) .handle {\r\n background-color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @state() _orientation?: Exclude<SplitPaneOrientation, \"auto\">;\r\n /** @private */ #breakpointUnobserve?: () => void;\r\n\r\n /** @private */ @query(\".base\") private _base!: HTMLElement;\r\n /** @private */ @query(\".drag-handle\") private _dragHandle!: HTMLElement;\r\n\r\n /** @private */ #dragState?: { startPos: number; startValue: number; cachedSize: number; min: number; max: number };\r\n /** @private */ #valueChanged = false;\r\n /** @private */ #snapAnimation?: Animation;\r\n\r\n /** @private */\r\n readonly #pressedController = new PressedController(this, {\r\n target: null,\r\n isPressedKey: (key) => key === \" \",\r\n minPressedDuration: 150,\r\n callback: (pressed) => setCustomState(this, \"--pressed\", pressed && !this.disabled),\r\n });\r\n\r\n /** @private */\r\n readonly #startMutationController = new MutationController(this, {\r\n target: null,\r\n config: { attributeFilter: [\"hidden\"] },\r\n callback: () => this.#updatePaneVisibility(\"start\"),\r\n });\r\n\r\n /** @private */\r\n readonly #endMutationController = new MutationController(this, {\r\n target: null,\r\n config: { attributeFilter: [\"hidden\"] },\r\n callback: () => this.#updatePaneVisibility(\"end\"),\r\n });\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the size of the start pane.\r\n * @default 50\r\n */\r\n @property({ type: Number }) value = 50;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the minimum size of the start pane.\r\n * @default 0\r\n */\r\n @property({ type: Number }) min = 0;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the maximum size of the start pane.\r\n * @default 100\r\n */\r\n @property({ type: Number }) max = 100;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n * @default 4\r\n */\r\n @property({ attribute: \"overshoot-limit\", type: Number }) overshootLimit = 4;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the increment by which to adjust the value when resized via keyboard.\r\n * @default 1\r\n */\r\n @property({ type: Number }) step = 1;\r\n\r\n /**\r\n * Detents (discrete sizes) the start pane can snap to.\r\n * @default []\r\n */\r\n @property({ attribute: \"detents\", converter: spaceSeparatedStringConverter }) detents: string[] = [];\r\n\r\n /**\r\n * Whether cycling through detents will wrap.\r\n * @default false\r\n */\r\n @property({ attribute: \"wrap-detents\", type: Boolean }) wrapDetents = false;\r\n\r\n /**\r\n * The orientation of the split.\r\n * @default \"horizontal\"\r\n */\r\n @property() orientation: SplitPaneOrientation = \"horizontal\";\r\n\r\n /**\r\n * The accessible label given to the movable drag handle.\r\n * @default \"Resize panes\"\r\n */\r\n @property() label: string = \"Resize panes\";\r\n\r\n /** A function used to generates human readable text for the accessible value (`aria-valuetext`) of the drag handle. */\r\n @property() valueFormatter?: (\r\n value: number,\r\n orientation: Omit<SplitPaneOrientation, \"auto\">,\r\n dir: Direction,\r\n ) => string | undefined = (value, orientation, dir) => {\r\n value = Math.round(value);\r\n if (value >= 48 && value <= 52) {\r\n return \"Panes equally sized\";\r\n }\r\n\r\n switch (value) {\r\n case 0:\r\n return orientation === \"horizontal\"\r\n ? dir === \"ltr\"\r\n ? \"Left pane collapsed\"\r\n : \"Right pane collapsed\"\r\n : \"Top pane collapsed\";\r\n case 100:\r\n return orientation === \"horizontal\"\r\n ? dir === \"ltr\"\r\n ? \"Right pane collapsed\"\r\n : \"Left pane collapsed\"\r\n : \"Bottom pane collapsed\";\r\n default:\r\n return orientation === \"horizontal\"\r\n ? dir === \"ltr\"\r\n ? `Left pane ${value}%, right pane ${100 - value}%`\r\n : `Left pane ${100 - value}%, right pane ${value}%`\r\n : `Top pane ${value}%, bottom pane ${100 - value}%`;\r\n }\r\n };\r\n\r\n /** The current orientation of the split. */\r\n get currentOrientation(): Exclude<SplitPaneOrientation, \"auto\"> {\r\n return this._orientation ?? (this.orientation !== \"vertical\" ? \"horizontal\" : \"vertical\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override get [formValue](): string | File | FormData | null {\r\n return this.value?.toString() ?? null;\r\n }\r\n\r\n /**\r\n * Moves the drag handle to the collapsed position. If detents exist, snaps to the collapsed detent.\r\n * If no detents exist, moves to the minimum allowed value.\r\n */\r\n collapse(): void {\r\n this.snapToValue(this.min);\r\n }\r\n\r\n /**\r\n * Moves the drag handle to the expanded position. If detents exist, snaps to the expanded detent.\r\n * If no detents exist, moves to the maximum allowed value.\r\n */\r\n expand(): void {\r\n this.snapToValue(this.max);\r\n }\r\n\r\n /**\r\n * Moves the drag handle to the specified position. If detents exist, snaps to the closest detent.\r\n * If no detents exist, moves to the specified value.\r\n * @param {number} value A fractional value, between 0 and 100, indicating the size of the start pane.\r\n */\r\n snapToValue(value: number): void {\r\n const detent = this.#getClosestDetent(value);\r\n value = detent > -1 ? this.#computeDetent(this.detents[detent])! : value;\r\n if (!this.#snapAnimation) {\r\n this.#snapToValue(value);\r\n } else {\r\n this.#changeValue(value);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.#clearOrientation();\r\n this.#pressedController.unobserve(this._dragHandle);\r\n }\r\n\r\n /** @inheritdoc */\r\n override reconnectedCallback(): void {\r\n super.reconnectedCallback();\r\n\r\n this.#initialize();\r\n\r\n if (this.orientation === \"auto\") {\r\n this.#initBreakpointMonitoring();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\r\n super.willUpdate(changedProperties);\r\n\r\n if (changedProperties.has(\"orientation\")) {\r\n this.#breakpointUnobserve?.();\r\n\r\n if (this.orientation === \"auto\") {\r\n this.#initBreakpointMonitoring();\r\n } else {\r\n this._orientation = undefined;\r\n this.#updateOrientation();\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues): void {\r\n super.updated(_changedProperties);\r\n if (_changedProperties.has(\"value\")) {\r\n this._base.style.setProperty(\"--_split-pane-value\", `${this.value}%`);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <div class=\"start\" id=\"start\" ?inert=\"${this.value <= 0}\">\r\n <slot name=\"start\" @slotchange=\"${this.#handleStartSlotChange}\"></slot>\r\n </div>\r\n ${this.#renderDragHandle()}\r\n <div class=\"end\" ?inert=\"${this.value >= 100}\">\r\n <slot name=\"end\" @slotchange=\"${this.#handleEndSlotChange}\"></slot>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderDragHandle(): unknown {\r\n return html`<div\r\n id=\"drag-handle\"\r\n class=\"drag-handle\"\r\n role=\"separator\"\r\n tabindex=\"${ifDefined(this.disabled ? undefined : 0)}\"\r\n aria-label=\"${this.label}\"\r\n aria-controls=\"start\"\r\n aria-disabled=\"${ifDefined(this.disabled ? \"true\" : undefined)}\"\r\n aria-orientation=\"${this.currentOrientation === \"horizontal\" ? \"vertical\" : \"horizontal\"}\"\r\n aria-valuemin=\"${this.min}\"\r\n aria-valuemax=\"${this.max}\"\r\n aria-valuenow=\"${this.value}\"\r\n aria-valuetext=\"${ifDefined(\r\n this.valueFormatter?.(this.value, this.currentOrientation, M3eDirectionality.current),\r\n )}\"\r\n @pointerdown=\"${this.#handlePointerDown}\"\r\n @pointerup=\"${this.#handlePointerUp}\"\r\n @pointermove=\"${this.#handlePointerMove}\"\r\n @keydown=\"${this.#handleKeyDown}\"\r\n @dblclick=\"${this.#cycleDetent}\"\r\n >\r\n ${this.disabled\r\n ? nothing\r\n : html`<div class=\"handle\">\r\n <m3e-focus-ring for=\"drag-handle\"></m3e-focus-ring>\r\n <m3e-state-layer for=\"drag-handle\"></m3e-state-layer>\r\n </div>\r\n <div class=\"touch\"></div>`}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleStartSlotChange(e: Event): void {\r\n this.#handleSlotChange(e.target as HTMLSlotElement, this.#startMutationController, \"--with-start\");\r\n }\r\n\r\n /** @private */\r\n #handleEndSlotChange(e: Event): void {\r\n this.#handleSlotChange(e.target as HTMLSlotElement, this.#endMutationController, \"--with-end\");\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(slot: HTMLSlotElement, mutationController: MutationController, state: string): void {\r\n for (const target of mutationController.targets) {\r\n mutationController.unobserve(target);\r\n }\r\n\r\n const assignedElements = new Array<Element>();\r\n setCustomState(this, state, this.#hasVisibleElements(slot, assignedElements));\r\n\r\n for (const element of assignedElements) {\r\n if (element instanceof HTMLElement) {\r\n mutationController.observe(element);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #updatePaneVisibility(pane: \"start\" | \"end\"): void {\r\n setCustomState(\r\n this,\r\n `--with-${pane}`,\r\n this.#hasVisibleElements(this.shadowRoot?.querySelector<HTMLSlotElement>(`slot[name='${pane}']`)),\r\n );\r\n }\r\n\r\n /** @private */\r\n #hasVisibleElements(slot?: HTMLSlotElement | null, assignedElements?: Element[]): boolean {\r\n assignedElements = assignedElements ?? [];\r\n assignedElements.push(...(slot?.assignedElements({ flatten: true }) ?? []));\r\n return assignedElements.length > 0 && !assignedElements.every((x) => x.hasAttribute(\"hidden\"));\r\n }\r\n\r\n /** @private */\r\n #initialize() {\r\n this.#pressedController.observe(this._dragHandle);\r\n }\r\n\r\n /** @private */\r\n #initBreakpointMonitoring(): void {\r\n this.#breakpointUnobserve = M3eBreakpointObserver.observe([Breakpoint.XSmall], (matches) => {\r\n this._orientation = matches.get(Breakpoint.XSmall) ? \"vertical\" : \"horizontal\";\r\n this.#updateOrientation();\r\n });\r\n }\r\n\r\n /** @private */\r\n #updateOrientation(): void {\r\n setCustomState(this, \"--vertical\", this.currentOrientation === \"vertical\");\r\n }\r\n\r\n /** @private */\r\n #clearOrientation(): void {\r\n deleteCustomState(this, \"--vertical\");\r\n this._orientation = undefined;\r\n this.#breakpointUnobserve?.();\r\n this.#breakpointUnobserve = undefined;\r\n }\r\n\r\n /** @private */\r\n #handlePointerDown(e: PointerEvent): void {\r\n if (e.pointerType === \"mouse\" && e.button > 1) return;\r\n if (this.disabled) return;\r\n\r\n this._dragHandle.setPointerCapture(e.pointerId);\r\n this.#valueChanged = false;\r\n\r\n let min = this.min;\r\n if (min === 0 && this.detents.length > 0) {\r\n const detent = this.#getClosestDetent(0);\r\n if (detent > -1) {\r\n min = this.#computeDetent(this.detents[detent]) ?? this.min;\r\n }\r\n }\r\n\r\n let max = this.max;\r\n if (max === 100 && this.detents.length > 0) {\r\n const detent = this.#getClosestDetent(100);\r\n if (detent > -1) {\r\n max = this.#computeDetent(this.detents[detent]) ?? this.max;\r\n }\r\n }\r\n\r\n this.#dragState = {\r\n startPos: this.currentOrientation === \"vertical\" ? e.clientY : e.clientX,\r\n startValue: this.value,\r\n cachedSize: this.currentOrientation === \"vertical\" ? this.clientHeight : this.clientWidth,\r\n min,\r\n max,\r\n };\r\n }\r\n\r\n /** @private */\r\n #handlePointerMove(e: PointerEvent): void {\r\n if (!this._dragHandle.hasPointerCapture(e.pointerId) || !this.#dragState) return;\r\n\r\n const pos = this.currentOrientation === \"vertical\" ? e.clientY : e.clientX;\r\n\r\n let delta =\r\n this.#dragState.cachedSize > 0 ? ((pos - this.#dragState.startPos) / this.#dragState.cachedSize) * 100 : 0;\r\n if (M3eDirectionality.current === \"rtl\" && this.currentOrientation !== \"vertical\") {\r\n delta = -delta;\r\n }\r\n\r\n let value = this.#dragState.startValue + delta;\r\n if (value < this.#dragState.min) {\r\n const overshoot = this.#dragState.min - value;\r\n const compressed = (this.overshootLimit * overshoot) / (overshoot + this.overshootLimit);\r\n value = this.#dragState.min - compressed;\r\n } else if (value > this.#dragState.max) {\r\n const overshoot = value - this.#dragState.max;\r\n const compressed = (this.overshootLimit * overshoot) / (overshoot + this.overshootLimit);\r\n value = this.#dragState.max + compressed;\r\n }\r\n\r\n if (this.#changeValue(value, false, true)) {\r\n this.#valueChanged = true;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handlePointerUp(e: PointerEvent): void {\r\n if (e.pointerType === \"mouse\" && e.button > 1) return;\r\n if (this._dragHandle.hasPointerCapture(e.pointerId)) {\r\n this._dragHandle.releasePointerCapture(e.pointerId);\r\n this.#dragState = undefined;\r\n\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const value = this.#computeDetent(this.detents[detent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value, false);\r\n }\r\n } else if (this.value < this.min) {\r\n this.#snapToValue(this.min, false);\r\n } else if (this.value > this.max) {\r\n this.#snapToValue(this.max, false);\r\n }\r\n\r\n if (this.#valueChanged) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n this.#valueChanged = false;\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n const ltr = M3eDirectionality.current === \"ltr\" || this.currentOrientation === \"vertical\";\r\n switch (e.key) {\r\n case \"Up\":\r\n case \"ArrowUp\":\r\n case \"Left\":\r\n case \"ArrowLeft\": {\r\n e.preventDefault();\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = ltr ? this.#getNextLowerDetent(detent) : this.#getNextHigherDetent(detent);\r\n if (nextDetent !== detent && !this.#snapAnimation) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else if (this.step > 1) {\r\n if (!this.#snapAnimation) {\r\n this.#snapToValue(this.value + (ltr ? -this.step : this.step));\r\n }\r\n } else {\r\n this.#changeValue(this.value + (ltr ? -this.step : this.step));\r\n }\r\n break;\r\n }\r\n\r\n case \"Down\":\r\n case \"ArrowDown\":\r\n case \"Right\":\r\n case \"ArrowRight\": {\r\n e.preventDefault();\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = ltr ? this.#getNextHigherDetent(detent) : this.#getNextLowerDetent(detent);\r\n if (nextDetent !== detent && !this.#snapAnimation) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else if (this.step > 1) {\r\n if (!this.#snapAnimation) {\r\n this.#snapToValue(this.value + (ltr ? this.step : -this.step));\r\n }\r\n } else {\r\n this.#changeValue(this.value + (ltr ? this.step : -this.step));\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"Home\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const next = this.#getClosestDetent(this.min);\r\n if (next > -1) {\r\n this.#snapToValue(this.#computeDetent(this.detents[next])!);\r\n } else {\r\n this.#snapToValue(this.min);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"End\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const next = this.#getClosestDetent(this.max);\r\n if (next > -1) {\r\n this.#snapToValue(this.#computeDetent(this.detents[next])!);\r\n } else {\r\n this.#snapToValue(this.max);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"PageUp\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = this.#getNextLowerDetent(detent);\r\n if (nextDetent !== detent) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else {\r\n this.#snapToValue(this.value - Math.max(10, this.step));\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"PageDown\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = this.#getNextHigherDetent(detent);\r\n if (nextDetent !== detent) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else {\r\n this.#snapToValue(this.value + Math.max(10, this.step));\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"Enter\":\r\n if (!this.#snapAnimation) {\r\n this.#cycleDetent();\r\n }\r\n\r\n break;\r\n\r\n case \" \":\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n this.#cycleDetent();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #changeValue(value: number, emitChange = true, allowOvershoot = false): boolean {\r\n this.#clearSnapAnimation();\r\n\r\n if (this.dispatchEvent(new Event(\"beforeinput\", { bubbles: true, cancelable: true }))) {\r\n if (!allowOvershoot) {\r\n value = Math.max(this.min, Math.min(this.max, value));\r\n }\r\n\r\n if (value != this.value) {\r\n this.value = value;\r\n this._base.style.setProperty(\"--_split-pane-value\", `${this.value}%`);\r\n\r\n this.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n if (emitChange) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** @private */\r\n #getClosestDetent(value: number): number {\r\n let closestDetent = -1;\r\n let closestDistance = Infinity;\r\n\r\n for (let i = 0; i < this.detents.length; i++) {\r\n const detent = this.#computeDetent(this.detents[i]);\r\n if (detent === undefined) continue;\r\n\r\n const distance = Math.abs(value - detent);\r\n if (distance < closestDistance) {\r\n closestDistance = distance;\r\n closestDetent = i;\r\n }\r\n }\r\n return closestDetent;\r\n }\r\n\r\n /** @private */\r\n #getNextHigherDetent(detentIndex: number): number {\r\n const currentValue = this.#computeDetent(this.detents[detentIndex]);\r\n if (currentValue === undefined) return detentIndex;\r\n\r\n let value = Infinity;\r\n let nextDetent = detentIndex;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === detentIndex) continue;\r\n const detent = this.#computeDetent(this.detents[i]);\r\n if (detent === undefined) continue;\r\n if (detent > currentValue && detent < value) {\r\n value = detent;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #getNextLowerDetent(detentIndex: number): number {\r\n const currentValue = this.#computeDetent(this.detents[detentIndex]);\r\n if (currentValue === undefined) return detentIndex;\r\n\r\n let value = -Infinity;\r\n let nextDetent = detentIndex;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === detentIndex) continue;\r\n const detent = this.#computeDetent(this.detents[i]);\r\n if (detent === undefined) continue;\r\n if (detent < currentValue && detent > value) {\r\n value = detent;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #computeDetent(detent: string): number | undefined {\r\n const value = detent.endsWith(\"px\") ? this.clientWidth / parseFloat(detent) : parseFloat(detent);\r\n return !isNaN(value) ? value : undefined;\r\n }\r\n\r\n /** @private */\r\n #clearSnapAnimation(): void {\r\n this.#snapAnimation?.cancel();\r\n this.#snapAnimation = undefined;\r\n }\r\n\r\n /** @private */\r\n #snapToValue(value: number, emitChange = true): void {\r\n this.#clearSnapAnimation();\r\n\r\n value = Math.max(this.min, Math.min(this.max, value));\r\n if (value === this.value) return;\r\n\r\n if (!prefersReducedMotion()) {\r\n addCustomState(this, \"--animating\");\r\n\r\n this.#snapAnimation = this._base.animate(\r\n [{ \"--_split-pane-value\": `${this.value}%` }, { \"--_split-pane-value\": `${value}%` }],\r\n {\r\n duration: 250,\r\n easing: \"cubic-bezier(0.2, 0.0, 0, 1.0)\",\r\n },\r\n );\r\n this.#snapAnimation.onfinish = () => {\r\n this.#changeValue(value, emitChange);\r\n this.#snapAnimation = undefined;\r\n deleteCustomState(this, \"--animating\");\r\n };\r\n } else {\r\n this.#changeValue(value, emitChange);\r\n }\r\n }\r\n\r\n /** @private */\r\n #cycleDetent(): void {\r\n if (this.detents.length === 0) return;\r\n\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent === -1) return;\r\n\r\n let next = this.#getNextHigherDetent(detent);\r\n if (next === detent && this.wrapDetents) {\r\n next = this.#getClosestDetent(0);\r\n if (next === -1) return;\r\n }\r\n\r\n const value = this.#computeDetent(this.detents[next]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-split-pane\": M3eSplitPaneElement;\r\n }\r\n}\r\n"],"names":["M3eSplitPaneElement","FormAssociated","Disabled","ReconnectedCallback","AttachInternals","LitElement","constructor","_M3eSplitPaneElement_breakpointUnobserve","set","_M3eSplitPaneElement_dragState","_M3eSplitPaneElement_valueChanged","_M3eSplitPaneElement_snapAnimation","_M3eSplitPaneElement_pressedController","PressedController","target","isPressedKey","key","minPressedDuration","callback","pressed","setCustomState","disabled","_M3eSplitPaneElement_startMutationController","MutationController","config","attributeFilter","__classPrivateFieldGet","_M3eSplitPaneElement_instances","_M3eSplitPaneElement_updatePaneVisibility","call","_M3eSplitPaneElement_endMutationController","value","min","max","overshootLimit","step","detents","wrapDetents","orientation","label","valueFormatter","dir","Math","round","currentOrientation","_orientation","WeakMap","WeakSet","formValue","toString","collapse","snapToValue","expand","detent","_M3eSplitPaneElement_getClosestDetent","_M3eSplitPaneElement_computeDetent","_M3eSplitPaneElement_snapToValue","_M3eSplitPaneElement_changeValue","disconnectedCallback","_M3eSplitPaneElement_clearOrientation","unobserve","_dragHandle","reconnectedCallback","_M3eSplitPaneElement_initialize","_M3eSplitPaneElement_initBreakpointMonitoring","willUpdate","changedProperties","has","undefined","_M3eSplitPaneElement_updateOrientation","updated","_changedProperties","_base","style","setProperty","firstUpdated","render","html","_M3eSplitPaneElement_handleStartSlotChange","_M3eSplitPaneElement_renderDragHandle","_M3eSplitPaneElement_handleEndSlotChange","ifDefined","M3eDirectionality","current","_M3eSplitPaneElement_handlePointerDown","_M3eSplitPaneElement_handlePointerUp","_M3eSplitPaneElement_handlePointerMove","_M3eSplitPaneElement_handleKeyDown","_M3eSplitPaneElement_cycleDetent","nothing","e","_M3eSplitPaneElement_handleSlotChange","slot","mutationController","state","targets","assignedElements","Array","_M3eSplitPaneElement_hasVisibleElements","element","HTMLElement","observe","pane","shadowRoot","querySelector","push","flatten","length","every","x","hasAttribute","__classPrivateFieldSet","M3eBreakpointObserver","Breakpoint","XSmall","matches","get","deleteCustomState","pointerType","button","setPointerCapture","pointerId","startPos","clientY","clientX","startValue","cachedSize","clientHeight","clientWidth","hasPointerCapture","pos","delta","overshoot","compressed","releasePointerCapture","dispatchEvent","Event","bubbles","ltr","preventDefault","nextDetent","_M3eSplitPaneElement_getNextLowerDetent","_M3eSplitPaneElement_getNextHigherDetent","next","emitChange","allowOvershoot","_M3eSplitPaneElement_clearSnapAnimation","cancelable","closestDetent","closestDistance","Infinity","i","distance","abs","detentIndex","currentValue","endsWith","parseFloat","isNaN","cancel","prefersReducedMotion","addCustomState","animate","duration","easing","onfinish","registerStyleSheet","css","styles","DesignToken","color","onSurface","unsafeCSS","motion","short4","standard","spring","fastEffects","outline","shape","corner","full","medium","__decorate","prototype","query","property","type","Number","attribute","converter","spaceSeparatedStringConverter","Boolean","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"split-pane.js","sources":["../../src/split-pane/SplitPaneElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement, nothing, PropertyValues, unsafeCSS } from \"lit\";\r\nimport { property, query, state } from \"lit/decorators.js\";\r\nimport { ifDefined } from \"lit/directives/if-defined.js\";\r\n\r\nimport {\r\n addCustomState,\r\n AttachInternals,\r\n customElement,\r\n deleteCustomState,\r\n DesignToken,\r\n Disabled,\r\n FormAssociated,\r\n formValue,\r\n MutationController,\r\n prefersReducedMotion,\r\n PressedController,\r\n ReconnectedCallback,\r\n registerStyleSheet,\r\n setCustomState,\r\n spaceSeparatedStringConverter,\r\n} from \"@m3e/web/core\";\r\n\r\nimport { Breakpoint, M3eBreakpointObserver } from \"@m3e/web/core/layout\";\r\nimport { Direction, M3eDirectionality } from \"@m3e/web/core/bidi\";\r\n\r\nimport { SplitPaneOrientation } from \"./SplitPaneOrientation\";\r\n\r\n/**\r\n * A dual-view layout that separates content with a movable drag handle.\r\n * @description\r\n * The `m3e-split-pane` component delivers a Material 3-inspired split view with a\r\n * movable drag handle, enabling responsive layout composition and pane resizing.\r\n * It supports keyboard interaction, adaptive orientation, and optional detent snapping\r\n * for consistent, accessible content distribution.\r\n *\r\n * @example\r\n * The following example illustrates the basic use of the `m3e-split-pane` with start and end content.\r\n * In this example, the start pane occupies 25% of the available width.\r\n * ```html\r\n * <m3e-split-pane value=\"25\">\r\n * <m3e-card slot=\"start\"></m3e-card>\r\n * <m3e-card slot=\"end\"></m3e-card>\r\n * </m3e-split-pane>\r\n * ```\r\n *\r\n * @example\r\n * The next example demonstrates minimum and maximum constraints, where the start pane\r\n * may shrink to 25% but cannot grow beyond 50% of the available space.\r\n * ```html\r\n * <m3e-split-pane value=\"25\" min=\"25\" max=\"50\">\r\n * <m3e-card slot=\"start\"></m3e-card>\r\n * <m3e-card slot=\"end\"></m3e-card>\r\n * </m3e-split-pane>\r\n * ```\r\n *\r\n * @example\r\n * The next example demonstrates percentage‑based detents, allowing the drag handle to snap at\r\n * 0%, 25%, 50%, 75%, and 100% of the available space.\r\n * ```html\r\n * <m3e-split-pane value=\"50\" detents=\"0 25 50 75 100\">\r\n * <m3e-card slot=\"start\"></m3e-card>\r\n * <m3e-card slot=\"end\"></m3e-card>\r\n * </m3e-split-pane>\r\n * ```\r\n *\r\n * @tag m3e-split-pane\r\n *\r\n * @slot start - Renders content at the logical start side of the pane.\r\n * @slot end - Renders content at the logical end side of the pane.\r\n *\r\n * @attr detents - Detents (discrete sizes) the start pane can snap to.\r\n * @attr label - The accessible label given to the moveable drag handle.\r\n * @attr max - A fractional value, between 0 and 100, indicating the maximum size of the start pane.\r\n * @attr min - A fractional value, between 0 and 100, indicating the minimum size of the start pane.\r\n * @attr orientation - The orientation of the split.\r\n * @attr overshoot-limit - A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n * @attr step - A fractional value, between 0 and 100, indicating the increment by which to adjust the value when resized via keyboard.\r\n * @attr value - A fractional value, between 0 and 100, indicating the size of the start pane.\r\n * @attr wrap-detents - Whether cycling through detents will wrap.\r\n *\r\n * @fires beforeinput - Dispatched continuously before the user adjusts the drag handle.\r\n * @fires input - Dispatched continuously while the user adjusts the drag handle.\r\n * @fires change - Dispatched when the user finishes adjusting the drag handle.\r\n *\r\n * @cssprop --m3e-split-pane-drag-handle-hover-color - Color used for the drag handle hover state.\r\n * @cssprop --m3e-split-pane-drag-handle-hover-opacity - Opacity used for the drag handle hover state.\r\n * @cssprop --m3e-split-pane-drag-handle-focus-color - Color used for the drag handle focus state.\r\n * @cssprop --m3e-split-pane-drag-handle-focus-opacity - Opacity used for the drag handle focus state.\r\n * @cssprop --m3e-split-pane-drag-handle-color - Background color of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-shape - Corner shape of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-color - Background color of the drag handle when pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-shape - Corner shape of the drag handle when pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-container-width - Width of the drag handle container.\r\n * @cssprop --m3e-split-pane-drag-handle-width - Thickness of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-height - Length of the drag handle when not pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-width - Thickness of the drag handle when pressed.\r\n * @cssprop --m3e-split-pane-drag-handle-pressed-height - Length of the drag handle when pressed.\r\n */\r\n@customElement(\"m3e-split-pane\")\r\nexport class M3eSplitPaneElement extends FormAssociated(Disabled(ReconnectedCallback(AttachInternals(LitElement)))) {\r\n static {\r\n registerStyleSheet(css`\r\n @property --_split-pane-value {\r\n syntax: \"<length-percentage>\";\r\n inherits: true;\r\n initial-value: 50%;\r\n }\r\n `);\r\n }\r\n /** The styles of the element. */\r\n static override styles: CSSResultGroup = css`\r\n :host {\r\n display: block;\r\n }\r\n .base {\r\n contain: layout style;\r\n display: flex;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical))) .base {\r\n flex-direction: row;\r\n }\r\n :host(:is(:state(--vertical), :--vertical)) .base {\r\n flex-direction: column;\r\n }\r\n :host(:is(:state(--with-start), :--with-start):is(:state(--with-end), :--with-end)) .start {\r\n flex: 0 1 calc(var(--_split-pane-value) - calc(var(--m3e-split-pane-drag-handle-container-width, 1.5rem) / 2));\r\n }\r\n :host(:not(:is(:state(--with-end), :--with-end))) .start {\r\n flex: 1 1 auto;\r\n }\r\n :host(:is(:state(--with-end), :--with-end)) .end {\r\n flex: 1 1 auto;\r\n }\r\n :host(:not(:is(:state(--with-end), :--with-end))) .end {\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--animating), :--animating))) .start[inert],\r\n :host(:not(:is(:state(--animating), :--animating))) .end[inert] {\r\n visibility: hidden;\r\n }\r\n .drag-handle {\r\n contain: layout style;\r\n flex: none;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n outline: none;\r\n touch-action: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n\r\n --m3e-state-layer-hover-color: var(--m3e-split-pane-drag-handle-hover-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-hover-opacity: var(--m3e-split-pane-drag-handle-hover-opacity, 8%);\r\n --m3e-state-layer-focus-color: var(--m3e-split-pane-drag-handle-focus-color, ${DesignToken.color.onSurface});\r\n --m3e-state-layer-focus-opacity: var(--m3e-split-pane-drag-handle-focus-opacity, 10%);\r\n }\r\n :host(:is(:not(:is(:state(--with-start), :--with-start)), :not(:is(:state(--with-end), :--with-end))))\r\n .drag-handle {\r\n display: none;\r\n }\r\n :host(:not(:is(:state(--pressed), :--pressed))) .drag-handle:not([aria-disabled]) {\r\n cursor: grab;\r\n }\r\n :host(:is(:state(--pressed), :--pressed)) .drag-handle:not([aria-disabled]) {\r\n cursor: grabbing;\r\n }\r\n .handle {\r\n contain: layout style;\r\n position: relative;\r\n transition: ${unsafeCSS(`background-color ${DesignToken.motion.duration.short4} ${DesignToken.motion.easing.standard},\r\n width ${DesignToken.motion.spring.fastEffects}, height ${DesignToken.motion.spring.fastEffects}`)};\r\n }\r\n .touch {\r\n z-index: 1;\r\n position: absolute;\r\n height: 3rem;\r\n width: 3rem;\r\n margin: auto;\r\n touch-action: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\r\n }\r\n :host(:not(:is(:state(--pressed), :--pressed))) .handle {\r\n background-color: var(--m3e-split-pane-drag-handle-color, ${DesignToken.color.outline});\r\n border-radius: var(--m3e-split-pane-drag-handle-shape, ${DesignToken.shape.corner.full});\r\n }\r\n :host(:is(:state(--pressed), :--pressed)) .handle {\r\n background-color: var(--m3e-split-pane-drag-handle-pressed-color, ${DesignToken.color.onSurface});\r\n border-radius: var(--m3e-split-pane-drag-handle-pressed-shape, ${DesignToken.shape.corner.medium});\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical))) .drag-handle {\r\n flex-direction: column;\r\n width: var(--m3e-split-pane-drag-handle-container-width, 1.5rem);\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical)):not(:is(:state(--pressed), :--pressed))) .handle {\r\n width: var(--m3e-split-pane-drag-handle-width, 0.25rem);\r\n height: var(--m3e-split-pane-drag-handle-height, 3rem);\r\n }\r\n :host(:not(:is(:state(--vertical), :--vertical)):is(:state(--pressed), :--pressed)) .handle {\r\n width: var(--m3e-split-pane-drag-handle-pressed-width, 0.75rem);\r\n height: var(--m3e-split-pane-drag-handle-pressed-height, 3.25rem);\r\n }\r\n :host(:is(:state(--vertical), :--vertical)) .drag-handle {\r\n height: var(--m3e-split-pane-drag-handle-container-width, 1.5rem);\r\n }\r\n :host(:is(:state(--vertical), :--vertical):not(:is(:state(--pressed), :--pressed))) .handle {\r\n width: var(--m3e-split-pane-drag-handle-height, 3rem);\r\n height: var(--m3e-split-pane-drag-handle-width, 0.25rem);\r\n }\r\n :host(:is(:state(--vertical), :--vertical):is(:state(--pressed), :--pressed)) .handle {\r\n width: var(--m3e-split-pane-drag-handle-pressed-height, 3.25rem);\r\n height: var(--m3e-split-pane-drag-handle-pressed-width, 0.75rem);\r\n }\r\n @media (prefers-reduced-motion) {\r\n .handle {\r\n transition: none;\r\n }\r\n }\r\n @media (forced-colors: active) {\r\n :host(:is(:state(--pressed), :--pressed)) .handle,\r\n :host(:not(:is(:state(--pressed), :--pressed))) .handle {\r\n background-color: ButtonText;\r\n }\r\n }\r\n `;\r\n\r\n /** @private */ @state() _orientation?: Exclude<SplitPaneOrientation, \"auto\">;\r\n /** @private */ #breakpointUnobserve?: () => void;\r\n\r\n /** @private */ @query(\".base\") private _base!: HTMLElement;\r\n /** @private */ @query(\".drag-handle\") private _dragHandle!: HTMLElement;\r\n\r\n /** @private */ #dragState?: { startPos: number; startValue: number; cachedSize: number; min: number; max: number };\r\n /** @private */ #valueChanged = false;\r\n /** @private */ #snapAnimation?: Animation;\r\n\r\n /** @private */\r\n readonly #pressedController = new PressedController(this, {\r\n target: null,\r\n isPressedKey: (key) => key === \" \",\r\n minPressedDuration: 150,\r\n callback: (pressed) => setCustomState(this, \"--pressed\", pressed && !this.disabled),\r\n });\r\n\r\n /** @private */\r\n readonly #startMutationController = new MutationController(this, {\r\n target: null,\r\n config: { attributeFilter: [\"hidden\"] },\r\n callback: () => this.#updatePaneVisibility(\"start\"),\r\n });\r\n\r\n /** @private */\r\n readonly #endMutationController = new MutationController(this, {\r\n target: null,\r\n config: { attributeFilter: [\"hidden\"] },\r\n callback: () => this.#updatePaneVisibility(\"end\"),\r\n });\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the size of the start pane.\r\n * @default 50\r\n */\r\n @property({ type: Number }) value = 50;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the minimum size of the start pane.\r\n * @default 0\r\n */\r\n @property({ type: Number }) min = 0;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the maximum size of the start pane.\r\n * @default 100\r\n */\r\n @property({ type: Number }) max = 100;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.\r\n * @default 4\r\n */\r\n @property({ attribute: \"overshoot-limit\", type: Number }) overshootLimit = 4;\r\n\r\n /**\r\n * A fractional value, between 0 and 100, indicating the increment by which to adjust the value when resized via keyboard.\r\n * @default 1\r\n */\r\n @property({ type: Number }) step = 1;\r\n\r\n /**\r\n * Detents (discrete sizes) the start pane can snap to.\r\n * @default []\r\n */\r\n @property({ attribute: \"detents\", converter: spaceSeparatedStringConverter }) detents: string[] = [];\r\n\r\n /**\r\n * Whether cycling through detents will wrap.\r\n * @default false\r\n */\r\n @property({ attribute: \"wrap-detents\", type: Boolean }) wrapDetents = false;\r\n\r\n /**\r\n * The orientation of the split.\r\n * @default \"horizontal\"\r\n */\r\n @property() orientation: SplitPaneOrientation = \"horizontal\";\r\n\r\n /**\r\n * The accessible label given to the movable drag handle.\r\n * @default \"Resize panes\"\r\n */\r\n @property() label: string = \"Resize panes\";\r\n\r\n /** A function used to generates human readable text for the accessible value (`aria-valuetext`) of the drag handle. */\r\n @property() valueFormatter?: (\r\n value: number,\r\n orientation: Omit<SplitPaneOrientation, \"auto\">,\r\n dir: Direction,\r\n ) => string | undefined = (value, orientation, dir) => {\r\n value = Math.round(value);\r\n if (value >= 48 && value <= 52) {\r\n return \"Panes equally sized\";\r\n }\r\n\r\n switch (value) {\r\n case 0:\r\n return orientation === \"horizontal\"\r\n ? dir === \"ltr\"\r\n ? \"Left pane collapsed\"\r\n : \"Right pane collapsed\"\r\n : \"Top pane collapsed\";\r\n case 100:\r\n return orientation === \"horizontal\"\r\n ? dir === \"ltr\"\r\n ? \"Right pane collapsed\"\r\n : \"Left pane collapsed\"\r\n : \"Bottom pane collapsed\";\r\n default:\r\n return orientation === \"horizontal\"\r\n ? dir === \"ltr\"\r\n ? `Left pane ${value}%, right pane ${100 - value}%`\r\n : `Left pane ${100 - value}%, right pane ${value}%`\r\n : `Top pane ${value}%, bottom pane ${100 - value}%`;\r\n }\r\n };\r\n\r\n /** The current orientation of the split. */\r\n get currentOrientation(): Exclude<SplitPaneOrientation, \"auto\"> {\r\n return this._orientation ?? (this.orientation !== \"vertical\" ? \"horizontal\" : \"vertical\");\r\n }\r\n\r\n /** @inheritdoc */\r\n override get [formValue](): string | File | FormData | null {\r\n return this.value?.toString() ?? null;\r\n }\r\n\r\n /**\r\n * Moves the drag handle to the collapsed position. If detents exist, snaps to the collapsed detent.\r\n * If no detents exist, moves to the minimum allowed value.\r\n */\r\n collapse(): void {\r\n this.snapToValue(this.min);\r\n }\r\n\r\n /**\r\n * Moves the drag handle to the expanded position. If detents exist, snaps to the expanded detent.\r\n * If no detents exist, moves to the maximum allowed value.\r\n */\r\n expand(): void {\r\n this.snapToValue(this.max);\r\n }\r\n\r\n /**\r\n * Moves the drag handle to the specified position. If detents exist, snaps to the closest detent.\r\n * If no detents exist, moves to the specified value.\r\n * @param {number} value A fractional value, between 0 and 100, indicating the size of the start pane.\r\n */\r\n snapToValue(value: number): void {\r\n const detent = this.#getClosestDetent(value);\r\n value = detent > -1 ? this.#computeDetent(this.detents[detent])! : value;\r\n if (!this.#snapAnimation) {\r\n this.#snapToValue(value);\r\n } else {\r\n this.#changeValue(value);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n override disconnectedCallback(): void {\r\n super.disconnectedCallback();\r\n\r\n this.#clearOrientation();\r\n this.#pressedController.unobserve(this._dragHandle);\r\n }\r\n\r\n /** @inheritdoc */\r\n override reconnectedCallback(): void {\r\n super.reconnectedCallback();\r\n\r\n this.#initialize();\r\n\r\n if (this.orientation === \"auto\") {\r\n this.#initBreakpointMonitoring();\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override willUpdate(changedProperties: PropertyValues<this>): void {\r\n super.willUpdate(changedProperties);\r\n\r\n if (changedProperties.has(\"orientation\")) {\r\n this.#breakpointUnobserve?.();\r\n\r\n if (this.orientation === \"auto\") {\r\n this.#initBreakpointMonitoring();\r\n } else {\r\n this._orientation = undefined;\r\n this.#updateOrientation();\r\n }\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override updated(_changedProperties: PropertyValues): void {\r\n super.updated(_changedProperties);\r\n if (_changedProperties.has(\"value\")) {\r\n this._base.style.setProperty(\"--_split-pane-value\", `${this.value}%`);\r\n }\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override firstUpdated(_changedProperties: PropertyValues): void {\r\n super.firstUpdated(_changedProperties);\r\n this.#initialize();\r\n }\r\n\r\n /** @inheritdoc */\r\n protected override render(): unknown {\r\n return html`<div class=\"base\">\r\n <div class=\"start\" id=\"start\" ?inert=\"${this.value <= 0}\">\r\n <slot name=\"start\" @slotchange=\"${this.#handleStartSlotChange}\"></slot>\r\n </div>\r\n ${this.#renderDragHandle()}\r\n <div class=\"end\" ?inert=\"${this.value >= 100}\">\r\n <slot name=\"end\" @slotchange=\"${this.#handleEndSlotChange}\"></slot>\r\n </div>\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #renderDragHandle(): unknown {\r\n return html`<div\r\n id=\"drag-handle\"\r\n class=\"drag-handle\"\r\n role=\"separator\"\r\n tabindex=\"${ifDefined(this.disabled ? undefined : 0)}\"\r\n aria-label=\"${this.label}\"\r\n aria-controls=\"start\"\r\n aria-disabled=\"${ifDefined(this.disabled ? \"true\" : undefined)}\"\r\n aria-orientation=\"${this.currentOrientation === \"horizontal\" ? \"vertical\" : \"horizontal\"}\"\r\n aria-valuemin=\"${this.min}\"\r\n aria-valuemax=\"${this.max}\"\r\n aria-valuenow=\"${this.value}\"\r\n aria-valuetext=\"${ifDefined(\r\n this.valueFormatter?.(this.value, this.currentOrientation, M3eDirectionality.current),\r\n )}\"\r\n @pointerdown=\"${this.#handlePointerDown}\"\r\n @pointerup=\"${this.#handlePointerUp}\"\r\n @pointermove=\"${this.#handlePointerMove}\"\r\n @keydown=\"${this.#handleKeyDown}\"\r\n @dblclick=\"${this.#cycleDetent}\"\r\n >\r\n ${this.disabled\r\n ? nothing\r\n : html`<div class=\"handle\">\r\n <m3e-focus-ring for=\"drag-handle\"></m3e-focus-ring>\r\n <m3e-state-layer for=\"drag-handle\"></m3e-state-layer>\r\n </div>\r\n <div class=\"touch\"></div>`}\r\n </div>`;\r\n }\r\n\r\n /** @private */\r\n #handleStartSlotChange(e: Event): void {\r\n this.#handleSlotChange(e.target as HTMLSlotElement, this.#startMutationController, \"--with-start\");\r\n }\r\n\r\n /** @private */\r\n #handleEndSlotChange(e: Event): void {\r\n this.#handleSlotChange(e.target as HTMLSlotElement, this.#endMutationController, \"--with-end\");\r\n }\r\n\r\n /** @private */\r\n #handleSlotChange(slot: HTMLSlotElement, mutationController: MutationController, state: string): void {\r\n for (const target of mutationController.targets) {\r\n mutationController.unobserve(target);\r\n }\r\n\r\n const assignedElements = new Array<Element>();\r\n setCustomState(this, state, this.#hasVisibleElements(slot, assignedElements));\r\n\r\n for (const element of assignedElements) {\r\n if (element instanceof HTMLElement) {\r\n mutationController.observe(element);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #updatePaneVisibility(pane: \"start\" | \"end\"): void {\r\n setCustomState(\r\n this,\r\n `--with-${pane}`,\r\n this.#hasVisibleElements(this.shadowRoot?.querySelector<HTMLSlotElement>(`slot[name='${pane}']`)),\r\n );\r\n }\r\n\r\n /** @private */\r\n #hasVisibleElements(slot?: HTMLSlotElement | null, assignedElements?: Element[]): boolean {\r\n assignedElements = assignedElements ?? [];\r\n assignedElements.push(...(slot?.assignedElements({ flatten: true }) ?? []));\r\n return assignedElements.length > 0 && !assignedElements.every((x) => x.hasAttribute(\"hidden\"));\r\n }\r\n\r\n /** @private */\r\n #initialize() {\r\n this.#pressedController.observe(this._dragHandle);\r\n }\r\n\r\n /** @private */\r\n #initBreakpointMonitoring(): void {\r\n this.#breakpointUnobserve = M3eBreakpointObserver.observe([Breakpoint.XSmall], (matches) => {\r\n this._orientation = matches.get(Breakpoint.XSmall) ? \"vertical\" : \"horizontal\";\r\n this.#updateOrientation();\r\n });\r\n }\r\n\r\n /** @private */\r\n #updateOrientation(): void {\r\n setCustomState(this, \"--vertical\", this.currentOrientation === \"vertical\");\r\n }\r\n\r\n /** @private */\r\n #clearOrientation(): void {\r\n deleteCustomState(this, \"--vertical\");\r\n this._orientation = undefined;\r\n this.#breakpointUnobserve?.();\r\n this.#breakpointUnobserve = undefined;\r\n }\r\n\r\n /** @private */\r\n #handlePointerDown(e: PointerEvent): void {\r\n if (e.pointerType === \"mouse\" && e.button > 1) return;\r\n if (this.disabled) return;\r\n\r\n this._dragHandle.setPointerCapture(e.pointerId);\r\n this.#valueChanged = false;\r\n\r\n let min = this.min;\r\n if (min === 0 && this.detents.length > 0) {\r\n const detent = this.#getClosestDetent(0);\r\n if (detent > -1) {\r\n min = this.#computeDetent(this.detents[detent]) ?? this.min;\r\n }\r\n }\r\n\r\n let max = this.max;\r\n if (max === 100 && this.detents.length > 0) {\r\n const detent = this.#getClosestDetent(100);\r\n if (detent > -1) {\r\n max = this.#computeDetent(this.detents[detent]) ?? this.max;\r\n }\r\n }\r\n\r\n this.#dragState = {\r\n startPos: this.currentOrientation === \"vertical\" ? e.clientY : e.clientX,\r\n startValue: this.value,\r\n cachedSize: this.currentOrientation === \"vertical\" ? this.clientHeight : this.clientWidth,\r\n min,\r\n max,\r\n };\r\n }\r\n\r\n /** @private */\r\n #handlePointerMove(e: PointerEvent): void {\r\n if (!this._dragHandle.hasPointerCapture(e.pointerId) || !this.#dragState) return;\r\n\r\n const pos = this.currentOrientation === \"vertical\" ? e.clientY : e.clientX;\r\n\r\n let delta =\r\n this.#dragState.cachedSize > 0 ? ((pos - this.#dragState.startPos) / this.#dragState.cachedSize) * 100 : 0;\r\n if (M3eDirectionality.current === \"rtl\" && this.currentOrientation !== \"vertical\") {\r\n delta = -delta;\r\n }\r\n\r\n let value = this.#dragState.startValue + delta;\r\n if (value < this.#dragState.min) {\r\n const overshoot = this.#dragState.min - value;\r\n const compressed = (this.overshootLimit * overshoot) / (overshoot + this.overshootLimit);\r\n value = this.#dragState.min - compressed;\r\n } else if (value > this.#dragState.max) {\r\n const overshoot = value - this.#dragState.max;\r\n const compressed = (this.overshootLimit * overshoot) / (overshoot + this.overshootLimit);\r\n value = this.#dragState.max + compressed;\r\n }\r\n\r\n if (this.#changeValue(value, false, true)) {\r\n this.#valueChanged = true;\r\n }\r\n }\r\n\r\n /** @private */\r\n #handlePointerUp(e: PointerEvent): void {\r\n if (e.pointerType === \"mouse\" && e.button > 1) return;\r\n if (this._dragHandle.hasPointerCapture(e.pointerId)) {\r\n this._dragHandle.releasePointerCapture(e.pointerId);\r\n this.#dragState = undefined;\r\n\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const value = this.#computeDetent(this.detents[detent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value, false);\r\n }\r\n } else if (this.value < this.min) {\r\n this.#snapToValue(this.min, false);\r\n } else if (this.value > this.max) {\r\n this.#snapToValue(this.max, false);\r\n }\r\n\r\n if (this.#valueChanged) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n this.#valueChanged = false;\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n #handleKeyDown(e: KeyboardEvent): void {\r\n const ltr = M3eDirectionality.current === \"ltr\" || this.currentOrientation === \"vertical\";\r\n switch (e.key) {\r\n case \"Up\":\r\n case \"ArrowUp\":\r\n case \"Left\":\r\n case \"ArrowLeft\": {\r\n e.preventDefault();\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = ltr ? this.#getNextLowerDetent(detent) : this.#getNextHigherDetent(detent);\r\n if (nextDetent !== detent && !this.#snapAnimation) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else if (this.step > 1) {\r\n if (!this.#snapAnimation) {\r\n this.#snapToValue(this.value + (ltr ? -this.step : this.step));\r\n }\r\n } else {\r\n this.#changeValue(this.value + (ltr ? -this.step : this.step));\r\n }\r\n break;\r\n }\r\n\r\n case \"Down\":\r\n case \"ArrowDown\":\r\n case \"Right\":\r\n case \"ArrowRight\": {\r\n e.preventDefault();\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = ltr ? this.#getNextHigherDetent(detent) : this.#getNextLowerDetent(detent);\r\n if (nextDetent !== detent && !this.#snapAnimation) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else if (this.step > 1) {\r\n if (!this.#snapAnimation) {\r\n this.#snapToValue(this.value + (ltr ? this.step : -this.step));\r\n }\r\n } else {\r\n this.#changeValue(this.value + (ltr ? this.step : -this.step));\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"Home\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const next = this.#getClosestDetent(this.min);\r\n if (next > -1) {\r\n this.#snapToValue(this.#computeDetent(this.detents[next])!);\r\n } else {\r\n this.#snapToValue(this.min);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"End\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const next = this.#getClosestDetent(this.max);\r\n if (next > -1) {\r\n this.#snapToValue(this.#computeDetent(this.detents[next])!);\r\n } else {\r\n this.#snapToValue(this.max);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"PageUp\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = this.#getNextLowerDetent(detent);\r\n if (nextDetent !== detent) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else {\r\n this.#snapToValue(this.value - Math.max(10, this.step));\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"PageDown\": {\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent >= 0) {\r\n const nextDetent = this.#getNextHigherDetent(detent);\r\n if (nextDetent !== detent) {\r\n const value = this.#computeDetent(this.detents[nextDetent]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n } else {\r\n this.#snapToValue(this.value + Math.max(10, this.step));\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"Enter\":\r\n if (!this.#snapAnimation) {\r\n this.#cycleDetent();\r\n }\r\n\r\n break;\r\n\r\n case \" \":\r\n e.preventDefault();\r\n if (!this.#snapAnimation) {\r\n this.#cycleDetent();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n /** @private */\r\n #changeValue(value: number, emitChange = true, allowOvershoot = false): boolean {\r\n this.#clearSnapAnimation();\r\n\r\n if (this.dispatchEvent(new Event(\"beforeinput\", { bubbles: true, cancelable: true }))) {\r\n if (!allowOvershoot) {\r\n value = Math.max(this.min, Math.min(this.max, value));\r\n }\r\n\r\n if (value != this.value) {\r\n this.value = value;\r\n this._base.style.setProperty(\"--_split-pane-value\", `${this.value}%`);\r\n\r\n this.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n if (emitChange) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** @private */\r\n #getClosestDetent(value: number): number {\r\n let closestDetent = -1;\r\n let closestDistance = Infinity;\r\n\r\n for (let i = 0; i < this.detents.length; i++) {\r\n const detent = this.#computeDetent(this.detents[i]);\r\n if (detent === undefined) continue;\r\n\r\n const distance = Math.abs(value - detent);\r\n if (distance < closestDistance) {\r\n closestDistance = distance;\r\n closestDetent = i;\r\n }\r\n }\r\n return closestDetent;\r\n }\r\n\r\n /** @private */\r\n #getNextHigherDetent(detentIndex: number): number {\r\n const currentValue = this.#computeDetent(this.detents[detentIndex]);\r\n if (currentValue === undefined) return detentIndex;\r\n\r\n let value = Infinity;\r\n let nextDetent = detentIndex;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === detentIndex) continue;\r\n const detent = this.#computeDetent(this.detents[i]);\r\n if (detent === undefined) continue;\r\n if (detent > currentValue && detent < value) {\r\n value = detent;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #getNextLowerDetent(detentIndex: number): number {\r\n const currentValue = this.#computeDetent(this.detents[detentIndex]);\r\n if (currentValue === undefined) return detentIndex;\r\n\r\n let value = -Infinity;\r\n let nextDetent = detentIndex;\r\n for (let i = 0; i < this.detents.length; i++) {\r\n if (i === detentIndex) continue;\r\n const detent = this.#computeDetent(this.detents[i]);\r\n if (detent === undefined) continue;\r\n if (detent < currentValue && detent > value) {\r\n value = detent;\r\n nextDetent = i;\r\n }\r\n }\r\n return nextDetent;\r\n }\r\n\r\n /** @private */\r\n #computeDetent(detent: string): number | undefined {\r\n const value = detent.endsWith(\"px\") ? this.clientWidth / parseFloat(detent) : parseFloat(detent);\r\n return !isNaN(value) ? value : undefined;\r\n }\r\n\r\n /** @private */\r\n #clearSnapAnimation(): void {\r\n this.#snapAnimation?.cancel();\r\n this.#snapAnimation = undefined;\r\n }\r\n\r\n /** @private */\r\n #snapToValue(value: number, emitChange = true): void {\r\n this.#clearSnapAnimation();\r\n\r\n value = Math.max(this.min, Math.min(this.max, value));\r\n if (value === this.value) return;\r\n\r\n if (!prefersReducedMotion()) {\r\n addCustomState(this, \"--animating\");\r\n\r\n this.#snapAnimation = this._base.animate(\r\n [{ \"--_split-pane-value\": `${this.value}%` }, { \"--_split-pane-value\": `${value}%` }],\r\n {\r\n duration: 250,\r\n easing: \"cubic-bezier(0.2, 0.0, 0, 1.0)\",\r\n },\r\n );\r\n this.#snapAnimation.onfinish = () => {\r\n this.#changeValue(value, emitChange);\r\n this.#snapAnimation = undefined;\r\n deleteCustomState(this, \"--animating\");\r\n };\r\n } else {\r\n this.#changeValue(value, emitChange);\r\n }\r\n }\r\n\r\n /** @private */\r\n #cycleDetent(): void {\r\n if (this.detents.length === 0) return;\r\n\r\n const detent = this.#getClosestDetent(this.value);\r\n if (detent === -1) return;\r\n\r\n let next = this.#getNextHigherDetent(detent);\r\n if (next === detent && this.wrapDetents) {\r\n next = this.#getClosestDetent(0);\r\n if (next === -1) return;\r\n }\r\n\r\n const value = this.#computeDetent(this.detents[next]);\r\n if (value !== undefined) {\r\n this.#snapToValue(value);\r\n }\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface HTMLElementTagNameMap {\r\n \"m3e-split-pane\": M3eSplitPaneElement;\r\n }\r\n}\r\n"],"names":["M3eSplitPaneElement","FormAssociated","Disabled","ReconnectedCallback","AttachInternals","LitElement","constructor","_M3eSplitPaneElement_breakpointUnobserve","set","_M3eSplitPaneElement_dragState","_M3eSplitPaneElement_valueChanged","_M3eSplitPaneElement_snapAnimation","_M3eSplitPaneElement_pressedController","PressedController","target","isPressedKey","key","minPressedDuration","callback","pressed","setCustomState","disabled","_M3eSplitPaneElement_startMutationController","MutationController","config","attributeFilter","__classPrivateFieldGet","_M3eSplitPaneElement_instances","_M3eSplitPaneElement_updatePaneVisibility","call","_M3eSplitPaneElement_endMutationController","value","min","max","overshootLimit","step","detents","wrapDetents","orientation","label","valueFormatter","dir","Math","round","currentOrientation","_orientation","WeakMap","WeakSet","formValue","toString","collapse","snapToValue","expand","detent","_M3eSplitPaneElement_getClosestDetent","_M3eSplitPaneElement_computeDetent","_M3eSplitPaneElement_snapToValue","_M3eSplitPaneElement_changeValue","disconnectedCallback","_M3eSplitPaneElement_clearOrientation","unobserve","_dragHandle","reconnectedCallback","_M3eSplitPaneElement_initialize","_M3eSplitPaneElement_initBreakpointMonitoring","willUpdate","changedProperties","has","undefined","_M3eSplitPaneElement_updateOrientation","updated","_changedProperties","_base","style","setProperty","firstUpdated","render","html","_M3eSplitPaneElement_handleStartSlotChange","_M3eSplitPaneElement_renderDragHandle","_M3eSplitPaneElement_handleEndSlotChange","ifDefined","M3eDirectionality","current","_M3eSplitPaneElement_handlePointerDown","_M3eSplitPaneElement_handlePointerUp","_M3eSplitPaneElement_handlePointerMove","_M3eSplitPaneElement_handleKeyDown","_M3eSplitPaneElement_cycleDetent","nothing","e","_M3eSplitPaneElement_handleSlotChange","slot","mutationController","state","targets","assignedElements","Array","_M3eSplitPaneElement_hasVisibleElements","element","HTMLElement","observe","pane","shadowRoot","querySelector","push","flatten","length","every","x","hasAttribute","__classPrivateFieldSet","M3eBreakpointObserver","Breakpoint","XSmall","matches","get","deleteCustomState","pointerType","button","setPointerCapture","pointerId","startPos","clientY","clientX","startValue","cachedSize","clientHeight","clientWidth","hasPointerCapture","pos","delta","overshoot","compressed","releasePointerCapture","dispatchEvent","Event","bubbles","ltr","preventDefault","nextDetent","_M3eSplitPaneElement_getNextLowerDetent","_M3eSplitPaneElement_getNextHigherDetent","next","emitChange","allowOvershoot","_M3eSplitPaneElement_clearSnapAnimation","cancelable","closestDetent","closestDistance","Infinity","i","distance","abs","detentIndex","currentValue","endsWith","parseFloat","isNaN","cancel","prefersReducedMotion","addCustomState","animate","duration","easing","onfinish","registerStyleSheet","css","styles","DesignToken","color","onSurface","unsafeCSS","motion","short4","standard","spring","fastEffects","outline","shape","corner","full","medium","__decorate","prototype","query","property","type","Number","attribute","converter","spaceSeparatedStringConverter","Boolean","customElement"],"mappings":"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"}