@smwb/ui-solid 1.0.0 → 2.1.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 (213) hide show
  1. package/README.md +115 -0
  2. package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
  3. package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
  4. package/dist/assets/styles/less/components/badge/badge.entry.css +1 -1
  5. package/dist/assets/styles/less/components/breadcrumbs/breadcrumbs.entry.css +1 -1
  6. package/dist/assets/styles/less/components/button/button.entry.css +1 -1
  7. package/dist/assets/styles/less/components/buttonGroup/buttonGroup.entry.css +1 -1
  8. package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -1
  9. package/dist/assets/styles/less/components/meter/meter.entry.css +1 -1
  10. package/dist/assets/styles/less/components/screenDivider/screenDivider.entry.css +1 -1
  11. package/dist/assets/styles/less/components/sheet/sheet.entry.css +1 -1
  12. package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -1
  13. package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -1
  14. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  15. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  16. package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
  17. package/dist/assets/styles/less/tokens.entry.css +1 -1
  18. package/dist/components/dataDisplay/avatar/avatar.d.ts +5 -2
  19. package/dist/components/dataDisplay/avatar/avatar.js +9 -9
  20. package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
  21. package/dist/components/dataDisplay/badge/badge.d.ts +2 -1
  22. package/dist/components/dataDisplay/badge/badge.js.map +1 -1
  23. package/dist/components/dataDisplay/chart/chart.d.ts +16 -8
  24. package/dist/components/dataDisplay/chart/chartFull.d.ts +14 -0
  25. package/dist/components/dataDisplay/chart/core.d.ts +19 -0
  26. package/dist/components/dataDisplay/chart/index.d.ts +1 -1
  27. package/dist/components/dataDisplay/dagView/dagView.d.ts +4 -0
  28. package/dist/components/dataDisplay/dagView/dagView.js +124 -123
  29. package/dist/components/dataDisplay/dagView/dagView.js.map +1 -1
  30. package/dist/components/dataDisplay/dagView/index.d.ts +1 -1
  31. package/dist/components/dataDisplay/meter/index.d.ts +1 -1
  32. package/dist/components/dataDisplay/meter/meter.d.ts +14 -0
  33. package/dist/components/dataDisplay/meter/meter.js +32 -30
  34. package/dist/components/dataDisplay/meter/meter.js.map +1 -1
  35. package/dist/components/dataDisplay/statusDot/index.d.ts +1 -1
  36. package/dist/components/dataDisplay/statusDot/statusDot.d.ts +10 -1
  37. package/dist/components/dataDisplay/statusDot/statusDot.js +20 -11
  38. package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -1
  39. package/dist/components/dataDisplay/treeView/treeView.d.ts +18 -2
  40. package/dist/components/dataDisplay/treeView/treeView.js +140 -121
  41. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  42. package/dist/components/inputs/button/button.d.ts +7 -0
  43. package/dist/components/inputs/button/button.js +57 -51
  44. package/dist/components/inputs/button/button.js.map +1 -1
  45. package/dist/components/inputs/toggle/toggle.d.ts +6 -0
  46. package/dist/components/inputs/toggle/toggle.js +23 -23
  47. package/dist/components/inputs/toggle/toggle.js.map +1 -1
  48. package/dist/components/layout/appLayout/appLayout.d.ts +6 -1
  49. package/dist/components/layout/appLayout/appLayout.js +49 -42
  50. package/dist/components/layout/appLayout/appLayout.js.map +1 -1
  51. package/dist/components/layout/screenDivider/screenDivider.d.ts +12 -0
  52. package/dist/components/layout/screenDivider/screenDivider.js +87 -46
  53. package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
  54. package/dist/components/layout/sheet/sheet.d.ts +11 -0
  55. package/dist/components/layout/sheet/sheet.js +122 -102
  56. package/dist/components/layout/sheet/sheet.js.map +1 -1
  57. package/dist/components/layout/tabGroups/index.d.ts +1 -1
  58. package/dist/components/layout/tabGroups/tabGroups.d.ts +44 -1
  59. package/dist/components/layout/tabGroups/tabGroups.js +500 -460
  60. package/dist/components/layout/tabGroups/tabGroups.js.map +1 -1
  61. package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +16 -0
  62. package/dist/components/layout/tabGroups/tabGroupsFocus.js +102 -70
  63. package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
  64. package/dist/components/navigation/appBar/appBar.d.ts +12 -0
  65. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  66. package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +9 -0
  67. package/dist/components/navigation/breadcrumbs/breadcrumbs.js +47 -31
  68. package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  69. package/dist/components/navigation/tabs/tab/tab.js +71 -68
  70. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  71. package/dist/components/navigation/tabs/tabs.d.ts +15 -1
  72. package/dist/components/navigation/tabs/tabs.js +19 -16
  73. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  74. package/dist/components/navigation/tabs/tabsContext.d.ts +2 -0
  75. package/dist/components/navigation/tabs/tabsContext.js.map +1 -1
  76. package/dist/headless/components/dataDisplay/avatar/avatar.js +9 -9
  77. package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
  78. package/dist/headless/components/dataDisplay/badge/badge.js.map +1 -1
  79. package/dist/headless/components/dataDisplay/dagView/dagView.js +133 -132
  80. package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -1
  81. package/dist/headless/components/dataDisplay/meter/meter.js +32 -30
  82. package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
  83. package/dist/headless/components/dataDisplay/statusDot/statusDot.js +19 -10
  84. package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -1
  85. package/dist/headless/components/dataDisplay/treeView/treeView.js +139 -120
  86. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  87. package/dist/headless/components/inputs/button/button.js +57 -51
  88. package/dist/headless/components/inputs/button/button.js.map +1 -1
  89. package/dist/headless/components/inputs/toggle/toggle.js +23 -23
  90. package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
  91. package/dist/headless/components/layout/appLayout/appLayout.js +52 -45
  92. package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
  93. package/dist/headless/components/layout/screenDivider/screenDivider.js +88 -47
  94. package/dist/headless/components/layout/screenDivider/screenDivider.js.map +1 -1
  95. package/dist/headless/components/layout/sheet/sheet.js +124 -104
  96. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  97. package/dist/headless/components/layout/tabGroups/tabGroups.js +500 -460
  98. package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -1
  99. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +102 -70
  100. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
  101. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  102. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +46 -30
  103. package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
  104. package/dist/headless/components/navigation/tabs/tab/tab.js +70 -67
  105. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  106. package/dist/headless/components/navigation/tabs/tabs.js +19 -16
  107. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  108. package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -1
  109. package/dist/headless/primitives/publishHeaderOffset.js +19 -0
  110. package/dist/headless/primitives/publishHeaderOffset.js.map +1 -0
  111. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +1 -0
  112. package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  113. package/dist/headless/source/components/dataDisplay/badge/badge.jsx.map +1 -1
  114. package/dist/headless/source/components/dataDisplay/chart/chart.jsx +14 -12
  115. package/dist/headless/source/components/dataDisplay/chart/chart.jsx.map +1 -1
  116. package/dist/headless/source/components/dataDisplay/chart/chartFull.js +12 -0
  117. package/dist/headless/source/components/dataDisplay/chart/chartFull.js.map +7 -0
  118. package/dist/headless/source/components/dataDisplay/chart/core.js +11 -0
  119. package/dist/headless/source/components/dataDisplay/chart/core.js.map +7 -0
  120. package/dist/headless/source/components/dataDisplay/chart/index.js +1 -1
  121. package/dist/headless/source/components/dataDisplay/chart/index.js.map +1 -1
  122. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +2 -1
  123. package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  124. package/dist/headless/source/components/dataDisplay/dagView/index.js.map +2 -2
  125. package/dist/headless/source/components/dataDisplay/meter/index.js.map +1 -1
  126. package/dist/headless/source/components/dataDisplay/meter/meter.jsx +14 -2
  127. package/dist/headless/source/components/dataDisplay/meter/meter.jsx.map +1 -1
  128. package/dist/headless/source/components/dataDisplay/statusDot/index.js.map +1 -1
  129. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
  130. package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
  131. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +16 -3
  132. package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  133. package/dist/headless/source/components/inputs/button/button.jsx +26 -1
  134. package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
  135. package/dist/headless/source/components/inputs/toggle/toggle.jsx +9 -2
  136. package/dist/headless/source/components/inputs/toggle/toggle.jsx.map +1 -1
  137. package/dist/headless/source/components/layout/appLayout/appLayout.jsx +14 -2
  138. package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  139. package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx +102 -18
  140. package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  141. package/dist/headless/source/components/layout/sheet/sheet.jsx +14 -1
  142. package/dist/headless/source/components/layout/sheet/sheet.jsx.map +1 -1
  143. package/dist/headless/source/components/layout/tabGroups/index.js.map +1 -1
  144. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx +55 -1
  145. package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
  146. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
  147. package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
  148. package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
  149. package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
  150. package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  151. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +7 -1
  152. package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  153. package/dist/headless/source/components/navigation/tabs/tabs.jsx +5 -1
  154. package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
  155. package/dist/headless/source/components/navigation/tabs/tabsContext.js.map +2 -2
  156. package/dist/headless/source/index.js +8 -1
  157. package/dist/headless/source/index.js.map +2 -2
  158. package/dist/headless/source/primitives/publishHeaderOffset.js +34 -0
  159. package/dist/headless/source/primitives/publishHeaderOffset.js.map +7 -0
  160. package/dist/index.d.ts +5 -5
  161. package/dist/primitives/publishHeaderOffset.d.ts +7 -0
  162. package/dist/primitives/publishHeaderOffset.js +19 -0
  163. package/dist/primitives/publishHeaderOffset.js.map +1 -0
  164. package/dist/source/components/dataDisplay/avatar/avatar.jsx +1 -0
  165. package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
  166. package/dist/source/components/dataDisplay/badge/badge.jsx.map +1 -1
  167. package/dist/source/components/dataDisplay/chart/chart.jsx +14 -12
  168. package/dist/source/components/dataDisplay/chart/chart.jsx.map +1 -1
  169. package/dist/source/components/dataDisplay/chart/chartFull.js +12 -0
  170. package/dist/source/components/dataDisplay/chart/chartFull.js.map +7 -0
  171. package/dist/source/components/dataDisplay/chart/core.js +11 -0
  172. package/dist/source/components/dataDisplay/chart/core.js.map +7 -0
  173. package/dist/source/components/dataDisplay/chart/index.js +1 -1
  174. package/dist/source/components/dataDisplay/chart/index.js.map +1 -1
  175. package/dist/source/components/dataDisplay/dagView/dagView.jsx +2 -1
  176. package/dist/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
  177. package/dist/source/components/dataDisplay/dagView/index.js.map +2 -2
  178. package/dist/source/components/dataDisplay/meter/index.js.map +1 -1
  179. package/dist/source/components/dataDisplay/meter/meter.jsx +14 -2
  180. package/dist/source/components/dataDisplay/meter/meter.jsx.map +1 -1
  181. package/dist/source/components/dataDisplay/statusDot/index.js.map +1 -1
  182. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
  183. package/dist/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
  184. package/dist/source/components/dataDisplay/treeView/treeView.jsx +16 -3
  185. package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
  186. package/dist/source/components/inputs/button/button.jsx +26 -1
  187. package/dist/source/components/inputs/button/button.jsx.map +1 -1
  188. package/dist/source/components/inputs/toggle/toggle.jsx +9 -2
  189. package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
  190. package/dist/source/components/layout/appLayout/appLayout.jsx +14 -2
  191. package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
  192. package/dist/source/components/layout/screenDivider/screenDivider.jsx +102 -18
  193. package/dist/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
  194. package/dist/source/components/layout/sheet/sheet.jsx +14 -1
  195. package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
  196. package/dist/source/components/layout/tabGroups/index.js.map +1 -1
  197. package/dist/source/components/layout/tabGroups/tabGroups.jsx +55 -1
  198. package/dist/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
  199. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
  200. package/dist/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
  201. package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
  202. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
  203. package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
  204. package/dist/source/components/navigation/tabs/tab/tab.jsx +7 -1
  205. package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
  206. package/dist/source/components/navigation/tabs/tabs.jsx +5 -1
  207. package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
  208. package/dist/source/components/navigation/tabs/tabsContext.js.map +2 -2
  209. package/dist/source/index.js +8 -1
  210. package/dist/source/index.js.map +2 -2
  211. package/dist/source/primitives/publishHeaderOffset.js +34 -0
  212. package/dist/source/primitives/publishHeaderOffset.js.map +7 -0
  213. package/package.json +9 -3
@@ -1,56 +1,94 @@
1
- import { isServer as F, use as H, insert as $, setAttribute as v, effect as N, className as m, style as L, template as O, delegateEvents as U } from "solid-js/web";
2
- import { mergeProps as X, splitProps as Y, createSignal as x, createEffect as f, children as j, onCleanup as q } from "solid-js";
3
- import u from "clsx";
4
- import { throttle as G } from "../../../utils/throttle.js";
5
- import { mergeRefs as J } from "../../../primitives/mergeRefs.js";
6
- var Q = /* @__PURE__ */ O("<div data-testid=screen-divider><div></div><span class=smwb-screen-divider__resizer role=separator aria-valuemin=0 aria-valuemax=100 tabindex=0></span><div>");
7
- const C = (d, l) => !d && l ? 100 - l : d || 50;
8
- function re(d) {
9
- const l = X({
1
+ import { isServer as U, use as X, insert as Y, setAttribute as v, effect as ie, className as w, style as Z, template as re, delegateEvents as ne } from "solid-js/web";
2
+ import { mergeProps as oe, splitProps as se, createSignal as y, createEffect as p, children as ae, onCleanup as j } from "solid-js";
3
+ import x from "clsx";
4
+ import { throttle as de } from "../../../utils/throttle.js";
5
+ import { mergeRefs as ce } from "../../../primitives/mergeRefs.js";
6
+ var le = /* @__PURE__ */ re("<div data-testid=screen-divider><div></div><span class=smwb-screen-divider__resizer role=separator tabindex=0></span><div>");
7
+ const ue = /^(\d*\.?\d+)(px|%)?$/i, S = (o) => {
8
+ if (o === void 0) return null;
9
+ if (typeof o == "number") return Number.isFinite(o) && o > 0 ? {
10
+ value: o,
11
+ unit: "px"
12
+ } : null;
13
+ const a = ue.exec(o.trim());
14
+ if (!a) return null;
15
+ const [, e = "", d] = a, c = parseFloat(e);
16
+ return c > 0 ? {
17
+ value: c,
18
+ unit: d === "%" ? "%" : "px"
19
+ } : null;
20
+ }, b = (o, a) => {
21
+ const e = S(o);
22
+ return e ? e.unit === "%" ? e.value : a > 0 ? e.value / a * 100 : 0 : 0;
23
+ }, M = (o, a, e) => {
24
+ const d = Math.min(100, b(o, e)), c = Math.max(d, 100 - b(a, e));
25
+ return [d, c];
26
+ }, me = (o, a, e) => Math.min(100, b(o, e)) + b(a, e) > 100, f = (o, [a, e]) => Math.max(a, Math.min(e, o)), q = (o, a) => !o && a ? 100 - a : o || 50;
27
+ function be(o) {
28
+ const a = oe({
10
29
  orientation: "horizontal",
11
30
  keyboardStep: 5,
12
31
  resizerAriaLabel: "Resize panels"
13
- }, d), [e] = Y(l, ["class", "orientation", "sizeFirst", "sizeSecond", "children", "onSizeChange", "keyboardStep", "resizerAriaLabel", "ref"]);
14
- let h;
15
- const [a, s] = x(C(e.sizeFirst, e.sizeSecond)), [g, b] = x(!1);
16
- f(() => {
17
- s(C(e.sizeFirst, e.sizeSecond));
18
- }), f(() => {
19
- e.onSizeChange?.(a());
32
+ }, o), [e] = se(a, ["class", "orientation", "sizeFirst", "sizeSecond", "children", "onSizeChange", "keyboardStep", "resizerAriaLabel", "minSizeFirst", "minSizeSecond", "collapsed", "ref"]);
33
+ let d, c, D = 0;
34
+ const [G, u] = y(q(e.sizeFirst, e.sizeSecond)), [k, A] = y(!1), [E, J] = y(0), l = () => e.orientation === "vertical", z = () => {
35
+ const t = (r) => {
36
+ const s = r?.getBoundingClientRect();
37
+ return s ? l() ? s.height : s.width : 0;
38
+ }, n = t(c);
39
+ return n > 0 && (D = n), Math.max(0, t(d) - (n > 0 ? n : D));
40
+ };
41
+ p(() => {
42
+ if (U || !S(e.minSizeFirst) && !S(e.minSizeSecond)) return;
43
+ e.orientation, e.collapsed;
44
+ const t = () => {
45
+ J(z());
46
+ };
47
+ if (t(), !d || typeof ResizeObserver > "u") return;
48
+ const n = new ResizeObserver(t);
49
+ n.observe(d), j(() => n.disconnect());
50
+ }), p(() => {
51
+ u(q(e.sizeFirst, e.sizeSecond));
52
+ });
53
+ const g = () => M(e.minSizeFirst, e.minSizeSecond, E()), m = () => f(G(), g());
54
+ p(() => {
55
+ e.onSizeChange?.(m());
20
56
  });
21
- const _ = j(() => e.children), p = () => _.toArray(), y = G((t) => {
22
- if (!g()) return;
23
- const o = h;
24
- if (!o) return;
25
- const i = o.getBoundingClientRect(), n = e.orientation === "vertical" ? i.height : i.width, c = e.orientation === "vertical" ? t.clientY - i.top : t.clientX - i.left, r = Math.max(5, Math.min(n - 5, c));
26
- s(r / n * 100);
27
- }, 1e3 / 60), M = () => {
28
- b(!0);
29
- }, w = () => {
30
- b(!1);
57
+ const Q = ae(() => e.children), F = () => Q.toArray(), L = de((t) => {
58
+ if (!k() || e.collapsed) return;
59
+ const n = d;
60
+ if (!n) return;
61
+ const r = n.getBoundingClientRect(), s = l() ? r.height : r.width, h = l() ? t.clientY - r.top : t.clientX - r.left, i = Math.max(5, Math.min(s - 5, h));
62
+ u(f(i / s * 100, M(e.minSizeFirst, e.minSizeSecond, z())));
63
+ }, 1e3 / 60), V = () => {
64
+ A(!0);
65
+ }, R = () => {
66
+ A(!1);
31
67
  };
32
- f(() => {
33
- F || (g() ? (document.body.addEventListener("pointerup", w), document.body.addEventListener("pointermove", y), document.body.style.cursor = e.orientation === "horizontal" ? "e-resize" : "n-resize") : document.body.style.cursor = "default", q(() => {
34
- document.body.removeEventListener("pointerup", w), document.body.removeEventListener("pointermove", y);
68
+ p(() => {
69
+ U || (k() ? (document.body.addEventListener("pointerup", R), document.body.addEventListener("pointermove", L), document.body.style.cursor = e.orientation === "horizontal" ? "e-resize" : "n-resize") : document.body.style.cursor = "default", j(() => {
70
+ document.body.removeEventListener("pointerup", R), document.body.removeEventListener("pointermove", L);
35
71
  }));
36
72
  });
37
- const R = (t) => {
38
- const o = e.orientation === "vertical" ? "ArrowUp" : "ArrowLeft", i = e.orientation === "vertical" ? "ArrowDown" : "ArrowRight";
39
- t.key === o ? (t.preventDefault(), s((n) => Math.max(0, n - e.keyboardStep))) : t.key === i ? (t.preventDefault(), s((n) => Math.min(100, n + e.keyboardStep))) : t.key === "Home" ? (t.preventDefault(), s(0)) : t.key === "End" && (t.preventDefault(), s(100));
40
- }, K = () => e.orientation === "vertical" ? {
41
- height: `${a()}%`
42
- } : {
43
- width: `${a()}%`
44
- }, I = () => e.orientation === "vertical" ? {
45
- height: `${100 - a()}%`
46
- } : {
47
- width: `${100 - a()}%`
73
+ const W = (t) => {
74
+ const n = l() ? "ArrowUp" : "ArrowLeft", r = l() ? "ArrowDown" : "ArrowRight", s = M(e.minSizeFirst, e.minSizeSecond, z());
75
+ t.key === n ? (t.preventDefault(), u(f(Math.max(0, m() - e.keyboardStep), s))) : t.key === r ? (t.preventDefault(), u(f(Math.min(100, m() + e.keyboardStep), s))) : t.key === "Home" ? (t.preventDefault(), u(f(0, s))) : t.key === "End" && (t.preventDefault(), u(f(100, s)));
76
+ }, C = (t) => {
77
+ const n = t === "first" ? m() : 100 - m();
78
+ return e.collapsed ? e.collapsed === t ? 0 : 100 : n;
79
+ }, $ = (t) => {
80
+ const n = l() ? {
81
+ height: `${C(t)}%`
82
+ } : {
83
+ width: `${C(t)}%`
84
+ }, r = S(t === "first" ? e.minSizeFirst : e.minSizeSecond), s = t === "second" && me(e.minSizeFirst, e.minSizeSecond, E());
85
+ return !e.collapsed && !s && r?.unit === "px" && (n[l() ? "min-height" : "min-width"] = `${r.value}px`), n;
48
86
  };
49
87
  return (() => {
50
- var t = Q(), o = t.firstChild, i = o.nextSibling, n = i.nextSibling, c = J(e.ref, (r) => h = r);
51
- return typeof c == "function" && H(c, t), $(o, () => p()[0] ?? ""), i.$$keydown = R, i.$$pointerdown = M, v(i, "draggable", !1), $(n, () => p()[1] ?? ""), N((r) => {
52
- var z = u("smwb-screen-divider__wrapper", `smwb-${e.orientation}`, e.class), S = u("smwb-screen-divider__first", `smwb-${e.orientation}`), P = K(), D = e.orientation === "vertical" ? "horizontal" : "vertical", k = Math.round(a()), A = e.resizerAriaLabel, E = u("smwb-screen-divider__second", `smwb-${e.orientation}`), B = I();
53
- return z !== r.e && m(t, r.e = z), S !== r.t && m(o, r.t = S), r.a = L(o, P, r.a), D !== r.o && v(i, "aria-orientation", r.o = D), k !== r.i && v(i, "aria-valuenow", r.i = k), A !== r.n && v(i, "aria-label", r.n = A), E !== r.s && m(n, r.s = E), r.h = L(n, B, r.h), r;
88
+ var t = le(), n = t.firstChild, r = n.nextSibling, s = r.nextSibling, h = ce(e.ref, (i) => d = i);
89
+ return typeof h == "function" && X(h, t), Y(n, () => F()[0] ?? ""), r.$$keydown = W, r.$$pointerdown = V, X((i) => c = i, r), v(r, "draggable", !1), Y(s, () => F()[1] ?? ""), ie((i) => {
90
+ var B = x("smwb-screen-divider__wrapper", `smwb-${e.orientation}`, e.class), I = x("smwb-screen-divider__first", `smwb-${e.orientation}`, e.collapsed === "first" && "smwb-collapsed"), ee = $("first"), O = e.collapsed !== void 0, _ = e.orientation === "vertical" ? "horizontal" : "vertical", K = Math.round(m()), N = Math.round(g()[0]), P = Math.round(g()[1]), H = e.resizerAriaLabel, T = x("smwb-screen-divider__second", `smwb-${e.orientation}`, e.collapsed === "second" && "smwb-collapsed"), te = $("second");
91
+ return B !== i.e && w(t, i.e = B), I !== i.t && w(n, i.t = I), i.a = Z(n, ee, i.a), O !== i.o && (r.hidden = i.o = O), _ !== i.i && v(r, "aria-orientation", i.i = _), K !== i.n && v(r, "aria-valuenow", i.n = K), N !== i.s && v(r, "aria-valuemin", i.s = N), P !== i.h && v(r, "aria-valuemax", i.h = P), H !== i.r && v(r, "aria-label", i.r = H), T !== i.d && w(s, i.d = T), i.l = Z(s, te, i.l), i;
54
92
  }, {
55
93
  e: void 0,
56
94
  t: void 0,
@@ -59,12 +97,15 @@ function re(d) {
59
97
  i: void 0,
60
98
  n: void 0,
61
99
  s: void 0,
62
- h: void 0
100
+ h: void 0,
101
+ r: void 0,
102
+ d: void 0,
103
+ l: void 0
63
104
  }), t;
64
105
  })();
65
106
  }
66
- U(["pointerdown", "keydown"]);
107
+ ne(["pointerdown", "keydown"]);
67
108
  export {
68
- re as ScreenDivider
109
+ be as ScreenDivider
69
110
  };
70
111
  //# sourceMappingURL=screenDivider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenDivider.js","sources":["../../../../../src/components/layout/screenDivider/screenDivider.tsx"],"sourcesContent":["import {\n type JSX,\n type ParentProps,\n children as resolveChildren,\n createEffect,\n createSignal,\n mergeProps,\n onCleanup,\n splitProps,\n} from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { throttle } from \"../../../utils/throttle\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface ScreenDividerProps {\n sizeFirst?: number;\n sizeSecond?: number;\n class?: string;\n orientation?: \"horizontal\" | \"vertical\";\n /** Called with the first pane size (percent) whenever it changes. */\n onSizeChange?: (sizeFirst: number) => void;\n /** Step (in percent) applied on arrow-key resize. */\n keyboardStep?: number;\n /** Accessible label for the resizer handle. */\n resizerAriaLabel?: string;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst getInitialDivider = (sizeFirst?: number | null, sizeSecond?: number | null): number => {\n if (!sizeFirst && sizeSecond) {\n return 100 - sizeSecond;\n }\n if (sizeFirst) {\n return sizeFirst;\n }\n return 50;\n};\n\nexport function ScreenDivider(props: ParentProps<ScreenDividerProps>): JSX.Element {\n const merged = mergeProps(\n { orientation: \"horizontal\" as const, keyboardStep: 5, resizerAriaLabel: \"Resize panels\" },\n props\n );\n const [local] = splitProps(merged, [\n \"class\",\n \"orientation\",\n \"sizeFirst\",\n \"sizeSecond\",\n \"children\",\n \"onSizeChange\",\n \"keyboardStep\",\n \"resizerAriaLabel\",\n \"ref\",\n ]);\n\n let wrapperEl: HTMLDivElement | undefined;\n const [divider, setDivider] = createSignal(getInitialDivider(local.sizeFirst, local.sizeSecond));\n const [isDragging, setIsDragging] = createSignal(false);\n\n // Sync with controlled size props.\n createEffect(() => {\n setDivider(getInitialDivider(local.sizeFirst, local.sizeSecond));\n });\n\n // Report size changes.\n createEffect(() => {\n local.onSizeChange?.(divider());\n });\n\n const resolved = resolveChildren(() => local.children);\n const child = (): unknown[] => resolved.toArray();\n\n const dragOver = throttle((event: PointerEvent) => {\n if (!isDragging()) return;\n const wrapper = wrapperEl;\n if (!wrapper) return;\n // Viewport-relative rect — using offsetLeft/offsetTop here is wrong\n // because they are relative to the nearest positioned ancestor, not\n // the viewport that clientX/clientY live in (this is what made the\n // divider drift away from the cursor when the wrapper was nested).\n const rect = wrapper.getBoundingClientRect();\n const total = local.orientation === \"vertical\" ? rect.height : rect.width;\n const cursor = local.orientation === \"vertical\" ? event.clientY - rect.top : event.clientX - rect.left;\n // 5px margin on each side so neither pane fully collapses.\n const clamped = Math.max(5, Math.min(total - 5, cursor));\n setDivider((clamped / total) * 100);\n }, 1000 / 60);\n\n const handleDragStart = (): void => {\n setIsDragging(true);\n };\n const handleDragEnd = (): void => {\n setIsDragging(false);\n };\n\n createEffect(() => {\n if (isServer) return;\n if (isDragging()) {\n document.body.addEventListener(\"pointerup\", handleDragEnd);\n document.body.addEventListener(\"pointermove\", dragOver);\n document.body.style.cursor = local.orientation === \"horizontal\" ? \"e-resize\" : \"n-resize\";\n } else {\n document.body.style.cursor = \"default\";\n }\n onCleanup(() => {\n document.body.removeEventListener(\"pointerup\", handleDragEnd);\n document.body.removeEventListener(\"pointermove\", dragOver);\n });\n });\n\n const onResizerKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n const decreaseKey = local.orientation === \"vertical\" ? \"ArrowUp\" : \"ArrowLeft\";\n const increaseKey = local.orientation === \"vertical\" ? \"ArrowDown\" : \"ArrowRight\";\n if (event.key === decreaseKey) {\n event.preventDefault();\n setDivider((prev) => Math.max(0, prev - local.keyboardStep));\n } else if (event.key === increaseKey) {\n event.preventDefault();\n setDivider((prev) => Math.min(100, prev + local.keyboardStep));\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setDivider(0);\n } else if (event.key === \"End\") {\n event.preventDefault();\n setDivider(100);\n }\n };\n\n const firstChildStyle = (): JSX.CSSProperties =>\n local.orientation === \"vertical\" ? { height: `${divider()}%` } : { width: `${divider()}%` };\n const secondChildStyle = (): JSX.CSSProperties =>\n local.orientation === \"vertical\" ? { height: `${100 - divider()}%` } : { width: `${100 - divider()}%` };\n\n return (\n <div\n class={cn(\"smwb-screen-divider__wrapper\", `smwb-${local.orientation}`, local.class)}\n ref={mergeRefs(local.ref, (el) => (wrapperEl = el))}\n data-testid=\"screen-divider\"\n >\n <div class={cn(\"smwb-screen-divider__first\", `smwb-${local.orientation}`)} style={firstChildStyle()}>\n {(child()[0] ?? \"\") as JSX.Element}\n </div>\n <span\n class=\"smwb-screen-divider__resizer\"\n onPointerDown={handleDragStart}\n draggable={false}\n role=\"separator\"\n aria-orientation={local.orientation === \"vertical\" ? \"horizontal\" : \"vertical\"}\n aria-valuenow={Math.round(divider())}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={local.resizerAriaLabel}\n tabindex={0}\n onKeyDown={onResizerKeyDown}\n />\n <div class={cn(\"smwb-screen-divider__second\", `smwb-${local.orientation}`)} style={secondChildStyle()}>\n {(child()[1] ?? \"\") as JSX.Element}\n </div>\n </div>\n );\n}\n\nexport default ScreenDivider;\n"],"names":["getInitialDivider","sizeFirst","sizeSecond","ScreenDivider","props","merged","mergeProps","orientation","keyboardStep","resizerAriaLabel","local","splitProps","wrapperEl","divider","setDivider","createSignal","isDragging","setIsDragging","createEffect","onSizeChange","resolved","resolveChildren","children","child","toArray","dragOver","throttle","event","wrapper","rect","getBoundingClientRect","total","height","width","cursor","clientY","top","clientX","left","clamped","Math","max","min","handleDragStart","handleDragEnd","isServer","document","body","addEventListener","style","onCleanup","removeEventListener","onResizerKeyDown","decreaseKey","increaseKey","key","preventDefault","prev","firstChildStyle","secondChildStyle","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_ref$","mergeRefs","ref","el","_$use","_$insert","$$keydown","$$pointerdown","_$setAttribute","_$effect","_p$","_v$","cn","class","_v$2","_v$3","_v$4","_v$5","round","_v$6","_v$7","_v$8","e","_$className","t","a","_$style","o","i","n","s","h","undefined","_$delegateEvents"],"mappings":"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"}
1
+ {"version":3,"file":"screenDivider.js","sources":["../../../../../src/components/layout/screenDivider/screenDivider.tsx"],"sourcesContent":["import {\n type JSX,\n type ParentProps,\n children as resolveChildren,\n createEffect,\n createSignal,\n mergeProps,\n onCleanup,\n splitProps,\n} from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport cn from \"clsx\";\nimport { throttle } from \"../../../utils/throttle\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\n\nexport interface ScreenDividerProps {\n sizeFirst?: number;\n sizeSecond?: number;\n class?: string;\n orientation?: \"horizontal\" | \"vertical\";\n /** Called with the first pane size (percent) whenever it changes. */\n onSizeChange?: (sizeFirst: number) => void;\n /** Step (in percent) applied on arrow-key resize. */\n keyboardStep?: number;\n /** Accessible label for the resizer handle. */\n resizerAriaLabel?: string;\n /**\n * Smallest size of the first pane that dragging and the keyboard (arrows, Home, End) leave it:\n * a number is pixels, a string is `\"120px\"` or `\"20%\"`; any other unit is ignored. Unset means no minimum.\n */\n minSizeFirst?: number | string | undefined;\n /** Smallest size of the second pane, same units as `minSizeFirst`. If both minimums do not fit, the first one wins. */\n minSizeSecond?: number | string | undefined;\n /**\n * Folds one pane to zero and hides the resizer; the other pane takes the whole divider. Both panes stay mounted,\n * and clearing it brings back the split the divider had. `onSizeChange` is not called for the fold.\n */\n collapsed?: \"first\" | \"second\" | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\ntype ParsedMin = { value: number; unit: \"px\" | \"%\" } | null;\n\n// A bare number, or a number with `px` / `%`; any other unit (`rem`, `vh`, `calc(...)`) is no minimum.\nconst MIN_SIZE = /^(\\d*\\.?\\d+)(px|%)?$/i;\n\nconst parseMinSize = (min: number | string | undefined): ParsedMin => {\n if (min === undefined) return null;\n if (typeof min === \"number\") return Number.isFinite(min) && min > 0 ? { value: min, unit: \"px\" } : null;\n const match = MIN_SIZE.exec(min.trim());\n if (!match) return null;\n const [, digits = \"\", unit] = match;\n const value = parseFloat(digits);\n return value > 0 ? { value, unit: unit === \"%\" ? \"%\" : \"px\" } : null;\n};\n\n/** A minimum as a share (percent) of `available` pixels, the space the two panes split. */\nconst minToPercent = (min: number | string | undefined, available: number): number => {\n const parsed = parseMinSize(min);\n if (!parsed) return 0;\n if (parsed.unit === \"%\") return parsed.value;\n return available > 0 ? (parsed.value / available) * 100 : 0;\n};\n\n/** The range of the first pane's share: the second pane's minimum caps it, the first pane's minimum wins a clash. */\nconst getBounds = (\n minFirst: number | string | undefined,\n minSecond: number | string | undefined,\n available: number\n): [number, number] => {\n const low = Math.min(100, minToPercent(minFirst, available));\n const high = Math.max(low, 100 - minToPercent(minSecond, available));\n return [low, high];\n};\n\n/** Whether the first pane's minimum leaves the second less than its own: then the first one wins. */\nconst minimumsClash = (\n minFirst: number | string | undefined,\n minSecond: number | string | undefined,\n available: number\n): boolean => Math.min(100, minToPercent(minFirst, available)) + minToPercent(minSecond, available) > 100;\n\nconst clampDivider = (value: number, [low, high]: [number, number]) => Math.max(low, Math.min(high, value));\n\nconst getInitialDivider = (sizeFirst?: number | null, sizeSecond?: number | null): number => {\n if (!sizeFirst && sizeSecond) {\n return 100 - sizeSecond;\n }\n if (sizeFirst) {\n return sizeFirst;\n }\n return 50;\n};\n\nexport function ScreenDivider(props: ParentProps<ScreenDividerProps>): JSX.Element {\n const merged = mergeProps(\n { orientation: \"horizontal\" as const, keyboardStep: 5, resizerAriaLabel: \"Resize panels\" },\n props\n );\n const [local] = splitProps(merged, [\n \"class\",\n \"orientation\",\n \"sizeFirst\",\n \"sizeSecond\",\n \"children\",\n \"onSizeChange\",\n \"keyboardStep\",\n \"resizerAriaLabel\",\n \"minSizeFirst\",\n \"minSizeSecond\",\n \"collapsed\",\n \"ref\",\n ]);\n\n let wrapperEl: HTMLDivElement | undefined;\n let resizerEl: HTMLSpanElement | undefined;\n // The thickness the resizer had the last time it was shown.\n let lastBar = 0;\n const [divider, setDivider] = createSignal(getInitialDivider(local.sizeFirst, local.sizeSecond));\n const [isDragging, setIsDragging] = createSignal(false);\n const [available, setAvailable] = createSignal(0);\n const vertical = (): boolean => local.orientation === \"vertical\";\n\n // The pixels the two panes split: the wrapper along its main axis less the resizer. A hidden resizer measures 0, so\n // the thickness it had while shown is subtracted instead, and folding a pane leaves the minimums where they were.\n const measureAvailable = (): number => {\n const main = (el: HTMLElement | undefined): number => {\n const rect = el?.getBoundingClientRect();\n return rect ? (vertical() ? rect.height : rect.width) : 0;\n };\n const bar = main(resizerEl);\n if (bar > 0) lastBar = bar;\n return Math.max(0, main(wrapperEl) - (bar > 0 ? bar : lastBar));\n };\n\n createEffect(() => {\n if (isServer) return;\n if (!parseMinSize(local.minSizeFirst) && !parseMinSize(local.minSizeSecond)) return;\n // Measured again when the orientation or the folded pane changes, and when the wrapper resizes.\n void local.orientation;\n void local.collapsed;\n const update = (): void => {\n setAvailable(measureAvailable());\n };\n update();\n if (!wrapperEl || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(update);\n observer.observe(wrapperEl);\n onCleanup(() => observer.disconnect());\n });\n\n // Sync with controlled size props.\n createEffect(() => {\n setDivider(getInitialDivider(local.sizeFirst, local.sizeSecond));\n });\n\n const bounds = (): [number, number] => getBounds(local.minSizeFirst, local.minSizeSecond, available());\n // What the panes show: the split held within the minimums, whatever the props or the last resize said.\n const shown = (): number => clampDivider(divider(), bounds());\n\n // Report size changes.\n createEffect(() => {\n local.onSizeChange?.(shown());\n });\n\n const resolved = resolveChildren(() => local.children);\n const child = (): unknown[] => resolved.toArray();\n\n const dragOver = throttle((event: PointerEvent) => {\n if (!isDragging() || local.collapsed) return;\n const wrapper = wrapperEl;\n if (!wrapper) return;\n // Viewport-relative rect — using offsetLeft/offsetTop here is wrong\n // because they are relative to the nearest positioned ancestor, not\n // the viewport that clientX/clientY live in (this is what made the\n // divider drift away from the cursor when the wrapper was nested).\n const rect = wrapper.getBoundingClientRect();\n const total = vertical() ? rect.height : rect.width;\n const cursor = vertical() ? event.clientY - rect.top : event.clientX - rect.left;\n // 5px margin on each side so neither pane fully collapses.\n const clamped = Math.max(5, Math.min(total - 5, cursor));\n setDivider(\n clampDivider((clamped / total) * 100, getBounds(local.minSizeFirst, local.minSizeSecond, measureAvailable()))\n );\n }, 1000 / 60);\n\n const handleDragStart = (): void => {\n setIsDragging(true);\n };\n const handleDragEnd = (): void => {\n setIsDragging(false);\n };\n\n createEffect(() => {\n if (isServer) return;\n if (isDragging()) {\n document.body.addEventListener(\"pointerup\", handleDragEnd);\n document.body.addEventListener(\"pointermove\", dragOver);\n document.body.style.cursor = local.orientation === \"horizontal\" ? \"e-resize\" : \"n-resize\";\n } else {\n document.body.style.cursor = \"default\";\n }\n onCleanup(() => {\n document.body.removeEventListener(\"pointerup\", handleDragEnd);\n document.body.removeEventListener(\"pointermove\", dragOver);\n });\n });\n\n const onResizerKeyDown: JSX.EventHandler<HTMLSpanElement, KeyboardEvent> = (event) => {\n const decreaseKey = vertical() ? \"ArrowUp\" : \"ArrowLeft\";\n const increaseKey = vertical() ? \"ArrowDown\" : \"ArrowRight\";\n // Measured now rather than read from the signal, so the minimums hold at the size the divider has this instant.\n const keyBounds = getBounds(local.minSizeFirst, local.minSizeSecond, measureAvailable());\n if (event.key === decreaseKey) {\n event.preventDefault();\n setDivider(clampDivider(Math.max(0, shown() - local.keyboardStep), keyBounds));\n } else if (event.key === increaseKey) {\n event.preventDefault();\n setDivider(clampDivider(Math.min(100, shown() + local.keyboardStep), keyBounds));\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setDivider(clampDivider(0, keyBounds));\n } else if (event.key === \"End\") {\n event.preventDefault();\n setDivider(clampDivider(100, keyBounds));\n }\n };\n\n // A folded pane is 0 and the other 100; both stay in the tree, so nothing inside either remounts.\n const sizeOf = (pane: \"first\" | \"second\"): number => {\n const share = pane === \"first\" ? shown() : 100 - shown();\n return local.collapsed ? (local.collapsed === pane ? 0 : 100) : share;\n };\n const paneStyle = (pane: \"first\" | \"second\"): JSX.CSSProperties => {\n const style: JSX.CSSProperties = vertical() ? { height: `${sizeOf(pane)}%` } : { width: `${sizeOf(pane)}%` };\n // Pixel minimums also floor the pane in CSS, so it holds between a resize and the next measurement.\n const min = parseMinSize(pane === \"first\" ? local.minSizeFirst : local.minSizeSecond);\n // The second pane's floor would beat a first pane's minimum that wins the clash, so it gives way to it.\n const gives = pane === \"second\" && minimumsClash(local.minSizeFirst, local.minSizeSecond, available());\n if (!local.collapsed && !gives && min?.unit === \"px\")\n style[vertical() ? \"min-height\" : \"min-width\"] = `${min.value}px`;\n return style;\n };\n\n return (\n <div\n class={cn(\"smwb-screen-divider__wrapper\", `smwb-${local.orientation}`, local.class)}\n ref={mergeRefs(local.ref, (el) => (wrapperEl = el))}\n data-testid=\"screen-divider\"\n >\n <div\n class={cn(\n \"smwb-screen-divider__first\",\n `smwb-${local.orientation}`,\n local.collapsed === \"first\" && \"smwb-collapsed\"\n )}\n style={paneStyle(\"first\")}\n >\n {(child()[0] ?? \"\") as JSX.Element}\n </div>\n <span\n ref={(el) => (resizerEl = el)}\n class=\"smwb-screen-divider__resizer\"\n hidden={local.collapsed !== undefined}\n onPointerDown={handleDragStart}\n draggable={false}\n role=\"separator\"\n aria-orientation={local.orientation === \"vertical\" ? \"horizontal\" : \"vertical\"}\n aria-valuenow={Math.round(shown())}\n aria-valuemin={Math.round(bounds()[0])}\n aria-valuemax={Math.round(bounds()[1])}\n aria-label={local.resizerAriaLabel}\n tabindex={0}\n onKeyDown={onResizerKeyDown}\n />\n <div\n class={cn(\n \"smwb-screen-divider__second\",\n `smwb-${local.orientation}`,\n local.collapsed === \"second\" && \"smwb-collapsed\"\n )}\n style={paneStyle(\"second\")}\n >\n {(child()[1] ?? \"\") as JSX.Element}\n </div>\n </div>\n );\n}\n\nexport default ScreenDivider;\n"],"names":["MIN_SIZE","parseMinSize","min","undefined","Number","isFinite","value","unit","match","exec","trim","digits","parseFloat","minToPercent","available","parsed","getBounds","minFirst","minSecond","low","Math","high","max","minimumsClash","clampDivider","getInitialDivider","sizeFirst","sizeSecond","ScreenDivider","props","merged","mergeProps","orientation","keyboardStep","resizerAriaLabel","local","splitProps","wrapperEl","resizerEl","lastBar","divider","setDivider","createSignal","isDragging","setIsDragging","setAvailable","vertical","measureAvailable","main","el","rect","getBoundingClientRect","height","width","bar","createEffect","isServer","minSizeFirst","minSizeSecond","collapsed","update","ResizeObserver","observer","observe","onCleanup","disconnect","bounds","shown","onSizeChange","resolved","resolveChildren","children","child","toArray","dragOver","throttle","event","wrapper","total","cursor","clientY","top","clientX","left","clamped","handleDragStart","handleDragEnd","document","body","addEventListener","style","removeEventListener","onResizerKeyDown","decreaseKey","increaseKey","keyBounds","key","preventDefault","sizeOf","pane","share","paneStyle","gives","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_ref$","mergeRefs","ref","_$use","_$insert","$$keydown","$$pointerdown","_$setAttribute","_$effect","_p$","_v$","cn","class","_v$2","_v$3","_v$4","_v$5","_v$6","round","_v$7","_v$8","_v$9","_v$0","_v$1","e","_$className","t","a","_$style","o","hidden","i","n","s","h","r","d","l","_$delegateEvents"],"mappings":"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"}