{"version":3,"file":"StyleContext.mjs","sources":["../../../../../packages/theme/cssinjs/StyleContext.ts"],"sourcesContent":["import type { InjectionKey, PropType, Ref, ShallowRef } from 'vue';\nimport type { Linter } from './linters/interface';\nimport type { Transformer } from './transformers/interface';\nimport {\n  defineComponent,\n  getCurrentInstance,\n  inject,\n  provide,\n  shallowRef,\n  unref,\n  watch,\n} from 'vue';\nimport CacheEntity from './Cache';\nimport { withInstall } from './util';\n\nexport const ATTR_TOKEN = 'data-token-hash';\nexport const ATTR_MARK = 'data-css-hash';\nexport const ATTR_CACHE_PATH = 'data-cache-path';\n\n// Mark css-in-js instance in style element\nexport const CSS_IN_JS_INSTANCE = '__cssinjs_instance__';\n\nexport function createCache() {\n  const cssinjsInstanceId = Math.random().toString(12).slice(2);\n\n  // Tricky SSR: Move all inline style to the head.\n  // PS: We do not recommend tricky mode.\n  if (typeof document !== 'undefined' && document.head && document.body) {\n    const styles = document.body.querySelectorAll(`style[${ATTR_MARK}]`) || [];\n    const { firstChild } = document.head;\n\n    Array.from(styles).forEach((style) => {\n      (style as any)[CSS_IN_JS_INSTANCE] = (style as any)[CSS_IN_JS_INSTANCE] || cssinjsInstanceId;\n\n      // Not force move if no head\n      if ((style as any)[CSS_IN_JS_INSTANCE] === cssinjsInstanceId)\n        document.head.insertBefore(style, firstChild);\n    });\n\n    // Deduplicate of moved styles\n    const styleHash: Record<string, boolean> = {};\n    Array.from(document.querySelectorAll(`style[${ATTR_MARK}]`)).forEach((style) => {\n      const hash = style.getAttribute(ATTR_MARK)!;\n      if (styleHash[hash]) {\n        if ((style as any)[CSS_IN_JS_INSTANCE] === cssinjsInstanceId)\n          style.parentNode?.removeChild(style);\n      } else {\n        styleHash[hash] = true;\n      }\n    });\n  }\n\n  return new CacheEntity(cssinjsInstanceId);\n}\n\nexport type HashPriority = 'low' | 'high';\n\nexport interface StyleContextProps {\n  autoClear?: boolean\n  /** @private Test only. Not work in production. */\n  mock?: 'server' | 'client'\n  /**\n   * Only set when you need ssr to extract style on you own.\n   * If not provided, it will auto create <style /> on the end of Provider in server side.\n   */\n  cache: CacheEntity\n  /** Tell children that this context is default generated context */\n  defaultCache: boolean\n  /** Use `:where` selector to reduce hashId css selector priority */\n  hashPriority?: HashPriority\n  /** Tell cssinjs where to inject style in */\n  container?: Element | ShadowRoot\n  /** Component wil render inline  `<style />` for fallback in SSR. Not recommend. */\n  ssrInline?: boolean\n  /** Transform css before inject in document. Please note that `transformers` do not support dynamic update */\n  transformers?: Transformer[]\n  /**\n   * Linters to lint css before inject in document.\n   * Styles will be linted after transforming.\n   * Please note that `linters` do not support dynamic update.\n   */\n  linters?: Linter[]\n}\n\nconst StyleContextKey: InjectionKey<ShallowRef<Partial<StyleContextProps>>>\n  = Symbol('StyleContextKey');\n\nexport type UseStyleProviderProps = Partial<StyleContextProps> | Ref<Partial<StyleContextProps>>;\n\n// fix: https://github.com/vueComponent/ant-design-vue/issues/7023\nfunction getCache() {\n  const instance = getCurrentInstance();\n  let cache: CacheEntity;\n  if (instance && instance.appContext) {\n    const globalCache = instance.appContext?.config?.globalProperties?.__ANTDV_CSSINJS_CACHE__;\n    if (globalCache) {\n      cache = globalCache;\n    } else {\n      cache = createCache();\n      if (instance.appContext.config.globalProperties)\n        instance.appContext.config.globalProperties.__ANTDV_CSSINJS_CACHE__ = cache;\n    }\n  } else {\n    cache = createCache();\n  }\n  return cache;\n}\n\nconst defaultStyleContext: StyleContextProps = {\n  cache: createCache(),\n  defaultCache: true,\n  hashPriority: 'low',\n};\n// fix: https://github.com/vueComponent/ant-design-vue/issues/6912\nexport function useStyleInject() {\n  const cache = getCache();\n  return inject(StyleContextKey, shallowRef({ ...defaultStyleContext, cache }));\n}\nexport function useStyleProvider(props: UseStyleProviderProps) {\n  const parentContext = useStyleInject();\n  const context = shallowRef<Partial<StyleContextProps>>({\n    ...defaultStyleContext,\n    cache: createCache(),\n  });\n  watch(\n    [() => unref(props), parentContext],\n    () => {\n      const mergedContext: Partial<StyleContextProps> = {\n        ...parentContext.value,\n      };\n      const propsValue = unref(props);\n      Object.keys(propsValue).forEach((key) => {\n        const value = propsValue[key];\n        if (propsValue[key] !== undefined)\n          mergedContext[key] = value;\n      });\n\n      const { cache } = propsValue;\n      mergedContext.cache = mergedContext.cache || createCache();\n      mergedContext.defaultCache = !cache && parentContext.value.defaultCache;\n      context.value = mergedContext;\n    },\n    { immediate: true },\n  );\n  provide(StyleContextKey, context);\n  return context;\n}\nexport interface StyleProviderProps {\n  autoClear?: boolean\n  /** @private Test only. Not work in production. */\n  mock?: 'server' | 'client'\n  /**\n   * Only set when you need ssr to extract style on you own.\n   * If not provided, it will auto create <style /> on the end of Provider in server side.\n   */\n  cache?: CacheEntity\n  /** Tell children that this context is default generated context */\n  defaultCache?: boolean\n  /** Use `:where` selector to reduce hashId css selector priority */\n  hashPriority?: HashPriority\n  /** Tell cssinjs where to inject style in */\n  container?: Element | ShadowRoot\n  /** Component wil render inline  `<style />` for fallback in SSR. Not recommend. */\n  ssrInline?: boolean\n  /** Transform css before inject in document. Please note that `transformers` do not support dynamic update */\n  transformers?: Transformer[]\n  /**\n   * Linters to lint css before inject in document.\n   * Styles will be linted after transforming.\n   * Please note that `linters` do not support dynamic update.\n   */\n  linters?: Linter[]\n}\nexport const StyleProvider = withInstall(defineComponent({\n  name: 'AStyleProvider',\n  inheritAttrs: false,\n  props: {\n    autoClear: Boolean,\n    mock: String as PropType<StyleProviderProps['mock']>,\n    cache: {\n      type: Object as PropType<StyleProviderProps['cache']>,\n    },\n    hashPriority: {\n      type: String as PropType<StyleProviderProps['hashPriority']>,\n    },\n    container: Object as PropType<StyleProviderProps['container']>,\n    ssrInline: Boolean,\n    transformers: Array as PropType<StyleProviderProps['transformers']>,\n    linters: Array as PropType<StyleProviderProps['linters']>,\n    defaultCache: {\n      type: Boolean,\n    },\n  },\n  setup(props, { slots }) {\n    useStyleProvider(props);\n    return () => slots.default?.();\n  },\n}));\n\nexport default {\n  useStyleInject,\n  useStyleProvider,\n  StyleProvider,\n};\n"],"names":["CacheEntity"],"mappings":";;;;AAeO,MAAM,UAAa,GAAA,kBAAA;AACnB,MAAM,SAAY,GAAA,gBAAA;AAClB,MAAM,eAAkB,GAAA,kBAAA;AAGxB,MAAM,kBAAqB,GAAA,uBAAA;AAE3B,SAAS,WAAc,GAAA;AAC5B,EAAM,MAAA,iBAAA,GAAoB,KAAK,MAAO,EAAA,CAAE,SAAS,EAAE,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA;AAI5D,EAAA,IAAI,OAAO,QAAa,KAAA,WAAA,IAAe,QAAS,CAAA,IAAA,IAAQ,SAAS,IAAM,EAAA;AACrE,IAAM,MAAA,MAAA,GAAS,SAAS,IAAK,CAAA,gBAAA,CAAiB,SAAS,SAAS,CAAA,CAAA,CAAG,KAAK,EAAC,CAAA;AACzE,IAAM,MAAA,EAAE,UAAW,EAAA,GAAI,QAAS,CAAA,IAAA,CAAA;AAEhC,IAAA,KAAA,CAAM,IAAK,CAAA,MAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACpC,MAAC,KAAc,CAAA,kBAAkB,CAAK,GAAA,KAAA,CAAc,kBAAkB,CAAK,IAAA,iBAAA,CAAA;AAG3E,MAAK,IAAA,KAAA,CAAc,kBAAkB,CAAM,KAAA,iBAAA;AACzC,QAAS,QAAA,CAAA,IAAA,CAAK,YAAa,CAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA,KAC/C,CAAA,CAAA;AAGD,IAAA,MAAM,YAAqC,EAAC,CAAA;AAC5C,IAAM,KAAA,CAAA,IAAA,CAAK,QAAS,CAAA,gBAAA,CAAiB,CAAS,MAAA,EAAA,SAAS,GAAG,CAAC,CAAA,CAAE,OAAQ,CAAA,CAAC,KAAU,KAAA;AAzCpF,MAAA,IAAA,EAAA,CAAA;AA0CM,MAAM,MAAA,IAAA,GAAO,KAAM,CAAA,YAAA,CAAa,SAAS,CAAA,CAAA;AACzC,MAAI,IAAA,SAAA,CAAU,IAAI,CAAG,EAAA;AACnB,QAAK,IAAA,KAAA,CAAc,kBAAkB,CAAM,KAAA,iBAAA;AACzC,UAAM,CAAA,EAAA,GAAA,KAAA,CAAA,UAAA,KAAN,mBAAkB,WAAY,CAAA,KAAA,CAAA,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,SAAA,CAAU,IAAI,CAAI,GAAA,IAAA,CAAA;AAAA,OACpB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAO,OAAA,IAAIA,OAAY,iBAAiB,CAAA,CAAA;AAC1C,CAAA;AA+BA,MAAM,eAAA,GACF,OAAO,iBAAiB,CAAA,CAAA;AAK5B,SAAS,QAAW,GAAA;AA1FpB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA2FE,EAAA,MAAM,WAAW,kBAAmB,EAAA,CAAA;AACpC,EAAI,IAAA,KAAA,CAAA;AACJ,EAAI,IAAA,QAAA,IAAY,SAAS,UAAY,EAAA;AACnC,IAAA,MAAM,eAAc,EAAS,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAA,CAAA,UAAA,KAAT,mBAAqB,MAArB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA6B,qBAA7B,IAA+C,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,uBAAA,CAAA;AACnE,IAAA,IAAI,WAAa,EAAA;AACf,MAAQ,KAAA,GAAA,WAAA,CAAA;AAAA,KACH,MAAA;AACL,MAAA,KAAA,GAAQ,WAAY,EAAA,CAAA;AACpB,MAAI,IAAA,QAAA,CAAS,WAAW,MAAO,CAAA,gBAAA;AAC7B,QAAS,QAAA,CAAA,UAAA,CAAW,MAAO,CAAA,gBAAA,CAAiB,uBAA0B,GAAA,KAAA,CAAA;AAAA,KAC1E;AAAA,GACK,MAAA;AACL,IAAA,KAAA,GAAQ,WAAY,EAAA,CAAA;AAAA,GACtB;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEA,MAAM,mBAAyC,GAAA;AAAA,EAC7C,OAAO,WAAY,EAAA;AAAA,EACnB,YAAc,EAAA,IAAA;AAAA,EACd,YAAc,EAAA,KAAA;AAChB,CAAA,CAAA;AAEO,SAAS,cAAiB,GAAA;AAC/B,EAAA,MAAM,QAAQ,QAAS,EAAA,CAAA;AACvB,EAAO,OAAA,MAAA,CAAO,iBAAiB,UAAW,CAAA,EAAE,GAAG,mBAAqB,EAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAC9E,CAAA;AACO,SAAS,iBAAiB,KAA8B,EAAA;AAC7D,EAAA,MAAM,gBAAgB,cAAe,EAAA,CAAA;AACrC,EAAA,MAAM,UAAU,UAAuC,CAAA;AAAA,IACrD,GAAG,mBAAA;AAAA,IACH,OAAO,WAAY,EAAA;AAAA,GACpB,CAAA,CAAA;AACD,EAAA,KAAA;AAAA,IACE,CAAC,MAAM,KAAM,CAAA,KAAK,GAAG,aAAa,CAAA;AAAA,IAClC,MAAM;AACJ,MAAA,MAAM,aAA4C,GAAA;AAAA,QAChD,GAAG,aAAc,CAAA,KAAA;AAAA,OACnB,CAAA;AACA,MAAM,MAAA,UAAA,GAAa,MAAM,KAAK,CAAA,CAAA;AAC9B,MAAA,MAAA,CAAO,IAAK,CAAA,UAAU,CAAE,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACvC,QAAM,MAAA,KAAA,GAAQ,WAAW,GAAG,CAAA,CAAA;AAC5B,QAAI,IAAA,UAAA,CAAW,GAAG,CAAM,KAAA,KAAA,CAAA;AACtB,UAAA,aAAA,CAAc,GAAG,CAAI,GAAA,KAAA,CAAA;AAAA,OACxB,CAAA,CAAA;AAED,MAAM,MAAA,EAAE,OAAU,GAAA,UAAA,CAAA;AAClB,MAAc,aAAA,CAAA,KAAA,GAAQ,aAAc,CAAA,KAAA,IAAS,WAAY,EAAA,CAAA;AACzD,MAAA,aAAA,CAAc,YAAe,GAAA,CAAC,KAAS,IAAA,aAAA,CAAc,KAAM,CAAA,YAAA,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAQ,GAAA,aAAA,CAAA;AAAA,KAClB;AAAA,IACA,EAAE,WAAW,IAAK,EAAA;AAAA,GACpB,CAAA;AACA,EAAA,OAAA,CAAQ,iBAAiB,OAAO,CAAA,CAAA;AAChC,EAAO,OAAA,OAAA,CAAA;AACT,CAAA;AA2Ba,MAAA,aAAA,GAAgB,YAAY,eAAgB,CAAA;AAAA,EACvD,IAAM,EAAA,gBAAA;AAAA,EACN,YAAc,EAAA,KAAA;AAAA,EACd,KAAO,EAAA;AAAA,IACL,SAAW,EAAA,OAAA;AAAA,IACX,IAAM,EAAA,MAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL,IAAM,EAAA,MAAA;AAAA,KACR;AAAA,IACA,YAAc,EAAA;AAAA,MACZ,IAAM,EAAA,MAAA;AAAA,KACR;AAAA,IACA,SAAW,EAAA,MAAA;AAAA,IACX,SAAW,EAAA,OAAA;AAAA,IACX,YAAc,EAAA,KAAA;AAAA,IACd,OAAS,EAAA,KAAA;AAAA,IACT,YAAc,EAAA;AAAA,MACZ,IAAM,EAAA,OAAA;AAAA,KACR;AAAA,GACF;AAAA,EACA,KAAM,CAAA,KAAA,EAAO,EAAE,KAAA,EAAS,EAAA;AACtB,IAAA,gBAAA,CAAiB,KAAK,CAAA,CAAA;AACtB,IAAA,OAAO,MAAG;AAnMd,MAAA,IAAA,EAAA,CAAA;AAmMiB,MAAA,OAAA,CAAA,EAAA,GAAA,KAAA,CAAM,OAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GACf;AACF,CAAC,CAAC,EAAA;AAEF,mBAAe;AAAA,EACb,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AACF,CAAA;;;;"}