bootstrap-vue-next
Version:
Seamless integration of Vue 3, Bootstrap 5, and TypeScript for modern, type-safe UI development
40 lines (39 loc) • 1.54 kB
JavaScript
import { l as defaultsKey } from "../../../keys-CQKrwmvN.mjs";
import { computed, inject, provide, unref } from "vue";
//#region src/composables/useProvideDefaults/index.ts
var useProvideDefaults = (defaults, mergeDefaults) => {
const injectedDefaults = inject(defaultsKey, null);
provide(defaultsKey, computed(() => {
const _defaults = unref(defaults);
if (!injectedDefaults) return _defaults ?? {};
const merged = { ...injectedDefaults.value };
if (_defaults) {
if (mergeDefaults) {
if (typeof mergeDefaults === "function") return mergeDefaults(merged, _defaults);
else if (mergeDefaults === true) return deepMerge(merged, _defaults);
return Object.assign(merged, _defaults);
}
return _defaults;
}
return merged;
}));
};
function isPlainObject(value) {
return value !== null && typeof value === "object" && value.constructor === Object && Object.prototype.toString.call(value) === "[object Object]";
}
function deepMerge(target, source, visited = /* @__PURE__ */ new WeakSet()) {
if (visited.has(source)) return target;
visited.add(source);
const result = { ...target };
for (const key in source) {
const sourceValue = source[key];
const targetValue = target[key];
if (isPlainObject(sourceValue) && isPlainObject(targetValue)) result[key] = deepMerge(targetValue, sourceValue, visited);
else if (Array.isArray(sourceValue)) result[key] = [...sourceValue];
else result[key] = sourceValue;
}
return result;
}
//#endregion
export { useProvideDefaults };
//# sourceMappingURL=index.mjs.map