UNPKG

tav-ui

Version:
1 lines 11.3 kB
{"version":3,"file":"icon-picker2.mjs","sources":["../../../../../../../packages/components/icon-picker/src/icon-picker.vue"],"sourcesContent":["<script lang=\"ts\">\n// import svgIcons from \"virtual:svg-icons-names\";\nimport { defineComponent, ref, unref, watch, watchEffect } from 'vue'\nimport { useDebounceFn } from '@vueuse/core'\nimport { Empty, Input, Pagination, Popover } from 'ant-design-vue'\nimport { useCopyToClipboard } from '@tav-ui/hooks/web/useCopyToClipboard'\nimport { usePagination } from '@tav-ui/hooks/web/usePagination'\nimport ScrollContainer from '@tav-ui/components/container-scroll'\nimport Icon from '@tav-ui/components/icon'\nimport SvgIcon from '@tav-ui/components/icon-svg'\nimport { useMessage } from '@tav-ui/hooks/web/useMessage'\nimport { tavI18n } from '@tav-ui/locales'\nimport iconsData from '../data/icons.data'\nimport { iconPickerProps } from './types'\nimport type { ChangeEvent } from './types'\n\nconst AInput = Input\nconst APopover = Popover\nconst APagination = Pagination\nconst AEmpty = Empty\n\nconst { createMessage } = useMessage()\n\nexport default defineComponent({\n name: 'TaIconPicker',\n components: { AInput, APopover, APagination, AEmpty, ScrollContainer, SvgIcon, Icon },\n props: iconPickerProps,\n emits: ['change', 'update:value'],\n setup(props, { emit }) {\n function getIcons() {\n const data = iconsData as any\n const prefix: string = data?.prefix ?? ''\n let result: string[] = []\n if (prefix) result = (data?.icons ?? []).map((item) => `${prefix}:${item}`)\n else if (Array.isArray(iconsData)) result = iconsData as string[]\n\n return result\n }\n\n const isSvgMode = props.mode === 'svg'\n const icons = getIcons()\n\n const currentSelect = ref('')\n const visible = ref(false)\n const currentList = ref(icons)\n\n const prefixCls = 'ta-icon-picker'\n\n const debounceHandleSearchChange = useDebounceFn(handleSearchChange, 100)\n const { clipboardRef, isSuccessRef } = useCopyToClipboard(props.value)\n\n const { getPaginationList, getTotal, setCurrentPage } = usePagination(\n currentList,\n props.pageSize\n )\n\n watchEffect(() => {\n currentSelect.value = props.value\n })\n\n watch(\n () => currentSelect.value,\n (v) => {\n emit('update:value', v)\n return emit('change', v)\n }\n )\n\n function handlePageChange(page: number) {\n setCurrentPage(page)\n }\n\n function handleClick(icon: string) {\n currentSelect.value = icon\n if (props.copy) {\n clipboardRef.value = icon\n if (unref(isSuccessRef)) createMessage.success(tavI18n('Tav.icon.2'))\n }\n }\n\n function handleSearchChange(e: ChangeEvent) {\n const value = e.target.value\n if (!value) {\n setCurrentPage(1)\n currentList.value = icons\n return\n }\n currentList.value = icons.filter((item) => item.includes(value))\n }\n return {\n isSvgMode,\n tavI18n,\n icons,\n currentSelect,\n visible,\n currentList,\n prefixCls,\n debounceHandleSearchChange,\n getPaginationList,\n handleClick,\n getTotal,\n handlePageChange,\n }\n },\n})\n</script>\n<template>\n <AInput\n v-model:value=\"currentSelect\"\n disabled\n :style=\"{ width }\"\n :placeholder=\"tavI18n('Tav.icon.1')\"\n :class=\"prefixCls\"\n >\n <template #addonAfter>\n <a-popover\n v-model=\"visible\"\n placement=\"bottomLeft\"\n trigger=\"click\"\n :overlay-class-name=\"`${prefixCls}-popover`\"\n >\n <template #title>\n <div class=\"flex justify-between\">\n <AInput\n :placeholder=\"tavI18n('Tav.common.queryText')\"\n allow-clear\n @change=\"debounceHandleSearchChange\"\n />\n </div>\n </template>\n\n <template #content>\n <div v-if=\"getPaginationList.length\">\n <ScrollContainer class=\"border border-solid border-t-0\">\n <ul class=\"flex flex-wrap px-2\">\n <li\n v-for=\"icon in getPaginationList\"\n :key=\"icon\"\n :class=\"currentSelect === icon ? 'border border-primary' : ''\"\n class=\"p-2 w-1/8 cursor-pointer mr-1 mt-1 flex justify-center items-center border border-solid hover:border-primary\"\n :title=\"icon\"\n @click=\"handleClick(icon)\"\n >\n <!-- <Icon :icon=\"icon\" :prefix=\"prefix\" /> -->\n <SvgIcon v-if=\"isSvgMode\" :name=\"icon\" />\n <Icon v-else :icon=\"icon\" />\n </li>\n </ul>\n </ScrollContainer>\n <div v-if=\"getTotal >= pageSize\" class=\"flex py-2 items-center justify-center\">\n <a-pagination\n show-less-items\n size=\"small\"\n :page-size=\"pageSize\"\n :total=\"getTotal\"\n @change=\"handlePageChange\"\n />\n </div>\n </div>\n <template v-else>\n <div class=\"p-5\">\n <a-empty />\n </div>\n </template>\n </template>\n\n <span v-if=\"isSvgMode && currentSelect\" class=\"cursor-pointer px-2 py-1 flex items-center\">\n <SvgIcon :name=\"currentSelect\" />\n </span>\n <Icon v-else :icon=\"currentSelect || 'ion:apps-outline'\" class=\"cursor-pointer px-2 py-1\" />\n </a-popover>\n </template>\n </AInput>\n</template>\n"],"names":["ScrollContainer","SvgIcon","Icon","_resolveComponent","_withCtx","_createVNode","_createElementVNode","_openBlock","_createElementBlock","_normalizeClass","_createBlock","_createCommentVNode"],"mappings":"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"}