UNPKG

bootstrap-vue-next

Version:

Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development

1 lines 7.35 kB
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/composables/usePopover/index.ts"],"sourcesContent":["import {\n inject,\n isReadonly,\n isRef,\n markRaw,\n onScopeDispose,\n type Ref,\n shallowRef,\n toValue,\n watch,\n} from 'vue'\nimport {orchestratorRegistryKey} from '../../utils/keys'\nimport type {\n OrchestratorCreateOptions,\n PopoverOrchestratorArrayValue,\n PopoverOrchestratorCreateParam,\n PopoverOrchestratorParam,\n PromiseWithComponent,\n TooltipOrchestratorArrayValue,\n TooltipOrchestratorCreateParam,\n TooltipOrchestratorParam,\n} from '../../types/ComponentOrchestratorTypes'\nimport {BPopover, BTooltip} from '../../components'\nimport {buildPromise} from '../orchestratorShared'\n\nexport const usePopover = () => {\n const orchestratorRegistry = inject(orchestratorRegistryKey, null)\n if (!orchestratorRegistry) {\n throw new Error(\n 'usePopover() must be called within setup(), and BApp, useRegistry or plugin must be installed/provided.'\n )\n }\n\n const {store, _isOrchestratorInstalled} = orchestratorRegistry\n\n /**\n * Create a popover or tooltip\n * @param obj The popover or tooltip props\n * @param tooltip If true, create a tooltip, otherwise create a popover\n * @returns {PromiseWithComponent<typeof BPopover | typeof BTooltip, PopoverOrchestratorParam>} A promise object with methods to control the popover (show, hide, toggle, get, set, destroy)\n */\n const create = (\n obj: PopoverOrchestratorCreateParam | TooltipOrchestratorCreateParam,\n tooltip?: boolean,\n options: OrchestratorCreateOptions = {keep: true}\n ): PromiseWithComponent<\n typeof BPopover | typeof BTooltip,\n PopoverOrchestratorParam | TooltipOrchestratorParam\n > => {\n if (!_isOrchestratorInstalled.value) {\n throw new Error('The BApp component must be mounted to use the popover controller')\n }\n\n const resolvedProps = isRef(obj) ? obj : shallowRef(obj)\n const _self = resolvedProps.value?.id || Symbol('Popover controller')\n\n const promise = buildPromise<\n typeof BPopover | typeof BTooltip,\n PopoverOrchestratorParam | TooltipOrchestratorParam,\n PopoverOrchestratorArrayValue | TooltipOrchestratorArrayValue\n >(_self, store as Ref<PopoverOrchestratorArrayValue[] | TooltipOrchestratorArrayValue[]>)\n\n promise.stop = watch(\n resolvedProps,\n (_newValue) => {\n const newValue = {...toValue(_newValue)}\n const previousIndex = store.value.findIndex((el) => el._self === _self)\n const previous =\n previousIndex === -1\n ? {_component: tooltip ? markRaw(BTooltip) : markRaw(BPopover)}\n : store.value[previousIndex]\n // if (!previous) return\n const v: PopoverOrchestratorArrayValue | TooltipOrchestratorArrayValue = tooltip\n ? ({\n ...previous,\n type: 'tooltip',\n _self,\n position: 'popover',\n promise,\n options,\n } as TooltipOrchestratorArrayValue)\n : ({\n ...previous,\n type: 'popover',\n _self,\n position: 'popover',\n promise,\n options,\n } as PopoverOrchestratorArrayValue)\n\n for (const key in newValue) {\n if (key.startsWith('on')) {\n v[key as keyof PopoverOrchestratorCreateParam] =\n newValue[key as keyof PopoverOrchestratorCreateParam]\n } else if (key === 'component' && newValue.component) {\n v._component = markRaw(newValue.component)\n } else if (key === 'slots' && newValue.slots) {\n v.slots = markRaw(newValue.slots)\n } else {\n v[key as keyof PopoverOrchestratorCreateParam] = toValue(\n newValue[key as keyof PopoverOrchestratorCreateParam]\n )\n }\n }\n\n v.modelValue = v.modelValue ?? false\n v['onUpdate:modelValue'] = (val: boolean) => {\n newValue['onUpdate:modelValue']?.(val)\n const {modelValue} = toValue(obj)\n if (isRef(obj) && !isRef(modelValue)) obj.value.modelValue = val\n if (isRef(modelValue) && !isReadonly(modelValue)) {\n ;(modelValue as Ref<PopoverOrchestratorParam['modelValue']>).value = val\n }\n if (v.modelValue !== val) {\n const popover = store.value.find((el) => el._self === _self)\n if (popover) {\n popover.modelValue = val\n }\n }\n }\n if (previousIndex === -1) {\n store.value.push(v)\n } else {\n store.value.splice(previousIndex, 1, v)\n }\n },\n {\n immediate: true,\n deep: true,\n }\n )\n\n onScopeDispose(() => {\n const popover = store.value.find((el) => el._self === _self)\n if (popover) {\n popover.promise.value.destroy?.()\n }\n }, true)\n\n return promise.value\n }\n\n const tooltip = (\n obj: TooltipOrchestratorCreateParam,\n options: OrchestratorCreateOptions = {keep: true}\n ) => create(obj, true, options)\n\n const popover = (\n obj: PopoverOrchestratorCreateParam,\n options: OrchestratorCreateOptions = {keep: true}\n ) => create(obj, false, options)\n\n return {\n _isOrchestratorInstalled,\n create,\n popover,\n tooltip,\n store,\n }\n}\n\n/**\n * @deprecated use usePopover() instead.\n * @returns {ReturnType<typeof usePopover>} The popover controller\n */\nexport const usePopoverController = usePopover\n"],"mappings":";;;;;;;AAyBA,IAAa,mBAAmB;CAC9B,MAAM,uBAAuB,OAAO,yBAAyB,KAAK;AAClE,KAAI,CAAC,qBACH,OAAM,IAAI,MACR,0GACD;CAGH,MAAM,EAAC,OAAO,6BAA4B;;;;;;;CAQ1C,MAAM,UACJ,KACA,SACA,UAAqC,EAAC,MAAM,MAAK,KAI9C;AACH,MAAI,CAAC,yBAAyB,MAC5B,OAAM,IAAI,MAAM,mEAAmE;EAGrF,MAAM,gBAAgB,MAAM,IAAI,GAAG,MAAM,WAAW,IAAI;EACxD,MAAM,QAAQ,cAAc,OAAO,MAAM,OAAO,qBAAqB;EAErE,MAAM,UAAU,aAId,OAAO,MAAgF;AAEzF,UAAQ,OAAO,MACb,gBACC,cAAc;GACb,MAAM,WAAW,EAAC,GAAG,QAAQ,UAAU,EAAC;GACxC,MAAM,gBAAgB,MAAM,MAAM,WAAW,OAAO,GAAG,UAAU,MAAM;GACvE,MAAM,WACJ,kBAAkB,KACd,EAAC,YAAY,UAAU,QAAQ,iBAAS,GAAG,QAAQ,iBAAS,EAAC,GAC7D,MAAM,MAAM;GAElB,MAAM,IAAmE,UACpE;IACC,GAAG;IACH,MAAM;IACN;IACA,UAAU;IACV;IACA;IACD,GACA;IACC,GAAG;IACH,MAAM;IACN;IACA,UAAU;IACV;IACA;IACD;AAEL,QAAK,MAAM,OAAO,SAChB,KAAI,IAAI,WAAW,KAAK,CACtB,GAAE,OACA,SAAS;YACF,QAAQ,eAAe,SAAS,UACzC,GAAE,aAAa,QAAQ,SAAS,UAAU;YACjC,QAAQ,WAAW,SAAS,MACrC,GAAE,QAAQ,QAAQ,SAAS,MAAM;OAEjC,GAAE,OAA+C,QAC/C,SAAS,KACV;AAIL,KAAE,aAAa,EAAE,cAAc;AAC/B,KAAE,0BAA0B,QAAiB;AAC3C,aAAS,yBAAyB,IAAI;IACtC,MAAM,EAAC,eAAc,QAAQ,IAAI;AACjC,QAAI,MAAM,IAAI,IAAI,CAAC,MAAM,WAAW,CAAE,KAAI,MAAM,aAAa;AAC7D,QAAI,MAAM,WAAW,IAAI,CAAC,WAAW,WAAW,CAC5C,YAA2D,QAAQ;AAEvE,QAAI,EAAE,eAAe,KAAK;KACxB,MAAM,UAAU,MAAM,MAAM,MAAM,OAAO,GAAG,UAAU,MAAM;AAC5D,SAAI,QACF,SAAQ,aAAa;;;AAI3B,OAAI,kBAAkB,GACpB,OAAM,MAAM,KAAK,EAAE;OAEnB,OAAM,MAAM,OAAO,eAAe,GAAG,EAAE;KAG3C;GACE,WAAW;GACX,MAAM;GACP,CACF;AAED,uBAAqB;GACnB,MAAM,UAAU,MAAM,MAAM,MAAM,OAAO,GAAG,UAAU,MAAM;AAC5D,OAAI,QACF,SAAQ,QAAQ,MAAM,WAAW;KAElC,KAAK;AAER,SAAO,QAAQ;;CAGjB,MAAM,WACJ,KACA,UAAqC,EAAC,MAAM,MAAK,KAC9C,OAAO,KAAK,MAAM,QAAQ;CAE/B,MAAM,WACJ,KACA,UAAqC,EAAC,MAAM,MAAK,KAC9C,OAAO,KAAK,OAAO,QAAQ;AAEhC,QAAO;EACL;EACA;EACA;EACA;EACA;EACD;;;;;;AAOH,IAAa,uBAAuB"}