@m3e/web 2.4.0 → 2.5.0

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 (80) hide show
  1. package/README.md +9 -2
  2. package/dist/all.js +526 -67
  3. package/dist/all.js.map +1 -1
  4. package/dist/all.min.js +45 -45
  5. package/dist/all.min.js.map +1 -1
  6. package/dist/bottom-sheet.js +33 -6
  7. package/dist/bottom-sheet.js.map +1 -1
  8. package/dist/bottom-sheet.min.js +1 -1
  9. package/dist/bottom-sheet.min.js.map +1 -1
  10. package/dist/breadcrumb.js +303 -0
  11. package/dist/breadcrumb.js.map +1 -0
  12. package/dist/breadcrumb.min.js +7 -0
  13. package/dist/breadcrumb.min.js.map +1 -0
  14. package/dist/content-pane.js +69 -0
  15. package/dist/content-pane.js.map +1 -0
  16. package/dist/content-pane.min.js +7 -0
  17. package/dist/content-pane.min.js.map +1 -0
  18. package/dist/core-a11y.js +12 -9
  19. package/dist/core-a11y.js.map +1 -1
  20. package/dist/core-a11y.min.js +2 -2
  21. package/dist/core-a11y.min.js.map +1 -1
  22. package/dist/core.js +48 -4
  23. package/dist/core.js.map +1 -1
  24. package/dist/core.min.js +1 -1
  25. package/dist/core.min.js.map +1 -1
  26. package/dist/css-custom-data.json +282 -162
  27. package/dist/custom-elements.json +3319 -1874
  28. package/dist/html-custom-data.json +234 -127
  29. package/dist/list.js +37 -37
  30. package/dist/list.js.map +1 -1
  31. package/dist/list.min.js +1 -1
  32. package/dist/list.min.js.map +1 -1
  33. package/dist/split-pane.js +56 -15
  34. package/dist/split-pane.js.map +1 -1
  35. package/dist/split-pane.min.js +1 -1
  36. package/dist/split-pane.min.js.map +1 -1
  37. package/dist/src/all.d.ts +2 -0
  38. package/dist/src/all.d.ts.map +1 -1
  39. package/dist/src/bottom-sheet/BottomSheetElement.d.ts +8 -2
  40. package/dist/src/bottom-sheet/BottomSheetElement.d.ts.map +1 -1
  41. package/dist/src/breadcrumb/BreadcrumbElement.d.ts +47 -0
  42. package/dist/src/breadcrumb/BreadcrumbElement.d.ts.map +1 -0
  43. package/dist/src/breadcrumb/BreadcrumbItemButtonElement.d.ts +37 -0
  44. package/dist/src/breadcrumb/BreadcrumbItemButtonElement.d.ts.map +1 -0
  45. package/dist/src/breadcrumb/BreadcrumbItemCurrent.d.ts +3 -0
  46. package/dist/src/breadcrumb/BreadcrumbItemCurrent.d.ts.map +1 -0
  47. package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts +88 -0
  48. package/dist/src/breadcrumb/BreadcrumbItemElement.d.ts.map +1 -0
  49. package/dist/src/breadcrumb/index.d.ts +4 -0
  50. package/dist/src/breadcrumb/index.d.ts.map +1 -0
  51. package/dist/src/breadcrumb/isIconOnly.d.ts +3 -0
  52. package/dist/src/breadcrumb/isIconOnly.d.ts.map +1 -0
  53. package/dist/src/content-pane/ContentPaneElement.d.ts +44 -0
  54. package/dist/src/content-pane/ContentPaneElement.d.ts.map +1 -0
  55. package/dist/src/content-pane/index.d.ts +2 -0
  56. package/dist/src/content-pane/index.d.ts.map +1 -0
  57. package/dist/src/core/a11y/InteractivityChecker.d.ts +4 -2
  58. package/dist/src/core/a11y/InteractivityChecker.d.ts.map +1 -1
  59. package/dist/src/core/shared/mixins/LinkButton.d.ts +2 -1
  60. package/dist/src/core/shared/mixins/LinkButton.d.ts.map +1 -1
  61. package/dist/src/core/shared/utils/getScrollbarWidth.d.ts +7 -0
  62. package/dist/src/core/shared/utils/getScrollbarWidth.d.ts.map +1 -0
  63. package/dist/src/core/shared/utils/index.d.ts +1 -0
  64. package/dist/src/core/shared/utils/index.d.ts.map +1 -1
  65. package/dist/src/list/ListActionElement.d.ts +1 -0
  66. package/dist/src/list/ListActionElement.d.ts.map +1 -1
  67. package/dist/src/list/index.d.ts +0 -1
  68. package/dist/src/list/index.d.ts.map +1 -1
  69. package/dist/src/split-pane/SplitPaneElement.d.ts +6 -0
  70. package/dist/src/split-pane/SplitPaneElement.d.ts.map +1 -1
  71. package/dist/src/tree/TreeItemElement.d.ts.map +1 -1
  72. package/dist/tooltip.js +2 -2
  73. package/dist/tooltip.js.map +1 -1
  74. package/dist/tooltip.min.js +1 -1
  75. package/dist/tooltip.min.js.map +1 -1
  76. package/dist/tree.js +1 -2
  77. package/dist/tree.js.map +1 -1
  78. package/dist/tree.min.js +1 -1
  79. package/dist/tree.min.js.map +1 -1
  80. package/package.json +11 -1
@@ -11,7 +11,7 @@ import { FormAssociated, Disabled, ReconnectedCallback, AttachInternals, Pressed
11
11
  import { M3eBreakpointObserver, Breakpoint } from '@m3e/web/core/layout';
12
12
  import { M3eDirectionality } from '@m3e/web/core/bidi';
13
13
 
14
- var _M3eSplitPaneElement_instances, _M3eSplitPaneElement_breakpointUnobserve, _M3eSplitPaneElement_dragPos, _M3eSplitPaneElement_valueChanged, _M3eSplitPaneElement_cachedSize, _M3eSplitPaneElement_snapAnimation, _M3eSplitPaneElement_pressedController, _M3eSplitPaneElement_startMutationController, _M3eSplitPaneElement_endMutationController, _M3eSplitPaneElement_renderDragHandle, _M3eSplitPaneElement_handleStartSlotChange, _M3eSplitPaneElement_handleEndSlotChange, _M3eSplitPaneElement_handleSlotChange, _M3eSplitPaneElement_updatePaneVisibility, _M3eSplitPaneElement_hasVisibleElements, _M3eSplitPaneElement_initialize, _M3eSplitPaneElement_initBreakpointMonitoring, _M3eSplitPaneElement_updateOrientation, _M3eSplitPaneElement_clearOrientation, _M3eSplitPaneElement_handlePointerDown, _M3eSplitPaneElement_handlePointerMove, _M3eSplitPaneElement_handlePointerUp, _M3eSplitPaneElement_handleKeyDown, _M3eSplitPaneElement_changeValue, _M3eSplitPaneElement_getClosestDetent, _M3eSplitPaneElement_getNextHigherDetent, _M3eSplitPaneElement_getNextLowerDetent, _M3eSplitPaneElement_computeDetent, _M3eSplitPaneElement_clearSnapAnimation, _M3eSplitPaneElement_snapToValue, _M3eSplitPaneElement_cycleDetent;
14
+ var _M3eSplitPaneElement_instances, _M3eSplitPaneElement_breakpointUnobserve, _M3eSplitPaneElement_dragState, _M3eSplitPaneElement_valueChanged, _M3eSplitPaneElement_snapAnimation, _M3eSplitPaneElement_pressedController, _M3eSplitPaneElement_startMutationController, _M3eSplitPaneElement_endMutationController, _M3eSplitPaneElement_renderDragHandle, _M3eSplitPaneElement_handleStartSlotChange, _M3eSplitPaneElement_handleEndSlotChange, _M3eSplitPaneElement_handleSlotChange, _M3eSplitPaneElement_updatePaneVisibility, _M3eSplitPaneElement_hasVisibleElements, _M3eSplitPaneElement_initialize, _M3eSplitPaneElement_initBreakpointMonitoring, _M3eSplitPaneElement_updateOrientation, _M3eSplitPaneElement_clearOrientation, _M3eSplitPaneElement_handlePointerDown, _M3eSplitPaneElement_handlePointerMove, _M3eSplitPaneElement_handlePointerUp, _M3eSplitPaneElement_handleKeyDown, _M3eSplitPaneElement_changeValue, _M3eSplitPaneElement_getClosestDetent, _M3eSplitPaneElement_getNextHigherDetent, _M3eSplitPaneElement_getNextLowerDetent, _M3eSplitPaneElement_computeDetent, _M3eSplitPaneElement_clearSnapAnimation, _M3eSplitPaneElement_snapToValue, _M3eSplitPaneElement_cycleDetent;
15
15
  /**
16
16
  * A dual-view layout that separates content with a movable drag handle.
17
17
  * @description
@@ -60,6 +60,7 @@ var _M3eSplitPaneElement_instances, _M3eSplitPaneElement_breakpointUnobserve, _M
60
60
  * @attr max - A fractional value, between 0 and 100, indicating the maximum size of the start pane.
61
61
  * @attr min - A fractional value, between 0 and 100, indicating the minimum size of the start pane.
62
62
  * @attr orientation - The orientation of the split.
63
+ * @attr overshoot-limit - A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.
63
64
  * @attr step - A fractional value, between 0 and 100, indicating the increment by which to adjust the value when resized via keyboard.
64
65
  * @attr value - A fractional value, between 0 and 100, indicating the size of the start pane.
65
66
  * @attr wrap-detents - Whether cycling through detents will wrap.
@@ -88,12 +89,10 @@ let M3eSplitPaneElement = class M3eSplitPaneElement extends FormAssociated(Disab
88
89
  /** @private */
89
90
  _M3eSplitPaneElement_breakpointUnobserve.set(this, void 0);
90
91
  /** @private */
91
- _M3eSplitPaneElement_dragPos.set(this, 0);
92
+ _M3eSplitPaneElement_dragState.set(this, void 0);
92
93
  /** @private */
93
94
  _M3eSplitPaneElement_valueChanged.set(this, false);
94
95
  /** @private */
95
- _M3eSplitPaneElement_cachedSize.set(this, 0);
96
- /** @private */
97
96
  _M3eSplitPaneElement_snapAnimation.set(this, void 0);
98
97
  /** @private */
99
98
  _M3eSplitPaneElement_pressedController.set(this, new PressedController(this, {
@@ -133,6 +132,11 @@ let M3eSplitPaneElement = class M3eSplitPaneElement extends FormAssociated(Disab
133
132
  * @default 100
134
133
  */
135
134
  this.max = 100;
135
+ /**
136
+ * A fractional value, between 0 and 100, indicating the maximum visual overshoot allowed when dragging past the minimum or maximum size.
137
+ * @default 4
138
+ */
139
+ this.overshootLimit = 4;
136
140
  /**
137
141
  * A fractional value, between 0 and 100, indicating the increment by which to adjust the value when resized via keyboard.
138
142
  * @default 1
@@ -179,7 +183,7 @@ let M3eSplitPaneElement = class M3eSplitPaneElement extends FormAssociated(Disab
179
183
  return this._orientation ?? (this.orientation !== "vertical" ? "horizontal" : "vertical");
180
184
  }
181
185
  /** @inheritdoc */
182
- get [(_M3eSplitPaneElement_breakpointUnobserve = new WeakMap(), _M3eSplitPaneElement_dragPos = new WeakMap(), _M3eSplitPaneElement_valueChanged = new WeakMap(), _M3eSplitPaneElement_cachedSize = new WeakMap(), _M3eSplitPaneElement_snapAnimation = new WeakMap(), _M3eSplitPaneElement_pressedController = new WeakMap(), _M3eSplitPaneElement_startMutationController = new WeakMap(), _M3eSplitPaneElement_endMutationController = new WeakMap(), _M3eSplitPaneElement_instances = new WeakSet(), formValue)]() {
186
+ get [(_M3eSplitPaneElement_breakpointUnobserve = new WeakMap(), _M3eSplitPaneElement_dragState = new WeakMap(), _M3eSplitPaneElement_valueChanged = new WeakMap(), _M3eSplitPaneElement_snapAnimation = new WeakMap(), _M3eSplitPaneElement_pressedController = new WeakMap(), _M3eSplitPaneElement_startMutationController = new WeakMap(), _M3eSplitPaneElement_endMutationController = new WeakMap(), _M3eSplitPaneElement_instances = new WeakSet(), formValue)]() {
183
187
  return this.value?.toString() ?? null;
184
188
  }
185
189
  /**
@@ -308,18 +312,46 @@ _M3eSplitPaneElement_handlePointerDown = function _M3eSplitPaneElement_handlePoi
308
312
  if (this.disabled) return;
309
313
  this._dragHandle.setPointerCapture(e.pointerId);
310
314
  __classPrivateFieldSet(this, _M3eSplitPaneElement_valueChanged, false, "f");
311
- __classPrivateFieldSet(this, _M3eSplitPaneElement_dragPos, this.currentOrientation === "vertical" ? e.clientY : e.clientX, "f");
312
- __classPrivateFieldSet(this, _M3eSplitPaneElement_cachedSize, this.currentOrientation === "vertical" ? this.clientHeight : this.clientWidth, "f");
315
+ let min = this.min;
316
+ if (min === 0 && this.detents.length > 0) {
317
+ const detent = __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_getClosestDetent).call(this, 0);
318
+ if (detent > -1) {
319
+ min = __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_computeDetent).call(this, this.detents[detent]) ?? this.min;
320
+ }
321
+ }
322
+ let max = this.max;
323
+ if (max === 100 && this.detents.length > 0) {
324
+ const detent = __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_getClosestDetent).call(this, 100);
325
+ if (detent > -1) {
326
+ max = __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_computeDetent).call(this, this.detents[detent]) ?? this.max;
327
+ }
328
+ }
329
+ __classPrivateFieldSet(this, _M3eSplitPaneElement_dragState, {
330
+ startPos: this.currentOrientation === "vertical" ? e.clientY : e.clientX,
331
+ startValue: this.value,
332
+ cachedSize: this.currentOrientation === "vertical" ? this.clientHeight : this.clientWidth,
333
+ min,
334
+ max
335
+ }, "f");
313
336
  };
314
337
  _M3eSplitPaneElement_handlePointerMove = function _M3eSplitPaneElement_handlePointerMove(e) {
315
- if (!this._dragHandle.hasPointerCapture(e.pointerId)) return;
338
+ if (!this._dragHandle.hasPointerCapture(e.pointerId) || !__classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f")) return;
316
339
  const pos = this.currentOrientation === "vertical" ? e.clientY : e.clientX;
317
- let delta = __classPrivateFieldGet(this, _M3eSplitPaneElement_cachedSize, "f") > 0 ? (pos - __classPrivateFieldGet(this, _M3eSplitPaneElement_dragPos, "f")) / __classPrivateFieldGet(this, _M3eSplitPaneElement_cachedSize, "f") * 100 : 0;
340
+ let delta = __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").cachedSize > 0 ? (pos - __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").startPos) / __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").cachedSize * 100 : 0;
318
341
  if (M3eDirectionality.current === "rtl" && this.currentOrientation !== "vertical") {
319
342
  delta = -delta;
320
343
  }
321
- if (__classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_changeValue).call(this, this.value + delta, false)) {
322
- __classPrivateFieldSet(this, _M3eSplitPaneElement_dragPos, pos, "f");
344
+ let value = __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").startValue + delta;
345
+ if (value < __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").min) {
346
+ const overshoot = __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").min - value;
347
+ const compressed = this.overshootLimit * overshoot / (overshoot + this.overshootLimit);
348
+ value = __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").min - compressed;
349
+ } else if (value > __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").max) {
350
+ const overshoot = value - __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").max;
351
+ const compressed = this.overshootLimit * overshoot / (overshoot + this.overshootLimit);
352
+ value = __classPrivateFieldGet(this, _M3eSplitPaneElement_dragState, "f").max + compressed;
353
+ }
354
+ if (__classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_changeValue).call(this, value, false, true)) {
323
355
  __classPrivateFieldSet(this, _M3eSplitPaneElement_valueChanged, true, "f");
324
356
  }
325
357
  };
@@ -327,14 +359,17 @@ _M3eSplitPaneElement_handlePointerUp = function _M3eSplitPaneElement_handlePoint
327
359
  if (e.pointerType === "mouse" && e.button > 1) return;
328
360
  if (this._dragHandle.hasPointerCapture(e.pointerId)) {
329
361
  this._dragHandle.releasePointerCapture(e.pointerId);
330
- __classPrivateFieldSet(this, _M3eSplitPaneElement_dragPos, 0, "f");
331
- __classPrivateFieldSet(this, _M3eSplitPaneElement_cachedSize, 0, "f");
362
+ __classPrivateFieldSet(this, _M3eSplitPaneElement_dragState, undefined, "f");
332
363
  const detent = __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_getClosestDetent).call(this, this.value);
333
364
  if (detent >= 0) {
334
365
  const value = __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_computeDetent).call(this, this.detents[detent]);
335
366
  if (value !== undefined) {
336
367
  __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_snapToValue).call(this, value, false);
337
368
  }
369
+ } else if (this.value < this.min) {
370
+ __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_snapToValue).call(this, this.min, false);
371
+ } else if (this.value > this.max) {
372
+ __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_snapToValue).call(this, this.max, false);
338
373
  }
339
374
  if (__classPrivateFieldGet(this, _M3eSplitPaneElement_valueChanged, "f")) {
340
375
  this.dispatchEvent(new Event("change", {
@@ -473,9 +508,11 @@ _M3eSplitPaneElement_handleKeyDown = function _M3eSplitPaneElement_handleKeyDown
473
508
  break;
474
509
  }
475
510
  };
476
- _M3eSplitPaneElement_changeValue = function _M3eSplitPaneElement_changeValue(value, emitChange = true) {
511
+ _M3eSplitPaneElement_changeValue = function _M3eSplitPaneElement_changeValue(value, emitChange = true, allowOvershoot = false) {
477
512
  __classPrivateFieldGet(this, _M3eSplitPaneElement_instances, "m", _M3eSplitPaneElement_clearSnapAnimation).call(this);
478
- value = Math.max(this.min, Math.min(this.max, value));
513
+ if (!allowOvershoot) {
514
+ value = Math.max(this.min, Math.min(this.max, value));
515
+ }
479
516
  if (value != this.value) {
480
517
  const prev = this.value;
481
518
  this.value = value;
@@ -607,6 +644,10 @@ __decorate([property({
607
644
  __decorate([property({
608
645
  type: Number
609
646
  })], M3eSplitPaneElement.prototype, "max", void 0);
647
+ __decorate([property({
648
+ attribute: "overshoot-limit",
649
+ type: Number
650
+ })], M3eSplitPaneElement.prototype, "overshootLimit", void 0);
610
651
  __decorate([property({
611
652
  type: Number
612
653
  })], M3eSplitPaneElement.prototype, "step", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"split-pane.js","sources":["../../src/split-pane/SplitPaneElement.ts"],"sourcesContent":["import { css, CSSResultGroup, html, LitElement, 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 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 input - Fired continuously while the user adjusts the drag handle.\r\n * @fires change - Fired 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(:state(-vertical))) .base {\r\n flex-direction: row;\r\n }\r\n :host(:state(-vertical)) .base {\r\n flex-direction: column;\r\n }\r\n :host(:state(-with-start):state(-with-end)) .base:not(:has(.drag-handle[hidden])) .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(:state(-with-start):state(-with-end)) .base:has(.drag-handle[hidden]) .start {\r\n flex: 0 1 var(--_split-pane-value);\r\n }\r\n :host(:not(:state(-with-end))) .start {\r\n flex: 1 1 auto;\r\n }\r\n :host(:state(-with-end)) .end {\r\n flex: 1 1 auto;\r\n }\r\n :host(:not(:state(-with-end))) .end {\r\n display: none;\r\n }\r\n :host(:not(:state(-animating))) .start[inert],\r\n :host(:not(:state(-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(:state(-with-start)), :not(:state(-with-end)))) .drag-handle,\r\n .drag-handle[hidden] {\r\n display: none;\r\n }\r\n :host(:not(:state(-pressed))) .drag-handle:not([aria-disabled]) {\r\n cursor: grab;\r\n }\r\n :host(:state(-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(:state(-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(:state(-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(:state(-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(:state(-vertical)):not(:state(-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(:state(-vertical)):state(-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(:state(-vertical)) .drag-handle {\r\n height: var(--m3e-split-pane-drag-handle-container-width, 1.5rem);\r\n }\r\n :host(:state(-vertical):not(:state(-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(:state(-vertical):state(-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(:state(-pressed)) .handle,\r\n :host(:not(:state(-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 */ #dragPos = 0;\r\n /** @private */ #valueChanged = false;\r\n /** @private */ #cachedSize = 0;\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 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 ?hidden=\"${this.disabled}\"\r\n tabindex=\"0\"\r\n aria-label=\"${this.label}\"\r\n aria-controls=\"start\"\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 <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 this.#dragPos = this.currentOrientation === \"vertical\" ? e.clientY : e.clientX;\r\n this.#cachedSize = this.currentOrientation === \"vertical\" ? this.clientHeight : this.clientWidth;\r\n }\r\n\r\n /** @private */\r\n #handlePointerMove(e: PointerEvent): void {\r\n if (!this._dragHandle.hasPointerCapture(e.pointerId)) return;\r\n\r\n const pos = this.currentOrientation === \"vertical\" ? e.clientY : e.clientX;\r\n let delta = this.#cachedSize > 0 ? ((pos - this.#dragPos) / this.#cachedSize) * 100 : 0;\r\n if (M3eDirectionality.current === \"rtl\" && this.currentOrientation !== \"vertical\") {\r\n delta = -delta;\r\n }\r\n if (this.#changeValue(this.value + delta, false)) {\r\n this.#dragPos = pos;\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.#dragPos = 0;\r\n this.#cachedSize = 0;\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 }\r\n\r\n if (this.#valueChanged) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true, composed: 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): boolean {\r\n this.#clearSnapAnimation();\r\n\r\n value = Math.max(this.min, Math.min(this.max, value));\r\n if (value != this.value) {\r\n const prev = this.value;\r\n this.value = value;\r\n\r\n if (this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true, cancelable: true }))) {\r\n this._base.style.setProperty(\"--_split-pane-value\", `${this.value}%`);\r\n if (emitChange) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true, composed: true }));\r\n }\r\n return true;\r\n } else {\r\n this.value = prev;\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_dragPos","_M3eSplitPaneElement_valueChanged","_M3eSplitPaneElement_cachedSize","_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","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","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","clientY","clientX","clientHeight","clientWidth","hasPointerCapture","pos","delta","releasePointerCapture","dispatchEvent","Event","bubbles","composed","ltr","preventDefault","nextDetent","_M3eSplitPaneElement_getNextLowerDetent","_M3eSplitPaneElement_getNextHigherDetent","next","emitChange","_M3eSplitPaneElement_clearSnapAnimation","prev","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, 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 input - Fired continuously while the user adjusts the drag handle.\r\n * @fires change - Fired 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(:state(-vertical))) .base {\r\n flex-direction: row;\r\n }\r\n :host(:state(-vertical)) .base {\r\n flex-direction: column;\r\n }\r\n :host(:state(-with-start):state(-with-end)) .base:not(:has(.drag-handle[hidden])) .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(:state(-with-start):state(-with-end)) .base:has(.drag-handle[hidden]) .start {\r\n flex: 0 1 var(--_split-pane-value);\r\n }\r\n :host(:not(:state(-with-end))) .start {\r\n flex: 1 1 auto;\r\n }\r\n :host(:state(-with-end)) .end {\r\n flex: 1 1 auto;\r\n }\r\n :host(:not(:state(-with-end))) .end {\r\n display: none;\r\n }\r\n :host(:not(:state(-animating))) .start[inert],\r\n :host(:not(:state(-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(:state(-with-start)), :not(:state(-with-end)))) .drag-handle,\r\n .drag-handle[hidden] {\r\n display: none;\r\n }\r\n :host(:not(:state(-pressed))) .drag-handle:not([aria-disabled]) {\r\n cursor: grab;\r\n }\r\n :host(:state(-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(:state(-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(:state(-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(:state(-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(:state(-vertical)):not(:state(-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(:state(-vertical)):state(-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(:state(-vertical)) .drag-handle {\r\n height: var(--m3e-split-pane-drag-handle-container-width, 1.5rem);\r\n }\r\n :host(:state(-vertical):not(:state(-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(:state(-vertical):state(-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(:state(-pressed)) .handle,\r\n :host(:not(:state(-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 ?hidden=\"${this.disabled}\"\r\n tabindex=\"0\"\r\n aria-label=\"${this.label}\"\r\n aria-controls=\"start\"\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 <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, composed: 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 (!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 const prev = this.value;\r\n this.value = value;\r\n\r\n if (this.dispatchEvent(new Event(\"input\", { bubbles: true, composed: true, cancelable: true }))) {\r\n this._base.style.setProperty(\"--_split-pane-value\", `${this.value}%`);\r\n if (emitChange) {\r\n this.dispatchEvent(new Event(\"change\", { bubbles: true, composed: true }));\r\n }\r\n return true;\r\n } else {\r\n this.value = prev;\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","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","composed","ltr","preventDefault","nextDetent","_M3eSplitPaneElement_getNextLowerDetent","_M3eSplitPaneElement_getNextHigherDetent","next","emitChange","allowOvershoot","_M3eSplitPaneElement_clearSnapAnimation","prev","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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"}
@@ -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{__classPrivateFieldGet as t,__classPrivateFieldSet as e,__decorate as i}from"tslib";import{LitElement as s,html as a,css as n,unsafeCSS as h}from"lit";import{state as l,query as r,property as o}from"lit/decorators.js";import{ifDefined as c}from"lit/directives/if-defined.js";import{FormAssociated as d,Disabled as p,ReconnectedCallback as m,AttachInternals as u,PressedController as v,setCustomState as f,MutationController as g,formValue as b,deleteCustomState as w,prefersReducedMotion as y,addCustomState as $,registerStyleSheet as k,DesignToken as x,spaceSeparatedStringConverter as _,customElement as M}from"@m3e/web/core";import{M3eBreakpointObserver as D,Breakpoint as z}from"@m3e/web/core/layout";import{M3eDirectionality as E}from"@m3e/web/core/bidi";var W,P,H,O,T,C,S,F,L,U,A,N,R,I,X,j,B,V,q,Y,K,G,J,Q,Z,tt,et,it,st,at,nt;let ht=class extends(d(p(m(u(s))))){constructor(){super(...arguments),W.add(this),P.set(this,void 0),H.set(this,0),O.set(this,!1),T.set(this,0),C.set(this,void 0),S.set(this,new v(this,{target:null,isPressedKey:t=>" "===t,minPressedDuration:150,callback:t=>f(this,"-pressed",t&&!this.disabled)})),F.set(this,new g(this,{target:null,config:{attributeFilter:["hidden"]},callback:()=>t(this,W,"m",I).call(this,"start")})),L.set(this,new g(this,{target:null,config:{attributeFilter:["hidden"]},callback:()=>t(this,W,"m",I).call(this,"end")})),this.value=50,this.min=0,this.max=100,this.step=1,this.detents=[],this.wrapDetents=!1,this.orientation="horizontal",this.label="Resize panes",this.valueFormatter=(t,e,i)=>{if((t=Math.round(t))>=48&&t<=52)return"Panes equally sized";switch(t){case 0:return"horizontal"===e?"ltr"===i?"Left pane collapsed":"Right pane collapsed":"Top pane collapsed";case 100:return"horizontal"===e?"ltr"===i?"Right pane collapsed":"Left pane collapsed":"Bottom pane collapsed";default:return"horizontal"===e?"ltr"===i?`Left pane ${t}%, right pane ${100-t}%`:`Left pane ${100-t}%, right pane ${t}%`:`Top pane ${t}%, bottom pane ${100-t}%`}}}get currentOrientation(){return this._orientation??("vertical"!==this.orientation?"horizontal":"vertical")}get[(P=new WeakMap,H=new WeakMap,O=new WeakMap,T=new WeakMap,C=new WeakMap,S=new WeakMap,F=new WeakMap,L=new WeakMap,W=new WeakSet,b)](){return this.value?.toString()??null}collapse(){this.snapToValue(this.min)}expand(){this.snapToValue(this.max)}snapToValue(e){const i=t(this,W,"m",Z).call(this,e);e=i>-1?t(this,W,"m",it).call(this,this.detents[i]):e,t(this,C,"f")?t(this,W,"m",Q).call(this,e):t(this,W,"m",at).call(this,e)}disconnectedCallback(){super.disconnectedCallback(),t(this,W,"m",q).call(this),t(this,S,"f").unobserve(this._dragHandle)}reconnectedCallback(){super.reconnectedCallback(),t(this,W,"m",j).call(this),"auto"===this.orientation&&t(this,W,"m",B).call(this)}willUpdate(e){super.willUpdate(e),e.has("orientation")&&(t(this,P,"f")?.call(this),"auto"===this.orientation?t(this,W,"m",B).call(this):(this._orientation=void 0,t(this,W,"m",V).call(this)))}updated(t){super.updated(t),t.has("value")&&this._base.style.setProperty("--_split-pane-value",`${this.value}%`)}firstUpdated(e){super.firstUpdated(e),t(this,W,"m",j).call(this)}render(){return a`<div class="base"><div class="start" id="start" ?inert="${this.value<=0}"><slot name="start" @slotchange="${t(this,W,"m",A)}"></slot></div>${t(this,W,"m",U).call(this)}<div class="end" ?inert="${this.value>=100}"><slot name="end" @slotchange="${t(this,W,"m",N)}"></slot></div></div>`}};U=function(){return a`<div id="drag-handle" class="drag-handle" role="separator" ?hidden="${this.disabled}" tabindex="0" aria-label="${this.label}" aria-controls="start" aria-orientation="${"horizontal"===this.currentOrientation?"vertical":"horizontal"}" aria-valuemin="${this.min}" aria-valuemax="${this.max}" aria-valuenow="${this.value}" aria-valuetext="${c(this.valueFormatter?.(this.value,this.currentOrientation,E.current))}" @pointerdown="${t(this,W,"m",Y)}" @pointerup="${t(this,W,"m",G)}" @pointermove="${t(this,W,"m",K)}" @keydown="${t(this,W,"m",J)}" @dblclick="${t(this,W,"m",nt)}"><div class="handle"><m3e-focus-ring for="drag-handle"></m3e-focus-ring><m3e-state-layer for="drag-handle"></m3e-state-layer></div><div class="touch"></div></div>`},A=function(e){t(this,W,"m",R).call(this,e.target,t(this,F,"f"),"-with-start")},N=function(e){t(this,W,"m",R).call(this,e.target,t(this,L,"f"),"-with-end")},R=function(e,i,s){for(const t of i.targets)i.unobserve(t);const a=new Array;f(this,s,t(this,W,"m",X).call(this,e,a));for(const t of a)t instanceof HTMLElement&&i.observe(t)},I=function(e){f(this,`-with-${e}`,t(this,W,"m",X).call(this,this.shadowRoot?.querySelector(`slot[name='${e}']`)))},X=function(t,e){return(e=e??[]).push(...t?.assignedElements({flatten:!0})??[]),e.length>0&&!e.every(t=>t.hasAttribute("hidden"))},j=function(){t(this,S,"f").observe(this._dragHandle)},B=function(){e(this,P,D.observe([z.XSmall],e=>{this._orientation=e.get(z.XSmall)?"vertical":"horizontal",t(this,W,"m",V).call(this)}),"f")},V=function(){f(this,"-vertical","vertical"===this.currentOrientation)},q=function(){w(this,"-vertical"),this._orientation=void 0,t(this,P,"f")?.call(this),e(this,P,void 0,"f")},Y=function(t){"mouse"===t.pointerType&&t.button>1||this.disabled||(this._dragHandle.setPointerCapture(t.pointerId),e(this,O,!1,"f"),e(this,H,"vertical"===this.currentOrientation?t.clientY:t.clientX,"f"),e(this,T,"vertical"===this.currentOrientation?this.clientHeight:this.clientWidth,"f"))},K=function(i){if(!this._dragHandle.hasPointerCapture(i.pointerId))return;const s="vertical"===this.currentOrientation?i.clientY:i.clientX;let a=t(this,T,"f")>0?(s-t(this,H,"f"))/t(this,T,"f")*100:0;"rtl"===E.current&&"vertical"!==this.currentOrientation&&(a=-a),t(this,W,"m",Q).call(this,this.value+a,!1)&&(e(this,H,s,"f"),e(this,O,!0,"f"))},G=function(i){if(!("mouse"===i.pointerType&&i.button>1)&&this._dragHandle.hasPointerCapture(i.pointerId)){this._dragHandle.releasePointerCapture(i.pointerId),e(this,H,0,"f"),e(this,T,0,"f");const s=t(this,W,"m",Z).call(this,this.value);if(s>=0){const e=t(this,W,"m",it).call(this,this.detents[s]);void 0!==e&&t(this,W,"m",at).call(this,e,!1)}t(this,O,"f")&&(this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),e(this,O,!1,"f"))}},J=function(e){const i="ltr"===E.current||"vertical"===this.currentOrientation;switch(e.key){case"Up":case"ArrowUp":case"Left":case"ArrowLeft":{e.preventDefault();const s=t(this,W,"m",Z).call(this,this.value);if(s>=0){const e=i?t(this,W,"m",et).call(this,s):t(this,W,"m",tt).call(this,s);if(e!==s&&!t(this,C,"f")){const i=t(this,W,"m",it).call(this,this.detents[e]);void 0!==i&&t(this,W,"m",at).call(this,i)}}else this.step>1?t(this,C,"f")||t(this,W,"m",at).call(this,this.value+(i?-this.step:this.step)):t(this,W,"m",Q).call(this,this.value+(i?-this.step:this.step));break}case"Down":case"ArrowDown":case"Right":case"ArrowRight":{e.preventDefault();const s=t(this,W,"m",Z).call(this,this.value);if(s>=0){const e=i?t(this,W,"m",tt).call(this,s):t(this,W,"m",et).call(this,s);if(e!==s&&!t(this,C,"f")){const i=t(this,W,"m",it).call(this,this.detents[e]);void 0!==i&&t(this,W,"m",at).call(this,i)}}else this.step>1?t(this,C,"f")||t(this,W,"m",at).call(this,this.value+(i?this.step:-this.step)):t(this,W,"m",Q).call(this,this.value+(i?this.step:-this.step));break}case"Home":if(e.preventDefault(),!t(this,C,"f")){const e=t(this,W,"m",Z).call(this,this.min);e>-1?t(this,W,"m",at).call(this,t(this,W,"m",it).call(this,this.detents[e])):t(this,W,"m",at).call(this,this.min)}break;case"End":if(e.preventDefault(),!t(this,C,"f")){const e=t(this,W,"m",Z).call(this,this.max);e>-1?t(this,W,"m",at).call(this,t(this,W,"m",it).call(this,this.detents[e])):t(this,W,"m",at).call(this,this.max)}break;case"PageUp":if(e.preventDefault(),!t(this,C,"f")){const e=t(this,W,"m",Z).call(this,this.value);if(e>=0){const i=t(this,W,"m",et).call(this,e);if(i!==e){const e=t(this,W,"m",it).call(this,this.detents[i]);void 0!==e&&t(this,W,"m",at).call(this,e)}}else t(this,W,"m",at).call(this,this.value-Math.max(10,this.step))}break;case"PageDown":if(e.preventDefault(),!t(this,C,"f")){const e=t(this,W,"m",Z).call(this,this.value);if(e>=0){const i=t(this,W,"m",tt).call(this,e);if(i!==e){const e=t(this,W,"m",it).call(this,this.detents[i]);void 0!==e&&t(this,W,"m",at).call(this,e)}}else t(this,W,"m",at).call(this,this.value+Math.max(10,this.step))}break;case"Enter":t(this,C,"f")||t(this,W,"m",nt).call(this);break;case" ":e.preventDefault(),t(this,C,"f")||t(this,W,"m",nt).call(this)}},Q=function(e,i=!0){if(t(this,W,"m",st).call(this),(e=Math.max(this.min,Math.min(this.max,e)))!=this.value){const t=this.value;if(this.value=e,this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0,cancelable:!0})))return this._base.style.setProperty("--_split-pane-value",`${this.value}%`),i&&this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),!0;this.value=t}return!1},Z=function(e){let i=-1,s=1/0;for(let a=0;a<this.detents.length;a++){const n=t(this,W,"m",it).call(this,this.detents[a]);if(void 0===n)continue;const h=Math.abs(e-n);h<s&&(s=h,i=a)}return i},tt=function(e){const i=t(this,W,"m",it).call(this,this.detents[e]);if(void 0===i)return e;let s=1/0,a=e;for(let n=0;n<this.detents.length;n++){if(n===e)continue;const h=t(this,W,"m",it).call(this,this.detents[n]);void 0!==h&&(h>i&&h<s&&(s=h,a=n))}return a},et=function(e){const i=t(this,W,"m",it).call(this,this.detents[e]);if(void 0===i)return e;let s=-1/0,a=e;for(let n=0;n<this.detents.length;n++){if(n===e)continue;const h=t(this,W,"m",it).call(this,this.detents[n]);void 0!==h&&(h<i&&h>s&&(s=h,a=n))}return a},it=function(t){const e=t.endsWith("px")?this.clientWidth/parseFloat(t):parseFloat(t);return isNaN(e)?void 0:e},st=function(){t(this,C,"f")?.cancel(),e(this,C,void 0,"f")},at=function(i,s=!0){t(this,W,"m",st).call(this),(i=Math.max(this.min,Math.min(this.max,i)))!==this.value&&(y()?t(this,W,"m",Q).call(this,i,s):($(this,"-animating"),e(this,C,this._base.animate([{"--_split-pane-value":`${this.value}%`},{"--_split-pane-value":`${i}%`}],{duration:250,easing:"cubic-bezier(0.2, 0.0, 0, 1.0)"}),"f"),t(this,C,"f").onfinish=()=>{t(this,W,"m",Q).call(this,i,s),e(this,C,void 0,"f"),w(this,"-animating")}))},nt=function(){if(0===this.detents.length)return;const e=t(this,W,"m",Z).call(this,this.value);if(-1===e)return;let i=t(this,W,"m",tt).call(this,e);if(i===e&&this.wrapDetents&&(i=t(this,W,"m",Z).call(this,0),-1===i))return;const s=t(this,W,"m",it).call(this,this.detents[i]);void 0!==s&&t(this,W,"m",at).call(this,s)},k(n`@property --_split-pane-value { syntax: "<length-percentage>"; inherits: true; initial-value: 50%; }</length-percentage>`),ht.styles=n`:host { display: block; } .base { display: flex; width: 100%; height: 100%; overflow: hidden; } :host(:not(:state(-vertical))) .base { flex-direction: row; } :host(:state(-vertical)) .base { flex-direction: column; } :host(:state(-with-start):state(-with-end)) .base:not(:has(.drag-handle[hidden])) .start { flex: 0 1 calc(var(--_split-pane-value) - calc(var(--m3e-split-pane-drag-handle-container-width, 1.5rem) / 2)); } :host(:state(-with-start):state(-with-end)) .base:has(.drag-handle[hidden]) .start { flex: 0 1 var(--_split-pane-value); } :host(:not(:state(-with-end))) .start { flex: 1 1 auto; } :host(:state(-with-end)) .end { flex: 1 1 auto; } :host(:not(:state(-with-end))) .end { display: none; } :host(:not(:state(-animating))) .start[inert], :host(:not(:state(-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, ${x.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, ${x.color.onSurface}); --m3e-state-layer-focus-opacity: var(--m3e-split-pane-drag-handle-focus-opacity, 10%); } :host(:is(:not(:state(-with-start)), :not(:state(-with-end)))) .drag-handle, .drag-handle[hidden] { display: none; } :host(:not(:state(-pressed))) .drag-handle:not([aria-disabled]) { cursor: grab; } :host(:state(-pressed)) .drag-handle:not([aria-disabled]) { cursor: grabbing; } .handle { position: relative; transition: ${h(`background-color ${x.motion.duration.short4} ${x.motion.easing.standard},\n width ${x.motion.spring.fastEffects}, height ${x.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(:state(-pressed))) .handle { background-color: var(--m3e-split-pane-drag-handle-color, ${x.color.outline}); border-radius: var(--m3e-split-pane-drag-handle-shape, ${x.shape.corner.full}); } :host(:state(-pressed)) .handle { background-color: var(--m3e-split-pane-drag-handle-pressed-color, ${x.color.onSurface}); border-radius: var(--m3e-split-pane-drag-handle-pressed-shape, ${x.shape.corner.medium}); } :host(:not(:state(-vertical))) .drag-handle { flex-direction: column; width: var(--m3e-split-pane-drag-handle-container-width, 1.5rem); } :host(:not(:state(-vertical)):not(:state(-pressed))) .handle { width: var(--m3e-split-pane-drag-handle-width, 0.25rem); height: var(--m3e-split-pane-drag-handle-height, 3rem); } :host(:not(:state(-vertical)):state(-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(:state(-vertical)) .drag-handle { height: var(--m3e-split-pane-drag-handle-container-width, 1.5rem); } :host(:state(-vertical):not(:state(-pressed))) .handle { width: var(--m3e-split-pane-drag-handle-height, 3rem); height: var(--m3e-split-pane-drag-handle-width, 0.25rem); } :host(:state(-vertical):state(-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(:state(-pressed)) .handle, :host(:not(:state(-pressed))) .handle { background-color: ButtonText; } }`,i([l()],ht.prototype,"_orientation",void 0),i([r(".base")],ht.prototype,"_base",void 0),i([r(".drag-handle")],ht.prototype,"_dragHandle",void 0),i([o({type:Number})],ht.prototype,"value",void 0),i([o({type:Number})],ht.prototype,"min",void 0),i([o({type:Number})],ht.prototype,"max",void 0),i([o({type:Number})],ht.prototype,"step",void 0),i([o({attribute:"detents",converter:_})],ht.prototype,"detents",void 0),i([o({attribute:"wrap-detents",type:Boolean})],ht.prototype,"wrapDetents",void 0),i([o()],ht.prototype,"orientation",void 0),i([o()],ht.prototype,"label",void 0),i([o()],ht.prototype,"valueFormatter",void 0),ht=i([M("m3e-split-pane")],ht);export{ht as M3eSplitPaneElement};
6
+ import{__classPrivateFieldGet as t,__classPrivateFieldSet as e,__decorate as i}from"tslib";import{LitElement as s,html as a,css as h,unsafeCSS as n}from"lit";import{state as l,query as r,property as o}from"lit/decorators.js";import{ifDefined as c}from"lit/directives/if-defined.js";import{FormAssociated as d,Disabled as p,ReconnectedCallback as m,AttachInternals as u,PressedController as v,setCustomState as f,MutationController as g,formValue as b,deleteCustomState as w,prefersReducedMotion as y,addCustomState as x,registerStyleSheet as $,DesignToken as k,spaceSeparatedStringConverter as _,customElement as M}from"@m3e/web/core";import{M3eBreakpointObserver as z,Breakpoint as D}from"@m3e/web/core/layout";import{M3eDirectionality as L}from"@m3e/web/core/bidi";var P,E,S,W,H,O,T,C,F,N,U,A,R,V,I,X,j,B,q,Y,K,G,J,Q,Z,tt,et,it,st,at;let ht=class extends(d(p(m(u(s))))){constructor(){super(...arguments),P.add(this),E.set(this,void 0),S.set(this,void 0),W.set(this,!1),H.set(this,void 0),O.set(this,new v(this,{target:null,isPressedKey:t=>" "===t,minPressedDuration:150,callback:t=>f(this,"-pressed",t&&!this.disabled)})),T.set(this,new g(this,{target:null,config:{attributeFilter:["hidden"]},callback:()=>t(this,P,"m",R).call(this,"start")})),C.set(this,new g(this,{target:null,config:{attributeFilter:["hidden"]},callback:()=>t(this,P,"m",R).call(this,"end")})),this.value=50,this.min=0,this.max=100,this.overshootLimit=4,this.step=1,this.detents=[],this.wrapDetents=!1,this.orientation="horizontal",this.label="Resize panes",this.valueFormatter=(t,e,i)=>{if((t=Math.round(t))>=48&&t<=52)return"Panes equally sized";switch(t){case 0:return"horizontal"===e?"ltr"===i?"Left pane collapsed":"Right pane collapsed":"Top pane collapsed";case 100:return"horizontal"===e?"ltr"===i?"Right pane collapsed":"Left pane collapsed":"Bottom pane collapsed";default:return"horizontal"===e?"ltr"===i?`Left pane ${t}%, right pane ${100-t}%`:`Left pane ${100-t}%, right pane ${t}%`:`Top pane ${t}%, bottom pane ${100-t}%`}}}get currentOrientation(){return this._orientation??("vertical"!==this.orientation?"horizontal":"vertical")}get[(E=new WeakMap,S=new WeakMap,W=new WeakMap,H=new WeakMap,O=new WeakMap,T=new WeakMap,C=new WeakMap,P=new WeakSet,b)](){return this.value?.toString()??null}collapse(){this.snapToValue(this.min)}expand(){this.snapToValue(this.max)}snapToValue(e){const i=t(this,P,"m",Q).call(this,e);e=i>-1?t(this,P,"m",et).call(this,this.detents[i]):e,t(this,H,"f")?t(this,P,"m",J).call(this,e):t(this,P,"m",st).call(this,e)}disconnectedCallback(){super.disconnectedCallback(),t(this,P,"m",B).call(this),t(this,O,"f").unobserve(this._dragHandle)}reconnectedCallback(){super.reconnectedCallback(),t(this,P,"m",I).call(this),"auto"===this.orientation&&t(this,P,"m",X).call(this)}willUpdate(e){super.willUpdate(e),e.has("orientation")&&(t(this,E,"f")?.call(this),"auto"===this.orientation?t(this,P,"m",X).call(this):(this._orientation=void 0,t(this,P,"m",j).call(this)))}updated(t){super.updated(t),t.has("value")&&this._base.style.setProperty("--_split-pane-value",`${this.value}%`)}firstUpdated(e){super.firstUpdated(e),t(this,P,"m",I).call(this)}render(){return a`<div class="base"><div class="start" id="start" ?inert="${this.value<=0}"><slot name="start" @slotchange="${t(this,P,"m",N)}"></slot></div>${t(this,P,"m",F).call(this)}<div class="end" ?inert="${this.value>=100}"><slot name="end" @slotchange="${t(this,P,"m",U)}"></slot></div></div>`}};F=function(){return a`<div id="drag-handle" class="drag-handle" role="separator" ?hidden="${this.disabled}" tabindex="0" aria-label="${this.label}" aria-controls="start" aria-orientation="${"horizontal"===this.currentOrientation?"vertical":"horizontal"}" aria-valuemin="${this.min}" aria-valuemax="${this.max}" aria-valuenow="${this.value}" aria-valuetext="${c(this.valueFormatter?.(this.value,this.currentOrientation,L.current))}" @pointerdown="${t(this,P,"m",q)}" @pointerup="${t(this,P,"m",K)}" @pointermove="${t(this,P,"m",Y)}" @keydown="${t(this,P,"m",G)}" @dblclick="${t(this,P,"m",at)}"><div class="handle"><m3e-focus-ring for="drag-handle"></m3e-focus-ring><m3e-state-layer for="drag-handle"></m3e-state-layer></div><div class="touch"></div></div>`},N=function(e){t(this,P,"m",A).call(this,e.target,t(this,T,"f"),"-with-start")},U=function(e){t(this,P,"m",A).call(this,e.target,t(this,C,"f"),"-with-end")},A=function(e,i,s){for(const t of i.targets)i.unobserve(t);const a=new Array;f(this,s,t(this,P,"m",V).call(this,e,a));for(const t of a)t instanceof HTMLElement&&i.observe(t)},R=function(e){f(this,`-with-${e}`,t(this,P,"m",V).call(this,this.shadowRoot?.querySelector(`slot[name='${e}']`)))},V=function(t,e){return(e=e??[]).push(...t?.assignedElements({flatten:!0})??[]),e.length>0&&!e.every(t=>t.hasAttribute("hidden"))},I=function(){t(this,O,"f").observe(this._dragHandle)},X=function(){e(this,E,z.observe([D.XSmall],e=>{this._orientation=e.get(D.XSmall)?"vertical":"horizontal",t(this,P,"m",j).call(this)}),"f")},j=function(){f(this,"-vertical","vertical"===this.currentOrientation)},B=function(){w(this,"-vertical"),this._orientation=void 0,t(this,E,"f")?.call(this),e(this,E,void 0,"f")},q=function(i){if("mouse"===i.pointerType&&i.button>1)return;if(this.disabled)return;this._dragHandle.setPointerCapture(i.pointerId),e(this,W,!1,"f");let s=this.min;if(0===s&&this.detents.length>0){const e=t(this,P,"m",Q).call(this,0);e>-1&&(s=t(this,P,"m",et).call(this,this.detents[e])??this.min)}let a=this.max;if(100===a&&this.detents.length>0){const e=t(this,P,"m",Q).call(this,100);e>-1&&(a=t(this,P,"m",et).call(this,this.detents[e])??this.max)}e(this,S,{startPos:"vertical"===this.currentOrientation?i.clientY:i.clientX,startValue:this.value,cachedSize:"vertical"===this.currentOrientation?this.clientHeight:this.clientWidth,min:s,max:a},"f")},Y=function(i){if(!this._dragHandle.hasPointerCapture(i.pointerId)||!t(this,S,"f"))return;const s="vertical"===this.currentOrientation?i.clientY:i.clientX;let a=t(this,S,"f").cachedSize>0?(s-t(this,S,"f").startPos)/t(this,S,"f").cachedSize*100:0;"rtl"===L.current&&"vertical"!==this.currentOrientation&&(a=-a);let h=t(this,S,"f").startValue+a;if(h<t(this,S,"f").min){const e=t(this,S,"f").min-h,i=this.overshootLimit*e/(e+this.overshootLimit);h=t(this,S,"f").min-i}else if(h>t(this,S,"f").max){const e=h-t(this,S,"f").max,i=this.overshootLimit*e/(e+this.overshootLimit);h=t(this,S,"f").max+i}t(this,P,"m",J).call(this,h,!1,!0)&&e(this,W,!0,"f")},K=function(i){if(!("mouse"===i.pointerType&&i.button>1)&&this._dragHandle.hasPointerCapture(i.pointerId)){this._dragHandle.releasePointerCapture(i.pointerId),e(this,S,void 0,"f");const s=t(this,P,"m",Q).call(this,this.value);if(s>=0){const e=t(this,P,"m",et).call(this,this.detents[s]);void 0!==e&&t(this,P,"m",st).call(this,e,!1)}else this.value<this.min?t(this,P,"m",st).call(this,this.min,!1):this.value>this.max&&t(this,P,"m",st).call(this,this.max,!1);t(this,W,"f")&&(this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),e(this,W,!1,"f"))}},G=function(e){const i="ltr"===L.current||"vertical"===this.currentOrientation;switch(e.key){case"Up":case"ArrowUp":case"Left":case"ArrowLeft":{e.preventDefault();const s=t(this,P,"m",Q).call(this,this.value);if(s>=0){const e=i?t(this,P,"m",tt).call(this,s):t(this,P,"m",Z).call(this,s);if(e!==s&&!t(this,H,"f")){const i=t(this,P,"m",et).call(this,this.detents[e]);void 0!==i&&t(this,P,"m",st).call(this,i)}}else this.step>1?t(this,H,"f")||t(this,P,"m",st).call(this,this.value+(i?-this.step:this.step)):t(this,P,"m",J).call(this,this.value+(i?-this.step:this.step));break}case"Down":case"ArrowDown":case"Right":case"ArrowRight":{e.preventDefault();const s=t(this,P,"m",Q).call(this,this.value);if(s>=0){const e=i?t(this,P,"m",Z).call(this,s):t(this,P,"m",tt).call(this,s);if(e!==s&&!t(this,H,"f")){const i=t(this,P,"m",et).call(this,this.detents[e]);void 0!==i&&t(this,P,"m",st).call(this,i)}}else this.step>1?t(this,H,"f")||t(this,P,"m",st).call(this,this.value+(i?this.step:-this.step)):t(this,P,"m",J).call(this,this.value+(i?this.step:-this.step));break}case"Home":if(e.preventDefault(),!t(this,H,"f")){const e=t(this,P,"m",Q).call(this,this.min);e>-1?t(this,P,"m",st).call(this,t(this,P,"m",et).call(this,this.detents[e])):t(this,P,"m",st).call(this,this.min)}break;case"End":if(e.preventDefault(),!t(this,H,"f")){const e=t(this,P,"m",Q).call(this,this.max);e>-1?t(this,P,"m",st).call(this,t(this,P,"m",et).call(this,this.detents[e])):t(this,P,"m",st).call(this,this.max)}break;case"PageUp":if(e.preventDefault(),!t(this,H,"f")){const e=t(this,P,"m",Q).call(this,this.value);if(e>=0){const i=t(this,P,"m",tt).call(this,e);if(i!==e){const e=t(this,P,"m",et).call(this,this.detents[i]);void 0!==e&&t(this,P,"m",st).call(this,e)}}else t(this,P,"m",st).call(this,this.value-Math.max(10,this.step))}break;case"PageDown":if(e.preventDefault(),!t(this,H,"f")){const e=t(this,P,"m",Q).call(this,this.value);if(e>=0){const i=t(this,P,"m",Z).call(this,e);if(i!==e){const e=t(this,P,"m",et).call(this,this.detents[i]);void 0!==e&&t(this,P,"m",st).call(this,e)}}else t(this,P,"m",st).call(this,this.value+Math.max(10,this.step))}break;case"Enter":t(this,H,"f")||t(this,P,"m",at).call(this);break;case" ":e.preventDefault(),t(this,H,"f")||t(this,P,"m",at).call(this)}},J=function(e,i=!0,s=!1){if(t(this,P,"m",it).call(this),s||(e=Math.max(this.min,Math.min(this.max,e))),e!=this.value){const t=this.value;if(this.value=e,this.dispatchEvent(new Event("input",{bubbles:!0,composed:!0,cancelable:!0})))return this._base.style.setProperty("--_split-pane-value",`${this.value}%`),i&&this.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),!0;this.value=t}return!1},Q=function(e){let i=-1,s=1/0;for(let a=0;a<this.detents.length;a++){const h=t(this,P,"m",et).call(this,this.detents[a]);if(void 0===h)continue;const n=Math.abs(e-h);n<s&&(s=n,i=a)}return i},Z=function(e){const i=t(this,P,"m",et).call(this,this.detents[e]);if(void 0===i)return e;let s=1/0,a=e;for(let h=0;h<this.detents.length;h++){if(h===e)continue;const n=t(this,P,"m",et).call(this,this.detents[h]);void 0!==n&&(n>i&&n<s&&(s=n,a=h))}return a},tt=function(e){const i=t(this,P,"m",et).call(this,this.detents[e]);if(void 0===i)return e;let s=-1/0,a=e;for(let h=0;h<this.detents.length;h++){if(h===e)continue;const n=t(this,P,"m",et).call(this,this.detents[h]);void 0!==n&&(n<i&&n>s&&(s=n,a=h))}return a},et=function(t){const e=t.endsWith("px")?this.clientWidth/parseFloat(t):parseFloat(t);return isNaN(e)?void 0:e},it=function(){t(this,H,"f")?.cancel(),e(this,H,void 0,"f")},st=function(i,s=!0){t(this,P,"m",it).call(this),(i=Math.max(this.min,Math.min(this.max,i)))!==this.value&&(y()?t(this,P,"m",J).call(this,i,s):(x(this,"-animating"),e(this,H,this._base.animate([{"--_split-pane-value":`${this.value}%`},{"--_split-pane-value":`${i}%`}],{duration:250,easing:"cubic-bezier(0.2, 0.0, 0, 1.0)"}),"f"),t(this,H,"f").onfinish=()=>{t(this,P,"m",J).call(this,i,s),e(this,H,void 0,"f"),w(this,"-animating")}))},at=function(){if(0===this.detents.length)return;const e=t(this,P,"m",Q).call(this,this.value);if(-1===e)return;let i=t(this,P,"m",Z).call(this,e);if(i===e&&this.wrapDetents&&(i=t(this,P,"m",Q).call(this,0),-1===i))return;const s=t(this,P,"m",et).call(this,this.detents[i]);void 0!==s&&t(this,P,"m",st).call(this,s)},$(h`@property --_split-pane-value { syntax: "<length-percentage>"; inherits: true; initial-value: 50%; }</length-percentage>`),ht.styles=h`:host { display: block; } .base { display: flex; width: 100%; height: 100%; overflow: hidden; } :host(:not(:state(-vertical))) .base { flex-direction: row; } :host(:state(-vertical)) .base { flex-direction: column; } :host(:state(-with-start):state(-with-end)) .base:not(:has(.drag-handle[hidden])) .start { flex: 0 1 calc(var(--_split-pane-value) - calc(var(--m3e-split-pane-drag-handle-container-width, 1.5rem) / 2)); } :host(:state(-with-start):state(-with-end)) .base:has(.drag-handle[hidden]) .start { flex: 0 1 var(--_split-pane-value); } :host(:not(:state(-with-end))) .start { flex: 1 1 auto; } :host(:state(-with-end)) .end { flex: 1 1 auto; } :host(:not(:state(-with-end))) .end { display: none; } :host(:not(:state(-animating))) .start[inert], :host(:not(:state(-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, ${k.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, ${k.color.onSurface}); --m3e-state-layer-focus-opacity: var(--m3e-split-pane-drag-handle-focus-opacity, 10%); } :host(:is(:not(:state(-with-start)), :not(:state(-with-end)))) .drag-handle, .drag-handle[hidden] { display: none; } :host(:not(:state(-pressed))) .drag-handle:not([aria-disabled]) { cursor: grab; } :host(:state(-pressed)) .drag-handle:not([aria-disabled]) { cursor: grabbing; } .handle { position: relative; transition: ${n(`background-color ${k.motion.duration.short4} ${k.motion.easing.standard},\n width ${k.motion.spring.fastEffects}, height ${k.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(:state(-pressed))) .handle { background-color: var(--m3e-split-pane-drag-handle-color, ${k.color.outline}); border-radius: var(--m3e-split-pane-drag-handle-shape, ${k.shape.corner.full}); } :host(:state(-pressed)) .handle { background-color: var(--m3e-split-pane-drag-handle-pressed-color, ${k.color.onSurface}); border-radius: var(--m3e-split-pane-drag-handle-pressed-shape, ${k.shape.corner.medium}); } :host(:not(:state(-vertical))) .drag-handle { flex-direction: column; width: var(--m3e-split-pane-drag-handle-container-width, 1.5rem); } :host(:not(:state(-vertical)):not(:state(-pressed))) .handle { width: var(--m3e-split-pane-drag-handle-width, 0.25rem); height: var(--m3e-split-pane-drag-handle-height, 3rem); } :host(:not(:state(-vertical)):state(-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(:state(-vertical)) .drag-handle { height: var(--m3e-split-pane-drag-handle-container-width, 1.5rem); } :host(:state(-vertical):not(:state(-pressed))) .handle { width: var(--m3e-split-pane-drag-handle-height, 3rem); height: var(--m3e-split-pane-drag-handle-width, 0.25rem); } :host(:state(-vertical):state(-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(:state(-pressed)) .handle, :host(:not(:state(-pressed))) .handle { background-color: ButtonText; } }`,i([l()],ht.prototype,"_orientation",void 0),i([r(".base")],ht.prototype,"_base",void 0),i([r(".drag-handle")],ht.prototype,"_dragHandle",void 0),i([o({type:Number})],ht.prototype,"value",void 0),i([o({type:Number})],ht.prototype,"min",void 0),i([o({type:Number})],ht.prototype,"max",void 0),i([o({attribute:"overshoot-limit",type:Number})],ht.prototype,"overshootLimit",void 0),i([o({type:Number})],ht.prototype,"step",void 0),i([o({attribute:"detents",converter:_})],ht.prototype,"detents",void 0),i([o({attribute:"wrap-detents",type:Boolean})],ht.prototype,"wrapDetents",void 0),i([o()],ht.prototype,"orientation",void 0),i([o()],ht.prototype,"label",void 0),i([o()],ht.prototype,"valueFormatter",void 0),ht=i([M("m3e-split-pane")],ht);export{ht as M3eSplitPaneElement};
7
7
  //# sourceMappingURL=split-pane.min.js.map