feat: initial commit - Phase 1 & 2 core features

This commit is contained in:
hiderfong
2026-04-22 17:07:33 +08:00
commit 1773bda06b
25005 changed files with 6252106 additions and 0 deletions
@@ -0,0 +1,11 @@
import { SFCWithInstall } from "../../utils/vue/typescript.js";
import "../../utils/index.js";
import { ConfigProviderProps, ConfigProviderPropsPublic, ExperimentalFeatures, configProviderProps } from "./src/config-provider-props.js";
import { ConfigProvider, ConfigProviderInstance, messageConfig } from "./src/config-provider.js";
import { ConfigProviderContext, configProviderContextKey } from "./src/constants.js";
import { provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig } from "./src/hooks/use-global-config.js";
//#region ../../packages/components/config-provider/index.d.ts
declare const ElConfigProvider: SFCWithInstall<typeof ConfigProvider>;
//#endregion
export { ConfigProviderContext, ConfigProviderInstance, ConfigProviderProps, ConfigProviderPropsPublic, ElConfigProvider, ElConfigProvider as default, ExperimentalFeatures, configProviderContextKey, configProviderProps, messageConfig, provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig };
@@ -0,0 +1,12 @@
import { withInstall } from "../../utils/vue/install.mjs";
import { configProviderContextKey } from "./src/constants.mjs";
import { provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig } from "./src/hooks/use-global-config.mjs";
import { configProviderProps } from "./src/config-provider-props.mjs";
import ConfigProvider, { messageConfig } from "./src/config-provider.mjs";
//#region ../../packages/components/config-provider/index.ts
const ElConfigProvider = withInstall(ConfigProvider);
//#endregion
export { ElConfigProvider, ElConfigProvider as default, configProviderContextKey, configProviderProps, messageConfig, provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../../packages/components/config-provider/index.ts"],"sourcesContent":["import { withInstall } from '@element-plus/utils'\nimport ConfigProvider from './src/config-provider'\n\nimport type { SFCWithInstall } from '@element-plus/utils'\n\nexport const ElConfigProvider: SFCWithInstall<typeof ConfigProvider> =\n withInstall(ConfigProvider)\nexport default ElConfigProvider\n\nexport * from './src/config-provider'\nexport * from './src/config-provider-props'\nexport * from './src/constants'\nexport * from './src/hooks/use-global-config'\n"],"mappings":";;;;;;;AAKA,MAAa,mBACX,YAAY,eAAe"}
@@ -0,0 +1,86 @@
import { EpPropFinalized, EpPropMergeType } from "../../../utils/vue/props/types.js";
import "../../../utils/index.js";
import { ButtonConfigContext } from "../../button/src/button.js";
import "../../button/index.js";
import { CardConfigContext } from "../../card/src/card.js";
import "../../card/index.js";
import { Language } from "../../../locale/index.js";
import { DialogConfigContext } from "../../dialog/src/dialog.js";
import "../../dialog/index.js";
import { MessageConfigContext } from "../../message/src/message.js";
import "../../message/index.js";
import { LinkConfigContext } from "../../link/src/link.js";
import "../../link/index.js";
import { TableConfigContext } from "../../table/src/table/defaults.js";
import "../../table/index.js";
import * as vue from "vue";
import { ExtractPropTypes, ExtractPublicPropTypes } from "vue";
//#region ../../packages/components/config-provider/src/config-provider-props.d.ts
type ExperimentalFeatures = {};
declare const configProviderProps: {
readonly emptyValues: ArrayConstructor;
readonly valueOnClear: EpPropFinalized<(new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null) | (((new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null)) | null)[], unknown, unknown, undefined, boolean>;
readonly a11y: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly locale: {
readonly type: vue.PropType<Language>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly size: {
readonly type: vue.PropType<EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly button: {
readonly type: vue.PropType<ButtonConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly card: {
readonly type: vue.PropType<CardConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly dialog: {
readonly type: vue.PropType<DialogConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly link: {
readonly type: vue.PropType<LinkConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly experimentalFeatures: {
readonly type: vue.PropType<ExperimentalFeatures>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly keyboardNavigation: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly message: {
readonly type: vue.PropType<MessageConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly zIndex: NumberConstructor;
readonly namespace: EpPropFinalized<StringConstructor, unknown, unknown, "el", boolean>;
readonly table: {
readonly type: vue.PropType<TableConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
};
type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>;
type ConfigProviderPropsPublic = ExtractPublicPropTypes<typeof configProviderProps>;
//#endregion
export { ConfigProviderProps, ConfigProviderPropsPublic, ExperimentalFeatures, configProviderProps };
@@ -0,0 +1,34 @@
import { buildProps, definePropType } from "../../../utils/vue/props/runtime.mjs";
import { useSizeProp } from "../../../hooks/use-size/index.mjs";
import { useEmptyValuesProps } from "../../../hooks/use-empty-values/index.mjs";
//#region ../../packages/components/config-provider/src/config-provider-props.ts
const configProviderProps = buildProps({
a11y: {
type: Boolean,
default: true
},
locale: { type: definePropType(Object) },
size: useSizeProp,
button: { type: definePropType(Object) },
card: { type: definePropType(Object) },
dialog: { type: definePropType(Object) },
link: { type: definePropType(Object) },
experimentalFeatures: { type: definePropType(Object) },
keyboardNavigation: {
type: Boolean,
default: true
},
message: { type: definePropType(Object) },
zIndex: Number,
namespace: {
type: String,
default: "el"
},
table: { type: definePropType(Object) },
...useEmptyValuesProps
});
//#endregion
export { configProviderProps };
//# sourceMappingURL=config-provider-props.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"config-provider-props.mjs","names":[],"sources":["../../../../../../packages/components/config-provider/src/config-provider-props.ts"],"sourcesContent":["import { buildProps, definePropType } from '@element-plus/utils'\nimport { useEmptyValuesProps, useSizeProp } from '@element-plus/hooks'\n\nimport type { ExtractPropTypes, ExtractPublicPropTypes } from 'vue'\nimport type { Language } from '@element-plus/locale'\nimport type { ButtonConfigContext } from '@element-plus/components/button'\nimport type { CardConfigContext } from '@element-plus/components/card'\nimport type { DialogConfigContext } from '@element-plus/components/dialog'\nimport type { MessageConfigContext } from '@element-plus/components/message'\nimport type { LinkConfigContext } from '@element-plus/components/link'\nimport type { TableConfigContext } from '@element-plus/components/table'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type ExperimentalFeatures = {\n // TO BE Defined\n}\n\nexport const configProviderProps = buildProps({\n /**\n * @description Controlling if the users want a11y features\n */\n a11y: {\n type: Boolean,\n default: true,\n },\n /**\n * @description Locale Object\n */\n locale: {\n type: definePropType<Language>(Object),\n },\n /**\n * @description global component size\n */\n size: useSizeProp,\n /**\n * @description button related configuration, [see the following table](https://element-plus.org/en-US/component/config-provider.html#button-attribute)\n */\n button: {\n type: definePropType<ButtonConfigContext>(Object),\n },\n /**\n * @description card related configuration, [see the following table](https://element-plus.org/en-US/component/config-provider.html#card-attribute)\n */\n card: {\n type: definePropType<CardConfigContext>(Object),\n },\n /**\n * @description dialog related configuration, [see the following table](https://element-plus.org/en-US/component/config-provider.html#dialog-attribute)\n */\n dialog: {\n type: definePropType<DialogConfigContext>(Object),\n },\n /**\n * @description link related configuration, [see the following table](https://element-plus.org/en-US/component/config-provider.html#link-attribute)\n */\n link: {\n type: definePropType<LinkConfigContext>(Object),\n },\n /**\n * @description features at experimental stage to be added, all features are default to be set to false, [see the following table](https://element-plus.org/en-US/component/config-provider.html#experimental-features) | ^[object]\n */\n experimentalFeatures: {\n type: definePropType<ExperimentalFeatures>(Object),\n },\n /**\n * @description Controls if we should handle keyboard navigation\n */\n keyboardNavigation: {\n type: Boolean,\n default: true,\n },\n /**\n * @description message related configuration, [see the following table](https://element-plus.org/en-US/component/config-provider.html#message-attribute)\n */\n message: {\n type: definePropType<MessageConfigContext>(Object),\n },\n /**\n * @description global Initial zIndex\n */\n zIndex: Number,\n /**\n * @description global component className prefix (cooperated with [$namespace](https://github.com/element-plus/element-plus/blob/dev/packages/theme-chalk/src/mixins/config.scss#L1)) | ^[string]\n */\n namespace: {\n type: String,\n default: 'el',\n },\n /**\n * @description table related configuration, [see the following table](https://element-plus.org/en-US/component/config-provider.html#table-attribute)\n */\n table: {\n type: definePropType<TableConfigContext>(Object),\n },\n ...useEmptyValuesProps,\n} as const)\nexport type ConfigProviderProps = ExtractPropTypes<typeof configProviderProps>\nexport type ConfigProviderPropsPublic = ExtractPublicPropTypes<\n typeof configProviderProps\n>\n"],"mappings":";;;;;AAiBA,MAAa,sBAAsB,WAAW;CAI5C,MAAM;EACJ,MAAM;EACN,SAAS;EACV;CAID,QAAQ,EACN,MAAM,eAAyB,OAAO,EACvC;CAID,MAAM;CAIN,QAAQ,EACN,MAAM,eAAoC,OAAO,EAClD;CAID,MAAM,EACJ,MAAM,eAAkC,OAAO,EAChD;CAID,QAAQ,EACN,MAAM,eAAoC,OAAO,EAClD;CAID,MAAM,EACJ,MAAM,eAAkC,OAAO,EAChD;CAID,sBAAsB,EACpB,MAAM,eAAqC,OAAO,EACnD;CAID,oBAAoB;EAClB,MAAM;EACN,SAAS;EACV;CAID,SAAS,EACP,MAAM,eAAqC,OAAO,EACnD;CAID,QAAQ;CAIR,WAAW;EACT,MAAM;EACN,SAAS;EACV;CAID,OAAO,EACL,MAAM,eAAmC,OAAO,EACjD;CACD,GAAG;CACJ,CAAU"}
@@ -0,0 +1,149 @@
import { EpPropFinalized, EpPropMergeType } from "../../../utils/vue/props/types.js";
import "../../../utils/index.js";
import { ButtonConfigContext } from "../../button/src/button.js";
import { CardConfigContext } from "../../card/src/card.js";
import { Language } from "../../../locale/index.js";
import { DialogConfigContext } from "../../dialog/src/dialog.js";
import { MessageConfigContext } from "../../message/src/message.js";
import "../../message/index.js";
import { LinkConfigContext } from "../../link/src/link.js";
import { TableConfigContext } from "../../table/src/table/defaults.js";
import { ExperimentalFeatures } from "./config-provider-props.js";
import "../../../index.js";
import * as vue from "vue";
//#region ../../packages/components/config-provider/src/config-provider.d.ts
declare const messageConfig: MessageConfigContext;
declare const ConfigProvider: vue.DefineComponent<vue.ExtractPropTypes<{
readonly emptyValues: ArrayConstructor;
readonly valueOnClear: EpPropFinalized<(new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null) | (((new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null)) | null)[], unknown, unknown, undefined, boolean>;
readonly a11y: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly locale: {
readonly type: vue.PropType<Language>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly size: {
readonly type: vue.PropType<EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly button: {
readonly type: vue.PropType<ButtonConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly card: {
readonly type: vue.PropType<CardConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly dialog: {
readonly type: vue.PropType<DialogConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly link: {
readonly type: vue.PropType<LinkConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly experimentalFeatures: {
readonly type: vue.PropType<ExperimentalFeatures>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly keyboardNavigation: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly message: {
readonly type: vue.PropType<MessageConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly zIndex: NumberConstructor;
readonly namespace: EpPropFinalized<StringConstructor, unknown, unknown, "el", boolean>;
readonly table: {
readonly type: vue.PropType<TableConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
[key: string]: any;
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
readonly emptyValues: ArrayConstructor;
readonly valueOnClear: EpPropFinalized<(new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null) | (((new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null)) | null)[], unknown, unknown, undefined, boolean>;
readonly a11y: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly locale: {
readonly type: vue.PropType<Language>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly size: {
readonly type: vue.PropType<EpPropMergeType<StringConstructor, "" | "default" | "small" | "large", never>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly button: {
readonly type: vue.PropType<ButtonConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly card: {
readonly type: vue.PropType<CardConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly dialog: {
readonly type: vue.PropType<DialogConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly link: {
readonly type: vue.PropType<LinkConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly experimentalFeatures: {
readonly type: vue.PropType<ExperimentalFeatures>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly keyboardNavigation: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly message: {
readonly type: vue.PropType<MessageConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly zIndex: NumberConstructor;
readonly namespace: EpPropFinalized<StringConstructor, unknown, unknown, "el", boolean>;
readonly table: {
readonly type: vue.PropType<TableConfigContext>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
}>> & Readonly<{}>, {
readonly a11y: EpPropMergeType<BooleanConstructor, unknown, unknown>;
readonly keyboardNavigation: EpPropMergeType<BooleanConstructor, unknown, unknown>;
readonly namespace: string;
readonly valueOnClear: EpPropMergeType<(new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null) | (((new (...args: any[]) => string | number | boolean | Function) | (() => string | number | boolean | Function | null)) | null)[], unknown, unknown>;
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
type ConfigProviderInstance = InstanceType<typeof ConfigProvider> & unknown;
//#endregion
export { ConfigProvider, ConfigProviderInstance, messageConfig };
@@ -0,0 +1,24 @@
import { provideGlobalConfig } from "./hooks/use-global-config.mjs";
import { configProviderProps } from "./config-provider-props.mjs";
import { defineComponent, renderSlot, watch } from "vue";
//#region ../../packages/components/config-provider/src/config-provider.ts
const messageConfig = { placement: "top" };
const ConfigProvider = defineComponent({
name: "ElConfigProvider",
props: configProviderProps,
setup(props, { slots }) {
const config = provideGlobalConfig(props);
watch(() => props.message, (val) => {
Object.assign(messageConfig, config?.value?.message ?? {}, val ?? {});
}, {
immediate: true,
deep: true
});
return () => renderSlot(slots, "default", { config: config?.value });
}
});
//#endregion
export { ConfigProvider as default, messageConfig };
//# sourceMappingURL=config-provider.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"config-provider.mjs","names":[],"sources":["../../../../../../packages/components/config-provider/src/config-provider.ts"],"sourcesContent":["import { defineComponent, renderSlot, watch } from 'vue'\nimport { provideGlobalConfig } from './hooks/use-global-config'\nimport { configProviderProps } from './config-provider-props'\n\nimport type { MessageConfigContext } from '@element-plus/components/message'\n\nexport const messageConfig: MessageConfigContext = {\n placement: 'top',\n}\n\nconst ConfigProvider = defineComponent({\n name: 'ElConfigProvider',\n props: configProviderProps,\n\n setup(props, { slots }) {\n const config = provideGlobalConfig(props)\n watch(\n () => props.message,\n (val) => {\n Object.assign(messageConfig, config?.value?.message ?? {}, val ?? {})\n },\n { immediate: true, deep: true }\n )\n return () => renderSlot(slots, 'default', { config: config?.value })\n },\n})\nexport type ConfigProviderInstance = InstanceType<typeof ConfigProvider> &\n unknown\n\nexport default ConfigProvider\n"],"mappings":";;;;;AAMA,MAAa,gBAAsC,EACjD,WAAW,OACZ;AAED,MAAM,iBAAiB,gBAAgB;CACrC,MAAM;CACN,OAAO;CAEP,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,SAAS,oBAAoB,MAAM;AACzC,cACQ,MAAM,UACX,QAAQ;AACP,UAAO,OAAO,eAAe,QAAQ,OAAO,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC;KAEvE;GAAE,WAAW;GAAM,MAAM;GAAM,CAChC;AACD,eAAa,WAAW,OAAO,WAAW,EAAE,QAAQ,QAAQ,OAAO,CAAC;;CAEvE,CAAC"}
@@ -0,0 +1,8 @@
import { ConfigProviderProps } from "./config-provider-props.js";
import { InjectionKey, Ref } from "vue";
//#region ../../packages/components/config-provider/src/constants.d.ts
type ConfigProviderContext = Partial<ConfigProviderProps>;
declare const configProviderContextKey: InjectionKey<Ref<ConfigProviderContext>>;
//#endregion
export { ConfigProviderContext, configProviderContextKey };
@@ -0,0 +1,6 @@
//#region ../../packages/components/config-provider/src/constants.ts
const configProviderContextKey = Symbol();
//#endregion
export { configProviderContextKey };
//# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"constants.mjs","names":[],"sources":["../../../../../../packages/components/config-provider/src/constants.ts"],"sourcesContent":["import type { ConfigProviderProps } from './config-provider-props'\nimport type { InjectionKey, Ref } from 'vue'\n\nexport type ConfigProviderContext = Partial<ConfigProviderProps>\n\nexport const configProviderContextKey: InjectionKey<\n Ref<ConfigProviderContext>\n> = Symbol()\n"],"mappings":";AAKA,MAAa,2BAET,QAAQ"}
@@ -0,0 +1,42 @@
import { LocaleContext } from "../../../../hooks/use-locale/index.js";
import "../../../../hooks/index.js";
import { ConfigProviderProps } from "../config-provider-props.js";
import { ConfigProviderContext } from "../constants.js";
import "../../../../index.js";
import * as vue from "vue";
import { App, Ref } from "vue";
import { MaybeRef } from "@vueuse/core";
//#region ../../packages/components/config-provider/src/hooks/use-global-config.d.ts
declare function useGlobalConfig<K extends keyof ConfigProviderContext, D extends ConfigProviderContext[K]>(key: K, defaultValue?: D): Ref<Exclude<ConfigProviderContext[K], undefined> | D>;
declare function useGlobalConfig(): Ref<ConfigProviderContext>;
declare function useGlobalComponentSettings(block: string, sizeFallback?: MaybeRef<ConfigProviderContext['size']>): {
ns: {
namespace: vue.ComputedRef<string>;
b: (blockSuffix?: string) => string;
e: (element?: string) => string;
m: (modifier?: string) => string;
be: (blockSuffix?: string, element?: string) => string;
em: (element?: string, modifier?: string) => string;
bm: (blockSuffix?: string, modifier?: string) => string;
bem: (blockSuffix?: string, element?: string, modifier?: string) => string;
is: {
(name: string, state: boolean | undefined): string;
(name: string): string;
};
cssVar: (object: Record<string, string>) => Record<string, string>;
cssVarName: (name: string) => string;
cssVarBlock: (object: Record<string, string>) => Record<string, string>;
cssVarBlockName: (name: string) => string;
};
locale: LocaleContext;
zIndex: {
initialZIndex: vue.ComputedRef<number>;
currentZIndex: vue.ComputedRef<number>;
nextZIndex: () => number;
};
size: vue.ComputedRef<"default" | "" | "small" | "large">;
};
declare const provideGlobalConfig: (config: MaybeRef<ConfigProviderContext>, app?: App, global?: boolean) => vue.ComputedRef<Partial<ConfigProviderProps>> | undefined;
//#endregion
export { provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig };
@@ -0,0 +1,66 @@
import { keysOf } from "../../../../utils/objects.mjs";
import { debugWarn } from "../../../../utils/error.mjs";
import { localeContextKey, useLocale } from "../../../../hooks/use-locale/index.mjs";
import { defaultNamespace, namespaceContextKey, useNamespace } from "../../../../hooks/use-namespace/index.mjs";
import { defaultInitialZIndex, useZIndex, zIndexContextKey } from "../../../../hooks/use-z-index/index.mjs";
import { SIZE_INJECTION_KEY } from "../../../../hooks/use-size/index.mjs";
import { emptyValuesContextKey } from "../../../../hooks/use-empty-values/index.mjs";
import { configProviderContextKey } from "../constants.mjs";
import { computed, getCurrentInstance, inject, provide, ref, unref } from "vue";
//#region ../../packages/components/config-provider/src/hooks/use-global-config.ts
const globalConfig = ref();
function useGlobalConfig(key, defaultValue = void 0) {
const config = getCurrentInstance() ? inject(configProviderContextKey, globalConfig) : globalConfig;
if (key) return computed(() => config.value?.[key] ?? defaultValue);
else return config;
}
function useGlobalComponentSettings(block, sizeFallback) {
const config = useGlobalConfig();
const ns = useNamespace(block, computed(() => config.value?.namespace || defaultNamespace));
const locale = useLocale(computed(() => config.value?.locale));
const zIndex = useZIndex(computed(() => config.value?.zIndex || defaultInitialZIndex));
const size = computed(() => unref(sizeFallback) || config.value?.size || "");
provideGlobalConfig(computed(() => unref(config) || {}));
return {
ns,
locale,
zIndex,
size
};
}
const provideGlobalConfig = (config, app, global = false) => {
const inSetup = !!getCurrentInstance();
const oldConfig = inSetup ? useGlobalConfig() : void 0;
const provideFn = app?.provide ?? (inSetup ? provide : void 0);
if (!provideFn) {
debugWarn("provideGlobalConfig", "provideGlobalConfig() can only be used inside setup().");
return;
}
const context = computed(() => {
const cfg = unref(config);
if (!oldConfig?.value) return cfg;
return mergeConfig(oldConfig.value, cfg);
});
provideFn(configProviderContextKey, context);
provideFn(localeContextKey, computed(() => context.value.locale));
provideFn(namespaceContextKey, computed(() => context.value.namespace));
provideFn(zIndexContextKey, computed(() => context.value.zIndex));
provideFn(SIZE_INJECTION_KEY, { size: computed(() => context.value.size || "") });
provideFn(emptyValuesContextKey, computed(() => ({
emptyValues: context.value.emptyValues,
valueOnClear: context.value.valueOnClear
})));
if (global || !globalConfig.value) globalConfig.value = context.value;
return context;
};
const mergeConfig = (a, b) => {
const keys = [...new Set([...keysOf(a), ...keysOf(b)])];
const obj = {};
for (const key of keys) obj[key] = b[key] !== void 0 ? b[key] : a[key];
return obj;
};
//#endregion
export { provideGlobalConfig, useGlobalComponentSettings, useGlobalConfig };
//# sourceMappingURL=use-global-config.mjs.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,2 @@
import "../../base/style/css.mjs";
import "element-plus/theme-chalk/el-config-provider.css";
@@ -0,0 +1,2 @@
import "../../base/style/index.mjs";
import "element-plus/theme-chalk/src/config-provider.scss";