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
+10
View File
@@ -0,0 +1,10 @@
import { SFCWithInstall } from "../../utils/vue/typescript.js";
import "../../utils/index.js";
import { BadgeProps, BadgePropsPublic, badgeProps } from "./src/badge.js";
import { _default } from "./src/badge.vue.js";
import { BadgeInstance } from "./src/instance.js";
//#region ../../packages/components/badge/index.d.ts
declare const ElBadge: SFCWithInstall<typeof _default>;
//#endregion
export { type BadgeInstance, BadgeProps, BadgePropsPublic, ElBadge, ElBadge as default, badgeProps };
+10
View File
@@ -0,0 +1,10 @@
import { withInstall } from "../../utils/vue/install.mjs";
import { badgeProps } from "./src/badge.mjs";
import badge_default from "./src/badge2.mjs";
//#region ../../packages/components/badge/index.ts
const ElBadge = withInstall(badge_default);
//#endregion
export { ElBadge, ElBadge as default, badgeProps };
//# sourceMappingURL=index.mjs.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","names":["Badge"],"sources":["../../../../../packages/components/badge/index.ts"],"sourcesContent":["import { withInstall } from '@element-plus/utils'\nimport Badge from './src/badge.vue'\n\nimport type { SFCWithInstall } from '@element-plus/utils'\n\nexport const ElBadge: SFCWithInstall<typeof Badge> = withInstall(Badge)\nexport default ElBadge\n\nexport * from './src/badge'\nexport type { BadgeInstance } from './src/instance'\n"],"mappings":";;;;;AAKA,MAAa,UAAwC,YAAYA,cAAM"}
+79
View File
@@ -0,0 +1,79 @@
import { EpPropFinalized, EpPropMergeType } from "../../../utils/vue/props/types.js";
import "../../../utils/index.js";
import * as vue from "vue";
import { ExtractPublicPropTypes, StyleValue } from "vue";
//#region ../../packages/components/badge/src/badge.d.ts
interface BadgeProps {
/**
* @description display value.
*/
value?: string | number;
/**
* @description maximum value, shows `{max}+` when exceeded. Only works if value is a number.
*/
max?: number;
/**
* @description if a little dot is displayed.
*/
isDot?: boolean;
/**
* @description hidden badge.
*/
hidden?: boolean;
/**
* @description badge type.
*/
type?: 'primary' | 'success' | 'warning' | 'info' | 'danger';
/**
* @description whether to show badge when value is zero.
*/
showZero?: boolean;
/**
* @description customize dot background color
*/
color?: string;
/**
* @description CSS style of badge
*/
badgeStyle?: StyleValue;
/**
* @description set offset of the badge
*/
offset?: [number, number];
/**
* @description custom class name of badge
*/
badgeClass?: string;
}
/**
* @deprecated Removed after 3.0.0, Use `BadgeProps` instead.
*/
declare const badgeProps: {
readonly value: EpPropFinalized<readonly [StringConstructor, NumberConstructor], unknown, unknown, "", boolean>;
readonly max: EpPropFinalized<NumberConstructor, unknown, unknown, 99, boolean>;
readonly isDot: BooleanConstructor;
readonly hidden: BooleanConstructor;
readonly type: EpPropFinalized<StringConstructor, "info" | "primary" | "success" | "warning" | "danger", unknown, "danger", boolean>;
readonly showZero: EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
readonly color: StringConstructor;
readonly badgeStyle: {
readonly type: vue.PropType<EpPropMergeType<(new (...args: any[]) => string | false | vue.CSSProperties | StyleValue[]) | (() => StyleValue) | (((new (...args: any[]) => string | false | vue.CSSProperties | StyleValue[]) | (() => StyleValue)) | null)[], unknown, unknown>>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
readonly offset: EpPropFinalized<(new (...args: any[]) => [number, number]) | (() => [number, number]) | (((new (...args: any[]) => [number, number]) | (() => [number, number])) | null)[], unknown, unknown, () => number[], boolean>;
readonly badgeClass: {
readonly type: vue.PropType<string>;
readonly required: false;
readonly validator: ((val: unknown) => boolean) | undefined;
__epPropKey: true;
};
};
/**
* @deprecated Removed after 3.0.0, Use `BadgeProps` instead.
*/
type BadgePropsPublic = ExtractPublicPropTypes<typeof badgeProps>;
//#endregion
export { BadgeProps, BadgePropsPublic, badgeProps };
+48
View File
@@ -0,0 +1,48 @@
import { buildProps, definePropType } from "../../../utils/vue/props/runtime.mjs";
//#region ../../packages/components/badge/src/badge.ts
/**
* @deprecated Removed after 3.0.0, Use `BadgeProps` instead.
*/
const badgeProps = buildProps({
value: {
type: [String, Number],
default: ""
},
max: {
type: Number,
default: 99
},
isDot: Boolean,
hidden: Boolean,
type: {
type: String,
values: [
"primary",
"success",
"warning",
"info",
"danger"
],
default: "danger"
},
showZero: {
type: Boolean,
default: true
},
color: String,
badgeStyle: { type: definePropType([
String,
Object,
Array
]) },
offset: {
type: definePropType(Array),
default: () => [0, 0]
},
badgeClass: { type: String }
});
//#endregion
export { badgeProps };
//# sourceMappingURL=badge.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"badge.mjs","names":[],"sources":["../../../../../../packages/components/badge/src/badge.ts"],"sourcesContent":["import { buildProps, definePropType } from '@element-plus/utils'\n\nimport type { ExtractPublicPropTypes, StyleValue } from 'vue'\n\nexport interface BadgeProps {\n /**\n * @description display value.\n */\n value?: string | number\n /**\n * @description maximum value, shows `{max}+` when exceeded. Only works if value is a number.\n */\n max?: number\n /**\n * @description if a little dot is displayed.\n */\n isDot?: boolean\n /**\n * @description hidden badge.\n */\n hidden?: boolean\n /**\n * @description badge type.\n */\n type?: 'primary' | 'success' | 'warning' | 'info' | 'danger'\n /**\n * @description whether to show badge when value is zero.\n */\n showZero?: boolean\n /**\n * @description customize dot background color\n */\n color?: string\n /**\n * @description CSS style of badge\n */\n badgeStyle?: StyleValue\n /**\n * @description set offset of the badge\n */\n offset?: [number, number]\n /**\n * @description custom class name of badge\n */\n badgeClass?: string\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `BadgeProps` instead.\n */\nexport const badgeProps = buildProps({\n /**\n * @description display value.\n */\n value: {\n type: [String, Number],\n default: '',\n },\n /**\n * @description maximum value, shows `{max}+` when exceeded. Only works if value is a number.\n */\n max: {\n type: Number,\n default: 99,\n },\n /**\n * @description if a little dot is displayed.\n */\n isDot: Boolean,\n /**\n * @description hidden badge.\n */\n hidden: Boolean,\n /**\n * @description badge type.\n */\n type: {\n type: String,\n values: ['primary', 'success', 'warning', 'info', 'danger'],\n default: 'danger',\n },\n /**\n * @description whether to show badge when value is zero.\n */\n showZero: {\n type: Boolean,\n default: true,\n },\n /**\n * @description customize dot background color\n */\n color: String,\n /**\n * @description CSS style of badge\n */\n badgeStyle: {\n type: definePropType<StyleValue>([String, Object, Array]),\n },\n /**\n * @description set offset of the badge\n */\n offset: {\n type: definePropType<[number, number]>(Array),\n default: () => [0, 0],\n },\n /**\n * @description custom class name of badge\n */\n badgeClass: {\n type: String,\n },\n} as const)\n\n/**\n * @deprecated Removed after 3.0.0, Use `BadgeProps` instead.\n */\nexport type BadgePropsPublic = ExtractPublicPropTypes<typeof badgeProps>\n"],"mappings":";;;;;;AAkDA,MAAa,aAAa,WAAW;CAInC,OAAO;EACL,MAAM,CAAC,QAAQ,OAAO;EACtB,SAAS;EACV;CAID,KAAK;EACH,MAAM;EACN,SAAS;EACV;CAID,OAAO;CAIP,QAAQ;CAIR,MAAM;EACJ,MAAM;EACN,QAAQ;GAAC;GAAW;GAAW;GAAW;GAAQ;GAAS;EAC3D,SAAS;EACV;CAID,UAAU;EACR,MAAM;EACN,SAAS;EACV;CAID,OAAO;CAIP,YAAY,EACV,MAAM,eAA2B;EAAC;EAAQ;EAAQ;EAAM,CAAC,EAC1D;CAID,QAAQ;EACN,MAAM,eAAiC,MAAM;EAC7C,eAAe,CAAC,GAAG,EAAE;EACtB;CAID,YAAY,EACV,MAAM,QACP;CACF,CAAU"}
@@ -0,0 +1,32 @@
import { BadgeProps } from "./badge.js";
import * as vue from "vue";
import { StyleValue } from "vue";
//#region ../../packages/components/badge/src/badge.vue.d.ts
declare var __VLS_1: {}, __VLS_9: {
value: string;
};
type __VLS_Slots = {} & {
default?: (props: typeof __VLS_1) => any;
} & {
content?: (props: typeof __VLS_9) => any;
};
declare const __VLS_base: vue.DefineComponent<BadgeProps, {
/** @description badge content */content: vue.ComputedRef<string>;
}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<BadgeProps> & Readonly<{}>, {
offset: [number, number];
type: "primary" | "success" | "warning" | "info" | "danger";
value: string | number;
max: number;
showZero: boolean;
badgeStyle: string | false | vue.CSSProperties | StyleValue[] | null;
}, {}, {}, {}, string, vue.ComponentProvideOptions, false, {}, any>;
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
declare const _default: typeof __VLS_export;
type __VLS_WithSlots<T, S> = T & {
new (): {
$slots: S;
};
};
//#endregion
export { _default };
@@ -0,0 +1,50 @@
import { isNumber } from "../../../utils/types.mjs";
import { addUnit } from "../../../utils/dom/style.mjs";
import { useNamespace } from "../../../hooks/use-namespace/index.mjs";
import { badgeProps } from "./badge.mjs";
import { Transition, computed, createCommentVNode, createElementBlock, createTextVNode, createVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, renderSlot, toDisplayString, unref, withCtx } from "vue";
//#region ../../packages/components/badge/src/badge.vue?vue&type=script&setup=true&lang.ts
var badge_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
name: "ElBadge",
__name: "badge",
props: badgeProps,
setup(__props, { expose: __expose }) {
const props = __props;
const ns = useNamespace("badge");
const content = computed(() => {
if (props.isDot) return "";
if (isNumber(props.value) && isNumber(props.max)) return props.max < props.value ? `${props.max}+` : `${props.value}`;
return `${props.value}`;
});
const style = computed(() => {
return [{
backgroundColor: props.color,
marginRight: addUnit(-props.offset[0]),
marginTop: addUnit(props.offset[1])
}, props.badgeStyle ?? {}];
});
__expose({ content });
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", { class: normalizeClass(unref(ns).b()) }, [renderSlot(_ctx.$slots, "default"), createVNode(Transition, { name: `${unref(ns).namespace.value}-zoom-in-center` }, {
default: withCtx(() => [!__props.hidden && (content.value || __props.isDot || _ctx.$slots.content) ? (openBlock(), createElementBlock("sup", {
key: 0,
class: normalizeClass([
unref(ns).e("content"),
unref(ns).em("content", __props.type),
unref(ns).is("fixed", !!_ctx.$slots.default),
unref(ns).is("dot", __props.isDot),
unref(ns).is("hide-zero", !__props.showZero && __props.value === 0),
__props.badgeClass
]),
style: normalizeStyle(style.value)
}, [renderSlot(_ctx.$slots, "content", { value: content.value }, () => [createTextVNode(toDisplayString(content.value), 1)])], 6)) : createCommentVNode("v-if", true)]),
_: 3
}, 8, ["name"])], 2);
};
}
});
//#endregion
export { badge_vue_vue_type_script_setup_true_lang_default as default };
//# sourceMappingURL=badge.vue_vue_type_script_setup_true_lang.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"badge.vue_vue_type_script_setup_true_lang.mjs","names":["$slots"],"sources":["../../../../../../packages/components/badge/src/badge.vue"],"sourcesContent":["<template>\n <div :class=\"ns.b()\">\n <slot />\n <transition :name=\"`${ns.namespace.value}-zoom-in-center`\">\n <sup\n v-if=\"!hidden && (content || isDot || $slots.content)\"\n :class=\"[\n ns.e('content'),\n ns.em('content', type),\n ns.is('fixed', !!$slots.default),\n ns.is('dot', isDot),\n ns.is('hide-zero', !showZero && value === 0),\n badgeClass,\n ]\"\n :style=\"style\"\n >\n <slot name=\"content\" :value=\"content\">\n {{ content }}\n </slot>\n </sup>\n </transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { addUnit, isNumber } from '@element-plus/utils'\n\nimport type { StyleValue } from 'vue'\nimport type { BadgeProps } from './badge'\n\ndefineOptions({\n name: 'ElBadge',\n})\n\nconst props = withDefaults(defineProps<BadgeProps>(), {\n badgeStyle: undefined,\n value: '',\n max: 99,\n type: 'danger',\n showZero: true,\n offset: () => [0, 0],\n})\n\nconst ns = useNamespace('badge')\n\nconst content = computed<string>(() => {\n if (props.isDot) return ''\n if (isNumber(props.value) && isNumber(props.max)) {\n return props.max < props.value ? `${props.max}+` : `${props.value}`\n }\n return `${props.value}`\n})\n\nconst style = computed<StyleValue>(() => {\n return [\n {\n backgroundColor: props.color,\n marginRight: addUnit(-props.offset[0]),\n marginTop: addUnit(props.offset[1]),\n },\n props.badgeStyle ?? {},\n ]\n})\n\ndefineExpose({\n /** @description badge content */\n content,\n})\n</script>\n"],"mappings":";;;;;;;;;;;;EAoCA,MAAM,QAAQ;EASd,MAAM,KAAK,aAAa,QAAO;EAE/B,MAAM,UAAU,eAAuB;AACrC,OAAI,MAAM,MAAO,QAAO;AACxB,OAAI,SAAS,MAAM,MAAM,IAAI,SAAS,MAAM,IAAI,CAC9C,QAAO,MAAM,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM;AAE9D,UAAO,GAAG,MAAM;IACjB;EAED,MAAM,QAAQ,eAA2B;AACvC,UAAO,CACL;IACE,iBAAiB,MAAM;IACvB,aAAa,QAAQ,CAAC,MAAM,OAAO,GAAG;IACtC,WAAW,QAAQ,MAAM,OAAO,GAAG;IACpC,EACD,MAAM,cAAc,EAAE,CACxB;IACD;AAED,WAAa,EAEX,SACD,CAAA;;uBApEC,mBAoBM,OAAA,EApBA,OAAK,eAAE,MAAA,GAAE,CAAC,GAAC,CAAA,KACf,WAAQ,KAAA,QAAA,UAAA,EACR,YAiBa,YAAA,EAjBA,MAAI,GAAK,MAAA,GAAE,CAAC,UAAU,MAAK;2BAgBhC,EAdG,QAAA,WAAW,QAAA,SAAW,QAAA,SAASA,KAAAA,OAAO,yBAD/C,mBAeM,OAAA;;KAbH,OAAK,eAAA;MAAc,MAAA,GAAE,CAAC,EAAC,UAAA;MAAuB,MAAA,GAAE,CAAC,GAAE,WAAY,QAAA,KAAI;MAAa,MAAA,GAAE,CAAC,GAAE,SAAA,CAAA,CAAYA,KAAAA,OAAO,QAAO;MAAa,MAAA,GAAE,CAAC,GAAE,OAAQ,QAAA,MAAK;MAAa,MAAA,GAAE,CAAC,GAAE,aAAA,CAAe,QAAA,YAAY,QAAA,UAAK,EAAA;MAAmB,QAAA;;KAQnN,OAAK,eAAE,MAAA,MAAK;QAEb,WAEO,KAAA,QAAA,WAAA,EAFe,OAAO,QAAA,OAAO,QAE7B,iCADF,QAAA,MAAO,EAAA,EAAA"}
@@ -0,0 +1,8 @@
import badge_vue_vue_type_script_setup_true_lang_default from "./badge.vue_vue_type_script_setup_true_lang.mjs";
//#region ../../packages/components/badge/src/badge.vue
var badge_default = badge_vue_vue_type_script_setup_true_lang_default;
//#endregion
export { badge_default as default };
//# sourceMappingURL=badge2.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"badge2.mjs","names":[],"sources":["../../../../../../packages/components/badge/src/badge.vue"],"sourcesContent":["<template>\n <div :class=\"ns.b()\">\n <slot />\n <transition :name=\"`${ns.namespace.value}-zoom-in-center`\">\n <sup\n v-if=\"!hidden && (content || isDot || $slots.content)\"\n :class=\"[\n ns.e('content'),\n ns.em('content', type),\n ns.is('fixed', !!$slots.default),\n ns.is('dot', isDot),\n ns.is('hide-zero', !showZero && value === 0),\n badgeClass,\n ]\"\n :style=\"style\"\n >\n <slot name=\"content\" :value=\"content\">\n {{ content }}\n </slot>\n </sup>\n </transition>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useNamespace } from '@element-plus/hooks'\nimport { addUnit, isNumber } from '@element-plus/utils'\n\nimport type { StyleValue } from 'vue'\nimport type { BadgeProps } from './badge'\n\ndefineOptions({\n name: 'ElBadge',\n})\n\nconst props = withDefaults(defineProps<BadgeProps>(), {\n badgeStyle: undefined,\n value: '',\n max: 99,\n type: 'danger',\n showZero: true,\n offset: () => [0, 0],\n})\n\nconst ns = useNamespace('badge')\n\nconst content = computed<string>(() => {\n if (props.isDot) return ''\n if (isNumber(props.value) && isNumber(props.max)) {\n return props.max < props.value ? `${props.max}+` : `${props.value}`\n }\n return `${props.value}`\n})\n\nconst style = computed<StyleValue>(() => {\n return [\n {\n backgroundColor: props.color,\n marginRight: addUnit(-props.offset[0]),\n marginTop: addUnit(props.offset[1]),\n },\n props.badgeStyle ?? {},\n ]\n})\n\ndefineExpose({\n /** @description badge content */\n content,\n})\n</script>\n"],"mappings":""}
@@ -0,0 +1,6 @@
import { _default } from "./badge.vue.js";
//#region ../../packages/components/badge/src/instance.d.ts
type BadgeInstance = InstanceType<typeof _default> & unknown;
//#endregion
export { BadgeInstance };
+2
View File
@@ -0,0 +1,2 @@
import "../../base/style/css.mjs";
import "element-plus/theme-chalk/el-badge.css";
@@ -0,0 +1,2 @@
import "../../base/style/index.mjs";
import "element-plus/theme-chalk/src/badge.scss";