@will-ui/vue 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/btn/Btn.d.ts +4 -7
- package/dist/components/btn/Btn.js +1 -0
- package/dist/components/btn/Btn.js.map +1 -1
- package/dist/components/cascade/Cascade.d.ts +1 -1
- package/dist/components/choose/Choose.d.ts +4 -2
- package/dist/components/choose2/Choose2.d.ts +1 -1
- package/dist/components/confirm/index.d.ts +3 -4
- package/dist/components/confirm/index.js.map +1 -1
- package/dist/components/copy/Copy.d.ts +8 -8
- package/dist/components/copy/Copy.js +3 -2
- package/dist/components/copy/Copy.js.map +1 -1
- package/dist/components/cornerEars/CornerEars.d.ts +4 -7
- package/dist/components/cornerEars/CornerEars.js +1 -0
- package/dist/components/cornerEars/CornerEars.js.map +1 -1
- package/dist/components/date/DatePanel.d.ts +4 -0
- package/dist/components/date/DatePanel.js +2 -2
- package/dist/components/date/DatePanel.js.map +1 -1
- package/dist/components/date/DatePicker.d.ts +1 -1
- package/dist/components/date/DatePicker.js +4 -4
- package/dist/components/date/DatePicker.js.map +1 -1
- package/dist/components/date/Days.d.ts +2 -4
- package/dist/components/date/Days.js +1 -3
- package/dist/components/date/Days.js.map +1 -1
- package/dist/components/date/Months.d.ts +2 -4
- package/dist/components/date/Months.js +1 -3
- package/dist/components/date/Months.js.map +1 -1
- package/dist/components/date/QuickDate.d.ts +2 -12
- package/dist/components/date/QuickDate.js +1 -1
- package/dist/components/date/QuickDate.js.map +1 -1
- package/dist/components/date/Years.d.ts +3 -6
- package/dist/components/date/Years.js +1 -8
- package/dist/components/date/Years.js.map +1 -1
- package/dist/components/form/_use/formRules.d.ts +1 -1
- package/dist/components/form/_use/formRules.js.map +1 -1
- package/dist/components/formItem/FormItem.js.map +1 -1
- package/dist/components/image/Image.d.ts +5 -7
- package/dist/components/image/Image.js +3 -2
- package/dist/components/image/Image.js.map +1 -1
- package/dist/components/index.js +9 -9
- package/dist/components/modal/Modal.d.ts +1 -1
- package/dist/components/modal/Modal.js +29 -24
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/notice/src/_util/index.d.ts +1 -1
- package/dist/components/notice/src/_util/index.js.map +1 -1
- package/dist/components/number/Number copy.d.ts +1 -1
- package/dist/components/number/Number.d.ts +1 -1
- package/dist/components/pagination/src/Pagination.d.ts +6 -4
- package/dist/components/picture/Picture.d.ts +5 -7
- package/dist/components/picture/Picture.js +6 -5
- package/dist/components/picture/Picture.js.map +1 -1
- package/dist/components/picture/PictureViewport.js +22 -32
- package/dist/components/picture/PictureViewport.js.map +1 -1
- package/dist/components/progress/Progress.d.ts +1 -1
- package/dist/components/scrollbar/Scrollbar.js +61 -78
- package/dist/components/scrollbar/Scrollbar.js.map +1 -1
- package/dist/components/sheet/Sheet.d.ts +3 -1
- package/dist/components/sheet/_cell.js +16 -27
- package/dist/components/sheet/_cell.js.map +1 -1
- package/dist/components/slider/Slider.d.ts +2 -2
- package/dist/components/slider/Slider.js +24 -41
- package/dist/components/slider/Slider.js.map +1 -1
- package/dist/components/tab/Tab.d.ts +3 -3
- package/dist/components/tab/Tab.js +6 -0
- package/dist/components/tab/Tab.js.map +1 -1
- package/dist/components/textarea/Textarea.d.ts +5 -13
- package/dist/components/textarea/Textarea.js +3 -2
- package/dist/components/textarea/Textarea.js.map +1 -1
- package/dist/components/time/Dial.js.map +1 -1
- package/dist/components/time/Dial.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/time/TimePicker.d.ts +14 -2
- package/dist/components/tree-choose/TreeChoose.d.ts +1 -1
- package/dist/components/tree-choose/TreeChoose.js.map +1 -1
- package/dist/components/virtual/Virtual.d.ts +5 -5
- package/dist/components/virtual/Virtual.js +6 -0
- package/dist/components/virtual/Virtual.js.map +1 -1
- package/dist/index.d.ts +20 -15
- package/dist/index.js +6 -5
- package/dist/use/index.d.ts +2 -0
- package/dist/use/useChildComponentsCollector.d.ts +5 -0
- package/dist/use/useChildComponentsCollector.js.map +1 -1
- package/dist/use/usePercentDrag.d.ts +1 -1
- package/dist/use/usePercentDrag.js +19 -29
- package/dist/use/usePercentDrag.js.map +1 -1
- package/dist/use/usePointerDrag.d.ts +50 -0
- package/dist/use/usePointerDrag.js +143 -0
- package/dist/use/usePointerDrag.js.map +1 -0
- package/dist/use/useUII18n.d.ts +10 -0
- package/dist/use/useUII18n.js.map +1 -1
- package/dist/use/useUpload.js +1 -1
- package/dist/use/useUpload.js.map +1 -1
- package/package.json +79 -88
- package/dist/use/useDrag.d.ts +0 -17
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefineComponent } from 'vue';
|
|
1
2
|
import { BtnMode, BtnType } from '../../config/types';
|
|
2
3
|
import { CssVars } from '../../util';
|
|
3
4
|
import { BtnHtmlType, BtnSize } from './context';
|
|
@@ -35,11 +36,7 @@ export type BtnJSXProps = BtnProps & Omit<JSX.IntrinsicElements['button'], keyof
|
|
|
35
36
|
'v-slots'?: BtnSlots;
|
|
36
37
|
vSlots?: BtnSlots;
|
|
37
38
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
declare const Btn: BtnComponent;
|
|
44
|
-
export type BtnInstance = InstanceType<BtnComponent>;
|
|
39
|
+
/** 断言为 DefineComponent,hover / 补全直接看到 BtnJSXProps(勿再包 XxxComponent 别名) */
|
|
40
|
+
declare const Btn: DefineComponent<BtnJSXProps>;
|
|
41
|
+
export type BtnInstance = InstanceType<typeof Btn>;
|
|
45
42
|
export default Btn;
|
|
@@ -5,6 +5,7 @@ import { BTN_GROUP_KEY } from "./context.js";
|
|
|
5
5
|
import { BTN_FALLBACK } from "./config.js";
|
|
6
6
|
import { Transition, computed, createVNode, defineComponent, inject, mergeProps, normalizeClass, normalizeStyle, onUnmounted, ref } from "vue";
|
|
7
7
|
//#region components/btn/Btn.tsx
|
|
8
|
+
/** 断言为 DefineComponent,hover / 补全直接看到 BtnJSXProps(勿再包 XxxComponent 别名) */
|
|
8
9
|
var Btn = /* @__PURE__ */ defineComponent({
|
|
9
10
|
name: "Btn",
|
|
10
11
|
inheritAttrs: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Btn.js","names":["computed","defineComponent","inject","mergeProps","normalizeClass","normalizeStyle","onUnmounted","ref","Transition","createVNode","_createVNode","isBoolean","isNumber","propColorToCssVars","propSizeToCssVars","toCssVarsStyle","useComponentConfig","BTN_GROUP_KEY","BTN_FALLBACK","BtnImpl","name","inheritAttrs","props","tag","type","String","default","undefined","htmlType","mode","size","Number","color","cssVars","Object","block","Boolean","capsule","disabled","loading","text","sleep","slots","setup","attrs","group","cfg","cooling","sleepTimer","btnType","value","btnMode","btnSize","btnColor","tagName","sleepMs","s","Math","max","inactive","klass","tokenStyle","clearSleep","clearTimeout","invokeAttrClick","handler","e","Array","isArray","fn","onClick","preventDefault","stopPropagation","ms","setTimeout","Tag","_attrsClick","restAttrs","rootProps","class","style","Btn"],"sources":["../../../components/btn/Btn.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n inject,\r\n mergeProps,\r\n normalizeClass,\r\n normalizeStyle,\r\n onUnmounted,\r\n ref,\r\n Transition,\r\n} from 'vue'\r\nimport type { PropType, SlotsType } from 'vue'\r\nimport type { BtnMode, BtnType } from '../../config/types'\r\nimport {\r\n isBoolean,\r\n isNumber,\r\n propColorToCssVars,\r\n propSizeToCssVars,\r\n toCssVarsStyle,\r\n type CssVars,\r\n} from '../../util'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport {\r\n BTN_GROUP_KEY,\r\n type BtnHtmlType,\r\n type BtnSize,\r\n} from './context'\r\nimport { BTN_FALLBACK, type BtnGlobalConfig } from './config'\r\n\r\nexport type { BtnSize, BtnHtmlType, BtnGroupContext } from './context'\r\nexport type { BtnGlobalConfig } from './config'\r\nexport { BTN_GROUP_KEY } from './context'\r\nexport { BTN_FALLBACK } from './config'\r\n\r\nexport type BtnSlots = {\r\n default?: () => any\r\n /** loading 时左侧指示器,默认内置转圈 */\r\n loading?: () => any\r\n}\r\n\r\nexport type BtnProps = {\r\n tag?: keyof HTMLElementTagNameMap\r\n htmlType?: BtnHtmlType\r\n type?: BtnType\r\n mode?: BtnMode\r\n size?: BtnSize\r\n color?: string\r\n block?: boolean\r\n capsule?: boolean\r\n disabled?: boolean\r\n loading?: boolean\r\n text?: string | number\r\n sleep?: boolean | number\r\n /** 实例 CSS 变量(如 `--w-prop-btn-bg-color`) */\r\n cssVars?: CssVars\r\n}\r\n\r\n/**\r\n * 运行时靠 attrs 透传到根节点;不声明 click emit,onClick 等走原生 fallthrough。\r\n * TSX 需在 $props 上并上原生属性,否则 onClick / class 等会在类型上被判为不存在。\r\n * tag 可为 a 等,故并上常用锚点属性(href / target / rel)。\r\n */\r\nexport type BtnJSXProps = BtnProps &\r\n Omit<JSX.IntrinsicElements['button'], keyof BtnProps | 'ref'> &\r\n Partial<\r\n Pick<JSX.IntrinsicElements['a'], 'href' | 'target' | 'rel' | 'download'>\r\n > & {\r\n 'v-slots'?: BtnSlots\r\n vSlots?: BtnSlots\r\n }\r\n\r\nexport type BtnComponent = {\r\n new (): {\r\n $props: BtnJSXProps\r\n }\r\n}\r\n\r\ntype AttrClickHandler = (e: MouseEvent) => void\r\ntype AttrClick = AttrClickHandler | AttrClickHandler[] | undefined\r\n\r\nconst BtnImpl = defineComponent({\r\n name: 'Btn',\r\n inheritAttrs: false,\r\n props: {\r\n tag: {\r\n type: String as PropType<keyof HTMLElementTagNameMap>,\r\n default: undefined,\r\n },\r\n htmlType: {\r\n type: String as PropType<BtnHtmlType>,\r\n default: undefined,\r\n },\r\n type: { type: String as PropType<BtnType>, default: undefined },\r\n mode: { type: String as PropType<BtnMode>, default: undefined },\r\n size: { type: Number as PropType<BtnSize>, default: undefined },\r\n /** 品牌主色 → `--w-prop-btn-color`(prop > `--w-btn-color` > `--w-color`) */\r\n color: { type: String, default: undefined },\r\n /** 实例 CSS 变量(如 `--w-prop-btn-bg-color`) */\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n // Boolean 必须 default: undefined,否则未传会变成 false,全局配置无效\r\n block: { type: Boolean, default: undefined },\r\n capsule: { type: Boolean, default: undefined },\r\n disabled: { type: Boolean, default: undefined },\r\n loading: { type: Boolean, default: undefined },\r\n text: { type: [String, Number] as PropType<string | number>, default: undefined },\r\n sleep: {\r\n type: [Boolean, Number] as PropType<boolean | number>,\r\n default: undefined,\r\n },\r\n },\r\n slots: Object as SlotsType<BtnSlots>,\r\n setup(props, { slots, attrs }) {\r\n const group = inject(BTN_GROUP_KEY, undefined)\r\n const cfg = useComponentConfig('Btn', props, BTN_FALLBACK)\r\n\r\n const cooling = ref(false)\r\n let sleepTimer: ReturnType<typeof setTimeout> | undefined\r\n\r\n // 优先级:显式 props > BtnGroup > 全局配置 > FALLBACK(后两档已由 cfg 合并)\r\n const btnType = computed(\r\n () => props.type ?? group?.type ?? cfg.value.type,\r\n )\r\n const btnMode = computed(\r\n () => props.mode ?? group?.mode ?? cfg.value.mode,\r\n )\r\n const btnSize = computed(\r\n () => props.size ?? group?.size ?? cfg.value.size,\r\n )\r\n const btnColor = computed(\r\n () => props.color ?? group?.color ?? cfg.value.color,\r\n )\r\n const block = computed(() => props.block ?? cfg.value.block)\r\n const capsule = computed(() => props.capsule ?? cfg.value.capsule)\r\n const disabled = computed(() => props.disabled ?? cfg.value.disabled)\r\n const loading = computed(() => props.loading ?? cfg.value.loading)\r\n const htmlType = computed(() => props.htmlType ?? cfg.value.htmlType)\r\n const tagName = computed(() => props.tag ?? cfg.value.tag)\r\n const sleep = computed(() => props.sleep ?? cfg.value.sleep)\r\n const text = computed(() => props.text ?? cfg.value.text)\r\n\r\n const sleepMs = computed(() => {\r\n const s = sleep.value\r\n if (!s) return 0\r\n if (isBoolean(s)) return 500\r\n if (isNumber(s)) return Math.max(0, s)\r\n return 0\r\n })\r\n\r\n const inactive = computed(\r\n () => disabled.value || loading.value || cooling.value,\r\n )\r\n\r\n const klass = computed(() => [\r\n 'w-btn',\r\n {\r\n 'w-btn-gap': !group,\r\n 'w-btn-capsule': capsule.value,\r\n 'w-btn-block': block.value,\r\n 'w-btn-disabled': disabled.value,\r\n 'w-btn-loading': loading.value,\r\n 'w-btn-cooling': cooling.value,\r\n [`w-btn-${btnType.value}`]: !!btnType.value,\r\n [`w-btn-mode-${btnMode.value}`]: !!btnMode.value,\r\n },\r\n ])\r\n\r\n const tokenStyle = computed(() =>\r\n toCssVarsStyle({\r\n ...propSizeToCssVars('btn', btnSize.value),\r\n ...propColorToCssVars('btn', btnColor.value),\r\n ...props.cssVars,\r\n }),\r\n )\r\n\r\n function clearSleep() {\r\n if (sleepTimer !== undefined) {\r\n clearTimeout(sleepTimer)\r\n sleepTimer = undefined\r\n }\r\n cooling.value = false\r\n }\r\n\r\n function invokeAttrClick(handler: AttrClick, e: MouseEvent) {\r\n if (!handler) return\r\n if (Array.isArray(handler)) {\r\n for (const fn of handler) fn(e)\r\n } else {\r\n handler(e)\r\n }\r\n }\r\n\r\n function onClick(e: MouseEvent) {\r\n if (inactive.value) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n return\r\n }\r\n // 不声明 emits.click:用户 onClick / @click 在 attrs 里,需在守卫通过后手动调用\r\n invokeAttrClick(attrs.onClick as AttrClick, e)\r\n const ms = sleepMs.value\r\n if (ms > 0) {\r\n cooling.value = true\r\n sleepTimer = setTimeout(() => {\r\n cooling.value = false\r\n sleepTimer = undefined\r\n }, ms)\r\n }\r\n }\r\n\r\n onUnmounted(clearSleep)\r\n\r\n return () => {\r\n const Tag = tagName.value\r\n // 抽出 onClick,避免 mergeProps 把 attrs.onClick 与守卫串联(inactive 时仍会触发)\r\n const { onClick: _attrsClick, ...restAttrs } = attrs as Record<\r\n string,\r\n unknown\r\n > & { onClick?: AttrClick }\r\n\r\n const rootProps = mergeProps(\r\n {\r\n class: normalizeClass([klass.value, attrs.class]),\r\n style: normalizeStyle([tokenStyle.value, attrs.style]),\r\n disabled:\r\n Tag === 'button' ? disabled.value || loading.value : undefined,\r\n type: Tag === 'button' ? htmlType.value : undefined,\r\n 'aria-disabled': inactive.value || undefined,\r\n 'aria-busy': loading.value || undefined,\r\n onClick,\r\n },\r\n restAttrs,\r\n )\r\n\r\n return (\r\n <Tag {...rootProps}>\r\n <Transition name=\"w-btn-loading\" appear>\r\n {loading.value ? (\r\n <span class=\"w-btn-loading-wrap\" key=\"loading\">\r\n {slots.loading?.() || (\r\n <span class=\"w-btn-spinner\" aria-hidden=\"true\" />\r\n )}\r\n </span>\r\n ) : null}\r\n </Transition>\r\n <span class=\"w-btn-content\">\r\n {slots.default?.() || text.value}\r\n </span>\r\n </Tag>\r\n )\r\n }\r\n },\r\n})\r\n\r\nconst Btn = BtnImpl as unknown as BtnComponent\r\n\r\nexport type BtnInstance = InstanceType<BtnComponent>\r\n\r\nexport default Btn\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Btn.js","names":["computed","defineComponent","inject","mergeProps","normalizeClass","normalizeStyle","onUnmounted","ref","Transition","createVNode","_createVNode","isBoolean","isNumber","propColorToCssVars","propSizeToCssVars","toCssVarsStyle","useComponentConfig","BTN_GROUP_KEY","BTN_FALLBACK","BtnImpl","name","inheritAttrs","props","tag","type","String","default","undefined","htmlType","mode","size","Number","color","cssVars","Object","block","Boolean","capsule","disabled","loading","text","sleep","slots","setup","attrs","group","cfg","cooling","sleepTimer","btnType","value","btnMode","btnSize","btnColor","tagName","sleepMs","s","Math","max","inactive","klass","tokenStyle","clearSleep","clearTimeout","invokeAttrClick","handler","e","Array","isArray","fn","onClick","preventDefault","stopPropagation","ms","setTimeout","Tag","_attrsClick","restAttrs","rootProps","class","style","Btn"],"sources":["../../../components/btn/Btn.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n inject,\r\n mergeProps,\r\n normalizeClass,\r\n normalizeStyle,\r\n onUnmounted,\r\n ref,\r\n Transition,\r\n} from 'vue'\r\nimport type { DefineComponent, PropType, SlotsType } from 'vue'\r\nimport type { BtnMode, BtnType } from '../../config/types'\r\nimport {\r\n isBoolean,\r\n isNumber,\r\n propColorToCssVars,\r\n propSizeToCssVars,\r\n toCssVarsStyle,\r\n type CssVars,\r\n} from '../../util'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport {\r\n BTN_GROUP_KEY,\r\n type BtnHtmlType,\r\n type BtnSize,\r\n} from './context'\r\nimport { BTN_FALLBACK, type BtnGlobalConfig } from './config'\r\n\r\nexport type { BtnSize, BtnHtmlType, BtnGroupContext } from './context'\r\nexport type { BtnGlobalConfig } from './config'\r\nexport { BTN_GROUP_KEY } from './context'\r\nexport { BTN_FALLBACK } from './config'\r\n\r\nexport type BtnSlots = {\r\n default?: () => any\r\n /** loading 时左侧指示器,默认内置转圈 */\r\n loading?: () => any\r\n}\r\n\r\nexport type BtnProps = {\r\n tag?: keyof HTMLElementTagNameMap\r\n htmlType?: BtnHtmlType\r\n type?: BtnType\r\n mode?: BtnMode\r\n size?: BtnSize\r\n color?: string\r\n block?: boolean\r\n capsule?: boolean\r\n disabled?: boolean\r\n loading?: boolean\r\n text?: string | number\r\n sleep?: boolean | number\r\n /** 实例 CSS 变量(如 `--w-prop-btn-bg-color`) */\r\n cssVars?: CssVars\r\n}\r\n\r\n/**\r\n * 运行时靠 attrs 透传到根节点;不声明 click emit,onClick 等走原生 fallthrough。\r\n * TSX 需在 $props 上并上原生属性,否则 onClick / class 等会在类型上被判为不存在。\r\n * tag 可为 a 等,故并上常用锚点属性(href / target / rel)。\r\n */\r\nexport type BtnJSXProps = BtnProps &\r\n Omit<JSX.IntrinsicElements['button'], keyof BtnProps | 'ref'> &\r\n Partial<\r\n Pick<JSX.IntrinsicElements['a'], 'href' | 'target' | 'rel' | 'download'>\r\n > & {\r\n 'v-slots'?: BtnSlots\r\n vSlots?: BtnSlots\r\n }\r\n\r\ntype AttrClickHandler = (e: MouseEvent) => void\r\ntype AttrClick = AttrClickHandler | AttrClickHandler[] | undefined\r\n\r\nconst BtnImpl = defineComponent({\r\n name: 'Btn',\r\n inheritAttrs: false,\r\n props: {\r\n tag: {\r\n type: String as PropType<keyof HTMLElementTagNameMap>,\r\n default: undefined,\r\n },\r\n htmlType: {\r\n type: String as PropType<BtnHtmlType>,\r\n default: undefined,\r\n },\r\n type: { type: String as PropType<BtnType>, default: undefined },\r\n mode: { type: String as PropType<BtnMode>, default: undefined },\r\n size: { type: Number as PropType<BtnSize>, default: undefined },\r\n /** 品牌主色 → `--w-prop-btn-color`(prop > `--w-btn-color` > `--w-color`) */\r\n color: { type: String, default: undefined },\r\n /** 实例 CSS 变量(如 `--w-prop-btn-bg-color`) */\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n // Boolean 必须 default: undefined,否则未传会变成 false,全局配置无效\r\n block: { type: Boolean, default: undefined },\r\n capsule: { type: Boolean, default: undefined },\r\n disabled: { type: Boolean, default: undefined },\r\n loading: { type: Boolean, default: undefined },\r\n text: { type: [String, Number] as PropType<string | number>, default: undefined },\r\n sleep: {\r\n type: [Boolean, Number] as PropType<boolean | number>,\r\n default: undefined,\r\n },\r\n },\r\n slots: Object as SlotsType<BtnSlots>,\r\n setup(props, { slots, attrs }) {\r\n const group = inject(BTN_GROUP_KEY, undefined)\r\n const cfg = useComponentConfig('Btn', props, BTN_FALLBACK)\r\n\r\n const cooling = ref(false)\r\n let sleepTimer: ReturnType<typeof setTimeout> | undefined\r\n\r\n // 优先级:显式 props > BtnGroup > 全局配置 > FALLBACK(后两档已由 cfg 合并)\r\n const btnType = computed(\r\n () => props.type ?? group?.type ?? cfg.value.type,\r\n )\r\n const btnMode = computed(\r\n () => props.mode ?? group?.mode ?? cfg.value.mode,\r\n )\r\n const btnSize = computed(\r\n () => props.size ?? group?.size ?? cfg.value.size,\r\n )\r\n const btnColor = computed(\r\n () => props.color ?? group?.color ?? cfg.value.color,\r\n )\r\n const block = computed(() => props.block ?? cfg.value.block)\r\n const capsule = computed(() => props.capsule ?? cfg.value.capsule)\r\n const disabled = computed(() => props.disabled ?? cfg.value.disabled)\r\n const loading = computed(() => props.loading ?? cfg.value.loading)\r\n const htmlType = computed(() => props.htmlType ?? cfg.value.htmlType)\r\n const tagName = computed(() => props.tag ?? cfg.value.tag)\r\n const sleep = computed(() => props.sleep ?? cfg.value.sleep)\r\n const text = computed(() => props.text ?? cfg.value.text)\r\n\r\n const sleepMs = computed(() => {\r\n const s = sleep.value\r\n if (!s) return 0\r\n if (isBoolean(s)) return 500\r\n if (isNumber(s)) return Math.max(0, s)\r\n return 0\r\n })\r\n\r\n const inactive = computed(\r\n () => disabled.value || loading.value || cooling.value,\r\n )\r\n\r\n const klass = computed(() => [\r\n 'w-btn',\r\n {\r\n 'w-btn-gap': !group,\r\n 'w-btn-capsule': capsule.value,\r\n 'w-btn-block': block.value,\r\n 'w-btn-disabled': disabled.value,\r\n 'w-btn-loading': loading.value,\r\n 'w-btn-cooling': cooling.value,\r\n [`w-btn-${btnType.value}`]: !!btnType.value,\r\n [`w-btn-mode-${btnMode.value}`]: !!btnMode.value,\r\n },\r\n ])\r\n\r\n const tokenStyle = computed(() =>\r\n toCssVarsStyle({\r\n ...propSizeToCssVars('btn', btnSize.value),\r\n ...propColorToCssVars('btn', btnColor.value),\r\n ...props.cssVars,\r\n }),\r\n )\r\n\r\n function clearSleep() {\r\n if (sleepTimer !== undefined) {\r\n clearTimeout(sleepTimer)\r\n sleepTimer = undefined\r\n }\r\n cooling.value = false\r\n }\r\n\r\n function invokeAttrClick(handler: AttrClick, e: MouseEvent) {\r\n if (!handler) return\r\n if (Array.isArray(handler)) {\r\n for (const fn of handler) fn(e)\r\n } else {\r\n handler(e)\r\n }\r\n }\r\n\r\n function onClick(e: MouseEvent) {\r\n if (inactive.value) {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n return\r\n }\r\n // 不声明 emits.click:用户 onClick / @click 在 attrs 里,需在守卫通过后手动调用\r\n invokeAttrClick(attrs.onClick as AttrClick, e)\r\n const ms = sleepMs.value\r\n if (ms > 0) {\r\n cooling.value = true\r\n sleepTimer = setTimeout(() => {\r\n cooling.value = false\r\n sleepTimer = undefined\r\n }, ms)\r\n }\r\n }\r\n\r\n onUnmounted(clearSleep)\r\n\r\n return () => {\r\n const Tag = tagName.value\r\n // 抽出 onClick,避免 mergeProps 把 attrs.onClick 与守卫串联(inactive 时仍会触发)\r\n const { onClick: _attrsClick, ...restAttrs } = attrs as Record<\r\n string,\r\n unknown\r\n > & { onClick?: AttrClick }\r\n\r\n const rootProps = mergeProps(\r\n {\r\n class: normalizeClass([klass.value, attrs.class]),\r\n style: normalizeStyle([tokenStyle.value, attrs.style]),\r\n disabled:\r\n Tag === 'button' ? disabled.value || loading.value : undefined,\r\n type: Tag === 'button' ? htmlType.value : undefined,\r\n 'aria-disabled': inactive.value || undefined,\r\n 'aria-busy': loading.value || undefined,\r\n onClick,\r\n },\r\n restAttrs,\r\n )\r\n\r\n return (\r\n <Tag {...rootProps}>\r\n <Transition name=\"w-btn-loading\" appear>\r\n {loading.value ? (\r\n <span class=\"w-btn-loading-wrap\" key=\"loading\">\r\n {slots.loading?.() || (\r\n <span class=\"w-btn-spinner\" aria-hidden=\"true\" />\r\n )}\r\n </span>\r\n ) : null}\r\n </Transition>\r\n <span class=\"w-btn-content\">\r\n {slots.default?.() || text.value}\r\n </span>\r\n </Tag>\r\n )\r\n }\r\n },\r\n})\r\n\r\n/** 断言为 DefineComponent,hover / 补全直接看到 BtnJSXProps(勿再包 XxxComponent 别名) */\r\nconst Btn = BtnImpl as unknown as DefineComponent<BtnJSXProps>\r\n\r\nexport type BtnInstance = InstanceType<typeof Btn>\r\n\r\nexport default Btn\r\n"],"mappings":"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"}
|
|
@@ -198,8 +198,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
198
198
|
modelValue: string | number;
|
|
199
199
|
disabled: boolean;
|
|
200
200
|
checkable: (item: CascadeItem, index: number) => boolean;
|
|
201
|
-
clearable: boolean;
|
|
202
201
|
placeholder: string;
|
|
202
|
+
clearable: boolean;
|
|
203
203
|
sign: string;
|
|
204
204
|
leafOnly: boolean;
|
|
205
205
|
nearby: boolean;
|
|
@@ -414,8 +414,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
414
414
|
manual: boolean;
|
|
415
415
|
exclude: HTMLElement[];
|
|
416
416
|
hasMask: boolean;
|
|
417
|
-
clearable: boolean;
|
|
418
417
|
placeholder: string;
|
|
418
|
+
clearable: boolean;
|
|
419
419
|
virtual: boolean;
|
|
420
420
|
virtualThreshold: number;
|
|
421
421
|
itemHeight: number;
|
|
@@ -715,7 +715,9 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
715
715
|
}, {}, {}, {
|
|
716
716
|
clickOutside: import('vue').ObjectDirective<any, any, string, any>;
|
|
717
717
|
}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
718
|
-
Virtual: import('..').
|
|
718
|
+
Virtual: new <T = any>() => import('..').VirtualListMethods & {
|
|
719
|
+
$props: import('..').VirtualJSXProps<T>;
|
|
720
|
+
};
|
|
719
721
|
Close: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
720
722
|
name: {
|
|
721
723
|
type: StringConstructor;
|
|
@@ -1706,6 +1706,6 @@ declare const _default: import('vue').DefineComponent<{}, () => import("vue/jsx-
|
|
|
1706
1706
|
ariaLabel: string;
|
|
1707
1707
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
1708
1708
|
}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
1709
|
-
Btn: import('..').
|
|
1709
|
+
Btn: import('vue').DefineComponent<import('..').BtnJSXProps>;
|
|
1710
1710
|
}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
1711
1711
|
export default _default;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { App, VNodeChild } from 'vue';
|
|
2
2
|
import { CssVars } from '../../util';
|
|
3
|
-
type ConfirmClose = () => void;
|
|
4
|
-
type ConfirmContent = VNodeChild | ((close: ConfirmClose) => VNodeChild);
|
|
3
|
+
export type ConfirmClose = () => void;
|
|
4
|
+
export type ConfirmContent = VNodeChild | ((close: ConfirmClose) => VNodeChild);
|
|
5
5
|
export type ConfirmActions = {
|
|
6
6
|
close: ConfirmClose;
|
|
7
7
|
confirm: ConfirmClose;
|
|
8
8
|
};
|
|
9
9
|
type ConfirmRegion = VNodeChild | ((actions: ConfirmActions) => VNodeChild);
|
|
10
10
|
/** false / null 表示不渲染该区域 */
|
|
11
|
-
type ConfirmSlot = ConfirmRegion | false | null;
|
|
11
|
+
export type ConfirmSlot = ConfirmRegion | false | null;
|
|
12
12
|
export interface ConfirmOptions {
|
|
13
13
|
/** 内容区(与 body 同义;函数可拿到 close) */
|
|
14
14
|
content?: ConfirmContent;
|
|
@@ -70,4 +70,3 @@ declare const _default: {
|
|
|
70
70
|
};
|
|
71
71
|
export default _default;
|
|
72
72
|
export { open, destroy, config };
|
|
73
|
-
export type { ConfirmClose, ConfirmContent, ConfirmSlot, ConfirmActions };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../components/confirm/index.ts"],"sourcesContent":["import type { App, VNodeChild } from 'vue'\r\nimport { createApp, createVNode, h } from 'vue'\r\nimport Drawer from '../drawer'\r\nimport Close from '../close'\r\nimport Btn from '../btn'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport {\r\n captureScaleFromPoint,\r\n ensureScaleFromPointTracking,\r\n} from '../../use/useScaleFromPoint'\r\nimport { propColorToCssVars, toCssVarsStyle, type CssVars } from '../../util'\r\nimport { UI_CONFIG_KEY, type UIPluginConfig } from '../../config/plugin'\r\n\r\n// 入口加载即跟踪,避免第一次 Confirm.open 才挂监听、坐标落成屏幕中心\r\nensureScaleFromPointTracking()\r\n\r\nlet ConfirmInstance: App | null = null\r\nlet ConfirmWrapper: HTMLElement | null = null\r\nlet hostApp: App | null = null\r\n\r\n/** 当前未结束的 Promise 结算函数(只触发一次) */\r\nlet settlePending: ((confirmed: boolean) => void) | null = null\r\n\r\ntype ConfirmClose = () => void\r\ntype ConfirmContent = VNodeChild | ((close: ConfirmClose) => VNodeChild)\r\nexport type ConfirmActions = {\r\n close: ConfirmClose\r\n confirm: ConfirmClose\r\n}\r\ntype ConfirmRegion =\r\n | VNodeChild\r\n | ((actions: ConfirmActions) => VNodeChild)\r\n/** false / null 表示不渲染该区域 */\r\ntype ConfirmSlot = ConfirmRegion | false | null\r\n\r\nexport interface ConfirmOptions {\r\n /** 内容区(与 body 同义;函数可拿到 close) */\r\n content?: ConfirmContent\r\n /** 内容区,优先于 content */\r\n body?: ConfirmContent\r\n /** 自定义头部;false 则不渲染 header */\r\n header?: ConfirmSlot\r\n /** 自定义底部;false 则不渲染默认按钮 */\r\n footer?: ConfirmSlot\r\n ok?: () => void\r\n title?: string | VNodeChild\r\n okText?: string\r\n cancelText?: string\r\n cancel?: () => void\r\n danger?: boolean\r\n /** 是否显示面板角上的关闭按钮(不在 header 内) */\r\n closable?: boolean\r\n /** 点击遮罩是否关闭 */\r\n canCloseByClickMask?: boolean\r\n /** 实例主色 → `--w-prop-confirm-color` */\r\n color?: string\r\n /** 实例 CSS 变量 */\r\n cssVars?: CssVars\r\n}\r\n\r\n/**\r\n * 全局默认配置\r\n * 可通过 config() 或 app.use(UI, { components: { Confirm: {...} } }) 设置\r\n */\r\nexport type ConfirmGlobalConfig = Partial<\r\n Omit<\r\n ConfirmOptions,\r\n 'content' | 'body' | 'header' | 'footer' | 'ok' | 'cancel'\r\n >\r\n>\r\n\r\nlet globalConfig: ConfirmGlobalConfig = {}\r\n\r\n/**\r\n * 运行时设置 Confirm 全局默认值\r\n */\r\nfunction config(options: ConfirmGlobalConfig = {}): void {\r\n globalConfig = { ...globalConfig, ...options }\r\n}\r\n\r\nfunction inheritAppContext(app: App) {\r\n if (!hostApp) return\r\n app._context.provides = Object.create(hostApp._context.provides)\r\n}\r\n\r\nfunction settle(confirmed: boolean) {\r\n if (!settlePending) return\r\n const run = settlePending\r\n settlePending = null\r\n run(confirmed)\r\n}\r\n\r\n/**\r\n * 打开确认对话框\r\n * @returns Promise,resolve 表示确认,reject 表示取消(含点遮罩 / 关闭按钮)\r\n */\r\nfunction open(options: ConfirmOptions = { content: '' }): Promise<boolean> {\r\n return new Promise((resolve, reject) => {\r\n // 强制冻结点击坐标;Drawer 挂载后再 capture 时不得覆盖\r\n captureScaleFromPoint(null, { force: true })\r\n\r\n const { t } = useUII18n()\r\n\r\n // 已有实例时先按「取消」结束旧 Promise,再销毁\r\n if (ConfirmInstance && ConfirmWrapper) {\r\n destroy()\r\n }\r\n\r\n const merged: ConfirmOptions = {\r\n ...globalConfig,\r\n ...options,\r\n }\r\n\r\n const resolvedOptions = {\r\n ...merged,\r\n title: merged.title ?? t('confirm.title'),\r\n okText: merged.okText ?? t('confirm.ok'),\r\n cancelText: merged.cancelText ?? t('confirm.cancel'),\r\n danger: merged.danger ?? false,\r\n closable: merged.closable ?? true,\r\n canCloseByClickMask: merged.canCloseByClickMask ?? true,\r\n }\r\n\r\n settlePending = (confirmed: boolean) => {\r\n if (confirmed) {\r\n merged.ok?.()\r\n resolve(true)\r\n } else {\r\n merged.cancel?.()\r\n reject(false)\r\n }\r\n }\r\n\r\n const confirmVars = toCssVarsStyle({\r\n ...propColorToCssVars('confirm', resolvedOptions.color),\r\n ...resolvedOptions.cssVars,\r\n })\r\n\r\n const bodyContent = merged.body ?? merged.content ?? ''\r\n\r\n function renderBody(close: ConfirmClose) {\r\n if (typeof bodyContent === 'function') return bodyContent(close)\r\n return bodyContent\r\n }\r\n\r\n function renderRegion(\r\n slot: ConfirmSlot | undefined,\r\n actions: ConfirmActions,\r\n fallback: VNodeChild,\r\n ) {\r\n if (slot === false || slot === null) return null\r\n if (slot === undefined) return fallback\r\n return typeof slot === 'function' ? slot(actions) : slot\r\n }\r\n\r\n const wrapper = document.createElement('div')\r\n const vm = createVNode(\r\n Drawer,\r\n {\r\n placement: 'center',\r\n isConfirm: true,\r\n canCloseByClickMask: resolvedOptions.canCloseByClickMask,\r\n class: 'w-confirm',\r\n style: confirmVars,\r\n maskClass: 'w-confirm-mask',\r\n maskStyle: confirmVars,\r\n headerClass: 'w-confirm-header',\r\n bodyClass: [\r\n 'w-confirm-body',\r\n { 'w-confirm-body--danger': resolvedOptions.danger },\r\n ],\r\n footerClass: 'w-confirm-footer',\r\n afterClose: () => {\r\n settle(false)\r\n destroy(false)\r\n },\r\n },\r\n {\r\n default: ({ close }: { close: ConfirmClose }) => renderBody(close),\r\n ...(merged.header !== false && merged.header !== null\r\n ? {\r\n header: ({ close }: { close: ConfirmClose }) => {\r\n const actions: ConfirmActions = {\r\n close: () => {\r\n settle(false)\r\n close()\r\n },\r\n confirm: () => {\r\n settle(true)\r\n close()\r\n },\r\n }\r\n return renderRegion(\r\n merged.header,\r\n actions,\r\n h(\r\n 'span',\r\n { class: 'w-confirm-title' },\r\n resolvedOptions.title as any,\r\n ),\r\n )\r\n },\r\n }\r\n : null),\r\n ...(merged.footer !== false && merged.footer !== null\r\n ? {\r\n footer: ({ close }: { close: ConfirmClose }) => {\r\n const actions: ConfirmActions = {\r\n close: () => {\r\n settle(false)\r\n close()\r\n },\r\n confirm: () => {\r\n settle(true)\r\n close()\r\n },\r\n }\r\n return renderRegion(merged.footer, actions, [\r\n h(\r\n Btn,\r\n { onClick: actions.close },\r\n { default: () => resolvedOptions.cancelText },\r\n ),\r\n h(\r\n Btn,\r\n {\r\n type: resolvedOptions.danger ? 'danger' : 'primary',\r\n onClick: actions.confirm,\r\n },\r\n { default: () => resolvedOptions.okText },\r\n ),\r\n ])\r\n },\r\n }\r\n : null),\r\n ...(resolvedOptions.closable\r\n ? {\r\n close: ({ close }: { close: ConfirmClose }) =>\r\n h(Close, {\r\n class: 'w-confirm-close',\r\n onClick: () => {\r\n settle(false)\r\n close()\r\n },\r\n }),\r\n }\r\n : null),\r\n },\r\n )\r\n\r\n const ins = createApp(vm)\r\n inheritAppContext(ins)\r\n ins.mount(wrapper)\r\n document.body.appendChild(wrapper)\r\n ConfirmInstance = ins\r\n ConfirmWrapper = wrapper\r\n })\r\n}\r\n\r\n/**\r\n * 销毁确认对话框\r\n * @param rejectPending 是否将未结束的 Promise 按取消处理,默认 true\r\n */\r\nfunction destroy(rejectPending = true) {\r\n if (rejectPending) {\r\n settle(false)\r\n }\r\n if (ConfirmWrapper && ConfirmWrapper.parentNode) {\r\n document.body.removeChild(ConfirmWrapper)\r\n }\r\n if (ConfirmInstance) {\r\n ConfirmInstance.unmount()\r\n }\r\n ConfirmInstance = null\r\n ConfirmWrapper = null\r\n}\r\n\r\nexport type ConfirmApi = {\r\n (options?: ConfirmOptions): Promise<boolean>\r\n open: typeof open\r\n destroy: typeof destroy\r\n config: typeof config\r\n}\r\n\r\n/**\r\n * Vue 插件安装:挂载 $confirm,并读取 UI 全局 components.Confirm 配置\r\n */\r\nfunction install(app: App) {\r\n hostApp = app\r\n\r\n const uiConfig = app._context.provides[UI_CONFIG_KEY as any] as\r\n | UIPluginConfig\r\n | undefined\r\n const confirmCfg = uiConfig?.components?.Confirm as\r\n | ConfirmGlobalConfig\r\n | undefined\r\n if (confirmCfg) {\r\n config(confirmCfg)\r\n }\r\n\r\n const api = open as ConfirmApi\r\n api.open = open\r\n api.destroy = destroy\r\n api.config = config\r\n app.config.globalProperties.$confirm = api\r\n}\r\n\r\nexport default { install, open, destroy, config }\r\nexport { open, destroy, config }\r\nexport type { ConfirmClose, ConfirmContent, ConfirmSlot, ConfirmActions }\r\nimport './src/style/index.css'\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../components/confirm/index.ts"],"sourcesContent":["import type { App, VNodeChild } from 'vue'\r\nimport { createApp, createVNode, h } from 'vue'\r\nimport Drawer from '../drawer'\r\nimport Close from '../close'\r\nimport Btn from '../btn'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport {\r\n captureScaleFromPoint,\r\n ensureScaleFromPointTracking,\r\n} from '../../use/useScaleFromPoint'\r\nimport { propColorToCssVars, toCssVarsStyle, type CssVars } from '../../util'\r\nimport { UI_CONFIG_KEY, type UIPluginConfig } from '../../config/plugin'\r\n\r\n// 入口加载即跟踪,避免第一次 Confirm.open 才挂监听、坐标落成屏幕中心\r\nensureScaleFromPointTracking()\r\n\r\nlet ConfirmInstance: App | null = null\r\nlet ConfirmWrapper: HTMLElement | null = null\r\nlet hostApp: App | null = null\r\n\r\n/** 当前未结束的 Promise 结算函数(只触发一次) */\r\nlet settlePending: ((confirmed: boolean) => void) | null = null\r\n\r\nexport type ConfirmClose = () => void\r\nexport type ConfirmContent = VNodeChild | ((close: ConfirmClose) => VNodeChild)\r\nexport type ConfirmActions = {\r\n close: ConfirmClose\r\n confirm: ConfirmClose\r\n}\r\ntype ConfirmRegion =\r\n | VNodeChild\r\n | ((actions: ConfirmActions) => VNodeChild)\r\n/** false / null 表示不渲染该区域 */\r\nexport type ConfirmSlot = ConfirmRegion | false | null\r\n\r\nexport interface ConfirmOptions {\r\n /** 内容区(与 body 同义;函数可拿到 close) */\r\n content?: ConfirmContent\r\n /** 内容区,优先于 content */\r\n body?: ConfirmContent\r\n /** 自定义头部;false 则不渲染 header */\r\n header?: ConfirmSlot\r\n /** 自定义底部;false 则不渲染默认按钮 */\r\n footer?: ConfirmSlot\r\n ok?: () => void\r\n title?: string | VNodeChild\r\n okText?: string\r\n cancelText?: string\r\n cancel?: () => void\r\n danger?: boolean\r\n /** 是否显示面板角上的关闭按钮(不在 header 内) */\r\n closable?: boolean\r\n /** 点击遮罩是否关闭 */\r\n canCloseByClickMask?: boolean\r\n /** 实例主色 → `--w-prop-confirm-color` */\r\n color?: string\r\n /** 实例 CSS 变量 */\r\n cssVars?: CssVars\r\n}\r\n\r\n/**\r\n * 全局默认配置\r\n * 可通过 config() 或 app.use(UI, { components: { Confirm: {...} } }) 设置\r\n */\r\nexport type ConfirmGlobalConfig = Partial<\r\n Omit<\r\n ConfirmOptions,\r\n 'content' | 'body' | 'header' | 'footer' | 'ok' | 'cancel'\r\n >\r\n>\r\n\r\nlet globalConfig: ConfirmGlobalConfig = {}\r\n\r\n/**\r\n * 运行时设置 Confirm 全局默认值\r\n */\r\nfunction config(options: ConfirmGlobalConfig = {}): void {\r\n globalConfig = { ...globalConfig, ...options }\r\n}\r\n\r\nfunction inheritAppContext(app: App) {\r\n if (!hostApp) return\r\n app._context.provides = Object.create(hostApp._context.provides)\r\n}\r\n\r\nfunction settle(confirmed: boolean) {\r\n if (!settlePending) return\r\n const run = settlePending\r\n settlePending = null\r\n run(confirmed)\r\n}\r\n\r\n/**\r\n * 打开确认对话框\r\n * @returns Promise,resolve 表示确认,reject 表示取消(含点遮罩 / 关闭按钮)\r\n */\r\nfunction open(options: ConfirmOptions = { content: '' }): Promise<boolean> {\r\n return new Promise((resolve, reject) => {\r\n // 强制冻结点击坐标;Drawer 挂载后再 capture 时不得覆盖\r\n captureScaleFromPoint(null, { force: true })\r\n\r\n const { t } = useUII18n()\r\n\r\n // 已有实例时先按「取消」结束旧 Promise,再销毁\r\n if (ConfirmInstance && ConfirmWrapper) {\r\n destroy()\r\n }\r\n\r\n const merged: ConfirmOptions = {\r\n ...globalConfig,\r\n ...options,\r\n }\r\n\r\n const resolvedOptions = {\r\n ...merged,\r\n title: merged.title ?? t('confirm.title'),\r\n okText: merged.okText ?? t('confirm.ok'),\r\n cancelText: merged.cancelText ?? t('confirm.cancel'),\r\n danger: merged.danger ?? false,\r\n closable: merged.closable ?? true,\r\n canCloseByClickMask: merged.canCloseByClickMask ?? true,\r\n }\r\n\r\n settlePending = (confirmed: boolean) => {\r\n if (confirmed) {\r\n merged.ok?.()\r\n resolve(true)\r\n } else {\r\n merged.cancel?.()\r\n reject(false)\r\n }\r\n }\r\n\r\n const confirmVars = toCssVarsStyle({\r\n ...propColorToCssVars('confirm', resolvedOptions.color),\r\n ...resolvedOptions.cssVars,\r\n })\r\n\r\n const bodyContent = merged.body ?? merged.content ?? ''\r\n\r\n function renderBody(close: ConfirmClose) {\r\n if (typeof bodyContent === 'function') return bodyContent(close)\r\n return bodyContent\r\n }\r\n\r\n function renderRegion(\r\n slot: ConfirmSlot | undefined,\r\n actions: ConfirmActions,\r\n fallback: VNodeChild,\r\n ) {\r\n if (slot === false || slot === null) return null\r\n if (slot === undefined) return fallback\r\n return typeof slot === 'function' ? slot(actions) : slot\r\n }\r\n\r\n const wrapper = document.createElement('div')\r\n const vm = createVNode(\r\n Drawer,\r\n {\r\n placement: 'center',\r\n isConfirm: true,\r\n canCloseByClickMask: resolvedOptions.canCloseByClickMask,\r\n class: 'w-confirm',\r\n style: confirmVars,\r\n maskClass: 'w-confirm-mask',\r\n maskStyle: confirmVars,\r\n headerClass: 'w-confirm-header',\r\n bodyClass: [\r\n 'w-confirm-body',\r\n { 'w-confirm-body--danger': resolvedOptions.danger },\r\n ],\r\n footerClass: 'w-confirm-footer',\r\n afterClose: () => {\r\n settle(false)\r\n destroy(false)\r\n },\r\n },\r\n {\r\n default: ({ close }: { close: ConfirmClose }) => renderBody(close),\r\n ...(merged.header !== false && merged.header !== null\r\n ? {\r\n header: ({ close }: { close: ConfirmClose }) => {\r\n const actions: ConfirmActions = {\r\n close: () => {\r\n settle(false)\r\n close()\r\n },\r\n confirm: () => {\r\n settle(true)\r\n close()\r\n },\r\n }\r\n return renderRegion(\r\n merged.header,\r\n actions,\r\n h(\r\n 'span',\r\n { class: 'w-confirm-title' },\r\n resolvedOptions.title as any,\r\n ),\r\n )\r\n },\r\n }\r\n : null),\r\n ...(merged.footer !== false && merged.footer !== null\r\n ? {\r\n footer: ({ close }: { close: ConfirmClose }) => {\r\n const actions: ConfirmActions = {\r\n close: () => {\r\n settle(false)\r\n close()\r\n },\r\n confirm: () => {\r\n settle(true)\r\n close()\r\n },\r\n }\r\n return renderRegion(merged.footer, actions, [\r\n h(\r\n Btn,\r\n { onClick: actions.close },\r\n { default: () => resolvedOptions.cancelText },\r\n ),\r\n h(\r\n Btn,\r\n {\r\n type: resolvedOptions.danger ? 'danger' : 'primary',\r\n onClick: actions.confirm,\r\n },\r\n { default: () => resolvedOptions.okText },\r\n ),\r\n ])\r\n },\r\n }\r\n : null),\r\n ...(resolvedOptions.closable\r\n ? {\r\n close: ({ close }: { close: ConfirmClose }) =>\r\n h(Close, {\r\n class: 'w-confirm-close',\r\n onClick: () => {\r\n settle(false)\r\n close()\r\n },\r\n }),\r\n }\r\n : null),\r\n },\r\n )\r\n\r\n const ins = createApp(vm)\r\n inheritAppContext(ins)\r\n ins.mount(wrapper)\r\n document.body.appendChild(wrapper)\r\n ConfirmInstance = ins\r\n ConfirmWrapper = wrapper\r\n })\r\n}\r\n\r\n/**\r\n * 销毁确认对话框\r\n * @param rejectPending 是否将未结束的 Promise 按取消处理,默认 true\r\n */\r\nfunction destroy(rejectPending = true) {\r\n if (rejectPending) {\r\n settle(false)\r\n }\r\n if (ConfirmWrapper && ConfirmWrapper.parentNode) {\r\n document.body.removeChild(ConfirmWrapper)\r\n }\r\n if (ConfirmInstance) {\r\n ConfirmInstance.unmount()\r\n }\r\n ConfirmInstance = null\r\n ConfirmWrapper = null\r\n}\r\n\r\nexport type ConfirmApi = {\r\n (options?: ConfirmOptions): Promise<boolean>\r\n open: typeof open\r\n destroy: typeof destroy\r\n config: typeof config\r\n}\r\n\r\n/**\r\n * Vue 插件安装:挂载 $confirm,并读取 UI 全局 components.Confirm 配置\r\n */\r\nfunction install(app: App) {\r\n hostApp = app\r\n\r\n const uiConfig = app._context.provides[UI_CONFIG_KEY as any] as\r\n | UIPluginConfig\r\n | undefined\r\n const confirmCfg = uiConfig?.components?.Confirm as\r\n | ConfirmGlobalConfig\r\n | undefined\r\n if (confirmCfg) {\r\n config(confirmCfg)\r\n }\r\n\r\n const api = open as ConfirmApi\r\n api.open = open\r\n api.destroy = destroy\r\n api.config = config\r\n app.config.globalProperties.$confirm = api\r\n}\r\n\r\nexport default { install, open, destroy, config }\r\nexport { open, destroy, config }\r\nimport './src/style/index.css'\r\n"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefineComponent } from 'vue';
|
|
1
2
|
import { CssVars } from '../../util';
|
|
2
3
|
export type { CopyGlobalConfig } from './config';
|
|
3
4
|
export { COPY_FALLBACK } from './config';
|
|
@@ -15,14 +16,13 @@ export type CopyProps = {
|
|
|
15
16
|
disabled?: boolean;
|
|
16
17
|
cssVars?: CssVars;
|
|
17
18
|
};
|
|
18
|
-
export type CopyJSXProps = CopyProps & Omit<JSX.IntrinsicElements['button'], keyof CopyProps | 'ref'> & {
|
|
19
|
+
export type CopyJSXProps = CopyProps & Omit<JSX.IntrinsicElements['button'], keyof CopyProps | 'ref' | 'onError'> & {
|
|
19
20
|
'v-slots'?: CopySlots;
|
|
20
21
|
vSlots?: CopySlots;
|
|
22
|
+
onSuccess?: () => void;
|
|
23
|
+
onError?: (err: unknown) => void;
|
|
21
24
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
27
|
-
declare const _default: CopyComponent;
|
|
28
|
-
export default _default;
|
|
25
|
+
/** 断言为 DefineComponent,hover / 补全直接看到 CopyJSXProps(勿再包 XxxComponent 别名) */
|
|
26
|
+
declare const Copy: DefineComponent<CopyJSXProps>;
|
|
27
|
+
export type CopyInstance = InstanceType<typeof Copy>;
|
|
28
|
+
export default Copy;
|
|
@@ -6,7 +6,8 @@ import { COPY_FALLBACK } from "./config.js";
|
|
|
6
6
|
import { spawnCopyToast, writeClipboardText } from "./spawnCopyToast.js";
|
|
7
7
|
import { createVNode, defineComponent, mergeProps, onBeforeUnmount, ref } from "vue";
|
|
8
8
|
//#region components/copy/Copy.tsx
|
|
9
|
-
|
|
9
|
+
/** 断言为 DefineComponent,hover / 补全直接看到 CopyJSXProps(勿再包 XxxComponent 别名) */
|
|
10
|
+
var Copy = /* @__PURE__ */ defineComponent({
|
|
10
11
|
name: "Copy",
|
|
11
12
|
inheritAttrs: false,
|
|
12
13
|
props: {
|
|
@@ -105,6 +106,6 @@ var CopyImpl = /* @__PURE__ */ defineComponent({
|
|
|
105
106
|
}
|
|
106
107
|
});
|
|
107
108
|
//#endregion
|
|
108
|
-
export {
|
|
109
|
+
export { Copy as default };
|
|
109
110
|
|
|
110
111
|
//# sourceMappingURL=Copy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Copy.js","names":["defineComponent","mergeProps","onBeforeUnmount","ref","createVNode","_createVNode","propColorToCssVars","propSizeToCssVars","toCssVarsStyle","useComponentConfig","useGlobalZIndex","useUII18n","COPY_FALLBACK","spawnCopyToast","writeClipboardText","CopyImpl","name","inheritAttrs","props","text","type","String","required","size","Number","default","undefined","color","label","copiedTip","toast","Boolean","disabled","cssVars","Object","emits","success","error","err","slots","setup","attrs","emit","cfg","t","add","addZIndex","root","clickCount","activeToasts","disposed","handleClick","e","stopPropagation","value","tip","index","anchor","clickIndex","zIndex","onDone","Math","max","rootProps","class","style","onClick"],"sources":["../../../components/copy/Copy.tsx"],"sourcesContent":["import {\r\n defineComponent,\r\n mergeProps,\r\n onBeforeUnmount,\r\n ref,\r\n type PropType,\r\n type SlotsType,\r\n} from 'vue'\r\nimport {\r\n propColorToCssVars,\r\n propSizeToCssVars,\r\n toCssVarsStyle,\r\n type CssVars,\r\n} from '../../util'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport useGlobalZIndex from '../../use/useGlobalZIndex'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport { COPY_FALLBACK } from './config'\r\nimport { spawnCopyToast, writeClipboardText } from './spawnCopyToast'\r\n\r\nexport type { CopyGlobalConfig } from './config'\r\nexport { COPY_FALLBACK } from './config'\r\n\r\nexport type CopySlots = {\r\n default?: () => any\r\n}\r\n\r\nexport type CopyProps = {\r\n /** 待复制文本 */\r\n text: string\r\n size?: number\r\n color?: string\r\n label?: string\r\n copiedTip?: string\r\n toast?: boolean\r\n disabled?: boolean\r\n cssVars?: CssVars\r\n}\r\n\r\nexport type CopyJSXProps = CopyProps &\r\n Omit
|
|
1
|
+
{"version":3,"file":"Copy.js","names":["defineComponent","mergeProps","onBeforeUnmount","ref","createVNode","_createVNode","propColorToCssVars","propSizeToCssVars","toCssVarsStyle","useComponentConfig","useGlobalZIndex","useUII18n","COPY_FALLBACK","spawnCopyToast","writeClipboardText","CopyImpl","name","inheritAttrs","props","text","type","String","required","size","Number","default","undefined","color","label","copiedTip","toast","Boolean","disabled","cssVars","Object","emits","success","error","err","slots","setup","attrs","emit","cfg","t","add","addZIndex","root","clickCount","activeToasts","disposed","handleClick","e","stopPropagation","value","tip","index","anchor","clickIndex","zIndex","onDone","Math","max","rootProps","class","style","onClick","Copy"],"sources":["../../../components/copy/Copy.tsx"],"sourcesContent":["import {\r\n defineComponent,\r\n mergeProps,\r\n onBeforeUnmount,\r\n ref,\r\n type DefineComponent,\r\n type PropType,\r\n type SlotsType,\r\n} from 'vue'\r\nimport {\r\n propColorToCssVars,\r\n propSizeToCssVars,\r\n toCssVarsStyle,\r\n type CssVars,\r\n} from '../../util'\r\nimport useComponentConfig from '../../use/useComponentConfig'\r\nimport useGlobalZIndex from '../../use/useGlobalZIndex'\r\nimport { useUII18n } from '../../use/useUII18n'\r\nimport { COPY_FALLBACK } from './config'\r\nimport { spawnCopyToast, writeClipboardText } from './spawnCopyToast'\r\n\r\nexport type { CopyGlobalConfig } from './config'\r\nexport { COPY_FALLBACK } from './config'\r\n\r\nexport type CopySlots = {\r\n default?: () => any\r\n}\r\n\r\nexport type CopyProps = {\r\n /** 待复制文本 */\r\n text: string\r\n size?: number\r\n color?: string\r\n label?: string\r\n copiedTip?: string\r\n toast?: boolean\r\n disabled?: boolean\r\n cssVars?: CssVars\r\n}\r\n\r\nexport type CopyJSXProps = CopyProps &\r\n Omit<\r\n JSX.IntrinsicElements['button'],\r\n keyof CopyProps | 'ref' | 'onError'\r\n > & {\r\n 'v-slots'?: CopySlots\r\n vSlots?: CopySlots\r\n onSuccess?: () => void\r\n onError?: (err: unknown) => void\r\n }\r\n\r\nconst CopyImpl = defineComponent({\r\n name: 'Copy',\r\n inheritAttrs: false,\r\n props: {\r\n text: { type: String, required: true },\r\n size: { type: Number, default: undefined },\r\n color: { type: String, default: undefined },\r\n label: { type: String, default: undefined },\r\n copiedTip: { type: String, default: undefined },\r\n toast: { type: Boolean, default: undefined },\r\n disabled: { type: Boolean, default: undefined },\r\n cssVars: { type: Object as PropType<CssVars>, default: undefined },\r\n },\r\n emits: {\r\n success: () => true,\r\n error: (err: unknown) => true,\r\n },\r\n slots: Object as SlotsType<CopySlots>,\r\n setup(props, { slots, attrs, emit }) {\r\n const cfg = useComponentConfig('Copy', props, COPY_FALLBACK)\r\n const { t } = useUII18n()\r\n const { add: addZIndex } = useGlobalZIndex()\r\n const root = ref<HTMLButtonElement>()\r\n const clickCount = ref(0)\r\n const activeToasts = ref(0)\r\n let disposed = false\r\n\r\n onBeforeUnmount(() => {\r\n disposed = true\r\n })\r\n\r\n async function handleClick(e: MouseEvent) {\r\n e.stopPropagation()\r\n if (cfg.value.disabled) return\r\n\r\n try {\r\n await writeClipboardText(props.text)\r\n emit('success')\r\n\r\n if (cfg.value.toast !== false && root.value) {\r\n const tip = cfg.value.copiedTip ?? t('copy.copied')\r\n const index = clickCount.value % 8\r\n clickCount.value++\r\n activeToasts.value++\r\n spawnCopyToast({\r\n anchor: root.value,\r\n tip,\r\n clickIndex: index,\r\n zIndex: addZIndex(),\r\n onDone: () => {\r\n if (disposed) return\r\n activeToasts.value = Math.max(0, activeToasts.value - 1)\r\n if (activeToasts.value === 0) clickCount.value = 0\r\n },\r\n })\r\n }\r\n } catch (err) {\r\n emit('error', err)\r\n }\r\n }\r\n\r\n return () => {\r\n const label = cfg.value.label ?? t('copy.label')\r\n const rootProps = mergeProps(\r\n {\r\n ref: root,\r\n type: 'button',\r\n class: 'w-copy',\r\n disabled: cfg.value.disabled || undefined,\r\n style: toCssVarsStyle({\r\n ...propSizeToCssVars('copy', cfg.value.size),\r\n ...propColorToCssVars('copy', cfg.value.color),\r\n ...props.cssVars,\r\n }),\r\n onClick: handleClick,\r\n },\r\n attrs,\r\n )\r\n\r\n return <button {...rootProps}>{slots.default?.() ?? label}</button>\r\n }\r\n },\r\n})\r\n\r\n/** 断言为 DefineComponent,hover / 补全直接看到 CopyJSXProps(勿再包 XxxComponent 别名) */\r\nconst Copy = CopyImpl as unknown as DefineComponent<CopyJSXProps>\r\n\r\nexport type CopyInstance = InstanceType<typeof Copy>\r\n\r\nexport default Copy\r\n"],"mappings":";;;;;;;;;AAwIA,IAAMmE,OArFWnE,gCAAgB;CAC/BgB,MAAM;CACNC,cAAc;CACdC,OAAO;EACLC,MAAM;GAAEC,MAAMC;GAAQC,UAAU;EAAK;EACrCC,MAAM;GAAEH,MAAMI;GAAQC,SAASC,KAAAA;EAAU;EACzCC,OAAO;GAAEP,MAAMC;GAAQI,SAASC,KAAAA;EAAU;EAC1CE,OAAO;GAAER,MAAMC;GAAQI,SAASC,KAAAA;EAAU;EAC1CG,WAAW;GAAET,MAAMC;GAAQI,SAASC,KAAAA;EAAU;EAC9CI,OAAO;GAAEV,MAAMW;GAASN,SAASC,KAAAA;EAAU;EAC3CM,UAAU;GAAEZ,MAAMW;GAASN,SAASC,KAAAA;EAAU;EAC9CO,SAAS;GAAEb,MAAMc;GAA6BT,SAASC,KAAAA;EAAU;CACnE;CACAS,OAAO;EACLC,eAAe;EACfC,QAAQC,QAAiB;CAC3B;CACAC,OAAOL;CACPM,MAAMtB,OAAO,EAAEqB,OAAOE,OAAOC,QAAQ;EACnC,MAAMC,MAAMlC,mBAAmB,QAAQS,OAAON,aAAa;EAC3D,MAAM,EAAEgC,MAAMjC,UAAU;EACxB,MAAM,EAAEkC,KAAKC,cAAcpC,gBAAgB;EAC3C,MAAMqC,OAAO5C,IAAuB;EACpC,MAAM6C,aAAa7C,IAAI,CAAC;EACxB,MAAM8C,eAAe9C,IAAI,CAAC;EAC1B,IAAI+C,WAAW;EAEfhD,sBAAsB;GACpBgD,WAAW;EACb,CAAC;EAED,eAAeC,YAAYC,GAAe;GACxCA,EAAEC,gBAAgB;GAClB,IAAIV,IAAIW,MAAMtB,UAAU;GAExB,IAAI;IACF,MAAMlB,mBAAmBI,MAAMC,IAAI;IACnCuB,KAAK,SAAS;IAEd,IAAIC,IAAIW,MAAMxB,UAAU,SAASiB,KAAKO,OAAO;KAC3C,MAAMC,MAAMZ,IAAIW,MAAMzB,aAAae,EAAE,aAAa;KAClD,MAAMY,QAAQR,WAAWM,QAAQ;KACjCN,WAAWM;KACXL,aAAaK;KACbzC,eAAe;MACb4C,QAAQV,KAAKO;MACbC;MACAG,YAAYF;MACZG,QAAQb,UAAU;MAClBc,cAAc;OACZ,IAAIV,UAAU;OACdD,aAAaK,QAAQO,KAAKC,IAAI,GAAGb,aAAaK,QAAQ,CAAC;OACvD,IAAIL,aAAaK,UAAU,GAAGN,WAAWM,QAAQ;MACnD;KACF,CAAC;IACH;GACF,SAAShB,KAAK;IACZI,KAAK,SAASJ,GAAG;GACnB;EACF;EAEA,aAAa;GACX,MAAMV,QAAQe,IAAIW,MAAM1B,SAASgB,EAAE,YAAY;GAC/C,MAAMmB,YAAY9D,WAChB;IACEE,KAAK4C;IACL3B,MAAM;IACN4C,OAAO;IACPhC,UAAUW,IAAIW,MAAMtB,YAAYN,KAAAA;IAChCuC,OAAOzD,eAAe;KACpB,GAAGD,kBAAkB,QAAQoC,IAAIW,MAAM/B,IAAI;KAC3C,GAAGjB,mBAAmB,QAAQqC,IAAIW,MAAM3B,KAAK;KAC7C,GAAGT,MAAMe;IACX,CAAC;IACDiC,SAASf;GACX,GACAV,KACF;GAEA,OAAApC,YAAA,UAAmB0D,WAAS,CAAGxB,MAAMd,UAAU,KAAKG,KAAK,CAAA;EAC3D;CACF;AACF,CAGab"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DefineComponent } from 'vue';
|
|
1
2
|
import { CornerPlacement } from './cornerGeometry';
|
|
2
3
|
import { CssVars } from '../../util';
|
|
3
4
|
export type { CornerPlacement };
|
|
@@ -14,11 +15,7 @@ export type CornerEarsProps = {
|
|
|
14
15
|
* 否则 onClick / class 等 fallthrough 会在类型上被判为不存在。
|
|
15
16
|
*/
|
|
16
17
|
export type CornerEarsJSXProps = CornerEarsProps & Omit<JSX.IntrinsicElements['div'], keyof CornerEarsProps | 'ref'>;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
declare const CornerEars: CornerEarsComponent;
|
|
23
|
-
export type CornerEarsInstance = InstanceType<CornerEarsComponent>;
|
|
18
|
+
/** 断言为 DefineComponent,hover / 补全直接看到 CornerEarsJSXProps(勿再包 XxxComponent 别名) */
|
|
19
|
+
declare const CornerEars: DefineComponent<CornerEarsJSXProps>;
|
|
20
|
+
export type CornerEarsInstance = InstanceType<typeof CornerEars>;
|
|
24
21
|
export default CornerEars;
|
|
@@ -2,6 +2,7 @@ import { propSizeToCssVars, toCssVarsStyle } from "../../util/cssVars.js";
|
|
|
2
2
|
import { buildStrokePath, cornerFillPath, resolveOpenMode } from "./cornerGeometry.js";
|
|
3
3
|
import { computed, createVNode, defineComponent, onBeforeUnmount, onMounted, ref, watch } from "vue";
|
|
4
4
|
//#region components/cornerEars/CornerEars.tsx
|
|
5
|
+
/** 断言为 DefineComponent,hover / 补全直接看到 CornerEarsJSXProps(勿再包 XxxComponent 别名) */
|
|
5
6
|
var CornerEars = /* @__PURE__ */ defineComponent({
|
|
6
7
|
name: "CornerEars",
|
|
7
8
|
props: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CornerEars.js","names":["computed","defineComponent","onBeforeUnmount","onMounted","ref","watch","createVNode","_createVNode","buildStrokePath","cornerFillPath","resolveOpenMode","propSizeToCssVars","toCssVarsStyle","CornerEarsImpl","name","props","placement","type","Array","required","size","Number","fill","String","default","stroke","undefined","cssVars","Object","setup","slots","sizeValue","hasStroke","Boolean","mode","notchMode","includes","value","showEars","rootRef","box","w","h","ro","measure","el","r","getBoundingClientRect","width","height","bindRo","disconnect","ResizeObserver","observe","strokeD","containerStyle","backgroundColor","map","p","CornerEars"],"sources":["../../../components/cornerEars/CornerEars.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n watch,\r\n type PropType,\r\n} from 'vue'\r\nimport {\r\n buildStrokePath,\r\n cornerFillPath,\r\n resolveOpenMode,\r\n type CornerPlacement,\r\n} from './cornerGeometry'\r\nimport { propSizeToCssVars, toCssVarsStyle, type CssVars } from '../../util'\r\n\r\nexport type { CornerPlacement }\r\n\r\nexport type CornerEarsProps = {\r\n placement: CornerPlacement[]\r\n size: number\r\n fill?: string\r\n stroke?: string\r\n /** 实例 CSS 变量 */\r\n cssVars?: CssVars\r\n}\r\n\r\n/**\r\n * 运行时靠 inheritAttrs 透传到根 div;TSX 需在 $props 上并上原生属性,\r\n * 否则 onClick / class 等 fallthrough 会在类型上被判为不存在。\r\n */\r\nexport type CornerEarsJSXProps = CornerEarsProps &\r\n Omit<JSX.IntrinsicElements['div'], keyof CornerEarsProps | 'ref'>\r\n\r\
|
|
1
|
+
{"version":3,"file":"CornerEars.js","names":["computed","defineComponent","onBeforeUnmount","onMounted","ref","watch","createVNode","_createVNode","buildStrokePath","cornerFillPath","resolveOpenMode","propSizeToCssVars","toCssVarsStyle","CornerEarsImpl","name","props","placement","type","Array","required","size","Number","fill","String","default","stroke","undefined","cssVars","Object","setup","slots","sizeValue","hasStroke","Boolean","mode","notchMode","includes","value","showEars","rootRef","box","w","h","ro","measure","el","r","getBoundingClientRect","width","height","bindRo","disconnect","ResizeObserver","observe","strokeD","containerStyle","backgroundColor","map","p","CornerEars"],"sources":["../../../components/cornerEars/CornerEars.tsx"],"sourcesContent":["import {\r\n computed,\r\n defineComponent,\r\n onBeforeUnmount,\r\n onMounted,\r\n ref,\r\n watch,\r\n type DefineComponent,\r\n type PropType,\r\n} from 'vue'\r\nimport {\r\n buildStrokePath,\r\n cornerFillPath,\r\n resolveOpenMode,\r\n type CornerPlacement,\r\n} from './cornerGeometry'\r\nimport { propSizeToCssVars, toCssVarsStyle, type CssVars } from '../../util'\r\n\r\nexport type { CornerPlacement }\r\n\r\nexport type CornerEarsProps = {\r\n placement: CornerPlacement[]\r\n size: number\r\n fill?: string\r\n stroke?: string\r\n /** 实例 CSS 变量 */\r\n cssVars?: CssVars\r\n}\r\n\r\n/**\r\n * 运行时靠 inheritAttrs 透传到根 div;TSX 需在 $props 上并上原生属性,\r\n * 否则 onClick / class 等 fallthrough 会在类型上被判为不存在。\r\n */\r\nexport type CornerEarsJSXProps = CornerEarsProps &\r\n Omit<JSX.IntrinsicElements['div'], keyof CornerEarsProps | 'ref'>\r\n\r\nconst CornerEarsImpl = defineComponent({\r\n name: 'CornerEars',\r\n props: {\r\n placement: {\r\n type: Array as PropType<CornerPlacement[]>,\r\n required: true,\r\n },\r\n size: {\r\n type: Number,\r\n required: true,\r\n },\r\n fill: {\r\n type: String,\r\n default: '#ddd',\r\n },\r\n stroke: {\r\n type: String,\r\n default: undefined,\r\n },\r\n cssVars: {\r\n type: Object as PropType<CssVars>,\r\n default: undefined,\r\n },\r\n },\r\n setup(props, { slots }) {\r\n const sizeValue = computed(() => props.size || 20)\r\n const hasStroke = computed(() =>\r\n Boolean(props.stroke && props.stroke !== 'transparent'),\r\n )\r\n const mode = computed(() => resolveOpenMode(props.placement))\r\n const notchMode = computed(() =>\r\n ['leftOut', 'rightOut', 'top', 'bottom'].includes(mode.value),\r\n )\r\n const showEars = computed(() => !hasStroke.value || !notchMode.value)\r\n\r\n const rootRef = ref<HTMLElement | null>(null)\r\n const box = ref({ w: 0, h: 0 })\r\n let ro: ResizeObserver | null = null\r\n\r\n function measure() {\r\n const el = rootRef.value\r\n if (!el) return\r\n const r = el.getBoundingClientRect()\r\n box.value = { w: r.width, h: r.height }\r\n }\r\n\r\n function bindRo() {\r\n ro?.disconnect()\r\n ro = null\r\n if (!hasStroke.value || !rootRef.value) return\r\n measure()\r\n ro = new ResizeObserver(measure)\r\n ro.observe(rootRef.value)\r\n }\r\n\r\n onMounted(bindRo)\r\n watch(hasStroke, bindRo)\r\n onBeforeUnmount(() => {\r\n ro?.disconnect()\r\n ro = null\r\n })\r\n\r\n const strokeD = computed(() =>\r\n hasStroke.value\r\n ? buildStrokePath(box.value.w, box.value.h, sizeValue.value, mode.value)\r\n : '',\r\n )\r\n\r\n const containerStyle = computed(() =>\r\n toCssVarsStyle({\r\n ...propSizeToCssVars('corner', sizeValue.value),\r\n '--w-corner-fill': props.fill || '#ddd',\r\n '--w-corner-stroke': props.stroke || 'transparent',\r\n ...(hasStroke.value ? {} : { '--w-prop-corner-stroke-width': '0px' }),\r\n ...(hasStroke.value && notchMode.value\r\n ? { backgroundColor: 'transparent' }\r\n : {}),\r\n ...props.cssVars,\r\n }),\r\n )\r\n\r\n return () => (\r\n <div\r\n ref={rootRef}\r\n class=\"w-corner-ears\"\r\n style={containerStyle.value}>\r\n {showEars.value\r\n ? props.placement.map((p) => (\r\n <svg\r\n key={p}\r\n class={['w-corner', `w-corner-${p}`]}\r\n width={sizeValue.value}\r\n height={sizeValue.value}\r\n viewBox={`0 0 ${sizeValue.value} ${sizeValue.value}`}\r\n aria-hidden=\"true\">\r\n <path\r\n class=\"w-corner-fill\"\r\n d={cornerFillPath(p, sizeValue.value)}\r\n />\r\n </svg>\r\n ))\r\n : null}\r\n {hasStroke.value && strokeD.value ? (\r\n <svg class=\"w-corner-stroke-layer\" aria-hidden=\"true\">\r\n <path\r\n class={[\r\n 'w-corner-stroke-path',\r\n notchMode.value ? 'is-notch' : '',\r\n ]}\r\n d={strokeD.value}\r\n />\r\n </svg>\r\n ) : null}\r\n {slots.default?.()}\r\n </div>\r\n )\r\n },\r\n})\r\n\r\n/** 断言为 DefineComponent,hover / 补全直接看到 CornerEarsJSXProps(勿再包 XxxComponent 别名) */\r\nconst CornerEars =\r\n CornerEarsImpl as unknown as DefineComponent<CornerEarsJSXProps>\r\n\r\nexport type CornerEarsInstance = InstanceType<typeof CornerEars>\r\n\r\nexport default CornerEars\r\n"],"mappings":";;;;;AA4JA,IAAM2D,aAxHiB1D,gCAAgB;CACrCa,MAAM;CACNC,OAAO;EACLC,WAAW;GACTC,MAAMC;GACNC,UAAU;EACZ;EACAC,MAAM;GACJH,MAAMI;GACNF,UAAU;EACZ;EACAG,MAAM;GACJL,MAAMM;GACNC,SAAS;EACX;EACAC,QAAQ;GACNR,MAAMM;GACNC,SAASE,KAAAA;EACX;EACAC,SAAS;GACPV,MAAMW;GACNJ,SAASE,KAAAA;EACX;CACF;CACAG,MAAMd,OAAO,EAAEe,SAAS;EACtB,MAAMC,YAAY/B,eAAee,MAAMK,QAAQ,EAAE;EACjD,MAAMY,YAAYhC,eAChBiC,QAAQlB,MAAMU,UAAUV,MAAMU,WAAW,aAAa,CACxD;EACA,MAAMS,OAAOlC,eAAeU,gBAAgBK,MAAMC,SAAS,CAAC;EAC5D,MAAMmB,YAAYnC,eAChB;GAAC;GAAW;GAAY;GAAO;EAAQ,CAAC,CAACoC,SAASF,KAAKG,KAAK,CAC9D;EACA,MAAMC,WAAWtC,eAAe,CAACgC,UAAUK,SAAS,CAACF,UAAUE,KAAK;EAEpE,MAAME,UAAUnC,IAAwB,IAAI;EAC5C,MAAMoC,MAAMpC,IAAI;GAAEqC,GAAG;GAAGC,GAAG;EAAE,CAAC;EAC9B,IAAIC,KAA4B;EAEhC,SAASC,UAAU;GACjB,MAAMC,KAAKN,QAAQF;GACnB,IAAI,CAACQ,IAAI;GACT,MAAMC,IAAID,GAAGE,sBAAsB;GACnCP,IAAIH,QAAQ;IAAEI,GAAGK,EAAEE;IAAON,GAAGI,EAAEG;GAAO;EACxC;EAEA,SAASC,SAAS;GAChBP,IAAIQ,WAAW;GACfR,KAAK;GACL,IAAI,CAACX,UAAUK,SAAS,CAACE,QAAQF,OAAO;GACxCO,QAAQ;GACRD,KAAK,IAAIS,eAAeR,OAAO;GAC/BD,GAAGU,QAAQd,QAAQF,KAAK;EAC1B;EAEAlC,UAAU+C,MAAM;EAChB7C,MAAM2B,WAAWkB,MAAM;EACvBhD,sBAAsB;GACpByC,IAAIQ,WAAW;GACfR,KAAK;EACP,CAAC;EAED,MAAMW,UAAUtD,eACdgC,UAAUK,QACN7B,gBAAgBgC,IAAIH,MAAMI,GAAGD,IAAIH,MAAMK,GAAGX,UAAUM,OAAOH,KAAKG,KAAK,IACrE,EACN;EAEA,MAAMkB,iBAAiBvD,eACrBY,eAAe;GACb,GAAGD,kBAAkB,UAAUoB,UAAUM,KAAK;GAC9C,mBAAmBtB,MAAMO,QAAQ;GACjC,qBAAqBP,MAAMU,UAAU;GACrC,GAAIO,UAAUK,QAAQ,CAAC,IAAI,EAAE,gCAAgC,MAAM;GACnE,GAAIL,UAAUK,SAASF,UAAUE,QAC7B,EAAEmB,iBAAiB,cAAc,IACjC,CAAC;GACL,GAAGzC,MAAMY;EACX,CAAC,CACH;EAEA,aAAOpB,YAAA,OAAA;GAAA,OAEEgC;GAAO,SAAA;GAAA,SAELgB,eAAelB;EAAK,GAAA;GAC1BC,SAASD,QACNtB,MAAMC,UAAUyC,KAAKC,MAACnD,YAAA,OAAA;IAAA,OAEbmD;IAAC,SACC,CAAC,YAAY,YAAYA,GAAG;IAAC,SAC7B3B,UAAUM;IAAK,UACdN,UAAUM;IAAK,WACd,OAAON,UAAUM,MAAK,GAAIN,UAAUM;IAAO,eAAA;GAAA,GAAA,CAAA9B,YAAA,QAAA;IAAA,SAAA;IAAA,KAI/CE,eAAeiD,GAAG3B,UAAUM,KAAK;GAAC,GAAA,IAAA,CAAA,CAAA,CAG1C,IACD;GACHL,UAAUK,SAASiB,QAAQjB,QAAK9B,YAAA,OAAA;IAAA,SAAA;IAAA,eAAA;GAAA,GAAA,CAAAA,YAAA,QAAA;IAAA,SAGpB,CACL,wBACA4B,UAAUE,QAAQ,aAAa,EAAE;IAClC,KACEiB,QAAQjB;GAAK,GAAA,IAAA,CAAA,CAAA,IAGlB;GACHP,MAAMN,UAAU;EAAC,CAAA;CAGxB;AACF,CAIEX"}
|
|
@@ -15,7 +15,7 @@ var renderWeekTitleList = (dayMap) => {
|
|
|
15
15
|
for (const [k, v] of dayMap) days.push(createVNode("b", { "class": ["w-week-title-item"] }, [v]));
|
|
16
16
|
return createVNode("div", { "class": "w-week-title" }, [days]);
|
|
17
17
|
};
|
|
18
|
-
var
|
|
18
|
+
var DatePanel = /* @__PURE__ */ defineComponent({
|
|
19
19
|
name: "DatePanel",
|
|
20
20
|
components: {
|
|
21
21
|
Btn,
|
|
@@ -393,6 +393,6 @@ var DatePanel_default = /* @__PURE__ */ defineComponent({
|
|
|
393
393
|
}
|
|
394
394
|
});
|
|
395
395
|
//#endregion
|
|
396
|
-
export {
|
|
396
|
+
export { DatePanel as default };
|
|
397
397
|
|
|
398
398
|
//# sourceMappingURL=DatePanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePanel.js","names":["defineComponent","ref","computed","watch","reactive","inject","createVNode","_createVNode","Fragment","_Fragment","useDate","Icon","Days","useUII18n","Months","Years","Toggle","Dial","Btn","useDateView","useBarText","useFormatDate","renderWeekTitleList","dayMap","days","k","v","push","name","components","props","modelValue","type","Number","Date","String","default","undefined","format","max","min","placeholder","emits","setup","emit","t","renderPrevIcon","handleClick","renderNextIcon","formItem","ctrlIcon","toggleComponent","currentView","isYear","isDay","isMonth","isTime","formatIsDay","formatIsMonth","formatIsYear","formatIsTime","getFormatView","setCurrentView","isUpDown","yearPanel","from","to","selectedDate","getStringDate","formatDate","displayDate","addMonths","addYears","year","displayYear","yearPanelLength","month","displayMonth","timeFormat","f","_f","value","split","timeValue","d","h","getHours","m","getMinutes","s","getSeconds","hh","toString","padStart","mm","ss","dataList","datetype","val","barText","renderContent","bar","renderControlBar","transform","toggleOptions","class","dynamic","data","direction","scale","onWheel","event","delay","deltaY","toNext","toPrev","item","index","stringDate","isClose","validate","next","shift","hms","createTimeByFormat","sd","join","toggleDate","sDate","onGet-from-to","y","use","onClick","prev","unshift","pop","yms","slice","view","am","ay","a","clear","init","fv","_fv"],"sources":["../../../components/date/DatePanel.tsx"],"sourcesContent":["import { defineComponent, ref, computed, watch, reactive, inject } from \"vue\"\r\nimport type { PropType } from \"vue\"\r\nimport type {\r\n ToggleTransformType,\r\n DateFormatType,\r\n TimeFormatType,\r\n} from \"../../config/types\"\r\nimport useDate from \"../../use/useDate\"\r\nimport Icon from \"../icon/index\"\r\nimport Days from \"./Days\"\r\nimport { useUII18n } from \"../../use/useUII18n\"\r\nimport Months from \"./Months\"\r\nimport Years from \"./Years\"\r\nimport Toggle from \"../toggle/index\"\r\nimport Dial from \"../time/Dial.vue\"\r\nimport Btn from \"../btn/index\"\r\n\r\nimport {\r\n useDateView,\r\n useBarText,\r\n useDateText,\r\n useFormatDate,\r\n} from \"./_use/useDateModules\"\r\n\r\ntype DirectionType = \"x\" | \"y\"\r\ntype ViewsType = \"year\" | \"month\" | \"day\" | \"time\"\r\ntype DataItemType = { datetype: ViewsType; val: number | string }\r\n\r\nconst renderWeekTitleList = (dayMap: ReadonlyMap<number, string>) => {\r\n const days: any[] = []\r\n for (const [k, v] of dayMap) {\r\n days.push(<b class={[\"w-week-title-item\"]}>{v}</b>)\r\n }\r\n return <div class=\"w-week-title\">{days}</div>\r\n}\r\n\r\nexport default defineComponent({\r\n name: \"DatePanel\",\r\n components: { Btn, Icon, Days, Months, Years, Toggle, Dial },\r\n props: {\r\n modelValue: {\r\n type: [Number, Date, String],\r\n default: undefined,\r\n },\r\n format: {\r\n type: String as PropType<DateFormatType>,\r\n default: \"yyyy-MM-dd\",\r\n // required: true\r\n },\r\n max: { type: [Number, Date, String] },\r\n min: { type: [Number, Date, String] },\r\n placeholder: String,\r\n },\r\n emits: [\"update:modelValue\", \"change\"],\r\n setup(props, { emit }) {\r\n const { t } = useUII18n()\r\n const renderPrevIcon = (handleClick: () => void) => (\r\n <Icon\r\n name=\"w-icon-sort-down\"\r\n class=\"w-date-control-bar-icon\"\r\n rotate={true}\r\n //@ts-ignore\r\n onClick={handleClick}\r\n />\r\n )\r\n\r\n const renderNextIcon = (handleClick: () => void) => (\r\n //@ts-ignore\r\n <Icon\r\n name=\"w-icon-sort-down\"\r\n class=\"w-date-control-bar-icon\"\r\n //@ts-ignore\r\n onClick={handleClick}\r\n />\r\n )\r\n\r\n const formItem: any = inject(\"formItem\", undefined)\r\n\r\n const ctrlIcon = ref<HTMLElement>()\r\n const toggleComponent = ref<typeof Toggle>()\r\n const {\r\n currentView,\r\n isYear,\r\n isDay,\r\n isMonth,\r\n isTime,\r\n formatIsDay,\r\n formatIsMonth,\r\n formatIsYear,\r\n formatIsTime,\r\n getFormatView,\r\n setCurrentView,\r\n } = useDateView(computed(() => props.format))\r\n\r\n const isUpDown = ref(false)\r\n const yearPanel = reactive({ from: 0, to: 0 })\r\n const { selectedDate, getStringDate, formatDate } = useFormatDate(\r\n computed(() => props.format),\r\n computed(() => props.modelValue)\r\n )\r\n //当前下拉框展示的日期\r\n const displayDate = ref(formatDate(props.modelValue) || new Date())\r\n const {\r\n addMonths,\r\n addYears,\r\n dayMap,\r\n format,\r\n year: displayYear,\r\n yearPanelLength,\r\n month: displayMonth,\r\n } = useDate(\r\n displayDate,\r\n computed(() => props.format)\r\n )\r\n const timeFormat = computed(() => {\r\n let f: TimeFormatType = \"HH:mm:ss\"\r\n const _f = props.format\r\n if (formatIsTime.value) {\r\n f = _f.split(/\\s+/)[1] as TimeFormatType\r\n }\r\n return f\r\n })\r\n const timeValue = computed(() => {\r\n if (isTime.value) {\r\n const d = selectedDate.value\r\n if (d) {\r\n const h = d.getHours(),\r\n m = d.getMinutes(),\r\n s = d.getSeconds()\r\n const hh = h.toString().padStart(2, \"0\")\r\n const mm = m.toString().padStart(2, \"0\")\r\n const ss = s.toString().padStart(2, \"0\")\r\n return [hh, mm, ss]\r\n } else {\r\n return [\"00\", \"00\", \"00\"]\r\n }\r\n }\r\n })\r\n\r\n const dataList = ref<DataItemType[]>([\r\n { datetype: \"day\", val: Number(displayDate.value) },\r\n ])\r\n\r\n const barText = useBarText(\r\n isYear,\r\n isMonth,\r\n isDay,\r\n isTime,\r\n displayDate,\r\n yearPanel\r\n )\r\n\r\n function renderContent() {\r\n const bar = renderControlBar()\r\n const transform: ToggleTransformType = isUpDown.value\r\n ? \"translate\"\r\n : \"scale\"\r\n let toggleOptions = {\r\n ref: toggleComponent,\r\n class:\r\n isDay.value || isTime.value\r\n ? \"w-date-days\"\r\n : isMonth.value || isYear.value\r\n ? \"w-date-months\"\r\n : \"\",\r\n dynamic: true,\r\n data: dataList.value,\r\n direction: \"y\" as DirectionType,\r\n transform,\r\n scale: {\r\n from: 0.75,\r\n to: 1.8,\r\n },\r\n onWheel({\r\n event,\r\n delay,\r\n }: {\r\n event: WheelEvent\r\n delay: (fn: Function, n: number) => void\r\n }) {\r\n if (event.deltaY > 0) {\r\n delay(toNext, 100)\r\n } else {\r\n delay(toPrev, 100)\r\n }\r\n },\r\n }\r\n return (\r\n <>\r\n {bar}\r\n <Toggle\r\n {...toggleOptions}\r\n v-slots={{\r\n default: ({\r\n item,\r\n index,\r\n }: {\r\n item: DataItemType\r\n index: number\r\n }) => {\r\n if (item.datetype === \"day\") {\r\n return (\r\n <Days\r\n date={selectedDate.value}\r\n displayDate={item.val}\r\n format={props.format}\r\n min={props.min}\r\n max={props.max}\r\n onToggle-day={(stringDate) => {\r\n if (formatIsDay.value) {\r\n emit(\"update:modelValue\", stringDate)\r\n emit(\"change\", { v: stringDate, isClose: true })\r\n // visible.value = false\r\n formItem?.validate(\"change\")\r\n } else if (formatIsTime.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.next()\r\n dataList.value.push({\r\n datetype: \"time\",\r\n val: \"\",\r\n })\r\n dataList.value.shift()\r\n setCurrentView(\"time\")\r\n const hms = createTimeByFormat()\r\n let sd = stringDate\r\n if (hms) {\r\n sd = sd + \" \" + hms\r\n }\r\n // console.log(sd)\r\n emit(\"update:modelValue\", sd)\r\n // console.log(\"????\", sd)\r\n emit(\"change\", { v: sd, isClose: false })\r\n formItem?.validate(\"change\")\r\n }\r\n }}\r\n />\r\n )\r\n } else if (item.datetype === \"time\") {\r\n return (\r\n <Dial\r\n format={timeFormat.value}\r\n value={timeValue.value?.join(\":\")}\r\n onChange={(hms?: string) => {\r\n const sd = selectedDate.value\r\n if (sd) {\r\n const d = format(sd, \"yyyy-MM-dd\")\r\n if (hms) {\r\n emit(\"update:modelValue\", d + \" \" + hms)\r\n emit(\"change\", { v: d + \" \" + hms, isClose: false })\r\n formItem?.validate(\"change\")\r\n }\r\n }\r\n }}\r\n />\r\n )\r\n } else if (item.datetype === \"month\") {\r\n return (\r\n <Months\r\n date={selectedDate.value}\r\n displayDate={displayDate.value}\r\n min={props.min}\r\n max={props.max}\r\n onToggle-month={(toggleDate) => {\r\n if (formatIsDay.value || formatIsTime.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.next()\r\n dataList.value.push({\r\n datetype: \"day\",\r\n val: Number(toggleDate),\r\n })\r\n setCurrentView(\"day\")\r\n displayDate.value = toggleDate\r\n dataList.value.shift()\r\n } else if (formatIsMonth.value) {\r\n // console.log(getStringDate(toggleDate))\r\n const sDate = getStringDate(toggleDate)\r\n emit(\"update:modelValue\", sDate)\r\n emit(\"change\", { v: sDate, isClose: true })\r\n // visible.value = false\r\n formItem?.validate(\"change\")\r\n }\r\n }}\r\n />\r\n )\r\n } else {\r\n return (\r\n <Years\r\n from={yearPanel.from}\r\n to={yearPanel.to}\r\n date={selectedDate.value}\r\n displayDate={displayDate.value}\r\n min={props.min}\r\n max={props.max}\r\n onGet-from-to={(from, to) => {\r\n yearPanel.from = from\r\n yearPanel.to = to\r\n }}\r\n onToggle-year={(y) => {\r\n if (formatIsYear.value) {\r\n emit(\"update:modelValue\", y + \"\")\r\n emit(\"change\", { v: y + \"\", isClose: true })\r\n // visible.value = false\r\n formItem?.validate(\"change\")\r\n } else {\r\n isUpDown.value = false\r\n toggleComponent.value?.next()\r\n dataList.value.push({\r\n datetype: \"month\",\r\n val: \"\",\r\n })\r\n displayDate.value = new Date(y, 0)\r\n setCurrentView(\"month\")\r\n dataList.value.shift()\r\n }\r\n }}\r\n />\r\n )\r\n }\r\n },\r\n use: () => isDay.value && renderWeekTitleList(dayMap.value),\r\n }}\r\n />\r\n </>\r\n )\r\n }\r\n function renderControlBar() {\r\n return (\r\n <div class=\"w-date-control-bar\" ref={ctrlIcon as any}>\r\n <div\r\n class={[\r\n isYear.value\r\n ? \"w-date-control-bar-disabled\"\r\n : \"w-date-control-bar-y-m\",\r\n ]}\r\n onClick={() => {\r\n if (isDay.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"month\",\r\n val: displayMonth.value,\r\n })\r\n setCurrentView(\"month\")\r\n dataList.value.pop()\r\n } else if (isMonth.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"year\",\r\n val: displayYear.value,\r\n })\r\n setCurrentView(\"year\")\r\n dataList.value.pop()\r\n yearPanel.from = 0\r\n yearPanel.to = 0\r\n } else if (isTime.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"day\",\r\n val: Number(displayDate.value),\r\n })\r\n setCurrentView(\"day\")\r\n dataList.value.pop()\r\n }\r\n }}>\r\n {barText.value}\r\n </div>\r\n {isTime.value ? (\r\n <Btn\r\n mode=\"text\"\r\n text={t(\"date.confirm\")}\r\n //@ts-ignore\r\n onClick={() => {\r\n // console.log(props.modelValue)\r\n emit(\"change\", { v: props.modelValue, isClose: true })\r\n }}\r\n />\r\n ) : (\r\n [\r\n <span class=\"w-date-placeholder\">{props.placeholder}</span>,\r\n renderPrevIcon(toPrev),\r\n renderNextIcon(toNext),\r\n ]\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n function createTimeByFormat() {\r\n const f = timeFormat.value\r\n const yms = timeValue.value\r\n if (yms) {\r\n if (f === \"HH\") {\r\n return yms[0]\r\n } else if (f === \"HH:mm\") {\r\n return yms.slice(0, 2).join(\":\")\r\n } else if (f === \"HH:mm:ss\") {\r\n return yms.join(\":\")\r\n }\r\n }\r\n }\r\n\r\n function toPrev() {\r\n // isPrev.value = true\r\n isUpDown.value = true\r\n const view = currentView.value\r\n toggleComponent.value?.prev()\r\n if (view === \"day\") {\r\n const am = addMonths(displayDate.value, -1)\r\n dataList.value.unshift({ datetype: view, val: Number(am) })\r\n dataList.value.pop()\r\n displayDate.value = am\r\n } else if (view === \"month\") {\r\n const ay = addYears(displayDate.value, -1)\r\n const a = Number(ay)\r\n dataList.value.unshift({ datetype: view, val: a })\r\n dataList.value.pop()\r\n displayDate.value = ay\r\n } else {\r\n yearPanel.from = yearPanel.from - yearPanelLength\r\n yearPanel.to = yearPanel.to - yearPanelLength\r\n\r\n dataList.value.unshift({ datetype: view, val: Number(new Date()) })\r\n dataList.value.pop()\r\n }\r\n }\r\n\r\n function toNext() {\r\n // isPrev.value = false\r\n isUpDown.value = true\r\n const view = currentView.value\r\n toggleComponent.value?.next()\r\n if (view === \"day\") {\r\n const am = addMonths(displayDate.value)\r\n const a = Number(am)\r\n dataList.value.push({ datetype: view, val: a })\r\n dataList.value.shift()\r\n displayDate.value = am\r\n } else if (view === \"month\") {\r\n const ay = addYears(displayDate.value, 1)\r\n const a = Number(ay)\r\n dataList.value.push({ datetype: view, val: a })\r\n dataList.value.shift()\r\n displayDate.value = ay\r\n } else {\r\n yearPanel.from = yearPanel.from + yearPanelLength\r\n yearPanel.to = yearPanel.to + yearPanelLength\r\n //val是时间戳,以保证每次都会变化,这样动画才会生效!\r\n dataList.value.push({ datetype: view, val: Number(new Date()) })\r\n dataList.value.shift()\r\n }\r\n }\r\n\r\n function clear() {\r\n // 清空时,仍然保持在当前的显示状态\r\n // displayDate.value = new Date()\r\n // dataList.value = [{ datetype: 'day', val: Number(displayDate.value) }]\r\n //setCurrentView('day')\r\n if (isTime.value) {\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"day\",\r\n val: Number(displayDate.value),\r\n })\r\n dataList.value.pop()\r\n setCurrentView(\"day\")\r\n }\r\n emit(\"update:modelValue\", undefined)\r\n emit(\"change\", undefined)\r\n formItem?.validate(\"change\")\r\n }\r\n\r\n function init() {\r\n let fv = getFormatView()\r\n const _fv = fv === \"time\" ? \"day\" : fv\r\n //每次展示下拉框时,根据当前选中的日期进行初始化\r\n if (selectedDate.value) {\r\n displayDate.value = selectedDate.value\r\n dataList.value = [\r\n { datetype: _fv, val: format(selectedDate.value, props.format) },\r\n ]\r\n } else {\r\n displayDate.value = new Date()\r\n dataList.value = [{ datetype: _fv, val: Number(new Date()) }]\r\n }\r\n //每次显示出下拉框时就会按照format给定的值进行初始化界面\r\n\r\n setCurrentView(_fv)\r\n }\r\n\r\n init()\r\n\r\n watch(\r\n () => props.modelValue,\r\n (d) => {\r\n if (d !== undefined) {\r\n // displayDate.value = d\r\n displayDate.value = selectedDate.value!\r\n }\r\n }\r\n )\r\n\r\n return renderContent\r\n },\r\n})\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePanel.js","names":["defineComponent","ref","computed","watch","reactive","inject","createVNode","_createVNode","Fragment","_Fragment","useDate","Icon","Days","useUII18n","Months","Years","Toggle","Dial","Btn","useDateView","useBarText","useFormatDate","renderWeekTitleList","dayMap","days","k","v","push","DatePanel","name","components","props","modelValue","type","Number","Date","String","default","undefined","format","max","min","placeholder","emits","setup","emit","t","renderPrevIcon","handleClick","renderNextIcon","formItem","ctrlIcon","toggleComponent","currentView","isYear","isDay","isMonth","isTime","formatIsDay","formatIsMonth","formatIsYear","formatIsTime","getFormatView","setCurrentView","isUpDown","yearPanel","from","to","selectedDate","getStringDate","formatDate","displayDate","addMonths","addYears","year","displayYear","yearPanelLength","month","displayMonth","timeFormat","f","_f","value","split","timeValue","d","h","getHours","m","getMinutes","s","getSeconds","hh","toString","padStart","mm","ss","dataList","datetype","val","barText","renderContent","bar","renderControlBar","transform","toggleOptions","class","dynamic","data","direction","scale","onWheel","event","delay","deltaY","toNext","toPrev","item","index","stringDate","isClose","validate","next","shift","hms","createTimeByFormat","sd","join","toggleDate","sDate","onGet-from-to","y","use","onClick","prev","unshift","pop","yms","slice","view","am","ay","a","clear","init","fv","_fv"],"sources":["../../../components/date/DatePanel.tsx"],"sourcesContent":["import { defineComponent, ref, computed, watch, reactive, inject } from \"vue\"\r\nimport type { DefineComponent, PropType } from \"vue\"\r\nimport type {\r\n ToggleTransformType,\r\n DateFormatType,\r\n TimeFormatType,\r\n} from \"../../config/types\"\r\nimport useDate from \"../../use/useDate\"\r\nimport Icon from \"../icon/index\"\r\nimport Days from \"./Days\"\r\nimport { useUII18n } from \"../../use/useUII18n\"\r\nimport Months from \"./Months\"\r\nimport Years from \"./Years\"\r\nimport Toggle from \"../toggle/index\"\r\nimport Dial from \"../time/Dial.vue\"\r\nimport Btn from \"../btn/index\"\r\n\r\nimport {\r\n useDateView,\r\n useBarText,\r\n useDateText,\r\n useFormatDate,\r\n} from \"./_use/useDateModules\"\r\n\r\ntype DirectionType = \"x\" | \"y\"\r\ntype ViewsType = \"year\" | \"month\" | \"day\" | \"time\"\r\ntype DataItemType = { datetype: ViewsType; val: number | string }\r\n\r\nconst renderWeekTitleList = (dayMap: ReadonlyMap<number, string>) => {\r\n const days: any[] = []\r\n for (const [k, v] of dayMap) {\r\n days.push(<b class={[\"w-week-title-item\"]}>{v}</b>)\r\n }\r\n return <div class=\"w-week-title\">{days}</div>\r\n}\r\n\r\nconst DatePanel = defineComponent({\r\n name: \"DatePanel\",\r\n components: { Btn, Icon, Days, Months, Years, Toggle, Dial },\r\n props: {\r\n modelValue: {\r\n type: [Number, Date, String],\r\n default: undefined,\r\n },\r\n format: {\r\n type: String as PropType<DateFormatType>,\r\n default: \"yyyy-MM-dd\",\r\n // required: true\r\n },\r\n max: { type: [Number, Date, String] },\r\n min: { type: [Number, Date, String] },\r\n placeholder: String,\r\n },\r\n emits: [\"update:modelValue\", \"change\"],\r\n setup(props, { emit }) {\r\n const { t } = useUII18n()\r\n const renderPrevIcon = (handleClick: () => void) => (\r\n <Icon\r\n name=\"w-icon-sort-down\"\r\n class=\"w-date-control-bar-icon\"\r\n rotate={true}\r\n //@ts-ignore\r\n onClick={handleClick}\r\n />\r\n )\r\n\r\n const renderNextIcon = (handleClick: () => void) => (\r\n //@ts-ignore\r\n <Icon\r\n name=\"w-icon-sort-down\"\r\n class=\"w-date-control-bar-icon\"\r\n //@ts-ignore\r\n onClick={handleClick}\r\n />\r\n )\r\n\r\n const formItem: any = inject(\"formItem\", undefined)\r\n\r\n const ctrlIcon = ref<HTMLElement>()\r\n const toggleComponent = ref<typeof Toggle>()\r\n const {\r\n currentView,\r\n isYear,\r\n isDay,\r\n isMonth,\r\n isTime,\r\n formatIsDay,\r\n formatIsMonth,\r\n formatIsYear,\r\n formatIsTime,\r\n getFormatView,\r\n setCurrentView,\r\n } = useDateView(computed(() => props.format))\r\n\r\n const isUpDown = ref(false)\r\n const yearPanel = reactive({ from: 0, to: 0 })\r\n const { selectedDate, getStringDate, formatDate } = useFormatDate(\r\n computed(() => props.format),\r\n computed(() => props.modelValue)\r\n )\r\n //当前下拉框展示的日期\r\n const displayDate = ref(formatDate(props.modelValue) || new Date())\r\n const {\r\n addMonths,\r\n addYears,\r\n dayMap,\r\n format,\r\n year: displayYear,\r\n yearPanelLength,\r\n month: displayMonth,\r\n } = useDate(\r\n displayDate,\r\n computed(() => props.format)\r\n )\r\n const timeFormat = computed(() => {\r\n let f: TimeFormatType = \"HH:mm:ss\"\r\n const _f = props.format\r\n if (formatIsTime.value) {\r\n f = _f.split(/\\s+/)[1] as TimeFormatType\r\n }\r\n return f\r\n })\r\n const timeValue = computed(() => {\r\n if (isTime.value) {\r\n const d = selectedDate.value\r\n if (d) {\r\n const h = d.getHours(),\r\n m = d.getMinutes(),\r\n s = d.getSeconds()\r\n const hh = h.toString().padStart(2, \"0\")\r\n const mm = m.toString().padStart(2, \"0\")\r\n const ss = s.toString().padStart(2, \"0\")\r\n return [hh, mm, ss]\r\n } else {\r\n return [\"00\", \"00\", \"00\"]\r\n }\r\n }\r\n })\r\n\r\n const dataList = ref<DataItemType[]>([\r\n { datetype: \"day\", val: Number(displayDate.value) },\r\n ])\r\n\r\n const barText = useBarText(\r\n isYear,\r\n isMonth,\r\n isDay,\r\n isTime,\r\n displayDate,\r\n yearPanel\r\n )\r\n\r\n function renderContent() {\r\n const bar = renderControlBar()\r\n const transform: ToggleTransformType = isUpDown.value\r\n ? \"translate\"\r\n : \"scale\"\r\n let toggleOptions = {\r\n ref: toggleComponent,\r\n class:\r\n isDay.value || isTime.value\r\n ? \"w-date-days\"\r\n : isMonth.value || isYear.value\r\n ? \"w-date-months\"\r\n : \"\",\r\n dynamic: true,\r\n data: dataList.value,\r\n direction: \"y\" as DirectionType,\r\n transform,\r\n scale: {\r\n from: 0.75,\r\n to: 1.8,\r\n },\r\n onWheel({\r\n event,\r\n delay,\r\n }: {\r\n event: WheelEvent\r\n delay: (fn: Function, n: number) => void\r\n }) {\r\n if (event.deltaY > 0) {\r\n delay(toNext, 100)\r\n } else {\r\n delay(toPrev, 100)\r\n }\r\n },\r\n }\r\n return (\r\n <>\r\n {bar}\r\n <Toggle\r\n {...toggleOptions}\r\n v-slots={{\r\n default: ({\r\n item,\r\n index,\r\n }: {\r\n item: DataItemType\r\n index: number\r\n }) => {\r\n if (item.datetype === \"day\") {\r\n return (\r\n <Days\r\n date={selectedDate.value}\r\n displayDate={item.val}\r\n format={props.format}\r\n min={props.min}\r\n max={props.max}\r\n onToggle-day={(stringDate) => {\r\n if (formatIsDay.value) {\r\n emit(\"update:modelValue\", stringDate)\r\n emit(\"change\", { v: stringDate, isClose: true })\r\n // visible.value = false\r\n formItem?.validate(\"change\")\r\n } else if (formatIsTime.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.next()\r\n dataList.value.push({\r\n datetype: \"time\",\r\n val: \"\",\r\n })\r\n dataList.value.shift()\r\n setCurrentView(\"time\")\r\n const hms = createTimeByFormat()\r\n let sd = stringDate\r\n if (hms) {\r\n sd = sd + \" \" + hms\r\n }\r\n // console.log(sd)\r\n emit(\"update:modelValue\", sd)\r\n // console.log(\"????\", sd)\r\n emit(\"change\", { v: sd, isClose: false })\r\n formItem?.validate(\"change\")\r\n }\r\n }}\r\n />\r\n )\r\n } else if (item.datetype === \"time\") {\r\n return (\r\n <Dial\r\n format={timeFormat.value}\r\n value={timeValue.value?.join(\":\")}\r\n onChange={(hms?: string) => {\r\n const sd = selectedDate.value\r\n if (sd) {\r\n const d = format(sd, \"yyyy-MM-dd\")\r\n if (hms) {\r\n emit(\"update:modelValue\", d + \" \" + hms)\r\n emit(\"change\", { v: d + \" \" + hms, isClose: false })\r\n formItem?.validate(\"change\")\r\n }\r\n }\r\n }}\r\n />\r\n )\r\n } else if (item.datetype === \"month\") {\r\n return (\r\n <Months\r\n date={selectedDate.value}\r\n displayDate={displayDate.value}\r\n min={props.min}\r\n max={props.max}\r\n onToggle-month={(toggleDate) => {\r\n if (formatIsDay.value || formatIsTime.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.next()\r\n dataList.value.push({\r\n datetype: \"day\",\r\n val: Number(toggleDate),\r\n })\r\n setCurrentView(\"day\")\r\n displayDate.value = toggleDate\r\n dataList.value.shift()\r\n } else if (formatIsMonth.value) {\r\n // console.log(getStringDate(toggleDate))\r\n const sDate = getStringDate(toggleDate)\r\n emit(\"update:modelValue\", sDate)\r\n emit(\"change\", { v: sDate, isClose: true })\r\n // visible.value = false\r\n formItem?.validate(\"change\")\r\n }\r\n }}\r\n />\r\n )\r\n } else {\r\n return (\r\n <Years\r\n from={yearPanel.from}\r\n to={yearPanel.to}\r\n date={selectedDate.value}\r\n displayDate={displayDate.value}\r\n min={props.min}\r\n max={props.max}\r\n onGet-from-to={(from, to) => {\r\n yearPanel.from = from\r\n yearPanel.to = to\r\n }}\r\n onToggle-year={(y) => {\r\n if (formatIsYear.value) {\r\n emit(\"update:modelValue\", y + \"\")\r\n emit(\"change\", { v: y + \"\", isClose: true })\r\n // visible.value = false\r\n formItem?.validate(\"change\")\r\n } else {\r\n isUpDown.value = false\r\n toggleComponent.value?.next()\r\n dataList.value.push({\r\n datetype: \"month\",\r\n val: \"\",\r\n })\r\n displayDate.value = new Date(y, 0)\r\n setCurrentView(\"month\")\r\n dataList.value.shift()\r\n }\r\n }}\r\n />\r\n )\r\n }\r\n },\r\n use: () => isDay.value && renderWeekTitleList(dayMap.value),\r\n }}\r\n />\r\n </>\r\n )\r\n }\r\n function renderControlBar() {\r\n return (\r\n <div class=\"w-date-control-bar\" ref={ctrlIcon as any}>\r\n <div\r\n class={[\r\n isYear.value\r\n ? \"w-date-control-bar-disabled\"\r\n : \"w-date-control-bar-y-m\",\r\n ]}\r\n onClick={() => {\r\n if (isDay.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"month\",\r\n val: displayMonth.value,\r\n })\r\n setCurrentView(\"month\")\r\n dataList.value.pop()\r\n } else if (isMonth.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"year\",\r\n val: displayYear.value,\r\n })\r\n setCurrentView(\"year\")\r\n dataList.value.pop()\r\n yearPanel.from = 0\r\n yearPanel.to = 0\r\n } else if (isTime.value) {\r\n isUpDown.value = false\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"day\",\r\n val: Number(displayDate.value),\r\n })\r\n setCurrentView(\"day\")\r\n dataList.value.pop()\r\n }\r\n }}>\r\n {barText.value}\r\n </div>\r\n {isTime.value ? (\r\n <Btn\r\n mode=\"text\"\r\n text={t(\"date.confirm\")}\r\n //@ts-ignore\r\n onClick={() => {\r\n // console.log(props.modelValue)\r\n emit(\"change\", { v: props.modelValue, isClose: true })\r\n }}\r\n />\r\n ) : (\r\n [\r\n <span class=\"w-date-placeholder\">{props.placeholder}</span>,\r\n renderPrevIcon(toPrev),\r\n renderNextIcon(toNext),\r\n ]\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n function createTimeByFormat() {\r\n const f = timeFormat.value\r\n const yms = timeValue.value\r\n if (yms) {\r\n if (f === \"HH\") {\r\n return yms[0]\r\n } else if (f === \"HH:mm\") {\r\n return yms.slice(0, 2).join(\":\")\r\n } else if (f === \"HH:mm:ss\") {\r\n return yms.join(\":\")\r\n }\r\n }\r\n }\r\n\r\n function toPrev() {\r\n // isPrev.value = true\r\n isUpDown.value = true\r\n const view = currentView.value\r\n toggleComponent.value?.prev()\r\n if (view === \"day\") {\r\n const am = addMonths(displayDate.value, -1)\r\n dataList.value.unshift({ datetype: view, val: Number(am) })\r\n dataList.value.pop()\r\n displayDate.value = am\r\n } else if (view === \"month\") {\r\n const ay = addYears(displayDate.value, -1)\r\n const a = Number(ay)\r\n dataList.value.unshift({ datetype: view, val: a })\r\n dataList.value.pop()\r\n displayDate.value = ay\r\n } else {\r\n yearPanel.from = yearPanel.from - yearPanelLength\r\n yearPanel.to = yearPanel.to - yearPanelLength\r\n\r\n dataList.value.unshift({ datetype: view, val: Number(new Date()) })\r\n dataList.value.pop()\r\n }\r\n }\r\n\r\n function toNext() {\r\n // isPrev.value = false\r\n isUpDown.value = true\r\n const view = currentView.value\r\n toggleComponent.value?.next()\r\n if (view === \"day\") {\r\n const am = addMonths(displayDate.value)\r\n const a = Number(am)\r\n dataList.value.push({ datetype: view, val: a })\r\n dataList.value.shift()\r\n displayDate.value = am\r\n } else if (view === \"month\") {\r\n const ay = addYears(displayDate.value, 1)\r\n const a = Number(ay)\r\n dataList.value.push({ datetype: view, val: a })\r\n dataList.value.shift()\r\n displayDate.value = ay\r\n } else {\r\n yearPanel.from = yearPanel.from + yearPanelLength\r\n yearPanel.to = yearPanel.to + yearPanelLength\r\n //val是时间戳,以保证每次都会变化,这样动画才会生效!\r\n dataList.value.push({ datetype: view, val: Number(new Date()) })\r\n dataList.value.shift()\r\n }\r\n }\r\n\r\n function clear() {\r\n // 清空时,仍然保持在当前的显示状态\r\n // displayDate.value = new Date()\r\n // dataList.value = [{ datetype: 'day', val: Number(displayDate.value) }]\r\n //setCurrentView('day')\r\n if (isTime.value) {\r\n toggleComponent.value?.prev()\r\n dataList.value.unshift({\r\n datetype: \"day\",\r\n val: Number(displayDate.value),\r\n })\r\n dataList.value.pop()\r\n setCurrentView(\"day\")\r\n }\r\n emit(\"update:modelValue\", undefined)\r\n emit(\"change\", undefined)\r\n formItem?.validate(\"change\")\r\n }\r\n\r\n function init() {\r\n let fv = getFormatView()\r\n const _fv = fv === \"time\" ? \"day\" : fv\r\n //每次展示下拉框时,根据当前选中的日期进行初始化\r\n if (selectedDate.value) {\r\n displayDate.value = selectedDate.value\r\n dataList.value = [\r\n { datetype: _fv, val: format(selectedDate.value, props.format) },\r\n ]\r\n } else {\r\n displayDate.value = new Date()\r\n dataList.value = [{ datetype: _fv, val: Number(new Date()) }]\r\n }\r\n //每次显示出下拉框时就会按照format给定的值进行初始化界面\r\n\r\n setCurrentView(_fv)\r\n }\r\n\r\n init()\r\n\r\n watch(\r\n () => props.modelValue,\r\n (d) => {\r\n if (d !== undefined) {\r\n // displayDate.value = d\r\n displayDate.value = selectedDate.value!\r\n }\r\n }\r\n )\r\n\r\n return renderContent\r\n },\r\n})\r\n\r\n/** 收窄为 DefineComponent,避免 dts 暴露子组件 emits 的私有 EmitOptions */\r\nexport default DatePanel as unknown as DefineComponent\r\n"],"mappings":"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"}
|
|
@@ -214,8 +214,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
214
214
|
modelValue: DateType;
|
|
215
215
|
disabled: boolean;
|
|
216
216
|
range: boolean;
|
|
217
|
-
clearable: boolean;
|
|
218
217
|
placeholder: string;
|
|
218
|
+
clearable: boolean;
|
|
219
219
|
format: DateFormatType;
|
|
220
220
|
hasQuick: boolean;
|
|
221
221
|
startPlaceholder: string;
|
|
@@ -6,7 +6,7 @@ import Trigger_default from "../trigger/Trigger.js";
|
|
|
6
6
|
import { useUII18n } from "../../use/useUII18n.js";
|
|
7
7
|
import { getRangeDate } from "../../use/useDate.js";
|
|
8
8
|
import { useDateText, useDateView } from "./_use/useDateModules.js";
|
|
9
|
-
import
|
|
9
|
+
import DatePanel from "./DatePanel.js";
|
|
10
10
|
import { getQuickDateText, isQuickRangeActive } from "./_use/quickDate.js";
|
|
11
11
|
import QuickDate_default from "./QuickDate.js";
|
|
12
12
|
import { DATE_PICKER_FALLBACK } from "./config.js";
|
|
@@ -336,10 +336,10 @@ var DatePicker_default = /* @__PURE__ */ defineComponent({
|
|
|
336
336
|
return () => createVNode(Layer_default, layerOptions.value, {
|
|
337
337
|
trigger: renderTrigger,
|
|
338
338
|
default: () => isRange.value ? createVNode(Fragment, null, [cfg.value.hasQuick ? createVNode(QuickDate_default, quickOpts.value, null) : null, createVNode("div", { "class": "w-date-start-end" }, [
|
|
339
|
-
createVNode("div", null, [createVNode(
|
|
339
|
+
createVNode("div", null, [createVNode(DatePanel, startOpts.value, null)]),
|
|
340
340
|
createVNode("div", { "class": "w-date-range-gap" }, null),
|
|
341
|
-
createVNode("div", null, [createVNode(
|
|
342
|
-
])]) : createVNode(
|
|
341
|
+
createVNode("div", null, [createVNode(DatePanel, endOpts.value, null)])
|
|
342
|
+
])]) : createVNode(DatePanel, datePanelOpts.value, null)
|
|
343
343
|
});
|
|
344
344
|
}
|
|
345
345
|
});
|