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.
@@ -0,0 +1,348 @@
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.POWR_SHELL_MODES = void 0;
8
+ exports["default"] = PowrBaseAppWrapper;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _PowrThemeProvider = _interopRequireWildcard(require("../theme/PowrThemeProvider"));
11
+ var _PowrThemeSettings = _interopRequireDefault(require("../theme/PowrThemeSettings"));
12
+ var _host = require("../theme/host");
13
+ var _session = _interopRequireWildcard(require("../session"));
14
+ var _auth = _interopRequireDefault(require("../auth"));
15
+ var _PowrOnboardingProvider = _interopRequireDefault(require("../onboarding/PowrOnboardingProvider"));
16
+ var _useMediaQuery = _interopRequireDefault(require("../utils/useMediaQuery"));
17
+ var _styles = require("./styles");
18
+ var _parts = require("./parts");
19
+ var _excluded = ["theme", "presets", "scheme", "density", "preset", "persistTheme", "user", "token", "refreshToken", "onSessionChange", "onLogout"];
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
21
+ 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 _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
+ 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; }
23
+ 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; }
24
+ 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; }
25
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
26
+ 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); }
27
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
28
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
29
+ 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."); }
30
+ 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; } }
31
+ 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; }
32
+ 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; } }
33
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
34
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
35
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
36
+ var config = require("../config");
37
+ var POWR_SHELL_MODES = exports.POWR_SHELL_MODES = Object.freeze(["sidebar", "topbar"]);
38
+
39
+ /**
40
+ * PowrBaseAppWrapper — the one root mount for a Powr web app.
41
+ *
42
+ * Replaces the files every new app copied: auth store, route guards, top bar /
43
+ * sidebar, login page glue, providers. Chrome + selectors live here; palette,
44
+ * presets, logo, nav items, product roles and public pages stay in the product.
45
+ *
46
+ * Guardrails: no colours of its own (every colour is `var(--powr-*)`), more
47
+ * than one shape (`sidebar` | `topbar`), no `next/*` import — `Link` and
48
+ * `pathname` come in as props, like `apiUrl` does elsewhere.
49
+ */
50
+ function PowrBaseAppWrapper(props) {
51
+ var theme = props.theme,
52
+ presets = props.presets,
53
+ scheme = props.scheme,
54
+ density = props.density,
55
+ preset = props.preset,
56
+ _props$persistTheme = props.persistTheme,
57
+ persistTheme = _props$persistTheme === void 0 ? true : _props$persistTheme,
58
+ user = props.user,
59
+ token = props.token,
60
+ refreshToken = props.refreshToken,
61
+ onSessionChange = props.onSessionChange,
62
+ onLogout = props.onLogout,
63
+ rest = _objectWithoutProperties(props, _excluded);
64
+ var outerTheme = (0, _PowrThemeProvider.usePowrTheme)();
65
+ var needsThemeProvider = !outerTheme.mounted || theme !== undefined || presets !== undefined;
66
+ var shell = /*#__PURE__*/_react["default"].createElement(_session["default"], {
67
+ user: user,
68
+ token: token,
69
+ refreshToken: refreshToken,
70
+ onChange: onSessionChange,
71
+ onLogout: onLogout
72
+ }, /*#__PURE__*/_react["default"].createElement(Shell, rest));
73
+ if (!needsThemeProvider) return shell;
74
+ return /*#__PURE__*/_react["default"].createElement(_PowrThemeProvider["default"], {
75
+ theme: theme,
76
+ presets: presets,
77
+ scheme: scheme,
78
+ density: density,
79
+ preset: preset,
80
+ persist: persistTheme,
81
+ projectId: rest.projectId || config.projectId
82
+ }, shell);
83
+ }
84
+ function Shell(_ref) {
85
+ var _ref$mode = _ref.mode,
86
+ mode = _ref$mode === void 0 ? "topbar" : _ref$mode,
87
+ _ref$brand = _ref.brand,
88
+ brand = _ref$brand === void 0 ? null : _ref$brand,
89
+ _ref$brandHref = _ref.brandHref,
90
+ brandHref = _ref$brandHref === void 0 ? "/" : _ref$brandHref,
91
+ _ref$nav = _ref.nav,
92
+ nav = _ref$nav === void 0 ? [] : _ref$nav,
93
+ _ref$headerRight = _ref.headerRight,
94
+ headerRight = _ref$headerRight === void 0 ? null : _ref$headerRight,
95
+ _ref$footer = _ref.footer,
96
+ footer = _ref$footer === void 0 ? null : _ref$footer,
97
+ _ref$Link = _ref.Link,
98
+ Link = _ref$Link === void 0 ? _parts.DefaultLink : _ref$Link,
99
+ _ref$pathname = _ref.pathname,
100
+ pathname = _ref$pathname === void 0 ? "" : _ref$pathname,
101
+ _ref$gate = _ref.gate,
102
+ gate = _ref$gate === void 0 ? "login" : _ref$gate,
103
+ _ref$login = _ref.login,
104
+ login = _ref$login === void 0 ? {} : _ref$login,
105
+ _ref$onboarding = _ref.onboarding,
106
+ onboarding = _ref$onboarding === void 0 ? {} : _ref$onboarding,
107
+ _ref$adminHref = _ref.adminHref,
108
+ adminHref = _ref$adminHref === void 0 ? "/powr-admin" : _ref$adminHref,
109
+ _ref$loginHref = _ref.loginHref,
110
+ loginHref = _ref$loginHref === void 0 ? "/login" : _ref$loginHref,
111
+ _ref$menuItems = _ref.menuItems,
112
+ menuItems = _ref$menuItems === void 0 ? [] : _ref$menuItems,
113
+ _ref$showThemeSetting = _ref.showThemeSettings,
114
+ showThemeSettings = _ref$showThemeSetting === void 0 ? true : _ref$showThemeSetting,
115
+ _ref$syncThemeWithHos = _ref.syncThemeWithHost,
116
+ syncThemeWithHost = _ref$syncThemeWithHos === void 0 ? true : _ref$syncThemeWithHos,
117
+ apiUrl = _ref.apiUrl,
118
+ projectId = _ref.projectId,
119
+ appName = _ref.appName,
120
+ appLogo = _ref.appLogo,
121
+ children = _ref.children;
122
+ var session = (0, _session.usePowrSession)();
123
+ // Host is truth after login: pull once per token, Save writes back.
124
+ var themeHost = (0, _host.usePowrThemeHost)({
125
+ token: session.token,
126
+ apiUrl: apiUrl,
127
+ projectId: projectId,
128
+ enabled: syncThemeWithHost && showThemeSettings
129
+ });
130
+ var narrow = (0, _useMediaQuery["default"])(_styles.NARROW_QUERY, false);
131
+ var _useState = (0, _react.useState)(false),
132
+ _useState2 = _slicedToArray(_useState, 2),
133
+ navOpen = _useState2[0],
134
+ setNavOpen = _useState2[1];
135
+ var _useState3 = (0, _react.useState)(false),
136
+ _useState4 = _slicedToArray(_useState3, 2),
137
+ settingsOpen = _useState4[0],
138
+ setSettingsOpen = _useState4[1];
139
+ var closeNav = (0, _react.useCallback)(function () {
140
+ return setNavOpen(false);
141
+ }, []);
142
+ var closeSettings = (0, _react.useCallback)(function () {
143
+ return setSettingsOpen(false);
144
+ }, []);
145
+ var resolvedAppName = appName || login.appName || "App";
146
+ var resolvedAppLogo = appLogo || login.appLogo;
147
+ if (!session.hydrated) return /*#__PURE__*/_react["default"].createElement(_parts.Skeleton, null);
148
+
149
+ // ---- Gate -------------------------------------------------------------
150
+ if (!session.user && gate === "login") {
151
+ return /*#__PURE__*/_react["default"].createElement("div", {
152
+ style: _styles.s.gatePage
153
+ }, /*#__PURE__*/_react["default"].createElement("header", {
154
+ style: _styles.s.header
155
+ }, /*#__PURE__*/_react["default"].createElement(Brand, {
156
+ Link: Link,
157
+ href: brandHref,
158
+ brand: brand,
159
+ appName: resolvedAppName,
160
+ appLogo: resolvedAppLogo
161
+ }), /*#__PURE__*/_react["default"].createElement("div", {
162
+ style: _styles.s.headerRight
163
+ }, showThemeSettings ? /*#__PURE__*/_react["default"].createElement("button", {
164
+ type: "button",
165
+ "aria-label": "Appearance",
166
+ onClick: function onClick() {
167
+ return setSettingsOpen(true);
168
+ },
169
+ style: _styles.s.iconButton
170
+ }, "\u25D0") : null)), /*#__PURE__*/_react["default"].createElement("main", {
171
+ style: {
172
+ flex: 1,
173
+ padding: 16
174
+ }
175
+ }, /*#__PURE__*/_react["default"].createElement("div", {
176
+ style: _styles.s.gateCard
177
+ }, /*#__PURE__*/_react["default"].createElement(_auth["default"], _extends({
178
+ apiUrl: apiUrl,
179
+ projectId: projectId,
180
+ appName: resolvedAppName,
181
+ appLogo: resolvedAppLogo,
182
+ requirePhoneVerification: false
183
+ }, login, {
184
+ onLogin: function onLogin(result) {
185
+ var _login$onLogin;
186
+ if (result !== null && result !== void 0 && result.success && result.token) {
187
+ session.setSession(result.user, result.token, result.refreshToken || null);
188
+ }
189
+ (_login$onLogin = login.onLogin) === null || _login$onLogin === void 0 || _login$onLogin.call(login, result);
190
+ },
191
+ onRegister: function onRegister(result) {
192
+ var _login$onRegister;
193
+ if (result !== null && result !== void 0 && result.success && result.token) {
194
+ session.setSession(result.user, result.token, result.refreshToken || null);
195
+ }
196
+ (_login$onRegister = login.onRegister) === null || _login$onRegister === void 0 || _login$onRegister.call(login, result);
197
+ },
198
+ onSessionExpired: function onSessionExpired() {
199
+ var _login$onSessionExpir;
200
+ session.clear();
201
+ (_login$onSessionExpir = login.onSessionExpired) === null || _login$onSessionExpir === void 0 || _login$onSessionExpir.call(login);
202
+ }
203
+ })))), footer ? /*#__PURE__*/_react["default"].createElement("footer", {
204
+ style: _styles.s.footer
205
+ }, footer) : null, /*#__PURE__*/_react["default"].createElement(SettingsDrawer, {
206
+ open: settingsOpen,
207
+ onClose: closeSettings,
208
+ host: null
209
+ }));
210
+ }
211
+
212
+ // ---- Shell ------------------------------------------------------------
213
+ var vertical = mode === "sidebar" && !narrow;
214
+ var showBurger = narrow && nav.length > 0;
215
+ var content = /*#__PURE__*/_react["default"].createElement("div", {
216
+ style: _styles.s.root
217
+ }, /*#__PURE__*/_react["default"].createElement("header", {
218
+ style: _styles.s.header
219
+ }, showBurger ? /*#__PURE__*/_react["default"].createElement("button", {
220
+ type: "button",
221
+ "aria-label": "Menu",
222
+ onClick: function onClick() {
223
+ return setNavOpen(true);
224
+ },
225
+ style: _styles.s.iconButton
226
+ }, "\u2630") : null, /*#__PURE__*/_react["default"].createElement(Brand, {
227
+ Link: Link,
228
+ href: brandHref,
229
+ brand: brand,
230
+ appName: resolvedAppName,
231
+ appLogo: resolvedAppLogo
232
+ }), mode === "topbar" && !narrow && nav.length ? /*#__PURE__*/_react["default"].createElement("div", {
233
+ style: _styles.s.headerNav
234
+ }, /*#__PURE__*/_react["default"].createElement(_parts.NavList, {
235
+ items: nav,
236
+ pathname: pathname,
237
+ Link: Link,
238
+ vertical: false
239
+ })) : null, /*#__PURE__*/_react["default"].createElement("div", {
240
+ style: _styles.s.headerRight
241
+ }, headerRight, session.user ? /*#__PURE__*/_react["default"].createElement(_parts.ProfileMenu, {
242
+ user: session.user,
243
+ isPowrAdmin: session.isPowrAdmin,
244
+ adminHref: adminHref,
245
+ Link: Link,
246
+ extraItems: menuItems,
247
+ onOpenSettings: showThemeSettings ? function () {
248
+ return setSettingsOpen(true);
249
+ } : null,
250
+ onLogout: session.clear
251
+ }) : /*#__PURE__*/_react["default"].createElement(Link, {
252
+ href: loginHref,
253
+ style: _objectSpread(_objectSpread({}, _styles.s.navItem(false, false)), {}, {
254
+ border: "1px solid ".concat(_styles.v.border)
255
+ })
256
+ }, "Sign in"))), /*#__PURE__*/_react["default"].createElement("div", {
257
+ style: _styles.s.body
258
+ }, vertical && nav.length ? /*#__PURE__*/_react["default"].createElement("aside", {
259
+ style: _styles.s.sidebar
260
+ }, /*#__PURE__*/_react["default"].createElement(_parts.NavList, {
261
+ items: nav,
262
+ pathname: pathname,
263
+ Link: Link,
264
+ vertical: true
265
+ })) : null, /*#__PURE__*/_react["default"].createElement("main", {
266
+ style: _styles.s.main
267
+ }, children)), footer ? /*#__PURE__*/_react["default"].createElement("footer", {
268
+ style: _styles.s.footer
269
+ }, footer) : null, /*#__PURE__*/_react["default"].createElement(_parts.Drawer, {
270
+ open: navOpen,
271
+ side: "left",
272
+ title: resolvedAppName,
273
+ onClose: closeNav
274
+ }, /*#__PURE__*/_react["default"].createElement(_parts.NavList, {
275
+ items: nav,
276
+ pathname: pathname,
277
+ Link: Link,
278
+ vertical: true,
279
+ onNavigate: closeNav
280
+ })), /*#__PURE__*/_react["default"].createElement(SettingsDrawer, {
281
+ open: settingsOpen,
282
+ onClose: closeSettings,
283
+ host: syncThemeWithHost && session.token ? themeHost : null
284
+ }));
285
+ if (onboarding === false || !session.user) return content;
286
+ return /*#__PURE__*/_react["default"].createElement(_PowrOnboardingProvider["default"], _extends({
287
+ apiUrl: apiUrl,
288
+ projectId: projectId || config.projectId,
289
+ user: session.user,
290
+ token: session.token,
291
+ refreshToken: session.refreshToken,
292
+ isHydrated: session.hydrated,
293
+ appName: resolvedAppName,
294
+ appLogo: resolvedAppLogo
295
+ }, onboarding, {
296
+ onUserUpdate: function onUserUpdate(u) {
297
+ var _onboarding$onUserUpd;
298
+ session.setSession(u, session.token, session.refreshToken);
299
+ (_onboarding$onUserUpd = onboarding.onUserUpdate) === null || _onboarding$onUserUpd === void 0 || _onboarding$onUserUpd.call(onboarding, u);
300
+ },
301
+ onTokenRefreshed: function onTokenRefreshed(newToken) {
302
+ var _onboarding$onTokenRe;
303
+ session.setSession(session.user, newToken, session.refreshToken);
304
+ (_onboarding$onTokenRe = onboarding.onTokenRefreshed) === null || _onboarding$onTokenRe === void 0 || _onboarding$onTokenRe.call(onboarding, newToken);
305
+ },
306
+ onSessionExpired: function onSessionExpired() {
307
+ var _onboarding$onSession;
308
+ session.clear();
309
+ (_onboarding$onSession = onboarding.onSessionExpired) === null || _onboarding$onSession === void 0 || _onboarding$onSession.call(onboarding);
310
+ }
311
+ }), content);
312
+ }
313
+ function Brand(_ref2) {
314
+ var Link = _ref2.Link,
315
+ href = _ref2.href,
316
+ brand = _ref2.brand,
317
+ appName = _ref2.appName,
318
+ appLogo = _ref2.appLogo;
319
+ return /*#__PURE__*/_react["default"].createElement(Link, {
320
+ href: href,
321
+ style: _styles.s.brand
322
+ }, brand !== null && brand !== undefined ? brand : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, appLogo ? /*#__PURE__*/_react["default"].createElement("img", {
323
+ src: appLogo,
324
+ alt: "",
325
+ style: {
326
+ height: 24,
327
+ width: "auto"
328
+ }
329
+ }) : null, /*#__PURE__*/_react["default"].createElement("span", null, appName)));
330
+ }
331
+ function SettingsDrawer(_ref3) {
332
+ var open = _ref3.open,
333
+ onClose = _ref3.onClose,
334
+ host = _ref3.host;
335
+ return /*#__PURE__*/_react["default"].createElement(_parts.Drawer, {
336
+ open: open,
337
+ side: "right",
338
+ title: "Appearance",
339
+ onClose: onClose
340
+ }, /*#__PURE__*/_react["default"].createElement(_PowrThemeSettings["default"], {
341
+ title: null,
342
+ onSave: host ? function () {
343
+ return host.save()["catch"](function () {});
344
+ } : undefined,
345
+ saving: host ? host.saving : false,
346
+ error: host ? host.error : null
347
+ }));
348
+ }
@@ -0,0 +1,20 @@
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
+ Object.defineProperty(exports, "POWR_SHELL_MODES", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _PowrBaseAppWrapper.POWR_SHELL_MODES;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "PowrBaseAppWrapper", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _PowrBaseAppWrapper["default"];
17
+ }
18
+ });
19
+ var _PowrBaseAppWrapper = _interopRequireWildcard(require("./PowrBaseAppWrapper"));
20
+ 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 _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
@@ -0,0 +1,267 @@
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.DefaultLink = void 0;
8
+ exports.Drawer = Drawer;
9
+ exports.NavList = NavList;
10
+ exports.ProfileMenu = ProfileMenu;
11
+ exports.Skeleton = Skeleton;
12
+ exports.initials = initials;
13
+ exports.isActive = isActive;
14
+ exports.useClickOutside = useClickOutside;
15
+ var _react = _interopRequireWildcard(require("react"));
16
+ var _styles = require("./styles");
17
+ var _excluded = ["href", "children"];
18
+ 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 _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
+ 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; }
20
+ 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; }
21
+ 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; }
22
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
23
+ 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); }
24
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
25
+ 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."); }
26
+ 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; } }
27
+ 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; }
28
+ 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; } }
29
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
30
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
31
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
32
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
33
+ /** Default `Link`: plain anchor. Next apps pass `next/link`. */
34
+ var DefaultLink = exports.DefaultLink = /*#__PURE__*/_react["default"].forwardRef(function DefaultLink(_ref, ref) {
35
+ var href = _ref.href,
36
+ children = _ref.children,
37
+ rest = _objectWithoutProperties(_ref, _excluded);
38
+ return /*#__PURE__*/_react["default"].createElement("a", _extends({
39
+ ref: ref,
40
+ href: href
41
+ }, rest), children);
42
+ });
43
+ function isActive(item, pathname) {
44
+ if (!pathname) return false;
45
+ if (typeof item.match === "function") return item.match(pathname);
46
+ if (item.match === "exact" || item.href === "/") return pathname === item.href;
47
+ return pathname === item.href || pathname.startsWith("".concat(item.href, "/"));
48
+ }
49
+ function NavList(_ref2) {
50
+ var items = _ref2.items,
51
+ pathname = _ref2.pathname,
52
+ Link = _ref2.Link,
53
+ vertical = _ref2.vertical,
54
+ onNavigate = _ref2.onNavigate;
55
+ return /*#__PURE__*/_react["default"].createElement("nav", {
56
+ "aria-label": "Primary",
57
+ style: {
58
+ display: "flex",
59
+ flexDirection: vertical ? "column" : "row",
60
+ gap: vertical ? 2 : 4
61
+ }
62
+ }, items.map(function (item) {
63
+ var active = isActive(item, pathname);
64
+ return /*#__PURE__*/_react["default"].createElement(Link, {
65
+ key: item.href,
66
+ href: item.href,
67
+ "aria-current": active ? "page" : undefined,
68
+ onClick: onNavigate,
69
+ style: _styles.s.navItem(active, vertical)
70
+ }, item.icon ? /*#__PURE__*/_react["default"].createElement("span", {
71
+ style: _styles.s.navIcon
72
+ }, item.icon) : null, /*#__PURE__*/_react["default"].createElement("span", null, item.label));
73
+ }));
74
+ }
75
+ function initials(user) {
76
+ var _parts$;
77
+ var name = ((user === null || user === void 0 ? void 0 : user.fullName) || (user === null || user === void 0 ? void 0 : user.username) || (user === null || user === void 0 ? void 0 : user.email) || "").trim();
78
+ if (!name) return "?";
79
+ var parts = name.split(/\s+/);
80
+ return (parts[0][0] + (((_parts$ = parts[1]) === null || _parts$ === void 0 ? void 0 : _parts$[0]) || "")).toUpperCase();
81
+ }
82
+ function useClickOutside(ref, onOutside, enabled) {
83
+ (0, _react.useEffect)(function () {
84
+ if (!enabled) return undefined;
85
+ var handler = function handler(e) {
86
+ if (ref.current && !ref.current.contains(e.target)) onOutside();
87
+ };
88
+ document.addEventListener("mousedown", handler);
89
+ document.addEventListener("touchstart", handler);
90
+ return function () {
91
+ document.removeEventListener("mousedown", handler);
92
+ document.removeEventListener("touchstart", handler);
93
+ };
94
+ }, [ref, onOutside, enabled]);
95
+ }
96
+ function ProfileMenu(_ref3) {
97
+ var user = _ref3.user,
98
+ isPowrAdmin = _ref3.isPowrAdmin,
99
+ adminHref = _ref3.adminHref,
100
+ Link = _ref3.Link,
101
+ onOpenSettings = _ref3.onOpenSettings,
102
+ onLogout = _ref3.onLogout,
103
+ _ref3$extraItems = _ref3.extraItems,
104
+ extraItems = _ref3$extraItems === void 0 ? [] : _ref3$extraItems;
105
+ var _useState = (0, _react.useState)(false),
106
+ _useState2 = _slicedToArray(_useState, 2),
107
+ open = _useState2[0],
108
+ setOpen = _useState2[1];
109
+ var ref = (0, _react.useRef)(null);
110
+ useClickOutside(ref, function () {
111
+ return setOpen(false);
112
+ }, open);
113
+ var name = (user === null || user === void 0 ? void 0 : user.fullName) || (user === null || user === void 0 ? void 0 : user.username) || (user === null || user === void 0 ? void 0 : user.email) || "Account";
114
+ return /*#__PURE__*/_react["default"].createElement("div", {
115
+ ref: ref,
116
+ style: {
117
+ position: "relative"
118
+ }
119
+ }, /*#__PURE__*/_react["default"].createElement("button", {
120
+ type: "button",
121
+ "aria-haspopup": "menu",
122
+ "aria-expanded": open,
123
+ onClick: function onClick() {
124
+ return setOpen(function (o) {
125
+ return !o;
126
+ });
127
+ },
128
+ style: _styles.s.avatarButton
129
+ }, /*#__PURE__*/_react["default"].createElement("span", {
130
+ style: _styles.s.avatar
131
+ }, initials(user)), /*#__PURE__*/_react["default"].createElement("span", {
132
+ style: {
133
+ maxWidth: 140,
134
+ overflow: "hidden",
135
+ textOverflow: "ellipsis",
136
+ whiteSpace: "nowrap"
137
+ }
138
+ }, name.split(" ")[0])), open ? /*#__PURE__*/_react["default"].createElement("div", {
139
+ role: "menu",
140
+ style: _styles.s.menu
141
+ }, /*#__PURE__*/_react["default"].createElement("div", {
142
+ style: _styles.s.menuHeader
143
+ }, /*#__PURE__*/_react["default"].createElement("div", {
144
+ style: {
145
+ fontWeight: 600,
146
+ fontSize: 14
147
+ }
148
+ }, name), user !== null && user !== void 0 && user.email ? /*#__PURE__*/_react["default"].createElement("div", {
149
+ style: {
150
+ fontSize: 12,
151
+ color: _styles.v.muted
152
+ }
153
+ }, user.email) : null), isPowrAdmin && adminHref ? /*#__PURE__*/_react["default"].createElement(Link, {
154
+ href: adminHref,
155
+ role: "menuitem",
156
+ onClick: function onClick() {
157
+ return setOpen(false);
158
+ },
159
+ style: _styles.s.menuItem(false)
160
+ }, /*#__PURE__*/_react["default"].createElement("span", {
161
+ "aria-hidden": true
162
+ }, "\u2699"), " Powr admin") : null, extraItems.map(function (item) {
163
+ return /*#__PURE__*/_react["default"].createElement(Link, {
164
+ key: item.href,
165
+ href: item.href,
166
+ role: "menuitem",
167
+ onClick: function onClick() {
168
+ return setOpen(false);
169
+ },
170
+ style: _styles.s.menuItem(false)
171
+ }, item.icon ? /*#__PURE__*/_react["default"].createElement("span", {
172
+ "aria-hidden": true
173
+ }, item.icon) : null, " ", item.label);
174
+ }), onOpenSettings ? /*#__PURE__*/_react["default"].createElement("button", {
175
+ type: "button",
176
+ role: "menuitem",
177
+ onClick: function onClick() {
178
+ setOpen(false);
179
+ onOpenSettings();
180
+ },
181
+ style: _styles.s.menuItem(false)
182
+ }, /*#__PURE__*/_react["default"].createElement("span", {
183
+ "aria-hidden": true
184
+ }, "\u25D0"), " Appearance") : null, /*#__PURE__*/_react["default"].createElement("button", {
185
+ type: "button",
186
+ role: "menuitem",
187
+ onClick: function onClick() {
188
+ setOpen(false);
189
+ onLogout();
190
+ },
191
+ style: _styles.s.menuItem(true)
192
+ }, /*#__PURE__*/_react["default"].createElement("span", {
193
+ "aria-hidden": true
194
+ }, "\u238B"), " Sign out")) : null);
195
+ }
196
+ function Drawer(_ref4) {
197
+ var open = _ref4.open,
198
+ _ref4$side = _ref4.side,
199
+ side = _ref4$side === void 0 ? "right" : _ref4$side,
200
+ title = _ref4.title,
201
+ onClose = _ref4.onClose,
202
+ children = _ref4.children;
203
+ (0, _react.useEffect)(function () {
204
+ if (!open) return undefined;
205
+ var onKey = function onKey(e) {
206
+ return e.key === "Escape" && onClose();
207
+ };
208
+ document.addEventListener("keydown", onKey);
209
+ return function () {
210
+ return document.removeEventListener("keydown", onKey);
211
+ };
212
+ }, [open, onClose]);
213
+ if (!open) return null;
214
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
215
+ style: _styles.s.overlay,
216
+ onClick: onClose,
217
+ "aria-hidden": true
218
+ }), /*#__PURE__*/_react["default"].createElement("aside", {
219
+ role: "dialog",
220
+ "aria-modal": "true",
221
+ "aria-label": title,
222
+ style: _styles.s.drawer(side)
223
+ }, /*#__PURE__*/_react["default"].createElement("div", {
224
+ style: _styles.s.drawerHead
225
+ }, /*#__PURE__*/_react["default"].createElement("strong", {
226
+ style: {
227
+ fontSize: 15
228
+ }
229
+ }, title), /*#__PURE__*/_react["default"].createElement("button", {
230
+ type: "button",
231
+ "aria-label": "Close",
232
+ onClick: onClose,
233
+ style: _styles.s.iconButton
234
+ }, "\xD7")), children));
235
+ }
236
+ function Skeleton() {
237
+ return /*#__PURE__*/_react["default"].createElement("div", {
238
+ style: _styles.s.root,
239
+ "aria-busy": "true"
240
+ }, /*#__PURE__*/_react["default"].createElement("div", {
241
+ style: _styles.s.header
242
+ }, /*#__PURE__*/_react["default"].createElement("div", {
243
+ style: _styles.s.skeletonBar(120)
244
+ }), /*#__PURE__*/_react["default"].createElement("div", {
245
+ style: _objectSpread(_objectSpread({}, _styles.s.skeletonBar(80)), {}, {
246
+ marginLeft: 16
247
+ })
248
+ }), /*#__PURE__*/_react["default"].createElement("div", {
249
+ style: _objectSpread(_objectSpread({}, _styles.s.skeletonBar(36)), {}, {
250
+ marginLeft: "auto",
251
+ height: 36,
252
+ borderRadius: 18
253
+ })
254
+ })), /*#__PURE__*/_react["default"].createElement("div", {
255
+ style: {
256
+ padding: 24,
257
+ display: "grid",
258
+ gap: 12
259
+ }
260
+ }, /*#__PURE__*/_react["default"].createElement("div", {
261
+ style: _styles.s.skeletonBar("40%")
262
+ }), /*#__PURE__*/_react["default"].createElement("div", {
263
+ style: _styles.s.skeletonBar("70%")
264
+ }), /*#__PURE__*/_react["default"].createElement("div", {
265
+ style: _styles.s.skeletonBar("55%")
266
+ })));
267
+ }