UNPKG

mealcomes

Version:

MealComes 用于学习前端的组件库

1 lines 9.5 kB
{"version":3,"file":"button-DLbtVcMl.mjs","sources":["../../../../packages/components/button/src/button.ts","../../../../packages/components/button/src/button.vue","../../../../packages/components/button/index.ts"],"sourcesContent":["import type { ExtractPropTypes, PropType } from 'vue';\r\nimport type { ComponentSize } from '@mealcomes/constants';\r\n\r\nexport type Type =\r\n | 'primary'\r\n | 'success'\r\n | 'warning'\r\n | 'danger'\r\n | 'info'\r\n | 'default'\r\n | '';\r\n\r\nexport type NativeType = 'button' | 'submit' | 'reset';\r\n\r\nexport type Placement = 'left' | 'right';\r\n\r\n/**\r\n * button 组件 props\r\n */\r\nexport const buttonProps = {\r\n /**\r\n * 按钮大小\r\n */\r\n size: {\r\n type: String as PropType<ComponentSize>\r\n },\r\n /**\r\n * 按钮类型\r\n */\r\n type: {\r\n type: String as PropType<Type>,\r\n validator: (val: string) => {\r\n return [\r\n 'primary',\r\n 'success',\r\n 'warning',\r\n 'danger',\r\n 'info',\r\n 'default',\r\n ''\r\n ].includes(val);\r\n }\r\n },\r\n /**\r\n * 圆角按钮\r\n */\r\n round: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * 是否加载中\r\n */\r\n loading: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * 是否禁用\r\n */\r\n disabled: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * 原始类型\r\n */\r\n nativeType: {\r\n type: String as PropType<NativeType>,\r\n default: 'button'\r\n },\r\n /**\r\n * 图标位置\r\n */\r\n iconPlacement: {\r\n type: String as PropType<Placement>,\r\n default: 'left'\r\n },\r\n /**\r\n * 圆形按钮\r\n */\r\n circle: {\r\n type: Boolean,\r\n default: false\r\n },\r\n /**\r\n * 朴素按钮\r\n */\r\n plain: {\r\n type: Boolean,\r\n default: false\r\n }\r\n} as const;\r\n\r\n/**\r\n * button 组件 props 类型\r\n */\r\nexport type ButtonProps = ExtractPropTypes<typeof buttonProps>;\r\n\r\n/**\r\n * button 组件 emits\r\n */\r\nexport const buttonEmits = {\r\n /**\r\n * 点击事件\r\n */\r\n click: (e: MouseEvent) => e instanceof MouseEvent,\r\n /**\r\n * 鼠标按下事件\r\n */\r\n mousedown: (e: MouseEvent) => e instanceof MouseEvent\r\n};\r\n\r\n/**\r\n * button 组件 emits 类型\r\n */\r\nexport type ButtonEmits = typeof buttonEmits;\r\n","<template>\n <button\n :class=\"[\n bem.b(),\n bem.m(type),\n bem.m(size),\n bem.is('loading', loading),\n bem.is('disabled', disabled),\n bem.is('round', round),\n bem.is('circle', circle),\n bem.is('plain', plain)\n ]\"\n :type=\"nativeType\"\n :disabled=\"disabled || loading\"\n @click=\"handleClick\"\n @mousedown=\"handleMouseDown\"\n >\n <template v-if=\"loading && iconPlacement === 'left'\">\n <slot v-if=\"$slots.loading\" name=\"loading\" />\n <mc-Icon v-else>\n <component :is=\"Loading\" />\n </mc-Icon>\n </template>\n <mc-icon v-else-if=\"$slots.icon && iconPlacement === 'left'\">\n <component :is=\"$slots.icon\" v-if=\"$slots.icon\" />\n <slot v-else name=\"icon\" />\n </mc-icon>\n <span v-if=\"$slots.default\">\n <slot />\n </span>\n <template v-if=\"loading && iconPlacement === 'right'\">\n <slot v-if=\"$slots.loading\" name=\"loading\" />\n <mc-icon v-else>\n <component :is=\"Loading\" />\n </mc-icon>\n </template>\n <mc-icon v-else-if=\"$slots.icon && iconPlacement === 'right'\">\n <component :is=\"$slots.icon\" v-if=\"$slots.icon\" />\n <slot v-else name=\"icon\" />\n </mc-icon>\n <mc-wave ref=\"waveRef\" v-if=\"waving\"></mc-wave>\n </button>\n</template>\n\n<script lang=\"ts\" setup>\nimport { createNamespace } from '@mealcomes/utils';\nimport { buttonEmits, buttonProps } from './button';\nimport Loading from '../../internal-icon/loading';\nimport McIcon from '@mealcomes/components/icon';\nimport McWave from '@mealcomes/components/_util/wave/wave.vue';\nimport type { WaveExpose } from '@mealcomes/components/_util/wave/wave';\nimport { nextTick, ref } from 'vue';\n\ndefineOptions({\n name: 'mc-button',\n inheritAttrs: false\n});\n\nconst bem = createNamespace('button');\nconst props = defineProps(buttonProps);\nconst emits = defineEmits(buttonEmits);\n\nconst waving = ref(false);\nconst waveRef = ref<WaveExpose>();\n// eslint-disable-next-line no-undef\nlet waveId: string | number | NodeJS.Timeout | undefined;\n\nfunction clearWave() {\n if (waveId) {\n clearTimeout(waveId);\n }\n}\n\nfunction wave() {\n clearWave();\n waving.value = true;\n nextTick(() => {\n waveRef.value?.wave();\n });\n waveId = setTimeout(() => {\n waving.value = false;\n }, 1000);\n}\n\nfunction handleClick(event: MouseEvent) {\n if (props.loading) return;\n wave();\n emits('click', event);\n}\n\nfunction handleMouseDown(event: MouseEvent) {\n emits('mousedown', event);\n}\n</script>\n","import { withInstall } from '@mealcomes/utils';\nimport _Button from './src/button.vue';\n\nexport const McButton = withInstall(_Button);\n\nexport default McButton;\n\nexport * from './src/button';\n\ndeclare module 'vue' {\n export interface GlobalComponents {\n McButton: typeof McButton\n }\n}"],"names":["buttonProps","val","buttonEmits","e","bem","createNamespace","props","__props","emits","__emit","waving","ref","waveRef","waveId","clearWave","wave","nextTick","_a","handleClick","event","handleMouseDown","_createElementBlock","_normalizeClass","_unref","type","size","loading","disabled","round","circle","plain","nativeType","iconPlacement","_Fragment","$slots","_renderSlot","_ctx","_createBlock","McIcon","_openBlock","_resolveDynamicComponent","Loading","_hoisted_2","McWave","McButton","withInstall","_Button"],"mappings":";;;;;AAmBO,MAAMA,IAAc;AAAA;AAAA;AAAA;AAAA,EAIvB,MAAM;AAAA,IACF,MAAM;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKV,MAAM;AAAA,IACF,MAAM;AAAA,IACN,WAAW,CAACC,MACD;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,EACF,SAASA,CAAG;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKJ,OAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKb,SAAS;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKb,UAAU;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKb,YAAY;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKb,eAAe;AAAA,IACX,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKb,QAAQ;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAKb,OAAO;AAAA,IACH,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAEjB,GAUaC,IAAc;AAAA;AAAA;AAAA;AAAA,EAIvB,OAAO,CAACC,MAAkBA,aAAa;AAAA;AAAA;AAAA;AAAA,EAIvC,WAAW,CAACA,MAAkBA,aAAa;AAC/C;;;;;;;ACrDA,UAAMC,IAAMC,EAAgB,QAAQ,GAC9BC,IAAQC,GACRC,IAAQC,GAERC,IAASC,EAAI,EAAK,GAClBC,IAAUD,EAAA;AAEhB,QAAIE;AAEJ,aAASC,IAAY;AACjB,MAAID,KACA,aAAaA,CAAM;AAAA,IAE3B;AAEA,aAASE,IAAO;AACZ,MAAAD,EAAA,GACAJ,EAAO,QAAQ,IACfM,EAAS,MAAM;;AACX,SAAAC,IAAAL,EAAQ,UAAR,QAAAK,EAAe;AAAA,MACnB,CAAC,GACDJ,IAAS,WAAW,MAAM;AACtB,QAAAH,EAAO,QAAQ;AAAA,MACnB,GAAG,GAAI;AAAA,IACX;AAEA,aAASQ,EAAYC,GAAmB;AACpC,MAAIb,EAAM,YACVS,EAAA,GACAP,EAAM,SAASW,CAAK;AAAA,IACxB;AAEA,aAASC,EAAgBD,GAAmB;AACxC,MAAAX,EAAM,aAAaW,CAAK;AAAA,IAC5B;2BA3FIE,EAwCS,UAAA;AAAA,MAvCJ,OAAKC,EAAA;AAAA,QAAgBC,EAAAnB,CAAA,EAAI,EAAA;AAAA,QAAiBmB,EAAAnB,CAAA,EAAI,EAAEoB,EAAAA,IAAI;AAAA,QAAeD,EAAAnB,CAAA,EAAI,EAAEqB,EAAAA,IAAI;AAAA,QAAeF,EAAAnB,CAAA,EAAI,GAAE,WAAYsB,EAAAA,OAAO;AAAA,QAAeH,EAAAnB,CAAA,EAAI,GAAE,YAAauB,EAAAA,QAAQ;AAAA,QAAeJ,EAAAnB,CAAA,EAAI,GAAE,SAAUwB,EAAAA,KAAK;AAAA,QAAeL,EAAAnB,CAAA,EAAI,GAAE,UAAWyB,EAAAA,MAAM;AAAA,QAAeN,EAAAnB,CAAA,EAAI,GAAE,SAAU0B,EAAAA,KAAK;AAAA,MAAA;MAU7Q,MAAMC,EAAAA;AAAAA,MACN,UAAUJ,EAAAA,YAAYD,EAAAA;AAAAA,MACtB,SAAOR;AAAA,MACP,aAAWE;AAAA,IAAA;MAEIM,EAAAA,WAAWM,EAAAA,kBAAa,eAAxCX,EAKWY,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAJKC,EAAAA,OAAO,UAAnBC,EAA6CC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA,UAC7CC,EAEUd,EAAAe,CAAA,GAAA,EAAA,KAAA,KAAA;AAAA,qBADN,MAA2B;AAAA,aAA3BC,KAAAF,EAA2BG,EAAXjB,EAAAkB,CAAA,CAAO,CAAA;AAAA,UAAA;;;gBAGXP,EAAAA,OAAO,QAAQF,EAAAA,kBAAa,eAAhDK,EAGUd,EAAAe,CAAA,GAAA,EAAA,KAAA,KAAA;AAAA,mBAFN,MAAkD;AAAA,UAAfJ,EAAAA,OAAO,aAA1CG,EAAkDG,EAAlCN,EAAAA,OAAO,IAAI,GAAA,EAAA,KAAA,GAAA,KAC3BC,EAA2BC,EAAA,QAAA,QAAA,EAAA,KAAA,EAAA,CAAA;AAAA,QAAA;;;MAEnBF,EAAAA,OAAO,gBAAnBb,EAEO,QAAAqB,GAAA;AAAA,QADHP,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAEIV,EAAAA,WAAWM,EAAAA,kBAAa,gBAAxCX,EAKWY,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QAJKC,EAAAA,OAAO,UAAnBC,EAA6CC,EAAA,QAAA,WAAA,EAAA,KAAA,EAAA,CAAA,UAC7CC,EAEUd,EAAAe,CAAA,GAAA,EAAA,KAAA,KAAA;AAAA,qBADN,MAA2B;AAAA,aAA3BC,KAAAF,EAA2BG,EAAXjB,EAAAkB,CAAA,CAAO,CAAA;AAAA,UAAA;;;gBAGXP,EAAAA,OAAO,QAAQF,EAAAA,kBAAa,gBAAhDK,EAGUd,EAAAe,CAAA,GAAA,EAAA,KAAA,KAAA;AAAA,mBAFN,MAAkD;AAAA,UAAfJ,EAAAA,OAAO,aAA1CG,EAAkDG,EAAlCN,EAAAA,OAAO,IAAI,GAAA,EAAA,KAAA,GAAA,KAC3BC,EAA2BC,EAAA,QAAA,QAAA,EAAA,KAAA,EAAA,CAAA;AAAA,QAAA;;;MAEF1B,EAAA,cAA7B2B,EAA+CM,GAAA;AAAA;iBAAlC;AAAA,QAAJ,KAAI/B;AAAA,MAAA;;;ICrCRgC,IAAWC,EAAYC,CAAO;"}