@descope/sdk-mixins 0.12.0 → 0.13.1

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 (76) hide show
  1. package/dist/cjs/index.js +6 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/mixins/cspNonceMixin.js +34 -0
  4. package/dist/cjs/mixins/cspNonceMixin.js.map +1 -0
  5. package/dist/cjs/mixins/debuggerMixin/debugger-wc.js +5 -10
  6. package/dist/cjs/mixins/debuggerMixin/debugger-wc.js.map +1 -1
  7. package/dist/cjs/mixins/descopeUiMixin/constants.js +6 -17
  8. package/dist/cjs/mixins/descopeUiMixin/constants.js.map +1 -1
  9. package/dist/cjs/mixins/descopeUiMixin/descopeUiMixin.js +17 -89
  10. package/dist/cjs/mixins/descopeUiMixin/descopeUiMixin.js.map +1 -1
  11. package/dist/cjs/mixins/descopeUiMixin/helpers.js +0 -10
  12. package/dist/cjs/mixins/descopeUiMixin/helpers.js.map +1 -1
  13. package/dist/cjs/mixins/initElementMixin.js +15 -17
  14. package/dist/cjs/mixins/initElementMixin.js.map +1 -1
  15. package/dist/cjs/mixins/injectNpmLibMixin/constants.js +10 -0
  16. package/dist/cjs/mixins/injectNpmLibMixin/constants.js.map +1 -0
  17. package/dist/cjs/mixins/injectNpmLibMixin/helpers.js +112 -0
  18. package/dist/cjs/mixins/injectNpmLibMixin/helpers.js.map +1 -0
  19. package/dist/cjs/mixins/injectNpmLibMixin/injectNpmLibMixin.js +28 -0
  20. package/dist/cjs/mixins/injectNpmLibMixin/injectNpmLibMixin.js.map +1 -0
  21. package/dist/cjs/mixins/injectStyleMixin.js +62 -0
  22. package/dist/cjs/mixins/injectStyleMixin.js.map +1 -0
  23. package/dist/cjs/mixins/themeMixin/themeMixin.js +5 -10
  24. package/dist/cjs/mixins/themeMixin/themeMixin.js.map +1 -1
  25. package/dist/esm/index.js +3 -0
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/mixins/cspNonceMixin.js +32 -0
  28. package/dist/esm/mixins/cspNonceMixin.js.map +1 -0
  29. package/dist/esm/mixins/debuggerMixin/debugger-wc.js +6 -11
  30. package/dist/esm/mixins/debuggerMixin/debugger-wc.js.map +1 -1
  31. package/dist/esm/mixins/descopeUiMixin/constants.js +4 -11
  32. package/dist/esm/mixins/descopeUiMixin/constants.js.map +1 -1
  33. package/dist/esm/mixins/descopeUiMixin/descopeUiMixin.js +18 -90
  34. package/dist/esm/mixins/descopeUiMixin/descopeUiMixin.js.map +1 -1
  35. package/dist/esm/mixins/descopeUiMixin/helpers.js +1 -9
  36. package/dist/esm/mixins/descopeUiMixin/helpers.js.map +1 -1
  37. package/dist/esm/mixins/initElementMixin.js +15 -17
  38. package/dist/esm/mixins/initElementMixin.js.map +1 -1
  39. package/dist/esm/mixins/injectNpmLibMixin/constants.js +8 -0
  40. package/dist/esm/mixins/injectNpmLibMixin/constants.js.map +1 -0
  41. package/dist/esm/mixins/injectNpmLibMixin/helpers.js +109 -0
  42. package/dist/esm/mixins/injectNpmLibMixin/helpers.js.map +1 -0
  43. package/dist/esm/mixins/injectNpmLibMixin/injectNpmLibMixin.js +26 -0
  44. package/dist/esm/mixins/injectNpmLibMixin/injectNpmLibMixin.js.map +1 -0
  45. package/dist/esm/mixins/injectStyleMixin.js +60 -0
  46. package/dist/esm/mixins/injectStyleMixin.js.map +1 -0
  47. package/dist/esm/mixins/themeMixin/themeMixin.js +5 -10
  48. package/dist/esm/mixins/themeMixin/themeMixin.js.map +1 -1
  49. package/dist/index.d.ts +1270 -187
  50. package/dist/types/index.d.ts +3 -0
  51. package/dist/types/mixins/configMixin/configMixin.d.ts +12 -12
  52. package/dist/types/mixins/createStateManagementMixin.d.ts +2 -2
  53. package/dist/types/mixins/createValidateAttributesMixin/createValidateAttributesMixin.d.ts +5 -5
  54. package/dist/types/mixins/cspNonceMixin.d.ts +341 -0
  55. package/dist/types/mixins/debuggerMixin/debugger-wc.d.ts +353 -1
  56. package/dist/types/mixins/debuggerMixin/debuggerMixin.d.ts +8 -8
  57. package/dist/types/mixins/descopeUiMixin/constants.d.ts +3 -7
  58. package/dist/types/mixins/descopeUiMixin/descopeUiMixin.d.ts +26 -31
  59. package/dist/types/mixins/descopeUiMixin/helpers.d.ts +0 -1
  60. package/dist/types/mixins/formMixin.d.ts +2 -2
  61. package/dist/types/mixins/initElementMixin.d.ts +21 -2
  62. package/dist/types/mixins/initLifecycleMixin.d.ts +1 -1
  63. package/dist/types/mixins/injectNpmLibMixin/constants.d.ts +1 -0
  64. package/dist/types/mixins/injectNpmLibMixin/helpers.d.ts +7 -0
  65. package/dist/types/mixins/injectNpmLibMixin/index.d.ts +1 -0
  66. package/dist/types/mixins/injectNpmLibMixin/injectNpmLibMixin.d.ts +343 -0
  67. package/dist/types/mixins/injectStyleMixin.d.ts +354 -0
  68. package/dist/types/mixins/loggerMixin/loggerMixin.d.ts +2 -2
  69. package/dist/types/mixins/modalMixin/modalMixin.d.ts +40 -33
  70. package/dist/types/mixins/notificationsMixin/notificationsMixin.d.ts +40 -33
  71. package/dist/types/mixins/observeAttributesMixin/observeAttributesMixin.d.ts +4 -4
  72. package/dist/types/mixins/projectIdMixin.d.ts +5 -5
  73. package/dist/types/mixins/resetMixin.d.ts +6 -6
  74. package/dist/types/mixins/staticResourcesMixin/staticResourcesMixin.d.ts +8 -8
  75. package/dist/types/mixins/themeMixin/themeMixin.d.ts +53 -39
  76. package/package.json +20 -10
@@ -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 { loadDevTheme, loadFont } from './helpers';\nimport { observeAttributesMixin } from '../observeAttributesMixin';\nimport { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\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 )(superclass);\n\n return class ThemeMixinClass extends BaseClass {\n #globalStyle: CSSStyleSheet;\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 #_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) return;\n\n if (!this.#globalStyle) {\n this.#globalStyle = new CSSStyleSheet();\n this.shadowRoot.adoptedStyleSheets ??= [];\n this.shadowRoot.adoptedStyleSheets = [\n ...this.shadowRoot.adoptedStyleSheets,\n this.#globalStyle,\n ];\n }\n\n this.#globalStyle.replaceSync(\n (theme?.light?.globals || '') + (theme?.dark?.globals || ''),\n );\n }\n\n async #loadComponentsStyle() {\n const theme = { ...(await this.#themeResource) } as Record<string, any>;\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.#loadGlobalStyle();\n this.#loadComponentsStyle();\n this.#onThemeChange();\n\n this.observeAttributes(['theme'], this.#onThemeChange);\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":[],"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 { loadDevTheme, loadFont } from './helpers';\nimport { observeAttributesMixin } from '../observeAttributesMixin';\nimport { UI_COMPONENTS_URL_KEY } from '../descopeUiMixin/constants';\nimport { 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: ReturnType<typeof this.injectStyle>;\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 #_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) 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 #loadComponentsStyle() {\n const theme = { ...(await this.#themeResource) } as Record<string, any>;\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.#loadGlobalStyle();\n this.#loadComponentsStyle();\n this.#onThemeChange();\n\n this.observeAttributes(['theme'], this.#onThemeChange);\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":[],"mappings":"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"}