@descope/sdk-mixins 0.17.1 → 0.19.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.
Files changed (53) hide show
  1. package/dist/cjs/index.js +6 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/mixins/tenantIdMixin.js +19 -0
  4. package/dist/cjs/mixins/tenantIdMixin.js.map +1 -0
  5. package/dist/cjs/mixins/themeMixin/helpers.js +20 -0
  6. package/dist/cjs/mixins/themeMixin/helpers.js.map +1 -1
  7. package/dist/cjs/mixins/themeMixin/themeMixin.js +72 -15
  8. package/dist/cjs/mixins/themeMixin/themeMixin.js.map +1 -1
  9. package/dist/cjs/mixins/widgetConfigMixin/widgetConfigMixin.js +27 -0
  10. package/dist/cjs/mixins/widgetConfigMixin/widgetConfigMixin.js.map +1 -0
  11. package/dist/cjs/mixins/widgetIdMixin.js +17 -0
  12. package/dist/cjs/mixins/widgetIdMixin.js.map +1 -0
  13. package/dist/esm/index.js +3 -0
  14. package/dist/esm/index.js.map +1 -1
  15. package/dist/esm/mixins/tenantIdMixin.js +17 -0
  16. package/dist/esm/mixins/tenantIdMixin.js.map +1 -0
  17. package/dist/esm/mixins/themeMixin/helpers.js +20 -1
  18. package/dist/esm/mixins/themeMixin/helpers.js.map +1 -1
  19. package/dist/esm/mixins/themeMixin/themeMixin.js +73 -16
  20. package/dist/esm/mixins/themeMixin/themeMixin.js.map +1 -1
  21. package/dist/esm/mixins/widgetConfigMixin/widgetConfigMixin.js +25 -0
  22. package/dist/esm/mixins/widgetConfigMixin/widgetConfigMixin.js.map +1 -0
  23. package/dist/esm/mixins/widgetIdMixin.js +15 -0
  24. package/dist/esm/mixins/widgetIdMixin.js.map +1 -0
  25. package/dist/index.d.ts +1242 -175
  26. package/dist/types/index.d.ts +3 -0
  27. package/dist/types/mixins/configMixin/configMixin.d.ts +14 -14
  28. package/dist/types/mixins/configMixin/types.d.ts +6 -0
  29. package/dist/types/mixins/createStateManagementMixin.d.ts +2 -2
  30. package/dist/types/mixins/createValidateAttributesMixin/createValidateAttributesMixin.d.ts +5 -5
  31. package/dist/types/mixins/cspNonceMixin.d.ts +5 -5
  32. package/dist/types/mixins/debuggerMixin/debugger-wc.d.ts +5 -5
  33. package/dist/types/mixins/debuggerMixin/debuggerMixin.d.ts +8 -8
  34. package/dist/types/mixins/descopeUiMixin/descopeUiMixin.d.ts +19 -19
  35. package/dist/types/mixins/formMixin.d.ts +2 -2
  36. package/dist/types/mixins/initElementMixin.d.ts +5 -5
  37. package/dist/types/mixins/initLifecycleMixin.d.ts +1 -1
  38. package/dist/types/mixins/injectNpmLibMixin/injectNpmLibMixin.d.ts +2 -2
  39. package/dist/types/mixins/injectStyleMixin.d.ts +5 -5
  40. package/dist/types/mixins/loggerMixin/loggerMixin.d.ts +2 -2
  41. package/dist/types/mixins/modalMixin/modalMixin.d.ts +23 -23
  42. package/dist/types/mixins/notificationsMixin/notificationsMixin.d.ts +23 -23
  43. package/dist/types/mixins/observeAttributesMixin/observeAttributesMixin.d.ts +4 -4
  44. package/dist/types/mixins/projectIdMixin.d.ts +5 -5
  45. package/dist/types/mixins/resetMixin.d.ts +6 -6
  46. package/dist/types/mixins/staticResourcesMixin/staticResourcesMixin.d.ts +10 -10
  47. package/dist/types/mixins/tenantIdMixin.d.ts +342 -0
  48. package/dist/types/mixins/themeMixin/helpers.d.ts +1 -0
  49. package/dist/types/mixins/themeMixin/themeMixin.d.ts +45 -39
  50. package/dist/types/mixins/widgetConfigMixin/index.d.ts +1 -0
  51. package/dist/types/mixins/widgetConfigMixin/widgetConfigMixin.d.ts +369 -0
  52. package/dist/types/mixins/widgetIdMixin.d.ts +342 -0
  53. package/package.json +2 -2
package/dist/cjs/index.js CHANGED
@@ -16,6 +16,9 @@ var formMixin = require('./mixins/formMixin.js');
16
16
  var initElementMixin = require('./mixins/initElementMixin.js');
17
17
  var initLifecycleMixin = require('./mixins/initLifecycleMixin.js');
18
18
  var projectIdMixin = require('./mixins/projectIdMixin.js');
19
+ var tenantIdMixin = require('./mixins/tenantIdMixin.js');
20
+ var widgetIdMixin = require('./mixins/widgetIdMixin.js');
21
+ var widgetConfigMixin = require('./mixins/widgetConfigMixin/widgetConfigMixin.js');
19
22
  var baseUrlMixin = require('./mixins/baseUrlMixin.js');
20
23
  var cookieConfigMixin = require('./mixins/cookieConfigMixin.js');
21
24
  var injectNpmLibMixin = require('./mixins/injectNpmLibMixin/injectNpmLibMixin.js');
@@ -41,6 +44,9 @@ exports.formMixin = formMixin.formMixin;
41
44
  exports.initElementMixin = initElementMixin.initElementMixin;
42
45
  exports.initLifecycleMixin = initLifecycleMixin.initLifecycleMixin;
43
46
  exports.projectIdMixin = projectIdMixin.projectIdMixin;
47
+ exports.tenantIdMixin = tenantIdMixin.tenantIdMixin;
48
+ exports.widgetIdMixin = widgetIdMixin.widgetIdMixin;
49
+ exports.widgetConfigMixin = widgetConfigMixin.widgetConfigMixin;
44
50
  exports.baseUrlMixin = baseUrlMixin.baseUrlMixin;
45
51
  exports.cookieConfigMixin = cookieConfigMixin.cookieConfigMixin;
46
52
  exports.injectNpmLibMixin = injectNpmLibMixin.injectNpmLibMixin;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var sdkHelpers = require('@descope/sdk-helpers');
4
+ var createValidateAttributesMixin = require('./createValidateAttributesMixin/createValidateAttributesMixin.js');
5
+
6
+ const tenantIdValidator = (_, value) => value !== null &&
7
+ !/^[a-zA-Z0-9_-]*$/.test(value) &&
8
+ 'tenant must contain only alphanumeric characters, hyphens, or underscores';
9
+ const tenantIdMixin = sdkHelpers.createSingletonMixin((superclass) => {
10
+ const BaseClass = sdkHelpers.compose(createValidateAttributesMixin.createValidateAttributesMixin({ tenant: tenantIdValidator }))(superclass);
11
+ return class TenantIdMixinClass extends BaseClass {
12
+ get tenantId() {
13
+ return this.getAttribute('tenant') || undefined;
14
+ }
15
+ };
16
+ });
17
+
18
+ exports.tenantIdMixin = tenantIdMixin;
19
+ //# sourceMappingURL=tenantIdMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenantIdMixin.js","sources":["../../../src/mixins/tenantIdMixin.ts"],"sourcesContent":["import { createSingletonMixin, compose } from '@descope/sdk-helpers';\nimport { createValidateAttributesMixin } from './createValidateAttributesMixin';\n\nconst tenantIdValidator = (_: string, value: string | null) =>\n value !== null &&\n !/^[a-zA-Z0-9_-]*$/.test(value) &&\n 'tenant must contain only alphanumeric characters, hyphens, or underscores';\n\nexport const tenantIdMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n createValidateAttributesMixin({ tenant: tenantIdValidator }),\n )(superclass);\n\n return class TenantIdMixinClass extends BaseClass {\n get tenantId() {\n return this.getAttribute('tenant') || undefined;\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","createValidateAttributesMixin"],"mappings":";;;;;AAGA,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,KAAoB,KACxD,KAAK,KAAK,IAAI;AACd,IAAA,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,IAAA,2EAA2E,CAAC;MAEjE,aAAa,GAAGA,+BAAoB,CAC/C,CAAqC,UAAa,KAAI;AACpD,IAAA,MAAM,SAAS,GAAGC,kBAAO,CACvBC,2DAA6B,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAC7D,CAAC,UAAU,CAAC,CAAC;IAEd,OAAO,MAAM,kBAAmB,SAAQ,SAAS,CAAA;AAC/C,QAAA,IAAI,QAAQ,GAAA;YACV,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;SACjD;KACF,CAAC;AACJ,CAAC;;;;"}
@@ -55,7 +55,27 @@ const loadDevTheme = async () => {
55
55
  };
56
56
  }
57
57
  };
58
+ function deepMergeNonEmpty(base, override) {
59
+ const merged = Object.assign({}, base);
60
+ for (const [key, value] of Object.entries(override || {})) {
61
+ if (value === null || value === undefined)
62
+ continue;
63
+ if (typeof value === 'object') {
64
+ if (Object.keys(value).length === 0)
65
+ continue;
66
+ merged[key] = deepMergeNonEmpty(merged[key] || {}, value);
67
+ }
68
+ else if (typeof value === 'string') {
69
+ merged[key] = (merged[key] || '') + value;
70
+ }
71
+ else {
72
+ merged[key] = value;
73
+ }
74
+ }
75
+ return merged;
76
+ }
58
77
 
78
+ exports.deepMergeNonEmpty = deepMergeNonEmpty;
59
79
  exports.flattenToVars = flattenToVars;
60
80
  exports.isSafeCssVarSegment = isSafeCssVarSegment;
61
81
  exports.loadDevTheme = loadDevTheme;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../src/mixins/themeMixin/helpers.ts"],"sourcesContent":["import { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\n\nexport const isSafeCssVarSegment = (segment: string): boolean =>\n /^[a-zA-Z0-9-]+$/.test(segment);\n\nexport const serializeOverrideCssValue = (value: unknown): string | null => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? String(value) : null;\n }\n if (typeof value !== 'string') return null;\n if (/[;{}]/.test(value)) return null;\n return value.trim();\n};\n\nexport const flattenToVars = (\n obj: Record<string, any>,\n onError: (msg: string) => void,\n prefix = '',\n): string =>\n Object.entries(obj).reduce((css, [key, value]) => {\n if (!isSafeCssVarSegment(key)) {\n onError('Ignoring invalid override-css token path segment');\n return css;\n }\n const path = prefix ? `${prefix}-${key}` : key;\n if (typeof value === 'object' && value !== null) {\n return css + flattenToVars(value, onError, path);\n }\n const serializedValue = serializeOverrideCssValue(value);\n if (serializedValue === null) {\n onError('Ignoring invalid override-css token value');\n return css;\n }\n return `${css}--descope-${path}:${serializedValue};`;\n }, '');\n\nexport const loadFont = (url: string) => {\n const font = document.createElement('link');\n font.href = url;\n font.rel = 'stylesheet';\n document.head.appendChild(font);\n};\n\nexport const loadDevTheme = async () => {\n const componentsUrl = localStorage.getItem(UI_COMPONENTS_URL_KEY);\n const descopeDevUrl = componentsUrl?.replace(/[^\\/]+$/, 'DescopeDev.js');\n\n // eslint-disable-next-line no-console\n console.warn('Trying to load DescopeDev.js from', descopeDevUrl);\n const scriptEle = document.createElement('script');\n scriptEle.src = descopeDevUrl;\n document.body.appendChild(scriptEle);\n\n await new Promise((resolve, reject) => {\n scriptEle.onload = resolve;\n scriptEle.onerror = reject;\n });\n\n if (globalThis.DescopeDev) {\n const { themeToStyle, defaultTheme, darkTheme } = globalThis.DescopeDev;\n\n return {\n light: themeToStyle(defaultTheme),\n dark: themeToStyle(darkTheme),\n };\n }\n};\n"],"names":["UI_COMPONENTS_URL_KEY"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../src/mixins/themeMixin/helpers.ts"],"sourcesContent":["import { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\n\nexport const isSafeCssVarSegment = (segment: string): boolean =>\n /^[a-zA-Z0-9-]+$/.test(segment);\n\nexport const serializeOverrideCssValue = (value: unknown): string | null => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? String(value) : null;\n }\n if (typeof value !== 'string') return null;\n if (/[;{}]/.test(value)) return null;\n return value.trim();\n};\n\nexport const flattenToVars = (\n obj: Record<string, any>,\n onError: (msg: string) => void,\n prefix = '',\n): string =>\n Object.entries(obj).reduce((css, [key, value]) => {\n if (!isSafeCssVarSegment(key)) {\n onError('Ignoring invalid override-css token path segment');\n return css;\n }\n const path = prefix ? `${prefix}-${key}` : key;\n if (typeof value === 'object' && value !== null) {\n return css + flattenToVars(value, onError, path);\n }\n const serializedValue = serializeOverrideCssValue(value);\n if (serializedValue === null) {\n onError('Ignoring invalid override-css token value');\n return css;\n }\n return `${css}--descope-${path}:${serializedValue};`;\n }, '');\n\nexport const loadFont = (url: string) => {\n const font = document.createElement('link');\n font.href = url;\n font.rel = 'stylesheet';\n document.head.appendChild(font);\n};\n\nexport const loadDevTheme = async () => {\n const componentsUrl = localStorage.getItem(UI_COMPONENTS_URL_KEY);\n const descopeDevUrl = componentsUrl?.replace(/[^\\/]+$/, 'DescopeDev.js');\n\n // eslint-disable-next-line no-console\n console.warn('Trying to load DescopeDev.js from', descopeDevUrl);\n const scriptEle = document.createElement('script');\n scriptEle.src = descopeDevUrl;\n document.body.appendChild(scriptEle);\n\n await new Promise((resolve, reject) => {\n scriptEle.onload = resolve;\n scriptEle.onerror = reject;\n });\n\n if (globalThis.DescopeDev) {\n const { themeToStyle, defaultTheme, darkTheme } = globalThis.DescopeDev;\n\n return {\n light: themeToStyle(defaultTheme),\n dark: themeToStyle(darkTheme),\n };\n }\n};\n\nexport function deepMergeNonEmpty(\n base: Record<string, any>,\n override: Record<string, any>,\n): Record<string, any> {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override || {})) {\n if (value === null || value === undefined) continue;\n if (typeof value === 'object') {\n if (Object.keys(value).length === 0) continue;\n merged[key] = deepMergeNonEmpty(merged[key] || {}, value);\n } else if (typeof value === 'string') {\n merged[key] = (merged[key] || '') + value;\n } else {\n merged[key] = value;\n }\n }\n return merged;\n}\n"],"names":["UI_COMPONENTS_URL_KEY"],"mappings":"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"}
@@ -13,21 +13,24 @@ var helpers = require('./helpers.js');
13
13
  var observeAttributesMixin = require('../observeAttributesMixin/observeAttributesMixin.js');
14
14
  var constants$1 = require('../descopeUiMixin/constants.js');
15
15
  var injectStyleMixin = require('../injectStyleMixin.js');
16
+ var tenantIdMixin = require('../tenantIdMixin.js');
16
17
 
17
18
  const themeValidation = (_, theme) => (theme || false) &&
18
19
  theme !== 'light' &&
19
20
  theme !== 'dark' &&
20
21
  'Supported theme values are "light", "dark", or leave empty for using the OS theme';
21
22
  const themeMixin = sdkHelpers.createSingletonMixin((superclass) => {
22
- var _ThemeMixinClass_instances, _ThemeMixinClass_globalStyle, _ThemeMixinClass_customStyle, _ThemeMixinClass_getThemeOverrideString, _ThemeMixinClass__themeResource, _ThemeMixinClass_fetchTheme, _ThemeMixinClass_themeResource_get, _ThemeMixinClass_loadGlobalStyle, _ThemeMixinClass_loadCustomStyle, _ThemeMixinClass_loadComponentsStyle, _ThemeMixinClass_getFontsConfig, _ThemeMixinClass_loadFonts, _ThemeMixinClass_applyTheme, _ThemeMixinClass_onThemeChange, _ThemeMixinClass_loadTheme, _ThemeMixinClass_toggleOsThemeChangeListener, _a;
23
- const BaseClass = sdkHelpers.compose(createValidateAttributesMixin.createValidateAttributesMixin({ theme: themeValidation }), staticResourcesMixin.staticResourcesMixin, initLifecycleMixin.initLifecycleMixin, descopeUiMixin.descopeUiMixin, configMixin.configMixin, initElementMixin.initElementMixin, observeAttributesMixin.observeAttributesMixin, injectStyleMixin.injectStyleMixin)(superclass);
23
+ var _ThemeMixinClass_instances, _ThemeMixinClass_globalStyle, _ThemeMixinClass_tenantStyle, _ThemeMixinClass_customStyle, _ThemeMixinClass_getThemeOverrideString, _ThemeMixinClass__themeResource, _ThemeMixinClass__tenantThemeResource, _ThemeMixinClass_fetchTheme, _ThemeMixinClass_themeResource_get, _ThemeMixinClass_loadGlobalStyle, _ThemeMixinClass_fetchTenantTheme, _ThemeMixinClass_tenantThemeResource_get, _ThemeMixinClass_loadTenantStyle, _ThemeMixinClass_loadCustomStyle, _ThemeMixinClass_loadComponentsStyle, _ThemeMixinClass_getFontsConfig, _ThemeMixinClass_loadFonts, _ThemeMixinClass_applyTheme, _ThemeMixinClass_onThemeChange, _ThemeMixinClass_loadTheme, _ThemeMixinClass_toggleOsThemeChangeListener, _a;
24
+ const BaseClass = sdkHelpers.compose(createValidateAttributesMixin.createValidateAttributesMixin({ theme: themeValidation }), tenantIdMixin.tenantIdMixin, staticResourcesMixin.staticResourcesMixin, initLifecycleMixin.initLifecycleMixin, descopeUiMixin.descopeUiMixin, configMixin.configMixin, initElementMixin.initElementMixin, observeAttributesMixin.observeAttributesMixin, injectStyleMixin.injectStyleMixin)(superclass);
24
25
  return _a = class ThemeMixinClass extends BaseClass {
25
26
  constructor() {
26
27
  super(...arguments);
27
28
  _ThemeMixinClass_instances.add(this);
28
29
  _ThemeMixinClass_globalStyle.set(this, void 0);
30
+ _ThemeMixinClass_tenantStyle.set(this, void 0);
29
31
  _ThemeMixinClass_customStyle.set(this, void 0);
30
32
  _ThemeMixinClass__themeResource.set(this, void 0);
33
+ _ThemeMixinClass__tenantThemeResource.set(this, void 0);
31
34
  _ThemeMixinClass_onThemeChange.set(this, () => {
32
35
  tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadTheme).call(this);
33
36
  tslib.__classPrivateFieldGet(this, _ThemeMixinClass_toggleOsThemeChangeListener, "f").call(this, this.getAttribute('theme') === 'os');
@@ -71,11 +74,17 @@ const themeMixin = sdkHelpers.createSingletonMixin((superclass) => {
71
74
  tslib.__classPrivateFieldGet(this, _ThemeMixinClass_onThemeChange, "f").call(this);
72
75
  await Promise.all([
73
76
  tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadGlobalStyle).call(this),
77
+ tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadTenantStyle).call(this),
74
78
  tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadComponentsStyle).call(this),
75
79
  ]);
76
- await tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadCustomStyle).call(this);
80
+ tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadCustomStyle).call(this);
77
81
  this.observeAttributes(['theme'], tslib.__classPrivateFieldGet(this, _ThemeMixinClass_onThemeChange, "f"));
78
82
  this.observeAttributes(['theme-override'], () => tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadCustomStyle).call(this));
83
+ this.observeAttributes(['tenant'], () => {
84
+ tslib.__classPrivateFieldSet(this, _ThemeMixinClass__tenantThemeResource, null, "f");
85
+ tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadTenantStyle).call(this);
86
+ tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadComponentsStyle).call(this);
87
+ });
79
88
  this.observeAttributes(['style-id'], () => {
80
89
  tslib.__classPrivateFieldSet(this, _ThemeMixinClass__themeResource, null, "f");
81
90
  tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_loadFonts).call(this);
@@ -85,8 +94,10 @@ const themeMixin = sdkHelpers.createSingletonMixin((superclass) => {
85
94
  }
86
95
  },
87
96
  _ThemeMixinClass_globalStyle = new WeakMap(),
97
+ _ThemeMixinClass_tenantStyle = new WeakMap(),
88
98
  _ThemeMixinClass_customStyle = new WeakMap(),
89
99
  _ThemeMixinClass__themeResource = new WeakMap(),
100
+ _ThemeMixinClass__tenantThemeResource = new WeakMap(),
90
101
  _ThemeMixinClass_onThemeChange = new WeakMap(),
91
102
  _ThemeMixinClass_toggleOsThemeChangeListener = new WeakMap(),
92
103
  _ThemeMixinClass_instances = new WeakSet(),
@@ -140,7 +151,6 @@ const themeMixin = sdkHelpers.createSingletonMixin((superclass) => {
140
151
  tslib.__classPrivateFieldSet(this, _ThemeMixinClass__themeResource, tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_fetchTheme).call(this), "f");
141
152
  tslib.__classPrivateFieldGet(this, _ThemeMixinClass__themeResource, "f").then((theme) => this.logger.debug('Fetched theme', theme));
142
153
  }
143
- // eslint-disable-next-line no-underscore-dangle
144
154
  return tslib.__classPrivateFieldGet(this, _ThemeMixinClass__themeResource, "f");
145
155
  },
146
156
  _ThemeMixinClass_loadGlobalStyle = async function _ThemeMixinClass_loadGlobalStyle() {
@@ -149,10 +159,53 @@ const themeMixin = sdkHelpers.createSingletonMixin((superclass) => {
149
159
  if (!theme) {
150
160
  return;
151
161
  }
162
+ const styles = (((_b = theme === null || theme === void 0 ? void 0 : theme.light) === null || _b === void 0 ? void 0 : _b.globals) || '') + (((_c = theme === null || theme === void 0 ? void 0 : theme.dark) === null || _c === void 0 ? void 0 : _c.globals) || '');
152
163
  if (!tslib.__classPrivateFieldGet(this, _ThemeMixinClass_globalStyle, "f")) {
153
- tslib.__classPrivateFieldSet(this, _ThemeMixinClass_globalStyle, this.injectStyle(''), "f");
164
+ // Use prepend so project global style always precedes tenant style regardless of fetch order
165
+ tslib.__classPrivateFieldSet(this, _ThemeMixinClass_globalStyle, this.injectStyle(styles, { prepend: true }), "f");
166
+ }
167
+ else {
168
+ tslib.__classPrivateFieldGet(this, _ThemeMixinClass_globalStyle, "f").replaceSync(styles);
169
+ }
170
+ },
171
+ _ThemeMixinClass_fetchTenantTheme = async function _ThemeMixinClass_fetchTenantTheme() {
172
+ const tenantId = this.tenantId;
173
+ if (!tenantId)
174
+ return undefined;
175
+ try {
176
+ const { body: fetchedTenantTheme } = await this.fetchStaticResource(`${tenantId}/theme.json`, 'json');
177
+ return fetchedTenantTheme;
178
+ }
179
+ catch (e) {
180
+ this.logger.error('Cannot fetch tenant theme file', 'make sure that your tenantId, projectId & flowId are correct');
181
+ }
182
+ return undefined;
183
+ },
184
+ _ThemeMixinClass_tenantThemeResource_get = function _ThemeMixinClass_tenantThemeResource_get() {
185
+ if (!tslib.__classPrivateFieldGet(this, _ThemeMixinClass__tenantThemeResource, "f")) {
186
+ tslib.__classPrivateFieldSet(this, _ThemeMixinClass__tenantThemeResource, tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_fetchTenantTheme).call(this), "f");
187
+ }
188
+ return tslib.__classPrivateFieldGet(this, _ThemeMixinClass__tenantThemeResource, "f");
189
+ },
190
+ _ThemeMixinClass_loadTenantStyle = async function _ThemeMixinClass_loadTenantStyle() {
191
+ var _b, _c, _d, _e;
192
+ if (!this.tenantId) {
193
+ (_b = tslib.__classPrivateFieldGet(this, _ThemeMixinClass_tenantStyle, "f")) === null || _b === void 0 ? void 0 : _b.replaceSync('');
194
+ return;
195
+ }
196
+ const tenantTheme = await tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "a", _ThemeMixinClass_tenantThemeResource_get);
197
+ if (!tenantTheme) {
198
+ (_c = tslib.__classPrivateFieldGet(this, _ThemeMixinClass_tenantStyle, "f")) === null || _c === void 0 ? void 0 : _c.replaceSync('');
199
+ return;
200
+ }
201
+ const styles = (((_d = tenantTheme.light) === null || _d === void 0 ? void 0 : _d.globals) || '') +
202
+ (((_e = tenantTheme.dark) === null || _e === void 0 ? void 0 : _e.globals) || '');
203
+ if (!tslib.__classPrivateFieldGet(this, _ThemeMixinClass_tenantStyle, "f")) {
204
+ tslib.__classPrivateFieldSet(this, _ThemeMixinClass_tenantStyle, this.injectStyle(styles), "f");
205
+ }
206
+ else {
207
+ tslib.__classPrivateFieldGet(this, _ThemeMixinClass_tenantStyle, "f").replaceSync(styles);
154
208
  }
155
- tslib.__classPrivateFieldGet(this, _ThemeMixinClass_globalStyle, "f").replaceSync((((_b = theme === null || theme === void 0 ? void 0 : theme.light) === null || _b === void 0 ? void 0 : _b.globals) || '') + (((_c = theme === null || theme === void 0 ? void 0 : theme.dark) === null || _c === void 0 ? void 0 : _c.globals) || ''));
156
209
  },
157
210
  _ThemeMixinClass_loadCustomStyle = async function _ThemeMixinClass_loadCustomStyle() {
158
211
  var _b;
@@ -160,23 +213,27 @@ const themeMixin = sdkHelpers.createSingletonMixin((superclass) => {
160
213
  (_b = tslib.__classPrivateFieldGet(this, _ThemeMixinClass_customStyle, "f")) === null || _b === void 0 ? void 0 : _b.replaceSync('');
161
214
  return;
162
215
  }
216
+ const overrideString = tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_getThemeOverrideString).call(this);
163
217
  if (!tslib.__classPrivateFieldGet(this, _ThemeMixinClass_customStyle, "f")) {
164
- tslib.__classPrivateFieldSet(this, _ThemeMixinClass_customStyle, this.injectStyle(''), "f");
218
+ tslib.__classPrivateFieldSet(this, _ThemeMixinClass_customStyle, this.injectStyle(overrideString), "f");
219
+ }
220
+ else {
221
+ tslib.__classPrivateFieldGet(this, _ThemeMixinClass_customStyle, "f").replaceSync(overrideString);
165
222
  }
166
- tslib.__classPrivateFieldGet(this, _ThemeMixinClass_customStyle, "f").replaceSync(tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "m", _ThemeMixinClass_getThemeOverrideString).call(this));
167
223
  },
168
224
  _ThemeMixinClass_loadComponentsStyle = async function _ThemeMixinClass_loadComponentsStyle() {
169
- var _b, _c;
225
+ var _b, _c, _d, _e;
170
226
  const theme = await tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "a", _ThemeMixinClass_themeResource_get);
171
227
  if (!theme)
172
228
  return;
173
229
  const descopeUi = await this.descopeUi;
174
- if (descopeUi === null || descopeUi === void 0 ? void 0 : descopeUi.componentsThemeManager) {
175
- descopeUi.componentsThemeManager.themes = {
176
- light: (_b = theme === null || theme === void 0 ? void 0 : theme.light) === null || _b === void 0 ? void 0 : _b.components,
177
- dark: (_c = theme === null || theme === void 0 ? void 0 : theme.dark) === null || _c === void 0 ? void 0 : _c.components,
178
- };
179
- }
230
+ if (!(descopeUi === null || descopeUi === void 0 ? void 0 : descopeUi.componentsThemeManager))
231
+ return;
232
+ const tenantTheme = await tslib.__classPrivateFieldGet(this, _ThemeMixinClass_instances, "a", _ThemeMixinClass_tenantThemeResource_get);
233
+ descopeUi.componentsThemeManager.themes = {
234
+ light: helpers.deepMergeNonEmpty(((_b = theme === null || theme === void 0 ? void 0 : theme.light) === null || _b === void 0 ? void 0 : _b.components) || {}, ((_c = tenantTheme === null || tenantTheme === void 0 ? void 0 : tenantTheme.light) === null || _c === void 0 ? void 0 : _c.components) || {}),
235
+ dark: helpers.deepMergeNonEmpty(((_d = theme === null || theme === void 0 ? void 0 : theme.dark) === null || _d === void 0 ? void 0 : _d.components) || {}, ((_e = tenantTheme === null || tenantTheme === void 0 ? void 0 : tenantTheme.dark) === null || _e === void 0 ? void 0 : _e.components) || {}),
236
+ };
180
237
  },
181
238
  _ThemeMixinClass_getFontsConfig = async function _ThemeMixinClass_getFontsConfig() {
182
239
  var _b, _c;
@@ -1 +1 @@
1
- {"version":3,"file":"themeMixin.js","sources":["../../../../src/mixins/themeMixin/themeMixin.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport { createSingletonMixin, compose } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { createValidateAttributesMixin } from '../createValidateAttributesMixin';\nimport { descopeUiMixin } from '../descopeUiMixin';\nimport { initElementMixin } from '../initElementMixin';\nimport { initLifecycleMixin } from '../initLifecycleMixin';\nimport { staticResourcesMixin } from '../staticResourcesMixin';\nimport { DEFAULT_STYLE_ID } from './constants';\nimport { flattenToVars, loadDevTheme, loadFont } from './helpers';\nimport { observeAttributesMixin } from '../observeAttributesMixin';\nimport { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\nimport { InjectedStyle, injectStyleMixin } from '../injectStyleMixin';\n\nconst themeValidation = (_: string, theme: string | null) =>\n (theme || false) &&\n theme !== 'light' &&\n theme !== 'dark' &&\n 'Supported theme values are \"light\", \"dark\", or leave empty for using the OS theme';\n\nexport type ThemeOptions = 'light' | 'dark' | 'os';\n\nexport const themeMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n createValidateAttributesMixin({ theme: themeValidation }),\n staticResourcesMixin,\n initLifecycleMixin,\n descopeUiMixin,\n configMixin,\n initElementMixin,\n observeAttributesMixin,\n injectStyleMixin,\n )(superclass);\n\n return class ThemeMixinClass extends BaseClass {\n #globalStyle: InjectedStyle;\n #customStyle: InjectedStyle;\n\n get theme(): ThemeOptions {\n const theme = this.getAttribute('theme') as ThemeOptions | null;\n\n if (theme === 'os') {\n const isOsDark =\n window.matchMedia &&\n window.matchMedia?.('(prefers-color-scheme: dark)')?.matches;\n\n return isOsDark ? 'dark' : 'light';\n }\n\n return theme || 'light';\n }\n\n get styleId(): string {\n return this.getAttribute('style-id') || DEFAULT_STYLE_ID;\n }\n\n get themeOverride(): Record<string, any> | null {\n const raw = this.getAttribute('theme-override');\n if (!raw) return null;\n try {\n return JSON.parse(raw);\n } catch (e) {\n this.logger.error(\n 'Failed to parse theme-override attribute. error: ',\n e,\n );\n return null;\n }\n }\n\n #getThemeOverrideString(): string {\n const override = this.themeOverride;\n if (!override) return '';\n\n return (['light', 'dark'] as const)\n .map((theme) => {\n const primary = override[theme]?.globals?.colors?.primary;\n const secondary = override[theme]?.globals?.colors?.secondary;\n if (!primary && !secondary) return '';\n\n return `[data-theme=\"${theme}\"]{${flattenToVars(\n { colors: { primary, secondary } },\n (msg) => this.logger.error(msg),\n )}}`;\n })\n .join('');\n }\n\n #_themeResource: Promise<void | Record<string, any>>;\n\n async #fetchTheme() {\n try {\n const { body: fetchedTheme } = await this.fetchStaticResource(\n `${this.styleId}.json`,\n 'json',\n );\n\n // In development mode, we sometimes want to override the UI components URL\n // The override components might have a different theme, so we need to merge it with the project theme in order to see the components correctly\n if (process.env.NODE_ENV === 'development') {\n if (localStorage?.getItem(UI_COMPONENTS_URL_KEY)) {\n try {\n this.logger.warn(\n 'You are in DEV mode, and UI components override URL was found\\ntrying to merge project theme with the default theme of the UI components',\n );\n const devTheme = await loadDevTheme();\n\n if (devTheme) {\n fetchedTheme.light.components = {\n ...fetchedTheme.light.components,\n ...devTheme.light.components,\n };\n fetchedTheme.dark.components = {\n ...fetchedTheme.dark.components,\n ...devTheme.dark.components,\n };\n\n this.logger.warn('Theme was merged successfully');\n\n // eslint-disable-next-line no-console\n console.log(\n '%cNOTICE! This is not the theme that will be used in production!\\n\\nMake sure to test it without the override UI components URL!',\n 'color: black; background-color:yellow; font-size: x-large',\n );\n }\n } catch (e) {\n this.logger.error('Failed to merge UI components theme\\n', e);\n }\n }\n }\n\n return fetchedTheme;\n } catch (e) {\n this.logger.error(\n 'Cannot fetch theme file',\n 'make sure that your projectId & flowId are correct',\n );\n }\n\n return undefined;\n }\n\n get #themeResource() {\n if (!this.#_themeResource) {\n this.#_themeResource = this.#fetchTheme();\n this.#_themeResource.then((theme) =>\n this.logger.debug('Fetched theme', theme),\n );\n }\n\n // eslint-disable-next-line no-underscore-dangle\n return this.#_themeResource;\n }\n\n async #loadGlobalStyle() {\n const theme = await this.#themeResource;\n if (!theme) {\n return;\n }\n if (!this.#globalStyle) {\n this.#globalStyle = this.injectStyle('');\n }\n\n this.#globalStyle.replaceSync(\n (theme?.light?.globals || '') + (theme?.dark?.globals || ''),\n );\n }\n\n async #loadCustomStyle() {\n if (!this.themeOverride) {\n this.#customStyle?.replaceSync('');\n return;\n }\n if (!this.#customStyle) {\n this.#customStyle = this.injectStyle('');\n }\n this.#customStyle.replaceSync(this.#getThemeOverrideString());\n }\n\n async #loadComponentsStyle() {\n const theme = await this.#themeResource;\n if (!theme) return;\n\n const descopeUi = await this.descopeUi;\n if (descopeUi?.componentsThemeManager) {\n descopeUi.componentsThemeManager.themes = {\n light: theme?.light?.components,\n dark: theme?.dark?.components,\n };\n }\n }\n\n async #getFontsConfig() {\n const { projectConfig } = (await this.config) || {};\n\n const newConfig = projectConfig?.styles?.[this.styleId];\n const oldConfig = projectConfig?.cssTemplate;\n\n const config = newConfig || oldConfig;\n\n const fonts: Record<string, { url?: string }> | undefined =\n config?.[this.theme]?.fonts;\n\n return fonts;\n }\n\n async #loadFonts() {\n const fonts = await this.#getFontsConfig();\n if (fonts) {\n Object.values(fonts).forEach((font) => {\n if (font.url) {\n this.logger.debug(`Loading font from URL \"${font.url}\"`);\n loadFont(font.url);\n }\n });\n } else {\n this.logger.debug('No fonts to load');\n }\n }\n\n async #applyTheme() {\n this.rootElement.setAttribute('data-theme', this.theme);\n const descopeUi = await this.descopeUi;\n if (descopeUi?.componentsThemeManager) {\n descopeUi.componentsThemeManager.currentThemeName = this.theme;\n }\n }\n\n #onThemeChange = () => {\n this.#loadTheme();\n this.#toggleOsThemeChangeListener(this.getAttribute('theme') === 'os');\n };\n\n #loadTheme() {\n this.#loadFonts();\n this.#applyTheme();\n }\n\n // add or remove os theme change listener\n #toggleOsThemeChangeListener = (listen: boolean) => {\n const method = listen ? 'addEventListener' : 'removeEventListener';\n window\n .matchMedia?.('(prefers-color-scheme: dark)')\n ?.[method]?.('change', () => this.#loadTheme());\n };\n\n async init() {\n await super.init?.();\n\n this.#onThemeChange();\n await Promise.all([\n this.#loadGlobalStyle(),\n this.#loadComponentsStyle(),\n ]);\n await this.#loadCustomStyle();\n\n this.observeAttributes(['theme'], this.#onThemeChange);\n\n this.observeAttributes(['theme-override'], () => this.#loadCustomStyle());\n\n this.observeAttributes(['style-id'], () => {\n this.#_themeResource = null;\n this.#loadFonts();\n this.#loadGlobalStyle();\n this.#loadComponentsStyle();\n });\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","createValidateAttributesMixin","staticResourcesMixin","initLifecycleMixin","descopeUiMixin","configMixin","initElementMixin","observeAttributesMixin","injectStyleMixin","__classPrivateFieldGet","DEFAULT_STYLE_ID","__classPrivateFieldSet","flattenToVars","UI_COMPONENTS_URL_KEY","loadDevTheme","loadFont"],"mappings":"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"}
1
+ {"version":3,"file":"themeMixin.js","sources":["../../../../src/mixins/themeMixin/themeMixin.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport { createSingletonMixin, compose } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { createValidateAttributesMixin } from '../createValidateAttributesMixin';\nimport { descopeUiMixin } from '../descopeUiMixin';\nimport { initElementMixin } from '../initElementMixin';\nimport { initLifecycleMixin } from '../initLifecycleMixin';\nimport { staticResourcesMixin } from '../staticResourcesMixin';\nimport { DEFAULT_STYLE_ID } from './constants';\nimport {\n deepMergeNonEmpty,\n flattenToVars,\n loadDevTheme,\n loadFont,\n} from './helpers';\nimport { observeAttributesMixin } from '../observeAttributesMixin';\nimport { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\nimport { InjectedStyle, injectStyleMixin } from '../injectStyleMixin';\nimport { tenantIdMixin } from '../tenantIdMixin';\n\nconst themeValidation = (_: string, theme: string | null) =>\n (theme || false) &&\n theme !== 'light' &&\n theme !== 'dark' &&\n 'Supported theme values are \"light\", \"dark\", or leave empty for using the OS theme';\n\nexport type ThemeOptions = 'light' | 'dark' | 'os';\n\nexport const themeMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n createValidateAttributesMixin({ theme: themeValidation }),\n tenantIdMixin,\n staticResourcesMixin,\n initLifecycleMixin,\n descopeUiMixin,\n configMixin,\n initElementMixin,\n observeAttributesMixin,\n injectStyleMixin,\n )(superclass);\n\n return class ThemeMixinClass extends BaseClass {\n #globalStyle: InjectedStyle;\n #tenantStyle: InjectedStyle;\n #customStyle: InjectedStyle;\n\n get theme(): ThemeOptions {\n const theme = this.getAttribute('theme') as ThemeOptions | null;\n\n if (theme === 'os') {\n const isOsDark =\n window.matchMedia &&\n window.matchMedia?.('(prefers-color-scheme: dark)')?.matches;\n\n return isOsDark ? 'dark' : 'light';\n }\n\n return theme || 'light';\n }\n\n get styleId(): string {\n return this.getAttribute('style-id') || DEFAULT_STYLE_ID;\n }\n\n get themeOverride(): Record<string, any> | null {\n const raw = this.getAttribute('theme-override');\n if (!raw) return null;\n try {\n return JSON.parse(raw);\n } catch (e) {\n this.logger.error(\n 'Failed to parse theme-override attribute. error: ',\n e,\n );\n return null;\n }\n }\n\n #getThemeOverrideString(): string {\n const override = this.themeOverride;\n if (!override) return '';\n\n return (['light', 'dark'] as const)\n .map((theme) => {\n const primary = override[theme]?.globals?.colors?.primary;\n const secondary = override[theme]?.globals?.colors?.secondary;\n if (!primary && !secondary) return '';\n\n return `[data-theme=\"${theme}\"]{${flattenToVars(\n { colors: { primary, secondary } },\n (msg) => this.logger.error(msg),\n )}}`;\n })\n .join('');\n }\n\n #_themeResource: Promise<void | Record<string, any>>;\n #_tenantThemeResource: Promise<Record<string, any> | undefined>;\n\n async #fetchTheme() {\n try {\n const { body: fetchedTheme } = await this.fetchStaticResource(\n `${this.styleId}.json`,\n 'json',\n );\n\n // In development mode, we sometimes want to override the UI components URL\n // The override components might have a different theme, so we need to merge it with the project theme in order to see the components correctly\n if (process.env.NODE_ENV === 'development') {\n if (localStorage?.getItem(UI_COMPONENTS_URL_KEY)) {\n try {\n this.logger.warn(\n 'You are in DEV mode, and UI components override URL was found\\ntrying to merge project theme with the default theme of the UI components',\n );\n const devTheme = await loadDevTheme();\n\n if (devTheme) {\n fetchedTheme.light.components = {\n ...fetchedTheme.light.components,\n ...devTheme.light.components,\n };\n fetchedTheme.dark.components = {\n ...fetchedTheme.dark.components,\n ...devTheme.dark.components,\n };\n\n this.logger.warn('Theme was merged successfully');\n\n // eslint-disable-next-line no-console\n console.log(\n '%cNOTICE! This is not the theme that will be used in production!\\n\\nMake sure to test it without the override UI components URL!',\n 'color: black; background-color:yellow; font-size: x-large',\n );\n }\n } catch (e) {\n this.logger.error('Failed to merge UI components theme\\n', e);\n }\n }\n }\n\n return fetchedTheme;\n } catch (e) {\n this.logger.error(\n 'Cannot fetch theme file',\n 'make sure that your projectId & flowId are correct',\n );\n }\n\n return undefined;\n }\n\n get #themeResource() {\n if (!this.#_themeResource) {\n this.#_themeResource = this.#fetchTheme();\n this.#_themeResource.then((theme) =>\n this.logger.debug('Fetched theme', theme),\n );\n }\n\n return this.#_themeResource;\n }\n\n async #loadGlobalStyle() {\n const theme = await this.#themeResource;\n if (!theme) {\n return;\n }\n const styles =\n (theme?.light?.globals || '') + (theme?.dark?.globals || '');\n if (!this.#globalStyle) {\n // Use prepend so project global style always precedes tenant style regardless of fetch order\n this.#globalStyle = this.injectStyle(styles, { prepend: true });\n } else {\n this.#globalStyle.replaceSync(styles);\n }\n }\n\n async #fetchTenantTheme() {\n const tenantId = this.tenantId;\n if (!tenantId) return undefined;\n try {\n const { body: fetchedTenantTheme } = await this.fetchStaticResource(\n `${tenantId}/theme.json`,\n 'json',\n );\n return fetchedTenantTheme;\n } catch (e) {\n this.logger.error(\n 'Cannot fetch tenant theme file',\n 'make sure that your tenantId, projectId & flowId are correct',\n );\n }\n return undefined;\n }\n\n get #tenantThemeResource(): Promise<Record<string, any> | undefined> {\n if (!this.#_tenantThemeResource) {\n this.#_tenantThemeResource = this.#fetchTenantTheme();\n }\n return this.#_tenantThemeResource;\n }\n\n async #loadTenantStyle() {\n if (!this.tenantId) {\n this.#tenantStyle?.replaceSync('');\n return;\n }\n const tenantTheme = await this.#tenantThemeResource;\n if (!tenantTheme) {\n this.#tenantStyle?.replaceSync('');\n return;\n }\n const styles =\n (tenantTheme.light?.globals || '') +\n (tenantTheme.dark?.globals || '');\n if (!this.#tenantStyle) {\n this.#tenantStyle = this.injectStyle(styles);\n } else {\n this.#tenantStyle.replaceSync(styles);\n }\n }\n\n async #loadCustomStyle() {\n if (!this.themeOverride) {\n this.#customStyle?.replaceSync('');\n return;\n }\n const overrideString = this.#getThemeOverrideString();\n if (!this.#customStyle) {\n this.#customStyle = this.injectStyle(overrideString);\n } else {\n this.#customStyle.replaceSync(overrideString);\n }\n }\n\n async #loadComponentsStyle() {\n const theme = await this.#themeResource;\n if (!theme) return;\n\n const descopeUi = await this.descopeUi;\n if (!descopeUi?.componentsThemeManager) return;\n\n const tenantTheme = await this.#tenantThemeResource;\n\n descopeUi.componentsThemeManager.themes = {\n light: deepMergeNonEmpty(\n theme?.light?.components || {},\n tenantTheme?.light?.components || {},\n ),\n dark: deepMergeNonEmpty(\n theme?.dark?.components || {},\n tenantTheme?.dark?.components || {},\n ),\n };\n }\n\n async #getFontsConfig() {\n const { projectConfig } = (await this.config) || {};\n\n const newConfig = projectConfig?.styles?.[this.styleId];\n const oldConfig = projectConfig?.cssTemplate;\n\n const config = newConfig || oldConfig;\n\n const fonts: Record<string, { url?: string }> | undefined =\n config?.[this.theme]?.fonts;\n\n return fonts;\n }\n\n async #loadFonts() {\n const fonts = await this.#getFontsConfig();\n if (fonts) {\n Object.values(fonts).forEach((font) => {\n if (font.url) {\n this.logger.debug(`Loading font from URL \"${font.url}\"`);\n loadFont(font.url);\n }\n });\n } else {\n this.logger.debug('No fonts to load');\n }\n }\n\n async #applyTheme() {\n this.rootElement.setAttribute('data-theme', this.theme);\n const descopeUi = await this.descopeUi;\n if (descopeUi?.componentsThemeManager) {\n descopeUi.componentsThemeManager.currentThemeName = this.theme;\n }\n }\n\n #onThemeChange = () => {\n this.#loadTheme();\n this.#toggleOsThemeChangeListener(this.getAttribute('theme') === 'os');\n };\n\n #loadTheme() {\n this.#loadFonts();\n this.#applyTheme();\n }\n\n // add or remove os theme change listener\n #toggleOsThemeChangeListener = (listen: boolean) => {\n const method = listen ? 'addEventListener' : 'removeEventListener';\n window\n .matchMedia?.('(prefers-color-scheme: dark)')\n ?.[method]?.('change', () => this.#loadTheme());\n };\n\n async init() {\n await super.init?.();\n\n this.#onThemeChange();\n await Promise.all([\n this.#loadGlobalStyle(),\n this.#loadTenantStyle(),\n this.#loadComponentsStyle(),\n ]);\n this.#loadCustomStyle();\n\n this.observeAttributes(['theme'], this.#onThemeChange);\n\n this.observeAttributes(['theme-override'], () =>\n this.#loadCustomStyle(),\n );\n\n this.observeAttributes(['tenant'], () => {\n this.#_tenantThemeResource = null;\n this.#loadTenantStyle();\n this.#loadComponentsStyle();\n });\n\n this.observeAttributes(['style-id'], () => {\n this.#_themeResource = null;\n this.#loadFonts();\n this.#loadGlobalStyle();\n this.#loadComponentsStyle();\n });\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","createValidateAttributesMixin","tenantIdMixin","staticResourcesMixin","initLifecycleMixin","descopeUiMixin","configMixin","initElementMixin","observeAttributesMixin","injectStyleMixin","__classPrivateFieldGet","DEFAULT_STYLE_ID","__classPrivateFieldSet","flattenToVars","UI_COMPONENTS_URL_KEY","loadDevTheme","deepMergeNonEmpty","loadFont"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ var sdkHelpers = require('@descope/sdk-helpers');
4
+ var configMixin = require('../configMixin/configMixin.js');
5
+ var widgetIdMixin = require('../widgetIdMixin.js');
6
+
7
+ const widgetConfigMixin = sdkHelpers.createSingletonMixin((superclass) => {
8
+ const BaseClass = sdkHelpers.compose(configMixin.configMixin, widgetIdMixin.widgetIdMixin)(superclass);
9
+ return class WidgetConfigMixinClass extends BaseClass {
10
+ // Required: without this empty override, TS infers `init` on the composed
11
+ // base as a property (intersection of identical signatures from multiple
12
+ // mixin paths), and any downstream class declaring `async init()` as a
13
+ // method fails TS2425.
14
+ async init() {
15
+ var _a;
16
+ await ((_a = super.init) === null || _a === void 0 ? void 0 : _a.call(this));
17
+ }
18
+ async getWidgetConfig() {
19
+ var _a, _b;
20
+ const config = await this.config;
21
+ return (_b = (_a = config === null || config === void 0 ? void 0 : config.projectConfig) === null || _a === void 0 ? void 0 : _a.widgets) === null || _b === void 0 ? void 0 : _b[this.widgetId];
22
+ }
23
+ };
24
+ });
25
+
26
+ exports.widgetConfigMixin = widgetConfigMixin;
27
+ //# sourceMappingURL=widgetConfigMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgetConfigMixin.js","sources":["../../../../src/mixins/widgetConfigMixin/widgetConfigMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { WidgetConfig } from '../configMixin/types';\nimport { widgetIdMixin } from '../widgetIdMixin';\n\nexport const widgetConfigMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(configMixin, widgetIdMixin)(superclass);\n\n return class WidgetConfigMixinClass extends BaseClass {\n // Required: without this empty override, TS infers `init` on the composed\n // base as a property (intersection of identical signatures from multiple\n // mixin paths), and any downstream class declaring `async init()` as a\n // method fails TS2425.\n async init() {\n await super.init?.();\n }\n\n async getWidgetConfig(): Promise<WidgetConfig | undefined> {\n const config = await this.config;\n return config?.projectConfig?.widgets?.[this.widgetId];\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","configMixin","widgetIdMixin"],"mappings":";;;;;;MAKa,iBAAiB,GAAGA,+BAAoB,CACnD,CAAqC,UAAa,KAAI;IACpD,MAAM,SAAS,GAAGC,kBAAO,CAACC,uBAAW,EAAEC,2BAAa,CAAC,CAAC,UAAU,CAAC,CAAC;IAElE,OAAO,MAAM,sBAAuB,SAAQ,SAAS,CAAA;;;;;AAKnD,QAAA,MAAM,IAAI,GAAA;;AACR,YAAA,OAAM,CAAA,EAAA,GAAA,KAAK,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAI,CAAA,CAAC;SACtB;AAED,QAAA,MAAM,eAAe,GAAA;;AACnB,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;AACjC,YAAA,OAAO,MAAA,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,CAAC,QAAQ,CAAC,CAAC;SACxD;KACF,CAAC;AACJ,CAAC;;;;"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var sdkHelpers = require('@descope/sdk-helpers');
4
+ var commonValidators = require('./createValidateAttributesMixin/commonValidators.js');
5
+ var createValidateAttributesMixin = require('./createValidateAttributesMixin/createValidateAttributesMixin.js');
6
+
7
+ const widgetIdMixin = sdkHelpers.createSingletonMixin((superclass) => {
8
+ const BaseClass = sdkHelpers.compose(createValidateAttributesMixin.createValidateAttributesMixin({ 'widget-id': commonValidators.missingAttrValidator }))(superclass);
9
+ return class WidgetIdMixinClass extends BaseClass {
10
+ get widgetId() {
11
+ return this.getAttribute('widget-id');
12
+ }
13
+ };
14
+ });
15
+
16
+ exports.widgetIdMixin = widgetIdMixin;
17
+ //# sourceMappingURL=widgetIdMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgetIdMixin.js","sources":["../../../src/mixins/widgetIdMixin.ts"],"sourcesContent":["import { createSingletonMixin, compose } from '@descope/sdk-helpers';\nimport { missingAttrValidator } from './createValidateAttributesMixin/commonValidators';\nimport { createValidateAttributesMixin } from './createValidateAttributesMixin';\n\nexport const widgetIdMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n createValidateAttributesMixin({ 'widget-id': missingAttrValidator }),\n )(superclass);\n\n return class WidgetIdMixinClass extends BaseClass {\n get widgetId() {\n return this.getAttribute('widget-id');\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","createValidateAttributesMixin","missingAttrValidator"],"mappings":";;;;;;MAIa,aAAa,GAAGA,+BAAoB,CAC/C,CAAqC,UAAa,KAAI;AACpD,IAAA,MAAM,SAAS,GAAGC,kBAAO,CACvBC,2DAA6B,CAAC,EAAE,WAAW,EAAEC,qCAAoB,EAAE,CAAC,CACrE,CAAC,UAAU,CAAC,CAAC;IAEd,OAAO,MAAM,kBAAmB,SAAQ,SAAS,CAAA;AAC/C,QAAA,IAAI,QAAQ,GAAA;AACV,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;SACvC;KACF,CAAC;AACJ,CAAC;;;;"}
package/dist/esm/index.js CHANGED
@@ -14,6 +14,9 @@ export { formMixin } from './mixins/formMixin.js';
14
14
  export { initElementMixin } from './mixins/initElementMixin.js';
15
15
  export { initLifecycleMixin } from './mixins/initLifecycleMixin.js';
16
16
  export { projectIdMixin } from './mixins/projectIdMixin.js';
17
+ export { tenantIdMixin } from './mixins/tenantIdMixin.js';
18
+ export { widgetIdMixin } from './mixins/widgetIdMixin.js';
19
+ export { widgetConfigMixin } from './mixins/widgetConfigMixin/widgetConfigMixin.js';
17
20
  export { baseUrlMixin } from './mixins/baseUrlMixin.js';
18
21
  export { cookieConfigMixin } from './mixins/cookieConfigMixin.js';
19
22
  export { injectNpmLibMixin } from './mixins/injectNpmLibMixin/injectNpmLibMixin.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,17 @@
1
+ import { createSingletonMixin, compose } from '@descope/sdk-helpers';
2
+ import { createValidateAttributesMixin } from './createValidateAttributesMixin/createValidateAttributesMixin.js';
3
+
4
+ const tenantIdValidator = (_, value) => value !== null &&
5
+ !/^[a-zA-Z0-9_-]*$/.test(value) &&
6
+ 'tenant must contain only alphanumeric characters, hyphens, or underscores';
7
+ const tenantIdMixin = createSingletonMixin((superclass) => {
8
+ const BaseClass = compose(createValidateAttributesMixin({ tenant: tenantIdValidator }))(superclass);
9
+ return class TenantIdMixinClass extends BaseClass {
10
+ get tenantId() {
11
+ return this.getAttribute('tenant') || undefined;
12
+ }
13
+ };
14
+ });
15
+
16
+ export { tenantIdMixin };
17
+ //# sourceMappingURL=tenantIdMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenantIdMixin.js","sources":["../../../src/mixins/tenantIdMixin.ts"],"sourcesContent":["import { createSingletonMixin, compose } from '@descope/sdk-helpers';\nimport { createValidateAttributesMixin } from './createValidateAttributesMixin';\n\nconst tenantIdValidator = (_: string, value: string | null) =>\n value !== null &&\n !/^[a-zA-Z0-9_-]*$/.test(value) &&\n 'tenant must contain only alphanumeric characters, hyphens, or underscores';\n\nexport const tenantIdMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n createValidateAttributesMixin({ tenant: tenantIdValidator }),\n )(superclass);\n\n return class TenantIdMixinClass extends BaseClass {\n get tenantId() {\n return this.getAttribute('tenant') || undefined;\n }\n };\n },\n);\n"],"names":[],"mappings":";;;AAGA,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAE,KAAoB,KACxD,KAAK,KAAK,IAAI;AACd,IAAA,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,IAAA,2EAA2E,CAAC;MAEjE,aAAa,GAAG,oBAAoB,CAC/C,CAAqC,UAAa,KAAI;AACpD,IAAA,MAAM,SAAS,GAAG,OAAO,CACvB,6BAA6B,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAC7D,CAAC,UAAU,CAAC,CAAC;IAEd,OAAO,MAAM,kBAAmB,SAAQ,SAAS,CAAA;AAC/C,QAAA,IAAI,QAAQ,GAAA;YACV,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;SACjD;KACF,CAAC;AACJ,CAAC;;;;"}
@@ -53,6 +53,25 @@ const loadDevTheme = async () => {
53
53
  };
54
54
  }
55
55
  };
56
+ function deepMergeNonEmpty(base, override) {
57
+ const merged = Object.assign({}, base);
58
+ for (const [key, value] of Object.entries(override || {})) {
59
+ if (value === null || value === undefined)
60
+ continue;
61
+ if (typeof value === 'object') {
62
+ if (Object.keys(value).length === 0)
63
+ continue;
64
+ merged[key] = deepMergeNonEmpty(merged[key] || {}, value);
65
+ }
66
+ else if (typeof value === 'string') {
67
+ merged[key] = (merged[key] || '') + value;
68
+ }
69
+ else {
70
+ merged[key] = value;
71
+ }
72
+ }
73
+ return merged;
74
+ }
56
75
 
57
- export { flattenToVars, isSafeCssVarSegment, loadDevTheme, loadFont, serializeOverrideCssValue };
76
+ export { deepMergeNonEmpty, flattenToVars, isSafeCssVarSegment, loadDevTheme, loadFont, serializeOverrideCssValue };
58
77
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../src/mixins/themeMixin/helpers.ts"],"sourcesContent":["import { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\n\nexport const isSafeCssVarSegment = (segment: string): boolean =>\n /^[a-zA-Z0-9-]+$/.test(segment);\n\nexport const serializeOverrideCssValue = (value: unknown): string | null => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? String(value) : null;\n }\n if (typeof value !== 'string') return null;\n if (/[;{}]/.test(value)) return null;\n return value.trim();\n};\n\nexport const flattenToVars = (\n obj: Record<string, any>,\n onError: (msg: string) => void,\n prefix = '',\n): string =>\n Object.entries(obj).reduce((css, [key, value]) => {\n if (!isSafeCssVarSegment(key)) {\n onError('Ignoring invalid override-css token path segment');\n return css;\n }\n const path = prefix ? `${prefix}-${key}` : key;\n if (typeof value === 'object' && value !== null) {\n return css + flattenToVars(value, onError, path);\n }\n const serializedValue = serializeOverrideCssValue(value);\n if (serializedValue === null) {\n onError('Ignoring invalid override-css token value');\n return css;\n }\n return `${css}--descope-${path}:${serializedValue};`;\n }, '');\n\nexport const loadFont = (url: string) => {\n const font = document.createElement('link');\n font.href = url;\n font.rel = 'stylesheet';\n document.head.appendChild(font);\n};\n\nexport const loadDevTheme = async () => {\n const componentsUrl = localStorage.getItem(UI_COMPONENTS_URL_KEY);\n const descopeDevUrl = componentsUrl?.replace(/[^\\/]+$/, 'DescopeDev.js');\n\n // eslint-disable-next-line no-console\n console.warn('Trying to load DescopeDev.js from', descopeDevUrl);\n const scriptEle = document.createElement('script');\n scriptEle.src = descopeDevUrl;\n document.body.appendChild(scriptEle);\n\n await new Promise((resolve, reject) => {\n scriptEle.onload = resolve;\n scriptEle.onerror = reject;\n });\n\n if (globalThis.DescopeDev) {\n const { themeToStyle, defaultTheme, darkTheme } = globalThis.DescopeDev;\n\n return {\n light: themeToStyle(defaultTheme),\n dark: themeToStyle(darkTheme),\n };\n }\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../src/mixins/themeMixin/helpers.ts"],"sourcesContent":["import { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\n\nexport const isSafeCssVarSegment = (segment: string): boolean =>\n /^[a-zA-Z0-9-]+$/.test(segment);\n\nexport const serializeOverrideCssValue = (value: unknown): string | null => {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? String(value) : null;\n }\n if (typeof value !== 'string') return null;\n if (/[;{}]/.test(value)) return null;\n return value.trim();\n};\n\nexport const flattenToVars = (\n obj: Record<string, any>,\n onError: (msg: string) => void,\n prefix = '',\n): string =>\n Object.entries(obj).reduce((css, [key, value]) => {\n if (!isSafeCssVarSegment(key)) {\n onError('Ignoring invalid override-css token path segment');\n return css;\n }\n const path = prefix ? `${prefix}-${key}` : key;\n if (typeof value === 'object' && value !== null) {\n return css + flattenToVars(value, onError, path);\n }\n const serializedValue = serializeOverrideCssValue(value);\n if (serializedValue === null) {\n onError('Ignoring invalid override-css token value');\n return css;\n }\n return `${css}--descope-${path}:${serializedValue};`;\n }, '');\n\nexport const loadFont = (url: string) => {\n const font = document.createElement('link');\n font.href = url;\n font.rel = 'stylesheet';\n document.head.appendChild(font);\n};\n\nexport const loadDevTheme = async () => {\n const componentsUrl = localStorage.getItem(UI_COMPONENTS_URL_KEY);\n const descopeDevUrl = componentsUrl?.replace(/[^\\/]+$/, 'DescopeDev.js');\n\n // eslint-disable-next-line no-console\n console.warn('Trying to load DescopeDev.js from', descopeDevUrl);\n const scriptEle = document.createElement('script');\n scriptEle.src = descopeDevUrl;\n document.body.appendChild(scriptEle);\n\n await new Promise((resolve, reject) => {\n scriptEle.onload = resolve;\n scriptEle.onerror = reject;\n });\n\n if (globalThis.DescopeDev) {\n const { themeToStyle, defaultTheme, darkTheme } = globalThis.DescopeDev;\n\n return {\n light: themeToStyle(defaultTheme),\n dark: themeToStyle(darkTheme),\n };\n }\n};\n\nexport function deepMergeNonEmpty(\n base: Record<string, any>,\n override: Record<string, any>,\n): Record<string, any> {\n const merged = { ...base };\n for (const [key, value] of Object.entries(override || {})) {\n if (value === null || value === undefined) continue;\n if (typeof value === 'object') {\n if (Object.keys(value).length === 0) continue;\n merged[key] = deepMergeNonEmpty(merged[key] || {}, value);\n } else if (typeof value === 'string') {\n merged[key] = (merged[key] || '') + value;\n } else {\n merged[key] = value;\n }\n }\n return merged;\n}\n"],"names":[],"mappings":"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"}