@descope/sdk-mixins 0.18.0 → 0.20.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 (47) hide show
  1. package/dist/cjs/index.js +2 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/mixins/descopeUiMixin/descopeUiMixin.js +7 -1
  4. package/dist/cjs/mixins/descopeUiMixin/descopeUiMixin.js.map +1 -1
  5. package/dist/cjs/mixins/tenantIdMixin.js +19 -0
  6. package/dist/cjs/mixins/tenantIdMixin.js.map +1 -0
  7. package/dist/cjs/mixins/themeMixin/helpers.js +20 -0
  8. package/dist/cjs/mixins/themeMixin/helpers.js.map +1 -1
  9. package/dist/cjs/mixins/themeMixin/themeMixin.js +72 -15
  10. package/dist/cjs/mixins/themeMixin/themeMixin.js.map +1 -1
  11. package/dist/esm/index.js +1 -0
  12. package/dist/esm/index.js.map +1 -1
  13. package/dist/esm/mixins/descopeUiMixin/descopeUiMixin.js +8 -2
  14. package/dist/esm/mixins/descopeUiMixin/descopeUiMixin.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/index.d.ts +543 -194
  22. package/dist/types/index.d.ts +1 -0
  23. package/dist/types/mixins/configMixin/configMixin.d.ts +14 -14
  24. package/dist/types/mixins/createStateManagementMixin.d.ts +2 -2
  25. package/dist/types/mixins/createValidateAttributesMixin/createValidateAttributesMixin.d.ts +5 -5
  26. package/dist/types/mixins/cspNonceMixin.d.ts +5 -5
  27. package/dist/types/mixins/debuggerMixin/debugger-wc.d.ts +5 -5
  28. package/dist/types/mixins/debuggerMixin/debuggerMixin.d.ts +8 -8
  29. package/dist/types/mixins/descopeUiMixin/descopeUiMixin.d.ts +19 -19
  30. package/dist/types/mixins/formMixin.d.ts +2 -2
  31. package/dist/types/mixins/initElementMixin.d.ts +5 -5
  32. package/dist/types/mixins/initLifecycleMixin.d.ts +1 -1
  33. package/dist/types/mixins/injectNpmLibMixin/injectNpmLibMixin.d.ts +2 -2
  34. package/dist/types/mixins/injectStyleMixin.d.ts +5 -5
  35. package/dist/types/mixins/loggerMixin/loggerMixin.d.ts +2 -2
  36. package/dist/types/mixins/modalMixin/modalMixin.d.ts +23 -23
  37. package/dist/types/mixins/notificationsMixin/notificationsMixin.d.ts +23 -23
  38. package/dist/types/mixins/observeAttributesMixin/observeAttributesMixin.d.ts +4 -4
  39. package/dist/types/mixins/projectIdMixin.d.ts +5 -5
  40. package/dist/types/mixins/resetMixin.d.ts +6 -6
  41. package/dist/types/mixins/staticResourcesMixin/staticResourcesMixin.d.ts +10 -10
  42. package/dist/types/mixins/tenantIdMixin.d.ts +342 -0
  43. package/dist/types/mixins/themeMixin/helpers.d.ts +1 -0
  44. package/dist/types/mixins/themeMixin/themeMixin.d.ts +45 -39
  45. package/dist/types/mixins/widgetConfigMixin/widgetConfigMixin.d.ts +14 -14
  46. package/dist/types/mixins/widgetIdMixin.d.ts +5 -5
  47. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -16,6 +16,7 @@ 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');
19
20
  var widgetIdMixin = require('./mixins/widgetIdMixin.js');
20
21
  var widgetConfigMixin = require('./mixins/widgetConfigMixin/widgetConfigMixin.js');
21
22
  var baseUrlMixin = require('./mixins/baseUrlMixin.js');
@@ -43,6 +44,7 @@ exports.formMixin = formMixin.formMixin;
43
44
  exports.initElementMixin = initElementMixin.initElementMixin;
44
45
  exports.initLifecycleMixin = initLifecycleMixin.initLifecycleMixin;
45
46
  exports.projectIdMixin = projectIdMixin.projectIdMixin;
47
+ exports.tenantIdMixin = tenantIdMixin.tenantIdMixin;
46
48
  exports.widgetIdMixin = widgetIdMixin.widgetIdMixin;
47
49
  exports.widgetConfigMixin = widgetConfigMixin.widgetConfigMixin;
48
50
  exports.baseUrlMixin = baseUrlMixin.baseUrlMixin;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -90,7 +90,13 @@ const descopeUiMixin = sdkHelpers.createSingletonMixin((superclass) => {
90
90
  }
91
91
  try {
92
92
  const componentsVersion = await tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersion).call(this);
93
- const componentsVersionSri = await tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersionSri).call(this);
93
+ // When the dev-panel override is set, the URL points at a locally
94
+ // built bundle whose bytes won't match the CDN-published SRI hash.
95
+ // Skip SRI in that case so the override actually loads instead of
96
+ // failing the integrity check and falling back to the CDN.
97
+ const componentsVersionSri = constants.LOCAL_STORAGE_OVERRIDE
98
+ ? undefined
99
+ : await tslib.__classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersionSri).call(this);
94
100
  await this.injectNpmLib(constants.WEB_COMPONENTS_UI_LIB_NAME, componentsVersion, constants.JS_FILE_PATH, [constants.LOCAL_STORAGE_OVERRIDE], componentsVersionSri);
95
101
  this.logger.debug('DescopeUI was loaded');
96
102
  return globalThis.DescopeUI;
@@ -1 +1 @@
1
- {"version":3,"file":"descopeUiMixin.js","sources":["../../../../src/mixins/descopeUiMixin/descopeUiMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { injectNpmLibMixin } from '../injectNpmLibMixin';\nimport { loggerMixin } from '../loggerMixin';\nimport { getDescopeUiComponentsList } from './helpers';\nimport {\n JS_FILE_PATH,\n LOCAL_STORAGE_OVERRIDE,\n WEB_COMPONENTS_UI_LIB_NAME,\n} from './constants';\n\nexport const descopeUiMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n configMixin,\n injectNpmLibMixin,\n )(superclass);\n\n return class DescopeUiMixinClass extends BaseClass {\n // eslint-disable-next-line class-methods-use-this\n async #getComponentsVersion() {\n const config = await this.config;\n const componentsVersion = config?.projectConfig?.componentsVersion;\n\n if (!componentsVersion) {\n this.logger.error('Could not get components version');\n } else {\n this.logger.debug(`Got component version \"${componentsVersion}\"`);\n }\n\n return componentsVersion;\n }\n\n async #getComponentsVersionSri() {\n const config = await this.config;\n const componentsVersionSri =\n config?.projectConfig?.componentsVersionSri;\n\n if (componentsVersionSri) {\n this.logger.debug('SRI hash available for components');\n }\n\n return componentsVersionSri;\n }\n\n #descopeUi: Promise<any>;\n\n get descopeUi() {\n if (!this.#descopeUi) {\n this.#descopeUi = this.#getDescopeUi();\n }\n\n return this.#descopeUi;\n }\n\n async #loadDescopeUiComponent(componentName: string) {\n const isComponentAlreadyDefined = !!customElements.get(componentName);\n\n if (isComponentAlreadyDefined) {\n this.logger.debug(\n `Loading component \"${componentName}\" is skipped as it is already defined`,\n );\n return undefined;\n }\n\n const descopeUI = await this.descopeUi;\n\n if (!descopeUI[componentName]) {\n this.logger.error(\n `Cannot load UI component \"${componentName}\"`,\n `Descope UI does not have a component named \"${componentName}\", available components are: \"${Object.keys(\n descopeUI,\n ).join(', ')}\"`,\n );\n return undefined;\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/return-await\n return await descopeUI[componentName]();\n } catch (e) {\n // this error is thrown when trying to register a component which is already registered\n // when running 2 flows on the same page, it might happen that the register fn is called twice\n // in case it happens, we are silently ignore the error\n if (e.name === 'NotSupportedError') {\n // eslint-disable-next-line no-console\n console.debug(\n `Encountered an error while attempting to define the \"${componentName}\" component, it is likely that this component is already defined`,\n );\n } else {\n throw e;\n }\n }\n\n return undefined;\n }\n\n async #getDescopeUi() {\n if (globalThis.DescopeUI) {\n return globalThis.DescopeUI;\n }\n\n try {\n const componentsVersion = await this.#getComponentsVersion();\n const componentsVersionSri = await this.#getComponentsVersionSri();\n\n await this.injectNpmLib(\n WEB_COMPONENTS_UI_LIB_NAME,\n componentsVersion,\n JS_FILE_PATH,\n [LOCAL_STORAGE_OVERRIDE],\n componentsVersionSri,\n );\n this.logger.debug('DescopeUI was loaded');\n return globalThis.DescopeUI;\n } catch (error) {\n this.logger.error(error);\n throw new Error('DescopeUI was not loaded');\n }\n }\n\n async loadDescopeUiComponents(\n templateOrComponentNames: HTMLTemplateElement | string[],\n ) {\n const descopeUiComponentsList = Array.isArray(templateOrComponentNames)\n ? templateOrComponentNames\n : getDescopeUiComponentsList(templateOrComponentNames);\n\n return Promise.all(\n descopeUiComponentsList.map((componentName: string) =>\n this.#loadDescopeUiComponent(componentName),\n ),\n );\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","loggerMixin","configMixin","injectNpmLibMixin","__classPrivateFieldGet","__classPrivateFieldSet","getDescopeUiComponentsList","WEB_COMPONENTS_UI_LIB_NAME","JS_FILE_PATH","LOCAL_STORAGE_OVERRIDE"],"mappings":"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"}
1
+ {"version":3,"file":"descopeUiMixin.js","sources":["../../../../src/mixins/descopeUiMixin/descopeUiMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { injectNpmLibMixin } from '../injectNpmLibMixin';\nimport { loggerMixin } from '../loggerMixin';\nimport { getDescopeUiComponentsList } from './helpers';\nimport {\n JS_FILE_PATH,\n LOCAL_STORAGE_OVERRIDE,\n WEB_COMPONENTS_UI_LIB_NAME,\n} from './constants';\n\nexport const descopeUiMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n configMixin,\n injectNpmLibMixin,\n )(superclass);\n\n return class DescopeUiMixinClass extends BaseClass {\n // eslint-disable-next-line class-methods-use-this\n async #getComponentsVersion() {\n const config = await this.config;\n const componentsVersion = config?.projectConfig?.componentsVersion;\n\n if (!componentsVersion) {\n this.logger.error('Could not get components version');\n } else {\n this.logger.debug(`Got component version \"${componentsVersion}\"`);\n }\n\n return componentsVersion;\n }\n\n async #getComponentsVersionSri() {\n const config = await this.config;\n const componentsVersionSri =\n config?.projectConfig?.componentsVersionSri;\n\n if (componentsVersionSri) {\n this.logger.debug('SRI hash available for components');\n }\n\n return componentsVersionSri;\n }\n\n #descopeUi: Promise<any>;\n\n get descopeUi() {\n if (!this.#descopeUi) {\n this.#descopeUi = this.#getDescopeUi();\n }\n\n return this.#descopeUi;\n }\n\n async #loadDescopeUiComponent(componentName: string) {\n const isComponentAlreadyDefined = !!customElements.get(componentName);\n\n if (isComponentAlreadyDefined) {\n this.logger.debug(\n `Loading component \"${componentName}\" is skipped as it is already defined`,\n );\n return undefined;\n }\n\n const descopeUI = await this.descopeUi;\n\n if (!descopeUI[componentName]) {\n this.logger.error(\n `Cannot load UI component \"${componentName}\"`,\n `Descope UI does not have a component named \"${componentName}\", available components are: \"${Object.keys(\n descopeUI,\n ).join(', ')}\"`,\n );\n return undefined;\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/return-await\n return await descopeUI[componentName]();\n } catch (e) {\n // this error is thrown when trying to register a component which is already registered\n // when running 2 flows on the same page, it might happen that the register fn is called twice\n // in case it happens, we are silently ignore the error\n if (e.name === 'NotSupportedError') {\n // eslint-disable-next-line no-console\n console.debug(\n `Encountered an error while attempting to define the \"${componentName}\" component, it is likely that this component is already defined`,\n );\n } else {\n throw e;\n }\n }\n\n return undefined;\n }\n\n async #getDescopeUi() {\n if (globalThis.DescopeUI) {\n return globalThis.DescopeUI;\n }\n\n try {\n const componentsVersion = await this.#getComponentsVersion();\n // When the dev-panel override is set, the URL points at a locally\n // built bundle whose bytes won't match the CDN-published SRI hash.\n // Skip SRI in that case so the override actually loads instead of\n // failing the integrity check and falling back to the CDN.\n const componentsVersionSri = LOCAL_STORAGE_OVERRIDE\n ? undefined\n : await this.#getComponentsVersionSri();\n\n await this.injectNpmLib(\n WEB_COMPONENTS_UI_LIB_NAME,\n componentsVersion,\n JS_FILE_PATH,\n [LOCAL_STORAGE_OVERRIDE],\n componentsVersionSri,\n );\n this.logger.debug('DescopeUI was loaded');\n return globalThis.DescopeUI;\n } catch (error) {\n this.logger.error(error);\n throw new Error('DescopeUI was not loaded');\n }\n }\n\n async loadDescopeUiComponents(\n templateOrComponentNames: HTMLTemplateElement | string[],\n ) {\n const descopeUiComponentsList = Array.isArray(templateOrComponentNames)\n ? templateOrComponentNames\n : getDescopeUiComponentsList(templateOrComponentNames);\n\n return Promise.all(\n descopeUiComponentsList.map((componentName: string) =>\n this.#loadDescopeUiComponent(componentName),\n ),\n );\n }\n };\n },\n);\n"],"names":["createSingletonMixin","compose","loggerMixin","configMixin","injectNpmLibMixin","__classPrivateFieldGet","__classPrivateFieldSet","getDescopeUiComponentsList","LOCAL_STORAGE_OVERRIDE","WEB_COMPONENTS_UI_LIB_NAME","JS_FILE_PATH"],"mappings":";;;;;;;;;;MAWa,cAAc,GAAGA,+BAAoB,CAChD,CAAqC,UAAa,KAAI;;AACpD,IAAA,MAAM,SAAS,GAAGC,kBAAO,CACvBC,uBAAW,EACXC,uBAAW,EACXC,mCAAiB,CAClB,CAAC,UAAU,CAAC,CAAC;IAEd,OAAO,EAAA,GAAA,MAAM,mBAAoB,SAAQ,SAAS,CAAA;AAA3C,YAAA,WAAA,GAAA;;;gBA2BL,8BAAyB,CAAA,GAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;aA+F1B;AA7FC,YAAA,IAAI,SAAS,GAAA;AACX,gBAAA,IAAI,CAACC,4BAAA,CAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,CAAW,EAAE;oBACpBC,4BAAA,CAAA,IAAI,kCAAcD,4BAAA,CAAA,IAAI,yEAAc,CAAlB,IAAA,CAAA,IAAI,CAAgB,EAAA,GAAA,CAAA,CAAC;iBACxC;gBAED,OAAOA,4BAAA,CAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,CAAW,CAAC;aACxB;YA0ED,MAAM,uBAAuB,CAC3B,wBAAwD,EAAA;AAExD,gBAAA,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC;AACrE,sBAAE,wBAAwB;AAC1B,sBAAEE,kCAA0B,CAAC,wBAAwB,CAAC,CAAC;gBAEzD,OAAO,OAAO,CAAC,GAAG,CAChB,uBAAuB,CAAC,GAAG,CAAC,CAAC,aAAqB,KAChDF,4BAAA,CAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,EAAA,2CAAA,CAAwB,CAA5B,IAAA,CAAA,IAAI,EAAyB,aAAa,CAAC,CAC5C,CACF,CAAC;aACH;AACF,SAAA;;;;;QAxHC,eAAK,yCAAA,GAAA;;AACH,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;AACjC,YAAA,MAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAiB,CAAC;YAEnE,IAAI,CAAC,iBAAiB,EAAE;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACvD;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAA0B,uBAAA,EAAA,iBAAiB,CAAG,CAAA,CAAA,CAAC,CAAC;aACnE;AAED,YAAA,OAAO,iBAAiB,CAAC;SAC1B;uDAED,eAAK,4CAAA,GAAA;;AACH,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC;AACjC,YAAA,MAAM,oBAAoB,GACxB,CAAA,EAAA,GAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAoB,CAAC;YAE9C,IAAI,oBAAoB,EAAE;AACxB,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;aACxD;AAED,YAAA,OAAO,oBAAoB,CAAC;SAC7B;AAYD,QAAA,2CAAA,GAAA,2DAA8B,aAAqB,EAAA;YACjD,MAAM,yBAAyB,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAEtE,IAAI,yBAAyB,EAAE;gBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,CAAsB,mBAAA,EAAA,aAAa,CAAuC,qCAAA,CAAA,CAC3E,CAAC;AACF,gBAAA,OAAO,SAAS,CAAC;aAClB;AAED,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;AAEvC,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;gBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,6BAA6B,aAAa,CAAA,CAAA,CAAG,EAC7C,CAAA,4CAAA,EAA+C,aAAa,CAAA,8BAAA,EAAiC,MAAM,CAAC,IAAI,CACtG,SAAS,CACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAG,CAAA,CAAA,CAChB,CAAC;AACF,gBAAA,OAAO,SAAS,CAAC;aAClB;AAED,YAAA,IAAI;;AAEF,gBAAA,OAAO,MAAM,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;aACzC;YAAC,OAAO,CAAC,EAAE;;;;AAIV,gBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,mBAAmB,EAAE;;AAElC,oBAAA,OAAO,CAAC,KAAK,CACX,wDAAwD,aAAa,CAAA,gEAAA,CAAkE,CACxI,CAAC;iBACH;qBAAM;AACL,oBAAA,MAAM,CAAC,CAAC;iBACT;aACF;AAED,YAAA,OAAO,SAAS,CAAC;SAClB;4CAED,eAAK,iCAAA,GAAA;AACH,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,OAAO,UAAU,CAAC,SAAS,CAAC;aAC7B;AAED,YAAA,IAAI;gBACF,MAAM,iBAAiB,GAAG,MAAMA,4BAAA,CAAA,IAAI,EAAsB,8BAAA,EAAA,GAAA,EAAA,yCAAA,CAAA,CAAA,IAAA,CAA1B,IAAI,CAAwB,CAAC;;;;;gBAK7D,MAAM,oBAAoB,GAAGG,gCAAsB;AACjD,sBAAE,SAAS;sBACT,MAAMH,4BAAA,CAAA,IAAI,oFAAyB,CAA7B,IAAA,CAAA,IAAI,CAA2B,CAAC;AAE1C,gBAAA,MAAM,IAAI,CAAC,YAAY,CACrBI,oCAA0B,EAC1B,iBAAiB,EACjBC,sBAAY,EACZ,CAACF,gCAAsB,CAAC,EACxB,oBAAoB,CACrB,CAAC;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC1C,OAAO,UAAU,CAAC,SAAS,CAAC;aAC7B;YAAC,OAAO,KAAK,EAAE;AACd,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzB,gBAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;aAC7C;SACF;AAeD,QAAA,EAAA,CAAA;AACJ,CAAC;;;;"}
@@ -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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"}
package/dist/esm/index.js CHANGED
@@ -14,6 +14,7 @@ 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';
17
18
  export { widgetIdMixin } from './mixins/widgetIdMixin.js';
18
19
  export { widgetConfigMixin } from './mixins/widgetConfigMixin/widgetConfigMixin.js';
19
20
  export { baseUrlMixin } from './mixins/baseUrlMixin.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,7 +4,7 @@ import { configMixin } from '../configMixin/configMixin.js';
4
4
  import { injectNpmLibMixin } from '../injectNpmLibMixin/injectNpmLibMixin.js';
5
5
  import { loggerMixin } from '../loggerMixin/loggerMixin.js';
6
6
  import { getDescopeUiComponentsList } from './helpers.js';
7
- import { WEB_COMPONENTS_UI_LIB_NAME, JS_FILE_PATH, LOCAL_STORAGE_OVERRIDE } from './constants.js';
7
+ import { LOCAL_STORAGE_OVERRIDE, WEB_COMPONENTS_UI_LIB_NAME, JS_FILE_PATH } from './constants.js';
8
8
 
9
9
  const descopeUiMixin = createSingletonMixin((superclass) => {
10
10
  var _DescopeUiMixinClass_instances, _DescopeUiMixinClass_getComponentsVersion, _DescopeUiMixinClass_getComponentsVersionSri, _DescopeUiMixinClass_descopeUi, _DescopeUiMixinClass_loadDescopeUiComponent, _DescopeUiMixinClass_getDescopeUi, _a;
@@ -88,7 +88,13 @@ const descopeUiMixin = createSingletonMixin((superclass) => {
88
88
  }
89
89
  try {
90
90
  const componentsVersion = await __classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersion).call(this);
91
- const componentsVersionSri = await __classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersionSri).call(this);
91
+ // When the dev-panel override is set, the URL points at a locally
92
+ // built bundle whose bytes won't match the CDN-published SRI hash.
93
+ // Skip SRI in that case so the override actually loads instead of
94
+ // failing the integrity check and falling back to the CDN.
95
+ const componentsVersionSri = LOCAL_STORAGE_OVERRIDE
96
+ ? undefined
97
+ : await __classPrivateFieldGet(this, _DescopeUiMixinClass_instances, "m", _DescopeUiMixinClass_getComponentsVersionSri).call(this);
92
98
  await this.injectNpmLib(WEB_COMPONENTS_UI_LIB_NAME, componentsVersion, JS_FILE_PATH, [LOCAL_STORAGE_OVERRIDE], componentsVersionSri);
93
99
  this.logger.debug('DescopeUI was loaded');
94
100
  return globalThis.DescopeUI;
@@ -1 +1 @@
1
- {"version":3,"file":"descopeUiMixin.js","sources":["../../../../src/mixins/descopeUiMixin/descopeUiMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { injectNpmLibMixin } from '../injectNpmLibMixin';\nimport { loggerMixin } from '../loggerMixin';\nimport { getDescopeUiComponentsList } from './helpers';\nimport {\n JS_FILE_PATH,\n LOCAL_STORAGE_OVERRIDE,\n WEB_COMPONENTS_UI_LIB_NAME,\n} from './constants';\n\nexport const descopeUiMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n configMixin,\n injectNpmLibMixin,\n )(superclass);\n\n return class DescopeUiMixinClass extends BaseClass {\n // eslint-disable-next-line class-methods-use-this\n async #getComponentsVersion() {\n const config = await this.config;\n const componentsVersion = config?.projectConfig?.componentsVersion;\n\n if (!componentsVersion) {\n this.logger.error('Could not get components version');\n } else {\n this.logger.debug(`Got component version \"${componentsVersion}\"`);\n }\n\n return componentsVersion;\n }\n\n async #getComponentsVersionSri() {\n const config = await this.config;\n const componentsVersionSri =\n config?.projectConfig?.componentsVersionSri;\n\n if (componentsVersionSri) {\n this.logger.debug('SRI hash available for components');\n }\n\n return componentsVersionSri;\n }\n\n #descopeUi: Promise<any>;\n\n get descopeUi() {\n if (!this.#descopeUi) {\n this.#descopeUi = this.#getDescopeUi();\n }\n\n return this.#descopeUi;\n }\n\n async #loadDescopeUiComponent(componentName: string) {\n const isComponentAlreadyDefined = !!customElements.get(componentName);\n\n if (isComponentAlreadyDefined) {\n this.logger.debug(\n `Loading component \"${componentName}\" is skipped as it is already defined`,\n );\n return undefined;\n }\n\n const descopeUI = await this.descopeUi;\n\n if (!descopeUI[componentName]) {\n this.logger.error(\n `Cannot load UI component \"${componentName}\"`,\n `Descope UI does not have a component named \"${componentName}\", available components are: \"${Object.keys(\n descopeUI,\n ).join(', ')}\"`,\n );\n return undefined;\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/return-await\n return await descopeUI[componentName]();\n } catch (e) {\n // this error is thrown when trying to register a component which is already registered\n // when running 2 flows on the same page, it might happen that the register fn is called twice\n // in case it happens, we are silently ignore the error\n if (e.name === 'NotSupportedError') {\n // eslint-disable-next-line no-console\n console.debug(\n `Encountered an error while attempting to define the \"${componentName}\" component, it is likely that this component is already defined`,\n );\n } else {\n throw e;\n }\n }\n\n return undefined;\n }\n\n async #getDescopeUi() {\n if (globalThis.DescopeUI) {\n return globalThis.DescopeUI;\n }\n\n try {\n const componentsVersion = await this.#getComponentsVersion();\n const componentsVersionSri = await this.#getComponentsVersionSri();\n\n await this.injectNpmLib(\n WEB_COMPONENTS_UI_LIB_NAME,\n componentsVersion,\n JS_FILE_PATH,\n [LOCAL_STORAGE_OVERRIDE],\n componentsVersionSri,\n );\n this.logger.debug('DescopeUI was loaded');\n return globalThis.DescopeUI;\n } catch (error) {\n this.logger.error(error);\n throw new Error('DescopeUI was not loaded');\n }\n }\n\n async loadDescopeUiComponents(\n templateOrComponentNames: HTMLTemplateElement | string[],\n ) {\n const descopeUiComponentsList = Array.isArray(templateOrComponentNames)\n ? templateOrComponentNames\n : getDescopeUiComponentsList(templateOrComponentNames);\n\n return Promise.all(\n descopeUiComponentsList.map((componentName: string) =>\n this.#loadDescopeUiComponent(componentName),\n ),\n );\n }\n };\n },\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"descopeUiMixin.js","sources":["../../../../src/mixins/descopeUiMixin/descopeUiMixin.ts"],"sourcesContent":["import { compose, createSingletonMixin } from '@descope/sdk-helpers';\nimport { configMixin } from '../configMixin';\nimport { injectNpmLibMixin } from '../injectNpmLibMixin';\nimport { loggerMixin } from '../loggerMixin';\nimport { getDescopeUiComponentsList } from './helpers';\nimport {\n JS_FILE_PATH,\n LOCAL_STORAGE_OVERRIDE,\n WEB_COMPONENTS_UI_LIB_NAME,\n} from './constants';\n\nexport const descopeUiMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) => {\n const BaseClass = compose(\n loggerMixin,\n configMixin,\n injectNpmLibMixin,\n )(superclass);\n\n return class DescopeUiMixinClass extends BaseClass {\n // eslint-disable-next-line class-methods-use-this\n async #getComponentsVersion() {\n const config = await this.config;\n const componentsVersion = config?.projectConfig?.componentsVersion;\n\n if (!componentsVersion) {\n this.logger.error('Could not get components version');\n } else {\n this.logger.debug(`Got component version \"${componentsVersion}\"`);\n }\n\n return componentsVersion;\n }\n\n async #getComponentsVersionSri() {\n const config = await this.config;\n const componentsVersionSri =\n config?.projectConfig?.componentsVersionSri;\n\n if (componentsVersionSri) {\n this.logger.debug('SRI hash available for components');\n }\n\n return componentsVersionSri;\n }\n\n #descopeUi: Promise<any>;\n\n get descopeUi() {\n if (!this.#descopeUi) {\n this.#descopeUi = this.#getDescopeUi();\n }\n\n return this.#descopeUi;\n }\n\n async #loadDescopeUiComponent(componentName: string) {\n const isComponentAlreadyDefined = !!customElements.get(componentName);\n\n if (isComponentAlreadyDefined) {\n this.logger.debug(\n `Loading component \"${componentName}\" is skipped as it is already defined`,\n );\n return undefined;\n }\n\n const descopeUI = await this.descopeUi;\n\n if (!descopeUI[componentName]) {\n this.logger.error(\n `Cannot load UI component \"${componentName}\"`,\n `Descope UI does not have a component named \"${componentName}\", available components are: \"${Object.keys(\n descopeUI,\n ).join(', ')}\"`,\n );\n return undefined;\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/return-await\n return await descopeUI[componentName]();\n } catch (e) {\n // this error is thrown when trying to register a component which is already registered\n // when running 2 flows on the same page, it might happen that the register fn is called twice\n // in case it happens, we are silently ignore the error\n if (e.name === 'NotSupportedError') {\n // eslint-disable-next-line no-console\n console.debug(\n `Encountered an error while attempting to define the \"${componentName}\" component, it is likely that this component is already defined`,\n );\n } else {\n throw e;\n }\n }\n\n return undefined;\n }\n\n async #getDescopeUi() {\n if (globalThis.DescopeUI) {\n return globalThis.DescopeUI;\n }\n\n try {\n const componentsVersion = await this.#getComponentsVersion();\n // When the dev-panel override is set, the URL points at a locally\n // built bundle whose bytes won't match the CDN-published SRI hash.\n // Skip SRI in that case so the override actually loads instead of\n // failing the integrity check and falling back to the CDN.\n const componentsVersionSri = LOCAL_STORAGE_OVERRIDE\n ? undefined\n : await this.#getComponentsVersionSri();\n\n await this.injectNpmLib(\n WEB_COMPONENTS_UI_LIB_NAME,\n componentsVersion,\n JS_FILE_PATH,\n [LOCAL_STORAGE_OVERRIDE],\n componentsVersionSri,\n );\n this.logger.debug('DescopeUI was loaded');\n return globalThis.DescopeUI;\n } catch (error) {\n this.logger.error(error);\n throw new Error('DescopeUI was not loaded');\n }\n }\n\n async loadDescopeUiComponents(\n templateOrComponentNames: HTMLTemplateElement | string[],\n ) {\n const descopeUiComponentsList = Array.isArray(templateOrComponentNames)\n ? templateOrComponentNames\n : getDescopeUiComponentsList(templateOrComponentNames);\n\n return Promise.all(\n descopeUiComponentsList.map((componentName: string) =>\n this.#loadDescopeUiComponent(componentName),\n ),\n );\n }\n };\n },\n);\n"],"names":[],"mappings":"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"}
@@ -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":";;AAEO,MAAM,mBAAmB,GAAG,CAAC,OAAe,KACjD,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE;AAErB,MAAA,yBAAyB,GAAG,CAAC,KAAc,KAAmB;AACzE,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;KACtD;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,IAAI,CAAC;AAC3C,IAAA,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI,CAAC;AACrC,IAAA,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,EAAE;AAEK,MAAM,aAAa,GAAG,CAC3B,GAAwB,EACxB,OAA8B,EAC9B,MAAM,GAAG,EAAE,KAEX,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC/C,IAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE;QAC7B,OAAO,CAAC,kDAAkD,CAAC,CAAC;AAC5D,QAAA,OAAO,GAAG,CAAC;KACZ;AACD,IAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,GAAG,CAAE,CAAA,GAAG,GAAG,CAAC;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE;QAC/C,OAAO,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;KAClD;AACD,IAAA,MAAM,eAAe,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;AACzD,IAAA,IAAI,eAAe,KAAK,IAAI,EAAE;QAC5B,OAAO,CAAC,2CAA2C,CAAC,CAAC;AACrD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD,IAAA,OAAO,GAAG,GAAG,CAAA,UAAA,EAAa,IAAI,CAAI,CAAA,EAAA,eAAe,GAAG,CAAC;AACvD,CAAC,EAAE,EAAE,EAAE;AAEI,MAAA,QAAQ,GAAG,CAAC,GAAW,KAAI;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC5C,IAAA,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;AAChB,IAAA,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;AACxB,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE;AAEW,MAAA,YAAY,GAAG,YAAW;IACrC,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAClE,IAAA,MAAM,aAAa,GAAG,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAE,OAAO,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;;AAGzE,IAAA,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,aAAa,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACnD,IAAA,SAAS,CAAC,GAAG,GAAG,aAAa,CAAC;AAC9B,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAErC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACpC,QAAA,SAAS,CAAC,MAAM,GAAG,OAAO,CAAC;AAC3B,QAAA,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;AAC7B,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,UAAU,CAAC,UAAU,EAAE;QACzB,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC;QAExE,OAAO;AACL,YAAA,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC;AACjC,YAAA,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;SAC9B,CAAC;KACH;AACH;;;;"}
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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"}