{"version":3,"file":"use-component-config-props.mjs","sources":["../../../../../../src/services/component-config/utils/use-component-config-props.ts"],"sourcesContent":["import { VuesticComponentName, Props, VuesticComponent } from '../types'\nimport { useLocalConfig } from '../../../composables/useLocalConfig'\nimport { useGlobalConfig } from '../../global-config/global-config'\nimport { computed } from 'vue'\nimport { injectChildPropsFromParent } from '../../../composables/useChildComponents'\nimport { ComponentPresetProp, PresetPropValue } from '../../../composables'\nimport { notNil } from '../../../utils/isNilValue'\n\nconst withPresetProp = <P extends Props>(props: P): props is P & ComponentPresetProp => 'preset' in props\nconst getPresetProp = <P extends Props>(props: P) => withPresetProp(props) ? props.preset : undefined\n\nexport const useComponentConfigProps = <T extends VuesticComponent>(component: T, originalProps: Props) => {\n  const localConfig = useLocalConfig()\n  const { globalConfig } = useGlobalConfig()\n\n  const componentName = component.name as VuesticComponentName\n\n  const getPresetProps = (presetPropValue: PresetPropValue): Props => {\n    return (presetPropValue instanceof Array ? presetPropValue : [presetPropValue]).reduce<Props>((acc, presetName) => {\n      const presetProps = globalConfig.value.components?.presets?.[componentName]?.[presetName]\n\n      if (!presetProps) {\n        return acc\n      }\n\n      const extendedPresets = getPresetProp(presetProps)\n\n      return {\n        ...acc,\n        ...(extendedPresets ? getPresetProps(extendedPresets) : undefined),\n        ...presetProps,\n      }\n    }, {})\n  }\n  const parentInjectedProps = injectChildPropsFromParent()\n\n  return computed(() => {\n    const globalConfigProps: Props = {\n      ...globalConfig.value.components?.all,\n      ...globalConfig.value.components?.[componentName],\n    }\n\n    const localConfigProps = localConfig.value\n      .reduce<Props>((finalConfig, config) => {\n        const componentConfigProps = config[componentName]\n\n        return componentConfigProps\n          ? { ...finalConfig, ...componentConfigProps }\n          : finalConfig\n      }, {})\n\n    const presetProp = [\n      originalProps,\n      parentInjectedProps?.value,\n      localConfigProps,\n      globalConfigProps,\n    ]\n      .filter(notNil)\n      .map(getPresetProp)\n      .filter(notNil)\n      .at(0)\n\n    const presetProps = presetProp ? getPresetProps(presetProp) : undefined\n\n    return { ...globalConfigProps, ...localConfigProps, ...presetProps }\n  })\n}\n"],"names":[],"mappings":";;;;;AAQA,MAAM,iBAAiB,CAAkB,UAA+C,YAAY;AACpG,MAAM,gBAAgB,CAAkB,UAAa,eAAe,KAAK,IAAI,MAAM,SAAS;AAE/E,MAAA,0BAA0B,CAA6B,WAAc,kBAAyB;AACzG,QAAM,cAAc;AACd,QAAA,EAAE,iBAAiB;AAEzB,QAAM,gBAAgB,UAAU;AAE1B,QAAA,iBAAiB,CAAC,oBAA4C;AAC1D,YAAA,2BAA2B,QAAQ,kBAAkB,CAAC,eAAe,GAAG,OAAc,CAAC,KAAK,eAAe;;AACjH,YAAM,eAAc,8BAAa,MAAM,eAAnB,mBAA+B,YAA/B,mBAAyC,mBAAzC,mBAA0D;AAE9E,UAAI,CAAC,aAAa;AACT,eAAA;AAAA,MACT;AAEM,YAAA,kBAAkB,cAAc,WAAW;AAE1C,aAAA;AAAA,QACL,GAAG;AAAA,QACH,GAAI,kBAAkB,eAAe,eAAe,IAAI;AAAA,QACxD,GAAG;AAAA,MAAA;AAAA,IAEP,GAAG,CAAE,CAAA;AAAA,EAAA;AAEP,QAAM,sBAAsB;AAE5B,SAAO,SAAS,MAAM;;AACpB,UAAM,oBAA2B;AAAA,MAC/B,IAAG,kBAAa,MAAM,eAAnB,mBAA+B;AAAA,MAClC,IAAG,kBAAa,MAAM,eAAnB,mBAAgC;AAAA,IAAa;AAGlD,UAAM,mBAAmB,YAAY,MAClC,OAAc,CAAC,aAAa,WAAW;AAChC,YAAA,uBAAuB,OAAO,aAAa;AAEjD,aAAO,uBACH,EAAE,GAAG,aAAa,GAAG,yBACrB;AAAA,IACN,GAAG,CAAE,CAAA;AAEP,UAAM,aAAa;AAAA,MACjB;AAAA,MACA,2DAAqB;AAAA,MACrB;AAAA,MACA;AAAA,IACF,EACG,OAAO,MAAM,EACb,IAAI,aAAa,EACjB,OAAO,MAAM,EACb,GAAG,CAAC;AAEP,UAAM,cAAc,aAAa,eAAe,UAAU,IAAI;AAE9D,WAAO,EAAE,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,YAAY;AAAA,EAAA,CACpE;AACH;"}