powr-sdk-web 6.1.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/index.js CHANGED
@@ -334,6 +334,12 @@ Object.defineProperty(exports, "evaluateSteps", {
334
334
  return _onboarding.evaluateSteps;
335
335
  }
336
336
  });
337
+ Object.defineProperty(exports, "fetchThemePreference", {
338
+ enumerable: true,
339
+ get: function get() {
340
+ return _theme.fetchThemePreference;
341
+ }
342
+ });
337
343
  Object.defineProperty(exports, "formatPhoneForSms", {
338
344
  enumerable: true,
339
345
  get: function get() {
@@ -466,6 +472,12 @@ Object.defineProperty(exports, "parsePhone", {
466
472
  return _phone.parsePhone;
467
473
  }
468
474
  });
475
+ Object.defineProperty(exports, "powrThemeInitScript", {
476
+ enumerable: true,
477
+ get: function get() {
478
+ return _theme.powrThemeInitScript;
479
+ }
480
+ });
469
481
  Object.defineProperty(exports, "powrThemeStorageKey", {
470
482
  enumerable: true,
471
483
  get: function get() {
@@ -514,6 +526,12 @@ Object.defineProperty(exports, "safeNextPath", {
514
526
  return _sso.safeNextPath;
515
527
  }
516
528
  });
529
+ Object.defineProperty(exports, "saveThemePreference", {
530
+ enumerable: true,
531
+ get: function get() {
532
+ return _theme.saveThemePreference;
533
+ }
534
+ });
517
535
  Object.defineProperty(exports, "tokensToCssVars", {
518
536
  enumerable: true,
519
537
  get: function get() {
@@ -532,6 +550,12 @@ Object.defineProperty(exports, "usePowrTheme", {
532
550
  return _theme.usePowrTheme;
533
551
  }
534
552
  });
553
+ Object.defineProperty(exports, "usePowrThemeHost", {
554
+ enumerable: true,
555
+ get: function get() {
556
+ return _theme.usePowrThemeHost;
557
+ }
558
+ });
535
559
  Object.defineProperty(exports, "writeStoredSession", {
536
560
  enumerable: true,
537
561
  get: function get() {
@@ -9,6 +9,7 @@ exports["default"] = PowrBaseAppWrapper;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _PowrThemeProvider = _interopRequireWildcard(require("../theme/PowrThemeProvider"));
11
11
  var _PowrThemeSettings = _interopRequireDefault(require("../theme/PowrThemeSettings"));
12
+ var _host = require("../theme/host");
12
13
  var _session = _interopRequireWildcard(require("../session"));
13
14
  var _auth = _interopRequireDefault(require("../auth"));
14
15
  var _PowrOnboardingProvider = _interopRequireDefault(require("../onboarding/PowrOnboardingProvider"));
@@ -111,12 +112,21 @@ function Shell(_ref) {
111
112
  menuItems = _ref$menuItems === void 0 ? [] : _ref$menuItems,
112
113
  _ref$showThemeSetting = _ref.showThemeSettings,
113
114
  showThemeSettings = _ref$showThemeSetting === void 0 ? true : _ref$showThemeSetting,
115
+ _ref$syncThemeWithHos = _ref.syncThemeWithHost,
116
+ syncThemeWithHost = _ref$syncThemeWithHos === void 0 ? true : _ref$syncThemeWithHos,
114
117
  apiUrl = _ref.apiUrl,
115
118
  projectId = _ref.projectId,
116
119
  appName = _ref.appName,
117
120
  appLogo = _ref.appLogo,
118
121
  children = _ref.children;
119
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
+ });
120
130
  var narrow = (0, _useMediaQuery["default"])(_styles.NARROW_QUERY, false);
121
131
  var _useState = (0, _react.useState)(false),
122
132
  _useState2 = _slicedToArray(_useState, 2),
@@ -194,7 +204,8 @@ function Shell(_ref) {
194
204
  style: _styles.s.footer
195
205
  }, footer) : null, /*#__PURE__*/_react["default"].createElement(SettingsDrawer, {
196
206
  open: settingsOpen,
197
- onClose: closeSettings
207
+ onClose: closeSettings,
208
+ host: null
198
209
  }));
199
210
  }
200
211
 
@@ -268,7 +279,8 @@ function Shell(_ref) {
268
279
  onNavigate: closeNav
269
280
  })), /*#__PURE__*/_react["default"].createElement(SettingsDrawer, {
270
281
  open: settingsOpen,
271
- onClose: closeSettings
282
+ onClose: closeSettings,
283
+ host: syncThemeWithHost && session.token ? themeHost : null
272
284
  }));
273
285
  if (onboarding === false || !session.user) return content;
274
286
  return /*#__PURE__*/_react["default"].createElement(_PowrOnboardingProvider["default"], _extends({
@@ -318,13 +330,19 @@ function Brand(_ref2) {
318
330
  }
319
331
  function SettingsDrawer(_ref3) {
320
332
  var open = _ref3.open,
321
- onClose = _ref3.onClose;
333
+ onClose = _ref3.onClose,
334
+ host = _ref3.host;
322
335
  return /*#__PURE__*/_react["default"].createElement(_parts.Drawer, {
323
336
  open: open,
324
337
  side: "right",
325
338
  title: "Appearance",
326
339
  onClose: onClose
327
340
  }, /*#__PURE__*/_react["default"].createElement(_PowrThemeSettings["default"], {
328
- title: null
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
329
347
  }));
330
348
  }
@@ -4,7 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = PowrThemeProvider;
7
- exports.powrThemeStorageKey = powrThemeStorageKey;
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
- }, [persist, storageKey, onChange]);
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);
@@ -1,19 +1,29 @@
1
1
  "use strict";
2
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); }
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports["default"] = PowrThemeSettings;
7
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
8
9
  var _PowrThemeProvider = require("./PowrThemeProvider");
9
10
  var _tokens = require("./tokens");
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
- 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); }
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
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
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
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
15
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
16
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; }
17
27
  /**
18
28
  * User-level theme selectors: scheme · density · product preset.
19
29
  *
@@ -181,9 +191,46 @@ function PowrThemeSettings(_ref2) {
181
191
  onSave = _ref2.onSave,
182
192
  _ref2$saving = _ref2.saving,
183
193
  saving = _ref2$saving === void 0 ? false : _ref2$saving,
194
+ _ref2$error = _ref2.error,
195
+ error = _ref2$error === void 0 ? null : _ref2$error,
184
196
  _ref2$saveLabel = _ref2.saveLabel,
185
197
  saveLabel = _ref2$saveLabel === void 0 ? "Save" : _ref2$saveLabel;
186
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
+ }();
187
234
  var presets = Array.isArray(t.presets) ? t.presets : [];
188
235
  var hasPresets = showPresets && presets.length > 0;
189
236
  var isDark = t.resolvedScheme === "dark";
@@ -256,13 +303,7 @@ function PowrThemeSettings(_ref2) {
256
303
  }, onSave ? /*#__PURE__*/_react["default"].createElement("button", {
257
304
  type: "button",
258
305
  disabled: saving,
259
- onClick: function onClick() {
260
- return onSave({
261
- scheme: t.scheme,
262
- density: t.density,
263
- preset: t.preset
264
- });
265
- },
306
+ onClick: handleSave,
266
307
  style: _objectSpread(_objectSpread({}, styles.button(true)), {}, {
267
308
  opacity: saving ? 0.6 : 1
268
309
  })
@@ -270,7 +311,13 @@ function PowrThemeSettings(_ref2) {
270
311
  type: "button",
271
312
  onClick: t.reset,
272
313
  style: styles.button(false)
273
- }, "Reset"), !onSave ? /*#__PURE__*/_react["default"].createElement("p", {
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", {
274
321
  style: styles.hint
275
- }, "Saved on this device.") : null));
322
+ }, "Saved on this device.")));
276
323
  }
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fetchThemePreference = fetchThemePreference;
7
+ exports.saveThemePreference = saveThemePreference;
8
+ exports.usePowrThemeHost = usePowrThemeHost;
9
+ var _react = require("react");
10
+ var _auth = require("../utils/auth");
11
+ var _PowrThemeProvider = require("./PowrThemeProvider");
12
+ 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 }; })(); }
13
+ 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); }
14
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
15
+ 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."); }
16
+ 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; } }
17
+ 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; }
18
+ 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; } }
19
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
20
+ 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); }
21
+ 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); }); }; }
22
+ /**
23
+ * Theme preference on the Powr host — `GET/PUT /users/me/preferences`.
24
+ *
25
+ * localStorage is the cache before first paint; the host is the truth once
26
+ * the user is logged in. Pull once per token, apply what the host has, and
27
+ * write on Save. Same thesis as login: host stores, SDK reads/writes,
28
+ * products omit `apiUrl`.
29
+ */
30
+
31
+ var ENDPOINT = "/users/me/preferences";
32
+ function fetchThemePreference() {
33
+ return _fetchThemePreference.apply(this, arguments);
34
+ }
35
+ function _fetchThemePreference() {
36
+ _fetchThemePreference = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
37
+ var _data$data;
38
+ var _ref,
39
+ apiUrl,
40
+ projectId,
41
+ token,
42
+ headers,
43
+ _yield$apiCall,
44
+ data,
45
+ ok,
46
+ response,
47
+ err,
48
+ _args3 = arguments;
49
+ return _regenerator().w(function (_context3) {
50
+ while (1) switch (_context3.n) {
51
+ case 0:
52
+ _ref = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : {}, apiUrl = _ref.apiUrl, projectId = _ref.projectId, token = _ref.token;
53
+ headers = token ? {
54
+ Authorization: "Bearer ".concat(token)
55
+ } : undefined;
56
+ _context3.n = 1;
57
+ return (0, _auth.apiCall)(apiUrl, ENDPOINT, projectId, {
58
+ method: "GET",
59
+ headers: headers
60
+ });
61
+ case 1:
62
+ _yield$apiCall = _context3.v;
63
+ data = _yield$apiCall.data;
64
+ ok = _yield$apiCall.ok;
65
+ response = _yield$apiCall.response;
66
+ if (ok) {
67
+ _context3.n = 2;
68
+ break;
69
+ }
70
+ err = new Error((data === null || data === void 0 ? void 0 : data.message) || "Failed to load preferences (".concat(response.status, ")"));
71
+ err.status = response.status;
72
+ throw err;
73
+ case 2:
74
+ return _context3.a(2, (data === null || data === void 0 || (_data$data = data.data) === null || _data$data === void 0 ? void 0 : _data$data.theme) || null);
75
+ }
76
+ }, _callee3);
77
+ }));
78
+ return _fetchThemePreference.apply(this, arguments);
79
+ }
80
+ function saveThemePreference() {
81
+ return _saveThemePreference.apply(this, arguments);
82
+ }
83
+ /**
84
+ * Keep the mounted `PowrThemeProvider` in sync with the host for one user.
85
+ *
86
+ * @param {object} opts
87
+ * @param {string|null} [opts.token] - Powr JWT. No token → nothing happens (cache only).
88
+ * @param {string} [opts.apiUrl] - Leave unset; SDK default host.
89
+ * @param {string} [opts.projectId] - Defaults to NEXT_PUBLIC_PROJECT_ID.
90
+ * @param {boolean} [opts.enabled=true]
91
+ * @returns {{ loaded: boolean, saving: boolean, error: string|null, save: (theme?) => Promise<void>, refresh: () => Promise<void> }}
92
+ */
93
+ function _saveThemePreference() {
94
+ _saveThemePreference = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
95
+ var _data$data2;
96
+ var _ref2,
97
+ apiUrl,
98
+ projectId,
99
+ token,
100
+ theme,
101
+ headers,
102
+ _yield$apiCall2,
103
+ data,
104
+ ok,
105
+ response,
106
+ err,
107
+ _args4 = arguments;
108
+ return _regenerator().w(function (_context4) {
109
+ while (1) switch (_context4.n) {
110
+ case 0:
111
+ _ref2 = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}, apiUrl = _ref2.apiUrl, projectId = _ref2.projectId, token = _ref2.token, theme = _ref2.theme;
112
+ headers = token ? {
113
+ Authorization: "Bearer ".concat(token)
114
+ } : undefined;
115
+ _context4.n = 1;
116
+ return (0, _auth.apiCall)(apiUrl, ENDPOINT, projectId, {
117
+ method: "PUT",
118
+ headers: headers,
119
+ body: {
120
+ theme: theme
121
+ }
122
+ });
123
+ case 1:
124
+ _yield$apiCall2 = _context4.v;
125
+ data = _yield$apiCall2.data;
126
+ ok = _yield$apiCall2.ok;
127
+ response = _yield$apiCall2.response;
128
+ if (ok) {
129
+ _context4.n = 2;
130
+ break;
131
+ }
132
+ err = new Error((data === null || data === void 0 ? void 0 : data.message) || "Failed to save preferences (".concat(response.status, ")"));
133
+ err.status = response.status;
134
+ throw err;
135
+ case 2:
136
+ return _context4.a(2, (data === null || data === void 0 || (_data$data2 = data.data) === null || _data$data2 === void 0 ? void 0 : _data$data2.theme) || null);
137
+ }
138
+ }, _callee4);
139
+ }));
140
+ return _saveThemePreference.apply(this, arguments);
141
+ }
142
+ function usePowrThemeHost() {
143
+ var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
144
+ token = _ref3.token,
145
+ apiUrl = _ref3.apiUrl,
146
+ projectId = _ref3.projectId,
147
+ _ref3$enabled = _ref3.enabled,
148
+ enabled = _ref3$enabled === void 0 ? true : _ref3$enabled;
149
+ var t = (0, _PowrThemeProvider.usePowrTheme)();
150
+ var _useState = (0, _react.useState)(false),
151
+ _useState2 = _slicedToArray(_useState, 2),
152
+ loaded = _useState2[0],
153
+ setLoaded = _useState2[1];
154
+ var _useState3 = (0, _react.useState)(false),
155
+ _useState4 = _slicedToArray(_useState3, 2),
156
+ saving = _useState4[0],
157
+ setSaving = _useState4[1];
158
+ var _useState5 = (0, _react.useState)(null),
159
+ _useState6 = _slicedToArray(_useState5, 2),
160
+ error = _useState6[0],
161
+ setError = _useState6[1];
162
+ var lastToken = (0, _react.useRef)(null);
163
+ var themeRef = (0, _react.useRef)(t);
164
+ themeRef.current = t;
165
+ var apply = (0, _react.useCallback)(function (theme) {
166
+ if (!theme) return;
167
+ var cur = themeRef.current;
168
+ if (theme.scheme && theme.scheme !== cur.scheme) cur.setScheme(theme.scheme);
169
+ if (theme.density && theme.density !== cur.density) cur.setDensity(theme.density);
170
+ if (theme.preset !== undefined && theme.preset !== cur.preset) cur.setPreset(theme.preset);
171
+ }, []);
172
+ var refresh = (0, _react.useCallback)(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
173
+ var theme, _t;
174
+ return _regenerator().w(function (_context) {
175
+ while (1) switch (_context.p = _context.n) {
176
+ case 0:
177
+ if (token) {
178
+ _context.n = 1;
179
+ break;
180
+ }
181
+ return _context.a(2);
182
+ case 1:
183
+ _context.p = 1;
184
+ _context.n = 2;
185
+ return fetchThemePreference({
186
+ apiUrl: apiUrl,
187
+ projectId: projectId,
188
+ token: token
189
+ });
190
+ case 2:
191
+ theme = _context.v;
192
+ apply(theme);
193
+ setError(null);
194
+ _context.n = 4;
195
+ break;
196
+ case 3:
197
+ _context.p = 3;
198
+ _t = _context.v;
199
+ setError(_t.message);
200
+ case 4:
201
+ _context.p = 4;
202
+ setLoaded(true);
203
+ return _context.f(4);
204
+ case 5:
205
+ return _context.a(2);
206
+ }
207
+ }, _callee, null, [[1, 3, 4, 5]]);
208
+ })), [token, apiUrl, projectId, apply]);
209
+
210
+ // Pull once per token (login / refresh). Logout resets so the next user pulls again.
211
+ (0, _react.useEffect)(function () {
212
+ if (!enabled || !t.mounted) return;
213
+ if (!token) {
214
+ lastToken.current = null;
215
+ setLoaded(false);
216
+ return;
217
+ }
218
+ if (lastToken.current === token) return;
219
+ lastToken.current = token;
220
+ refresh();
221
+ }, [enabled, token, t.mounted, refresh]);
222
+ var save = (0, _react.useCallback)(/*#__PURE__*/function () {
223
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(theme) {
224
+ var cur, body, saved, _t2;
225
+ return _regenerator().w(function (_context2) {
226
+ while (1) switch (_context2.p = _context2.n) {
227
+ case 0:
228
+ if (token) {
229
+ _context2.n = 1;
230
+ break;
231
+ }
232
+ return _context2.a(2);
233
+ case 1:
234
+ cur = themeRef.current;
235
+ body = theme || {
236
+ scheme: cur.scheme,
237
+ density: cur.density,
238
+ preset: cur.preset
239
+ };
240
+ setSaving(true);
241
+ _context2.p = 2;
242
+ _context2.n = 3;
243
+ return saveThemePreference({
244
+ apiUrl: apiUrl,
245
+ projectId: projectId,
246
+ token: token,
247
+ theme: body
248
+ });
249
+ case 3:
250
+ saved = _context2.v;
251
+ apply(saved);
252
+ setError(null);
253
+ _context2.n = 5;
254
+ break;
255
+ case 4:
256
+ _context2.p = 4;
257
+ _t2 = _context2.v;
258
+ setError(_t2.message);
259
+ throw _t2;
260
+ case 5:
261
+ _context2.p = 5;
262
+ setSaving(false);
263
+ return _context2.f(5);
264
+ case 6:
265
+ return _context2.a(2);
266
+ }
267
+ }, _callee2, null, [[2, 4, 5, 6]]);
268
+ }));
269
+ return function (_x) {
270
+ return _ref5.apply(this, arguments);
271
+ };
272
+ }(), [token, apiUrl, projectId, apply]);
273
+ return {
274
+ loaded: loaded,
275
+ saving: saving,
276
+ error: error,
277
+ save: save,
278
+ refresh: refresh
279
+ };
280
+ }
@@ -70,6 +70,12 @@ Object.defineProperty(exports, "PowrThemeSettings", {
70
70
  return _PowrThemeSettings["default"];
71
71
  }
72
72
  });
73
+ Object.defineProperty(exports, "fetchThemePreference", {
74
+ enumerable: true,
75
+ get: function get() {
76
+ return _host.fetchThemePreference;
77
+ }
78
+ });
73
79
  Object.defineProperty(exports, "findPreset", {
74
80
  enumerable: true,
75
81
  get: function get() {
@@ -88,6 +94,12 @@ Object.defineProperty(exports, "normalizeScheme", {
88
94
  return _tokens.normalizeScheme;
89
95
  }
90
96
  });
97
+ Object.defineProperty(exports, "powrThemeInitScript", {
98
+ enumerable: true,
99
+ get: function get() {
100
+ return _initScript.powrThemeInitScript;
101
+ }
102
+ });
91
103
  Object.defineProperty(exports, "powrThemeStorageKey", {
92
104
  enumerable: true,
93
105
  get: function get() {
@@ -106,6 +118,12 @@ Object.defineProperty(exports, "resolvePowrTokens", {
106
118
  return _tokens.resolvePowrTokens;
107
119
  }
108
120
  });
121
+ Object.defineProperty(exports, "saveThemePreference", {
122
+ enumerable: true,
123
+ get: function get() {
124
+ return _host.saveThemePreference;
125
+ }
126
+ });
109
127
  Object.defineProperty(exports, "themeForScheme", {
110
128
  enumerable: true,
111
129
  get: function get() {
@@ -124,8 +142,16 @@ Object.defineProperty(exports, "usePowrTheme", {
124
142
  return _PowrThemeProvider.usePowrTheme;
125
143
  }
126
144
  });
145
+ Object.defineProperty(exports, "usePowrThemeHost", {
146
+ enumerable: true,
147
+ get: function get() {
148
+ return _host.usePowrThemeHost;
149
+ }
150
+ });
127
151
  var _PowrThemeProvider = _interopRequireWildcard(require("./PowrThemeProvider"));
128
152
  var _PowrThemeSettings = _interopRequireDefault(require("./PowrThemeSettings"));
153
+ var _host = require("./host");
154
+ var _initScript = require("./initScript");
129
155
  var _tokens = require("./tokens");
130
156
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
131
157
  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,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ exports.powrThemeInitScript = powrThemeInitScript;
8
+ var _tokens = require("./tokens");
9
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
10
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
11
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
+ 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; } }
13
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
14
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
15
+ 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; }
16
+ /**
17
+ * No-flash head script.
18
+ *
19
+ * `PowrThemeProvider` applies vars in an effect, so a cached dark user sees one
20
+ * light frame on hard reload. This returns a tiny inline script that reads the
21
+ * same localStorage cache and paints `<html>` before React runs.
22
+ *
23
+ * No logic is duplicated: the css-var table for every scheme × preset × density
24
+ * is precomputed here with `resolvePowrTokens` and embedded. The script only
25
+ * looks up.
26
+ *
27
+ * Next (app router) root layout:
28
+ * <head><script dangerouslySetInnerHTML={{ __html: powrThemeInitScript({ projectId, theme, presets }) }} /></head>
29
+ *
30
+ * @param {object} opts - The same `theme` / `presets` / `projectId` you give the provider.
31
+ * @returns {string} JavaScript source.
32
+ */
33
+ function powrThemeInitScript() {
34
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
35
+ projectId = _ref.projectId,
36
+ theme = _ref.theme,
37
+ _ref$presets = _ref.presets,
38
+ presets = _ref$presets === void 0 ? [] : _ref$presets,
39
+ _ref$scheme = _ref.scheme,
40
+ scheme = _ref$scheme === void 0 ? _tokens.DEFAULT_POWR_SCHEME : _ref$scheme,
41
+ _ref$density = _ref.density,
42
+ density = _ref$density === void 0 ? _tokens.DEFAULT_POWR_DENSITY : _ref$density,
43
+ _ref$preset = _ref.preset,
44
+ preset = _ref$preset === void 0 ? null : _ref$preset;
45
+ var table = {};
46
+ var presetIds = [null].concat(_toConsumableArray(presets.map(function (p) {
47
+ return p.id;
48
+ })));
49
+ for (var _i = 0, _arr = ["light", "dark"]; _i < _arr.length; _i++) {
50
+ var s = _arr[_i];
51
+ var _iterator = _createForOfIteratorHelper(presetIds),
52
+ _step;
53
+ try {
54
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
55
+ var p = _step.value;
56
+ for (var _i2 = 0, _Object$keys = Object.keys(_tokens.POWR_DENSITIES); _i2 < _Object$keys.length; _i2++) {
57
+ var d = _Object$keys[_i2];
58
+ var r = (0, _tokens.resolvePowrTokens)({
59
+ scheme: s,
60
+ density: d,
61
+ theme: theme,
62
+ preset: p,
63
+ presets: presets
64
+ });
65
+ table["".concat(s, "|").concat(p || "", "|").concat(d)] = (0, _tokens.tokensToCssVars)(r.tokens, r.densityScale);
66
+ }
67
+ }
68
+ } catch (err) {
69
+ _iterator.e(err);
70
+ } finally {
71
+ _iterator.f();
72
+ }
73
+ }
74
+ var payload = {
75
+ key: (0, _tokens.powrThemeStorageKey)(projectId),
76
+ defaults: {
77
+ scheme: scheme,
78
+ density: density,
79
+ preset: preset
80
+ },
81
+ presets: presetIds.filter(Boolean),
82
+ table: table
83
+ };
84
+ return "(function(){try{" + "var P=".concat(JSON.stringify(payload), ";") + "var c=null;try{c=JSON.parse(localStorage.getItem(P.key)||'null')}catch(e){}" + "var s=(c&&c.scheme)||P.defaults.scheme,d=(c&&c.density)||P.defaults.density,p=c&&c.preset!==undefined?c.preset:P.defaults.preset;" + "if(s!=='light'&&s!=='dark'&&s!=='system')s='light';" + "if(d!=='comfortable'&&d!=='compact')d='comfortable';" + "if(p&&P.presets.indexOf(p)<0)p=null;" + "var rs=s==='system'?(window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'light'):s;" + "var v=P.table[rs+'|'+(p||'')+'|'+d];if(!v)return;" + "var el=document.documentElement;for(var k in v)el.style.setProperty(k,v[k]);" + "el.setAttribute('data-powr-scheme',rs);el.setAttribute('data-powr-density',d);" + "if(p)el.setAttribute('data-powr-preset',p);el.style.colorScheme=rs;" + "}catch(e){}})();";
85
+ }
86
+ var _default = exports["default"] = powrThemeInitScript;
@@ -7,6 +7,7 @@ exports.POWR_TOKEN_KEYS = exports.POWR_TOKENS = exports.POWR_SCHEMES = exports.P
7
7
  exports.findPreset = findPreset;
8
8
  exports.normalizeDensity = normalizeDensity;
9
9
  exports.normalizeScheme = normalizeScheme;
10
+ exports.powrThemeStorageKey = powrThemeStorageKey;
10
11
  exports.powrVar = powrVar;
11
12
  exports.resolvePowrTokens = resolvePowrTokens;
12
13
  exports.themeForScheme = themeForScheme;
@@ -90,6 +91,11 @@ var POWR_DENSITIES = exports.POWR_DENSITIES = Object.freeze({
90
91
  comfortable: 1,
91
92
  compact: 0.875
92
93
  });
94
+
95
+ /** localStorage key for the cached selectors. Pure — safe in a server component (head script). */
96
+ function powrThemeStorageKey(projectId) {
97
+ return "powr-theme:".concat(projectId || "default");
98
+ }
93
99
  var DEFAULT_POWR_SCHEME = exports.DEFAULT_POWR_SCHEME = "light";
94
100
  var DEFAULT_POWR_DENSITY = exports.DEFAULT_POWR_DENSITY = "comfortable";
95
101
  var BASE_BY_SCHEME = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "6.1.0",
3
+ "version": "6.2.0",
4
4
  "main": "dist/index.js",
5
5
  "files": [
6
6
  "dist"