@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.
- 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/badge/badge.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/badge/badge.d.ts +2 -1
- package/dist/components/dataDisplay/badge/badge.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 +15 -1
- 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/badge/badge.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/badge/badge.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/badge/badge.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,28 +1,33 @@
|
|
|
1
|
-
import { createComponent as
|
|
2
|
-
import { mergeProps as
|
|
3
|
-
import
|
|
4
|
-
import { mergeRefs as
|
|
5
|
-
import { useButtonGroup as
|
|
6
|
-
import { callHandler as
|
|
7
|
-
import { resolveLinkRel as
|
|
8
|
-
import { Ripple as
|
|
9
|
-
import { Icon as
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { createComponent as o, use as w, spread as y, mergeProps as u, insert as O, template as P, memo as _ } from "solid-js/web";
|
|
2
|
+
import { mergeProps as L, splitProps as D, children as R, Show as d } from "solid-js";
|
|
3
|
+
import T from "clsx";
|
|
4
|
+
import { mergeRefs as v } from "../../../primitives/mergeRefs.js";
|
|
5
|
+
import { useButtonGroup as k } from "../buttonGroups/buttonGroupContext.js";
|
|
6
|
+
import { callHandler as z } from "../../../primitives/callHandler.js";
|
|
7
|
+
import { resolveLinkRel as B, resolveLinkTarget as E } from "../../../utils/linkAttrs.js";
|
|
8
|
+
import { Ripple as W } from "../../base/ripple/ripple.js";
|
|
9
|
+
import { Icon as Y } from "../../base/icon/icon.js";
|
|
10
|
+
var q = /* @__PURE__ */ P("<a>"), A = /* @__PURE__ */ P("<button>");
|
|
11
|
+
const x = "`iconOnly` has no text, so it needs an `aria-label` (or `aria-labelledby`) to be named.", H = "`iconOnly` is a square for one icon: a `label` is clipped. Drop it and name the button with `aria-label`.", S = "`iconOnly` is a square for one icon: children are clipped. Drop them and name the button with `aria-label`.", G = "`iconOnly` without an `icon` draws an empty square.", N = /* @__PURE__ */ new Set();
|
|
12
|
+
function a(i, r) {
|
|
13
|
+
N.has(i) || (N.add(i), console.warn(`[smwb] Button: ${r}`));
|
|
14
|
+
}
|
|
15
|
+
function Z(i) {
|
|
16
|
+
const r = k(), $ = L({
|
|
13
17
|
get variant() {
|
|
14
|
-
return
|
|
18
|
+
return r?.variant ?? "contained";
|
|
15
19
|
},
|
|
16
20
|
get size() {
|
|
17
|
-
return
|
|
21
|
+
return r?.size ?? "medium";
|
|
18
22
|
},
|
|
19
23
|
get colorTheme() {
|
|
20
|
-
return
|
|
24
|
+
return r?.colorTheme ?? "primary";
|
|
21
25
|
}
|
|
22
|
-
},
|
|
26
|
+
}, i), [e, l] = D($, [
|
|
23
27
|
"label",
|
|
24
28
|
"variant",
|
|
25
29
|
"icon",
|
|
30
|
+
"iconOnly",
|
|
26
31
|
"iconProps",
|
|
27
32
|
"href",
|
|
28
33
|
"target",
|
|
@@ -40,85 +45,86 @@ function O(_) {
|
|
|
40
45
|
"color",
|
|
41
46
|
"ref",
|
|
42
47
|
"data-testid"
|
|
43
|
-
]),
|
|
44
|
-
let
|
|
45
|
-
const
|
|
46
|
-
"smwb-disabled":
|
|
47
|
-
"smwb-full-width":
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
]), m = () => E(e.target), p = () => e.color ?? r?.color ?? e.colorTheme, s = () => e.disabled ?? r?.disabled, C = () => e.fullWidth ?? r?.fullWidth;
|
|
49
|
+
let f;
|
|
50
|
+
const b = () => T("smwb-button", `smwb-${e.variant}`, `smwb-${e.size}`, p() === "primary" ? "smwb-primary" : `smwb-button_color-${p()}`, r && "smwb-button-group__grouped", e.class, {
|
|
51
|
+
"smwb-disabled": s(),
|
|
52
|
+
"smwb-full-width": C(),
|
|
53
|
+
"smwb-button_icon-only": e.iconOnly
|
|
54
|
+
}), h = (t) => {
|
|
55
|
+
z(e.onPointerDown, t), s() || f?.onRipple(t);
|
|
56
|
+
}, c = R(() => e.icon), I = () => {
|
|
57
|
+
const t = c();
|
|
58
|
+
return typeof t == "string" ? o(Y, u(() => e.iconProps ?? {}, {
|
|
59
|
+
name: t
|
|
60
|
+
})) : t;
|
|
61
|
+
}, g = () => [o(d, {
|
|
56
62
|
get when() {
|
|
57
|
-
return
|
|
63
|
+
return c();
|
|
58
64
|
},
|
|
59
65
|
get children() {
|
|
60
|
-
return
|
|
66
|
+
return I();
|
|
61
67
|
}
|
|
62
|
-
}),
|
|
68
|
+
}), _(() => _(() => !!e.label)() ? e.label : e.children), o(d, {
|
|
63
69
|
get when() {
|
|
64
70
|
return !e.disableRipple;
|
|
65
71
|
},
|
|
66
72
|
get children() {
|
|
67
|
-
return
|
|
68
|
-
actionRef: (
|
|
73
|
+
return o(W, {
|
|
74
|
+
actionRef: (t) => f = t,
|
|
69
75
|
get center() {
|
|
70
76
|
return e.rippleCenter;
|
|
71
77
|
}
|
|
72
78
|
});
|
|
73
79
|
}
|
|
74
80
|
})];
|
|
75
|
-
return
|
|
81
|
+
return e.iconOnly && (!l["aria-label"] && !l["aria-labelledby"] && a("name", x), e.label ? a("label", H) : "children" in e && a("children", S), c() || a("icon", G)), o(d, {
|
|
76
82
|
get when() {
|
|
77
83
|
return e.href;
|
|
78
84
|
},
|
|
79
85
|
get fallback() {
|
|
80
86
|
return (() => {
|
|
81
|
-
var
|
|
82
|
-
return typeof
|
|
87
|
+
var t = A(), n = v(e.ref);
|
|
88
|
+
return typeof n == "function" && w(n, t), y(t, u({
|
|
83
89
|
get "data-testid"() {
|
|
84
90
|
return e["data-testid"] ?? "button";
|
|
85
91
|
}
|
|
86
|
-
},
|
|
92
|
+
}, l, {
|
|
87
93
|
get class() {
|
|
88
|
-
return
|
|
94
|
+
return b();
|
|
89
95
|
},
|
|
90
|
-
onPointerDown:
|
|
96
|
+
onPointerDown: h,
|
|
91
97
|
get disabled() {
|
|
92
|
-
return !!
|
|
98
|
+
return !!s();
|
|
93
99
|
}
|
|
94
|
-
}), !1, !0),
|
|
100
|
+
}), !1, !0), O(t, g), t;
|
|
95
101
|
})();
|
|
96
102
|
},
|
|
97
103
|
get children() {
|
|
98
|
-
var
|
|
99
|
-
return typeof
|
|
104
|
+
var t = q(), n = v(e.ref);
|
|
105
|
+
return typeof n == "function" && w(n, t), y(t, u({
|
|
100
106
|
get "data-testid"() {
|
|
101
107
|
return e["data-testid"] ?? "button-link";
|
|
102
108
|
}
|
|
103
|
-
},
|
|
109
|
+
}, l, {
|
|
104
110
|
get class() {
|
|
105
|
-
return
|
|
111
|
+
return b();
|
|
106
112
|
},
|
|
107
113
|
get href() {
|
|
108
114
|
return e.href;
|
|
109
115
|
},
|
|
110
116
|
get target() {
|
|
111
|
-
return
|
|
117
|
+
return m();
|
|
112
118
|
},
|
|
113
119
|
get rel() {
|
|
114
|
-
return
|
|
120
|
+
return B(e.rel, m());
|
|
115
121
|
},
|
|
116
|
-
onPointerDown:
|
|
117
|
-
}), !1, !0),
|
|
122
|
+
onPointerDown: h
|
|
123
|
+
}), !1, !0), O(t, g), t;
|
|
118
124
|
}
|
|
119
125
|
});
|
|
120
126
|
}
|
|
121
127
|
export {
|
|
122
|
-
|
|
128
|
+
Z as Button
|
|
123
129
|
};
|
|
124
130
|
//# sourceMappingURL=button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","sources":["../../../../../src/components/inputs/button/button.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../base/ripple\";\nimport { Icon, type IconProps } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { useButtonGroup } from \"../buttonGroups/buttonGroupContext\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport { resolveLinkRel, resolveLinkTarget } from \"../../../utils/linkAttrs\";\n\nexport interface ButtonProps extends JSX.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n /** Button text. */\n label?: string;\n /** Visual style of the button. */\n variant?: \"contained\" | \"text\" | \"outlined\";\n /** Button size. */\n size?: \"small\" | \"medium\" | \"large\";\n /** Icon as an element (e.g. <Icon/>) or a string (icon name / url / base64). */\n icon?: JSX.Element | string;\n /** Props forwarded to the <Icon/> when `icon` is a string. */\n iconProps?: Omit<IconProps, \"name\">;\n /** @deprecated use `color`. Kept for backward compatibility. */\n colorTheme?: \"primary\";\n /** Semantic color, resolved through `--smwb-*Color*` tokens. */\n color?: \"primary\" | \"secondary\" | \"error\" | \"success\" | \"warning\" | \"info\";\n /** When set, the component renders as an <a>. */\n href?: string;\n /**\n * Where a link (with `href`) opens. By default `\"_blank\"`: a new tab. `null` leaves the `target`\n * attribute out, so the link opens in place, like an internal one; an empty string does the same, and\n * any other string is used as is.\n */\n target?: string | null | undefined;\n /**\n * The `rel` of a link (with `href`). By default `\"noreferrer\"` for a link that opens another tab or\n * window, and none for one that opens in place. Your own value replaces the default, so add `noreferrer` yourself\n * if you still want it; an empty string drops the attribute.\n */\n rel?: string | undefined;\n disabled?: boolean;\n type?: \"button\" | \"submit\" | \"reset\";\n /** Stretch to the full width of the container. */\n fullWidth?: boolean;\n /** Center the ripple effect. */\n rippleCenter?: boolean;\n /** Disable the ripple effect. */\n disableRipple?: boolean;\n /** Test id of the root; `button`, or `button-link` for a link, unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;\n}\n\nexport function Button(props: ParentProps<ButtonProps>): JSX.Element {\n const group = useButtonGroup();\n const merged = mergeProps(\n {\n get variant(): NonNullable<ButtonProps[\"variant\"]> {\n return group?.variant ?? \"contained\";\n },\n get size(): NonNullable<ButtonProps[\"size\"]> {\n return group?.size ?? \"medium\";\n },\n get colorTheme(): NonNullable<ButtonProps[\"colorTheme\"]> {\n return group?.colorTheme ?? \"primary\";\n },\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"label\",\n \"variant\",\n \"icon\",\n \"iconProps\",\n \"href\",\n \"target\",\n \"rel\",\n \"class\",\n \"disabled\",\n \"children\",\n \"fullWidth\",\n \"rippleCenter\",\n \"disableRipple\",\n // The button sets this on its root too; its own handler calls the caller's first.\n \"onPointerDown\",\n \"size\",\n \"colorTheme\",\n \"color\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const linkTarget = (): string | undefined => resolveLinkTarget(local.target);\n const color = (): string => local.color ?? group?.color ?? local.colorTheme;\n const disabled = (): boolean | undefined => local.disabled ?? group?.disabled;\n const fullWidth = (): boolean | undefined => local.fullWidth ?? group?.fullWidth;\n let rippleActions: RippleActionsRef | undefined;\n\n const classes = (): string =>\n cn(\n \"smwb-button\",\n `smwb-${local.variant}`,\n `smwb-${local.size}`,\n color() === \"primary\" ? \"smwb-primary\" : `smwb-button_color-${color()}`,\n group && \"smwb-button-group__grouped\",\n local.class,\n {\n \"smwb-disabled\": disabled(),\n \"smwb-full-width\": fullWidth(),\n }\n );\n\n // Ripple on pointerdown so it fires for touch and pen, not just mouse.\n const onPointerDown: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, PointerEvent> = (event) => {\n callHandler(local.onPointerDown, event);\n if (!disabled()) {\n rippleActions?.onRipple(event);\n }\n };\n\n // Read the icon once: markup passed as a prop is created anew on every read,\n // and during hydration the copy made for a <Show> test has no server DOM node.\n const icon = children(() => local.icon);\n const iconElement = (): JSX.Element => {\n const resolved = icon();\n return typeof resolved === \"string\" ? <Icon {...(local.iconProps ?? {})} name={resolved} /> : resolved;\n };\n\n const content = (): JSX.Element => (\n <>\n <Show when={icon()}>{iconElement()}</Show>\n {local.label ? local.label : local.children}\n <Show when={!local.disableRipple}>\n <Ripple actionRef={(actions) => (rippleActions = actions)} center={local.rippleCenter} />\n </Show>\n </>\n );\n\n return (\n <Show\n when={local.href}\n fallback={\n <button\n data-testid={local[\"data-testid\"] ?? \"button\"}\n {...rest}\n ref={mergeRefs(local.ref)}\n class={classes()}\n onPointerDown={onPointerDown}\n disabled={!!disabled()}\n >\n {content()}\n </button>\n }\n >\n <a\n data-testid={local[\"data-testid\"] ?? \"button-link\"}\n {...rest}\n ref={mergeRefs(local.ref)}\n class={classes()}\n href={local.href}\n target={linkTarget()}\n rel={resolveLinkRel(local.rel, linkTarget())}\n onPointerDown={onPointerDown}\n >\n {content()}\n </a>\n </Show>\n );\n}\n\nexport default Button;\n"],"names":["Button","props","group","useButtonGroup","merged","mergeProps","variant","size","colorTheme","local","rest","splitProps","linkTarget","resolveLinkTarget","target","color","disabled","fullWidth","rippleActions","classes","cn","class","onPointerDown","event","callHandler","onRipple","icon","children","iconElement","resolved","_$createComponent","Icon","_$mergeProps","iconProps","name","content","Show","when","_$memo","label","disableRipple","Ripple","actionRef","actions","center","rippleCenter","href","fallback","_el$2","_tmpl$2","_ref$2","mergeRefs","ref","_$use","_$spread","_$insert","_el$","_tmpl$","_ref$","rel","resolveLinkRel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button.js","sources":["../../../../../src/components/inputs/button/button.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Ripple, type RippleActionsRef } from \"../../base/ripple\";\nimport { Icon, type IconProps } from \"../../base/icon\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { useButtonGroup } from \"../buttonGroups/buttonGroupContext\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport { resolveLinkRel, resolveLinkTarget } from \"../../../utils/linkAttrs\";\n\nexport interface ButtonProps extends JSX.HTMLAttributes<HTMLButtonElement | HTMLAnchorElement> {\n /** Button text. */\n label?: string;\n /** Visual style of the button. */\n variant?: \"contained\" | \"text\" | \"outlined\";\n /** Button size. */\n size?: \"small\" | \"medium\" | \"large\";\n /** Icon as an element (e.g. <Icon/>) or a string (icon name / url / base64). */\n icon?: JSX.Element | string;\n /**\n * Icon-only button: a square of its size's control height (`--smui-control-h-sm/md/lg`), with no\n * `min-width` and no padding. Works for every `variant` and for a link (`href`). It has no text, so its\n * name comes from `aria-label` (or `aria-labelledby`); without one the component warns in the console.\n * Apart from `fullWidth`: a square does not stretch.\n */\n iconOnly?: boolean;\n /** Props forwarded to the <Icon/> when `icon` is a string. */\n iconProps?: Omit<IconProps, \"name\">;\n /** @deprecated use `color`. Kept for backward compatibility. */\n colorTheme?: \"primary\";\n /** Semantic color, resolved through `--smwb-*Color*` tokens. */\n color?: \"primary\" | \"secondary\" | \"error\" | \"success\" | \"warning\" | \"info\";\n /** When set, the component renders as an <a>. */\n href?: string;\n /**\n * Where a link (with `href`) opens. By default `\"_blank\"`: a new tab. `null` leaves the `target`\n * attribute out, so the link opens in place, like an internal one; an empty string does the same, and\n * any other string is used as is.\n */\n target?: string | null | undefined;\n /**\n * The `rel` of a link (with `href`). By default `\"noreferrer\"` for a link that opens another tab or\n * window, and none for one that opens in place. Your own value replaces the default, so add `noreferrer` yourself\n * if you still want it; an empty string drops the attribute.\n */\n rel?: string | undefined;\n disabled?: boolean;\n type?: \"button\" | \"submit\" | \"reset\";\n /** Stretch to the full width of the container. */\n fullWidth?: boolean;\n /** Center the ripple effect. */\n rippleCenter?: boolean;\n /** Disable the ripple effect. */\n disableRipple?: boolean;\n /** Test id of the root; `button`, or `button-link` for a link, unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLButtonElement | HTMLAnchorElement>;\n}\n\nconst ICON_ONLY_NAME = \"`iconOnly` has no text, so it needs an `aria-label` (or `aria-labelledby`) to be named.\";\nconst ICON_ONLY_LABEL =\n \"`iconOnly` is a square for one icon: a `label` is clipped. Drop it and name the button with `aria-label`.\";\nconst ICON_ONLY_CHILDREN =\n \"`iconOnly` is a square for one icon: children are clipped. Drop them and name the button with `aria-label`.\";\nconst ICON_ONLY_ICON = \"`iconOnly` without an `icon` draws an empty square.\";\n\nconst warnedIconOnly = new Set<string>();\n\n// Warns unconditionally, once per kind of mistake, like the rest of ui-solid (icon.tsx).\nfunction warnIconOnly(kind: \"name\" | \"label\" | \"children\" | \"icon\", message: string): void {\n if (warnedIconOnly.has(kind)) return;\n warnedIconOnly.add(kind);\n console.warn(`[smwb] Button: ${message}`);\n}\n\nexport function Button(props: ParentProps<ButtonProps>): JSX.Element {\n const group = useButtonGroup();\n const merged = mergeProps(\n {\n get variant(): NonNullable<ButtonProps[\"variant\"]> {\n return group?.variant ?? \"contained\";\n },\n get size(): NonNullable<ButtonProps[\"size\"]> {\n return group?.size ?? \"medium\";\n },\n get colorTheme(): NonNullable<ButtonProps[\"colorTheme\"]> {\n return group?.colorTheme ?? \"primary\";\n },\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"label\",\n \"variant\",\n \"icon\",\n \"iconOnly\",\n \"iconProps\",\n \"href\",\n \"target\",\n \"rel\",\n \"class\",\n \"disabled\",\n \"children\",\n \"fullWidth\",\n \"rippleCenter\",\n \"disableRipple\",\n // The button sets this on its root too; its own handler calls the caller's first.\n \"onPointerDown\",\n \"size\",\n \"colorTheme\",\n \"color\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const linkTarget = (): string | undefined => resolveLinkTarget(local.target);\n const color = (): string => local.color ?? group?.color ?? local.colorTheme;\n const disabled = (): boolean | undefined => local.disabled ?? group?.disabled;\n const fullWidth = (): boolean | undefined => local.fullWidth ?? group?.fullWidth;\n let rippleActions: RippleActionsRef | undefined;\n\n const classes = (): string =>\n cn(\n \"smwb-button\",\n `smwb-${local.variant}`,\n `smwb-${local.size}`,\n color() === \"primary\" ? \"smwb-primary\" : `smwb-button_color-${color()}`,\n group && \"smwb-button-group__grouped\",\n local.class,\n {\n \"smwb-disabled\": disabled(),\n \"smwb-full-width\": fullWidth(),\n \"smwb-button_icon-only\": local.iconOnly,\n }\n );\n\n // Ripple on pointerdown so it fires for touch and pen, not just mouse.\n const onPointerDown: JSX.EventHandler<HTMLButtonElement | HTMLAnchorElement, PointerEvent> = (event) => {\n callHandler(local.onPointerDown, event);\n if (!disabled()) {\n rippleActions?.onRipple(event);\n }\n };\n\n // Read the icon once: markup passed as a prop is created anew on every read,\n // and during hydration the copy made for a <Show> test has no server DOM node.\n const icon = children(() => local.icon);\n const iconElement = (): JSX.Element => {\n const resolved = icon();\n return typeof resolved === \"string\" ? <Icon {...(local.iconProps ?? {})} name={resolved} /> : resolved;\n };\n\n const content = (): JSX.Element => (\n <>\n <Show when={icon()}>{iconElement()}</Show>\n {local.label ? local.label : local.children}\n <Show when={!local.disableRipple}>\n <Ripple actionRef={(actions) => (rippleActions = actions)} center={local.rippleCenter} />\n </Show>\n </>\n );\n\n // Checked once, here: `children` is only looked up by key, because reading it would create its nodes.\n if (local.iconOnly) {\n if (!rest[\"aria-label\"] && !rest[\"aria-labelledby\"]) {\n warnIconOnly(\"name\", ICON_ONLY_NAME);\n }\n if (local.label) {\n warnIconOnly(\"label\", ICON_ONLY_LABEL);\n } else if (\"children\" in local) {\n warnIconOnly(\"children\", ICON_ONLY_CHILDREN);\n }\n if (!icon()) {\n warnIconOnly(\"icon\", ICON_ONLY_ICON);\n }\n }\n\n return (\n <Show\n when={local.href}\n fallback={\n <button\n data-testid={local[\"data-testid\"] ?? \"button\"}\n {...rest}\n ref={mergeRefs(local.ref)}\n class={classes()}\n onPointerDown={onPointerDown}\n disabled={!!disabled()}\n >\n {content()}\n </button>\n }\n >\n <a\n data-testid={local[\"data-testid\"] ?? \"button-link\"}\n {...rest}\n ref={mergeRefs(local.ref)}\n class={classes()}\n href={local.href}\n target={linkTarget()}\n rel={resolveLinkRel(local.rel, linkTarget())}\n onPointerDown={onPointerDown}\n >\n {content()}\n </a>\n </Show>\n );\n}\n\nexport default Button;\n"],"names":["ICON_ONLY_NAME","ICON_ONLY_LABEL","ICON_ONLY_CHILDREN","ICON_ONLY_ICON","warnedIconOnly","Set","warnIconOnly","kind","message","has","add","console","warn","Button","props","group","useButtonGroup","merged","mergeProps","variant","size","colorTheme","local","rest","splitProps","linkTarget","resolveLinkTarget","target","color","disabled","fullWidth","rippleActions","classes","cn","class","iconOnly","onPointerDown","event","callHandler","onRipple","icon","children","iconElement","resolved","_$createComponent","Icon","_$mergeProps","iconProps","name","content","Show","when","_$memo","label","disableRipple","Ripple","actionRef","actions","center","rippleCenter","href","fallback","_el$2","_tmpl$2","_ref$2","mergeRefs","ref","_$use","_$spread","_$insert","_el$","_tmpl$","_ref$","rel","resolveLinkRel"],"mappings":"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"}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { createComponent as
|
|
2
|
-
import { mergeProps as
|
|
1
|
+
import { createComponent as m, insert as g, setAttribute as b, use as k, spread as x, mergeProps as v, effect as C, className as p, memo as $, template as h } from "solid-js/web";
|
|
2
|
+
import { mergeProps as T, splitProps as P, Show as O } from "solid-js";
|
|
3
3
|
import u from "clsx";
|
|
4
|
-
import { TextFieldWrapper as
|
|
5
|
-
import { createHelperText as
|
|
6
|
-
import { createId as
|
|
7
|
-
import { mergeRefs as
|
|
8
|
-
import { callHandler as
|
|
9
|
-
var
|
|
10
|
-
function
|
|
11
|
-
const f =
|
|
4
|
+
import { TextFieldWrapper as q } from "../textField/textFieldWrapper.js";
|
|
5
|
+
import { createHelperText as z } from "../../../primitives/createHelperText.js";
|
|
6
|
+
import { createId as B } from "../../../primitives/createId.js";
|
|
7
|
+
import { mergeRefs as H } from "../../../primitives/mergeRefs.js";
|
|
8
|
+
import { callHandler as I } from "../../../primitives/callHandler.js";
|
|
9
|
+
var A = /* @__PURE__ */ h("<label class=smwb-toggle__label>"), D = /* @__PURE__ */ h("<span><label><input type=checkbox class=smwb-toggle__checkbox role=switch><span class=smwb-toggle__track></span><span class=smwb-toggle__thumb>");
|
|
10
|
+
function J(i) {
|
|
11
|
+
const f = T({
|
|
12
12
|
size: "medium",
|
|
13
13
|
color: "primary"
|
|
14
|
-
}, i), [e, _] =
|
|
14
|
+
}, i), [e, _] = P(f, ["disabled", "readOnly", "onClick", "required", "checked", "class", "id", "label", "labelPlacement", "size", "color", "helperText", "error", "compact", "onChange", "aria-describedby", "ref"]), s = B(e.id), l = z(() => e.helperText, {
|
|
15
15
|
describedBy: () => e["aria-describedby"]
|
|
16
16
|
}), w = (r) => {
|
|
17
|
-
|
|
17
|
+
I(e.onClick, r), e.readOnly && r.preventDefault();
|
|
18
18
|
}, y = (r) => {
|
|
19
19
|
e.readOnly || e.onChange?.(r, r.currentTarget.checked, i);
|
|
20
20
|
};
|
|
21
|
-
return
|
|
21
|
+
return m(q, {
|
|
22
22
|
get helperText() {
|
|
23
|
-
return l.text();
|
|
23
|
+
return $(() => !!(e.compact && !l.text()))() ? null : l.text();
|
|
24
24
|
},
|
|
25
25
|
get helperTextId() {
|
|
26
26
|
return l.id;
|
|
@@ -33,18 +33,18 @@ function G(i) {
|
|
|
33
33
|
},
|
|
34
34
|
class: "smwb-text-field-checkbox",
|
|
35
35
|
get children() {
|
|
36
|
-
var r =
|
|
37
|
-
|
|
36
|
+
var r = D(), a = r.firstChild, o = a.firstChild;
|
|
37
|
+
g(r, m(O, {
|
|
38
38
|
get when() {
|
|
39
39
|
return e.label;
|
|
40
40
|
},
|
|
41
41
|
get children() {
|
|
42
|
-
var t =
|
|
43
|
-
return b(t, "for", s),
|
|
42
|
+
var t = A();
|
|
43
|
+
return b(t, "for", s), g(t, () => e.label), t;
|
|
44
44
|
}
|
|
45
45
|
}), a);
|
|
46
|
-
var
|
|
47
|
-
return typeof
|
|
46
|
+
var c = H(e.ref);
|
|
47
|
+
return typeof c == "function" && k(c, o), b(o, "id", s), x(o, v({
|
|
48
48
|
get "aria-checked"() {
|
|
49
49
|
return e.checked;
|
|
50
50
|
},
|
|
@@ -76,11 +76,11 @@ function G(i) {
|
|
|
76
76
|
onChange: y,
|
|
77
77
|
onClick: w
|
|
78
78
|
}), !1, !1), C((t) => {
|
|
79
|
-
var
|
|
79
|
+
var d = u("smwb-toggle__wrapper", e.labelPlacement && `smwb-toggle__wrapper_label-${e.labelPlacement}`, e.compact && "smwb-toggle__wrapper_compact"), n = u("smwb-toggle", `smwb-toggle_size-${e.size}`, `smwb-toggle_color-${e.color}`, e.class, {
|
|
80
80
|
"smwb-disabled": e.disabled,
|
|
81
81
|
"smwb-readonly": e.readOnly
|
|
82
82
|
});
|
|
83
|
-
return
|
|
83
|
+
return d !== t.e && p(r, t.e = d), n !== t.t && p(a, t.t = n), t;
|
|
84
84
|
}, {
|
|
85
85
|
e: void 0,
|
|
86
86
|
t: void 0
|
|
@@ -89,6 +89,6 @@ function G(i) {
|
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
export {
|
|
92
|
-
|
|
92
|
+
J as Toggle
|
|
93
93
|
};
|
|
94
94
|
//# sourceMappingURL=toggle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle.js","sources":["../../../../../src/components/inputs/toggle/toggle.tsx"],"sourcesContent":["import { type JSX, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { TextFieldWrapper } from \"../textField/textFieldWrapper\";\nimport { createHelperText } from \"../../../primitives/createHelperText\";\nimport { createId } from \"../../../primitives/createId\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport type { SelectionChangeEvent, SelectionControlColor, SelectionControlSize } from \"../checkbox/checkbox\";\n\nexport interface ToggleProps extends Omit<JSX.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n disabled?: boolean;\n /**\n * Keeps the switch as it is: clicks on it or its label and Space change nothing, and `onChange` is not called.\n * It stays focusable, and its input tells assistive technology it is read-only (`aria-readonly`).\n */\n readOnly?: boolean;\n required?: boolean;\n checked?: boolean;\n id?: string;\n label?: string;\n labelPlacement?: \"top\" | \"left\" | \"right\";\n size?: SelectionControlSize;\n color?: SelectionControlColor;\n /** Unified handler: `(event, checked, data)`. */\n onChange?: (event: SelectionChangeEvent, checked: boolean, data: ToggleProps) => void;\n helperText?: JSX.Element;\n error?: boolean;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function Toggle(props: ToggleProps): JSX.Element {\n const merged = mergeProps({ size: \"medium\" as SelectionControlSize, color: \"primary\" as SelectionControlColor }, props);\n const [local, args] = splitProps(merged, [\n \"disabled\",\n \"readOnly\",\n \"onClick\",\n \"required\",\n \"checked\",\n \"class\",\n \"id\",\n \"label\",\n \"labelPlacement\",\n \"size\",\n \"color\",\n \"helperText\",\n \"error\",\n \"onChange\",\n \"aria-describedby\",\n \"ref\",\n ]);\n const id = createId(local.id);\n const helper = createHelperText(() => local.helperText, { describedBy: () => local[\"aria-describedby\"] });\n\n // `readonly` means nothing to a checkbox input: a click on it or on its label, and Space, still\n // toggle it. Cancel the click; the browser then puts the previous state back.\n const handleClick: JSX.EventHandler<HTMLInputElement, MouseEvent> = (event) => {\n callHandler(local.onClick, event);\n if (local.readOnly) event.preventDefault();\n };\n\n const handleChange: JSX.EventHandler<HTMLInputElement, Event> = (event) => {\n if (local.readOnly) {\n return;\n }\n local.onChange?.(event, event.currentTarget.checked, props);\n };\n\n return (\n <TextFieldWrapper\n helperText={helper.text()}\n helperTextId={helper.id}\n disabled={local.disabled}\n error={local.error}\n class=\"smwb-text-field-checkbox\"\n >\n <span
|
|
1
|
+
{"version":3,"file":"toggle.js","sources":["../../../../../src/components/inputs/toggle/toggle.tsx"],"sourcesContent":["import { type JSX, Show, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { TextFieldWrapper } from \"../textField/textFieldWrapper\";\nimport { createHelperText } from \"../../../primitives/createHelperText\";\nimport { createId } from \"../../../primitives/createId\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { callHandler } from \"../../../primitives/callHandler\";\nimport type { SelectionChangeEvent, SelectionControlColor, SelectionControlSize } from \"../checkbox/checkbox\";\n\nexport interface ToggleProps extends Omit<JSX.InputHTMLAttributes<HTMLInputElement>, \"onChange\" | \"size\"> {\n disabled?: boolean;\n /**\n * Keeps the switch as it is: clicks on it or its label and Space change nothing, and `onChange` is not called.\n * It stays focusable, and its input tells assistive technology it is read-only (`aria-readonly`).\n */\n readOnly?: boolean;\n required?: boolean;\n checked?: boolean;\n id?: string;\n label?: string;\n labelPlacement?: \"top\" | \"left\" | \"right\";\n size?: SelectionControlSize;\n color?: SelectionControlColor;\n /** Unified handler: `(event, checked, data)`. */\n onChange?: (event: SelectionChangeEvent, checked: boolean, data: ToggleProps) => void;\n helperText?: JSX.Element;\n error?: boolean;\n /**\n * A compact look for a status row or a toolbar: the label shares the line with the switch (\"top\", the default,\n * counts as \"left\"), no line is kept for helper text unless `helperText` is set, and the row is the theme's small\n * control height, at most 28px. The default look is unchanged.\n */\n compact?: boolean;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function Toggle(props: ToggleProps): JSX.Element {\n const merged = mergeProps({ size: \"medium\" as SelectionControlSize, color: \"primary\" as SelectionControlColor }, props);\n const [local, args] = splitProps(merged, [\n \"disabled\",\n \"readOnly\",\n \"onClick\",\n \"required\",\n \"checked\",\n \"class\",\n \"id\",\n \"label\",\n \"labelPlacement\",\n \"size\",\n \"color\",\n \"helperText\",\n \"error\",\n \"compact\",\n \"onChange\",\n \"aria-describedby\",\n \"ref\",\n ]);\n const id = createId(local.id);\n const helper = createHelperText(() => local.helperText, { describedBy: () => local[\"aria-describedby\"] });\n\n // `readonly` means nothing to a checkbox input: a click on it or on its label, and Space, still\n // toggle it. Cancel the click; the browser then puts the previous state back.\n const handleClick: JSX.EventHandler<HTMLInputElement, MouseEvent> = (event) => {\n callHandler(local.onClick, event);\n if (local.readOnly) event.preventDefault();\n };\n\n const handleChange: JSX.EventHandler<HTMLInputElement, Event> = (event) => {\n if (local.readOnly) {\n return;\n }\n local.onChange?.(event, event.currentTarget.checked, props);\n };\n\n return (\n <TextFieldWrapper\n helperText={local.compact && !helper.text() ? null : helper.text()}\n helperTextId={helper.id}\n disabled={local.disabled}\n error={local.error}\n class=\"smwb-text-field-checkbox\"\n >\n <span\n class={cn(\n \"smwb-toggle__wrapper\",\n local.labelPlacement && `smwb-toggle__wrapper_label-${local.labelPlacement}`,\n local.compact && \"smwb-toggle__wrapper_compact\"\n )}\n >\n <Show when={local.label}>\n <label for={id} class=\"smwb-toggle__label\">\n {local.label}\n </label>\n </Show>\n <label\n class={cn(\"smwb-toggle\", `smwb-toggle_size-${local.size}`, `smwb-toggle_color-${local.color}`, local.class, {\n \"smwb-disabled\": local.disabled,\n \"smwb-readonly\": local.readOnly,\n })}\n >\n <input\n type=\"checkbox\"\n id={id}\n class=\"smwb-toggle__checkbox\"\n aria-checked={local.checked}\n aria-invalid={local.error || undefined}\n aria-required={local.required || undefined}\n aria-describedby={helper.describedBy()}\n role=\"switch\"\n checked={local.checked}\n disabled={local.disabled}\n readonly={local.readOnly}\n required={local.required}\n ref={mergeRefs(local.ref)}\n {...args}\n aria-readonly={local.readOnly || undefined}\n onChange={handleChange}\n onClick={handleClick}\n />\n <span class=\"smwb-toggle__track\" />\n <span class=\"smwb-toggle__thumb\" />\n </label>\n </span>\n </TextFieldWrapper>\n );\n}\n\nexport default Toggle;\n"],"names":["Toggle","props","merged","mergeProps","size","color","local","args","splitProps","id","createId","helper","createHelperText","helperText","describedBy","handleClick","event","callHandler","onClick","readOnly","preventDefault","handleChange","onChange","currentTarget","checked","_$createComponent","TextFieldWrapper","_$memo","compact","text","helperTextId","disabled","error","children","_el$","_tmpl$2","_el$3","firstChild","_el$4","_$insert","Show","when","label","_el$2","_tmpl$","_$setAttribute","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","undefined","required","readonly","_$effect","_p$","_v$","cn","labelPlacement","_v$2","class","e","_$className","t"],"mappings":";;;;;;;;;AAoCO,SAASA,EAAOC,GAAiC;AACtD,QAAMC,IAASC,EAAW;AAAA,IAAEC,MAAM;AAAA,IAAkCC,OAAO;AAAA,EAAA,GAAsCJ,CAAK,GAChH,CAACK,GAAOC,CAAI,IAAIC,EAAWN,GAAQ,CACvC,YACA,YACA,WACA,YACA,WACA,SACA,MACA,SACA,kBACA,QACA,SACA,cACA,SACA,WACA,YACA,oBACA,KAAK,CACN,GACKO,IAAKC,EAASJ,EAAMG,EAAE,GACtBE,IAASC,EAAiB,MAAMN,EAAMO,YAAY;AAAA,IAAEC,aAAaA,MAAMR,EAAM,kBAAkB;AAAA,EAAA,CAAG,GAIlGS,IAA+DC,CAAAA,MAAU;AAC7EC,IAAAA,EAAYX,EAAMY,SAASF,CAAK,GAC5BV,EAAMa,YAAUH,EAAMI,eAAAA;AAAAA,EAC5B,GAEMC,IAA2DL,CAAAA,MAAU;AACzE,IAAIV,EAAMa,YAGVb,EAAMgB,WAAWN,GAAOA,EAAMO,cAAcC,SAASvB,CAAK;AAAA,EAC5D;AAEA,SAAAwB,EACGC,GAAgB;AAAA,IAAA,IACfb,aAAU;AAAA,aAAEc,EAAA,MAAA,CAAA,EAAArB,EAAMsB,WAAW,CAACjB,EAAOkB,KAAAA,QAAS,OAAOlB,EAAOkB,KAAAA;AAAAA,IAAM;AAAA,IAAA,IAClEC,eAAY;AAAA,aAAEnB,EAAOF;AAAAA,IAAE;AAAA,IAAA,IACvBsB,WAAQ;AAAA,aAAEzB,EAAMyB;AAAAA,IAAQ;AAAA,IAAA,IACxBC,QAAK;AAAA,aAAE1B,EAAM0B;AAAAA,IAAK;AAAA,IAAA,OAAA;AAAA,IAAA,IAAAC,WAAA;AAAA,UAAAC,IAAAC,EAAAA,GAAAC,IAAAF,EAAAG,YAAAC,IAAAF,EAAAC;AAAAE,MAAAA,EAAAL,GAAAT,EAUfe,GAAI;AAAA,QAAA,IAACC,OAAI;AAAA,iBAAEnC,EAAMoC;AAAAA,QAAK;AAAA,QAAA,IAAAT,WAAA;AAAA,cAAAU,IAAAC,EAAAA;AAAAC,iBAAAA,EAAAF,GAAA,OACTlC,CAAE,GAAA8B,EAAAI,GAAA,MACXrC,EAAMoC,KAAK,GAAAC;AAAAA,QAAA;AAAA,MAAA,CAAA,GAAAP,CAAA;AAAA,UAAAU,IAsBPC,EAAUzC,EAAM0C,GAAG;AAAC,oBAAAF,KAAA,cAAAG,EAAAH,GAAAR,CAAA,GAAAO,EAAAP,GAAA,MAXrB7B,CAAE,GAAAyC,EAAAZ,GAAAa,EAAA;AAAA,QAAA,IAAA,iBAAA;AAAA,iBAEQ7C,EAAMkB;AAAAA,QAAO;AAAA,QAAA,IAAA,iBAAA;AAAA,iBACblB,EAAM0B,SAASoB;AAAAA,QAAS;AAAA,QAAA,IAAA,kBAAA;AAAA,iBACvB9C,EAAM+C,YAAYD;AAAAA,QAAS;AAAA,QAAA,IAAA,qBAAA;AAAA,iBACxBzC,EAAOG,YAAAA;AAAAA,QAAa;AAAA,QAAA,IAEtCU,UAAO;AAAA,iBAAElB,EAAMkB;AAAAA,QAAO;AAAA,QAAA,IACtBO,WAAQ;AAAA,iBAAEzB,EAAMyB;AAAAA,QAAQ;AAAA,QAAA,IACxBuB,WAAQ;AAAA,iBAAEhD,EAAMa;AAAAA,QAAQ;AAAA,QAAA,IACxBkC,WAAQ;AAAA,iBAAE/C,EAAM+C;AAAAA,QAAQ;AAAA,MAAA,GAEpB9C,GAAI;AAAA,QAAA,IAAA,kBAAA;AAAA,iBACOD,EAAMa,YAAYiC;AAAAA,QAAS;AAAA,QAAA,UAChC/B;AAAAA,QAAY,SACbN;AAAAA,MAAAA,CAAW,GAAA,IAAA,EAAA,GAAAwC,EAAAC,CAAAA,MAAA;AAAA,YAAAC,IAlCjBC,EACL,wBACApD,EAAMqD,kBAAkB,8BAA8BrD,EAAMqD,cAAc,IAC1ErD,EAAMsB,WAAW,8BACnB,GAACgC,IAQQF,EAAG,eAAe,oBAAoBpD,EAAMF,IAAI,IAAI,qBAAqBE,EAAMD,KAAK,IAAIC,EAAMuD,OAAO;AAAA,UAC1G,iBAAiBvD,EAAMyB;AAAAA,UACvB,iBAAiBzB,EAAMa;AAAAA,QAAAA,CACxB;AAACsC,eAAAA,MAAAD,EAAAM,KAAAC,EAAA7B,GAAAsB,EAAAM,IAAAL,CAAA,GAAAG,MAAAJ,EAAAQ,KAAAD,EAAA3B,GAAAoB,EAAAQ,IAAAJ,CAAA,GAAAJ;AAAAA,MAAA,GAAA;AAAA,QAAAM,GAAAV;AAAAA,QAAAY,GAAAZ;AAAAA,MAAAA,CAAA,GAAAlB;AAAAA,IAAA;AAAA,EAAA,CAAA;AA2BZ;"}
|
|
@@ -1,78 +1,85 @@
|
|
|
1
|
-
import { use as
|
|
2
|
-
import { mergeProps as
|
|
3
|
-
import
|
|
4
|
-
import { createControllableState as
|
|
5
|
-
import { createId as
|
|
6
|
-
import { mergeRefs as
|
|
7
|
-
import { mergeStyle as
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import { use as S, spread as L, mergeProps as P, insert as l, createComponent as o, setAttribute as u, effect as x, template as s, delegateEvents as I } from "solid-js/web";
|
|
2
|
+
import { mergeProps as E, splitProps as z, children as b, Show as p, createEffect as O, onCleanup as R } from "solid-js";
|
|
3
|
+
import V from "clsx";
|
|
4
|
+
import { createControllableState as j } from "../../../primitives/createControllableState.js";
|
|
5
|
+
import { createId as q } from "../../../primitives/createId.js";
|
|
6
|
+
import { mergeRefs as B } from "../../../primitives/mergeRefs.js";
|
|
7
|
+
import { mergeStyle as D } from "../../../primitives/mergeStyle.js";
|
|
8
|
+
import { publishHeaderOffset as F } from "../../../primitives/publishHeaderOffset.js";
|
|
9
|
+
import { Icon as G } from "../../base/icon/icon.js";
|
|
10
|
+
var J = /* @__PURE__ */ s("<div class=smwb-app-layout__header>"), K = /* @__PURE__ */ s("<div class=smwb-app-layout__collapse>"), M = /* @__PURE__ */ s("<aside class=smwb-app-layout__sidebar>"), N = /* @__PURE__ */ s("<div class=smwb-app-layout__footer>"), Q = /* @__PURE__ */ s("<div><div class=smwb-app-layout__body><div class=smwb-app-layout__content>"), U = /* @__PURE__ */ s("<button type=button class=smwb-app-layout__collapse-btn>");
|
|
11
|
+
const k = (i) => typeof i == "number" ? `${i}px` : i;
|
|
12
|
+
function se(i) {
|
|
13
|
+
const T = E({
|
|
13
14
|
sidebarWidth: 260,
|
|
14
15
|
defaultSidebarCollapsed: !1,
|
|
15
16
|
collapsible: !1,
|
|
16
17
|
collapseToggleAriaLabel: "Toggle navigation",
|
|
17
18
|
sidebarCollapsedWidth: 72,
|
|
18
19
|
stickyHeader: !0
|
|
19
|
-
},
|
|
20
|
+
}, i), [e, W] = z(T, ["header", "sidebar", "footer", "sidebarWidth", "sidebarCollapsed", "defaultSidebarCollapsed", "onSidebarCollapsedChange", "collapsible", "collapseToggle", "collapseToggleAriaLabel", "sidebarCollapsedWidth", "stickyHeader", "class", "style", "children", "ref", "data-testid"]), [d, A] = j({
|
|
20
21
|
value: () => e.sidebarCollapsed,
|
|
21
22
|
defaultValue: e.defaultSidebarCollapsed,
|
|
22
23
|
onChange: (a) => e.onSidebarCollapsedChange?.(a)
|
|
23
|
-
}),
|
|
24
|
-
"--smui-app-sidebar-w":
|
|
24
|
+
}), f = q(), h = b(() => e.header), _ = b(() => e.sidebar), y = b(() => e.footer), v = b(() => e.collapsible ? e.collapseToggle : void 0), H = () => D({
|
|
25
|
+
"--smui-app-sidebar-w": d() ? k(e.sidebarCollapsedWidth) : k(e.sidebarWidth)
|
|
25
26
|
}, e.style);
|
|
26
27
|
return (() => {
|
|
27
|
-
var a =
|
|
28
|
-
return typeof
|
|
28
|
+
var a = Q(), m = a.firstChild, g = m.firstChild, C = B(e.ref);
|
|
29
|
+
return typeof C == "function" && S(C, a), L(a, P(W, {
|
|
29
30
|
get "data-testid"() {
|
|
30
31
|
return e["data-testid"] ?? "app-layout";
|
|
31
32
|
},
|
|
32
33
|
get class() {
|
|
33
|
-
return
|
|
34
|
+
return V("smwb-app-layout", {
|
|
34
35
|
"smwb-app-layout_sticky-header": e.stickyHeader,
|
|
35
|
-
"smwb-app-layout_collapsed":
|
|
36
|
+
"smwb-app-layout_collapsed": d()
|
|
36
37
|
}, e.class);
|
|
37
38
|
},
|
|
38
39
|
get style() {
|
|
39
|
-
return
|
|
40
|
+
return H();
|
|
40
41
|
}
|
|
41
|
-
}), !1, !0),
|
|
42
|
+
}), !1, !0), l(a, o(p, {
|
|
42
43
|
get when() {
|
|
43
|
-
return
|
|
44
|
+
return h();
|
|
44
45
|
},
|
|
45
46
|
get children() {
|
|
46
|
-
var
|
|
47
|
-
return
|
|
47
|
+
var t = J();
|
|
48
|
+
return S((c) => (
|
|
49
|
+
// Created with the header, so it ends with it. A header that scrolls away leaves no fixed edge for a
|
|
50
|
+
// sheet to start under.
|
|
51
|
+
O(() => {
|
|
52
|
+
e.stickyHeader && R(F(c));
|
|
53
|
+
})
|
|
54
|
+
), t), l(t, h), t;
|
|
48
55
|
}
|
|
49
|
-
}),
|
|
56
|
+
}), m), l(m, o(p, {
|
|
50
57
|
get when() {
|
|
51
|
-
return
|
|
58
|
+
return _();
|
|
52
59
|
},
|
|
53
60
|
get children() {
|
|
54
|
-
var
|
|
55
|
-
return
|
|
61
|
+
var t = M();
|
|
62
|
+
return u(t, "id", f), l(t, o(p, {
|
|
56
63
|
get when() {
|
|
57
64
|
return e.collapsible;
|
|
58
65
|
},
|
|
59
66
|
get children() {
|
|
60
|
-
var
|
|
61
|
-
return
|
|
67
|
+
var c = K();
|
|
68
|
+
return l(c, o(p, {
|
|
62
69
|
get when() {
|
|
63
|
-
return
|
|
70
|
+
return v();
|
|
64
71
|
},
|
|
65
72
|
get fallback() {
|
|
66
73
|
return (() => {
|
|
67
|
-
var r =
|
|
68
|
-
return r.$$click = () =>
|
|
74
|
+
var r = U();
|
|
75
|
+
return r.$$click = () => A(!d()), u(r, "aria-controls", f), l(r, o(G, {
|
|
69
76
|
get name() {
|
|
70
|
-
return
|
|
77
|
+
return d() ? "chevron_right" : "chevron_left";
|
|
71
78
|
},
|
|
72
79
|
size: 20
|
|
73
|
-
})),
|
|
74
|
-
var w = e.collapseToggleAriaLabel, $ = !
|
|
75
|
-
return w !== n.e &&
|
|
80
|
+
})), x((n) => {
|
|
81
|
+
var w = e.collapseToggleAriaLabel, $ = !d();
|
|
82
|
+
return w !== n.e && u(r, "aria-label", n.e = w), $ !== n.t && u(r, "aria-expanded", n.t = $), n;
|
|
76
83
|
}, {
|
|
77
84
|
e: void 0,
|
|
78
85
|
t: void 0
|
|
@@ -80,25 +87,25 @@ function te(d) {
|
|
|
80
87
|
})();
|
|
81
88
|
},
|
|
82
89
|
get children() {
|
|
83
|
-
return
|
|
90
|
+
return v();
|
|
84
91
|
}
|
|
85
|
-
})),
|
|
92
|
+
})), c;
|
|
86
93
|
}
|
|
87
|
-
}), null), t
|
|
94
|
+
}), null), l(t, _, null), t;
|
|
88
95
|
}
|
|
89
|
-
}),
|
|
96
|
+
}), g), l(g, () => e.children, null), l(g, o(p, {
|
|
90
97
|
get when() {
|
|
91
|
-
return
|
|
98
|
+
return y();
|
|
92
99
|
},
|
|
93
100
|
get children() {
|
|
94
|
-
var
|
|
95
|
-
return t
|
|
101
|
+
var t = N();
|
|
102
|
+
return l(t, y), t;
|
|
96
103
|
}
|
|
97
104
|
}), null), a;
|
|
98
105
|
})();
|
|
99
106
|
}
|
|
100
107
|
I(["click"]);
|
|
101
108
|
export {
|
|
102
|
-
|
|
109
|
+
se as AppLayout
|
|
103
110
|
};
|
|
104
111
|
//# sourceMappingURL=appLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appLayout.js","sources":["../../../../../src/components/layout/appLayout/appLayout.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, mergeProps, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { createId } from \"../../../primitives/createId\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\n\nexport interface AppLayoutProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** Top bar slot (e.g. <AppBar />). Spans full width. */\n header?: JSX.Element;\n /** Side navigation slot (e.g. <Sidebar />). */\n sidebar?: JSX.Element;\n /** Footer slot, below the content. */\n footer?: JSX.Element;\n /** Sidebar width (px or any CSS length). */\n sidebarWidth?: number | string;\n /** Controlled collapsed state of the sidebar rail. */\n sidebarCollapsed?: boolean;\n /** Initial collapsed state (uncontrolled). */\n defaultSidebarCollapsed?: boolean;\n /** Called whenever the collapsed state changes. */\n onSidebarCollapsedChange?: (collapsed: boolean) => void;\n /** Renders a built-in toggle button to collapse/expand the sidebar. */\n collapsible?: boolean;\n /** Custom toggle node replacing the default icon button. */\n collapseToggle?: JSX.Element;\n /** Accessible label for the default toggle button. */\n collapseToggleAriaLabel?: string;\n /** Sidebar collapsed width. */\n sidebarCollapsedWidth?: number | string;\n /** Keep the header pinned while content scrolls. */\n stickyHeader?: boolean;\n /** Test id of the root `<div>`; `app-layout` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst len = (v: number | string): string => (typeof v === \"number\" ? `${v}px` : v);\n\nexport function AppLayout(props: ParentProps<AppLayoutProps>): JSX.Element {\n const merged = mergeProps(\n {\n sidebarWidth: 260 as number | string,\n defaultSidebarCollapsed: false,\n collapsible: false,\n collapseToggleAriaLabel: \"Toggle navigation\",\n sidebarCollapsedWidth: 72 as number | string,\n stickyHeader: true,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"header\",\n \"sidebar\",\n \"footer\",\n \"sidebarWidth\",\n \"sidebarCollapsed\",\n \"defaultSidebarCollapsed\",\n \"onSidebarCollapsedChange\",\n \"collapsible\",\n \"collapseToggle\",\n \"collapseToggleAriaLabel\",\n \"sidebarCollapsedWidth\",\n \"stickyHeader\",\n \"class\",\n \"style\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const [collapsed, setCollapsed] = createControllableState<boolean>({\n value: () => local.sidebarCollapsed,\n defaultValue: local.defaultSidebarCollapsed,\n onChange: (next) => local.onSidebarCollapsedChange?.(next),\n });\n\n const sidebarId = createId();\n\n // Resolve slot props through `children()` so each is created once, in THIS\n // component's reactive context. A pre-created element passed straight into a\n // <Show> gets its hydration key at the caller's position but renders at the\n // Show's, so the hydration walk can't find it (\"Unable to find DOM nodes for\n // key\"). Resolving here keeps the key sequence aligned on server and client.\n const headerSlot = children(() => local.header);\n const sidebarSlot = children(() => local.sidebar);\n const footerSlot = children(() => local.footer);\n // The toggle is drawn only on a collapsible layout, so it is read only then.\n const collapseToggleSlot = children(() => (local.collapsible ? local.collapseToggle : undefined));\n\n // The caller's style goes last: its own --smui-app-sidebar-w wins over the width props.\n const style = (): JSX.CSSProperties | string | undefined =>\n mergeStyle(\n { \"--smui-app-sidebar-w\": collapsed() ? len(local.sidebarCollapsedWidth) : len(local.sidebarWidth) },\n local.style\n );\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid={local[\"data-testid\"] ?? \"app-layout\"}\n class={cn(\n \"smwb-app-layout\",\n { \"smwb-app-layout_sticky-header\": local.stickyHeader, \"smwb-app-layout_collapsed\": collapsed() },\n local.class\n )}\n style={style()}\n >\n <Show when={headerSlot()}>\n <div class=\"smwb-app-layout__header\">{headerSlot()}</div>\n </Show>\n <div class=\"smwb-app-layout__body\">\n <Show when={sidebarSlot()}>\n <aside id={sidebarId} class=\"smwb-app-layout__sidebar\">\n <Show when={local.collapsible}>\n <div class=\"smwb-app-layout__collapse\">\n <Show\n when={collapseToggleSlot()}\n fallback={\n <button\n type=\"button\"\n class=\"smwb-app-layout__collapse-btn\"\n aria-label={local.collapseToggleAriaLabel}\n aria-expanded={!collapsed()}\n aria-controls={sidebarId}\n onClick={() => setCollapsed(!collapsed())}\n >\n <Icon name={collapsed() ? \"chevron_right\" : \"chevron_left\"} size={20} />\n </button>\n }\n >\n {collapseToggleSlot()}\n </Show>\n </div>\n </Show>\n {sidebarSlot()}\n </aside>\n </Show>\n <div class=\"smwb-app-layout__content\">\n {local.children}\n <Show when={footerSlot()}>\n <div class=\"smwb-app-layout__footer\">{footerSlot()}</div>\n </Show>\n </div>\n </div>\n </div>\n );\n}\n\nexport default AppLayout;\n"],"names":["len","v","AppLayout","props","merged","mergeProps","sidebarWidth","defaultSidebarCollapsed","collapsible","collapseToggleAriaLabel","sidebarCollapsedWidth","stickyHeader","local","rest","splitProps","collapsed","setCollapsed","createControllableState","value","sidebarCollapsed","defaultValue","onChange","next","onSidebarCollapsedChange","sidebarId","createId","headerSlot","children","header","sidebarSlot","sidebar","footerSlot","footer","collapseToggleSlot","collapseToggle","undefined","style","mergeStyle","_el$","_tmpl$5","_el$3","firstChild","_el$6","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","cn","class","_$insert","_$createComponent","Show","when","_el$2","_tmpl$","_el$4","_tmpl$3","_$setAttribute","_el$5","_tmpl$2","fallback","_el$8","_tmpl$6","$$click","Icon","name","size","_$effect","_p$","_v$","_v$2","e","t","_el$7","_tmpl$4","_$delegateEvents"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"appLayout.js","sources":["../../../../../src/components/layout/appLayout/appLayout.tsx"],"sourcesContent":["import { type JSX, type ParentProps, Show, children, createEffect, mergeProps, onCleanup, splitProps } from \"solid-js\";\nimport cn from \"clsx\";\nimport { Icon } from \"../../base/icon\";\nimport { createControllableState } from \"../../../primitives/createControllableState\";\nimport { createId } from \"../../../primitives/createId\";\nimport { mergeRefs, type Ref } from \"../../../primitives/mergeRefs\";\nimport { mergeStyle } from \"../../../primitives/mergeStyle\";\nimport { publishHeaderOffset } from \"../../../primitives/publishHeaderOffset\";\n\nexport interface AppLayoutProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /** Top bar slot (e.g. <AppBar />). Spans full width. */\n header?: JSX.Element;\n /** Side navigation slot (e.g. <Sidebar />). */\n sidebar?: JSX.Element;\n /** Footer slot, below the content. */\n footer?: JSX.Element;\n /** Sidebar width (px or any CSS length). */\n sidebarWidth?: number | string;\n /** Controlled collapsed state of the sidebar rail. */\n sidebarCollapsed?: boolean;\n /** Initial collapsed state (uncontrolled). */\n defaultSidebarCollapsed?: boolean;\n /** Called whenever the collapsed state changes. */\n onSidebarCollapsedChange?: (collapsed: boolean) => void;\n /** Renders a built-in toggle button to collapse/expand the sidebar. */\n collapsible?: boolean;\n /** Custom toggle node replacing the default icon button. */\n collapseToggle?: JSX.Element;\n /** Accessible label for the default toggle button. */\n collapseToggleAriaLabel?: string;\n /** Sidebar collapsed width. */\n sidebarCollapsedWidth?: number | string;\n /**\n * Keep the header pinned while content scrolls. A pinned header's height is published as `--smui-sheet-offset-top`\n * on the document element, so a `Sheet` opens below it and leaves it visible and clickable (a `Sheet` with its own\n * `offsetTop` ignores it). The height is taken from the top of the window, so the layout is assumed to start\n * there; with several layouts the most recent one wins.\n */\n stickyHeader?: boolean;\n /** Test id of the root `<div>`; `app-layout` unless given. */\n \"data-testid\"?: string | undefined;\n ref?: Ref<HTMLDivElement>;\n}\n\nconst len = (v: number | string): string => (typeof v === \"number\" ? `${v}px` : v);\n\nexport function AppLayout(props: ParentProps<AppLayoutProps>): JSX.Element {\n const merged = mergeProps(\n {\n sidebarWidth: 260 as number | string,\n defaultSidebarCollapsed: false,\n collapsible: false,\n collapseToggleAriaLabel: \"Toggle navigation\",\n sidebarCollapsedWidth: 72 as number | string,\n stickyHeader: true,\n },\n props\n );\n const [local, rest] = splitProps(merged, [\n \"header\",\n \"sidebar\",\n \"footer\",\n \"sidebarWidth\",\n \"sidebarCollapsed\",\n \"defaultSidebarCollapsed\",\n \"onSidebarCollapsedChange\",\n \"collapsible\",\n \"collapseToggle\",\n \"collapseToggleAriaLabel\",\n \"sidebarCollapsedWidth\",\n \"stickyHeader\",\n \"class\",\n \"style\",\n \"children\",\n \"ref\",\n \"data-testid\",\n ]);\n\n const [collapsed, setCollapsed] = createControllableState<boolean>({\n value: () => local.sidebarCollapsed,\n defaultValue: local.defaultSidebarCollapsed,\n onChange: (next) => local.onSidebarCollapsedChange?.(next),\n });\n\n const sidebarId = createId();\n\n // Resolve slot props through `children()` so each is created once, in THIS\n // component's reactive context. A pre-created element passed straight into a\n // <Show> gets its hydration key at the caller's position but renders at the\n // Show's, so the hydration walk can't find it (\"Unable to find DOM nodes for\n // key\"). Resolving here keeps the key sequence aligned on server and client.\n const headerSlot = children(() => local.header);\n const sidebarSlot = children(() => local.sidebar);\n const footerSlot = children(() => local.footer);\n // The toggle is drawn only on a collapsible layout, so it is read only then.\n const collapseToggleSlot = children(() => (local.collapsible ? local.collapseToggle : undefined));\n\n // The caller's style goes last: its own --smui-app-sidebar-w wins over the width props.\n const style = (): JSX.CSSProperties | string | undefined =>\n mergeStyle(\n { \"--smui-app-sidebar-w\": collapsed() ? len(local.sidebarCollapsedWidth) : len(local.sidebarWidth) },\n local.style\n );\n\n return (\n <div\n {...rest}\n ref={mergeRefs(local.ref)}\n data-testid={local[\"data-testid\"] ?? \"app-layout\"}\n class={cn(\n \"smwb-app-layout\",\n { \"smwb-app-layout_sticky-header\": local.stickyHeader, \"smwb-app-layout_collapsed\": collapsed() },\n local.class\n )}\n style={style()}\n >\n <Show when={headerSlot()}>\n <div\n class=\"smwb-app-layout__header\"\n ref={(el) =>\n // Created with the header, so it ends with it. A header that scrolls away leaves no fixed edge for a\n // sheet to start under.\n createEffect(() => {\n if (local.stickyHeader) onCleanup(publishHeaderOffset(el));\n })\n }\n >\n {headerSlot()}\n </div>\n </Show>\n <div class=\"smwb-app-layout__body\">\n <Show when={sidebarSlot()}>\n <aside id={sidebarId} class=\"smwb-app-layout__sidebar\">\n <Show when={local.collapsible}>\n <div class=\"smwb-app-layout__collapse\">\n <Show\n when={collapseToggleSlot()}\n fallback={\n <button\n type=\"button\"\n class=\"smwb-app-layout__collapse-btn\"\n aria-label={local.collapseToggleAriaLabel}\n aria-expanded={!collapsed()}\n aria-controls={sidebarId}\n onClick={() => setCollapsed(!collapsed())}\n >\n <Icon name={collapsed() ? \"chevron_right\" : \"chevron_left\"} size={20} />\n </button>\n }\n >\n {collapseToggleSlot()}\n </Show>\n </div>\n </Show>\n {sidebarSlot()}\n </aside>\n </Show>\n <div class=\"smwb-app-layout__content\">\n {local.children}\n <Show when={footerSlot()}>\n <div class=\"smwb-app-layout__footer\">{footerSlot()}</div>\n </Show>\n </div>\n </div>\n </div>\n );\n}\n\nexport default AppLayout;\n"],"names":["len","v","AppLayout","props","merged","mergeProps","sidebarWidth","defaultSidebarCollapsed","collapsible","collapseToggleAriaLabel","sidebarCollapsedWidth","stickyHeader","local","rest","splitProps","collapsed","setCollapsed","createControllableState","value","sidebarCollapsed","defaultValue","onChange","next","onSidebarCollapsedChange","sidebarId","createId","headerSlot","children","header","sidebarSlot","sidebar","footerSlot","footer","collapseToggleSlot","collapseToggle","undefined","style","mergeStyle","_el$","_tmpl$5","_el$3","firstChild","_el$6","_ref$","mergeRefs","ref","_$use","_$spread","_$mergeProps","cn","class","_$insert","_$createComponent","Show","when","_el$2","_tmpl$","el","createEffect","onCleanup","publishHeaderOffset","_el$4","_tmpl$3","_$setAttribute","_el$5","_tmpl$2","fallback","_el$8","_tmpl$6","$$click","Icon","name","size","_$effect","_p$","_v$","_v$2","e","t","_el$7","_tmpl$4","_$delegateEvents"],"mappings":"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"}
|