{"version":3,"file":"create-theme.mjs","sources":["../../../../../../theme/src/core/create-theme.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport { ref, watch } from 'vue'\nimport {\n  argbFromHex,\n  themeFromSourceColor,\n} from '@material/material-color-utilities'\nimport type { CustomColor } from '@material/material-color-utilities'\nimport { uesThemeProvider } from '../hooks'\nimport type { ThemeConfig, ThemePaletteColor } from './types'\nimport { Theme } from './types'\nimport defaultTheme from './default.theme'\nimport {\n  injectJSS,\n  mergeParsedScheme,\n  parseCustomScheme,\n  parseShceme,\n} from './utils'\n\n/**\n * The hook to create the theme\n * @param {string} source The source color of the theme, the value should be \"Hex\"\n * @param {ThemeConfig} config The object to customize the theme\n * @returns {Ref<Theme> } Theme object\n */\nexport const createTheme = (\n  source = defaultTheme.source,\n  config: ThemeConfig = {},\n  customColors: CustomColor[] = defaultTheme.customColors\n): Ref<Theme> => {\n  const { palette: $palette, mode } = config\n  const theme = ref<Theme>(new Theme({} as ThemePaletteColor, mode))\n  const html = document.documentElement as HTMLElement\n\n  const dynamicTheme = themeFromSourceColor(argbFromHex(source), [\n    ...customColors,\n    ...(config.customColors ?? []),\n  ])\n\n  const lightPalette = mergeParsedScheme(\n    parseShceme(dynamicTheme.schemes.light),\n    parseCustomScheme(dynamicTheme.customColors, 'light')\n  )\n  const darkPalette = mergeParsedScheme(\n    parseShceme(dynamicTheme.schemes.dark),\n    parseCustomScheme(dynamicTheme.customColors, 'dark')\n  )\n\n  watch(\n    () => theme.value.mode,\n    newVal => {\n      html.setAttribute('data-theme', newVal)\n      const { palette } = newVal === 'dark' ? darkPalette! : lightPalette!\n\n      theme.value = new Theme(\n        { ...palette, ...$palette } as ThemePaletteColor,\n        newVal\n      )\n    },\n    { immediate: true }\n  )\n\n  injectJSS(lightPalette, darkPalette, theme.value)\n\n  uesThemeProvider(theme)\n  return theme\n}\n\nexport default createTheme\n"],"names":[],"mappings":";;;;;;;;;;AAwBa,MAAA,WAAA,GAAc,CACzB,MAAA,GAAS,YAAa,CAAA,MAAA,EACtB,SAAsB,EAAC,EACvB,YAA8B,GAAA,YAAA,CAAa,YAC5B,KAAA;AA5BjB,EAAA,IAAA,EAAA,CAAA;AA6BE,EAAA,MAAM,EAAE,OAAA,EAAS,QAAU,EAAA,IAAA,EAAS,GAAA,MAAA,CAAA;AACpC,EAAA,MAAM,QAAQ,GAAW,CAAA,IAAI,MAAM,EAAC,EAAwB,IAAI,CAAC,CAAA,CAAA;AACjE,EAAA,MAAM,OAAO,QAAS,CAAA,eAAA,CAAA;AAEtB,EAAA,MAAM,YAAe,GAAA,oBAAA,CAAqB,WAAY,CAAA,MAAM,CAAG,EAAA;AAAA,IAC7D,GAAG,YAAA;AAAA,IACH,GAAI,CAAA,EAAA,GAAA,MAAA,CAAO,YAAP,KAAA,IAAA,GAAA,EAAA,GAAuB,EAAC;AAAA,GAC7B,CAAA,CAAA;AAED,EAAA,MAAM,YAAe,GAAA,iBAAA;AAAA,IACnB,WAAA,CAAY,YAAa,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACtC,iBAAA,CAAkB,YAAa,CAAA,YAAA,EAAc,OAAO,CAAA;AAAA,GACtD,CAAA;AACA,EAAA,MAAM,WAAc,GAAA,iBAAA;AAAA,IAClB,WAAA,CAAY,YAAa,CAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,IACrC,iBAAA,CAAkB,YAAa,CAAA,YAAA,EAAc,MAAM,CAAA;AAAA,GACrD,CAAA;AAEA,EAAA,KAAA;AAAA,IACE,MAAM,MAAM,KAAM,CAAA,IAAA;AAAA,IAClB,CAAU,MAAA,KAAA;AACR,MAAK,IAAA,CAAA,YAAA,CAAa,cAAc,MAAM,CAAA,CAAA;AACtC,MAAA,MAAM,EAAE,OAAA,EAAY,GAAA,MAAA,KAAW,SAAS,WAAe,GAAA,YAAA,CAAA;AAEvD,MAAA,KAAA,CAAM,QAAQ,IAAI,KAAA;AAAA,QAChB,EAAE,GAAG,OAAS,EAAA,GAAG,QAAS,EAAA;AAAA,QAC1B,MAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,IACA,EAAE,WAAW,IAAK,EAAA;AAAA,GACpB,CAAA;AAEA,EAAU,SAAA,CAAA,YAAA,EAAc,WAAa,EAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAEhD,EAAA,gBAAA,CAAiB,KAAK,CAAA,CAAA;AACtB,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}