UNPKG

bootstrap-vue-next

Version:

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

76 lines (75 loc) 3.29 kB
require("./chunk-CoQrYLCe.js"); const require_keys = require("./keys-durSVUrO.js"); let vue = require("vue"); //#region src/composables/useDefaults.ts function injectSelf(key, vm = getCurrentInstance("injectSelf")) { const { provides } = vm; if (provides && key in provides) return provides[key]; } function getCurrentInstance(name, message) { const vm = (0, vue.getCurrentInstance)(); if (!vm) throw new Error(`[Bvn] ${name} ${message || "must be called from inside a setup function"}`); return vm; } var toKebabCase = (str = "") => str.replace(/[^a-z]/gi, "-").replace(/\B([A-Z])/g, "-$1").toLowerCase(); var isObject = (obj) => obj !== null && typeof obj === "object" && !Array.isArray(obj); function mergeDeep(source = {}, target = {}, arrayFn) { const out = {}; for (const key in source) out[key] = source[key]; for (const key in target) { const sourceProperty = source[key]; const targetProperty = target[key]; if (isObject(sourceProperty) && isObject(targetProperty)) { out[key] = mergeDeep(sourceProperty, targetProperty, arrayFn); continue; } if (Array.isArray(sourceProperty) && Array.isArray(targetProperty) && arrayFn) { out[key] = arrayFn(sourceProperty, targetProperty); continue; } out[key] = targetProperty; } return out; } var propIsDefined = (vnode, prop) => typeof vnode.props?.[prop] !== "undefined" || typeof vnode.props?.[toKebabCase(prop)] !== "undefined"; function internalUseDefaults(props = {}, name) { const defaults = (0, vue.inject)(require_keys.defaultsKey, (0, vue.ref)({})); const vm = getCurrentInstance("useDefaults"); name = name ?? vm.type.name ?? vm.type.__name; if (!name) throw new Error("[Bvn] Could not determine component name"); const componentDefaults = (0, vue.computed)(() => defaults.value?.[props._as ?? name]); const _props = new Proxy(props, { get(target, prop) { const propValue = Reflect.get(target, prop); if (prop === "class" || prop === "style") return [componentDefaults.value?.[prop], propValue].filter((v) => v != null); else if (typeof prop === "string" && !propIsDefined(vm.vnode, prop)) return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue; return propValue; } }); const _subcomponentDefaults = (0, vue.shallowRef)(); (0, vue.watchEffect)(() => { if (componentDefaults.value) { const subComponents = Object.entries(componentDefaults.value).filter(([key]) => key[0] !== void 0 && key.startsWith(key[0].toUpperCase())); _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : void 0; } else _subcomponentDefaults.value = void 0; }); function provideSubDefaults() { const injected = injectSelf(require_keys.defaultsKey, vm); (0, vue.provide)(require_keys.defaultsKey, (0, vue.computed)(() => _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value)); } return { props: _props, provideSubDefaults }; } function useDefaults(props, name) { const { props: _props, provideSubDefaults } = internalUseDefaults(props, name); provideSubDefaults(); return _props; } //#endregion Object.defineProperty(exports, "useDefaults", { enumerable: true, get: function() { return useDefaults; } }); //# sourceMappingURL=useDefaults-DsLf4iRY.js.map