powr-sdk-web 6.0.0 → 6.2.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/dist/auth/index.js +2 -2
- package/dist/index.js +110 -0
- package/dist/session/index.js +217 -0
- package/dist/shell/PowrBaseAppWrapper.js +348 -0
- package/dist/shell/index.js +20 -0
- package/dist/shell/parts.js +267 -0
- package/dist/shell/styles.js +241 -0
- package/dist/theme/PowrThemeProvider.js +23 -10
- package/dist/theme/PowrThemeSettings.js +323 -0
- package/dist/theme/host.js +280 -0
- package/dist/theme/index.js +34 -0
- package/dist/theme/initScript.js +86 -0
- package/dist/theme/tokens.js +6 -0
- package/dist/utils/useMediaQuery.js +37 -0
- package/package.json +1 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.v = exports.s = exports.SIDEBAR_WIDTH = exports.NARROW_QUERY = exports.HEADER_HEIGHT = void 0;
|
|
7
|
+
var _tokens = require("../theme/tokens");
|
|
8
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
9
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
10
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
11
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
12
|
+
/**
|
|
13
|
+
* Shell styles. Every colour is a `--powr-*` var with today's neutral as the
|
|
14
|
+
* fallback — the wrapper has no palette of its own (clone-leak guardrail).
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
var v = exports.v = {
|
|
18
|
+
bg: (0, _tokens.powrVar)("bg", "#fafafa"),
|
|
19
|
+
surface: (0, _tokens.powrVar)("surface", "#ffffff"),
|
|
20
|
+
text: (0, _tokens.powrVar)("text", "#111827"),
|
|
21
|
+
muted: (0, _tokens.powrVar)("muted", "#6b7280"),
|
|
22
|
+
border: (0, _tokens.powrVar)("border", "#e5e7eb"),
|
|
23
|
+
primary: (0, _tokens.powrVar)("primary", "#2563eb"),
|
|
24
|
+
primaryFg: (0, _tokens.powrVar)("primary-fg", "#ffffff"),
|
|
25
|
+
danger: (0, _tokens.powrVar)("danger", "#dc2626"),
|
|
26
|
+
radius: (0, _tokens.powrVar)("radius", "0.5rem"),
|
|
27
|
+
font: (0, _tokens.powrVar)("font", "system-ui, -apple-system, Segoe UI, Roboto, sans-serif")
|
|
28
|
+
};
|
|
29
|
+
var SIDEBAR_WIDTH = exports.SIDEBAR_WIDTH = 240;
|
|
30
|
+
var HEADER_HEIGHT = exports.HEADER_HEIGHT = 56;
|
|
31
|
+
var NARROW_QUERY = exports.NARROW_QUERY = "(max-width: 900px)";
|
|
32
|
+
var s = exports.s = {
|
|
33
|
+
root: {
|
|
34
|
+
minHeight: "100vh",
|
|
35
|
+
display: "flex",
|
|
36
|
+
flexDirection: "column",
|
|
37
|
+
background: v.bg,
|
|
38
|
+
color: v.text,
|
|
39
|
+
fontFamily: v.font
|
|
40
|
+
},
|
|
41
|
+
header: {
|
|
42
|
+
position: "sticky",
|
|
43
|
+
top: 0,
|
|
44
|
+
zIndex: 40,
|
|
45
|
+
height: HEADER_HEIGHT,
|
|
46
|
+
display: "flex",
|
|
47
|
+
alignItems: "center",
|
|
48
|
+
gap: 16,
|
|
49
|
+
padding: "0 16px",
|
|
50
|
+
borderBottom: "1px solid ".concat(v.border),
|
|
51
|
+
background: v.surface
|
|
52
|
+
},
|
|
53
|
+
brand: {
|
|
54
|
+
display: "inline-flex",
|
|
55
|
+
alignItems: "center",
|
|
56
|
+
gap: 8,
|
|
57
|
+
fontWeight: 700,
|
|
58
|
+
fontSize: 16,
|
|
59
|
+
color: v.text,
|
|
60
|
+
textDecoration: "none",
|
|
61
|
+
whiteSpace: "nowrap"
|
|
62
|
+
},
|
|
63
|
+
headerNav: {
|
|
64
|
+
display: "flex",
|
|
65
|
+
alignItems: "center",
|
|
66
|
+
gap: 4,
|
|
67
|
+
marginLeft: 8
|
|
68
|
+
},
|
|
69
|
+
headerRight: {
|
|
70
|
+
marginLeft: "auto",
|
|
71
|
+
display: "flex",
|
|
72
|
+
alignItems: "center",
|
|
73
|
+
gap: 8
|
|
74
|
+
},
|
|
75
|
+
body: {
|
|
76
|
+
display: "flex",
|
|
77
|
+
flex: 1,
|
|
78
|
+
minHeight: 0
|
|
79
|
+
},
|
|
80
|
+
sidebar: {
|
|
81
|
+
width: SIDEBAR_WIDTH,
|
|
82
|
+
flexShrink: 0,
|
|
83
|
+
position: "sticky",
|
|
84
|
+
top: HEADER_HEIGHT,
|
|
85
|
+
alignSelf: "flex-start",
|
|
86
|
+
height: "calc(100vh - ".concat(HEADER_HEIGHT, "px)"),
|
|
87
|
+
overflowY: "auto",
|
|
88
|
+
padding: 12,
|
|
89
|
+
borderRight: "1px solid ".concat(v.border),
|
|
90
|
+
background: v.surface
|
|
91
|
+
},
|
|
92
|
+
main: {
|
|
93
|
+
flex: 1,
|
|
94
|
+
minWidth: 0,
|
|
95
|
+
padding: "calc(24px * var(--powr-density, 1))"
|
|
96
|
+
},
|
|
97
|
+
footer: {
|
|
98
|
+
padding: "12px 16px",
|
|
99
|
+
borderTop: "1px solid ".concat(v.border),
|
|
100
|
+
color: v.muted,
|
|
101
|
+
fontSize: 12,
|
|
102
|
+
background: v.surface
|
|
103
|
+
},
|
|
104
|
+
navItem: function navItem(active, vertical) {
|
|
105
|
+
return {
|
|
106
|
+
display: "flex",
|
|
107
|
+
alignItems: "center",
|
|
108
|
+
gap: 10,
|
|
109
|
+
padding: vertical ? "9px 12px" : "6px 10px",
|
|
110
|
+
borderRadius: v.radius,
|
|
111
|
+
fontSize: 14,
|
|
112
|
+
lineHeight: 1.2,
|
|
113
|
+
textDecoration: "none",
|
|
114
|
+
cursor: "pointer",
|
|
115
|
+
whiteSpace: "nowrap",
|
|
116
|
+
color: active ? v.primary : v.text,
|
|
117
|
+
background: active ? "color-mix(in srgb, ".concat(v.primary, " 10%, transparent)") : "transparent",
|
|
118
|
+
fontWeight: active ? 600 : 500
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
navIcon: {
|
|
122
|
+
display: "inline-flex",
|
|
123
|
+
width: 18,
|
|
124
|
+
justifyContent: "center",
|
|
125
|
+
color: "inherit"
|
|
126
|
+
},
|
|
127
|
+
iconButton: {
|
|
128
|
+
width: 36,
|
|
129
|
+
height: 36,
|
|
130
|
+
display: "inline-flex",
|
|
131
|
+
alignItems: "center",
|
|
132
|
+
justifyContent: "center",
|
|
133
|
+
borderRadius: v.radius,
|
|
134
|
+
border: "1px solid ".concat(v.border),
|
|
135
|
+
background: v.surface,
|
|
136
|
+
color: v.text,
|
|
137
|
+
cursor: "pointer",
|
|
138
|
+
fontSize: 16,
|
|
139
|
+
padding: 0
|
|
140
|
+
},
|
|
141
|
+
avatarButton: {
|
|
142
|
+
display: "inline-flex",
|
|
143
|
+
alignItems: "center",
|
|
144
|
+
gap: 8,
|
|
145
|
+
height: 36,
|
|
146
|
+
padding: "0 10px 0 4px",
|
|
147
|
+
borderRadius: 999,
|
|
148
|
+
border: "1px solid ".concat(v.border),
|
|
149
|
+
background: v.surface,
|
|
150
|
+
color: v.text,
|
|
151
|
+
cursor: "pointer",
|
|
152
|
+
fontSize: 13
|
|
153
|
+
},
|
|
154
|
+
avatar: {
|
|
155
|
+
width: 28,
|
|
156
|
+
height: 28,
|
|
157
|
+
borderRadius: "50%",
|
|
158
|
+
display: "inline-flex",
|
|
159
|
+
alignItems: "center",
|
|
160
|
+
justifyContent: "center",
|
|
161
|
+
background: v.primary,
|
|
162
|
+
color: v.primaryFg,
|
|
163
|
+
fontSize: 12,
|
|
164
|
+
fontWeight: 700
|
|
165
|
+
},
|
|
166
|
+
menu: {
|
|
167
|
+
position: "absolute",
|
|
168
|
+
right: 0,
|
|
169
|
+
top: "calc(100% + 6px)",
|
|
170
|
+
minWidth: 220,
|
|
171
|
+
padding: 6,
|
|
172
|
+
borderRadius: v.radius,
|
|
173
|
+
border: "1px solid ".concat(v.border),
|
|
174
|
+
background: v.surface,
|
|
175
|
+
boxShadow: "0 10px 30px rgba(0,0,0,0.12)",
|
|
176
|
+
zIndex: 50
|
|
177
|
+
},
|
|
178
|
+
menuHeader: {
|
|
179
|
+
padding: "8px 10px 10px",
|
|
180
|
+
borderBottom: "1px solid ".concat(v.border),
|
|
181
|
+
marginBottom: 4
|
|
182
|
+
},
|
|
183
|
+
menuItem: function menuItem(danger) {
|
|
184
|
+
return {
|
|
185
|
+
display: "flex",
|
|
186
|
+
width: "100%",
|
|
187
|
+
alignItems: "center",
|
|
188
|
+
gap: 8,
|
|
189
|
+
padding: "8px 10px",
|
|
190
|
+
borderRadius: "calc(".concat(v.radius, " - 2px)"),
|
|
191
|
+
border: "none",
|
|
192
|
+
background: "transparent",
|
|
193
|
+
color: danger ? v.danger : v.text,
|
|
194
|
+
fontSize: 14,
|
|
195
|
+
textAlign: "left",
|
|
196
|
+
textDecoration: "none",
|
|
197
|
+
cursor: "pointer"
|
|
198
|
+
};
|
|
199
|
+
},
|
|
200
|
+
overlay: {
|
|
201
|
+
position: "fixed",
|
|
202
|
+
inset: 0,
|
|
203
|
+
background: "rgba(0,0,0,0.4)",
|
|
204
|
+
zIndex: 60
|
|
205
|
+
},
|
|
206
|
+
drawer: function drawer(side) {
|
|
207
|
+
return _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({
|
|
208
|
+
position: "fixed",
|
|
209
|
+
top: 0,
|
|
210
|
+
bottom: 0
|
|
211
|
+
}, side, 0), "width", "min(360px, 90vw)"), "padding", 16), "overflowY", "auto"), "background", v.surface), "color", v.text), "borderLeft", side === "right" ? "1px solid ".concat(v.border) : "none"), "borderRight", side === "left" ? "1px solid ".concat(v.border) : "none"), "boxShadow", "0 0 40px rgba(0,0,0,0.2)"), "zIndex", 61);
|
|
212
|
+
},
|
|
213
|
+
drawerHead: {
|
|
214
|
+
display: "flex",
|
|
215
|
+
alignItems: "center",
|
|
216
|
+
justifyContent: "space-between",
|
|
217
|
+
marginBottom: 12
|
|
218
|
+
},
|
|
219
|
+
gatePage: {
|
|
220
|
+
minHeight: "100vh",
|
|
221
|
+
display: "flex",
|
|
222
|
+
flexDirection: "column",
|
|
223
|
+
background: v.bg,
|
|
224
|
+
color: v.text,
|
|
225
|
+
fontFamily: v.font
|
|
226
|
+
},
|
|
227
|
+
gateCard: {
|
|
228
|
+
width: "min(480px, 100%)",
|
|
229
|
+
margin: "40px auto",
|
|
230
|
+
padding: 8
|
|
231
|
+
},
|
|
232
|
+
skeletonBar: function skeletonBar(w) {
|
|
233
|
+
return {
|
|
234
|
+
height: 12,
|
|
235
|
+
width: w,
|
|
236
|
+
borderRadius: 6,
|
|
237
|
+
background: v.border,
|
|
238
|
+
opacity: 0.6
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
};
|
|
@@ -4,7 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = PowrThemeProvider;
|
|
7
|
-
exports
|
|
7
|
+
Object.defineProperty(exports, "powrThemeStorageKey", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function get() {
|
|
10
|
+
return _tokens.powrThemeStorageKey;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
8
13
|
exports.usePowrTheme = usePowrTheme;
|
|
9
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
15
|
var _tokens = require("./tokens");
|
|
@@ -24,11 +29,7 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
|
24
29
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
25
30
|
var config = require("../config");
|
|
26
31
|
var PowrThemeContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
27
|
-
var STORAGE_PREFIX = "powr-theme";
|
|
28
32
|
var DARK_QUERY = "(prefers-color-scheme: dark)";
|
|
29
|
-
function powrThemeStorageKey(projectId) {
|
|
30
|
-
return "".concat(STORAGE_PREFIX, ":").concat(projectId || "default");
|
|
31
|
-
}
|
|
32
33
|
function readStorage(key) {
|
|
33
34
|
if (typeof window === "undefined") return null;
|
|
34
35
|
try {
|
|
@@ -91,7 +92,7 @@ function PowrThemeProvider(_ref) {
|
|
|
91
92
|
className = _ref.className,
|
|
92
93
|
onChange = _ref.onChange,
|
|
93
94
|
children = _ref.children;
|
|
94
|
-
var storageKey = powrThemeStorageKey(projectId || config.projectId);
|
|
95
|
+
var storageKey = (0, _tokens.powrThemeStorageKey)(projectId || config.projectId);
|
|
95
96
|
var _useState = (0, _react.useState)(function () {
|
|
96
97
|
return (0, _tokens.normalizeScheme)(schemeProp);
|
|
97
98
|
}),
|
|
@@ -164,8 +165,10 @@ function PowrThemeProvider(_ref) {
|
|
|
164
165
|
}, [resolved]);
|
|
165
166
|
|
|
166
167
|
// attach="root": write on <html> so product CSS, portals and toasts see the same vars.
|
|
168
|
+
// Wait for the cache read: otherwise the first commit writes the prop defaults
|
|
169
|
+
// over what `powrThemeInitScript` already painted (one light frame for dark users).
|
|
167
170
|
(0, _react.useEffect)(function () {
|
|
168
|
-
if (attach !== "root" || typeof document === "undefined") return undefined;
|
|
171
|
+
if (attach !== "root" || typeof document === "undefined" || !hydrated) return undefined;
|
|
169
172
|
var el = document.documentElement;
|
|
170
173
|
for (var _i = 0, _Object$keys = Object.keys(cssVars); _i < _Object$keys.length; _i++) {
|
|
171
174
|
var name = _Object$keys[_i];
|
|
@@ -193,11 +196,21 @@ function PowrThemeProvider(_ref) {
|
|
|
193
196
|
el.removeAttribute("data-powr-preset");
|
|
194
197
|
el.style.removeProperty("color-scheme");
|
|
195
198
|
};
|
|
196
|
-
}, [attach, cssVars, resolved.scheme, resolved.density, resolved.preset]);
|
|
199
|
+
}, [attach, hydrated, cssVars, resolved.scheme, resolved.density, resolved.preset]);
|
|
197
200
|
var commit = (0, _react.useCallback)(function (next) {
|
|
198
|
-
if (persist) writeStorage(storageKey, next);
|
|
199
201
|
if (typeof onChange === "function") onChange(next);
|
|
200
|
-
}, [
|
|
202
|
+
}, [onChange]);
|
|
203
|
+
|
|
204
|
+
// Cache from state, not from setter closures — three back-to-back setX calls
|
|
205
|
+
// (host pull) must leave the cache equal to the final state, not the first.
|
|
206
|
+
(0, _react.useEffect)(function () {
|
|
207
|
+
if (!hydrated || !persist) return;
|
|
208
|
+
writeStorage(storageKey, {
|
|
209
|
+
scheme: scheme,
|
|
210
|
+
density: density,
|
|
211
|
+
preset: preset
|
|
212
|
+
});
|
|
213
|
+
}, [hydrated, persist, storageKey, scheme, density, preset]);
|
|
201
214
|
var setScheme = (0, _react.useCallback)(function (value) {
|
|
202
215
|
var s = (0, _tokens.normalizeScheme)(value);
|
|
203
216
|
setSchemeState(s);
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = PowrThemeSettings;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _PowrThemeProvider = require("./PowrThemeProvider");
|
|
10
|
+
var _tokens = require("./tokens");
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
15
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
16
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
17
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
18
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
19
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
20
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
21
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
22
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
24
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
25
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
26
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
27
|
+
/**
|
|
28
|
+
* User-level theme selectors: scheme · density · product preset.
|
|
29
|
+
*
|
|
30
|
+
* Reads and writes through `usePowrTheme()`, so it needs a `PowrThemeProvider`
|
|
31
|
+
* above it. Legacy apps mount this inside their own Settings page; the
|
|
32
|
+
* wrapper opens it in a drawer. Presets come from the product — this panel
|
|
33
|
+
* never invents colours (no colour wheel).
|
|
34
|
+
*
|
|
35
|
+
* `onSave` is the hook for card 3 (host `/users/me/preferences`). Until then
|
|
36
|
+
* changes are live + cached in localStorage by the provider.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
var SCHEME_LABELS = {
|
|
40
|
+
light: "Light",
|
|
41
|
+
dark: "Dark",
|
|
42
|
+
system: "System"
|
|
43
|
+
};
|
|
44
|
+
var DENSITY_LABELS = {
|
|
45
|
+
comfortable: "Comfortable",
|
|
46
|
+
compact: "Compact"
|
|
47
|
+
};
|
|
48
|
+
var styles = {
|
|
49
|
+
root: {
|
|
50
|
+
display: "grid",
|
|
51
|
+
gap: 20,
|
|
52
|
+
color: (0, _tokens.powrVar)("text", "#111827"),
|
|
53
|
+
fontFamily: (0, _tokens.powrVar)("font", "system-ui, sans-serif")
|
|
54
|
+
},
|
|
55
|
+
title: {
|
|
56
|
+
margin: 0,
|
|
57
|
+
fontSize: 16,
|
|
58
|
+
fontWeight: 600
|
|
59
|
+
},
|
|
60
|
+
label: {
|
|
61
|
+
display: "block",
|
|
62
|
+
fontSize: 12,
|
|
63
|
+
fontWeight: 600,
|
|
64
|
+
letterSpacing: "0.04em",
|
|
65
|
+
textTransform: "uppercase",
|
|
66
|
+
color: (0, _tokens.powrVar)("muted", "#6b7280"),
|
|
67
|
+
marginBottom: 8
|
|
68
|
+
},
|
|
69
|
+
segmented: {
|
|
70
|
+
display: "inline-flex",
|
|
71
|
+
padding: 3,
|
|
72
|
+
gap: 2,
|
|
73
|
+
borderRadius: (0, _tokens.powrVar)("radius", "0.5rem"),
|
|
74
|
+
border: "1px solid ".concat((0, _tokens.powrVar)("border", "#e5e7eb")),
|
|
75
|
+
background: (0, _tokens.powrVar)("bg", "#fafafa")
|
|
76
|
+
},
|
|
77
|
+
segment: function segment(active) {
|
|
78
|
+
return {
|
|
79
|
+
padding: "6px 12px",
|
|
80
|
+
fontSize: 13,
|
|
81
|
+
lineHeight: 1.2,
|
|
82
|
+
borderRadius: "calc(".concat((0, _tokens.powrVar)("radius", "0.5rem"), " - 2px)"),
|
|
83
|
+
border: "none",
|
|
84
|
+
cursor: "pointer",
|
|
85
|
+
background: active ? (0, _tokens.powrVar)("surface", "#fff") : "transparent",
|
|
86
|
+
color: active ? (0, _tokens.powrVar)("text", "#111827") : (0, _tokens.powrVar)("muted", "#6b7280"),
|
|
87
|
+
boxShadow: active ? "0 1px 2px rgba(0,0,0,0.08)" : "none",
|
|
88
|
+
fontWeight: active ? 600 : 400
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
presetGrid: {
|
|
92
|
+
display: "grid",
|
|
93
|
+
gridTemplateColumns: "repeat(auto-fill, minmax(140px, 1fr))",
|
|
94
|
+
gap: 8
|
|
95
|
+
},
|
|
96
|
+
presetCard: function presetCard(active) {
|
|
97
|
+
return {
|
|
98
|
+
display: "grid",
|
|
99
|
+
gap: 8,
|
|
100
|
+
padding: 10,
|
|
101
|
+
textAlign: "left",
|
|
102
|
+
cursor: "pointer",
|
|
103
|
+
borderRadius: (0, _tokens.powrVar)("radius", "0.5rem"),
|
|
104
|
+
border: "2px solid ".concat(active ? (0, _tokens.powrVar)("primary", "#2563eb") : (0, _tokens.powrVar)("border", "#e5e7eb")),
|
|
105
|
+
background: (0, _tokens.powrVar)("surface", "#fff"),
|
|
106
|
+
color: (0, _tokens.powrVar)("text", "#111827")
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
swatchRow: {
|
|
110
|
+
display: "flex",
|
|
111
|
+
gap: 4
|
|
112
|
+
},
|
|
113
|
+
swatch: function swatch(bg) {
|
|
114
|
+
return {
|
|
115
|
+
width: 18,
|
|
116
|
+
height: 18,
|
|
117
|
+
borderRadius: 4,
|
|
118
|
+
background: bg,
|
|
119
|
+
border: "1px solid ".concat((0, _tokens.powrVar)("border", "#e5e7eb"))
|
|
120
|
+
};
|
|
121
|
+
},
|
|
122
|
+
footer: {
|
|
123
|
+
display: "flex",
|
|
124
|
+
gap: 8,
|
|
125
|
+
alignItems: "center"
|
|
126
|
+
},
|
|
127
|
+
button: function button(primary) {
|
|
128
|
+
return {
|
|
129
|
+
padding: "8px 14px",
|
|
130
|
+
fontSize: 13,
|
|
131
|
+
cursor: "pointer",
|
|
132
|
+
borderRadius: (0, _tokens.powrVar)("radius", "0.5rem"),
|
|
133
|
+
border: "1px solid ".concat(primary ? (0, _tokens.powrVar)("primary", "#2563eb") : (0, _tokens.powrVar)("border", "#e5e7eb")),
|
|
134
|
+
background: primary ? (0, _tokens.powrVar)("primary", "#2563eb") : (0, _tokens.powrVar)("surface", "#fff"),
|
|
135
|
+
color: primary ? (0, _tokens.powrVar)("primary-fg", "#fff") : (0, _tokens.powrVar)("text", "#111827")
|
|
136
|
+
};
|
|
137
|
+
},
|
|
138
|
+
hint: {
|
|
139
|
+
fontSize: 12,
|
|
140
|
+
color: (0, _tokens.powrVar)("muted", "#6b7280"),
|
|
141
|
+
margin: 0
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
function Segmented(_ref) {
|
|
145
|
+
var value = _ref.value,
|
|
146
|
+
options = _ref.options,
|
|
147
|
+
labels = _ref.labels,
|
|
148
|
+
onChange = _ref.onChange,
|
|
149
|
+
name = _ref.name;
|
|
150
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
151
|
+
role: "radiogroup",
|
|
152
|
+
"aria-label": name,
|
|
153
|
+
style: styles.segmented
|
|
154
|
+
}, options.map(function (opt) {
|
|
155
|
+
return /*#__PURE__*/_react["default"].createElement("button", {
|
|
156
|
+
key: opt,
|
|
157
|
+
type: "button",
|
|
158
|
+
role: "radio",
|
|
159
|
+
"aria-checked": value === opt,
|
|
160
|
+
onClick: function onClick() {
|
|
161
|
+
return onChange(opt);
|
|
162
|
+
},
|
|
163
|
+
style: styles.segment(value === opt)
|
|
164
|
+
}, labels[opt] || opt);
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
function presetSwatches(preset, dark) {
|
|
168
|
+
var t = dark && preset.dark || preset.tokens || {};
|
|
169
|
+
return [t.bg, t.surface, t.primary, t.text].filter(Boolean);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @param {object} props
|
|
174
|
+
* @param {string} [props.title="Appearance"]
|
|
175
|
+
* @param {boolean} [props.showScheme=true]
|
|
176
|
+
* @param {boolean} [props.showDensity=true]
|
|
177
|
+
* @param {boolean} [props.showPresets=true] - Hidden automatically when the product passed no presets.
|
|
178
|
+
* @param {(value: {scheme, density, preset}) => void|Promise<void>} [props.onSave] - Card 3: host save. Shows a Save button when given.
|
|
179
|
+
* @param {boolean} [props.saving]
|
|
180
|
+
* @param {string} [props.saveLabel="Save"]
|
|
181
|
+
*/
|
|
182
|
+
function PowrThemeSettings(_ref2) {
|
|
183
|
+
var _ref2$title = _ref2.title,
|
|
184
|
+
title = _ref2$title === void 0 ? "Appearance" : _ref2$title,
|
|
185
|
+
_ref2$showScheme = _ref2.showScheme,
|
|
186
|
+
showScheme = _ref2$showScheme === void 0 ? true : _ref2$showScheme,
|
|
187
|
+
_ref2$showDensity = _ref2.showDensity,
|
|
188
|
+
showDensity = _ref2$showDensity === void 0 ? true : _ref2$showDensity,
|
|
189
|
+
_ref2$showPresets = _ref2.showPresets,
|
|
190
|
+
showPresets = _ref2$showPresets === void 0 ? true : _ref2$showPresets,
|
|
191
|
+
onSave = _ref2.onSave,
|
|
192
|
+
_ref2$saving = _ref2.saving,
|
|
193
|
+
saving = _ref2$saving === void 0 ? false : _ref2$saving,
|
|
194
|
+
_ref2$error = _ref2.error,
|
|
195
|
+
error = _ref2$error === void 0 ? null : _ref2$error,
|
|
196
|
+
_ref2$saveLabel = _ref2.saveLabel,
|
|
197
|
+
saveLabel = _ref2$saveLabel === void 0 ? "Save" : _ref2$saveLabel;
|
|
198
|
+
var t = (0, _PowrThemeProvider.usePowrTheme)();
|
|
199
|
+
var _useState = (0, _react.useState)(null),
|
|
200
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
201
|
+
savedAt = _useState2[0],
|
|
202
|
+
setSavedAt = _useState2[1];
|
|
203
|
+
var dirty = savedAt === null || savedAt.scheme !== t.scheme || savedAt.density !== t.density || savedAt.preset !== t.preset;
|
|
204
|
+
var handleSave = /*#__PURE__*/function () {
|
|
205
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
206
|
+
var value, _t;
|
|
207
|
+
return _regenerator().w(function (_context) {
|
|
208
|
+
while (1) switch (_context.p = _context.n) {
|
|
209
|
+
case 0:
|
|
210
|
+
value = {
|
|
211
|
+
scheme: t.scheme,
|
|
212
|
+
density: t.density,
|
|
213
|
+
preset: t.preset
|
|
214
|
+
};
|
|
215
|
+
_context.p = 1;
|
|
216
|
+
_context.n = 2;
|
|
217
|
+
return onSave(value);
|
|
218
|
+
case 2:
|
|
219
|
+
setSavedAt(value);
|
|
220
|
+
_context.n = 4;
|
|
221
|
+
break;
|
|
222
|
+
case 3:
|
|
223
|
+
_context.p = 3;
|
|
224
|
+
_t = _context.v;
|
|
225
|
+
case 4:
|
|
226
|
+
return _context.a(2);
|
|
227
|
+
}
|
|
228
|
+
}, _callee, null, [[1, 3]]);
|
|
229
|
+
}));
|
|
230
|
+
return function handleSave() {
|
|
231
|
+
return _ref3.apply(this, arguments);
|
|
232
|
+
};
|
|
233
|
+
}();
|
|
234
|
+
var presets = Array.isArray(t.presets) ? t.presets : [];
|
|
235
|
+
var hasPresets = showPresets && presets.length > 0;
|
|
236
|
+
var isDark = t.resolvedScheme === "dark";
|
|
237
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
238
|
+
style: styles.root
|
|
239
|
+
}, title ? /*#__PURE__*/_react["default"].createElement("h3", {
|
|
240
|
+
style: styles.title
|
|
241
|
+
}, title) : null, showScheme ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
242
|
+
style: styles.label
|
|
243
|
+
}, "Scheme"), /*#__PURE__*/_react["default"].createElement(Segmented, {
|
|
244
|
+
name: "Scheme",
|
|
245
|
+
value: t.scheme,
|
|
246
|
+
options: _tokens.POWR_SCHEMES,
|
|
247
|
+
labels: SCHEME_LABELS,
|
|
248
|
+
onChange: t.setScheme
|
|
249
|
+
}), t.scheme === "system" ? /*#__PURE__*/_react["default"].createElement("p", {
|
|
250
|
+
style: _objectSpread(_objectSpread({}, styles.hint), {}, {
|
|
251
|
+
marginTop: 6
|
|
252
|
+
})
|
|
253
|
+
}, "Following your device: ", t.resolvedScheme, ".") : null) : null, showDensity ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
254
|
+
style: styles.label
|
|
255
|
+
}, "Density"), /*#__PURE__*/_react["default"].createElement(Segmented, {
|
|
256
|
+
name: "Density",
|
|
257
|
+
value: t.density,
|
|
258
|
+
options: Object.keys(_tokens.POWR_DENSITIES),
|
|
259
|
+
labels: DENSITY_LABELS,
|
|
260
|
+
onChange: t.setDensity
|
|
261
|
+
})) : null, hasPresets ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("span", {
|
|
262
|
+
style: styles.label
|
|
263
|
+
}, "Theme"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
264
|
+
style: styles.presetGrid
|
|
265
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
266
|
+
type: "button",
|
|
267
|
+
"aria-pressed": !t.preset,
|
|
268
|
+
onClick: function onClick() {
|
|
269
|
+
return t.setPreset(null);
|
|
270
|
+
},
|
|
271
|
+
style: styles.presetCard(!t.preset)
|
|
272
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
273
|
+
style: {
|
|
274
|
+
fontSize: 13,
|
|
275
|
+
fontWeight: 600
|
|
276
|
+
}
|
|
277
|
+
}, "Default"), /*#__PURE__*/_react["default"].createElement("span", {
|
|
278
|
+
style: styles.hint
|
|
279
|
+
}, "App\u2019s standard look")), presets.map(function (p) {
|
|
280
|
+
return /*#__PURE__*/_react["default"].createElement("button", {
|
|
281
|
+
key: p.id,
|
|
282
|
+
type: "button",
|
|
283
|
+
"aria-pressed": t.preset === p.id,
|
|
284
|
+
onClick: function onClick() {
|
|
285
|
+
return t.setPreset(p.id);
|
|
286
|
+
},
|
|
287
|
+
style: styles.presetCard(t.preset === p.id)
|
|
288
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
289
|
+
style: {
|
|
290
|
+
fontSize: 13,
|
|
291
|
+
fontWeight: 600
|
|
292
|
+
}
|
|
293
|
+
}, p.label || p.id), /*#__PURE__*/_react["default"].createElement("span", {
|
|
294
|
+
style: styles.swatchRow
|
|
295
|
+
}, presetSwatches(p, isDark).map(function (c, i) {
|
|
296
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
297
|
+
key: i,
|
|
298
|
+
style: styles.swatch(c)
|
|
299
|
+
});
|
|
300
|
+
})));
|
|
301
|
+
}))) : null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
302
|
+
style: styles.footer
|
|
303
|
+
}, onSave ? /*#__PURE__*/_react["default"].createElement("button", {
|
|
304
|
+
type: "button",
|
|
305
|
+
disabled: saving,
|
|
306
|
+
onClick: handleSave,
|
|
307
|
+
style: _objectSpread(_objectSpread({}, styles.button(true)), {}, {
|
|
308
|
+
opacity: saving ? 0.6 : 1
|
|
309
|
+
})
|
|
310
|
+
}, saving ? "Saving…" : saveLabel) : null, /*#__PURE__*/_react["default"].createElement("button", {
|
|
311
|
+
type: "button",
|
|
312
|
+
onClick: t.reset,
|
|
313
|
+
style: styles.button(false)
|
|
314
|
+
}, "Reset"), error ? /*#__PURE__*/_react["default"].createElement("p", {
|
|
315
|
+
style: _objectSpread(_objectSpread({}, styles.hint), {}, {
|
|
316
|
+
color: (0, _tokens.powrVar)("danger", "#dc2626")
|
|
317
|
+
})
|
|
318
|
+
}, error) : onSave ? /*#__PURE__*/_react["default"].createElement("p", {
|
|
319
|
+
style: styles.hint
|
|
320
|
+
}, dirty ? "Saves to your Powr account — follows you to other devices." : "Saved to your account.") : /*#__PURE__*/_react["default"].createElement("p", {
|
|
321
|
+
style: styles.hint
|
|
322
|
+
}, "Saved on this device.")));
|
|
323
|
+
}
|