{"version":3,"file":"defaults.mjs","names":["useToggleScope","computed","inject","provide","ref","shallowRef","unref","watchEffect","getCurrentInstance","injectSelf","mergeDeep","toKebabCase","DefaultsSymbol","Symbol","createDefaults","options","injectDefaults","defaults","Error","provideDefaults","injectedDefaults","providedDefaults","newDefaults","disabled","value","scoped","reset","root","properties","prev","len","Number","Infinity","i","propIsDefined","vnode","prop","_vnode$props","_vnode$props2","props","internalUseDefaults","_ref","_name","arguments","length","undefined","name","vm","type","__name","componentDefaults","_defaults$value","_props$_as","_as","_props","Proxy","get","target","propValue","Reflect","_componentDefaults$va","filter","v","_ref2","_componentDefaults$va2","_componentDefaults$va3","_defaults$value2","global","_subcomponentDefaults","subComponents","Object","entries","_ref3","_ref4","_slicedToArray","key","startsWith","toUpperCase","fromEntries","provideSubDefaults","_injectSelf$value","_injectSelf","useDefaults","_internalUseDefaults"],"sources":["../../src/composables/defaults.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport {\n  computed,\n  inject,\n  provide,\n  ref,\n  shallowRef,\n  unref,\n  watchEffect,\n} from 'vue'\nimport { getCurrentInstance, injectSelf, mergeDeep, toKebabCase } from '@/utils'\n\n// Types\nimport type { ComputedRef, InjectionKey, Ref, VNode } from 'vue'\nimport type { MaybeRef } from '@/utils'\n\nexport type DefaultsInstance =\n  | undefined\n  | {\n      [key: string]: undefined | Record<string, unknown>\n      global?: Record<string, unknown>\n    }\n\nexport type DefaultsOptions = Partial<DefaultsInstance>\n\nexport const DefaultsSymbol: InjectionKey<Ref<DefaultsInstance>> =\n  Symbol.for('untitled:defaults')\n\nexport function createDefaults(\n  options?: DefaultsInstance\n): Ref<DefaultsInstance> {\n  return ref(options)\n}\n\nexport function injectDefaults() {\n  const defaults = inject(DefaultsSymbol)\n\n  if (!defaults) throw new Error('[Untitled] Could not find defaults instance')\n\n  return defaults\n}\n\nexport function provideDefaults(\n  defaults?: MaybeRef<DefaultsInstance | undefined>,\n  options?: {\n    disabled?: MaybeRef<boolean | undefined>\n    reset?: MaybeRef<number | string | undefined>\n    root?: MaybeRef<boolean | string | undefined>\n    scoped?: MaybeRef<boolean | undefined>\n  }\n) {\n  const injectedDefaults = injectDefaults()\n  const providedDefaults = ref(defaults)\n\n  const newDefaults = computed(() => {\n    const disabled = unref(options?.disabled)\n\n    if (disabled) return injectedDefaults.value\n\n    const scoped = unref(options?.scoped)\n    const reset = unref(options?.reset)\n    const root = unref(options?.root)\n\n    let properties = mergeDeep(providedDefaults.value, {\n      prev: injectedDefaults.value,\n    })\n\n    if (scoped) return properties\n\n    if (reset || root) {\n      const len = Number(reset || Infinity)\n\n      for (let i = 0; i <= len; i++) {\n        if (!properties || !('prev' in properties)) {\n          break\n        }\n\n        properties = properties.prev\n      }\n\n      if (properties && typeof root === 'string' && root in properties) {\n        properties = mergeDeep(\n          mergeDeep(properties, { prev: properties }),\n          properties[root]\n        )\n      }\n\n      return properties\n    }\n\n    return properties.prev ? mergeDeep(properties.prev, properties) : properties\n  }) as ComputedRef<DefaultsInstance>\n\n  provide(DefaultsSymbol, newDefaults)\n\n  return newDefaults\n}\n\nfunction propIsDefined(vnode: VNode, prop: string) {\n  return (\n    typeof vnode.props?.[prop] !== 'undefined' ||\n    typeof vnode.props?.[toKebabCase(prop)] !== 'undefined'\n  )\n}\n\nexport function internalUseDefaults(\n  props: Record<string, any> = {},\n  name?: string,\n  defaults = injectDefaults()\n) {\n  const vm = getCurrentInstance('useDefaults')\n\n  name = name ?? vm.type.name ?? vm.type.__name\n  if (!name) {\n    throw new Error('[Untitled] Could not determine component name')\n  }\n\n  const componentDefaults = computed(() => defaults.value?.[props._as ?? name])\n  const _props = new Proxy(props, {\n    get(target, prop) {\n      const propValue = Reflect.get(target, prop)\n      if (prop === 'class' || prop === 'style') {\n        return [componentDefaults.value?.[prop], propValue].filter(\n          (v) => v != null\n        )\n      } else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {\n        return (\n          componentDefaults.value?.[prop] ??\n          defaults.value?.global?.[prop] ??\n          propValue\n        )\n      }\n      return propValue\n    },\n  })\n\n  const _subcomponentDefaults = shallowRef()\n  watchEffect(() => {\n    if (componentDefaults.value) {\n      const subComponents = Object.entries(componentDefaults.value).filter(\n        ([key]) => key.startsWith(key[0].toUpperCase())\n      )\n      if (subComponents.length)\n        _subcomponentDefaults.value = Object.fromEntries(subComponents)\n    }\n  })\n\n  function provideSubDefaults() {\n    // If subcomponent defaults are provided, override any\n    // subcomponents provided by the component's setup function.\n    // This uses injectSelf so must be done after the original setup to work.\n    useToggleScope(_subcomponentDefaults, () => {\n      provideDefaults(\n        mergeDeep(\n          injectSelf(DefaultsSymbol)?.value ?? {},\n          _subcomponentDefaults.value\n        )\n      )\n    })\n  }\n\n  return { props: _props, provideSubDefaults }\n}\n\nexport function useDefaults(props: Record<string, any> = {}, name?: string) {\n  const { props: _props, provideSubDefaults } = internalUseDefaults(props, name)\n  provideSubDefaults()\n  return _props\n}\n"],"mappings":"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"}