{"version":3,"sources":["../src/logger.ts","../src/injections.ts","../src/service.ts","../src/plugin.ts"],"names":["name"],"mappings":"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","file":"vue-color-scheme.mjs","sourcesContent":["import { TinyLogger, createTinyError } from '@fastkit/tiny-logger';\n\nconst name = 'vue-color-scheme';\n\nexport const logger = new TinyLogger(name);\n\nexport const ColorSchemeError = createTinyError(name);\n","import { InjectionKey } from 'vue';\nimport type { VueColorSchemeService } from './service';\n\nexport const VueColorSchemeServiceInjectionKey: InjectionKey<VueColorSchemeService> =\n  Symbol('VueColorSchemeService');\n","import { App, computed, inject, ref, Ref } from 'vue';\nimport { useHead } from '@unhead/vue';\nimport { ThemeName } from '@fastkit/color-scheme';\nimport {\n  PropKey,\n  ColorSchemeProps,\n  ColorSchemePropsOptions,\n  ColorSchemeHooksProps,\n  ColorClassesResult,\n  VueColorSchemeServiceSettings,\n} from './types';\nimport { ColorSchemeError } from './logger';\nimport { VueColorSchemeServiceInjectionKey } from './injections';\n\nexport function useColorVariantClasses(props: ColorSchemeHooksProps) {\n  const result = computed(() => {\n    const value = resolveFnValue(props.variant);\n    const className = value || undefined;\n    return {\n      value,\n      className,\n    };\n  });\n  return result;\n}\n\nexport function useThemeClass(\n  props: ColorSchemeHooksProps,\n  useRootThemeDefault?: boolean,\n) {\n  let service: VueColorSchemeService | undefined;\n  if (useRootThemeDefault) {\n    service = useColorScheme();\n  }\n  const result = computed(() => {\n    let value = resolveFnValue(props.theme);\n    if (!value && service) {\n      value = service.rootTheme as any;\n    }\n    const className = value ? `${value}-theme` : undefined;\n    return {\n      value,\n      className,\n    };\n  });\n  return result;\n}\n\nexport function toScopeColorClass(name: string) {\n  return `${name}-scope`;\n}\n\nexport function useScopeColorClass(props: ColorSchemeHooksProps) {\n  const result = computed(() => {\n    const value = resolveFnValue(props.color);\n    const className = value ? toScopeColorClass(value) : undefined;\n    return {\n      value,\n      className,\n    };\n  });\n  return result;\n}\n\nexport function toTextColorClass(name: string) {\n  return `${name}-text`;\n}\n\nfunction resolveFnValue<T extends string>(value?: T | (() => T | undefined)) {\n  return typeof value === 'function' ? value() : value;\n}\n\nexport function useTextColorClass(props: ColorSchemeHooksProps) {\n  const result = computed(() => {\n    const value = resolveFnValue(props.textColor);\n    const className = value ? toTextColorClass(value) : undefined;\n    return {\n      value,\n      className,\n    };\n  });\n  return result;\n}\n\nexport function useBorderColorClass(props: ColorSchemeHooksProps) {\n  const result = computed(() => {\n    const value = resolveFnValue(props.borderColor);\n    const className = value ? `${value}-border` : undefined;\n    return {\n      value,\n      className,\n    };\n  });\n  return result;\n}\n\nexport function useColorClasses(\n  props: ColorSchemeHooksProps,\n  opts: {\n    useRootThemeDefault?: boolean;\n  } = {},\n): ColorClassesResult {\n  const theme = useThemeClass(props, opts.useRootThemeDefault);\n  const color = useScopeColorClass(props);\n  const textColor = useTextColorClass(props);\n  const borderColor = useBorderColorClass(props);\n  const variant = useColorVariantClasses(props);\n\n  const colorClasses = computed(() => {\n    const classes = [theme, color, textColor, borderColor, variant]\n      .map((c) => c.value.className)\n      .filter((c) => !!c) as string[];\n    return classes;\n  });\n  return {\n    theme,\n    color,\n    textColor,\n    borderColor,\n    variant,\n    colorClasses,\n  };\n}\n\nexport function useColorScheme() {\n  const $color = inject(VueColorSchemeServiceInjectionKey);\n  if (!$color) throw new ColorSchemeError('missing provided color scheme');\n  return $color;\n}\n\nexport function useInjectTheme() {\n  const $color = useColorScheme();\n  const htmlClass = computed(() => `${$color.rootTheme}-theme`);\n  useHead({\n    htmlAttrs: {\n      class: htmlClass,\n    },\n  });\n  return $color;\n}\n\nexport function colorSchemeProps<\n  ThemeProp extends PropKey = 'theme',\n  ScopeProp extends PropKey = 'color',\n  TextColorProp extends PropKey = 'textColor',\n  BorderColorProp extends PropKey = 'borderColor',\n  Props = ColorSchemeProps<\n    ThemeProp,\n    ScopeProp,\n    TextColorProp,\n    BorderColorProp\n  >,\n>(\n  opts: ColorSchemePropsOptions<\n    ThemeProp,\n    ScopeProp,\n    TextColorProp,\n    BorderColorProp\n  > = {},\n) {\n  const {\n    theme = 'theme',\n    color = 'color',\n    textColor = 'textColor',\n    borderColor = 'borderColor',\n  } = opts;\n  const props = {\n    variant: String,\n  } as unknown as Props;\n  if (theme) (props as any)[theme] = String;\n  if (color) (props as any)[color] = String;\n  if (textColor) (props as any)[textColor] = String;\n  if (borderColor) (props as any)[borderColor] = String;\n  return props;\n}\n\nexport class VueColorSchemeService {\n  readonly _scheme: VueColorSchemeServiceSettings;\n\n  private _rootTheme: Ref<ThemeName>;\n\n  get scheme() {\n    return this._scheme;\n  }\n\n  get defaultTheme() {\n    return this._scheme.defaultTheme;\n  }\n\n  get themeNames() {\n    return this._scheme.themeNames;\n  }\n\n  get paletteNames() {\n    return this._scheme.paletteNames;\n  }\n\n  get scopeNames() {\n    return this._scheme.scopeNames;\n  }\n\n  get rootTheme() {\n    return this._rootTheme.value;\n  }\n\n  set rootTheme(rootTheme) {\n    this._rootTheme.value = rootTheme;\n  }\n\n  constructor(scheme: VueColorSchemeServiceSettings) {\n    this._scheme = scheme;\n    this._rootTheme = ref(this.defaultTheme);\n  }\n\n  provide(app: App) {\n    app.provide(VueColorSchemeServiceInjectionKey, this);\n  }\n}\n","import { App } from 'vue';\nimport { VueColorSchemeServiceSettings, ThemeName } from './types';\nimport { VueColorSchemeService } from './service';\n\nexport interface VueColorSchemePluginSettings\n  extends Omit<VueColorSchemeServiceSettings, 'defaultTheme'> {\n  defaultTheme?: ThemeName;\n}\n\nexport class VueColorSchemePlugin {\n  readonly settings: VueColorSchemeServiceSettings;\n\n  constructor(settings: VueColorSchemePluginSettings) {\n    let { defaultTheme } = settings;\n    if (!defaultTheme) {\n      defaultTheme = settings.themeNames[0];\n    }\n    this.settings = {\n      ...settings,\n      defaultTheme,\n    };\n  }\n\n  install(app: App) {\n    const $color = new VueColorSchemeService(this.settings);\n    $color.provide(app);\n  }\n}\n"]}