{"version":3,"file":"use-collapse.mjs","sources":["../../../../../../../packages/components/collapse/src/use-collapse.ts"],"sourcesContent":["import { computed, provide, ref, watch } from 'vue'\nimport {\n  debugWarn,\n  ensureArray,\n  isBoolean,\n  isPromise,\n  throwError,\n} from '@hd-front-end/utils'\nimport { useNamespace } from '@hd-front-end/hooks'\nimport { CHANGE_EVENT, UPDATE_MODEL_EVENT } from '@hd-front-end/constants'\nimport { collapseContextKey } from './constants'\n\nimport type { SetupContext } from 'vue'\nimport type {\n  CollapseActiveName,\n  CollapseEmits,\n  CollapseProps,\n} from './collapse'\n\nconst SCOPE = 'ElCollapse'\nexport const useCollapse = (\n  props: CollapseProps,\n  emit: SetupContext<CollapseEmits>['emit']\n) => {\n  const activeNames = ref(ensureArray(props.modelValue))\n\n  const setActiveNames = (_activeNames: CollapseActiveName[]) => {\n    activeNames.value = _activeNames\n    const value = props.accordion ? activeNames.value[0] : activeNames.value\n    emit(UPDATE_MODEL_EVENT, value)\n    emit(CHANGE_EVENT, value)\n  }\n\n  const handleChange = (name: CollapseActiveName) => {\n    if (props.accordion) {\n      setActiveNames([activeNames.value[0] === name ? '' : name])\n    } else {\n      const _activeNames = [...activeNames.value]\n      const index = _activeNames.indexOf(name)\n\n      if (index > -1) {\n        _activeNames.splice(index, 1)\n      } else {\n        _activeNames.push(name)\n      }\n      setActiveNames(_activeNames)\n    }\n  }\n\n  const handleItemClick = async (name: CollapseActiveName) => {\n    const { beforeCollapse } = props\n    if (!beforeCollapse) {\n      handleChange(name)\n      return\n    }\n\n    const shouldChange = beforeCollapse(name)\n    const isPromiseOrBool = [\n      isPromise(shouldChange),\n      isBoolean(shouldChange),\n    ].includes(true)\n    if (!isPromiseOrBool) {\n      throwError(\n        SCOPE,\n        'beforeCollapse must return type `Promise<boolean>` or `boolean`'\n      )\n    }\n\n    if (isPromise(shouldChange)) {\n      shouldChange\n        .then((result) => {\n          if (result !== false) {\n            handleChange(name)\n          }\n        })\n        .catch((e) => {\n          debugWarn(SCOPE, `some error occurred: ${e}`)\n        })\n    } else if (shouldChange) {\n      handleChange(name)\n    }\n  }\n\n  watch(\n    () => props.modelValue,\n    () => (activeNames.value = ensureArray(props.modelValue)),\n    { deep: true }\n  )\n\n  provide(collapseContextKey, {\n    activeNames,\n    handleItemClick,\n  })\n  return {\n    activeNames,\n    setActiveNames,\n  }\n}\n\nexport const useCollapseDOM = (props: CollapseProps) => {\n  const ns = useNamespace('collapse')\n\n  const rootKls = computed(() => [\n    ns.b(),\n    ns.b(`icon-position-${props.expandIconPosition}`),\n  ])\n\n  return {\n    rootKls,\n  }\n}\n"],"names":["ensureArray"],"mappings":"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"}