powr-sdk-web 5.10.7 → 6.0.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.
@@ -52,9 +52,9 @@ function formatWhen(iso, locale) {
52
52
  }
53
53
  }
54
54
 
55
- /**
56
- * Presentational list for PowrBase activity-shaped rows (`activity.activity`, `activity.actor`, `activity.action`, `createdAt`).
57
- * Does not fetch — pass data from parent or use {@link PowrBaseActivities}.
55
+ /**
56
+ * Presentational list for PowrBase activity-shaped rows (`activity.activity`, `activity.actor`, `activity.action`, `createdAt`).
57
+ * Does not fetch — pass data from parent or use {@link PowrBaseActivities}.
58
58
  */
59
59
  function PowrActivityList(_ref) {
60
60
  var activities = _ref.activities,
@@ -36,9 +36,9 @@ var wrapperStyle = {
36
36
  fontFamily: 'Roboto, sans-serif'
37
37
  };
38
38
 
39
- /**
40
- * Fetches activities like comments: GET with contentId + projectId (via apiCall).
41
- * Date filtering is client-side: calendar picks a day, list shows items for that day.
39
+ /**
40
+ * Fetches activities like comments: GET with contentId + projectId (via apiCall).
41
+ * Date filtering is client-side: calendar picks a day, list shows items for that day.
42
42
  */
43
43
  function PowrBaseActivities(_ref) {
44
44
  var projectId = _ref.projectId,
@@ -18,10 +18,10 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
18
18
  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); }
19
19
  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; }
20
20
  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; }
21
- /**
22
- * Full PowrBaseAdmin for host apps that already install optional peers
23
- * (Excelrs / Spriny via the package root export).
24
- * Prefer `powr-sdk-web/dist/admin` in lean apps (Ampy Ops) to avoid monaco/lucide.
21
+ /**
22
+ * Full PowrBaseAdmin for host apps that already install optional peers
23
+ * (Excelrs / Spriny via the package root export).
24
+ * Prefer `powr-sdk-web/dist/admin` in lean apps (Ampy Ops) to avoid monaco/lucide.
25
25
  */
26
26
  function PowrBaseAdminFull(props) {
27
27
  var sectionLoaders = props.sectionLoaders,
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.CORE_SECTION_LOADERS = void 0;
7
7
  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); }
8
8
  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); }
9
- /**
10
- * Core admin sections — no heavy optional peers (monaco / lucide / hot-toast).
11
- * Safe for apps that only need Users (e.g. Ampy Ops).
9
+ /**
10
+ * Core admin sections — no heavy optional peers (monaco / lucide / hot-toast).
11
+ * Safe for apps that only need Users (e.g. Ampy Ops).
12
12
  */
13
13
  var CORE_SECTION_LOADERS = exports.CORE_SECTION_LOADERS = {
14
14
  users: function users() {
@@ -6,14 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports["default"] = exports.OPTIONAL_SECTION_LOADERS = void 0;
7
7
  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); }
8
8
  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); }
9
- /**
10
- * Heavy admin sections. Import only from apps that install optional peers:
11
- * lucide-react, @monaco-editor/react, react-hot-toast
12
- *
13
- * @example
14
- * import PowrBaseAdmin from 'powr-sdk-web/dist/admin';
15
- * import { OPTIONAL_SECTION_LOADERS } from 'powr-sdk-web/dist/admin/optionalSectionLoaders';
16
- * <PowrBaseAdmin sections={['Users','Functions']} sectionLoaders={OPTIONAL_SECTION_LOADERS} />
9
+ /**
10
+ * Heavy admin sections. Import only from apps that install optional peers:
11
+ * lucide-react, @monaco-editor/react, react-hot-toast
12
+ *
13
+ * @example
14
+ * import PowrBaseAdmin from 'powr-sdk-web/dist/admin';
15
+ * import { OPTIONAL_SECTION_LOADERS } from 'powr-sdk-web/dist/admin/optionalSectionLoaders';
16
+ * <PowrBaseAdmin sections={['Users','Functions']} sectionLoaders={OPTIONAL_SECTION_LOADERS} />
17
17
  */
18
18
  var OPTIONAL_SECTION_LOADERS = exports.OPTIONAL_SECTION_LOADERS = {
19
19
  functions: function functions() {
@@ -29,6 +29,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
29
29
  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; }
30
30
  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; } }
31
31
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
32
+ var config = require('../config');
32
33
  var PowrLogin = function PowrLogin(_ref) {
33
34
  var apiUrl = _ref.apiUrl,
34
35
  onLogin = _ref.onLogin,
@@ -37,7 +38,7 @@ var PowrLogin = function PowrLogin(_ref) {
37
38
  appLogo = _ref.appLogo,
38
39
  _ref$mode = _ref.mode,
39
40
  mode = _ref$mode === void 0 ? 'toggle' : _ref$mode,
40
- projectId = _ref.projectId,
41
+ projectIdProp = _ref.projectId,
41
42
  _ref$requirePhoneVeri = _ref.requirePhoneVerification,
42
43
  requirePhoneVerification = _ref$requirePhoneVeri === void 0 ? true : _ref$requirePhoneVeri,
43
44
  _ref$showForgotPasswo = _ref.showForgotPassword,
@@ -55,6 +56,7 @@ var PowrLogin = function PowrLogin(_ref) {
55
56
  _ref$allowedCountries = _ref.allowedCountries,
56
57
  allowedCountries = _ref$allowedCountries === void 0 ? null : _ref$allowedCountries,
57
58
  onSessionExpired = _ref.onSessionExpired;
59
+ var projectId = projectIdProp || config.projectId;
58
60
  var resolvedDefaultCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
59
61
  var _useState = (0, _react.useState)(function () {
60
62
  switch (mode) {
@@ -101,8 +101,8 @@ function ChevronRight() {
101
101
  }));
102
102
  }
103
103
 
104
- /**
105
- * Week strip + day picker (controlled). No data fetching — use anywhere you need a date range UI.
104
+ /**
105
+ * Week strip + day picker (controlled). No data fetching — use anywhere you need a date range UI.
106
106
  */
107
107
  function PowrCalendarStrip(_ref) {
108
108
  var selectedDate = _ref.selectedDate,
@@ -129,7 +129,7 @@ var CreatePost = function CreatePost(_ref) {
129
129
  }();
130
130
  var handleFileUpload = /*#__PURE__*/function () {
131
131
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(files) {
132
- var uploadedFiles, _iterator, _step, file, _data$data, formData, _yield$apiCall2, data, ok, fileUrl, _t2, _t3;
132
+ var uploadedFiles, _iterator, _step, file, formData, _yield$apiCall2, data, ok, _t2, _t3;
133
133
  return _regenerator().w(function (_context2) {
134
134
  while (1) switch (_context2.p = _context2.n) {
135
135
  case 0:
@@ -148,7 +148,7 @@ var CreatePost = function CreatePost(_ref) {
148
148
  formData.append('file', file);
149
149
  formData.append('projectId', process.env.NEXT_PUBLIC_PROJECT_ID);
150
150
  _context2.n = 4;
151
- return (0, _auth.apiCall)(apiUrl, '/files', projectId, {
151
+ return (0, _auth.apiCall)(apiUrl, '/files/upload', projectId, {
152
152
  method: 'POST',
153
153
  body: formData
154
154
  });
@@ -156,10 +156,9 @@ var CreatePost = function CreatePost(_ref) {
156
156
  _yield$apiCall2 = _context2.v;
157
157
  data = _yield$apiCall2.data;
158
158
  ok = _yield$apiCall2.ok;
159
- fileUrl = (data === null || data === void 0 ? void 0 : data.url) || (data === null || data === void 0 || (_data$data = data.data) === null || _data$data === void 0 ? void 0 : _data$data.url);
160
- if (ok && fileUrl) {
159
+ if (ok && data.success) {
161
160
  uploadedFiles.push({
162
- url: fileUrl,
161
+ url: data.data.url,
163
162
  type: file.type.startsWith('image/') ? 'image' : 'document',
164
163
  filename: file.name
165
164
  });
package/dist/index.js CHANGED
@@ -10,6 +10,12 @@ Object.defineProperty(exports, "AddPhonePanel", {
10
10
  return _onboarding.AddPhonePanel;
11
11
  }
12
12
  });
13
+ Object.defineProperty(exports, "DARK_POWR_TOKENS", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _theme.DARK_POWR_TOKENS;
17
+ }
18
+ });
13
19
  Object.defineProperty(exports, "DEFAULT_COUNTRY", {
14
20
  enumerable: true,
15
21
  get: function get() {
@@ -22,18 +28,66 @@ Object.defineProperty(exports, "DEFAULT_COUNTRY_CODE", {
22
28
  return _phone.DEFAULT_COUNTRY_CODE;
23
29
  }
24
30
  });
31
+ Object.defineProperty(exports, "DEFAULT_POWR_DENSITY", {
32
+ enumerable: true,
33
+ get: function get() {
34
+ return _theme.DEFAULT_POWR_DENSITY;
35
+ }
36
+ });
37
+ Object.defineProperty(exports, "DEFAULT_POWR_SCHEME", {
38
+ enumerable: true,
39
+ get: function get() {
40
+ return _theme.DEFAULT_POWR_SCHEME;
41
+ }
42
+ });
25
43
  Object.defineProperty(exports, "DEFAULT_POWR_TARGETS", {
26
44
  enumerable: true,
27
45
  get: function get() {
28
46
  return _sso.DEFAULT_POWR_TARGETS;
29
47
  }
30
48
  });
49
+ Object.defineProperty(exports, "DEFAULT_POWR_TOKENS", {
50
+ enumerable: true,
51
+ get: function get() {
52
+ return _theme.DEFAULT_POWR_TOKENS;
53
+ }
54
+ });
31
55
  Object.defineProperty(exports, "OnboardingShell", {
32
56
  enumerable: true,
33
57
  get: function get() {
34
58
  return _onboarding.OnboardingShell;
35
59
  }
36
60
  });
61
+ Object.defineProperty(exports, "POWR_CSS_VAR_NAMES", {
62
+ enumerable: true,
63
+ get: function get() {
64
+ return _theme.POWR_CSS_VAR_NAMES;
65
+ }
66
+ });
67
+ Object.defineProperty(exports, "POWR_DENSITIES", {
68
+ enumerable: true,
69
+ get: function get() {
70
+ return _theme.POWR_DENSITIES;
71
+ }
72
+ });
73
+ Object.defineProperty(exports, "POWR_SCHEMES", {
74
+ enumerable: true,
75
+ get: function get() {
76
+ return _theme.POWR_SCHEMES;
77
+ }
78
+ });
79
+ Object.defineProperty(exports, "POWR_TOKENS", {
80
+ enumerable: true,
81
+ get: function get() {
82
+ return _theme.POWR_TOKENS;
83
+ }
84
+ });
85
+ Object.defineProperty(exports, "POWR_TOKEN_KEYS", {
86
+ enumerable: true,
87
+ get: function get() {
88
+ return _theme.POWR_TOKEN_KEYS;
89
+ }
90
+ });
37
91
  Object.defineProperty(exports, "PRIORITY_COUNTRIES", {
38
92
  enumerable: true,
39
93
  get: function get() {
@@ -178,6 +232,12 @@ Object.defineProperty(exports, "PowrTable", {
178
232
  return _table["default"];
179
233
  }
180
234
  });
235
+ Object.defineProperty(exports, "PowrThemeProvider", {
236
+ enumerable: true,
237
+ get: function get() {
238
+ return _theme.PowrThemeProvider;
239
+ }
240
+ });
181
241
  Object.defineProperty(exports, "SESSION_MESSAGES", {
182
242
  enumerable: true,
183
243
  get: function get() {
@@ -346,6 +406,18 @@ Object.defineProperty(exports, "parsePhone", {
346
406
  return _phone.parsePhone;
347
407
  }
348
408
  });
409
+ Object.defineProperty(exports, "powrThemeStorageKey", {
410
+ enumerable: true,
411
+ get: function get() {
412
+ return _theme.powrThemeStorageKey;
413
+ }
414
+ });
415
+ Object.defineProperty(exports, "powrVar", {
416
+ enumerable: true,
417
+ get: function get() {
418
+ return _theme.powrVar;
419
+ }
420
+ });
349
421
  Object.defineProperty(exports, "profileNameStep", {
350
422
  enumerable: true,
351
423
  get: function get() {
@@ -358,12 +430,30 @@ Object.defineProperty(exports, "resolveCountry", {
358
430
  return _phone.resolveCountry;
359
431
  }
360
432
  });
433
+ Object.defineProperty(exports, "resolvePowrTokens", {
434
+ enumerable: true,
435
+ get: function get() {
436
+ return _theme.resolvePowrTokens;
437
+ }
438
+ });
361
439
  Object.defineProperty(exports, "safeNextPath", {
362
440
  enumerable: true,
363
441
  get: function get() {
364
442
  return _sso.safeNextPath;
365
443
  }
366
444
  });
445
+ Object.defineProperty(exports, "tokensToCssVars", {
446
+ enumerable: true,
447
+ get: function get() {
448
+ return _theme.tokensToCssVars;
449
+ }
450
+ });
451
+ Object.defineProperty(exports, "usePowrTheme", {
452
+ enumerable: true,
453
+ get: function get() {
454
+ return _theme.usePowrTheme;
455
+ }
456
+ });
367
457
  var _table = _interopRequireDefault(require("./table"));
368
458
  var _swiper = _interopRequireDefault(require("./swiper"));
369
459
  var _reviews = _interopRequireDefault(require("./reviews"));
@@ -390,5 +480,6 @@ var _onboarding = require("./onboarding");
390
480
  var _phone = require("./utils/phone");
391
481
  var _jwt = require("./utils/jwt");
392
482
  var _sessionMessages = require("./utils/sessionMessages");
483
+ var _theme = require("./theme");
393
484
  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); }
394
485
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
package/dist/sso/api.js CHANGED
@@ -27,21 +27,21 @@ function safeNextPath(next) {
27
27
  return fallback;
28
28
  }
29
29
 
30
- /**
31
- * Issue a one-time login code (caller must already be authenticated).
32
- * Host `injectProjectId` needs destination `projectId` on the body.
33
- * @param {string} apiUrl - Powr API base
34
- * @param {string} bearerToken
35
- * @param {{ projectId?: string }} [opts]
30
+ /**
31
+ * Issue a one-time login code (caller must already be authenticated).
32
+ * Host `injectProjectId` needs destination `projectId` on the body.
33
+ * @param {string} apiUrl - Powr API base
34
+ * @param {string} bearerToken
35
+ * @param {{ projectId?: string }} [opts]
36
36
  */
37
37
  function issueLoginCode(_x, _x2) {
38
38
  return _issueLoginCode.apply(this, arguments);
39
39
  }
40
- /**
41
- * Exchange loginId for session (same shape as /login).
42
- * @param {string} apiUrl
43
- * @param {string} loginId
44
- * @param {{ projectId?: string }} [opts]
40
+ /**
41
+ * Exchange loginId for session (same shape as /login).
42
+ * @param {string} apiUrl
43
+ * @param {string} loginId
44
+ * @param {{ projectId?: string }} [opts]
45
45
  */
46
46
  function _issueLoginCode() {
47
47
  _issueLoginCode = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(apiUrl, bearerToken) {
package/dist/sso/index.js CHANGED
@@ -93,14 +93,14 @@ var shellStyle = {
93
93
  justifyContent: "center",
94
94
  padding: "0 1.5rem",
95
95
  textAlign: "center",
96
- background: "var(--background, #fafafa)",
97
- color: "var(--foreground, #111)",
98
- fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, sans-serif"
96
+ background: "var(--powr-bg, var(--background, #fafafa))",
97
+ color: "var(--powr-text, var(--foreground, #111))",
98
+ fontFamily: "var(--powr-font, system-ui, -apple-system, Segoe UI, Roboto, sans-serif)"
99
99
  };
100
100
  var mutedStyle = {
101
101
  fontSize: "0.875rem",
102
102
  fontWeight: 500,
103
- color: "var(--muted-foreground, #737373)",
103
+ color: "var(--powr-muted, var(--muted-foreground, #737373))",
104
104
  margin: 0
105
105
  };
106
106
  var titleStyle = {
@@ -114,18 +114,18 @@ var bodyStyle = {
114
114
  marginTop: "0.5rem",
115
115
  maxWidth: "24rem",
116
116
  fontSize: "0.875rem",
117
- color: "var(--muted-foreground, #737373)",
117
+ color: "var(--powr-muted, var(--muted-foreground, #737373))",
118
118
  marginBottom: 0
119
119
  };
120
120
  var errorTextStyle = _objectSpread(_objectSpread({}, bodyStyle), {}, {
121
- color: "var(--destructive, #dc2626)"
121
+ color: "var(--powr-danger, var(--destructive, #dc2626))"
122
122
  });
123
123
  var spinnerStyle = {
124
124
  marginTop: "1.5rem",
125
125
  width: "2.5rem",
126
126
  height: "2.5rem",
127
127
  borderRadius: "9999px",
128
- border: "2px solid var(--primary, #2563eb)",
128
+ border: "2px solid var(--powr-primary, var(--primary, #2563eb))",
129
129
  borderTopColor: "transparent",
130
130
  animation: "powr-sso-spin 0.7s linear infinite"
131
131
  };
@@ -134,9 +134,9 @@ var btnStyle = {
134
134
  display: "inline-flex",
135
135
  alignItems: "center",
136
136
  justifyContent: "center",
137
- borderRadius: "0.5rem",
138
- background: "var(--primary, #2563eb)",
139
- color: "var(--primary-foreground, #fff)",
137
+ borderRadius: "var(--powr-radius, 0.5rem)",
138
+ background: "var(--powr-primary, var(--primary, #2563eb))",
139
+ color: "var(--powr-primary-fg, var(--primary-foreground, #fff))",
140
140
  padding: "0.5rem 1rem",
141
141
  fontSize: "0.875rem",
142
142
  fontWeight: 500,
@@ -145,22 +145,22 @@ var btnStyle = {
145
145
  cursor: "pointer"
146
146
  };
147
147
 
148
- /**
149
- * Cross-app SSO handoff UI (UrbanStall → Powr apps).
150
- * Apps keep a thin `/sso` page that renders this with `apiUrl` + `onSuccess`.
151
- *
152
- * @param {object} props
153
- * @param {string} [props.apiUrl] - Powr host. Defaults to https://powr-api.lawazia.tech
154
- * @param {string} [props.projectId] - Destination Powr id. Defaults to NEXT_PUBLIC_PROJECT_ID
155
- * @param {string} [props.appName]
156
- * @param {boolean} [props.ready=true] - Wait (e.g. auth hydrate) before exchanging code
157
- * @param {string} [props.loginHref="/login"]
158
- * @param {string} [props.loginId] - Defaults to ?loginId=
159
- * @param {string} [props.next] - Defaults to ?next=
160
- * @param {(data: object, ctx: { next: string, safeNext: string }) => void | Promise<void>} props.onSuccess
161
- * @param {string} [props.signingInTitle]
162
- * @param {string} [props.signingInMessage]
163
- * @param {string} [props.errorTitle]
148
+ /**
149
+ * Cross-app SSO handoff UI (UrbanStall → Powr apps).
150
+ * Apps keep a thin `/sso` page that renders this with `apiUrl` + `onSuccess`.
151
+ *
152
+ * @param {object} props
153
+ * @param {string} [props.apiUrl] - Powr host. Defaults to https://powr-api.lawazia.tech
154
+ * @param {string} [props.projectId] - Destination Powr id. Defaults to NEXT_PUBLIC_PROJECT_ID
155
+ * @param {string} [props.appName]
156
+ * @param {boolean} [props.ready=true] - Wait (e.g. auth hydrate) before exchanging code
157
+ * @param {string} [props.loginHref="/login"]
158
+ * @param {string} [props.loginId] - Defaults to ?loginId=
159
+ * @param {string} [props.next] - Defaults to ?next=
160
+ * @param {(data: object, ctx: { next: string, safeNext: string }) => void | Promise<void>} props.onSuccess
161
+ * @param {string} [props.signingInTitle]
162
+ * @param {string} [props.signingInMessage]
163
+ * @param {string} [props.errorTitle]
164
164
  */
165
165
  function PowrBaseSso(_ref) {
166
166
  var apiUrl = _ref.apiUrl,
@@ -79,10 +79,10 @@ function resolvePowrApiUrl(apiUrl) {
79
79
  return "";
80
80
  }
81
81
 
82
- /**
83
- * @param {string} url
84
- * @param {string[]|Array<{url?: string, projectId?: string}>} [origins] - sibling card list or origins
85
- * @returns {{ origin: string, pathname: string, search: string, hash: string, projectId: string } | null}
82
+ /**
83
+ * @param {string} url
84
+ * @param {string[]|Array<{url?: string, projectId?: string}>} [origins] - sibling card list or origins
85
+ * @returns {{ origin: string, pathname: string, search: string, hash: string, projectId: string } | null}
86
86
  */
87
87
  function matchPowrTarget(url, origins) {
88
88
  var dest = parseDest(url);
@@ -98,13 +98,13 @@ function matchPowrTarget(url, origins) {
98
98
  return dest;
99
99
  }
100
100
 
101
- /**
102
- * @deprecated Product `/powr` URLs are gone. Pass `apiUrl` + the card list as `origins`.
101
+ /**
102
+ * @deprecated Product `/powr` URLs are gone. Pass `apiUrl` + the card list as `origins`.
103
103
  */
104
104
  var DEFAULT_POWR_TARGETS = exports.DEFAULT_POWR_TARGETS = [];
105
105
 
106
- /**
107
- * Build destination `/sso?loginId=` (+ optional `next`) on the sibling app.
106
+ /**
107
+ * Build destination `/sso?loginId=` (+ optional `next`) on the sibling app.
108
108
  */
109
109
  function buildPowrSsoUrl(target, loginId) {
110
110
  var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
@@ -124,16 +124,16 @@ function openPlain(url) {
124
124
  window.open(url, "_blank", "noopener,noreferrer");
125
125
  }
126
126
 
127
- /**
128
- * Issue a login code and navigate to `/sso?loginId=`.
129
- * Host is the SDK default. Omit `apiUrl` unless this call is a real override.
130
- *
131
- * @param {string} url - Destination app URL (from the sibling card / banner)
132
- * @param {string|null|undefined} token
133
- * @param {object} [options]
134
- * @param {string} [options.apiUrl] - Override host. Do not pass product `/powr`.
135
- * @param {string} [options.projectId] - Destination Powr id (else from matched card)
136
- * @param {string[]|Array<{url?: string, projectId?: string}>} [options.origins] - The card list
127
+ /**
128
+ * Issue a login code and navigate to `/sso?loginId=`.
129
+ * Host is the SDK default. Omit `apiUrl` unless this call is a real override.
130
+ *
131
+ * @param {string} url - Destination app URL (from the sibling card / banner)
132
+ * @param {string|null|undefined} token
133
+ * @param {object} [options]
134
+ * @param {string} [options.apiUrl] - Override host. Do not pass product `/powr`.
135
+ * @param {string} [options.projectId] - Destination Powr id (else from matched card)
136
+ * @param {string[]|Array<{url?: string, projectId?: string}>} [options.origins] - The card list
137
137
  */
138
138
  function openPowrLogin(_x, _x2) {
139
139
  return _openPowrLogin.apply(this, arguments);
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = PowrThemeProvider;
7
+ exports.powrThemeStorageKey = powrThemeStorageKey;
8
+ exports.usePowrTheme = usePowrTheme;
9
+ var _react = _interopRequireWildcard(require("react"));
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 _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); }
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 _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; } } }; }
18
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
19
+ 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."); }
20
+ 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; } }
21
+ 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; }
22
+ 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; } }
23
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
24
+ 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
+ var config = require("../config");
26
+ var PowrThemeContext = /*#__PURE__*/(0, _react.createContext)(null);
27
+ var STORAGE_PREFIX = "powr-theme";
28
+ var DARK_QUERY = "(prefers-color-scheme: dark)";
29
+ function powrThemeStorageKey(projectId) {
30
+ return "".concat(STORAGE_PREFIX, ":").concat(projectId || "default");
31
+ }
32
+ function readStorage(key) {
33
+ if (typeof window === "undefined") return null;
34
+ try {
35
+ var raw = window.localStorage.getItem(key);
36
+ if (!raw) return null;
37
+ var parsed = JSON.parse(raw);
38
+ return parsed && _typeof(parsed) === "object" ? parsed : null;
39
+ } catch (_) {
40
+ return null;
41
+ }
42
+ }
43
+ function writeStorage(key, value) {
44
+ if (typeof window === "undefined") return;
45
+ try {
46
+ window.localStorage.setItem(key, JSON.stringify(value));
47
+ } catch (_) {
48
+ /* private mode / quota — cache only, never truth */
49
+ }
50
+ }
51
+ function systemPrefersDark() {
52
+ if (typeof window === "undefined" || !window.matchMedia) return false;
53
+ return window.matchMedia(DARK_QUERY).matches;
54
+ }
55
+
56
+ /**
57
+ * Root of the Powr theme. Mount once per app (the future `PowrBaseAppWrapper`
58
+ * mounts it for you). Structure (light / dark / density) is the SDK's;
59
+ * colours come from the product via `theme` and `presets`.
60
+ *
61
+ * With no props it writes today's neutral values, so SDK components render
62
+ * exactly as before.
63
+ *
64
+ * @param {object} props
65
+ * @param {object} [props.theme] - Product tokens. Flat `{ primary, bg, … }` (light) or `{ light: {…}, dark: {…} }`.
66
+ * @param {Array<{id: string, label?: string, tokens?: object, dark?: object}>} [props.presets] - Product-named presets users may pick.
67
+ * @param {"light"|"dark"|"system"} [props.scheme="light"] - Starting scheme; the user can change it (card 2 panel).
68
+ * @param {"comfortable"|"compact"} [props.density="comfortable"] - Starting density.
69
+ * @param {string} [props.preset] - Starting preset id.
70
+ * @param {string} [props.projectId] - Cache key scope. Defaults to NEXT_PUBLIC_PROJECT_ID.
71
+ * @param {boolean} [props.persist=true] - Cache choices in localStorage (cache, not truth — host save is card 3).
72
+ * @param {"root"|"scoped"} [props.attach="root"] - `root` writes vars on <html>; `scoped` wraps children in one div carrying the vars.
73
+ * @param {string} [props.className] - For `scoped` only.
74
+ * @param {(value: {scheme: string, density: string, preset: string|null}) => void} [props.onChange] - Fires when a selector changes.
75
+ */
76
+ function PowrThemeProvider(_ref) {
77
+ var theme = _ref.theme,
78
+ _ref$presets = _ref.presets,
79
+ presets = _ref$presets === void 0 ? [] : _ref$presets,
80
+ _ref$scheme = _ref.scheme,
81
+ schemeProp = _ref$scheme === void 0 ? _tokens.DEFAULT_POWR_SCHEME : _ref$scheme,
82
+ _ref$density = _ref.density,
83
+ densityProp = _ref$density === void 0 ? _tokens.DEFAULT_POWR_DENSITY : _ref$density,
84
+ _ref$preset = _ref.preset,
85
+ presetProp = _ref$preset === void 0 ? null : _ref$preset,
86
+ projectId = _ref.projectId,
87
+ _ref$persist = _ref.persist,
88
+ persist = _ref$persist === void 0 ? true : _ref$persist,
89
+ _ref$attach = _ref.attach,
90
+ attach = _ref$attach === void 0 ? "root" : _ref$attach,
91
+ className = _ref.className,
92
+ onChange = _ref.onChange,
93
+ children = _ref.children;
94
+ var storageKey = powrThemeStorageKey(projectId || config.projectId);
95
+ var _useState = (0, _react.useState)(function () {
96
+ return (0, _tokens.normalizeScheme)(schemeProp);
97
+ }),
98
+ _useState2 = _slicedToArray(_useState, 2),
99
+ scheme = _useState2[0],
100
+ setSchemeState = _useState2[1];
101
+ var _useState3 = (0, _react.useState)(function () {
102
+ return (0, _tokens.normalizeDensity)(densityProp);
103
+ }),
104
+ _useState4 = _slicedToArray(_useState3, 2),
105
+ density = _useState4[0],
106
+ setDensityState = _useState4[1];
107
+ var _useState5 = (0, _react.useState)(function () {
108
+ return (0, _tokens.findPreset)(presets, presetProp) ? presetProp : null;
109
+ }),
110
+ _useState6 = _slicedToArray(_useState5, 2),
111
+ preset = _useState6[0],
112
+ setPresetState = _useState6[1];
113
+ var _useState7 = (0, _react.useState)(false),
114
+ _useState8 = _slicedToArray(_useState7, 2),
115
+ systemDark = _useState8[0],
116
+ setSystemDark = _useState8[1];
117
+ var _useState9 = (0, _react.useState)(false),
118
+ _useState0 = _slicedToArray(_useState9, 2),
119
+ hydrated = _useState0[0],
120
+ setHydrated = _useState0[1];
121
+
122
+ // Cache → state, after mount (SSR-safe). Card 3 adds the head script so the
123
+ // first paint already matches.
124
+ (0, _react.useEffect)(function () {
125
+ if (persist) {
126
+ var cached = readStorage(storageKey);
127
+ if (cached) {
128
+ if (cached.scheme) setSchemeState((0, _tokens.normalizeScheme)(cached.scheme));
129
+ if (cached.density) setDensityState((0, _tokens.normalizeDensity)(cached.density));
130
+ if (cached.preset !== undefined) {
131
+ setPresetState((0, _tokens.findPreset)(presets, cached.preset) ? cached.preset : null);
132
+ }
133
+ }
134
+ }
135
+ setHydrated(true);
136
+ // eslint-disable-next-line react-hooks/exhaustive-deps
137
+ }, [storageKey, persist]);
138
+
139
+ // `system` follows the OS.
140
+ (0, _react.useEffect)(function () {
141
+ if (typeof window === "undefined" || !window.matchMedia) return undefined;
142
+ var mq = window.matchMedia(DARK_QUERY);
143
+ var update = function update() {
144
+ return setSystemDark(mq.matches);
145
+ };
146
+ update();
147
+ if (mq.addEventListener) mq.addEventListener("change", update);else if (mq.addListener) mq.addListener(update);
148
+ return function () {
149
+ if (mq.removeEventListener) mq.removeEventListener("change", update);else if (mq.removeListener) mq.removeListener(update);
150
+ };
151
+ }, []);
152
+ var resolvedScheme = scheme === "system" ? systemDark || systemPrefersDark() ? "dark" : "light" : scheme;
153
+ var resolved = (0, _react.useMemo)(function () {
154
+ return (0, _tokens.resolvePowrTokens)({
155
+ scheme: resolvedScheme,
156
+ density: density,
157
+ theme: theme,
158
+ preset: preset,
159
+ presets: presets
160
+ });
161
+ }, [resolvedScheme, density, theme, preset, presets]);
162
+ var cssVars = (0, _react.useMemo)(function () {
163
+ return (0, _tokens.tokensToCssVars)(resolved.tokens, resolved.densityScale);
164
+ }, [resolved]);
165
+
166
+ // attach="root": write on <html> so product CSS, portals and toasts see the same vars.
167
+ (0, _react.useEffect)(function () {
168
+ if (attach !== "root" || typeof document === "undefined") return undefined;
169
+ var el = document.documentElement;
170
+ for (var _i = 0, _Object$keys = Object.keys(cssVars); _i < _Object$keys.length; _i++) {
171
+ var name = _Object$keys[_i];
172
+ el.style.setProperty(name, cssVars[name]);
173
+ }
174
+ el.setAttribute("data-powr-scheme", resolved.scheme);
175
+ el.setAttribute("data-powr-density", resolved.density);
176
+ if (resolved.preset) el.setAttribute("data-powr-preset", resolved.preset);else el.removeAttribute("data-powr-preset");
177
+ el.style.colorScheme = resolved.scheme;
178
+ return function () {
179
+ var _iterator = _createForOfIteratorHelper(_tokens.POWR_CSS_VAR_NAMES),
180
+ _step;
181
+ try {
182
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
183
+ var _name = _step.value;
184
+ el.style.removeProperty(_name);
185
+ }
186
+ } catch (err) {
187
+ _iterator.e(err);
188
+ } finally {
189
+ _iterator.f();
190
+ }
191
+ el.removeAttribute("data-powr-scheme");
192
+ el.removeAttribute("data-powr-density");
193
+ el.removeAttribute("data-powr-preset");
194
+ el.style.removeProperty("color-scheme");
195
+ };
196
+ }, [attach, cssVars, resolved.scheme, resolved.density, resolved.preset]);
197
+ var commit = (0, _react.useCallback)(function (next) {
198
+ if (persist) writeStorage(storageKey, next);
199
+ if (typeof onChange === "function") onChange(next);
200
+ }, [persist, storageKey, onChange]);
201
+ var setScheme = (0, _react.useCallback)(function (value) {
202
+ var s = (0, _tokens.normalizeScheme)(value);
203
+ setSchemeState(s);
204
+ commit({
205
+ scheme: s,
206
+ density: density,
207
+ preset: preset
208
+ });
209
+ }, [commit, density, preset]);
210
+ var setDensity = (0, _react.useCallback)(function (value) {
211
+ var d = (0, _tokens.normalizeDensity)(value);
212
+ setDensityState(d);
213
+ commit({
214
+ scheme: scheme,
215
+ density: d,
216
+ preset: preset
217
+ });
218
+ }, [commit, scheme, preset]);
219
+ var setPreset = (0, _react.useCallback)(function (value) {
220
+ var p = (0, _tokens.findPreset)(presets, value) ? value : null;
221
+ setPresetState(p);
222
+ commit({
223
+ scheme: scheme,
224
+ density: density,
225
+ preset: p
226
+ });
227
+ }, [commit, scheme, density, presets]);
228
+ var reset = (0, _react.useCallback)(function () {
229
+ var s = (0, _tokens.normalizeScheme)(schemeProp);
230
+ var d = (0, _tokens.normalizeDensity)(densityProp);
231
+ var p = (0, _tokens.findPreset)(presets, presetProp) ? presetProp : null;
232
+ setSchemeState(s);
233
+ setDensityState(d);
234
+ setPresetState(p);
235
+ commit({
236
+ scheme: s,
237
+ density: d,
238
+ preset: p
239
+ });
240
+ }, [commit, schemeProp, densityProp, presetProp, presets]);
241
+ var value = (0, _react.useMemo)(function () {
242
+ return {
243
+ scheme: scheme,
244
+ resolvedScheme: resolved.scheme,
245
+ density: density,
246
+ preset: preset,
247
+ presets: presets,
248
+ tokens: resolved.tokens,
249
+ cssVars: cssVars,
250
+ hydrated: hydrated,
251
+ mounted: true,
252
+ setScheme: setScheme,
253
+ setDensity: setDensity,
254
+ setPreset: setPreset,
255
+ reset: reset
256
+ };
257
+ }, [scheme, resolved, density, preset, presets, cssVars, hydrated, setScheme, setDensity, setPreset, reset]);
258
+
259
+ // `scoped` carries the vars only — it does not paint bg / text itself, so
260
+ // wrapping an existing page changes nothing until something reads a var.
261
+ var body = attach === "scoped" ? /*#__PURE__*/_react["default"].createElement("div", {
262
+ className: className,
263
+ "data-powr-scheme": resolved.scheme,
264
+ "data-powr-density": resolved.density,
265
+ "data-powr-preset": resolved.preset || undefined,
266
+ style: _objectSpread(_objectSpread({}, cssVars), {}, {
267
+ colorScheme: resolved.scheme
268
+ })
269
+ }, children) : children;
270
+ return /*#__PURE__*/_react["default"].createElement(PowrThemeContext.Provider, {
271
+ value: value
272
+ }, body);
273
+ }
274
+ var UNMOUNTED_THEME = function () {
275
+ var resolved = (0, _tokens.resolvePowrTokens)();
276
+ var noop = function noop() {};
277
+ return Object.freeze({
278
+ scheme: _tokens.DEFAULT_POWR_SCHEME,
279
+ resolvedScheme: resolved.scheme,
280
+ density: resolved.density,
281
+ preset: null,
282
+ presets: [],
283
+ tokens: resolved.tokens,
284
+ cssVars: (0, _tokens.tokensToCssVars)(resolved.tokens, resolved.densityScale),
285
+ hydrated: true,
286
+ mounted: false,
287
+ setScheme: noop,
288
+ setDensity: noop,
289
+ setPreset: noop,
290
+ reset: noop
291
+ });
292
+ }();
293
+
294
+ /**
295
+ * Read the theme. Outside a provider returns the neutral defaults and no-op
296
+ * setters (`mounted: false`), so SDK components work in apps that have not
297
+ * adopted the theme yet.
298
+ */
299
+ function usePowrTheme() {
300
+ var ctx = (0, _react.useContext)(PowrThemeContext);
301
+ return ctx || UNMOUNTED_THEME;
302
+ }
@@ -0,0 +1,123 @@
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, "DARK_POWR_TOKENS", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _tokens.DARK_POWR_TOKENS;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "DEFAULT_POWR_DENSITY", {
14
+ enumerable: true,
15
+ get: function get() {
16
+ return _tokens.DEFAULT_POWR_DENSITY;
17
+ }
18
+ });
19
+ Object.defineProperty(exports, "DEFAULT_POWR_SCHEME", {
20
+ enumerable: true,
21
+ get: function get() {
22
+ return _tokens.DEFAULT_POWR_SCHEME;
23
+ }
24
+ });
25
+ Object.defineProperty(exports, "DEFAULT_POWR_TOKENS", {
26
+ enumerable: true,
27
+ get: function get() {
28
+ return _tokens.DEFAULT_POWR_TOKENS;
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "POWR_CSS_VAR_NAMES", {
32
+ enumerable: true,
33
+ get: function get() {
34
+ return _tokens.POWR_CSS_VAR_NAMES;
35
+ }
36
+ });
37
+ Object.defineProperty(exports, "POWR_DENSITIES", {
38
+ enumerable: true,
39
+ get: function get() {
40
+ return _tokens.POWR_DENSITIES;
41
+ }
42
+ });
43
+ Object.defineProperty(exports, "POWR_SCHEMES", {
44
+ enumerable: true,
45
+ get: function get() {
46
+ return _tokens.POWR_SCHEMES;
47
+ }
48
+ });
49
+ Object.defineProperty(exports, "POWR_TOKENS", {
50
+ enumerable: true,
51
+ get: function get() {
52
+ return _tokens.POWR_TOKENS;
53
+ }
54
+ });
55
+ Object.defineProperty(exports, "POWR_TOKEN_KEYS", {
56
+ enumerable: true,
57
+ get: function get() {
58
+ return _tokens.POWR_TOKEN_KEYS;
59
+ }
60
+ });
61
+ Object.defineProperty(exports, "PowrThemeProvider", {
62
+ enumerable: true,
63
+ get: function get() {
64
+ return _PowrThemeProvider["default"];
65
+ }
66
+ });
67
+ Object.defineProperty(exports, "findPreset", {
68
+ enumerable: true,
69
+ get: function get() {
70
+ return _tokens.findPreset;
71
+ }
72
+ });
73
+ Object.defineProperty(exports, "normalizeDensity", {
74
+ enumerable: true,
75
+ get: function get() {
76
+ return _tokens.normalizeDensity;
77
+ }
78
+ });
79
+ Object.defineProperty(exports, "normalizeScheme", {
80
+ enumerable: true,
81
+ get: function get() {
82
+ return _tokens.normalizeScheme;
83
+ }
84
+ });
85
+ Object.defineProperty(exports, "powrThemeStorageKey", {
86
+ enumerable: true,
87
+ get: function get() {
88
+ return _PowrThemeProvider.powrThemeStorageKey;
89
+ }
90
+ });
91
+ Object.defineProperty(exports, "powrVar", {
92
+ enumerable: true,
93
+ get: function get() {
94
+ return _tokens.powrVar;
95
+ }
96
+ });
97
+ Object.defineProperty(exports, "resolvePowrTokens", {
98
+ enumerable: true,
99
+ get: function get() {
100
+ return _tokens.resolvePowrTokens;
101
+ }
102
+ });
103
+ Object.defineProperty(exports, "themeForScheme", {
104
+ enumerable: true,
105
+ get: function get() {
106
+ return _tokens.themeForScheme;
107
+ }
108
+ });
109
+ Object.defineProperty(exports, "tokensToCssVars", {
110
+ enumerable: true,
111
+ get: function get() {
112
+ return _tokens.tokensToCssVars;
113
+ }
114
+ });
115
+ Object.defineProperty(exports, "usePowrTheme", {
116
+ enumerable: true,
117
+ get: function get() {
118
+ return _PowrThemeProvider.usePowrTheme;
119
+ }
120
+ });
121
+ var _PowrThemeProvider = _interopRequireWildcard(require("./PowrThemeProvider"));
122
+ var _tokens = require("./tokens");
123
+ 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,212 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.POWR_TOKEN_KEYS = exports.POWR_TOKENS = exports.POWR_SCHEMES = exports.POWR_DENSITIES = exports.POWR_CSS_VAR_NAMES = exports.DEFAULT_POWR_TOKENS = exports.DEFAULT_POWR_SCHEME = exports.DEFAULT_POWR_DENSITY = exports.DARK_POWR_TOKENS = void 0;
7
+ exports.findPreset = findPreset;
8
+ exports.normalizeDensity = normalizeDensity;
9
+ exports.normalizeScheme = normalizeScheme;
10
+ exports.powrVar = powrVar;
11
+ exports.resolvePowrTokens = resolvePowrTokens;
12
+ exports.themeForScheme = themeForScheme;
13
+ exports.tokensToCssVars = tokensToCssVars;
14
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
15
+ 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."); }
16
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
17
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
18
+ 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; }
19
+ 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; }
20
+ 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; }
21
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
22
+ 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); }
23
+ 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; } } }; }
24
+ 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; } }
25
+ 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; }
26
+ 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); }
27
+ /**
28
+ * Powr theme token contract.
29
+ *
30
+ * Ten CSS variables every Powr web app and every SDK component share.
31
+ * The SDK ships structure only (light / dark scheme, density). Colours that
32
+ * make a product look like itself come from the product via `theme` and
33
+ * `presets`.
34
+ *
35
+ * Components read `var(--powr-<name>, <today's hex>)` inline — no CSS file,
36
+ * no Tailwind colour classes, so a bump changes nothing until a product
37
+ * mounts `PowrThemeProvider`.
38
+ *
39
+ * Vocabulary: `scheme` = light / dark / system. `mode` is reserved for the
40
+ * layout shape (`sidebar` / `topbar` …) that `PowrBaseAppWrapper` owns.
41
+ */
42
+
43
+ /** token key → CSS variable (without the `--powr-` prefix). */
44
+ var POWR_TOKENS = exports.POWR_TOKENS = Object.freeze({
45
+ bg: "bg",
46
+ surface: "surface",
47
+ text: "text",
48
+ muted: "muted",
49
+ border: "border",
50
+ primary: "primary",
51
+ primaryFg: "primary-fg",
52
+ danger: "danger",
53
+ radius: "radius",
54
+ font: "font"
55
+ });
56
+ var POWR_TOKEN_KEYS = exports.POWR_TOKEN_KEYS = Object.freeze(Object.keys(POWR_TOKENS));
57
+ var SYSTEM_FONT = "system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif";
58
+
59
+ /** Today's neutral SDK look. Mounting the provider with no `theme` = no change. */
60
+ var DEFAULT_POWR_TOKENS = exports.DEFAULT_POWR_TOKENS = Object.freeze({
61
+ bg: "#fafafa",
62
+ surface: "#ffffff",
63
+ text: "#111827",
64
+ muted: "#6b7280",
65
+ border: "#e5e7eb",
66
+ primary: "#2563eb",
67
+ primaryFg: "#ffffff",
68
+ danger: "#dc2626",
69
+ radius: "0.5rem",
70
+ font: SYSTEM_FONT
71
+ });
72
+
73
+ /** Structural dark scheme. Neutral, not a product palette. */
74
+ var DARK_POWR_TOKENS = exports.DARK_POWR_TOKENS = Object.freeze({
75
+ bg: "#0f1115",
76
+ surface: "#171a21",
77
+ text: "#f3f4f6",
78
+ muted: "#9ca3af",
79
+ border: "#2a2f3a",
80
+ primary: "#3b82f6",
81
+ primaryFg: "#ffffff",
82
+ danger: "#f87171",
83
+ radius: "0.5rem",
84
+ font: SYSTEM_FONT
85
+ });
86
+ var POWR_SCHEMES = exports.POWR_SCHEMES = Object.freeze(["light", "dark", "system"]);
87
+
88
+ /** density name → multiplier exposed as `--powr-density`. */
89
+ var POWR_DENSITIES = exports.POWR_DENSITIES = Object.freeze({
90
+ comfortable: 1,
91
+ compact: 0.875
92
+ });
93
+ var DEFAULT_POWR_SCHEME = exports.DEFAULT_POWR_SCHEME = "light";
94
+ var DEFAULT_POWR_DENSITY = exports.DEFAULT_POWR_DENSITY = "comfortable";
95
+ var BASE_BY_SCHEME = {
96
+ light: DEFAULT_POWR_TOKENS,
97
+ dark: DARK_POWR_TOKENS
98
+ };
99
+
100
+ /**
101
+ * `powrVar("primary", "#2563eb")` → `var(--powr-primary, #2563eb)`.
102
+ * Components use this so the fallback stays today's value.
103
+ */
104
+ function powrVar(key, fallback) {
105
+ var name = POWR_TOKENS[key] || key;
106
+ return fallback === undefined ? "var(--powr-".concat(name, ")") : "var(--powr-".concat(name, ", ").concat(fallback, ")");
107
+ }
108
+ function pickKnown(tokens) {
109
+ if (!tokens || _typeof(tokens) !== "object") return {};
110
+ var out = {};
111
+ var _iterator = _createForOfIteratorHelper(POWR_TOKEN_KEYS),
112
+ _step;
113
+ try {
114
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
115
+ var key = _step.value;
116
+ var v = tokens[key];
117
+ if (v !== undefined && v !== null && v !== "") out[key] = String(v);
118
+ }
119
+ } catch (err) {
120
+ _iterator.e(err);
121
+ } finally {
122
+ _iterator.f();
123
+ }
124
+ return out;
125
+ }
126
+
127
+ /**
128
+ * Product `theme` may be flat (light only) or `{ light, dark }`.
129
+ * Returns the token overrides for one resolved scheme.
130
+ */
131
+ function themeForScheme(theme, scheme) {
132
+ if (!theme || _typeof(theme) !== "object") return {};
133
+ if (theme.light || theme.dark) {
134
+ return pickKnown(theme[scheme] || (scheme === "dark" ? theme.dark : theme.light));
135
+ }
136
+ // Flat product tokens apply to light; dark keeps the structural dark base
137
+ // unless the product also gives a `dark` block.
138
+ return scheme === "dark" ? {} : pickKnown(theme);
139
+ }
140
+ function findPreset(presets, id) {
141
+ if (!id || !Array.isArray(presets)) return null;
142
+ return presets.find(function (p) {
143
+ return p && p.id === id;
144
+ }) || null;
145
+ }
146
+ function normalizeScheme(scheme) {
147
+ return POWR_SCHEMES.includes(scheme) ? scheme : DEFAULT_POWR_SCHEME;
148
+ }
149
+ function normalizeDensity(density) {
150
+ return Object.prototype.hasOwnProperty.call(POWR_DENSITIES, density) ? density : DEFAULT_POWR_DENSITY;
151
+ }
152
+
153
+ /**
154
+ * Pure resolver. Order: structural base (light/dark) ← product theme[scheme]
155
+ * ← chosen preset (`tokens` / `dark`) ← density.
156
+ *
157
+ * `scheme` must already be `light` or `dark` (resolve `system` first).
158
+ * Also used by the head init script (card 3) so the server and the client
159
+ * compute the same variables.
160
+ */
161
+ function resolvePowrTokens() {
162
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
163
+ _ref$scheme = _ref.scheme,
164
+ scheme = _ref$scheme === void 0 ? DEFAULT_POWR_SCHEME : _ref$scheme,
165
+ _ref$density = _ref.density,
166
+ density = _ref$density === void 0 ? DEFAULT_POWR_DENSITY : _ref$density,
167
+ theme = _ref.theme,
168
+ preset = _ref.preset,
169
+ presets = _ref.presets;
170
+ var resolvedScheme = scheme === "dark" ? "dark" : "light";
171
+ var base = BASE_BY_SCHEME[resolvedScheme];
172
+ var found = findPreset(presets, preset);
173
+ var presetTokens = found ? resolvedScheme === "dark" ? _objectSpread(_objectSpread({}, pickKnown(found.tokens)), pickKnown(found.dark)) : pickKnown(found.tokens) : {};
174
+ return {
175
+ scheme: resolvedScheme,
176
+ density: normalizeDensity(density),
177
+ densityScale: POWR_DENSITIES[normalizeDensity(density)],
178
+ preset: found ? found.id : null,
179
+ tokens: _objectSpread(_objectSpread(_objectSpread({}, base), themeForScheme(theme, resolvedScheme)), presetTokens)
180
+ };
181
+ }
182
+
183
+ /**
184
+ * `{ bg: "#fff" }` → `{ "--powr-bg": "#fff", "--powr-density": "1" }`.
185
+ * Safe to spread into a React `style` or to write on `document.documentElement`.
186
+ */
187
+ function tokensToCssVars(tokens, densityScale) {
188
+ var out = {};
189
+ var _iterator2 = _createForOfIteratorHelper(POWR_TOKEN_KEYS),
190
+ _step2;
191
+ try {
192
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
193
+ var key = _step2.value;
194
+ if (tokens && tokens[key] !== undefined) {
195
+ out["--powr-".concat(POWR_TOKENS[key])] = tokens[key];
196
+ }
197
+ }
198
+ } catch (err) {
199
+ _iterator2.e(err);
200
+ } finally {
201
+ _iterator2.f();
202
+ }
203
+ if (densityScale !== undefined && densityScale !== null) {
204
+ out["--powr-density"] = String(densityScale);
205
+ }
206
+ return out;
207
+ }
208
+
209
+ /** Names of every variable the contract may set — used to clear stale ones. */
210
+ var POWR_CSS_VAR_NAMES = exports.POWR_CSS_VAR_NAMES = Object.freeze([].concat(_toConsumableArray(POWR_TOKEN_KEYS.map(function (k) {
211
+ return "--powr-".concat(POWR_TOKENS[k]);
212
+ })), ["--powr-density"]));
@@ -8,8 +8,8 @@ var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _uploader = _interopRequireDefault(require("../../uploader"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
- /**
12
- * Shared attach modal used by thread (comments + chat). Uses PowrBaseUploader.
11
+ /**
12
+ * Shared attach modal used by thread (comments + chat). Uses PowrBaseUploader.
13
13
  */
14
14
  var AttachModal = function AttachModal(_ref) {
15
15
  var open = _ref.open,
@@ -7,9 +7,9 @@ exports["default"] = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
- /**
11
- * Composer: textarea, optional attach button, send button.
12
- * variant 'message' = rectangular send button; 'comment' = pill style with play button.
10
+ /**
11
+ * Composer: textarea, optional attach button, send button.
12
+ * variant 'message' = rectangular send button; 'comment' = pill style with play button.
13
13
  */
14
14
  var ThreadComposer = function ThreadComposer(_ref) {
15
15
  var value = _ref.value,
@@ -16,9 +16,9 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
16
16
  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; }
17
17
  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; } }
18
18
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
19
- /**
20
- * Renders a single thread item. variant: 'message' = chat bubble (isOwn right), 'comment' = comment card.
21
- * item: { id, content, senderName, timestamp, isOwn, files?, formattedTime? }
19
+ /**
20
+ * Renders a single thread item. variant: 'message' = chat bubble (isOwn right), 'comment' = comment card.
21
+ * item: { id, content, senderName, timestamp, isOwn, files?, formattedTime? }
22
22
  */
23
23
  var ThreadItem = function ThreadItem(_ref) {
24
24
  var item = _ref.item,
@@ -14,9 +14,9 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
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
- /**
18
- * items: array of { id, content, senderName, timestamp, isOwn, files?, formattedTime? }
19
- * dateGroups: optional array of { date, items } when groupByDate is true
17
+ /**
18
+ * items: array of { id, content, senderName, timestamp, isOwn, files?, formattedTime? }
19
+ * dateGroups: optional array of { date, items } when groupByDate is true
20
20
  */
21
21
  var ThreadList = function ThreadList(_ref) {
22
22
  var items = _ref.items,
@@ -23,10 +23,10 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
23
23
  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; }
24
24
  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; } }
25
25
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
26
- /**
27
- * Shared thread UI for chat messages and comments.
28
- * items: array of { id, content, senderName, timestamp, isOwn, files?, formattedTime? }
29
- * dateGroups: when groupByDate true, array of { date, items }
26
+ /**
27
+ * Shared thread UI for chat messages and comments.
28
+ * items: array of { id, content, senderName, timestamp, isOwn, files?, formattedTime? }
29
+ * dateGroups: when groupByDate true, array of { date, items }
30
30
  */
31
31
  var PowrBaseThread = function PowrBaseThread(_ref) {
32
32
  var _ref$items = _ref.items,
@@ -9,10 +9,10 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default":
9
9
  // Match http(s) URLs; simple pattern for display
10
10
  var URL_REGEX = /(https?:\/\/[^\s<]+)/g;
11
11
 
12
- /**
13
- * Splits text and returns React nodes with URLs as clickable links.
14
- * @param {string} text - Plain text that may contain URLs
15
- * @returns {Array} Array of React elements (strings and <a> tags)
12
+ /**
13
+ * Splits text and returns React nodes with URLs as clickable links.
14
+ * @param {string} text - Plain text that may contain URLs
15
+ * @returns {Array} Array of React elements (strings and <a> tags)
16
16
  */
17
17
  function linkify(text) {
18
18
  if (!text || typeof text !== 'string') return null;
@@ -84,7 +84,10 @@ var apiCall = exports.apiCall = /*#__PURE__*/function () {
84
84
  } else {
85
85
  apiUrl = config.defaultPowrUrl;
86
86
  }
87
- url = "".concat(apiUrl).concat(endpoint);
87
+ url = "".concat(apiUrl).concat(endpoint); // Prop wins; NEXT_PUBLIC_PROJECT_ID is the default for every component.
88
+ if (!projectId && config.projectId) {
89
+ projectId = config.projectId;
90
+ }
88
91
  if (projectId) {
89
92
  separator = endpoint.includes('?') ? '&' : '?';
90
93
  url = "".concat(url).concat(separator, "projectId=").concat(projectId);
@@ -71,9 +71,9 @@ function normalizePhone(input) {
71
71
  return parsed ? parsed.format('E.164') : '';
72
72
  }
73
73
 
74
- /**
75
- * Normalize phone for storage. Salvages digit runs when input has trailing junk.
76
- * Returns null when invalid — never returns raw input.
74
+ /**
75
+ * Normalize phone for storage. Salvages digit runs when input has trailing junk.
76
+ * Returns null when invalid — never returns raw input.
77
77
  */
78
78
  function coercePhoneForStorage(input) {
79
79
  var defaultCountry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_COUNTRY;
package/package.json CHANGED
@@ -1,7 +1,10 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "5.10.7",
3
+ "version": "6.0.0",
4
4
  "main": "dist/index.js",
5
+ "files": [
6
+ "dist"
7
+ ],
5
8
  "scripts": {
6
9
  "build": "babel src -d dist --copy-files",
7
10
  "prepublishOnly": "npm run build"