@smwb/ui-solid 2.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.
- package/README.md +115 -0
- package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
- package/dist/assets/styles/less/components/avatar/avatar.entry.css +1 -1
- package/dist/assets/styles/less/components/breadcrumbs/breadcrumbs.entry.css +1 -1
- package/dist/assets/styles/less/components/button/button.entry.css +1 -1
- package/dist/assets/styles/less/components/buttonGroup/buttonGroup.entry.css +1 -1
- package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -1
- package/dist/assets/styles/less/components/meter/meter.entry.css +1 -1
- package/dist/assets/styles/less/components/screenDivider/screenDivider.entry.css +1 -1
- package/dist/assets/styles/less/components/sheet/sheet.entry.css +1 -1
- package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -1
- package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -1
- package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
- package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
- package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
- package/dist/assets/styles/less/tokens.entry.css +1 -1
- package/dist/components/dataDisplay/avatar/avatar.d.ts +5 -2
- package/dist/components/dataDisplay/avatar/avatar.js +9 -9
- package/dist/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/components/dataDisplay/chart/chart.d.ts +16 -8
- package/dist/components/dataDisplay/chart/chartFull.d.ts +14 -0
- package/dist/components/dataDisplay/chart/core.d.ts +19 -0
- package/dist/components/dataDisplay/chart/index.d.ts +1 -1
- package/dist/components/dataDisplay/dagView/dagView.d.ts +4 -0
- package/dist/components/dataDisplay/dagView/dagView.js +124 -123
- package/dist/components/dataDisplay/dagView/dagView.js.map +1 -1
- package/dist/components/dataDisplay/dagView/index.d.ts +1 -1
- package/dist/components/dataDisplay/meter/index.d.ts +1 -1
- package/dist/components/dataDisplay/meter/meter.d.ts +14 -0
- package/dist/components/dataDisplay/meter/meter.js +32 -30
- package/dist/components/dataDisplay/meter/meter.js.map +1 -1
- package/dist/components/dataDisplay/statusDot/index.d.ts +1 -1
- package/dist/components/dataDisplay/statusDot/statusDot.d.ts +10 -1
- package/dist/components/dataDisplay/statusDot/statusDot.js +20 -11
- package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -1
- package/dist/components/dataDisplay/treeView/treeView.d.ts +18 -2
- package/dist/components/dataDisplay/treeView/treeView.js +140 -121
- package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/components/inputs/button/button.d.ts +7 -0
- package/dist/components/inputs/button/button.js +57 -51
- package/dist/components/inputs/button/button.js.map +1 -1
- package/dist/components/inputs/toggle/toggle.d.ts +6 -0
- package/dist/components/inputs/toggle/toggle.js +23 -23
- package/dist/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/components/layout/appLayout/appLayout.d.ts +6 -1
- package/dist/components/layout/appLayout/appLayout.js +49 -42
- package/dist/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/components/layout/screenDivider/screenDivider.d.ts +12 -0
- package/dist/components/layout/screenDivider/screenDivider.js +87 -46
- package/dist/components/layout/screenDivider/screenDivider.js.map +1 -1
- package/dist/components/layout/sheet/sheet.d.ts +11 -0
- package/dist/components/layout/sheet/sheet.js +122 -102
- package/dist/components/layout/sheet/sheet.js.map +1 -1
- package/dist/components/layout/tabGroups/index.d.ts +1 -1
- package/dist/components/layout/tabGroups/tabGroups.d.ts +44 -1
- package/dist/components/layout/tabGroups/tabGroups.js +500 -460
- package/dist/components/layout/tabGroups/tabGroups.js.map +1 -1
- package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +16 -0
- package/dist/components/layout/tabGroups/tabGroupsFocus.js +102 -70
- package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
- package/dist/components/navigation/appBar/appBar.d.ts +12 -0
- package/dist/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/components/navigation/breadcrumbs/breadcrumbs.d.ts +9 -0
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js +47 -31
- package/dist/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/components/navigation/tabs/tab/tab.js +71 -68
- package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/components/navigation/tabs/tabs.d.ts +11 -0
- package/dist/components/navigation/tabs/tabs.js +19 -16
- package/dist/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/components/navigation/tabs/tabsContext.d.ts +2 -0
- package/dist/components/navigation/tabs/tabsContext.js.map +1 -1
- package/dist/headless/components/dataDisplay/avatar/avatar.js +9 -9
- package/dist/headless/components/dataDisplay/avatar/avatar.js.map +1 -1
- package/dist/headless/components/dataDisplay/dagView/dagView.js +133 -132
- package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -1
- package/dist/headless/components/dataDisplay/meter/meter.js +32 -30
- package/dist/headless/components/dataDisplay/meter/meter.js.map +1 -1
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js +19 -10
- package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -1
- package/dist/headless/components/dataDisplay/treeView/treeView.js +139 -120
- package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
- package/dist/headless/components/inputs/button/button.js +57 -51
- package/dist/headless/components/inputs/button/button.js.map +1 -1
- package/dist/headless/components/inputs/toggle/toggle.js +23 -23
- package/dist/headless/components/inputs/toggle/toggle.js.map +1 -1
- package/dist/headless/components/layout/appLayout/appLayout.js +52 -45
- package/dist/headless/components/layout/appLayout/appLayout.js.map +1 -1
- package/dist/headless/components/layout/screenDivider/screenDivider.js +88 -47
- package/dist/headless/components/layout/screenDivider/screenDivider.js.map +1 -1
- package/dist/headless/components/layout/sheet/sheet.js +124 -104
- package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
- package/dist/headless/components/layout/tabGroups/tabGroups.js +500 -460
- package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -1
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +102 -70
- package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -1
- package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js +46 -30
- package/dist/headless/components/navigation/breadcrumbs/breadcrumbs.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tab/tab.js +70 -67
- package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabs.js +19 -16
- package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
- package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -1
- package/dist/headless/primitives/publishHeaderOffset.js +19 -0
- package/dist/headless/primitives/publishHeaderOffset.js.map +1 -0
- package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx +1 -0
- package/dist/headless/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chart/chart.jsx +14 -12
- package/dist/headless/source/components/dataDisplay/chart/chart.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/chart/chartFull.js +12 -0
- package/dist/headless/source/components/dataDisplay/chart/chartFull.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/chart/core.js +11 -0
- package/dist/headless/source/components/dataDisplay/chart/core.js.map +7 -0
- package/dist/headless/source/components/dataDisplay/chart/index.js +1 -1
- package/dist/headless/source/components/dataDisplay/chart/index.js.map +1 -1
- package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx +2 -1
- package/dist/headless/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/dagView/index.js.map +2 -2
- package/dist/headless/source/components/dataDisplay/meter/index.js.map +1 -1
- package/dist/headless/source/components/dataDisplay/meter/meter.jsx +14 -2
- package/dist/headless/source/components/dataDisplay/meter/meter.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/statusDot/index.js.map +1 -1
- package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
- package/dist/headless/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
- package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx +16 -3
- package/dist/headless/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
- package/dist/headless/source/components/inputs/button/button.jsx +26 -1
- package/dist/headless/source/components/inputs/button/button.jsx.map +1 -1
- package/dist/headless/source/components/inputs/toggle/toggle.jsx +9 -2
- package/dist/headless/source/components/inputs/toggle/toggle.jsx.map +1 -1
- package/dist/headless/source/components/layout/appLayout/appLayout.jsx +14 -2
- package/dist/headless/source/components/layout/appLayout/appLayout.jsx.map +1 -1
- package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx +102 -18
- package/dist/headless/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
- package/dist/headless/source/components/layout/sheet/sheet.jsx +14 -1
- package/dist/headless/source/components/layout/sheet/sheet.jsx.map +1 -1
- package/dist/headless/source/components/layout/tabGroups/index.js.map +1 -1
- package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx +55 -1
- package/dist/headless/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
- package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
- package/dist/headless/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
- package/dist/headless/source/components/navigation/appBar/appBar.jsx.map +1 -1
- package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
- package/dist/headless/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
- package/dist/headless/source/components/navigation/tabs/tab/tab.jsx +7 -1
- package/dist/headless/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
- package/dist/headless/source/components/navigation/tabs/tabs.jsx +5 -1
- package/dist/headless/source/components/navigation/tabs/tabs.jsx.map +1 -1
- package/dist/headless/source/components/navigation/tabs/tabsContext.js.map +2 -2
- package/dist/headless/source/index.js +8 -1
- package/dist/headless/source/index.js.map +2 -2
- package/dist/headless/source/primitives/publishHeaderOffset.js +34 -0
- package/dist/headless/source/primitives/publishHeaderOffset.js.map +7 -0
- package/dist/index.d.ts +5 -5
- package/dist/primitives/publishHeaderOffset.d.ts +7 -0
- package/dist/primitives/publishHeaderOffset.js +19 -0
- package/dist/primitives/publishHeaderOffset.js.map +1 -0
- package/dist/source/components/dataDisplay/avatar/avatar.jsx +1 -0
- package/dist/source/components/dataDisplay/avatar/avatar.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chart/chart.jsx +14 -12
- package/dist/source/components/dataDisplay/chart/chart.jsx.map +1 -1
- package/dist/source/components/dataDisplay/chart/chartFull.js +12 -0
- package/dist/source/components/dataDisplay/chart/chartFull.js.map +7 -0
- package/dist/source/components/dataDisplay/chart/core.js +11 -0
- package/dist/source/components/dataDisplay/chart/core.js.map +7 -0
- package/dist/source/components/dataDisplay/chart/index.js +1 -1
- package/dist/source/components/dataDisplay/chart/index.js.map +1 -1
- package/dist/source/components/dataDisplay/dagView/dagView.jsx +2 -1
- package/dist/source/components/dataDisplay/dagView/dagView.jsx.map +1 -1
- package/dist/source/components/dataDisplay/dagView/index.js.map +2 -2
- package/dist/source/components/dataDisplay/meter/index.js.map +1 -1
- package/dist/source/components/dataDisplay/meter/meter.jsx +14 -2
- package/dist/source/components/dataDisplay/meter/meter.jsx.map +1 -1
- package/dist/source/components/dataDisplay/statusDot/index.js.map +1 -1
- package/dist/source/components/dataDisplay/statusDot/statusDot.jsx +13 -1
- package/dist/source/components/dataDisplay/statusDot/statusDot.jsx.map +1 -1
- package/dist/source/components/dataDisplay/treeView/treeView.jsx +16 -3
- package/dist/source/components/dataDisplay/treeView/treeView.jsx.map +1 -1
- package/dist/source/components/inputs/button/button.jsx +26 -1
- package/dist/source/components/inputs/button/button.jsx.map +1 -1
- package/dist/source/components/inputs/toggle/toggle.jsx +9 -2
- package/dist/source/components/inputs/toggle/toggle.jsx.map +1 -1
- package/dist/source/components/layout/appLayout/appLayout.jsx +14 -2
- package/dist/source/components/layout/appLayout/appLayout.jsx.map +1 -1
- package/dist/source/components/layout/screenDivider/screenDivider.jsx +102 -18
- package/dist/source/components/layout/screenDivider/screenDivider.jsx.map +1 -1
- package/dist/source/components/layout/sheet/sheet.jsx +14 -1
- package/dist/source/components/layout/sheet/sheet.jsx.map +1 -1
- package/dist/source/components/layout/tabGroups/index.js.map +1 -1
- package/dist/source/components/layout/tabGroups/tabGroups.jsx +55 -1
- package/dist/source/components/layout/tabGroups/tabGroups.jsx.map +1 -1
- package/dist/source/components/layout/tabGroups/tabGroupsFocus.js +42 -0
- package/dist/source/components/layout/tabGroups/tabGroupsFocus.js.map +2 -2
- package/dist/source/components/navigation/appBar/appBar.jsx.map +1 -1
- package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx +39 -4
- package/dist/source/components/navigation/breadcrumbs/breadcrumbs.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/tab/tab.jsx +7 -1
- package/dist/source/components/navigation/tabs/tab/tab.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/tabs.jsx +5 -1
- package/dist/source/components/navigation/tabs/tabs.jsx.map +1 -1
- package/dist/source/components/navigation/tabs/tabsContext.js.map +2 -2
- package/dist/source/index.js +8 -1
- package/dist/source/index.js.map +2 -2
- package/dist/source/primitives/publishHeaderOffset.js +34 -0
- package/dist/source/primitives/publishHeaderOffset.js.map +7 -0
- package/package.json +9 -3
|
@@ -1,56 +1,94 @@
|
|
|
1
|
-
import { isServer as
|
|
2
|
-
import { mergeProps as
|
|
3
|
-
import
|
|
4
|
-
import { throttle as
|
|
5
|
-
import { mergeRefs as
|
|
6
|
-
var
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
},
|
|
14
|
-
let
|
|
15
|
-
const [
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
22
|
-
if (!
|
|
23
|
-
const
|
|
24
|
-
if (!
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
}, 1e3 / 60),
|
|
28
|
-
|
|
29
|
-
},
|
|
30
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
document.body.removeEventListener("pointerup",
|
|
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
|
|
38
|
-
const
|
|
39
|
-
t.key ===
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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 =
|
|
51
|
-
return typeof
|
|
52
|
-
var
|
|
53
|
-
return
|
|
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
|
-
|
|
107
|
+
ne(["pointerdown", "keydown"]);
|
|
67
108
|
export {
|
|
68
|
-
|
|
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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"}
|