@atooyu/uxto-ui 1.1.21 → 1.1.22

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/u-button/u-button.vue","../src/components/u-input/u-input.vue","../src/components/u-cell/u-cell.vue","../src/components/u-cell-group/u-cell-group.vue","../src/components/u-modal/u-modal.vue","../src/components/u-icon/icons/arrow-down.svg","../src/components/u-icon/icons/arrow-left.svg","../src/components/u-icon/icons/arrow-right.svg","../src/components/u-icon/icons/arrow-up.svg","../src/components/u-icon/icons/check.svg","../src/components/u-icon/icons/check-circle.svg","../src/components/u-icon/icons/chevron-left.svg","../src/components/u-icon/icons/chevron-right.svg","../src/components/u-icon/icons/clear.svg","../src/components/u-icon/icons/clear-o.svg","../src/components/u-icon/icons/close.svg","../src/components/u-icon/icons/code.svg","../src/components/u-icon/icons/copy.svg","../src/components/u-icon/icons/delete.svg","../src/components/u-icon/icons/download.svg","../src/components/u-icon/icons/edit.svg","../src/components/u-icon/icons/email.svg","../src/components/u-icon/icons/error.svg","../src/components/u-icon/icons/error-o.svg","../src/components/u-icon/icons/expand-less.svg","../src/components/u-icon/icons/expand-more.svg","../src/components/u-icon/icons/eye.svg","../src/components/u-icon/icons/eye-off.svg","../src/components/u-icon/icons/flag.svg","../src/components/u-icon/icons/flag-o.svg","../src/components/u-icon/icons/fullscreen.svg","../src/components/u-icon/icons/exit-fullscreen.svg","../src/components/u-icon/icons/grid.svg","../src/components/u-icon/icons/heart.svg","../src/components/u-icon/icons/heart-o.svg","../src/components/u-icon/icons/info.svg","../src/components/u-icon/icons/info-o.svg","../src/components/u-icon/icons/keyboard-arrow-down.svg","../src/components/u-icon/icons/keyboard-arrow-left.svg","../src/components/u-icon/icons/keyboard-arrow-right.svg","../src/components/u-icon/icons/keyboard-arrow-up.svg","../src/components/u-icon/icons/like.svg","../src/components/u-icon/icons/like-o.svg","../src/components/u-icon/icons/link.svg","../src/components/u-icon/icons/list.svg","../src/components/u-icon/icons/lock.svg","../src/components/u-icon/icons/unlock.svg","../src/components/u-icon/icons/loading.svg","../src/components/u-icon/icons/menu.svg","../src/components/u-icon/icons/menu-o.svg","../src/components/u-icon/icons/message.svg","../src/components/u-icon/icons/minus.svg","../src/components/u-icon/icons/notification.svg","../src/components/u-icon/icons/bell.svg","../src/components/u-icon/icons/phone.svg","../src/components/u-icon/icons/plus.svg","../src/components/u-icon/icons/question.svg","../src/components/u-icon/icons/refresh.svg","../src/components/u-icon/icons/refresh-o.svg","../src/components/u-icon/icons/reload.svg","../src/components/u-icon/icons/redo.svg","../src/components/u-icon/icons/undo.svg","../src/components/u-icon/icons/search.svg","../src/components/u-icon/icons/search-o.svg","../src/components/u-icon/icons/setting.svg","../src/components/u-icon/icons/share.svg","../src/components/u-icon/icons/smile.svg","../src/components/u-icon/icons/smile-o.svg","../src/components/u-icon/icons/star.svg","../src/components/u-icon/icons/star-o.svg","../src/components/u-icon/icons/success.svg","../src/components/u-icon/icons/success-o.svg","../src/components/u-icon/icons/tick.svg","../src/components/u-icon/icons/upload.svg","../src/components/u-icon/icons/user.svg","../src/components/u-icon/icons/account.svg","../src/components/u-icon/icons/group.svg","../src/components/u-icon/icons/home.svg","../src/components/u-icon/icons/home-fill.svg","../src/components/u-icon/icons/account-fill.svg","../src/components/u-icon/icons/user-fill.svg","../src/components/u-icon/icons/warning.svg","../src/components/u-icon/icons/warning-o.svg","../src/components/u-icon/icons/zoom-in.svg","../src/components/u-icon/icons/zoom-out.svg","../src/components/u-icon/icons/sync.svg","../src/components/u-icon/icons/clock.svg","../src/components/u-icon/icons/bookmark.svg","../src/components/u-icon/icons/bookmark-o.svg","../src/components/u-icon/icons/chat.svg","../src/components/u-icon/icons/clipboard.svg","../src/components/u-icon/icons/location.svg","../src/components/u-icon/icons/scan.svg","../src/components/u-icon/icons/qrcode.svg","../src/components/u-icon/icons/moon.svg","../src/components/u-icon/index.ts","../src/components/u-icon/u-icon.vue","../src/components/u-loading/u-loading.vue","../src/components/u-tag/u-tag.vue","../src/components/u-switch/u-switch.vue","../src/components/u-image/u-image.vue","../src/components/u-divider/u-divider.vue","../src/components/u-notice-bar/u-notice-bar.vue","../src/components/u-layout/u-layout.vue","../src/components/u-badge/u-badge.vue","../src/components/u-loading-page/u-loading-page.vue","../src/components/u-parse/u-parse.vue","../src/components/u-keyboard/u-keyboard.vue","../src/components/u-picker/u-picker.vue","../src/components/u-datetime-picker/u-datetime-picker.vue","../src/components/u-rate/u-rate.vue","../src/components/u-grid/u-grid.vue","../src/components/u-grid-item/u-grid-item.vue","../src/components/u-swiper/u-swiper.vue","../src/components/u-swiper-item/u-swiper-item.vue","../src/components/u-search/u-search.vue","../src/components/u-number-box/u-number-box.vue","../src/components/u-upload/u-upload.vue","../src/components/u-textarea/u-textarea.vue","../src/components/u-slider/u-slider.vue","../src/components/u-list/u-list.vue","../src/components/u-list-item/u-list-item.vue","../src/components/u-line-progress/u-line-progress.vue","../src/components/u-count-down/u-count-down.vue","../src/components/u-tooltip/u-tooltip.vue","../src/components/u-avatar/u-avatar.vue","../src/components/u-empty/u-empty.vue","../src/components/u-checkbox/u-checkbox.vue","../src/components/u-checkbox-group/u-checkbox-group.vue","../src/components/u-radio/u-radio.vue","../src/components/u-radio-group/u-radio-group.vue","../src/components/u-toast/u-toast.vue","../src/components/u-popup/u-popup.vue","../src/components/u-code-input/u-code-input.vue","../src/components/u-skeleton/u-skeleton.vue","../src/components/u-transition/u-transition.vue","../src/components/u-link/u-link.vue","../src/components/u-read-more/u-read-more.vue","../src/components/u-tabbar/u-tabbar.vue"],"sourcesContent":["<template>\n <button\n class=\"u-button\"\n :class=\"[\n `u-button--${type}`,\n `u-button--${size}`,\n {\n 'u-button--plain': plain,\n 'u-button--round': round,\n 'u-button--square': square,\n 'u-button--disabled': disabled,\n 'u-button--loading': loading,\n 'u-button--block': block\n }\n ]\"\n :style=\"buttonStyle\"\n :disabled=\"disabled || loading\"\n :hover-class=\"disabled || loading ? '' : 'u-button--active'\"\n @click=\"handleClick\"\n >\n <view v-if=\"loading\" class=\"u-button__loading\">\n <view class=\"u-button__loading-icon\"></view>\n </view>\n <view v-else class=\"u-button__content\">\n <text v-if=\"icon\" class=\"u-button__icon\">{{ icon }}</text>\n <text class=\"u-button__text\"><slot /></text>\n </view>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'default'\ntype ButtonSize = 'large' | 'normal' | 'small' | 'mini'\n\ninterface Props {\n type?: ButtonType\n size?: ButtonSize\n plain?: boolean\n round?: boolean\n square?: boolean\n disabled?: boolean\n loading?: boolean\n block?: boolean\n icon?: string\n color?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n type: 'default',\n size: 'normal',\n plain: false,\n round: false,\n square: false,\n disabled: false,\n loading: false,\n block: false\n})\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst buttonStyle = computed(() => {\n if (props.color) {\n return {\n backgroundColor: props.plain ? 'transparent' : props.color,\n borderColor: props.color,\n color: props.plain ? props.color : '#fff'\n }\n }\n return {}\n})\n\nconst handleClick = (event: MouseEvent) => {\n if (!props.disabled && !props.loading) {\n emit('click', event)\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n box-sizing: border-box;\n height: $--button-height;\n padding: 0 $--spacing-lg;\n margin: 0;\n font-size: $--font-size-md;\n line-height: 1.2;\n text-align: center;\n border-radius: $--border-radius-md;\n border: 1px solid transparent;\n transition: all $--transition-duration;\n -webkit-tap-highlight-color: transparent;\n\n &::after {\n border: none;\n }\n\n &--default {\n color: $--text-color;\n background-color: $--bg-color-2;\n border-color: $--border-color;\n }\n\n &--primary {\n color: $--text-color-white;\n background-color: $--color-primary;\n border-color: $--color-primary;\n }\n\n &--success {\n color: $--text-color-white;\n background-color: $--color-success;\n border-color: $--color-success;\n }\n\n &--warning {\n color: $--text-color-white;\n background-color: $--color-warning;\n border-color: $--color-warning;\n }\n\n &--danger {\n color: $--text-color-white;\n background-color: $--color-danger;\n border-color: $--color-danger;\n }\n\n &--large {\n height: $--button-height-lg;\n font-size: $--font-size-lg;\n }\n\n &--small {\n height: $--button-height-sm;\n padding: 0 $--spacing-md;\n font-size: $--font-size-sm;\n }\n\n &--mini {\n height: 24px;\n padding: 0 $--spacing-sm;\n font-size: $--font-size-xs;\n }\n\n &--plain {\n background-color: transparent;\n\n &.u-button--primary {\n color: $--color-primary;\n }\n\n &.u-button--success {\n color: $--color-success;\n }\n\n &.u-button--warning {\n color: $--color-warning;\n }\n\n &.u-button--danger {\n color: $--color-danger;\n }\n }\n\n &--round {\n border-radius: 999px;\n }\n\n &--square {\n border-radius: 0;\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &--loading {\n }\n\n &--block {\n display: flex;\n width: 100%;\n }\n\n &--active {\n opacity: 0.8;\n }\n\n &__content {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon {\n margin-right: $--spacing-xs;\n }\n\n &__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__loading-icon {\n width: 16px;\n height: 16px;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n animation: u-button-loading 0.8s linear infinite;\n }\n}\n\n@keyframes u-button-loading {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n","<template>\n <view\n class=\"u-input\"\n :class=\"{\n 'u-input--disabled': disabled,\n 'u-input--error': error,\n 'u-input--focus': isFocus\n }\"\n >\n <view v-if=\"$slots.prefix || prefixIcon\" class=\"u-input__prefix\">\n <slot name=\"prefix\">\n <text class=\"u-input__icon\">{{ prefixIcon }}</text>\n </slot>\n </view>\n\n <view class=\"u-input__body\">\n <input\n class=\"u-input__control\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :placeholder-style=\"placeholderStyle\"\n :placeholder-class=\"'u-input__placeholder'\"\n :disabled=\"disabled\"\n :maxlength=\"maxlength\"\n :focus=\"focus\"\n :confirm-type=\"confirmType\"\n :adjust-position=\"adjustPosition\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @confirm=\"handleConfirm\"\n />\n </view>\n\n <view v-if=\"clearable && modelValue\" class=\"u-input__clear\" @click=\"handleClear\">\n <text class=\"u-input__clear-icon\">×</text>\n </view>\n\n <view v-if=\"$slots.suffix || suffixIcon\" class=\"u-input__suffix\">\n <slot name=\"suffix\">\n <text class=\"u-input__icon\">{{ suffixIcon }}</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\ntype InputType = 'text' | 'number' | 'idcard' | 'digit' | 'password'\ntype ConfirmType = 'send' | 'search' | 'next' | 'go' | 'done'\n\ninterface Props {\n modelValue?: string | number\n type?: InputType\n placeholder?: string\n placeholderStyle?: string\n disabled?: boolean\n maxlength?: number\n clearable?: boolean\n focus?: boolean\n error?: boolean\n confirmType?: ConfirmType\n adjustPosition?: boolean\n prefixIcon?: string\n suffixIcon?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n type: 'text',\n placeholder: '请输入',\n disabled: false,\n maxlength: 140,\n clearable: false,\n focus: false,\n error: false,\n confirmType: 'done',\n adjustPosition: true\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n input: [value: string]\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n confirm: [value: string]\n clear: []\n}>()\n\nconst isFocus = ref(false)\n\nconst handleInput = (event: any) => {\n const value = event.detail.value\n emit('update:modelValue', value)\n emit('input', value)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n isFocus.value = true\n emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n isFocus.value = false\n emit('blur', event)\n}\n\nconst handleConfirm = (event: any) => {\n emit('confirm', event.detail.value)\n}\n\nconst handleClear = () => {\n emit('update:modelValue', '')\n emit('input', '')\n emit('clear')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-input {\n display: flex;\n align-items: center;\n width: 100%;\n height: $--input-height;\n padding: 0 $--spacing-md;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-md;\n border: 1px solid $--border-color;\n transition: all $--transition-duration;\n\n &--focus {\n border-color: $--color-primary;\n }\n\n &--error {\n border-color: $--color-danger;\n }\n\n &--disabled {\n background-color: $--bg-color;\n }\n\n &__body {\n flex: 1;\n display: flex;\n align-items: center;\n }\n\n &__control {\n flex: 1;\n height: 100%;\n font-size: $--font-size-md;\n color: $--text-color;\n background: transparent;\n }\n\n &__placeholder {\n color: $--text-color-3;\n }\n\n &__prefix,\n &__suffix {\n display: flex;\n align-items: center;\n }\n\n &__prefix {\n margin-right: $--spacing-sm;\n }\n\n &__suffix {\n margin-left: $--spacing-sm;\n }\n\n &__icon {\n color: $--text-color-2;\n font-size: $--font-size-md;\n }\n\n &__clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: $--spacing-sm;\n background-color: $--text-color-3;\n border-radius: 50%;\n }\n\n &__clear-icon {\n color: $--bg-color-2;\n font-size: 12px;\n line-height: 1;\n }\n}\n</style>\n","<template>\n <view\n class=\"u-cell\"\n :class=\"{\n 'u-cell--clickable': isClickable,\n 'u-cell--disabled': disabled\n }\"\n :hover-class=\"isClickable && !disabled ? 'u-cell--active' : ''\"\n @click=\"handleClick\"\n >\n <view v-if=\"$slots.icon || icon\" class=\"u-cell__icon\">\n <slot name=\"icon\">\n <image v-if=\"icon\" class=\"u-cell__icon-img\" :src=\"icon\" mode=\"aspectFit\" />\n </slot>\n </view>\n\n <view class=\"u-cell__content\">\n <view class=\"u-cell__title\">\n <text class=\"u-cell__title-text\">{{ title }}</text>\n <text v-if=\"label\" class=\"u-cell__label\">{{ label }}</text>\n </view>\n\n <view class=\"u-cell__value\">\n <slot name=\"value\">\n <text class=\"u-cell__value-text\">{{ value }}</text>\n </slot>\n </view>\n </view>\n\n <view v-if=\"isLink\" class=\"u-cell__arrow\">\n <text class=\"u-cell__arrow-icon\">›</text>\n </view>\n\n <slot name=\"right-icon\" />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n title?: string\n value?: string | number\n label?: string\n icon?: string\n isLink?: boolean\n to?: string\n url?: string\n disabled?: boolean\n clickable?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n isLink: false,\n disabled: false,\n clickable: false\n})\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst isClickable = computed(() => {\n return props.clickable || props.isLink || props.to || props.url\n})\n\nconst handleClick = (event: MouseEvent) => {\n if (props.disabled) return\n\n emit('click', event)\n\n if (props.url) {\n uni.navigateTo({ url: props.url })\n } else if (props.to) {\n uni.navigateTo({ url: props.to })\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-cell {\n display: flex;\n align-items: center;\n min-height: $--cell-height;\n padding: $--spacing-md $--spacing-lg;\n background-color: $--bg-color-2;\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n left: $--spacing-lg;\n right: 0;\n bottom: 0;\n height: 1px;\n background-color: $--border-color;\n transform: scaleY(0.5);\n }\n\n &:last-child::after {\n display: none;\n }\n\n &--clickable {\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &--active {\n background-color: $--bg-color;\n }\n\n &__icon {\n margin-right: $--spacing-md;\n\n &-img {\n width: 20px;\n height: 20px;\n }\n }\n\n &__content {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n overflow: hidden;\n }\n\n &__title {\n flex: 1;\n overflow: hidden;\n\n &-text {\n font-size: $--font-size-md;\n color: $--text-color;\n line-height: 24px;\n }\n }\n\n &__label {\n display: block;\n margin-top: 2px;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n line-height: 18px;\n }\n\n &__value {\n overflow: hidden;\n\n &-text {\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n }\n\n &__arrow {\n margin-left: $--spacing-sm;\n color: $--text-color-3;\n\n &-icon {\n font-size: 16px;\n }\n }\n}\n</style>\n","<template>\n <view class=\"u-cell-group\">\n <view v-if=\"title || $slots.title\" class=\"u-cell-group__title\">\n <slot name=\"title\">{{ title }}</slot>\n </view>\n <view class=\"u-cell-group__body\">\n <slot />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n title?: string\n}\n\nwithDefaults(defineProps<Props>(), {\n title: ''\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-cell-group {\n background-color: $--bg-color-2;\n\n &__title {\n padding: $--spacing-md $--spacing-lg;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n background-color: $--bg-color;\n }\n\n &__body {\n position: relative;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-modal\" @click=\"handleMaskClick\">\n <view class=\"u-modal__container\" @click.stop>\n <view v-if=\"title\" class=\"u-modal__header\">\n <text class=\"u-modal__title\">{{ title }}</text>\n </view>\n\n <view class=\"u-modal__body\">\n <slot>\n <text class=\"u-modal__message\">{{ message }}</text>\n </slot>\n </view>\n\n <view class=\"u-modal__footer\">\n <view\n v-if=\"showCancel\"\n class=\"u-modal__button u-modal__button--cancel\"\n @click=\"handleCancel\"\n >\n <text>{{ cancelText }}</text>\n </view>\n <view\n class=\"u-modal__button u-modal__button--confirm\"\n @click=\"handleConfirm\"\n >\n <text>{{ confirmText }}</text>\n </view>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n visible?: boolean\n title?: string\n message?: string\n showCancel?: boolean\n cancelText?: string\n confirmText?: string\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n title: '',\n message: '',\n showCancel: true,\n cancelText: '取消',\n confirmText: '确定',\n closeOnClickOverlay: false\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n cancel: []\n confirm: []\n}>()\n\nconst handleMaskClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n }\n}\n\nconst handleCancel = () => {\n emit('update:visible', false)\n emit('cancel')\n}\n\nconst handleConfirm = () => {\n emit('update:visible', false)\n emit('confirm')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n\n &__container {\n width: 280px;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-lg;\n overflow: hidden;\n }\n\n &__header {\n padding: $--spacing-lg $--spacing-lg $--spacing-sm;\n text-align: center;\n }\n\n &__title {\n font-size: $--font-size-lg;\n font-weight: 600;\n color: $--text-color;\n }\n\n &__body {\n padding: $--spacing-md $--spacing-lg $--spacing-lg;\n text-align: center;\n max-height: 300px;\n overflow-y: auto;\n }\n\n &__message {\n font-size: $--font-size-md;\n color: $--text-color-2;\n line-height: 1.5;\n }\n\n &__footer {\n display: flex;\n border-top: 1px solid $--border-color;\n }\n\n &__button {\n flex: 1;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: $--font-size-md;\n transition: background-color $--transition-duration;\n\n &:active {\n background-color: $--bg-color;\n }\n\n &--cancel {\n color: $--text-color-2;\n border-right: 1px solid $--border-color;\n }\n\n &--confirm {\n color: $--color-primary;\n font-weight: 500;\n }\n }\n}\n</style>\n","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%208.59L12%2013.17l4.59-4.58L18%2010l-6%206-6-6%201.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%2011H7.83l5.59-5.59L12%204l-8%208%208%208%201.41-1.41L7.83%2013H20v-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%204l-1.41%201.41L16.17%2011H4v2h12.17l-5.58%205.59L12%2020l8-8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%2015.41L12%2010.83l4.59%204.58L18%2014l-6-6-6%206z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9%2016.17L4.83%2012l-1.42%201.41L9%2019%2021%207l-1.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm-2%2015l-5-5%201.41-1.41L10%2014.17l7.59-7.59L19%208l-9%209z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.41%207.41L14%206l-6%206%206%206%201.41-1.41L10.83%2012z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M10%206L8.59%207.41%2013.17%2012l-4.58%204.59L10%2018l6-6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%206.41L17.59%205%2012%2010.59%206.41%205%205%206.41%2010.59%2012%205%2017.59%206.41%2019%2012%2013.41%2017.59%2019%2019%2017.59%2013.41%2012z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M21%203H3c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h18c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm0%2016H3V5h18v14zM9.41%2015.95L12%2013.36l2.59%202.59L16%2014.54l-2.59-2.59L16%209.36l-1.41-1.41L12%2010.54%209.41%207.95%208%209.36l2.59%202.59L8%2014.54z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%206.41L17.59%205%2012%2010.59%206.41%205%205%206.41%2010.59%2012%205%2017.59%206.41%2019%2012%2013.41%2017.59%2019%2019%2017.59%2013.41%2012z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9.4%2016.6L4.8%2012l4.6-4.6L8%206l-6%206%206%206%201.4-1.4zm5.2%200l4.6-4.6-4.6-4.6L16%206l6%206-6%206-1.4-1.4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16%201H4c-1.1%200-2%20.9-2%202v14h2V3h12V1zm3%204H8c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h11c1.1%200%202-.9%202-2V7c0-1.1-.9-2-2-2zm0%2016H8V7h11v14z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M6%2019c0%201.1.9%202%202%202h8c1.1%200%202-.9%202-2V7H6v12zM19%204h-3.5l-1-1h-5l-1%201H5v2h14V4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%209h-4V3H9v6H5l7%207%207-7zM5%2018v2h14v-2H5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2017.25V21h3.75L17.81%209.94l-3.75-3.75L3%2017.25zM20.71%207.04c.39-.39.39-1.02%200-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41%200l-1.83%201.83%203.75%203.75%201.83-1.83z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%204H4c-1.1%200-1.99.9-1.99%202L2%2018c0%201.1.9%202%202%202h16c1.1%200%202-.9%202-2V6c0-1.1-.9-2-2-2zm0%204l-8%205-8-5V6l8%205%208-5v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.47%202%202%206.47%202%2012s4.47%2010%2010%2010%2010-4.47%2010-10S17.53%202%2012%202zm5%2013.59L15.59%2017%2012%2013.41%208.41%2017%207%2015.59%2010.59%2012%207%208.41%208.41%207%2012%2010.59%2015.59%207%2017%208.41%2013.41%2012%2017%2015.59z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.73%203H8.27L3%208.27v7.46L8.27%2021h7.46L21%2015.73V8.27L15.73%203zM19%2014.9L14.9%2019H9.1L5%2014.9V9.1L9.1%205h5.8L19%209.1v5.8zm-4.17-7.14L12%2010.59%209.17%207.76%207.76%209.17%2010.59%2012l-2.83%202.83%201.41%201.41L12%2013.41l2.83%202.83%201.41-1.41L13.41%2012l2.83-2.83z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7%2014l5-5%205%205z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7%2010l5%205%205-5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%204.5C7%204.5%202.73%207.61%201%2012c1.73%204.39%206%207.5%2011%207.5s9.27-3.11%2011-7.5c-1.73-4.39-6-7.5-11-7.5zM12%2017c-2.76%200-5-2.24-5-5s2.24-5%205-5%205%202.24%205%205-2.24%205-5%205zm0-8c-1.66%200-3%201.34-3%203s1.34%203%203%203%203-1.34%203-3-1.34-3-3-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%207c2.76%200%205%202.24%205%205%200%20.65-.13%201.26-.36%201.83l2.92%202.92c1.51-1.26%202.7-2.89%203.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4%200-2.74.25-3.98.7l2.16%202.16C10.74%207.13%2011.35%207%2012%207zM2%204.27l2.28%202.28.46.46C3.08%208.3%201.78%2010.02%201%2012c1.73%204.39%206%207.5%2011%207.5%201.55%200%203.03-.3%204.38-.84l.42.42L19.73%2022%2021%2020.73%203.27%203%202%204.27zM7.53%209.8l1.55%201.55c-.05.21-.08.43-.08.65%200%201.66%201.34%203%203%203%20.22%200%20.44-.03.65-.08l1.55%201.55c-.67.33-1.41.53-2.2.53-2.76%200-5-2.24-5-5%200-.79.2-1.53.53-2.2zm4.31-.78l3.15%203.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M14.4%206L14%204H5v17h2v-7h5.6l.4%202h7V6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M14.4%206L14%204H5v17h2v-7h5.6l.4%202h7V6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7%2014H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12%207h-3v2h5v-5h-2v3zM14%205v2h3v3h2V5h-5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M5%2016h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6%2011h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M4%208h4V4H4v4zm6%2012h4v-4h-4v4zm-6%200h4v-4H4v4zm0-6h4v-4H4v4zm6%200h4v-4h-4v4zm6-10v4h4V4h-4zm-6%204h4V4h-4v4zm6%206h4v-4h-4v4zm0%206h4v-4h-4v4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2021.35l-1.45-1.32C5.4%2015.36%202%2012.28%202%208.5%202%205.42%204.42%203%207.5%203c1.74%200%203.41.81%204.5%202.09C13.09%203.81%2014.76%203%2016.5%203%2019.58%203%2022%205.42%2022%208.5c0%203.78-3.4%206.86-8.55%2011.54L12%2021.35z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16.5%203c-1.74%200-3.41.81-4.5%202.09C10.91%203.81%209.24%203%207.5%203%204.42%203%202%205.42%202%208.5c0%203.78%203.4%206.86%208.55%2011.54L12%2021.35l1.45-1.32C18.6%2015.36%2022%2012.28%2022%208.5%2022%205.42%2019.58%203%2016.5%203zm-4.4%2015.55l-.1.1-.1-.1C7.14%2014.24%204%2011.39%204%208.5%204%206.5%205.5%205%207.5%205c1.54%200%203.04.99%203.57%202.36h1.87C13.46%205.99%2014.96%205%2016.5%205c2%200%203.5%201.5%203.5%203.5%200%202.89-3.14%205.74-7.9%2010.05z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%203H5c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h14c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm-5%2014H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2015h-2v-6h2v6zm0-8h-2V7h2v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%208.59L12%2013.17l4.59-4.58L18%2010l-6%206-6-6%201.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.41%2016.59L10.83%2012l4.58-4.59L14%206l-6%206%206%206%201.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%2015.41L12%2010.83l4.59%204.58L18%2014l-6-6-6%206z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M1%2021h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17%201%207.59%207.59C7.22%207.95%207%208.45%207%209v10c0%201.1.9%202%202%202h9c.83%200%201.54-.5%201.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16.5%203c-1.74%200-3.41.81-4.5%202.09C10.91%203.81%209.24%203%207.5%203%204.42%203%202%205.42%202%208.5c0%203.78%203.4%206.86%208.55%2011.54L12%2021.35l1.45-1.32C18.6%2015.36%2022%2012.28%2022%208.5%2022%205.42%2019.58%203%2016.5%203zm-4.4%2015.55l-.1.1-.1-.1C7.14%2014.24%204%2011.39%204%208.5%204%206.5%205.5%205%207.5%205c1.54%200%203.04.99%203.57%202.36h1.87C13.46%205.99%2014.96%205%2016.5%205c2%200%203.5%201.5%203.5%203.5%200%202.89-3.14%205.74-7.9%2010.05z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%2019H5V5h7V3H5c-1.11%200-2%20.9-2%202v14c0%201.1.89%202%202%202h14c1.1%200%202-.9%202-2v-7h-2v7zM14%203v2h3.59l-9.83%209.83%201.41%201.41L19%206.41V10h2V3h-7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2013h2v-2H3v2zm0%204h2v-2H3v2zm0-8h2V7H3v2zm4%204h14v-2H7v2zm0%204h14v-2H7v2zM7%207v2h14V7H7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M18%208h-1V6c0-2.76-2.24-5-5-5S7%203.24%207%206v2H6c-1.1%200-2%20.9-2%202v10c0%201.1.9%202%202%202h12c1.1%200%202-.9%202-2V10c0-1.1-.9-2-2-2zm-6%209c-1.1%200-2-.9-2-2s.9-2%202-2%202%20.9%202%202-.9%202-2%202zm3.1-9H8.9V6c0-1.71%201.39-3.1%203.1-3.1%201.71%200%203.1%201.39%203.1%203.1v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2017c1.1%200%202-.9%202-2s-.9-2-2-2-2%20.9-2%202%20.9%202%202%202zm6-9h-1V6c0-2.76-2.24-5-5-5S7%203.24%207%206h1.9c0-1.71%201.39-3.1%203.1-3.1%201.71%200%203.1%201.39%203.1%203.1v2H6c-1.1%200-2%20.9-2%202v10c0%201.1.9%202%202%202h12c1.1%200%202-.9%202-2V10c0-1.1-.9-2-2-2zm0%2012H6V10h12v10z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9.4%2010.5l4.77-8.26C13.47%202.09%2012.75%202%2012%202c-2.4%200-4.6.85-6.32%202.25l3.66%206.35.06-.1zM21.54%209c-.92-2.92-3.15-5.26-5.99-6.34L11.88%209h9.66zm.26%201h-7.49l.29.5%204.76%208.25C21%2016.97%2022%2014.61%2022%2012c0-.69-.07-1.35-.2-2zM8.54%2012l-3.9-6.75C3.01%207.03%202%209.39%202%2012c0%20.69.07%201.35.2%202h7.49l-1.15-2zm-6.08%203c.92%202.92%203.15%205.26%205.99%206.34L12.12%2015H2.46zm11.27%200l-3.9%206.76c.7.15%201.42.24%202.17.24%202.4%200%204.6-.85%206.32-2.25l-3.66-6.35-.93%201.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2018h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2018h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%202H4c-1.1%200-1.99.9-1.99%202L2%2022l4-4h14c1.1%200%202-.9%202-2V4c0-1.1-.9-2-2-2zM6%209h12v2H6V9zm8%205H6v-2h8v2zm4-6H6V6h12v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%2013H5v-2h14v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M10.01%2021.01c0%201.1.89%201.99%201.99%201.99s1.99-.89%201.99-1.99h-3.98zM12%202c-1.1%200-2%20.9-2%202v1.01c-2.88.44-5%202.95-5%205.99V17c0%201.1.9%202%202%202h10c1.1%200%202-.9%202-2v-6c0-3.04-2.12-5.55-5-5.99V4c0-1.1-.9-2-2-2zm0%204c2.21%200%204%201.79%204%204v6H8v-6c0-2.21%201.79-4%204-4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2022c1.1%200%202-.9%202-2h-4c0%201.1.89%202%202%202zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5%201.5v.68C7.63%205.36%206%207.92%206%2011v5l-2%202v1h16v-1l-2-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M6.62%2010.79c1.44%202.83%203.76%205.14%206.59%206.59l2.2-2.2c.27-.27.67-.36%201.02-.24%201.12.37%202.33.57%203.57.57.55%200%201%20.45%201%201V20c0%20.55-.45%201-1%201-9.39%200-17-7.61-17-17%200-.55.45-1%201-1h3.5c.55%200%201%20.45%201%201%200%201.25.2%202.45.57%203.57.11.35.03.74-.25%201.02l-2.2%202.2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%2013h-6v6h-2v-6H5v-2h6V5h2v6h6v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2017h-2v-2h2v2zm2.07-7.75l-.9.92C13.45%2012.9%2013%2013.5%2013%2015h-2v-.5c0-1.1.45-2.1%201.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41%200-1.1-.9-2-2-2s-2%20.9-2%202H8c0-2.21%201.79-4%204-4s4%201.79%204%204c0%20.88-.36%201.68-.93%202.25z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17.65%206.35C16.2%204.9%2014.21%204%2012%204c-4.42%200-7.99%203.58-7.99%208s3.57%208%207.99%208c3.73%200%206.84-2.55%207.73-6h-2.08c-.82%202.33-3.04%204-5.65%204-3.31%200-6-2.69-6-6s2.69-6%206-6c1.66%200%203.14.69%204.22%201.78L13%2011h7V4l-2.35%202.35z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12.5%208c-4.65%200-8.58%203.03-9.96%207.22L2%2014h9v-2l3.6%203.6c-1.05%203.19-4.05%205.5-7.6%205.5-2.65%200-5.05-.99-6.9-2.6L2%2022h9v-2l-3.6-3.6c1.05%203.19%204.05%205.5%207.6%205.5%204.65%200%208.58-3.03%209.96-7.22l-2.36-.78C20.92%2010.97%2017.15%208%2012.5%208z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17.65%206.35A7.958%207.958%200%200012%204c-4.42%200-7.99%203.58-7.99%208s3.57%208%207.99%208c3.73%200%206.84-2.55%207.73-6h-2.08A5.99%205.99%200%200112%2018c-3.31%200-6-2.69-6-6s2.69-6%206-6c1.66%200%203.14.69%204.22%201.78L13%2011h7V4l-2.35%202.35z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M18.4%2010.6C16.55%208.99%2014.15%208%2011.5%208c-4.65%200-8.58%203.03-9.96%207.22L3.9%2016c1.05-3.19%204.05-5.5%207.6-5.5%201.95%200%203.73.72%205.12%201.88L13%2016h9V7l-3.6%203.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12.5%208c-2.65%200-5.05.99-6.9%202.6L2%207v9h9l-3.62-3.62c1.39-1.16%203.16-1.88%205.12-1.88%203.54%200%206.55%202.31%207.6%205.5l2.37-.78C21.08%2011.03%2017.15%208%2012.5%208z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19.14%2012.94c.04-.31.06-.63.06-.94%200-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24%200-.43.17-.47.41l-.36%202.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47%200-.59.22L2.74%208.87c-.12.21-.08.47.12.61l2.03%201.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03%201.58c-.18.14-.23.41-.12.61l1.92%203.32c.12.22.37.29.59.22l2.39-.96c.5.38%201.03.7%201.62.94l.36%202.54c.05.24.24.41.48.41h3.84c.24%200%20.44-.17.47-.41l.36-2.54c.59-.24%201.13-.56%201.62-.94l2.39.96c.22.08.47%200%20.59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12%2015.6c-1.98%200-3.6-1.62-3.6-3.6s1.62-3.6%203.6-3.6%203.6%201.62%203.6%203.6-1.62%203.6-3.6%203.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M18%2016.08c-.76%200-1.44.3-1.96.77L8.91%2012.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5%201.25.81%202.04.81%201.66%200%203-1.34%203-3s-1.34-3-3-3-3%201.34-3%203c0%20.24.04.47.09.7L8.04%209.81C7.5%209.31%206.79%209%206%209c-1.66%200-3%201.34-3%203s1.34%203%203%203c.79%200%201.5-.31%202.04-.81l7.12%204.16c-.05.21-.08.43-.08.65%200%201.61%201.31%202.92%202.92%202.92%201.61%200%202.92-1.31%202.92-2.92s-1.31-2.92-2.92-2.92z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M11.99%202C6.47%202%202%206.48%202%2012s4.47%2010%209.99%2010C17.52%2022%2022%2017.52%2022%2012S17.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208zm3.5-9c.83%200%201.5-.67%201.5-1.5S16.33%208%2015.5%208%2014%208.67%2014%209.5s.67%201.5%201.5%201.5zm-7%200c.83%200%201.5-.67%201.5-1.5S9.33%208%208.5%208%207%208.67%207%209.5%207.67%2011%208.5%2011zm3.5%206.5c2.33%200%204.31-1.46%205.11-3.5H6.89c.8%202.04%202.78%203.5%205.11%203.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M11.99%202C6.47%202%202%206.47%202%2012s4.47%2010%209.99%2010S22%2017.53%2022%2012%2017.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208zm3.5-9c.83%200%201.5-.67%201.5-1.5S16.33%208%2015.5%208%2014%208.67%2014%209.5s.67%201.5%201.5%201.5zm-7%200c.83%200%201.5-.67%201.5-1.5S9.33%208%208.5%208%207%208.67%207%209.5%207.67%2011%208.5%2011zm3.5%206.5c2.33%200%204.31-1.46%205.11-3.5H6.89c.8%202.04%202.78%203.5%205.11%203.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2017.27L18.18%2021l-1.64-7.03L22%209.24l-7.19-.61L12%202%209.19%208.63%202%209.24l5.46%204.73L5.82%2021z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M22%209.24l-7.19-.62L12%202%209.19%208.63%202%209.24l5.46%204.73L5.82%2021%2012%2017.27%2018.18%2021l-1.63-7.03L22%209.24zM12%2015.4l-3.76%202.27%201-4.28-3.32-2.88%204.38-.38L12%206.1l1.71%204.04%204.38.38-3.32%202.88%201%204.28L12%2015.4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm-2%2015l-5-5%201.41-1.41L10%2014.17l7.59-7.59L19%208l-9%209z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9%2016.2L4.8%2012l-1.4%201.4L9%2019%2021%207l-1.4-1.4L9%2016.2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9%2016.17L4.83%2012l-1.42%201.41L9%2019%2021%207l-1.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19.35%2010.04C18.67%206.59%2015.64%204%2012%204%209.11%204%206.6%205.64%205.35%208.04%202.34%208.36%200%2010.91%200%2014c0%203.31%202.69%206%206%206h13c2.76%200%205-2.24%205-5%200-2.64-2.05-4.78-4.65-4.96zM14%2013v4h-4v-4H7l5-5%205%205h-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2012c2.21%200%204-1.79%204-4s-1.79-4-4-4-4%201.79-4%204%201.79%204%204%204zm0%202c-2.67%200-8%201.34-8%204v2h16v-2c0-2.66-5.33-4-8-4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%203H5c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h14c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm-7%203c1.93%200%203.5%201.57%203.5%203.5S13.93%2013%2012%2013s-3.5-1.57-3.5-3.5S10.07%206%2012%206zm7%2013H5v-.23c0-.62.28-1.2.76-1.58C7.47%2015.82%209.64%2015%2012%2015s4.53.82%206.24%202.19c.48.38.76.97.76%201.58V19z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16%2011c1.66%200%202.99-1.34%202.99-3S17.66%205%2016%205c-1.66%200-3%201.34-3%203s1.34%203%203%203zm-8%200c1.66%200%202.99-1.34%202.99-3S9.66%205%208%205C6.34%205%205%206.34%205%208s1.34%203%203%203zm0%202c-2.33%200-7%201.17-7%203.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8%200c-.29%200-.62.02-.97.05%201.16.84%201.97%201.97%201.97%203.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M10%2020v-6h4v6h5v-8h3L12%203%202%2012h3v8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%203L4%209v12h6v-6h4v6h6V9l-8-6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm0%203c1.66%200%203%201.34%203%203s-1.34%203-3%203-3-1.34-3-3%201.34-3%203-3zm0%2014.2c-2.5%200-4.71-1.28-6-3.22.03-1.99%204-3.08%206-3.08%201.99%200%205.97%201.09%206%203.08-1.29%201.94-3.5%203.22-6%203.22z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm0%203c1.66%200%203%201.34%203%203s-1.34%203-3%203-3-1.34-3-3%201.34-3%203-3zm0%2014.2c-2.5%200-4.71-1.28-6-3.22.03-1.99%204-3.08%206-3.08%201.99%200%205.97%201.09%206%203.08-1.29%201.94-3.5%203.22-6%203.22z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2015h-2v-2h2v2zm0-4h-2V7h2v6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2015h-2v-2h2v2zm0-4h-2V7h2v6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014zM7%209h5v1H7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%204V1L8%205l4%204V6c3.31%200%206%202.69%206%206%200%201.01-.25%201.97-.7%202.8l1.46%201.46C19.54%2015.03%2020%2013.57%2020%2012c0-4.42-3.58-8-8-8zm0%2014c-3.31%200-6-2.69-6-6%200-1.01.25-1.97.7-2.8L5.24%207.74C4.46%208.97%204%2010.43%204%2012c0%204.42%203.58%208%208%208v3l4-4-4-4v3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M11.99%202C6.47%202%202%206.48%202%2012s4.47%2010%209.99%2010C17.52%2022%2022%2017.52%2022%2012S17.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208zm.5-13H11v6l5.25%203.15.75-1.23-4.5-2.67z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17%203H7c-1.1%200-2%20.9-2%202v16l7-3%207%203V5c0-1.1-.9-2-2-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17%203H7c-1.1%200-1.99.9-1.99%202L5%2021l7-3%207%203V5c0-1.1-.9-2-2-2zm0%2015l-5-2.18L7%2018V5h10v13z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%202H4c-1.1%200-2%20.9-2%202v18l4-4h14c1.1%200%202-.9%202-2V4c0-1.1-.9-2-2-2zm0%2014H6l-2%202V4h16v12z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%203h-4.18C14.4%201.84%2013.3%201%2012%201c-1.3%200-2.4.84-2.82%202H5c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h14c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm-7%200c.55%200%201%20.45%201%201s-.45%201-1%201-1-.45-1-1%20.45-1%201-1zm2%2014H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M12%202C8.13%202%205%205.13%205%209c0%205.25%207%2013%207%2013s7-7.75%207-13c0-3.87-3.13-7-7-7zm0%209.5c-1.38%200-2.5-1.12-2.5-2.5s1.12-2.5%202.5-2.5%202.5%201.12%202.5%202.5-1.12%202.5-2.5%202.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M3%2011h8V3H3v8zm2-6h4v4H5V5zm8-2v8h8V3h-8zm6%206h-4V5h4v4zM3%2021h8v-8H3v8zm2-6h4v4H5v-4zm13-2h-2v3h-3v2h3v3h2v-3h3v-2h-3v-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M3%203h6v6H3V3zm2%202v2h2V5H5zm8-2h6v6h-6V3zm2%202v2h2V5h-2zM3%2013h6v6H3v-6zm2%202v2h2v-2H5zm13-2h3v2h-3v-2zm-3%200h2v4h-2v-4zm-2%202h2v2h-2v-2zm2%202h3v2h-3v-2zm3%202h2v2h-2v-2zm-5%200h2v2h-2v-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M12%203a9%209%200%20109%209c0-.46-.04-.92-.1-1.36a5.389%205.389%200%2001-4.4%202.26%205.403%205.403%200%2001-3.14-9.8c-.44-.06-.9-.1-1.36-.1z'/%3e%3c/svg%3e\"","// 导入所有 SVG 图标\nimport arrowDown from './icons/arrow-down.svg'\nimport arrowLeft from './icons/arrow-left.svg'\nimport arrowRight from './icons/arrow-right.svg'\nimport arrowUp from './icons/arrow-up.svg'\nimport check from './icons/check.svg'\nimport checkCircle from './icons/check-circle.svg'\nimport chevronLeft from './icons/chevron-left.svg'\nimport chevronRight from './icons/chevron-right.svg'\nimport clear from './icons/clear.svg'\nimport clearO from './icons/clear-o.svg'\nimport close from './icons/close.svg'\nimport code from './icons/code.svg'\nimport copy from './icons/copy.svg'\nimport deleteIcon from './icons/delete.svg'\nimport download from './icons/download.svg'\nimport edit from './icons/edit.svg'\nimport email from './icons/email.svg'\nimport error from './icons/error.svg'\nimport errorO from './icons/error-o.svg'\nimport expandLess from './icons/expand-less.svg'\nimport expandMore from './icons/expand-more.svg'\nimport eye from './icons/eye.svg'\nimport eyeOff from './icons/eye-off.svg'\nimport flag from './icons/flag.svg'\nimport flagO from './icons/flag-o.svg'\nimport fullscreen from './icons/fullscreen.svg'\nimport exitFullscreen from './icons/exit-fullscreen.svg'\nimport grid from './icons/grid.svg'\nimport heart from './icons/heart.svg'\nimport heartO from './icons/heart-o.svg'\nimport info from './icons/info.svg'\nimport infoO from './icons/info-o.svg'\nimport keyboardArrowDown from './icons/keyboard-arrow-down.svg'\nimport keyboardArrowLeft from './icons/keyboard-arrow-left.svg'\nimport keyboardArrowRight from './icons/keyboard-arrow-right.svg'\nimport keyboardArrowUp from './icons/keyboard-arrow-up.svg'\nimport like from './icons/like.svg'\nimport likeO from './icons/like-o.svg'\nimport link from './icons/link.svg'\nimport list from './icons/list.svg'\nimport lock from './icons/lock.svg'\nimport unlock from './icons/unlock.svg'\nimport loading from './icons/loading.svg'\nimport menu from './icons/menu.svg'\nimport menuO from './icons/menu-o.svg'\nimport message from './icons/message.svg'\nimport minus from './icons/minus.svg'\nimport notification from './icons/notification.svg'\nimport bell from './icons/bell.svg'\nimport phone from './icons/phone.svg'\nimport plus from './icons/plus.svg'\nimport question from './icons/question.svg'\nimport refresh from './icons/refresh.svg'\nimport refreshO from './icons/refresh-o.svg'\nimport reload from './icons/reload.svg'\nimport redo from './icons/redo.svg'\nimport undo from './icons/undo.svg'\nimport search from './icons/search.svg'\nimport searchO from './icons/search-o.svg'\nimport setting from './icons/setting.svg'\nimport share from './icons/share.svg'\nimport smile from './icons/smile.svg'\nimport smileO from './icons/smile-o.svg'\nimport star from './icons/star.svg'\nimport starO from './icons/star-o.svg'\nimport success from './icons/success.svg'\nimport successO from './icons/success-o.svg'\nimport tick from './icons/tick.svg'\nimport upload from './icons/upload.svg'\nimport user from './icons/user.svg'\nimport account from './icons/account.svg'\nimport group from './icons/group.svg'\nimport home from './icons/home.svg'\nimport homeFill from './icons/home-fill.svg'\nimport accountFill from './icons/account-fill.svg'\nimport userFill from './icons/user-fill.svg'\nimport warning from './icons/warning.svg'\nimport warningO from './icons/warning-o.svg'\nimport zoomIn from './icons/zoom-in.svg'\nimport zoomOut from './icons/zoom-out.svg'\nimport sync from './icons/sync.svg'\nimport clock from './icons/clock.svg'\nimport bookmark from './icons/bookmark.svg'\nimport bookmarkO from './icons/bookmark-o.svg'\nimport chat from './icons/chat.svg'\nimport clipboard from './icons/clipboard.svg'\nimport location from './icons/location.svg'\nimport scan from './icons/scan.svg'\nimport qrcode from './icons/qrcode.svg'\nimport moon from './icons/moon.svg'\n\n// 图标映射表\nexport const icons: Record<string, string> = {\n // 箭头类\n 'arrow-down': arrowDown,\n 'arrow-left': arrowLeft,\n 'arrow-right': arrowRight,\n 'arrow-up': arrowUp,\n 'chevron-left': chevronLeft,\n 'chevron-right': chevronRight,\n 'expand-less': expandLess,\n 'expand-more': expandMore,\n 'keyboard-arrow-down': keyboardArrowDown,\n 'keyboard-arrow-left': keyboardArrowLeft,\n 'keyboard-arrow-right': keyboardArrowRight,\n 'keyboard-arrow-up': keyboardArrowUp,\n\n // 操作类\n 'check': check,\n 'check-circle': checkCircle,\n 'clear': clear,\n 'clear-o': clearO,\n 'close': close,\n 'plus': plus,\n 'minus': minus,\n 'tick': tick,\n\n // 编辑类\n 'copy': copy,\n 'cut': copy,\n 'edit': edit,\n 'delete': deleteIcon,\n 'undo': undo,\n 'redo': redo,\n\n // 文件类\n 'upload': upload,\n 'download': download,\n 'file': clipboard,\n 'folder': clipboard,\n\n // 状态类\n 'success': success,\n 'success-o': successO,\n 'warning': warning,\n 'warning-o': warningO,\n 'error': error,\n 'error-o': errorO,\n 'info': info,\n 'info-o': infoO,\n 'question': question,\n 'loading': loading,\n\n // 社交类\n 'heart': heart,\n 'heart-o': heartO,\n 'star': star,\n 'star-o': starO,\n 'like': like,\n 'like-o': likeO,\n 'share': share,\n 'qrcode': qrcode,\n 'moon': moon,\n\n // 用户类\n 'user': user,\n 'user-fill': userFill,\n 'account': account,\n 'account-fill': accountFill,\n 'group': group,\n 'smile': smile,\n 'smile-o': smileO,\n\n // 导航类 - 新增首页图标\n 'home': home,\n 'home-fill': homeFill,\n\n // 安全类\n 'lock': lock,\n 'unlock': unlock,\n 'eye': eye,\n 'eye-off': eyeOff,\n\n // 交互类\n 'search': search,\n 'search-o': searchO,\n 'zoom-in': zoomIn,\n 'zoom-out': zoomOut,\n 'refresh': refresh,\n 'refresh-o': refreshO,\n 'reload': reload,\n 'sync': sync,\n 'setting': setting,\n 'fullscreen': fullscreen,\n 'exit-fullscreen': exitFullscreen,\n\n // 导航类\n 'menu': menu,\n 'menu-o': menuO,\n 'list': list,\n 'grid': grid,\n 'more': expandMore,\n 'less': expandLess,\n\n // 通讯类\n 'email': email,\n 'phone': phone,\n 'message': message,\n 'chat': chat,\n 'notification': notification,\n 'bell': bell,\n 'link': link,\n\n // 标记类\n 'flag': flag,\n 'flag-o': flagO,\n 'bookmark': bookmark,\n 'bookmark-o': bookmarkO,\n 'tag': flag,\n\n // 其他\n 'code': code,\n 'clock': clock,\n 'time': clock,\n 'calendar': clock,\n\n // 位置和扫码\n 'location': location,\n 'scan': scan,\n}\n\n// 获取图标 SVG 内容\nexport function getIcon(name: string): string | undefined {\n return icons[name]\n}\n\n// 获取所有图标名称\nexport function getIconNames(): string[] {\n return Object.keys(icons)\n}\n\n// 添加自定义图标\nexport function addIcon(name: string, svg: string): void {\n icons[name] = svg\n}\n\n// 默认导出所有图标\nexport default icons","<template>\n <view\n class=\"u-icon\"\n :class=\"{ 'u-icon--spin': spin }\"\n :style=\"iconStyle\"\n @click=\"handleClick\"\n >\n <!-- SVG 图标模式 -->\n <image\n v-if=\"isSvgIcon && iconSrc\"\n class=\"u-icon__svg\"\n :src=\"iconSrc\"\n :style=\"svgStyle\"\n mode=\"aspectFit\"\n />\n <!-- Emoji/文字模式 -->\n <text v-else class=\"u-icon__inner\">{{ name }}</text>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { getIcon } from './index'\n\ninterface Props {\n name: string\n size?: number | string\n color?: string\n spin?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n size: 16\n})\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst handleClick = (event: MouseEvent) => {\n emit('click', event)\n}\n\n// 判断是否为 SVG 图标\nconst isSvgIcon = computed(() => {\n return !!getIcon(props.name)\n})\n\n// 获取图标 SVG 资源\nconst iconSrc = computed(() => {\n return getIcon(props.name) || ''\n})\n\n// 尺寸转换为 px\nconst sizePx = computed(() => {\n const size = typeof props.size === 'number' ? props.size : parseInt(props.size)\n return size + 'px'\n})\n\n// 将颜色转换为 CSS filter\nconst colorToFilter = (color: string): string => {\n // 预定义颜色的 filter 值\n const colorMap: Record<string, string> = {\n '#ff9500': 'invert(58%) sepia(97%) saturate(1833%) hue-rotate(351deg) brightness(101%) contrast(101%)',\n '#12b6af': 'invert(47%) sepia(85%) saturate(475%) hue-rotate(131deg) brightness(92%) contrast(92%)',\n '#333333': 'invert(20%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#666666': 'invert(45%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#999999': 'invert(70%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#ffffff': 'invert(100%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#ff4d4f': 'invert(46%) sepia(98%) saturate(1925%) hue-rotate(335deg) brightness(101%) contrast(101%)',\n }\n\n // 检查是否有预定义的 filter\n const lowerColor = color.toLowerCase()\n if (colorMap[lowerColor]) {\n return colorMap[lowerColor]\n }\n\n // 动态计算 filter(简化版本,适用于纯色图标)\n // 将 hex 转换为 RGB\n const hex = color.replace('#', '')\n const r = parseInt(hex.substring(0, 2), 16)\n const g = parseInt(hex.substring(2, 4), 16)\n const b = parseInt(hex.substring(4, 6), 16)\n\n // 使用 invert + sepia + hue-rotate 组合\n // 这是一个近似方案\n const hue = Math.atan2(Math.sqrt(3) * (g - b), 2 * r - g - b) * 180 / Math.PI\n return `invert(1) sepia(1) saturate(10000%) hue-rotate(${hue}deg)`\n}\n\n// 图标样式\nconst iconStyle = computed(() => {\n const size = typeof props.size === 'number' ? props.size : parseInt(props.size)\n const style: Record<string, string> = {\n fontSize: size + 'px',\n width: size + 'px',\n height: size + 'px'\n }\n\n // SVG 图标通过 filter 设置颜色\n if (props.color && isSvgIcon.value) {\n style.filter = colorToFilter(props.color)\n }\n\n // 非 SVG 图标设置颜色\n if (props.color && !isSvgIcon.value) {\n style.color = props.color\n }\n\n return style\n})\n\n// SVG 图标样式\nconst svgStyle = computed(() => {\n return {\n width: sizePx.value,\n height: sizePx.value\n }\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-style: normal;\n line-height: 1;\n\n &--spin {\n animation: u-icon-spin 1s linear infinite;\n }\n\n &__inner {\n font-family: inherit;\n line-height: 1;\n }\n\n &__svg {\n display: block;\n object-fit: contain;\n }\n}\n\n@keyframes u-icon-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n","<template>\n <view class=\"u-loading\" :class=\"{ 'u-loading--vertical': vertical }\">\n <view class=\"u-loading__spinner\" :style=\"{ width: size + 'px', height: size + 'px' }\">\n <view\n v-for=\"i in 12\"\n :key=\"i\"\n class=\"u-loading__line\"\n :style=\"{\n transform: `rotate(${i * 30}deg)`,\n backgroundColor: color\n }\"\n />\n </view>\n <text v-if=\"text\" class=\"u-loading__text\" :style=\"{ color: textColor || color }\">{{ text }}</text>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n size?: number | string\n color?: string\n text?: string\n textColor?: string\n vertical?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n size: 30,\n color: '#1989fa'\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-loading {\n display: inline-flex;\n align-items: center;\n gap: $--spacing-sm;\n\n &--vertical {\n flex-direction: column;\n }\n\n &__spinner {\n position: relative;\n display: inline-block;\n }\n\n &__line {\n position: absolute;\n top: 0;\n left: 50%;\n width: 2px;\n height: 25%;\n margin-left: -1px;\n border-radius: 1px;\n transform-origin: center 200%;\n opacity: 0.2;\n\n @for $i from 1 through 12 {\n &:nth-child(#{$i}) {\n opacity: 0.2 + ($i - 1) * 0.06;\n }\n }\n }\n\n &__text {\n font-size: $--font-size-sm;\n line-height: 1.5;\n }\n}\n</style>\n","<template>\n <view class=\"u-tag\" :class=\"[`u-tag--${type}`, `u-tag--${size}`, { 'u-tag--plain': plain, 'u-tag--round': round }]\" :style=\"tagStyle\">\n <text class=\"u-tag__text\"><slot /></text>\n <view v-if=\"closable\" class=\"u-tag__close\" @click=\"handleClose\">\n <text>×</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype TagType = 'primary' | 'success' | 'warning' | 'danger' | 'default'\ntype TagSize = 'large' | 'medium' | 'small'\n\ninterface Props {\n type?: TagType\n size?: TagSize\n plain?: boolean\n round?: boolean\n closable?: boolean\n color?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n type: 'default',\n size: 'medium',\n plain: false,\n round: false,\n closable: false\n})\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nconst tagStyle = computed(() => {\n if (props.color) {\n return {\n backgroundColor: props.plain ? 'transparent' : props.color,\n borderColor: props.color,\n color: props.plain ? props.color : '#fff'\n }\n }\n return {}\n})\n\nconst handleClose = () => {\n emit('close')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-tag {\n display: inline-flex;\n align-items: center;\n padding: 0 $--spacing-sm;\n border-radius: 2px;\n border: 1px solid transparent;\n font-size: $--font-size-sm;\n\n &--default {\n color: $--text-color;\n background-color: $--bg-color-3;\n border-color: $--bg-color-3;\n }\n\n &--primary {\n color: $--text-color-white;\n background-color: $--color-primary;\n border-color: $--color-primary;\n }\n\n &--success {\n color: $--text-color-white;\n background-color: $--color-success;\n border-color: $--color-success;\n }\n\n &--warning {\n color: $--text-color-white;\n background-color: $--color-warning;\n border-color: $--color-warning;\n }\n\n &--danger {\n color: $--text-color-white;\n background-color: $--color-danger;\n border-color: $--color-danger;\n }\n\n &--large {\n padding: $--spacing-sm $--spacing-md;\n font-size: $--font-size-md;\n }\n\n &--small {\n padding: 0 $--spacing-xs;\n font-size: $--font-size-xs;\n }\n\n &--plain {\n background-color: transparent;\n\n &.u-tag--primary {\n color: $--color-primary;\n }\n\n &.u-tag--success {\n color: $--color-success;\n }\n\n &.u-tag--warning {\n color: $--color-warning;\n }\n\n &.u-tag--danger {\n color: $--color-danger;\n }\n }\n\n &--round {\n border-radius: 999px;\n }\n\n &__text {\n line-height: 1.4;\n }\n\n &__close {\n margin-left: 2px;\n font-size: 12px;\n }\n}\n</style>\n","<template>\n <view\n class=\"u-switch\"\n :class=\"{ 'u-switch--on': modelValue, 'u-switch--disabled': disabled }\"\n :style=\"switchStyle\"\n @click=\"handleClick\"\n >\n <view class=\"u-switch__node\" :style=\"nodeStyle\">\n <u-loading v-if=\"loading\" :size=\"nodeSize\" :color=\"modelValue ? '#fff' : '#999'\" />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n modelValue?: boolean\n disabled?: boolean\n loading?: boolean\n size?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: false,\n disabled: false,\n loading: false,\n size: 30\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n change: [value: boolean]\n}>()\n\n// 计算节点大小\nconst nodeSize = computed(() => Math.round(props.size * 0.8))\n\n// 开关宽度\nconst switchWidth = computed(() => Math.round(props.size * 1.67))\n\n// 开关样式\nconst switchStyle = computed(() => ({\n width: `${switchWidth.value}px`,\n height: `${props.size}px`,\n borderRadius: `${props.size / 2}px`\n}))\n\n// 节点样式 - 使用 left 而不是 transform,兼容性更好\nconst nodeStyle = computed(() => {\n const node = nodeSize.value\n const gap = Math.round((props.size - node) / 2)\n const left = props.modelValue ? switchWidth.value - node - gap : gap\n\n return {\n width: `${node}px`,\n height: `${node}px`,\n top: `${gap}px`,\n left: `${left}px`\n }\n})\n\nconst handleClick = (e: Event) => {\n e.stopPropagation()\n if (props.disabled || props.loading) return\n\n const newValue = !props.modelValue\n emit('update:modelValue', newValue)\n emit('change', newValue)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-switch {\n position: relative;\n background-color: $--bg-color-3;\n transition: background-color $--transition-duration;\n box-sizing: border-box;\n\n &--on {\n background-color: $--color-primary;\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__node {\n position: absolute;\n background-color: $--bg-color-2;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: left $--transition-duration;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n}\n</style>","<template>\n <view class=\"u-image\" :style=\"{ width: width + 'px', height: height + 'px' }\">\n <image\n class=\"u-image__inner\"\n :src=\"src\"\n :mode=\"mode\"\n :lazy-load=\"lazyLoad\"\n :fade=\"fade\"\n @load=\"handleLoad\"\n @error=\"handleError\"\n />\n <view v-if=\"loading && !loaded\" class=\"u-image__loading\">\n <slot name=\"loading\">\n <u-loading :size=\"20\" />\n </slot>\n </view>\n <view v-if=\"error && !loaded\" class=\"u-image__error\">\n <slot name=\"error\">\n <text class=\"u-image__error-text\">加载失败</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\ninterface Props {\n src: string\n width?: number | string\n height?: number | string\n mode?: string\n lazyLoad?: boolean\n fade?: boolean\n loading?: boolean\n error?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n width: 100,\n height: 100,\n mode: 'aspectFill',\n lazyLoad: true,\n fade: true,\n loading: true,\n error: true\n})\n\nconst emit = defineEmits<{\n load: [event: Event]\n error: [event: Event]\n}>()\n\nconst loaded = ref(false)\n\nconst handleLoad = (event: Event) => {\n loaded.value = true\n emit('load', event)\n}\n\nconst handleError = (event: Event) => {\n loaded.value = false\n emit('error', event)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-image {\n position: relative;\n display: inline-block;\n overflow: hidden;\n\n &__inner {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n &__loading,\n &__error {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: $--bg-color;\n }\n\n &__error-text {\n font-size: $--font-size-sm;\n color: $--text-color-3;\n }\n}\n</style>\n","<template>\n <view class=\"u-divider\" :class=\"{ 'u-divider--hairline': hairline, 'u-divider--dashed': dashed }\">\n <view v-if=\"$slots.default || content\" class=\"u-divider__text\">\n <slot>{{ content }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n content?: string\n hairline?: boolean\n dashed?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n content: '',\n hairline: false,\n dashed: false\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-divider {\n display: flex;\n align-items: center;\n margin: $--spacing-lg 0;\n color: $--text-color-2;\n font-size: $--font-size-sm;\n line-height: 1;\n\n &::before,\n &::after {\n content: '';\n flex: 1;\n height: 1px;\n background-color: $--border-color;\n }\n\n &--hairline {\n &::before,\n &::after {\n transform: scaleY(0.5);\n }\n }\n\n &--dashed {\n &::before,\n &::after {\n border-style: dashed;\n background: transparent;\n border-top: 1px dashed $--border-color;\n border-bottom: none;\n height: 0;\n }\n }\n\n &__text {\n padding: 0 $--spacing-md;\n }\n}\n</style>\n","<template>\n <view class=\"u-notice-bar\" :class=\"{ 'u-notice-bar--wrapable': wrapable }\" :style=\"{ color, background: background }\">\n <view v-if=\"$slots.leftIcon || leftIcon\" class=\"u-notice-bar__left-icon\">\n <slot name=\"leftIcon\">\n <text>{{ leftIcon }}</text>\n </slot>\n </view>\n <view class=\"u-notice-bar__content\" :class=\"{ 'u-notice-bar__content--scrollable': scrollable }\">\n <view\n v-if=\"scrollable\"\n class=\"u-notice-bar__text\"\n :style=\"{ animationDuration: speed + 's' }\"\n >\n <text class=\"u-notice-bar__text-item\">{{ text }}</text>\n <text class=\"u-notice-bar__text-item\">{{ text }}</text>\n </view>\n <text v-else class=\"u-notice-bar__text\">{{ text }}</text>\n </view>\n <view v-if=\"$slots.rightIcon || rightIcon\" class=\"u-notice-bar__right-icon\" @click=\"handleRightIconClick\">\n <slot name=\"rightIcon\">\n <text>{{ rightIcon }}</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n text: string\n color?: string\n background?: string\n leftIcon?: string\n rightIcon?: string\n scrollable?: boolean\n speed?: number\n wrapable?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n color: '#ed6a0c',\n background: '#fffbe8',\n scrollable: false,\n speed: 10,\n wrapable: false\n})\n\nconst emit = defineEmits<{\n 'right-icon-click': []\n}>()\n\nconst handleRightIconClick = () => {\n emit('right-icon-click')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-notice-bar {\n display: flex;\n align-items: center;\n padding: $--spacing-md $--spacing-lg;\n font-size: $--font-size-sm;\n line-height: 24px;\n\n &--wrapable {\n flex-wrap: wrap;\n padding: $--spacing-md $--spacing-lg;\n }\n\n &__content {\n flex: 1;\n overflow: hidden;\n position: relative;\n\n &--scrollable {\n overflow: hidden;\n white-space: nowrap;\n }\n }\n\n &__text {\n display: inline-block;\n white-space: nowrap;\n\n .u-notice-bar__content--scrollable & {\n display: flex;\n animation: u-notice-bar-scroll linear infinite;\n }\n }\n\n &__text-item {\n display: inline-block;\n white-space: nowrap;\n padding-right: 40px;\n }\n\n &__left-icon {\n margin-right: $--spacing-sm;\n }\n\n &__right-icon {\n margin-left: $--spacing-sm;\n }\n}\n\n@keyframes u-notice-bar-scroll {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-50%);\n }\n}\n</style>\n","<template>\n <view class=\"u-layout\" :class=\"{ 'u-layout--has-footer': hasFooter }\">\n <view v-if=\"$slots.header\" class=\"u-layout__header\">\n <slot name=\"header\" />\n </view>\n <view class=\"u-layout__content\">\n <slot />\n </view>\n <view v-if=\"$slots.footer\" class=\"u-layout__footer\">\n <slot name=\"footer\" />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSlots, computed } from 'vue'\n\nconst slots = useSlots()\n\nconst hasFooter = computed(() => !!slots.footer)\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-layout {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n background-color: $--bg-color;\n\n &__header {\n position: sticky;\n top: 0;\n z-index: 100;\n background-color: $--bg-color-2;\n }\n\n &__content {\n flex: 1;\n overflow: auto;\n }\n\n &__footer {\n position: sticky;\n bottom: 0;\n z-index: 100;\n background-color: $--bg-color-2;\n }\n}\n</style>\n","<template>\n <view class=\"u-badge\" :class=\"{ 'u-badge--fixed': fixed }\">\n <slot />\n <view\n v-if=\"showBadge\"\n class=\"u-badge__content\"\n :class=\"[`u-badge__content--${type}`, { 'u-badge__content--dot': dot, 'u-badge__content--alone': !$slots.default }]\"\n :style=\"badgeStyle\"\n >\n <text v-if=\"!dot && displayValue\" class=\"u-badge__text\">{{ displayValue }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype BadgeType = 'primary' | 'success' | 'warning' | 'danger' | 'info'\n\ninterface Props {\n value?: number | string\n max?: number\n dot?: boolean\n hidden?: boolean\n type?: BadgeType\n color?: string\n offset?: [number, number]\n fixed?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n max: 99,\n dot: false,\n hidden: false,\n type: 'danger',\n fixed: false\n})\n\nconst showBadge = computed(() => {\n return !props.hidden && (props.dot || props.value !== undefined)\n})\n\nconst displayValue = computed(() => {\n if (props.dot) return ''\n if (typeof props.value === 'number') {\n return props.value > props.max ? `${props.max}+` : props.value\n }\n return props.value\n})\n\nconst badgeStyle = computed(() => {\n const style: Record<string, string> = {}\n\n if (props.color) {\n style.backgroundColor = props.color\n }\n\n if (props.offset && props.offset.length === 2) {\n const [x, y] = props.offset\n style.transform = `translate(${x}px, ${y}px)`\n }\n\n return style\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-badge {\n position: relative;\n display: inline-block;\n\n &--fixed {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n }\n\n &__content {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border-radius: 999px;\n font-size: $--font-size-xs;\n line-height: 1;\n color: $--text-color-white;\n white-space: nowrap;\n box-sizing: border-box;\n\n &--dot {\n min-width: 8px;\n width: 8px;\n height: 8px;\n padding: 0;\n border-radius: 50%;\n }\n\n &--alone {\n position: relative;\n transform: none;\n }\n\n &--primary {\n background-color: $--color-primary;\n }\n\n &--success {\n background-color: $--color-success;\n }\n\n &--warning {\n background-color: $--color-warning;\n }\n\n &--danger {\n background-color: $--color-danger;\n }\n\n &--info {\n background-color: $--color-info;\n }\n }\n\n &__text {\n display: inline-block;\n vertical-align: middle;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-loading-page\">\n <view class=\"u-loading-page__content\">\n <view class=\"u-loading-page__spinner\" :style=\"{ width: size + 'px', height: size + 'px' }\">\n <view\n v-for=\"i in 12\"\n :key=\"i\"\n class=\"u-loading-page__line\"\n :style=\"{\n transform: `rotate(${i * 30}deg)`,\n backgroundColor: color\n }\"\n />\n </view>\n <text v-if=\"text\" class=\"u-loading-page__text\" :style=\"{ color: textColor || color }\">{{ text }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n visible?: boolean\n text?: string\n color?: string\n textColor?: string\n size?: number | string\n}\n\nwithDefaults(defineProps<Props>(), {\n visible: false,\n text: '加载中...',\n color: '#1989fa',\n size: 40\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-loading-page {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 999;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: $--bg-color-2;\n\n &__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: $--spacing-md;\n }\n\n &__spinner {\n position: relative;\n display: inline-block;\n }\n\n &__line {\n position: absolute;\n top: 0;\n left: 50%;\n width: 3px;\n height: 25%;\n margin-left: -1.5px;\n border-radius: 2px;\n transform-origin: center 200%;\n opacity: 0.2;\n\n @for $i from 1 through 12 {\n &:nth-child(#{$i}) {\n opacity: 0.2 + ($i - 1) * 0.06;\n }\n }\n }\n\n &__text {\n font-size: $--font-size-md;\n line-height: 1.5;\n }\n}\n</style>\n","<template>\n <view class=\"u-parse\">\n <rich-text\n :nodes=\"parsedNodes\"\n :selectable=\"selectable\"\n :image-menu-prevent=\"imageMenuPrevent\"\n @tap=\"handleTap\"\n />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n content: string\n selectable?: boolean\n imageMenuPrevent?: boolean\n imageMode?: 'aspectFit' | 'aspectFill' | 'widthFix' | 'scaleToFill'\n tagStyle?: Record<string, string>\n lazyLoad?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n content: '',\n selectable: false,\n imageMenuPrevent: false,\n imageMode: 'widthFix',\n lazyLoad: false\n})\n\nconst emit = defineEmits<{\n load: []\n error: [event: Event]\n imgTap: [src: string]\n linkTap: [href: string]\n}>()\n\n// 默认标签样式\nconst defaultTagStyle: Record<string, string> = {\n p: 'margin: 0 0 16px 0; line-height: 1.6;',\n h1: 'font-size: 28px; font-weight: bold; margin: 0 0 16px 0;',\n h2: 'font-size: 24px; font-weight: bold; margin: 0 0 14px 0;',\n h3: 'font-size: 20px; font-weight: bold; margin: 0 0 12px 0;',\n h4: 'font-size: 18px; font-weight: bold; margin: 0 0 10px 0;',\n h5: 'font-size: 16px; font-weight: bold; margin: 0 0 8px 0;',\n h6: 'font-size: 14px; font-weight: bold; margin: 0 0 8px 0;',\n img: 'max-width: 100%; height: auto; display: block;',\n ul: 'margin: 0 0 16px 0; padding-left: 20px;',\n ol: 'margin: 0 0 16px 0; padding-left: 20px;',\n li: 'margin: 4px 0;',\n blockquote: 'margin: 0 0 16px 0; padding: 8px 16px; border-left: 4px solid #ebedf0; background: #f7f8fa;',\n pre: 'margin: 0 0 16px 0; padding: 12px; background: #f7f8fa; border-radius: 4px; overflow-x: auto;',\n code: 'padding: 2px 6px; background: #f7f8fa; border-radius: 2px; font-family: monospace;',\n a: 'color: #1989fa; text-decoration: none;',\n table: 'width: 100%; border-collapse: collapse; margin: 0 0 16px 0;',\n th: 'padding: 8px; border: 1px solid #ebedf0; background: #f7f8fa; font-weight: bold;',\n td: 'padding: 8px; border: 1px solid #ebedf0;',\n hr: 'border: none; border-top: 1px solid #ebedf0; margin: 16px 0;',\n br: 'content: \"\"; display: block; margin-bottom: 8px;'\n}\n\n// 合并样式\nconst mergedTagStyle = computed(() => {\n return { ...defaultTagStyle, ...props.tagStyle }\n})\n\n// 解析内容\nconst parsedNodes = computed(() => {\n if (!props.content) return ''\n\n let html = props.content\n\n // 处理图片\n html = html.replace(/<img([^>]*)>/gi, (match, attrs) => {\n const srcMatch = attrs.match(/src=[\"']([^\"']+)[\"']/i)\n const altMatch = attrs.match(/alt=[\"']([^\"']*)[\"']/i)\n const widthMatch = attrs.match(/width=[\"']?(\\d+)[\"']?/i)\n const heightMatch = attrs.match(/height=[\"']?(\\d+)[\"']?/i)\n\n const src = srcMatch ? srcMatch[1] : ''\n const alt = altMatch ? altMatch[1] : ''\n const width = widthMatch ? widthMatch[1] : 'auto'\n const height = heightMatch ? heightMatch[1] : 'auto'\n\n const style = mergedTagStyle.value.img || ''\n const widthStyle = width !== 'auto' ? `width: ${width}px;` : 'width: 100%;'\n const heightStyle = height !== 'auto' ? `height: ${height}px;` : ''\n\n // 懒加载处理\n const lazyAttr = props.lazyLoad ? `lazy-load=\"true\"` : ''\n return `<img src=\"${src}\" alt=\"${alt}\" style=\"${style} ${widthStyle} ${heightStyle}\" data-src=\"${src}\" ${lazyAttr} />`\n })\n\n // 处理链接\n html = html.replace(/<a([^>]*)>/gi, (match, attrs) => {\n const hrefMatch = attrs.match(/href=[\"']([^\"']+)[\"']/i)\n const href = hrefMatch ? hrefMatch[1] : '#'\n const style = mergedTagStyle.value.a || ''\n return `<a href=\"${href}\" style=\"${style}\" data-href=\"${href}\">`\n })\n\n // 添加默认样式到标签\n const tags = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'table', 'th', 'td', 'hr']\n tags.forEach(tag => {\n const style = mergedTagStyle.value[tag]\n if (style) {\n const regex = new RegExp(`<${tag}([^>]*)>`, 'gi')\n html = html.replace(regex, (match, attrs) => {\n const hasStyle = /style=/i.test(attrs)\n if (hasStyle) {\n return match.replace(/style=[\"']([^\"']*)[\"']/i, `style=\"$1; ${style}\"`)\n }\n return `<${tag} style=\"${style}\"${attrs}>`\n })\n }\n })\n\n return html\n})\n\n// 处理点击事件\nconst handleTap = (event: any) => {\n const target = event.target\n\n // 处理图片点击\n if (target.tagName === 'IMG') {\n const src = target.getAttribute('data-src') || target.getAttribute('src')\n if (src) {\n emit('imgTap', src)\n }\n }\n\n // 处理链接点击\n if (target.tagName === 'A') {\n event.stopPropagation?.()\n const href = target.getAttribute('data-href') || target.getAttribute('href')\n if (href && href !== '#') {\n emit('linkTap', href)\n }\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-parse {\n font-size: $--font-size-md;\n line-height: 1.6;\n color: $--text-color;\n word-break: break-word;\n\n :deep(img) {\n max-width: 100%;\n height: auto;\n vertical-align: middle;\n }\n\n :deep(a) {\n color: $--color-primary;\n text-decoration: none;\n\n &:active {\n opacity: 0.7;\n }\n }\n\n :deep(pre) {\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n :deep(code) {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n }\n\n :deep(table) {\n display: block;\n overflow-x: auto;\n }\n\n :deep(blockquote) {\n border-left: 4px solid $--border-color;\n background-color: $--bg-color;\n padding: $--spacing-md $--spacing-lg;\n margin: $--spacing-md 0;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-keyboard\" @click=\"handleOverlayClick\">\n <view class=\"u-keyboard__panel\" @click.stop>\n <view class=\"u-keyboard__header\">\n <text class=\"u-keyboard__title\">{{ title }}</text>\n <text class=\"u-keyboard__close\" @click=\"handleClose\">完成</text>\n </view>\n\n <view class=\"u-keyboard__body\" :class=\"`u-keyboard__body--${type}`\">\n <view\n v-for=\"(key, index) in displayKeys\"\n :key=\"`${key}-${index}`\"\n class=\"u-keyboard__key\"\n :class=\"{\n 'u-keyboard__key--action': isActionKey(key),\n 'u-keyboard__key--wide': key === '删除' || key === 'ABC' || key === '省份'\n }\"\n @click=\"handleKeyClick(key)\"\n >\n <text>{{ key }}</text>\n </view>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype KeyboardType = 'number' | 'idcard' | 'car'\n\ninterface Props {\n visible?: boolean\n type?: KeyboardType\n hideDot?: boolean\n randomKeyOrder?: boolean\n title?: string\n maxlength?: number\n modelValue?: string\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n type: 'number',\n hideDot: false,\n randomKeyOrder: false,\n title: '安全键盘',\n maxlength: 0,\n modelValue: '',\n closeOnClickOverlay: true\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n 'update:modelValue': [value: string]\n input: [value: string]\n delete: [value: string]\n confirm: [value: string]\n close: []\n}>()\n\nconst displayKeys = computed(() => {\n const { inputKeys, tailKeys } = getKeyGroups()\n const keys = props.randomKeyOrder ? shuffle(inputKeys) : inputKeys\n return [...keys, ...tailKeys]\n})\n\nconst getKeyGroups = () => {\n if (props.type === 'idcard') {\n const inputKeys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', props.hideDot ? 'X' : '.', '0', 'X']\n return {\n inputKeys: props.hideDot ? inputKeys.filter((key, index) => !(index === 9 && key === 'X')) : inputKeys.filter((key) => key !== '.' || !props.hideDot),\n tailKeys: ['删除']\n }\n }\n\n if (props.type === 'car') {\n return {\n inputKeys: [\n '京', '沪', '粤', '浙', '苏', '鲁', '晋', '冀', '豫', '川',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',\n 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',\n 'W', 'X', 'Y', 'Z', '港', '澳'\n ],\n tailKeys: ['删除']\n }\n }\n\n return {\n inputKeys: ['1', '2', '3', '4', '5', '6', '7', '8', '9', ...(props.hideDot ? [] : ['.']), '0'],\n tailKeys: ['删除']\n }\n}\n\nconst handleKeyClick = (key: string) => {\n if (key === '删除') {\n const nextValue = props.modelValue.slice(0, -1)\n emit('update:modelValue', nextValue)\n emit('delete', nextValue)\n return\n }\n\n const nextValue = `${props.modelValue}${key}`\n if (props.maxlength > 0 && nextValue.length > props.maxlength) {\n return\n }\n\n emit('update:modelValue', nextValue)\n emit('input', nextValue)\n}\n\nconst handleClose = () => {\n emit('update:visible', false)\n emit('confirm', props.modelValue)\n emit('close')\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n emit('close')\n }\n}\n\nconst isActionKey = (key: string) => key === '删除' || key === 'ABC' || key === '省份'\n\nfunction shuffle(source: string[]) {\n const list = [...source]\n for (let i = list.length - 1; i > 0; i -= 1) {\n const j = Math.floor(Math.random() * (i + 1))\n ;[list[i], list[j]] = [list[j], list[i]]\n }\n return list\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-keyboard {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: flex-end;\n background: rgba(0, 0, 0, 0.45);\n z-index: 1000;\n\n &__panel {\n width: 100%;\n background: $--bg-color;\n border-radius: $--border-radius-lg $--border-radius-lg 0 0;\n padding: $--spacing-md;\n box-sizing: border-box;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: $--spacing-md;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n font-weight: 600;\n }\n\n &__close {\n font-size: $--font-size-md;\n color: $--color-primary;\n }\n\n &__body {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: $--spacing-sm;\n\n &--car {\n grid-template-columns: repeat(6, 1fr);\n }\n }\n\n &__key {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 44px;\n background: $--bg-color-2;\n border-radius: $--border-radius-md;\n font-size: $--font-size-lg;\n color: $--text-color;\n\n &--action {\n background: #d7dbe0;\n color: $--text-color-2;\n font-size: $--font-size-md;\n }\n\n &--wide {\n grid-column: span 1;\n }\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-picker\" @click=\"handleOverlayClick\">\n <view class=\"u-picker__popup\" @click.stop>\n <view class=\"u-picker__toolbar\">\n <text class=\"u-picker__action\" @click=\"handleCancel\">取消</text>\n <text class=\"u-picker__title\">{{ title }}</text>\n <text class=\"u-picker__action u-picker__action--confirm\" @click=\"handleConfirm\">确定</text>\n </view>\n\n <view v-if=\"loading\" class=\"u-picker__loading\">\n <text>加载中...</text>\n </view>\n\n <picker-view\n v-else\n class=\"u-picker__view\"\n :value=\"innerIndexes\"\n indicator-class=\"u-picker__indicator\"\n @change=\"handlePickerChange\"\n >\n <picker-view-column v-for=\"(column, columnIndex) in normalizedColumns\" :key=\"columnIndex\">\n <view\n v-for=\"(option, optionIndex) in column\"\n :key=\"option.value ?? option.label ?? optionIndex\"\n class=\"u-picker__option\"\n >\n <text>{{ option.label }}</text>\n </view>\n </picker-view-column>\n </picker-view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ninterface PickerOption {\n label: string\n value: string | number\n}\n\ntype PickerColumn = Array<string | number | PickerOption>\ntype PickerValue = Array<string | number>\n\ninterface Props {\n visible?: boolean\n columns?: PickerColumn[]\n modelValue?: PickerValue\n title?: string\n loading?: boolean\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n columns: () => [],\n modelValue: () => [],\n title: '选择器',\n loading: false,\n closeOnClickOverlay: false\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n 'update:modelValue': [value: PickerValue]\n change: [value: PickerValue, columnIndex: number]\n confirm: [value: PickerValue]\n cancel: []\n}>()\n\nconst normalizedColumns = computed(() => props.columns.map((column) => column.map(normalizeOption)))\nconst innerIndexes = ref<number[]>([])\n\nwatch(\n () => [props.columns, props.modelValue],\n () => {\n innerIndexes.value = getIndexesByValue(props.modelValue)\n },\n { immediate: true, deep: true }\n)\n\nconst currentValues = computed(() => getValuesByIndexes(innerIndexes.value))\n\nconst handlePickerChange = (event: any) => {\n const values = event.detail.value as number[]\n const previousIndexes = [...innerIndexes.value]\n innerIndexes.value = values\n const changedColumn = getChangedColumn(previousIndexes, values)\n const nextValues = getValuesByIndexes(values)\n emit('update:modelValue', nextValues)\n emit('change', nextValues, changedColumn)\n}\n\nconst handleCancel = () => {\n emit('update:visible', false)\n emit('cancel')\n}\n\nconst handleConfirm = () => {\n emit('update:visible', false)\n emit('confirm', currentValues.value)\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n emit('cancel')\n }\n}\n\nfunction normalizeOption(option: string | number | PickerOption): PickerOption {\n if (typeof option === 'object' && option !== null) {\n return option\n }\n\n return {\n label: String(option),\n value: option\n }\n}\n\nfunction getIndexesByValue(values: PickerValue) {\n return normalizedColumns.value.map((column, index) => {\n const target = values[index]\n const foundIndex = column.findIndex((option) => option.value === target)\n return foundIndex >= 0 ? foundIndex : 0\n })\n}\n\nfunction getValuesByIndexes(indexes: number[]) {\n return normalizedColumns.value.map((column, index) => column[indexes[index] || 0]?.value).filter((value) => value !== undefined)\n}\n\nfunction getChangedColumn(previousIndexes: number[], nextIndexes: number[]) {\n return nextIndexes.findIndex((item, index) => item !== previousIndexes[index])\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-picker {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: flex-end;\n background: rgba(0, 0, 0, 0.45);\n z-index: 1000;\n\n &__popup {\n width: 100%;\n background: $--bg-color-2;\n border-radius: $--border-radius-lg $--border-radius-lg 0 0;\n overflow: hidden;\n }\n\n &__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 48px;\n padding: 0 $--spacing-lg;\n border-bottom: 1px solid $--border-color;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n font-weight: 600;\n }\n\n &__action {\n font-size: $--font-size-md;\n color: $--text-color-2;\n\n &--confirm {\n color: $--color-primary;\n }\n }\n\n &__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 240px;\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__view {\n width: 100%;\n height: 240px;\n }\n\n &__indicator {\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__option {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 48px;\n font-size: $--font-size-lg;\n color: $--text-color;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-datetime-picker\" @click=\"handleOverlayClick\">\n <view class=\"u-datetime-picker__popup\" @click.stop>\n <view class=\"u-datetime-picker__toolbar\">\n <text class=\"u-datetime-picker__action\" @click=\"handleCancel\">取消</text>\n <text class=\"u-datetime-picker__title\">{{ title }}</text>\n <text class=\"u-datetime-picker__action u-datetime-picker__action--confirm\" @click=\"handleConfirm\">确定</text>\n </view>\n\n <picker-view\n class=\"u-datetime-picker__view\"\n :value=\"indexes\"\n indicator-class=\"u-datetime-picker__indicator\"\n @change=\"handleChange\"\n >\n <picker-view-column v-for=\"(column, columnIndex) in displayColumns\" :key=\"columnIndex\">\n <view\n v-for=\"option in column\"\n :key=\"option.value\"\n class=\"u-datetime-picker__option\"\n >\n <text>{{ option.label }}</text>\n </view>\n </picker-view-column>\n </picker-view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ntype PickerType = 'datetime' | 'date' | 'year-month' | 'time'\n\ninterface PickerOption {\n label: string\n value: string\n}\n\ninterface DateTimeValues {\n year: string\n month: string\n day: string\n hour: string\n minute: string\n}\n\ninterface Props {\n visible?: boolean\n type?: PickerType\n modelValue?: Date | string | null\n title?: string\n minDate?: Date\n maxDate?: Date\n filter?: (type: string, values: string[]) => string[]\n formatter?: (type: string, value: string) => string\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n type: 'datetime',\n modelValue: null,\n title: '时间选择',\n minDate: () => new Date(2000, 0, 1, 0, 0),\n maxDate: () => new Date(2035, 11, 31, 23, 59),\n closeOnClickOverlay: false\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n 'update:modelValue': [value: Date | string]\n change: [value: Date | string]\n confirm: [value: Date | string]\n cancel: []\n}>()\n\nconst indexes = ref<number[]>([])\nconst innerValues = ref<DateTimeValues>(getInitialValues())\n\nconst columnTypes = computed(() => {\n if (props.type === 'date') return ['year', 'month', 'day']\n if (props.type === 'year-month') return ['year', 'month']\n if (props.type === 'time') return ['hour', 'minute']\n return ['year', 'month', 'day', 'hour', 'minute']\n})\n\nconst displayColumns = computed(() => {\n const values = innerValues.value\n return columnTypes.value.map((type) => buildColumn(type, values))\n})\n\nwatch(\n () => props.modelValue,\n () => {\n innerValues.value = getInitialValues()\n indexes.value = getIndexesByValues()\n },\n { immediate: true }\n)\n\nwatch(\n displayColumns,\n () => {\n alignValuesWithColumns()\n indexes.value = getIndexesByValues()\n },\n { deep: true }\n)\n\nconst currentValue = computed(() => formatOutput(innerValues.value))\n\nconst handleChange = (event: any) => {\n const nextIndexes = event.detail.value as number[]\n const nextValues = { ...innerValues.value }\n\n columnTypes.value.forEach((type, index) => {\n nextValues[type as keyof DateTimeValues] = displayColumns.value[index][nextIndexes[index] || 0]?.value || nextValues[type as keyof DateTimeValues]\n })\n\n innerValues.value = fixValues(nextValues)\n indexes.value = getIndexesByValues()\n emit('update:modelValue', currentValue.value)\n emit('change', currentValue.value)\n}\n\nconst handleCancel = () => {\n emit('update:visible', false)\n emit('cancel')\n}\n\nconst handleConfirm = () => {\n emit('update:visible', false)\n emit('confirm', currentValue.value)\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n emit('cancel')\n }\n}\n\nfunction getInitialValues(): DateTimeValues {\n const date = normalizeModelValue(props.modelValue)\n return {\n year: String(date.getFullYear()),\n month: pad(date.getMonth() + 1),\n day: pad(date.getDate()),\n hour: pad(date.getHours()),\n minute: pad(date.getMinutes())\n }\n}\n\nfunction normalizeModelValue(value: Date | string | null | undefined) {\n if (props.type === 'time' && typeof value === 'string' && value.includes(':')) {\n const [hour = '00', minute = '00'] = value.split(':')\n const date = new Date(props.minDate)\n date.setHours(Number(hour), Number(minute), 0, 0)\n return clampDate(date)\n }\n\n const date = value instanceof Date ? new Date(value) : value ? new Date(value) : new Date()\n return clampDate(date)\n}\n\nfunction clampDate(date: Date) {\n const time = date.getTime()\n const minTime = props.minDate.getTime()\n const maxTime = props.maxDate.getTime()\n\n if (time < minTime) return new Date(props.minDate)\n if (time > maxTime) return new Date(props.maxDate)\n return date\n}\n\nfunction buildColumn(type: string, values: DateTimeValues) {\n let options: string[] = []\n\n if (type === 'year') {\n for (let year = props.minDate.getFullYear(); year <= props.maxDate.getFullYear(); year += 1) {\n options.push(String(year))\n }\n }\n\n if (type === 'month') {\n const year = Number(values.year)\n const start = year === props.minDate.getFullYear() ? props.minDate.getMonth() + 1 : 1\n const end = year === props.maxDate.getFullYear() ? props.maxDate.getMonth() + 1 : 12\n for (let month = start; month <= end; month += 1) {\n options.push(pad(month))\n }\n }\n\n if (type === 'day') {\n const year = Number(values.year)\n const month = Number(values.month)\n const total = new Date(year, month, 0).getDate()\n const minDay = isSameYearMonth(year, month, props.minDate) ? props.minDate.getDate() : 1\n const maxDay = isSameYearMonth(year, month, props.maxDate) ? props.maxDate.getDate() : total\n for (let day = minDay; day <= maxDay; day += 1) {\n options.push(pad(day))\n }\n }\n\n if (type === 'hour') {\n const year = Number(values.year)\n const month = Number(values.month || '1')\n const day = Number(values.day || '1')\n const minHour = isSameDate(year, month, day, props.minDate) ? props.minDate.getHours() : 0\n const maxHour = isSameDate(year, month, day, props.maxDate) ? props.maxDate.getHours() : 23\n for (let hour = minHour; hour <= maxHour; hour += 1) {\n options.push(pad(hour))\n }\n }\n\n if (type === 'minute') {\n const year = Number(values.year || String(props.minDate.getFullYear()))\n const month = Number(values.month || '1')\n const day = Number(values.day || '1')\n const hour = Number(values.hour)\n const minMinute = isSameDateTimeHour(year, month, day, hour, props.minDate) ? props.minDate.getMinutes() : 0\n const maxMinute = isSameDateTimeHour(year, month, day, hour, props.maxDate) ? props.maxDate.getMinutes() : 59\n for (let minute = minMinute; minute <= maxMinute; minute += 1) {\n options.push(pad(minute))\n }\n }\n\n const filtered = props.filter ? props.filter(type, options) : options\n return filtered.map((value) => ({\n value,\n label: props.formatter ? props.formatter(type, value) : defaultFormatter(type, value)\n }))\n}\n\nfunction getIndexesByValues() {\n return columnTypes.value.map((type, index) => {\n const value = innerValues.value[type as keyof DateTimeValues]\n const column = displayColumns.value[index] || []\n const foundIndex = column.findIndex((item) => item.value === value)\n return foundIndex >= 0 ? foundIndex : 0\n })\n}\n\nfunction alignValuesWithColumns() {\n innerValues.value = fixValues(innerValues.value)\n}\n\nfunction fixValues(values: DateTimeValues) {\n const nextValues = { ...values }\n columnTypes.value.forEach((type, index) => {\n const column = displayColumns.value[index] || []\n const current = nextValues[type as keyof DateTimeValues]\n if (!column.some((item) => item.value === current) && column[0]) {\n nextValues[type as keyof DateTimeValues] = column[0].value\n }\n })\n return nextValues\n}\n\nfunction formatOutput(values: DateTimeValues) {\n if (props.type === 'time') {\n return `${values.hour}:${values.minute}`\n }\n\n const date = new Date(\n Number(values.year),\n Number(values.month || '1') - 1,\n Number(values.day || '1'),\n Number(values.hour || '0'),\n Number(values.minute || '0')\n )\n\n return props.type === 'year-month'\n ? `${values.year}-${values.month}`\n : props.type === 'date'\n ? new Date(date.getFullYear(), date.getMonth(), date.getDate())\n : date\n}\n\nfunction defaultFormatter(type: string, value: string) {\n if (type === 'year') return `${value}年`\n if (type === 'month') return `${value}月`\n if (type === 'day') return `${value}日`\n if (type === 'hour') return `${value}时`\n if (type === 'minute') return `${value}分`\n return value\n}\n\nfunction isSameYearMonth(year: number, month: number, date: Date) {\n return year === date.getFullYear() && month === date.getMonth() + 1\n}\n\nfunction isSameDate(year: number, month: number, day: number, date: Date) {\n return isSameYearMonth(year, month, date) && day === date.getDate()\n}\n\nfunction isSameDateTimeHour(year: number, month: number, day: number, hour: number, date: Date) {\n return isSameDate(year, month, day, date) && hour === date.getHours()\n}\n\nfunction pad(value: number) {\n return String(value).padStart(2, '0')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-datetime-picker {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: flex-end;\n background: rgba(0, 0, 0, 0.45);\n z-index: 1000;\n\n &__popup {\n width: 100%;\n background: $--bg-color-2;\n border-radius: $--border-radius-lg $--border-radius-lg 0 0;\n overflow: hidden;\n }\n\n &__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 48px;\n padding: 0 $--spacing-lg;\n border-bottom: 1px solid $--border-color;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n font-weight: 600;\n }\n\n &__action {\n font-size: $--font-size-md;\n color: $--text-color-2;\n\n &--confirm {\n color: $--color-primary;\n }\n }\n\n &__view {\n width: 100%;\n height: 240px;\n }\n\n &__indicator {\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__option {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 48px;\n font-size: $--font-size-lg;\n color: $--text-color;\n }\n}\n</style>\n","<template>\n <view\n class=\"u-rate\"\n :class=\"{\n 'u-rate--disabled': disabled,\n 'u-rate--readonly': readonly\n }\"\n >\n <view\n v-for=\"(_, index) in normalizedCount\"\n :key=\"index\"\n class=\"u-rate__item\"\n :style=\"itemStyle\"\n @click=\"handleClick(index, $event)\"\n >\n <text class=\"u-rate__icon u-rate__icon--void\" :style=\"voidStyle\">★</text>\n <view\n class=\"u-rate__icon-wrapper\"\n :style=\"getActiveWrapperStyle(index)\"\n >\n <text class=\"u-rate__icon u-rate__icon--active\" :style=\"activeStyle\">★</text>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype RateValue = number\n\ninterface Props {\n modelValue?: RateValue\n count?: number\n size?: number | string\n color?: string\n voidColor?: string\n readonly?: boolean\n disabled?: boolean\n allowHalf?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n count: 5,\n size: 20,\n color: '#ee0a24',\n voidColor: '#c8c9cc',\n readonly: false,\n disabled: false,\n allowHalf: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n change: [value: number]\n}>()\n\nconst normalizedCount = computed(() => Math.max(1, Math.floor(props.count)))\nconst normalizedValue = computed(() => {\n const value = Number(props.modelValue) || 0\n return Math.max(0, Math.min(normalizedCount.value, value))\n})\n\nconst itemStyle = computed(() => ({\n width: addUnit(props.size),\n height: addUnit(props.size)\n}))\n\nconst activeStyle = computed(() => ({\n color: props.color,\n fontSize: addUnit(props.size)\n}))\n\nconst voidStyle = computed(() => ({\n color: props.voidColor,\n fontSize: addUnit(props.size)\n}))\n\nconst getActiveWrapperStyle = (index: number) => {\n const diff = normalizedValue.value - index\n const percent = diff >= 1 ? 100 : diff > 0 ? 50 : 0\n\n return {\n width: `${percent}%`\n }\n}\n\nconst handleClick = (index: number, event: any) => {\n if (props.disabled || props.readonly) {\n return\n }\n\n let value = index + 1\n\n if (props.allowHalf) {\n // 获取触摸位置相对于元素的位置\n const touch = event.touches?.[0] || event\n const clientX = touch.clientX || 0\n\n // 使用 uni.createSelectorQuery 获取元素位置\n uni.createSelectorQuery()\n .select('.u-rate__item')\n .boundingClientRect((rect: any) => {\n if (rect) {\n const itemWidth = rect.width\n // 计算当前点击的item位置\n const itemLeft = rect.left + index * (itemWidth + 4) // 4是gap\n if (clientX - itemLeft <= itemWidth / 2) {\n value = index + 0.5\n }\n emit('update:modelValue', value)\n emit('change', value)\n } else {\n // fallback: 直接使用整星\n emit('update:modelValue', value)\n emit('change', value)\n }\n })\n .exec()\n } else {\n emit('update:modelValue', value)\n emit('change', value)\n }\n}\n\nfunction addUnit(value: string | number) {\n return typeof value === 'number' ? `${value}px` : value\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-rate {\n display: inline-flex;\n align-items: center;\n gap: $--spacing-xs;\n\n &--disabled,\n &--readonly {\n .u-rate__item {\n }\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__item {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon {\n line-height: 1;\n\n &--void {\n position: relative;\n z-index: 1;\n }\n\n &--active {\n display: block;\n }\n }\n\n &__icon-wrapper {\n position: absolute;\n top: 50%;\n left: 0;\n z-index: 2;\n overflow: hidden;\n transform: translateY(-50%);\n white-space: nowrap;\n }\n}\n</style>\n","<template>\n <view class=\"u-grid\">\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\ninterface Props {\n column?: number\n border?: boolean\n clickable?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n column: 4,\n border: false,\n clickable: false\n})\n\nconst emit = defineEmits<{\n click: [item: unknown, index: number]\n}>()\n\nconst column = computed(() => Math.max(1, Number(props.column) || 1))\nlet currentIndex = 0\n\nconst registerItem = () => {\n const index = currentIndex\n currentIndex += 1\n return index\n}\n\nconst onItemClick = (payload: { item: unknown; index: number }) => {\n emit('click', payload.item, payload.index)\n}\n\nprovide('u-grid', {\n column,\n border: computed(() => props.border),\n clickable: computed(() => props.clickable),\n registerItem,\n onItemClick\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-grid {\n display: flex;\n flex-wrap: wrap;\n background-color: $--bg-color-2;\n}\n</style>\n","<template>\n <view\n class=\"u-grid-item\"\n :class=\"{\n 'u-grid-item--border': hasBorder,\n 'u-grid-item--clickable': isClickable\n }\"\n :style=\"itemStyle\"\n @click=\"handleClick\"\n >\n <view v-if=\"$slots.icon || icon || iconUrl\" class=\"u-grid-item__icon\">\n <slot name=\"icon\">\n <image v-if=\"iconUrl\" class=\"u-grid-item__icon-image\" :src=\"iconUrl\" mode=\"aspectFit\" />\n <text v-else-if=\"icon\" class=\"u-grid-item__icon-text\">{{ icon }}</text>\n </slot>\n <view v-if=\"badge !== undefined && badge !== null && badge !== ''\" class=\"u-grid-item__badge\">\n <text class=\"u-grid-item__badge-text\">{{ badge }}</text>\n </view>\n </view>\n <view v-if=\"text || $slots.default\" class=\"u-grid-item__text\">\n <slot>{{ text }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, useSlots } from 'vue'\nimport type { ComputedRef } from 'vue'\n\ninterface GridContext {\n column: ComputedRef<number>\n border: ComputedRef<boolean>\n clickable: ComputedRef<boolean>\n registerItem: () => number\n onItemClick: (payload: { item: unknown; index: number }) => void\n}\n\ninterface Props {\n text?: string\n icon?: string\n iconUrl?: string\n badge?: string | number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n text: '',\n icon: '',\n iconUrl: ''\n})\n\nconst emit = defineEmits<{\n click: [item: { text: string; icon: string; iconUrl: string; badge?: string | number }, index: number]\n}>()\n\nconst slots = useSlots()\nconst grid = inject<GridContext | null>('u-grid', null)\nconst itemIndex = grid?.registerItem() ?? -1\n\nconst itemData = computed(() => ({\n text: props.text,\n icon: props.icon,\n iconUrl: props.iconUrl,\n badge: props.badge\n}))\n\nconst hasBorder = computed(() => grid?.border.value ?? false)\nconst isClickable = computed(() => grid?.clickable.value ?? false)\nconst column = computed(() => grid?.column.value ?? 4)\n\nconst itemStyle = computed(() => {\n const width = `${100 / column.value}%`\n\n return {\n flexBasis: width,\n maxWidth: width\n }\n})\n\nconst handleClick = () => {\n if (!grid?.clickable.value) {\n return\n }\n\n const index = itemIndex\n emit('click', itemData.value, index)\n grid.onItemClick({ item: itemData.value, index })\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-grid-item {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-lg $--spacing-sm;\n box-sizing: border-box;\n background-color: $--bg-color-2;\n\n &--clickable {\n &:active {\n background-color: $--bg-color;\n }\n }\n\n &--border {\n border-right: 1px solid $--border-color;\n border-bottom: 1px solid $--border-color;\n }\n\n &__icon {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n margin-bottom: $--spacing-sm;\n }\n\n &__icon-image {\n width: 32px;\n height: 32px;\n }\n\n &__icon-text {\n font-size: 24px;\n line-height: 1;\n }\n\n &__text {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n line-height: 1.4;\n text-align: center;\n word-break: break-all;\n }\n\n &__badge {\n position: absolute;\n top: -4px;\n right: -8px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 999px;\n background-color: $--color-danger;\n box-sizing: border-box;\n }\n\n &__badge-text {\n font-size: 10px;\n line-height: 1;\n color: $--text-color-white;\n }\n}\n</style>\n","<template>\n <view class=\"u-swiper\">\n <swiper\n class=\"u-swiper__wrapper\"\n :style=\"{ height: swiperHeight }\"\n :autoplay=\"autoplay\"\n :interval=\"interval\"\n :duration=\"duration\"\n :indicator-dots=\"false\"\n :circular=\"circular\"\n :vertical=\"vertical\"\n :current=\"currentIndex\"\n @change=\"handleChange\"\n @animationfinish=\"handleAnimationFinish\"\n >\n <slot />\n </swiper>\n\n <!-- 加载状态 -->\n <view v-if=\"loading\" class=\"u-swiper__loading\">\n <view class=\"u-swiper__loading-icon\" />\n </view>\n\n <!-- 标题 -->\n <view v-if=\"showTitle && currentTitle\" class=\"u-swiper__title\">\n <text class=\"u-swiper__title-text\">{{ currentTitle }}</text>\n </view>\n\n <!-- 自定义指示器 -->\n <view v-if=\"showIndicator && indicatorSlot\" class=\"u-swiper__indicator\">\n <slot name=\"indicator\" :current=\"currentIndex\" :total=\"itemCount\" />\n </view>\n\n <!-- 默认指示器样式 -->\n <view v-if=\"showIndicator && !customIndicator && !indicatorSlot\" :class=\"indicatorClass\" :style=\"indicatorStyle\">\n <view\n v-for=\"i in itemCount\"\n :key=\"i\"\n class=\"u-swiper__indicator-item\"\n :class=\"{ 'u-swiper__indicator-item--active': i - 1 === currentIndex }\"\n />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useSlots, watch, provide } from 'vue'\n\ntype IndicatorPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n\ninterface Props {\n autoplay?: boolean\n interval?: number\n duration?: number\n circular?: boolean\n vertical?: boolean\n indicatorDots?: boolean\n indicatorColor?: string\n indicatorActiveColor?: string\n indicatorPosition?: IndicatorPosition\n loading?: boolean\n showTitle?: boolean\n height?: string | number\n card?: boolean\n cardScale?: number\n cardSpace?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n autoplay: true,\n interval: 3000,\n duration: 500,\n circular: true,\n vertical: false,\n indicatorDots: true,\n indicatorColor: 'rgba(255, 255, 255, 0.5)',\n indicatorActiveColor: '#ffffff',\n indicatorPosition: 'bottom-right',\n loading: false,\n showTitle: false,\n height: 200,\n card: false,\n cardScale: 0.9,\n cardSpace: 10\n})\n\nconst emit = defineEmits<{\n change: [index: number]\n animationfinish: [index: number]\n}>()\n\nconst slots = useSlots()\nconst currentIndex = ref(0)\nconst itemCount = ref(0)\nconst currentTitle = ref('')\nconst itemTitles = ref<string[]>([])\n\nconst indicatorSlot = computed(() => Boolean(slots.indicator))\nconst customIndicator = computed(() => props.card)\n\nconst showIndicator = computed(() => props.indicatorDots && itemCount.value > 1)\n\nconst indicatorClass = computed(() => [\n 'u-swiper__indicator-wrapper',\n `u-swiper__indicator-wrapper--${props.indicatorPosition}`,\n {\n 'u-swiper__indicator-wrapper--vertical': props.vertical\n }\n])\n\nconst indicatorStyle = computed(() => {\n const style: Record<string, string> = {}\n\n if (props.indicatorColor) {\n style['--indicator-color'] = props.indicatorColor\n }\n if (props.indicatorActiveColor) {\n style['--indicator-active-color'] = props.indicatorActiveColor\n }\n\n return style\n})\n\nconst swiperHeight = computed(() => {\n if (typeof props.height === 'number') {\n return `${props.height}px`\n }\n return props.height\n})\n\nconst registerItem = (title?: string) => {\n const index = itemCount.value\n itemCount.value += 1\n if (title) {\n itemTitles.value.push(title)\n }\n return index\n}\n\nconst handleChange = (e: any) => {\n const { current } = e.detail\n currentIndex.value = current\n if (itemTitles.value[current]) {\n currentTitle.value = itemTitles.value[current]\n }\n emit('change', current)\n}\n\nconst handleAnimationFinish = (e: any) => {\n emit('animationfinish', e.detail.current)\n}\n\nconst setActiveIndex = (index: number) => {\n currentIndex.value = index\n}\n\nwatch(() => props.loading, (val) => {\n if (!val && itemTitles.value[currentIndex.value]) {\n currentTitle.value = itemTitles.value[currentIndex.value]\n }\n})\n\nprovide('u-swiper', {\n card: computed(() => props.card),\n cardScale: computed(() => props.cardScale),\n cardSpace: computed(() => props.cardSpace),\n vertical: computed(() => props.vertical),\n height: swiperHeight,\n registerItem,\n setActiveIndex\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-swiper {\n position: relative;\n width: 100%;\n overflow: hidden;\n\n &__wrapper {\n width: 100%;\n }\n\n &__loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(0, 0, 0, 0.3);\n z-index: 10;\n\n &-icon {\n width: 32px;\n height: 32px;\n border: 3px solid rgba(255, 255, 255, 0.3);\n border-top-color: #fff;\n border-radius: 50%;\n animation: u-swiper-loading 0.8s linear infinite;\n }\n }\n\n @keyframes u-swiper-loading {\n to {\n transform: rotate(360deg);\n }\n }\n\n &__title {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding: $--spacing-sm $--spacing-base;\n background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.5));\n z-index: 5;\n\n &-text {\n font-size: $--font-size-base;\n color: $--text-color-white;\n line-height: 1.4;\n }\n }\n\n &__indicator {\n position: absolute;\n z-index: 5;\n }\n\n &__indicator-wrapper {\n position: absolute;\n display: flex;\n z-index: 5;\n padding: $--spacing-xs $--spacing-sm;\n\n &--top-left {\n top: 0;\n left: 0;\n }\n\n &--top-right {\n top: 0;\n right: 0;\n }\n\n &--bottom-left {\n bottom: 0;\n left: 0;\n }\n\n &--bottom-right {\n bottom: 0;\n right: 0;\n }\n\n &--vertical {\n flex-direction: column;\n }\n }\n\n &__indicator-item {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--indicator-color, rgba(255, 255, 255, 0.5));\n margin: 0 4px;\n transition: all 0.3s;\n\n &--active {\n width: 16px;\n border-radius: 4px;\n background-color: var(--indicator-active-color, #fff);\n }\n }\n}\n\n.u-swiper__indicator-wrapper--vertical .u-swiper__indicator-item {\n width: 6px;\n height: 6px;\n margin: 4px 0;\n\n &--active {\n width: 6px;\n height: 16px;\n }\n}\n</style>","<template>\n <swiper-item class=\"u-swiper-item\" :class=\"{ 'u-swiper-item--card': isCard }\" :style=\"itemStyle\">\n <slot />\n </swiper-item>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport type { ComputedRef } from 'vue'\n\ninterface SwiperContext {\n card: ComputedRef<boolean>\n cardScale: ComputedRef<number>\n cardSpace: ComputedRef<number>\n vertical: ComputedRef<boolean>\n height: ComputedRef<string>\n registerItem: (title?: string) => number\n setActiveIndex: (index: number) => void\n}\n\ninterface Props {\n title?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: ''\n})\n\nconst swiper = inject<SwiperContext | null>('u-swiper', null)\n\nif (swiper) {\n swiper.registerItem(props.title)\n}\n\nconst isCard = computed(() => swiper?.card.value ?? false)\nconst cardScale = computed(() => swiper?.cardScale.value ?? 0.9)\nconst cardSpace = computed(() => swiper?.cardSpace.value ?? 10)\nconst isVertical = computed(() => swiper?.vertical.value ?? false)\nconst swiperHeight = computed(() => swiper?.height.value ?? '200px')\n\nconst itemStyle = computed(() => {\n if (!isCard.value) {\n return {}\n }\n\n if (isVertical.value) {\n return {\n height: swiperHeight.value,\n padding: `${cardSpace.value}px 0`\n }\n }\n\n return {\n width: `${cardScale.value * 100}%`,\n marginLeft: `${(1 - cardScale.value) * 50}%`,\n marginRight: `${(1 - cardScale.value) * 50}%`\n }\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-swiper-item {\n width: 100%;\n height: 100%;\n overflow: hidden;\n\n &--card {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n</style>","<template>\n <view\n class=\"u-search\"\n :class=\"{\n 'u-search--disabled': disabled,\n 'u-search--focus': isFocus\n }\"\n >\n <view class=\"u-search__content\" :style=\"contentStyle\">\n <view v-if=\"showSearchIcon\" class=\"u-search__icon\">\n <text class=\"u-search__icon-text\">🔍</text>\n </view>\n\n <view class=\"u-search__body\">\n <input\n class=\"u-search__control\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :placeholder-style=\"placeholderStyle\"\n :placeholder-class=\"'u-search__placeholder'\"\n :disabled=\"disabled\"\n :maxlength=\"maxlength\"\n :focus=\"focus\"\n :confirm-type=\"confirmType\"\n :adjust-position=\"adjustPosition\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @confirm=\"handleSearch\"\n />\n </view>\n\n <view v-if=\"clearable && modelValue\" class=\"u-search__clear\" @click=\"handleClear\">\n <text class=\"u-search__clear-icon\">×</text>\n </view>\n </view>\n\n <view v-if=\"$slots.action || actionText\" class=\"u-search__action\" @click=\"handleAction\">\n <slot name=\"action\">\n <text class=\"u-search__action-text\">{{ actionText }}</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\ntype ConfirmType = 'send' | 'search' | 'next' | 'go' | 'done'\n\ninterface Props {\n modelValue?: string | number\n type?: 'text' | 'number' | 'idcard' | 'digit'\n placeholder?: string\n placeholderStyle?: string\n disabled?: boolean\n maxlength?: number\n clearable?: boolean\n focus?: boolean\n confirmType?: ConfirmType\n adjustPosition?: boolean\n showSearchIcon?: boolean\n actionText?: string\n inputAlign?: 'left' | 'center' | 'right'\n shape?: 'square' | 'round'\n background?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n type: 'text',\n placeholder: '请输入搜索关键词',\n disabled: false,\n maxlength: 140,\n clearable: true,\n focus: false,\n confirmType: 'search',\n adjustPosition: true,\n showSearchIcon: true,\n actionText: '',\n inputAlign: 'left',\n shape: 'round',\n background: '#f7f8fa'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n input: [value: string]\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n search: [value: string]\n clear: []\n action: []\n}>()\n\nconst isFocus = ref(false)\n\nconst contentStyle = computed(() => {\n const style: Record<string, string> = {\n background: props.background,\n 'text-align': props.inputAlign\n }\n if (props.shape === 'round') {\n style['border-radius'] = '999px'\n }\n return style\n})\n\nconst handleInput = (event: any) => {\n const value = event.detail.value\n emit('update:modelValue', value)\n emit('input', value)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n isFocus.value = true\n emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n isFocus.value = false\n emit('blur', event)\n}\n\nconst handleSearch = (event: any) => {\n emit('search', event.detail.value)\n}\n\nconst handleClear = () => {\n emit('update:modelValue', '')\n emit('input', '')\n emit('clear')\n}\n\nconst handleAction = () => {\n if (!props.disabled) {\n emit('action')\n emit('search', String(props.modelValue))\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-search {\n display: flex;\n align-items: center;\n width: 100%;\n padding: $--spacing-sm $--spacing-md;\n\n &--disabled {\n opacity: 0.6;\n }\n\n &__content {\n flex: 1;\n display: flex;\n align-items: center;\n height: $--search-height;\n padding: 0 $--spacing-md;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-lg;\n transition: all $--transition-duration;\n }\n\n &--focus .u-search__content {\n background-color: $--bg-color-2;\n box-shadow: 0 0 0 1px $--color-primary;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n margin-right: $--spacing-sm;\n }\n\n &__icon-text {\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__body {\n flex: 1;\n display: flex;\n align-items: center;\n }\n\n &__control {\n flex: 1;\n width: 100%;\n height: 100%;\n font-size: $--font-size-md;\n color: $--text-color;\n background: transparent;\n }\n\n &__placeholder {\n color: $--text-color-3;\n }\n\n &__clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: $--spacing-sm;\n background-color: $--text-color-3;\n border-radius: 50%;\n }\n\n &__clear-icon {\n color: $--bg-color-2;\n font-size: 12px;\n line-height: 1;\n }\n\n &__action {\n display: flex;\n align-items: center;\n padding: $--spacing-sm $--spacing-md;\n }\n\n &__action-text {\n font-size: $--font-size-md;\n color: $--color-primary;\n }\n}\n</style>","<template>\n <view\n class=\"u-number-box\"\n :class=\"{\n 'u-number-box--disabled': disabled\n }\"\n >\n <view\n class=\"u-number-box__btn u-number-box__btn--minus\"\n :class=\"{\n 'u-number-box__btn--disabled': minusDisabled\n }\"\n :style=\"btnStyle\"\n @click=\"handleMinus\"\n @touchstart=\"startLongPress('minus')\"\n @touchend=\"stopLongPress\"\n @touchcancel=\"stopLongPress\"\n >\n <text class=\"u-number-box__btn-icon\">−</text>\n </view>\n\n <input\n class=\"u-number-box__input\"\n :class=\"{\n 'u-number-box__input--disabled': disabledInput\n }\"\n :style=\"inputStyle\"\n :type=\"inputType\"\n :value=\"displayValue\"\n :disabled=\"disabled || disabledInput\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n\n <view\n class=\"u-number-box__btn u-number-box__btn--plus\"\n :class=\"{\n 'u-number-box__btn--disabled': plusDisabled\n }\"\n :style=\"btnStyle\"\n @click=\"handlePlus\"\n @touchstart=\"startLongPress('plus')\"\n @touchend=\"stopLongPress\"\n @touchcancel=\"stopLongPress\"\n >\n <text class=\"u-number-box__btn-icon\">+</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onUnmounted } from 'vue'\n\ninterface Props {\n modelValue?: number\n min?: number\n max?: number\n step?: number\n integer?: boolean\n decimalPlaces?: number\n disabled?: boolean\n disabledInput?: boolean\n disabledLongPress?: boolean\n buttonSize?: number | string\n inputWidth?: number | string\n theme?: 'default' | 'primary'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n min: 0,\n max: Infinity,\n step: 1,\n integer: false,\n decimalPlaces: 0,\n disabled: false,\n disabledInput: false,\n disabledLongPress: false,\n buttonSize: 28,\n inputWidth: 36,\n theme: 'default'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n change: [value: number]\n overlimit: [type: 'minus' | 'plus']\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n}>()\n\nconst currentValue = ref(props.modelValue)\nlet longPressTimer: ReturnType<typeof setInterval> | null = null\n\nconst minusDisabled = computed(() => props.disabled || currentValue.value <= props.min)\nconst plusDisabled = computed(() => props.disabled || currentValue.value >= props.max)\n\nconst inputType = computed(() => props.integer ? 'number' : 'digit')\n\nconst displayValue = computed(() => {\n if (props.decimalPlaces > 0) {\n return currentValue.value.toFixed(props.decimalPlaces)\n }\n return currentValue.value\n})\n\nconst btnSize = computed(() => {\n const size = props.buttonSize\n return typeof size === 'number' ? `${size}px` : size\n})\n\nconst iptWidth = computed(() => {\n const width = props.inputWidth\n return typeof width === 'number' ? `${width}px` : width\n})\n\nconst btnStyle = computed(() => ({\n width: btnSize.value,\n height: btnSize.value,\n fontSize: `calc(${btnSize.value} * 0.5)`,\n backgroundColor: props.theme === 'primary' ? '#1989fa' : '#f2f3f5',\n color: props.theme === 'primary' ? '#fff' : '#323233'\n}))\n\nconst inputStyle = computed(() => ({\n width: iptWidth.value,\n height: btnSize.value\n}))\n\nwatch(() => props.modelValue, (val) => {\n currentValue.value = formatValue(val)\n})\n\nconst formatValue = (val: number): number => {\n let value = Number(val)\n if (isNaN(value)) value = props.min\n if (props.integer) value = Math.round(value)\n value = Math.max(props.min, Math.min(props.max, value))\n return value\n}\n\nconst updateValue = (val: number) => {\n const formatted = formatValue(val)\n currentValue.value = formatted\n emit('update:modelValue', formatted)\n emit('change', formatted)\n}\n\nconst handleMinus = () => {\n if (minusDisabled.value) {\n emit('overlimit', 'minus')\n return\n }\n updateValue(currentValue.value - props.step)\n}\n\nconst handlePlus = () => {\n if (plusDisabled.value) {\n emit('overlimit', 'plus')\n return\n }\n updateValue(currentValue.value + props.step)\n}\n\nconst handleInput = (event: any) => {\n const val = event.detail.value\n if (val === '' || val === '-') return\n let value = Number(val)\n if (!isNaN(value)) {\n currentValue.value = value\n }\n}\n\nconst handleBlur = (event: FocusEvent) => {\n updateValue(currentValue.value)\n emit('blur', event)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event)\n}\n\nconst startLongPress = (type: 'minus' | 'plus') => {\n if (props.disabledLongPress || props.disabled) return\n\n const action = type === 'minus' ? handleMinus : handlePlus\n longPressTimer = setInterval(() => {\n action()\n }, 150)\n}\n\nconst stopLongPress = () => {\n if (longPressTimer) {\n clearInterval(longPressTimer)\n longPressTimer = null\n }\n}\n\nonUnmounted(() => {\n stopLongPress()\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-number-box {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n transition: all $--transition-duration;\n border-radius: $--border-radius-sm;\n\n &:active {\n opacity: 0.7;\n }\n\n &--disabled {\n opacity: 0.4;\n }\n }\n\n &__btn-icon {\n line-height: 1;\n }\n\n &__input {\n text-align: center;\n font-size: $--font-size-md;\n color: $--text-color;\n background: $--bg-color-2;\n border: 1px solid $--border-color;\n border-radius: $--border-radius-sm;\n outline: none;\n\n &--disabled {\n background: $--bg-color;\n }\n }\n}\n</style>","<template>\n <view class=\"u-upload\">\n <view class=\"u-upload__list\">\n <!-- 已上传文件列表 -->\n <view\n v-for=\"(file, index) in fileList\"\n :key=\"index\"\n class=\"u-upload__item\"\n :class=\"{\n 'u-upload__item--error': file.status === 'error',\n 'u-upload__item--uploading': file.status === 'uploading'\n }\"\n >\n <!-- 图片预览 -->\n <image\n v-if=\"isImage(file)\"\n class=\"u-upload__preview\"\n :src=\"file.url || file.thumb\"\n mode=\"aspectFill\"\n @click=\"handlePreview(file, index)\"\n />\n\n <!-- 视频预览 -->\n <view v-else-if=\"isVideo(file)\" class=\"u-upload__video\">\n <image\n class=\"u-upload__preview\"\n :src=\"file.thumb || defaultVideoThumb\"\n mode=\"aspectFill\"\n @click=\"handlePreview(file, index)\"\n />\n <view class=\"u-upload__video-icon\">\n <text>▶</text>\n </view>\n </view>\n\n <!-- 其他文件 -->\n <view v-else class=\"u-upload__file\" @click=\"handlePreview(file, index)\">\n <text class=\"u-upload__file-icon\">📄</text>\n <text class=\"u-upload__file-name\">{{ getFileName(file) }}</text>\n </view>\n\n <!-- 上传进度 -->\n <view v-if=\"file.status === 'uploading'\" class=\"u-upload__progress\">\n <view class=\"u-upload__progress-bar\" :style=\"{ width: file.progress + '%' }\"></view>\n </view>\n\n <!-- 删除按钮 -->\n <view\n v-if=\"deletable && file.status !== 'uploading'\"\n class=\"u-upload__delete\"\n @click=\"handleDelete(index)\"\n >\n <text class=\"u-upload__delete-icon\">×</text>\n </view>\n\n <!-- 上传失败提示 -->\n <view v-if=\"file.status === 'error'\" class=\"u-upload__error\">\n <text>上传失败</text>\n </view>\n </view>\n\n <!-- 上传按钮 -->\n <view\n v-if=\"showUploadBtn\"\n class=\"u-upload__trigger\"\n :class=\"{\n 'u-upload__trigger--disabled': disabled || fileList.length >= maxCount\n }\"\n @click=\"handleTrigger\"\n >\n <slot name=\"trigger\">\n <view class=\"u-upload__trigger-default\">\n <text class=\"u-upload__trigger-icon\">+</text>\n <text v-if=\"triggerText\" class=\"u-upload__trigger-text\">{{ triggerText }}</text>\n </view>\n </slot>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ninterface UploadFile {\n url?: string\n thumb?: string\n name?: string\n size?: number\n status?: 'pending' | 'uploading' | 'done' | 'error'\n progress?: number\n type?: string\n file?: any\n}\n\ninterface Props {\n modelValue?: UploadFile[]\n accept?: 'image' | 'video' | 'media' | 'all'\n multiple?: boolean\n maxCount?: number\n maxSize?: number\n disabled?: boolean\n deletable?: boolean\n showUpload?: boolean\n triggerText?: string\n previewFull?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: () => [],\n accept: 'image',\n multiple: false,\n maxCount: 99,\n maxSize: 10 * 1024 * 1024,\n disabled: false,\n deletable: true,\n showUpload: true,\n triggerText: '',\n previewFull: true\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [files: UploadFile[]]\n change: [files: UploadFile[]]\n success: [file: UploadFile]\n fail: [error: any]\n delete: [file: UploadFile, index: number]\n preview: [file: UploadFile, index: number]\n oversize: [files: UploadFile[]]\n overcount: []\n}>()\n\nconst fileList = ref<UploadFile[]>(props.modelValue)\n// 默认视频缩略图占位符\nconst defaultVideoThumb = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA4MCA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iODAiIGZpbGw9IiNFNUU1RTUiLz48dGV4dCB4PSI1MCUiIHk9IjUwJSIgZmlsbD0iIzk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgZm9udC1zaXplPSIyNCI+▶PC90ZXh0Pjwvc3ZnPg=='\n\nconst showUploadBtn = computed(() => {\n return props.showUpload && (!props.maxCount || fileList.value.length < props.maxCount)\n})\n\nwatch(() => props.modelValue, (val) => {\n fileList.value = val\n}, { deep: true })\n\nconst isImage = (file: UploadFile) => {\n if (file.type) return file.type.startsWith('image/')\n const url = file.url || ''\n return /\\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url)\n}\n\nconst isVideo = (file: UploadFile) => {\n if (file.type) return file.type.startsWith('video/')\n const url = file.url || ''\n return /\\.(mp4|mov|avi|mkv|webm)$/i.test(url)\n}\n\nconst getFileName = (file: UploadFile) => {\n if (file.name) return file.name\n const url = file.url || ''\n const match = url.match(/[^/]+$/)\n return match ? match[0] : '文件'\n}\n\nconst handleTrigger = () => {\n if (props.disabled || fileList.value.length >= props.maxCount) {\n if (fileList.value.length >= props.maxCount) {\n emit('overcount')\n }\n return\n }\n\n // 模拟文件选择,实际在uni-app中使用 uni.chooseImage/uni.chooseVideo\n // 这里仅作演示\n}\n\nconst handlePreview = (file: UploadFile, index: number) => {\n emit('preview', file, index)\n}\n\nconst handleDelete = (index: number) => {\n const file = fileList.value[index]\n fileList.value.splice(index, 1)\n emit('update:modelValue', fileList.value)\n emit('change', fileList.value)\n emit('delete', file, index)\n}\n\nconst afterRead = (files: UploadFile | UploadFile[]) => {\n const fileArray = Array.isArray(files) ? files : [files]\n\n // 检查数量限制\n if (fileList.value.length + fileArray.length > props.maxCount) {\n emit('overcount')\n return\n }\n\n // 检查大小限制\n const oversizeFiles = fileArray.filter(f => f.size && f.size > props.maxSize)\n if (oversizeFiles.length > 0) {\n emit('oversize', oversizeFiles)\n return\n }\n\n // 添加文件到列表\n fileArray.forEach(file => {\n file.status = 'uploading'\n file.progress = 0\n fileList.value.push(file)\n\n // 模拟上传过程\n simulateUpload(file)\n })\n}\n\nconst simulateUpload = (file: UploadFile) => {\n // 模拟上传进度\n let progress = 0\n const timer = setInterval(() => {\n progress += Math.random() * 30\n if (progress >= 100) {\n progress = 100\n file.status = 'done'\n file.progress = 100\n clearInterval(timer)\n emit('update:modelValue', fileList.value)\n emit('change', fileList.value)\n emit('success', file)\n } else {\n file.progress = progress\n }\n }, 200)\n}\n\n// 提供外部调用的方法\ndefineExpose({\n afterRead,\n fileList\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-upload {\n width: 100%;\n\n &__list {\n display: flex;\n flex-wrap: wrap;\n gap: $--spacing-sm;\n }\n\n &__item {\n position: relative;\n width: 80px;\n height: 80px;\n border-radius: $--border-radius-md;\n overflow: hidden;\n background: $--bg-color-2;\n border: 1px solid $--border-color;\n\n &--error {\n border-color: $--color-danger;\n }\n\n &--uploading {\n opacity: 0.8;\n }\n }\n\n &__preview {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n &__video {\n width: 100%;\n height: 100%;\n position: relative;\n\n &-icon {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.3);\n color: #fff;\n font-size: 24px;\n }\n }\n\n &__file {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-xs;\n\n &-icon {\n font-size: 24px;\n margin-bottom: 4px;\n }\n\n &-name {\n font-size: $--font-size-xs;\n color: $--text-color-2;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n }\n }\n\n &__progress {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: rgba(255, 255, 255, 0.8);\n\n &-bar {\n height: 100%;\n background: $--color-primary;\n transition: width 0.2s;\n }\n }\n\n &__delete {\n position: absolute;\n top: 0;\n right: 0;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 0 $--border-radius-md 0 0;\n\n &-icon {\n color: #fff;\n font-size: 12px;\n }\n }\n\n &__error {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(238, 10, 36, 0.1);\n color: $--color-danger;\n font-size: $--font-size-xs;\n }\n\n &__trigger {\n width: 80px;\n height: 80px;\n border-radius: $--border-radius-md;\n background: $--bg-color;\n border: 1px solid $--border-color;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &-default {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n &-icon {\n font-size: 24px;\n color: $--text-color-3;\n }\n\n &-text {\n font-size: $--font-size-xs;\n color: $--text-color-3;\n margin-top: 4px;\n }\n }\n}\n</style>","<template>\n <view\n class=\"u-textarea\"\n :class=\"{\n 'u-textarea--disabled': disabled,\n 'u-textarea--error': error,\n 'u-textarea--focus': isFocus\n }\"\n >\n <textarea\n class=\"u-textarea__control\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :placeholder-style=\"placeholderStyle\"\n :placeholder-class=\"'u-textarea__placeholder'\"\n :disabled=\"disabled\"\n :maxlength=\"maxlength\"\n :focus=\"focus\"\n :auto-height=\"autoHeight\"\n :fixed=\"fixed\"\n :cursor-spacing=\"cursorSpacing\"\n :show-confirm-bar=\"showConfirmBar\"\n :adjust-position=\"adjustPosition\"\n :style=\"textareaStyle\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @confirm=\"handleConfirm\"\n @linechange=\"handleLineChange\"\n />\n\n <view v-if=\"showWordLimit && maxlength\" class=\"u-textarea__limit\">\n <text class=\"u-textarea__limit-text\">{{ currentLength }}/{{ maxlength }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\ninterface Props {\n modelValue?: string\n placeholder?: string\n placeholderStyle?: string\n disabled?: boolean\n maxlength?: number\n focus?: boolean\n autoHeight?: boolean\n fixed?: boolean\n cursorSpacing?: number\n showConfirmBar?: boolean\n adjustPosition?: boolean\n showWordLimit?: boolean\n error?: boolean\n rows?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n placeholder: '请输入内容',\n disabled: false,\n maxlength: -1,\n focus: false,\n autoHeight: false,\n fixed: false,\n cursorSpacing: 0,\n showConfirmBar: true,\n adjustPosition: true,\n showWordLimit: false,\n error: false,\n rows: 3\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n input: [value: string]\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n confirm: [value: string]\n linechange: [event: any]\n}>()\n\nconst isFocus = ref(false)\n\nconst currentLength = computed(() => {\n return String(props.modelValue).length\n})\n\nconst textareaStyle = computed(() => {\n if (props.autoHeight) return {}\n return {\n minHeight: `calc($--font-size-md * $--textarea-line-height * ${props.rows})`\n }\n})\n\nconst handleInput = (event: any) => {\n const value = event.detail.value\n emit('update:modelValue', value)\n emit('input', value)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n isFocus.value = true\n emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n isFocus.value = false\n emit('blur', event)\n}\n\nconst handleConfirm = (event: any) => {\n emit('confirm', event.detail.value)\n}\n\nconst handleLineChange = (event: any) => {\n emit('linechange', event)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-textarea {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: $--spacing-md;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-md;\n border: 1px solid $--border-color;\n transition: all $--transition-duration;\n\n &--focus {\n border-color: $--color-primary;\n }\n\n &--error {\n border-color: $--color-danger;\n }\n\n &--disabled {\n background-color: $--bg-color;\n }\n\n &__control {\n width: 100%;\n min-height: calc($--font-size-md * $--textarea-line-height * 3);\n font-size: $--font-size-md;\n line-height: $--textarea-line-height;\n color: $--text-color;\n background: transparent;\n resize: none;\n outline: none;\n border: none;\n }\n\n &__placeholder {\n color: $--text-color-3;\n }\n\n &__limit {\n display: flex;\n justify-content: flex-end;\n padding-top: $--spacing-sm;\n }\n\n &__limit-text {\n font-size: $--font-size-sm;\n color: $--text-color-3;\n }\n\n &--disabled &__limit-text {\n color: $--text-color-3;\n }\n\n &--error &__limit-text {\n color: $--color-danger;\n }\n}\n</style>","<template>\n <view\n class=\"u-slider\"\n :class=\"{\n 'u-slider--disabled': disabled\n }\"\n >\n <!-- 最小值标签 -->\n <view v-if=\"showMinMax\" class=\"u-slider__min\">\n <text class=\"u-slider__label\">{{ min }}</text>\n </view>\n\n <!-- 滑动轨道 -->\n <view\n class=\"u-slider__track\"\n :style=\"trackStyle\"\n @click=\"handleTrackClick\"\n @touchstart=\"handleTouchStart\"\n @touchmove=\"handleTouchMove\"\n @touchend=\"handleTouchEnd\"\n >\n <!-- 已选择区域 -->\n <view class=\"u-slider__bar\" :style=\"barStyle\">\n <!-- 滑块 -->\n <view\n v-if=\"!range\"\n class=\"u-slider__button\"\n :style=\"buttonStyle\"\n @touchstart.stop=\"handleButtonTouchStart\"\n @touchmove.stop=\"handleButtonTouchMove\"\n @touchend.stop=\"handleButtonTouchEnd\"\n >\n <view v-if=\"showValue\" class=\"u-slider__tooltip\">\n <text class=\"u-slider__tooltip-text\">{{ currentValue }}</text>\n </view>\n </view>\n\n <!-- 双滑块 -->\n <template v-else>\n <view\n class=\"u-slider__button u-slider__button--start\"\n :style=\"startButtonStyle\"\n @touchstart.stop=\"handleStartButtonTouchStart\"\n @touchmove.stop=\"handleStartButtonTouchMove\"\n @touchend.stop=\"handleButtonTouchEnd\"\n >\n <view v-if=\"showValue\" class=\"u-slider__tooltip\">\n <text class=\"u-slider__tooltip-text\">{{ startValue }}</text>\n </view>\n </view>\n <view\n class=\"u-slider__button u-slider__button--end\"\n :style=\"endButtonStyle\"\n @touchstart.stop=\"handleEndButtonTouchStart\"\n @touchmove.stop=\"handleEndButtonTouchMove\"\n @touchend.stop=\"handleButtonTouchEnd\"\n >\n <view v-if=\"showValue\" class=\"u-slider__tooltip\">\n <text class=\"u-slider__tooltip-text\">{{ endValue }}</text>\n </view>\n </view>\n </template>\n </view>\n\n <!-- 刻度标记 -->\n <view v-if=\"showTicks\" class=\"u-slider__ticks\">\n <view\n v-for=\"(tick, index) in ticks\"\n :key=\"index\"\n class=\"u-slider__tick\"\n :style=\"{ left: tick.position + '%' }\"\n ></view>\n </view>\n </view>\n\n <!-- 最大值标签 -->\n <view v-if=\"showMinMax\" class=\"u-slider__max\">\n <text class=\"u-slider__label\">{{ max }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ninterface Props {\n modelValue?: number | [number, number]\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n range?: boolean\n showValue?: boolean\n showMinMax?: boolean\n showTicks?: boolean\n barHeight?: number | string\n activeColor?: string\n inactiveColor?: string\n buttonColor?: string\n buttonSize?: number | string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n min: 0,\n max: 100,\n step: 1,\n disabled: false,\n range: false,\n showValue: false,\n showMinMax: false,\n showTicks: false,\n barHeight: 2,\n activeColor: '#1989fa',\n inactiveColor: '#e5e5e5',\n buttonColor: '#fff',\n buttonSize: 24\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | [number, number]]\n change: [value: number | [number, number]]\n dragstart: []\n dragend: []\n}>()\n\nconst currentValue = ref(0)\nconst startValue = ref(0)\nconst endValue = ref(100)\nconst trackWidth = ref(0)\nconst trackLeft = ref(0)\nconst isDragging = ref(false)\nconst dragType = ref<'single' | 'start' | 'end'>('single')\n\nconst barHeightStyle = computed(() => {\n const height = props.barHeight\n return typeof height === 'number' ? `${height}px` : height\n})\n\nconst buttonSizeStyle = computed(() => {\n const size = props.buttonSize\n return typeof size === 'number' ? `${size}px` : size\n})\n\nconst trackStyle = computed(() => ({\n height: barHeightStyle.value,\n backgroundColor: props.inactiveColor\n}))\n\nconst barStyle = computed(() => {\n if (props.range) {\n const startPercent = ((startValue.value - props.min) / (props.max - props.min)) * 100\n const endPercent = ((endValue.value - props.min) / (props.max - props.min)) * 100\n return {\n left: `${startPercent}%`,\n width: `${endPercent - startPercent}%`,\n height: barHeightStyle.value,\n backgroundColor: props.activeColor\n }\n }\n const percent = ((currentValue.value - props.min) / (props.max - props.min)) * 100\n return {\n width: `${percent}%`,\n height: barHeightStyle.value,\n backgroundColor: props.activeColor\n }\n})\n\nconst buttonStyle = computed(() => ({\n width: buttonSizeStyle.value,\n height: buttonSizeStyle.value,\n backgroundColor: props.buttonColor,\n borderColor: props.activeColor\n}))\n\nconst startButtonStyle = computed(() => ({\n ...buttonStyle.value,\n left: `-${parseInt(buttonSizeStyle.value) / 2}px`\n}))\n\nconst endButtonStyle = computed(() => ({\n ...buttonStyle.value,\n right: `-${parseInt(buttonSizeStyle.value) / 2}px`\n}))\n\nconst ticks = computed(() => {\n const tickCount = Math.floor((props.max - props.min) / props.step)\n const result = []\n for (let i = 0; i <= tickCount; i++) {\n result.push({\n position: (i / tickCount) * 100\n })\n }\n return result\n})\n\nwatch(() => props.modelValue, (val) => {\n if (props.range && Array.isArray(val)) {\n startValue.value = val[0]\n endValue.value = val[1]\n } else if (typeof val === 'number') {\n currentValue.value = val\n }\n}, { immediate: true })\n\nconst updateTrackRect = () => {\n // uni-app 中需要使用 createSelectorQuery\n // 这里简化处理,在touch事件中动态计算\n const query = uni.createSelectorQuery?.()\n if (query) {\n query.select('.u-slider__track').boundingClientRect((rect: any) => {\n if (rect) {\n trackWidth.value = rect.width\n trackLeft.value = rect.left\n }\n }).exec()\n }\n}\n\nconst getStepValue = (value: number): number => {\n const stepCount = Math.round((value - props.min) / props.step)\n return props.min + stepCount * props.step\n}\n\nconst updateValue = (value: number) => {\n const stepped = getStepValue(value)\n currentValue.value = stepped\n emit('update:modelValue', stepped)\n emit('change', stepped)\n}\n\nconst updateRangeValue = (type: 'start' | 'end', value: number) => {\n const stepped = getStepValue(value)\n if (type === 'start') {\n if (stepped < endValue.value) {\n startValue.value = stepped\n }\n } else {\n if (stepped > startValue.value) {\n endValue.value = stepped\n }\n }\n emit('update:modelValue', [startValue.value, endValue.value])\n emit('change', [startValue.value, endValue.value])\n}\n\nconst handleTrackClick = (event: any) => {\n if (props.disabled) return\n if (!trackWidth.value) updateTrackRect()\n\n // 获取触摸/点击位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + percent * (props.max - props.min)\n\n if (props.range) {\n if (Math.abs(value - startValue.value) < Math.abs(value - endValue.value)) {\n updateRangeValue('start', value)\n } else {\n updateRangeValue('end', value)\n }\n } else {\n updateValue(value)\n }\n}\n\nconst handleTouchStart = (event: any) => {\n if (props.disabled) return\n // 初始化轨道位置信息\n const touch = event.touches?.[0]\n if (touch) {\n trackWidth.value = 1 // 初始化避免为0\n }\n}\n\nconst handleTouchMove = (event: any) => {\n // 轨道触摸移动处理\n}\n\nconst handleButtonTouchStart = () => {\n if (props.disabled) return\n isDragging.value = true\n dragType.value = 'single'\n emit('dragstart')\n updateTrackRect()\n}\n\nconst handleButtonTouchMove = (event: any) => {\n if (!isDragging.value || props.disabled) return\n\n // 获取触摸位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + Math.max(0, Math.min(1, percent)) * (props.max - props.min)\n updateValue(value)\n}\n\nconst handleButtonTouchEnd = () => {\n isDragging.value = false\n emit('dragend')\n}\n\nconst handleStartButtonTouchStart = () => {\n if (props.disabled) return\n isDragging.value = true\n dragType.value = 'start'\n emit('dragstart')\n updateTrackRect()\n}\n\nconst handleStartButtonTouchMove = (event: any) => {\n if (!isDragging.value || props.disabled) return\n\n // 获取触摸位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + Math.max(0, Math.min(1, percent)) * (props.max - props.min)\n updateRangeValue('start', value)\n}\n\nconst handleEndButtonTouchStart = () => {\n if (props.disabled) return\n isDragging.value = true\n dragType.value = 'end'\n emit('dragstart')\n updateTrackRect()\n}\n\nconst handleEndButtonTouchMove = (event: any) => {\n if (!isDragging.value || props.disabled) return\n\n // 获取触摸位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + Math.max(0, Math.min(1, percent)) * (props.max - props.min)\n updateRangeValue('end', value)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-slider {\n display: flex;\n align-items: center;\n width: 100%;\n padding: $--spacing-md 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__min,\n &__max {\n min-width: 32px;\n text-align: center;\n }\n\n &__label {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n }\n\n &__track {\n flex: 1;\n position: relative;\n border-radius: 999px;\n }\n\n &__bar {\n position: absolute;\n border-radius: 999px;\n transition: width 0.1s, left 0.1s;\n }\n\n &__button {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 50%;\n border: 2px solid $--color-primary;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transition: transform 0.1s;\n\n &:active {\n transform: translateY(-50%) scale(1.2);\n }\n\n &--start {\n left: calc(-1 * $--slider-button-size / 2);\n }\n\n &--end {\n right: calc(-1 * $--slider-button-size / 2);\n }\n }\n\n &__tooltip {\n position: absolute;\n left: 50%;\n bottom: 100%;\n transform: translateX(-50%);\n padding: 4px 8px;\n background: $--text-color;\n color: #fff;\n font-size: $--font-size-xs;\n border-radius: $--border-radius-sm;\n white-space: nowrap;\n margin-bottom: 8px;\n\n &::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 4px solid transparent;\n border-top-color: $--text-color;\n }\n }\n\n &__ticks {\n position: absolute;\n inset: 0;\n }\n\n &__tick {\n position: absolute;\n width: 2px;\n height: 100%;\n background: rgba(0, 0, 0, 0.1);\n transform: translateX(-50%);\n }\n}\n</style>","<template>\n <view class=\"u-list\">\n <!-- 列表头部 -->\n <view v-if=\"$slots.header || header\" class=\"u-list__header\">\n <slot name=\"header\">{{ header }}</slot>\n </view>\n\n <!-- 列表内容 -->\n <view class=\"u-list__content\">\n <slot />\n </view>\n\n <!-- 加载状态 -->\n <view v-if=\"loading\" class=\"u-list__loading\">\n <view class=\"u-list__loading-icon\"></view>\n <text class=\"u-list__loading-text\">{{ loadingText }}</text>\n </view>\n\n <!-- 加载完成 -->\n <view v-if=\"finished && !loading\" class=\"u-list__finished\">\n <text class=\"u-list__finished-text\">{{ finishedText }}</text>\n </view>\n\n <!-- 加载失败 -->\n <view v-if=\"error && !loading\" class=\"u-list__error\" @click=\"handleErrorClick\">\n <text class=\"u-list__error-text\">{{ errorText }}</text>\n </view>\n\n <!-- 列表底部 -->\n <view v-if=\"$slots.footer || footer\" class=\"u-list__footer\">\n <slot name=\"footer\">{{ footer }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n loading?: boolean\n finished?: boolean\n error?: boolean\n loadingText?: string\n finishedText?: string\n errorText?: string\n header?: string\n footer?: string\n immediateCheck?: boolean\n offset?: number\n direction?: 'up' | 'down'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n loading: false,\n finished: false,\n error: false,\n loadingText: '加载中...',\n finishedText: '加载完成',\n errorText: '加载失败,点击重试',\n header: '',\n footer: '',\n immediateCheck: true,\n offset: 50,\n direction: 'down'\n})\n\nconst emit = defineEmits<{\n load: []\n 'update:loading': [value: boolean]\n 'update:error': [value: boolean]\n}>()\n\nconst handleErrorClick = () => {\n emit('update:error', false)\n emit('load')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-list {\n width: 100%;\n\n &__header,\n &__footer {\n padding: $--spacing-md $--spacing-lg;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n }\n\n &__content {\n min-height: 50px;\n }\n\n &__loading,\n &__finished,\n &__error {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: $--spacing-lg;\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__loading {\n gap: $--spacing-sm;\n }\n\n &__loading-icon {\n width: 16px;\n height: 16px;\n border: 2px solid $--border-color;\n border-top-color: $--color-primary;\n border-radius: 50%;\n animation: u-list-spin 0.8s linear infinite;\n }\n\n &__loading-text,\n &__finished-text,\n &__error-text {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n }\n\n &__error {\n }\n\n &__error-text {\n color: $--color-primary;\n }\n}\n\n@keyframes u-list-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>","<template>\n <view\n class=\"u-list-item\"\n :class=\"{\n 'u-list-item--clickable': clickable,\n 'u-list-item--disabled': disabled\n }\"\n @click=\"handleClick\"\n >\n <!-- 列表项图标/图片 -->\n <view v-if=\"$slots.icon || icon || thumb\" class=\"u-list-item__icon\">\n <slot name=\"icon\">\n <image v-if=\"thumb\" class=\"u-list-item__thumb\" :src=\"thumb\" mode=\"aspectFill\" />\n <text v-else-if=\"icon\" class=\"u-list-item__icon-text\">{{ icon }}</text>\n </slot>\n </view>\n\n <!-- 列表项主体 -->\n <view class=\"u-list-item__body\">\n <view v-if=\"title || $slots.title\" class=\"u-list-item__title\">\n <slot name=\"title\">{{ title }}</slot>\n </view>\n <view v-if=\"desc || $slots.desc\" class=\"u-list-item__desc\">\n <slot name=\"desc\">{{ desc }}</slot>\n </view>\n <view v-if=\"$slots.default\" class=\"u-list-item__content\">\n <slot />\n </view>\n </view>\n\n <!-- 列表项右侧内容 -->\n <view v-if=\"$slots.extra || extra || value\" class=\"u-list-item__extra\">\n <slot name=\"extra\">\n <text v-if=\"value\" class=\"u-list-item__value\">{{ value }}</text>\n <text v-if=\"extra\" class=\"u-list-item__extra-text\">{{ extra }}</text>\n </slot>\n <view v-if=\"showArrow\" class=\"u-list-item__arrow\">\n <text class=\"u-list-item__arrow-icon\">›</text>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n title?: string\n desc?: string\n value?: string\n extra?: string\n icon?: string\n thumb?: string\n clickable?: boolean\n disabled?: boolean\n showArrow?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n desc: '',\n value: '',\n extra: '',\n icon: '',\n thumb: '',\n clickable: false,\n disabled: false,\n showArrow: false\n})\n\nconst emit = defineEmits<{\n click: [event: Event]\n}>()\n\nconst handleClick = (event: Event) => {\n if (props.disabled) return\n emit('click', event)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-list-item {\n display: flex;\n align-items: flex-start;\n padding: $--spacing-md $--spacing-lg;\n background-color: $--bg-color-2;\n border-bottom: 1px solid $--border-color;\n transition: background-color $--transition-duration;\n\n &:last-child {\n border-bottom: none;\n }\n\n &--clickable {\n &:active {\n background-color: $--bg-color;\n }\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n margin-right: $--spacing-md;\n }\n\n &__thumb {\n width: 40px;\n height: 40px;\n border-radius: $--border-radius-sm;\n object-fit: cover;\n }\n\n &__icon-text {\n font-size: 20px;\n }\n\n &__body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n line-height: 1.5;\n }\n\n &__desc {\n margin-top: $--spacing-xs;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n line-height: 1.4;\n }\n\n &__content {\n margin-top: $--spacing-sm;\n }\n\n &__extra {\n display: flex;\n align-items: center;\n margin-left: $--spacing-md;\n flex-shrink: 0;\n }\n\n &__value {\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__extra-text {\n font-size: $--font-size-sm;\n color: $--text-color-3;\n }\n\n &__arrow {\n display: flex;\n align-items: center;\n margin-left: $--spacing-sm;\n color: $--text-color-3;\n }\n\n &__arrow-icon {\n font-size: 16px;\n }\n}\n</style>","<template>\n <view class=\"u-line-progress\" :style=\"wrapperStyle\">\n <view class=\"u-line-progress__track\" :style=\"trackStyle\">\n <view\n class=\"u-line-progress__bar\"\n :class=\"{\n 'u-line-progress__bar--striped': striped,\n 'u-line-progress__bar--animated': striped && animated\n }\"\n :style=\"barStyle\"\n >\n <text\n v-if=\"showText && textInside && percentage <= 100\"\n class=\"u-line-progress__text u-line-progress__text--inside\"\n >{{ textContent }}</text>\n </view>\n </view>\n <text\n v-if=\"showText && !textInside\"\n class=\"u-line-progress__text\"\n >{{ textContent }}</text>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n percentage: number\n height?: number | string\n color?: string\n trackColor?: string\n showText?: boolean\n textInside?: boolean\n format?: (percentage: number) => string\n striped?: boolean\n animated?: boolean\n inactive?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n percentage: 0,\n height: 6,\n color: '#1989fa',\n trackColor: '#e5e5e5',\n showText: true,\n textInside: false,\n striped: false,\n animated: false,\n inactive: false\n})\n\nconst heightStyle = computed(() => {\n const height = props.height\n return typeof height === 'number' ? `${height}px` : height\n})\n\nconst wrapperStyle = computed(() => ({\n height: props.textInside ? heightStyle.value : 'auto'\n}))\n\nconst trackStyle = computed(() => ({\n height: heightStyle.value,\n backgroundColor: props.trackColor,\n borderRadius: heightStyle.value\n}))\n\nconst barStyle = computed(() => {\n const percentage = Math.min(100, Math.max(0, props.percentage))\n return {\n width: `${percentage}%`,\n backgroundColor: props.inactive ? '#c8c9cc' : props.color,\n borderRadius: heightStyle.value\n }\n})\n\nconst textContent = computed(() => {\n if (props.format) {\n return props.format(props.percentage)\n }\n return `${Math.round(props.percentage)}%`\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-line-progress {\n display: flex;\n align-items: center;\n width: 100%;\n\n &__track {\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n &__bar {\n height: 100%;\n transition: width 0.3s ease-out;\n position: relative;\n\n &--striped {\n background-image: linear-gradient(\n 45deg,\n rgba(255, 255, 255, 0.15) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255, 255, 255, 0.15) 50%,\n rgba(255, 255, 255, 0.15) 75%,\n transparent 75%,\n transparent\n );\n background-size: 1rem 1rem;\n }\n\n &--animated {\n animation: u-line-progress-stripes 1s linear infinite;\n }\n }\n\n &__text {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n white-space: nowrap;\n margin-left: $--spacing-sm;\n\n &--inside {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n margin-left: 0;\n color: #fff;\n font-size: 12px;\n }\n }\n}\n\n@keyframes u-line-progress-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n</style>","<template>\n <view class=\"u-count-down\">\n <slot :time=\"timeData\" :current=\"current\">\n <text class=\"u-count-down__text\" :style=\"textStyle\">{{ formattedTime }}</text>\n </slot>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onUnmounted } from 'vue'\n\ninterface TimeData {\n days: number\n hours: number\n minutes: number\n seconds: number\n milliseconds: number\n total: number\n}\n\ninterface Props {\n time: number\n format?: string\n millisecond?: boolean\n autoStart?: boolean\n fontSize?: number | string\n color?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n time: 0,\n format: 'HH:mm:ss',\n millisecond: false,\n autoStart: true,\n fontSize: 14,\n color: ''\n})\n\nconst emit = defineEmits<{\n finish: []\n change: [timeData: TimeData]\n}>()\n\nconst current = ref(props.time)\nconst counting = ref(false)\nlet timer: ReturnType<typeof setInterval> | null = null\n\nconst textStyle = computed(() => {\n const fontSize = typeof props.fontSize === 'number' ? `${props.fontSize}px` : props.fontSize\n return {\n fontSize,\n color: props.color || undefined\n }\n})\n\nconst padZero = (num: number, length: number = 2): string => {\n return String(num).padStart(length, '0')\n}\n\nconst timeData = computed<TimeData>(() => {\n const total = current.value\n const days = Math.floor(total / (1000 * 60 * 60 * 24))\n const hours = Math.floor((total % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))\n const minutes = Math.floor((total % (1000 * 60 * 60)) / (1000 * 60))\n const seconds = Math.floor((total % (1000 * 60)) / 1000)\n const milliseconds = total % 1000\n\n return {\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n total\n }\n})\n\nconst formattedTime = computed(() => {\n const data = timeData.value\n let result = props.format\n\n // 按照从长到短的顺序替换,避免错误替换\n const replacements: [string, string][] = [\n ['DD', padZero(data.days)],\n ['D', String(data.days)],\n ['HH', padZero(data.hours)],\n ['H', String(data.hours)],\n ['mm', padZero(data.minutes)],\n ['m', String(data.minutes)],\n ['ss', padZero(data.seconds)],\n ['s', String(data.seconds)],\n ['SSS', padZero(data.milliseconds, 3)],\n ['S', String(Math.floor(data.milliseconds / 100))]\n ]\n\n replacements.forEach(([key, value]) => {\n result = result.replace(new RegExp(key, 'g'), value)\n })\n\n return result\n})\n\nconst tick = () => {\n if (current.value <= 0) {\n stop()\n emit('finish')\n return\n }\n\n const interval = props.millisecond ? 10 : 1000\n current.value = Math.max(0, current.value - interval)\n emit('change', timeData.value)\n}\n\nconst start = () => {\n if (counting.value || current.value <= 0) return\n counting.value = true\n const interval = props.millisecond ? 10 : 1000\n timer = setInterval(tick, interval)\n}\n\nconst stop = () => {\n if (timer) {\n clearInterval(timer)\n timer = null\n }\n counting.value = false\n}\n\nconst pause = () => {\n stop()\n}\n\nconst reset = (newTime?: number) => {\n stop()\n current.value = newTime !== undefined ? newTime : props.time\n if (props.autoStart) {\n start()\n }\n}\n\nwatch(() => props.time, (val) => {\n reset(val)\n})\n\nonMounted(() => {\n if (props.autoStart) {\n start()\n }\n})\n\nonUnmounted(() => {\n stop()\n})\n\ndefineExpose({\n start,\n stop,\n pause,\n reset,\n timeData\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-count-down {\n display: inline-block;\n\n &__text {\n font-variant-numeric: tabular-nums;\n }\n}\n</style>","<template>\n <view\n class=\"u-tooltip\"\n :class=\"{\n 'u-tooltip--active': visible\n }\"\n @longpress=\"handleLongPress\"\n @touchstart=\"handleTouchStart\"\n @touchend=\"handleTouchEnd\"\n >\n <!-- 触发元素 -->\n <view\n class=\"u-tooltip__trigger\"\n :class=\"{\n 'u-tooltip__trigger--highlight': highlight && visible\n }\"\n :style=\"highlight ? highlightStyle : {}\"\n >\n <slot />\n </view>\n\n <!-- 提示气泡 -->\n <view\n v-if=\"visible\"\n class=\"u-tooltip__popup\"\n :class=\"[`u-tooltip__popup--${placement}`, `u-tooltip__popup--${actualPlacement}`]\"\n :style=\"popupStyle\"\n >\n <!-- 箭头 -->\n <view class=\"u-tooltip__arrow\" :class=\"`u-tooltip__arrow--${actualPlacement}`\"></view>\n\n <!-- 内容 -->\n <view class=\"u-tooltip__content\">\n <!-- 操作按钮 -->\n <view v-if=\"actions.length\" class=\"u-tooltip__actions\">\n <view\n v-for=\"(action, index) in actions\"\n :key=\"index\"\n class=\"u-tooltip__action\"\n :class=\"{ 'u-tooltip__action--disabled': action.disabled }\"\n @click.stop=\"handleActionClick(action, index)\"\n >\n <text class=\"u-tooltip__action-text\">{{ action.text }}</text>\n </view>\n </view>\n\n <!-- 自定义内容 -->\n <slot v-else name=\"content\">\n <text class=\"u-tooltip__text\">{{ content }}</text>\n </slot>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\n\n// 检测是否在 uniapp 环境中\nconst isUniApp = typeof uni !== 'undefined'\n\ninterface Action {\n text: string\n disabled?: boolean\n [key: string]: any\n}\n\ninterface Props {\n content?: string\n placement?: 'top' | 'bottom'\n actions?: Action[]\n highlight?: boolean\n highlightColor?: string\n autoAdjust?: boolean\n showDuration?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n content: '',\n placement: 'top',\n actions: () => [],\n highlight: false,\n highlightColor: 'rgba(25, 137, 250, 0.1)',\n autoAdjust: true,\n showDuration: 0\n})\n\nconst emit = defineEmits<{\n show: []\n hide: []\n select: [action: Action, index: number]\n}>()\n\nconst visible = ref(false)\nconst actualPlacement = ref(props.placement)\nlet hideTimer: ReturnType<typeof setTimeout> | null = null\nlet triggerRect = { top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0 }\n\nconst highlightStyle = computed(() => ({\n backgroundColor: props.highlightColor\n}))\n\nconst popupStyle = computed(() => ({}))\n\nconst handleTouchStart = (event: any) => {\n const touch = event.touches?.[0]\n if (isUniApp) {\n // uni-app 使用 createSelectorQuery\n const query = uni.createSelectorQuery()\n query.select('.u-tooltip__trigger').boundingClientRect((rect: any) => {\n if (rect) {\n triggerRect = {\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n }\n }\n }).exec()\n } else if (event.currentTarget) {\n // 小程序/鸿蒙环境:使用 uni.createSelectorQuery 作为 fallback\n uni.createSelectorQuery()\n .select('.u-tooltip__trigger')\n .boundingClientRect((rect: any) => {\n if (rect) {\n triggerRect = {\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n }\n }\n })\n .exec()\n }\n}\n\nconst handleTouchEnd = () => {\n // touch end handled\n}\n\nconst handleLongPress = () => {\n show()\n}\n\nconst show = () => {\n visible.value = true\n emit('show')\n\n if (props.autoAdjust) {\n adjustPlacement()\n }\n\n if (props.showDuration > 0) {\n hideTimer = setTimeout(() => {\n hide()\n }, props.showDuration)\n }\n}\n\nconst hide = () => {\n visible.value = false\n emit('hide')\n if (hideTimer) {\n clearTimeout(hideTimer)\n hideTimer = null\n }\n}\n\nconst adjustPlacement = () => {\n // 简化的位置调整逻辑\n if (isUniApp) {\n // uni-app 中使用系统信息获取窗口高度\n const systemInfo = uni.getSystemInfoSync()\n const windowHeight = systemInfo.windowHeight\n const spaceAbove = triggerRect.top\n const spaceBelow = windowHeight - triggerRect.bottom\n\n if (props.placement === 'top' && spaceAbove < 50) {\n actualPlacement.value = 'bottom'\n } else if (props.placement === 'bottom' && spaceBelow < 50) {\n actualPlacement.value = 'top'\n } else {\n actualPlacement.value = props.placement\n }\n } else {\n const windowHeight = window.innerHeight\n const spaceAbove = triggerRect.top\n const spaceBelow = windowHeight - triggerRect.bottom\n\n if (props.placement === 'top' && spaceAbove < 50) {\n actualPlacement.value = 'bottom'\n } else if (props.placement === 'bottom' && spaceBelow < 50) {\n actualPlacement.value = 'top'\n } else {\n actualPlacement.value = props.placement\n }\n }\n}\n\nconst handleActionClick = (action: Action, index: number) => {\n if (action.disabled) return\n emit('select', action, index)\n hide()\n}\n\nconst handleClickOutside = (event: TouchEvent | MouseEvent) => {\n if (visible.value) {\n hide()\n }\n}\n\nonMounted(() => {\n if (isUniApp) {\n // uni-app 中使用页面生命周期事件处理\n } else {\n document.addEventListener('click', handleClickOutside)\n document.addEventListener('touchstart', handleClickOutside)\n }\n})\n\nonUnmounted(() => {\n if (isUniApp) {\n // uni-app 清理\n } else {\n document.removeEventListener('click', handleClickOutside)\n document.removeEventListener('touchstart', handleClickOutside)\n }\n if (hideTimer) {\n clearTimeout(hideTimer)\n }\n})\n\ndefineExpose({\n show,\n hide\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-tooltip {\n position: relative;\n display: inline-block;\n\n &--active {\n z-index: 999;\n }\n\n &__trigger {\n display: inline;\n transition: background-color 0.15s;\n\n &--highlight {\n border-radius: 2px;\n }\n }\n\n &__popup {\n position: absolute;\n z-index: 1000;\n padding: 8px 12px;\n background: #323233;\n border-radius: 8px;\n white-space: nowrap;\n animation: u-tooltip-fade-in 0.15s ease-out;\n\n &--top {\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-bottom: 8px;\n }\n\n &--bottom {\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-top: 8px;\n }\n }\n\n &__arrow {\n position: absolute;\n width: 0;\n height: 0;\n border: 6px solid transparent;\n\n &--top {\n bottom: -12px;\n left: 50%;\n transform: translateX(-50%);\n border-top-color: #323233;\n border-bottom: none;\n }\n\n &--bottom {\n top: -12px;\n left: 50%;\n transform: translateX(-50%);\n border-bottom-color: #323233;\n border-top: none;\n }\n }\n\n &__content {\n display: flex;\n align-items: center;\n }\n\n &__text {\n font-size: 14px;\n color: #fff;\n line-height: 1.4;\n }\n\n &__actions {\n display: flex;\n gap: 16px;\n }\n\n &__action {\n display: flex;\n align-items: center;\n padding: 4px 0;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &:not(&--disabled):active {\n opacity: 0.7;\n }\n }\n\n &__action-text {\n font-size: 14px;\n color: #fff;\n }\n}\n\n@keyframes u-tooltip-fade-in {\n from {\n opacity: 0;\n transform: translateX(-50%) scale(0.9);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) scale(1);\n }\n}\n</style>","<template>\n <view class=\"u-avatar\" :class=\"avatarClass\" :style=\"avatarStyle\">\n <slot>\n <image v-if=\"src\" class=\"u-avatar__image\" :src=\"src\" mode=\"aspectFill\" @error=\"handleError\" />\n <text v-else-if=\"text\" class=\"u-avatar__text\">{{ displayText }}</text>\n <text v-else class=\"u-avatar__icon\">{{ icon || '👤' }}</text>\n </slot>\n <view v-if=\"badge && !badgeSlot\" class=\"u-avatar__badge\" :class=\"badgeClass\">\n <text v-if=\"!dot\" class=\"u-avatar__badge-text\">{{ badge }}</text>\n </view>\n <slot name=\"badge\" />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useSlots } from 'vue'\n\ntype AvatarSize = 'small' | 'medium' | 'large' | 'xlarge'\ntype AvatarShape = 'circle' | 'square'\ntype BadgePosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\n\ninterface Props {\n src?: string\n text?: string\n icon?: string\n size?: AvatarSize | number\n shape?: AvatarShape\n color?: string\n bgColor?: string\n badge?: string | number\n dot?: boolean\n badgeColor?: string\n badgePosition?: BadgePosition\n maxTextLength?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n src: '',\n text: '',\n icon: '',\n size: 'medium',\n shape: 'circle',\n bgColor: '#e8e8e8',\n dot: false,\n badgePosition: 'top-right',\n maxTextLength: 2\n})\n\nconst slots = useSlots()\nconst loadError = ref(false)\n\nconst badgeSlot = computed(() => Boolean(slots.badge))\n\nconst handleError = () => {\n loadError.value = true\n}\n\nconst displayText = computed(() => {\n if (!props.text) return ''\n if (props.text.length <= props.maxTextLength) return props.text\n return props.text.slice(0, props.maxTextLength)\n})\n\nconst sizeMap: Record<string, number> = {\n small: 32,\n medium: 48,\n large: 64,\n xlarge: 80\n}\n\nconst avatarSize = computed(() => {\n if (typeof props.size === 'number') return props.size\n return sizeMap[props.size] || 48\n})\n\nconst avatarClass = computed(() => [\n `u-avatar--${props.shape}`,\n {\n 'u-avatar--error': loadError.value\n }\n])\n\nconst avatarStyle = computed(() => {\n const style: Record<string, string> = {}\n const size = avatarSize.value\n\n style.width = `${size}px`\n style.height = `${size}px`\n\n if (props.bgColor) {\n style.backgroundColor = props.bgColor\n }\n\n if (props.color) {\n style.color = props.color\n }\n\n if (props.shape === 'square') {\n style.borderRadius = '4px'\n }\n\n return style\n})\n\nconst badgeClass = computed(() => [\n `u-avatar__badge--${props.badgePosition}`,\n {\n 'u-avatar__badge--dot': props.dot\n }\n])\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-avatar {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n box-sizing: border-box;\n background-color: $--bg-color;\n font-weight: 500;\n\n &--circle {\n border-radius: 50%;\n }\n\n &--square {\n border-radius: $--radius-sm;\n }\n\n &__image {\n width: 100%;\n height: 100%;\n }\n\n &__text {\n font-size: 16px;\n color: $--text-color-2;\n line-height: 1;\n }\n\n &__icon {\n font-size: 24px;\n color: $--text-color-3;\n }\n\n &__badge {\n position: absolute;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n font-size: 10px;\n color: $--text-color-white;\n background-color: $--color-danger;\n border-radius: 999px;\n box-sizing: border-box;\n\n &--dot {\n min-width: 8px;\n width: 8px;\n height: 8px;\n padding: 0;\n border-radius: 50%;\n }\n\n &--top-right {\n top: 0;\n right: 0;\n transform: translate(25%, -25%);\n }\n\n &--top-left {\n top: 0;\n left: 0;\n transform: translate(-25%, -25%);\n }\n\n &--bottom-right {\n bottom: 0;\n right: 0;\n transform: translate(25%, 25%);\n }\n\n &--bottom-left {\n bottom: 0;\n left: 0;\n transform: translate(-25%, 25%);\n }\n }\n}\n</style>","<template>\n <view class=\"u-empty\" :class=\"{ 'u-empty--inline': inline }\">\n <view class=\"u-empty__image\">\n <slot name=\"image\">\n <image v-if=\"image\" class=\"u-empty__image-src\" :src=\"image\" mode=\"aspectFit\" />\n <view v-else class=\"u-empty__image-default\">\n <text class=\"u-empty__icon\">📭</text>\n </view>\n </slot>\n </view>\n <view v-if=\"description || $slots.description\" class=\"u-empty__description\">\n <slot name=\"description\">{{ description }}</slot>\n </view>\n <view v-if=\"$slots.default\" class=\"u-empty__bottom\">\n <slot />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n image?: string\n description?: string\n inline?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n image: '',\n description: '暂无数据',\n inline: false\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-xl $--spacing-base;\n box-sizing: border-box;\n\n &--inline {\n display: inline-flex;\n padding: $--spacing-base;\n }\n\n &__image {\n width: 160px;\n height: 160px;\n margin-bottom: $--spacing-base;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__image-src {\n width: 100%;\n height: 100%;\n }\n\n &__image-default {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: $--bg-color;\n border-radius: $--radius-lg;\n }\n\n &__icon {\n font-size: 64px;\n color: $--text-color-3;\n }\n\n &__description {\n font-size: $--font-size-base;\n color: $--text-color-3;\n line-height: 1.5;\n text-align: center;\n margin-bottom: $--spacing-base;\n }\n\n &__bottom {\n margin-top: $--spacing-sm;\n }\n}\n</style>","<template>\n <view class=\"u-checkbox\" :class=\"checkboxClass\" @click=\"handleClick\">\n <view class=\"u-checkbox__icon\" :class=\"iconClass\" :style=\"iconStyle\">\n <text v-if=\"checked\" class=\"u-checkbox__check\">✓</text>\n </view>\n <view v-if=\"label || $slots.default\" class=\"u-checkbox__label\">\n <slot>{{ label }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\ninterface CheckboxGroupContext {\n modelValue: Ref<any[]>\n disabled: ComputedRef<boolean>\n max: ComputedRef<number>\n toggle: (value: any) => void\n}\n\ninterface Props {\n value?: any\n label?: string\n disabled?: boolean\n checkedColor?: string\n shape?: 'square' | 'circle'\n iconSize?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n label: '',\n disabled: false,\n checkedColor: '',\n shape: 'square',\n iconSize: 20\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n change: [checked: boolean]\n}>()\n\nconst group = inject<CheckboxGroupContext | null>('u-checkbox-group', null)\n\nconst checked = computed(() => {\n if (group) {\n return group.modelValue.value.includes(props.value)\n }\n return false\n})\n\nconst isDisabled = computed(() => {\n if (group) {\n return group.disabled.value || props.disabled\n }\n return props.disabled\n})\n\nconst checkboxClass = computed(() => [\n {\n 'u-checkbox--disabled': isDisabled.value,\n 'u-checkbox--checked': checked.value\n }\n])\n\nconst iconClass = computed(() => [\n `u-checkbox__icon--${props.shape}`,\n {\n 'u-checkbox__icon--checked': checked.value,\n 'u-checkbox__icon--disabled': isDisabled.value\n }\n])\n\nconst iconStyle = computed(() => {\n const style: Record<string, string> = {}\n style.width = `${props.iconSize}px`\n style.height = `${props.iconSize}px`\n\n if (checked.value && props.checkedColor) {\n style.backgroundColor = props.checkedColor\n style.borderColor = props.checkedColor\n }\n\n return style\n})\n\nconst handleClick = () => {\n if (isDisabled.value) return\n\n if (group) {\n group.toggle(props.value)\n } else {\n emit('update:modelValue', !checked.value)\n emit('change', !checked.value)\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-checkbox {\n display: inline-flex;\n align-items: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid $--border-color;\n background-color: $--bg-color-2;\n transition: all 0.2s;\n flex-shrink: 0;\n\n &--square {\n border-radius: $--radius-sm;\n }\n\n &--circle {\n border-radius: 50%;\n }\n\n &--checked {\n background-color: $--color-primary;\n border-color: $--color-primary;\n }\n\n &--disabled {\n background-color: $--bg-color;\n border-color: $--border-color;\n }\n }\n\n &__check {\n color: $--text-color-white;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n }\n\n &__label {\n margin-left: $--spacing-sm;\n font-size: $--font-size-base;\n color: $--text-color;\n line-height: 1.5;\n }\n\n &--checked &__label {\n color: $--text-color;\n }\n\n &--disabled &__label {\n color: $--text-color-3;\n }\n}\n</style>","<template>\n <view class=\"u-checkbox-group\">\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\n\ninterface Props {\n modelValue?: any[]\n disabled?: boolean\n max?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: () => [],\n disabled: false,\n max: 0\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any[]]\n change: [value: any[]]\n}>()\n\nconst innerValue = ref([...props.modelValue])\n\nwatch(() => props.modelValue, (val) => {\n innerValue.value = [...val]\n}, { deep: true })\n\nconst toggle = (value: any) => {\n const index = innerValue.value.indexOf(value)\n\n if (index > -1) {\n innerValue.value.splice(index, 1)\n } else {\n if (props.max > 0 && innerValue.value.length >= props.max) {\n return\n }\n innerValue.value.push(value)\n }\n\n emit('update:modelValue', [...innerValue.value])\n emit('change', [...innerValue.value])\n}\n\nprovide('u-checkbox-group', {\n modelValue: innerValue,\n disabled: computed(() => props.disabled),\n max: computed(() => props.max),\n toggle\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: $--spacing-base;\n}\n</style>","<template>\n <view class=\"u-radio\" :class=\"radioClass\" @click=\"handleClick\">\n <view class=\"u-radio__icon\" :class=\"iconClass\" :style=\"iconStyle\">\n <view v-if=\"checked\" class=\"u-radio__dot\" />\n </view>\n <view v-if=\"label || $slots.default\" class=\"u-radio__label\">\n <slot>{{ label }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\ninterface RadioGroupContext {\n modelValue: Ref<any>\n disabled: ComputedRef<boolean>\n select: (value: any) => void\n}\n\ninterface Props {\n value?: any\n label?: string\n disabled?: boolean\n checkedColor?: string\n iconSize?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n label: '',\n disabled: false,\n checkedColor: '',\n iconSize: 20\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any]\n change: [value: any]\n}>()\n\nconst group = inject<RadioGroupContext | null>('u-radio-group', null)\n\nconst checked = computed(() => {\n if (group) {\n return group.modelValue.value === props.value\n }\n return false\n})\n\nconst isDisabled = computed(() => {\n if (group) {\n return group.disabled.value || props.disabled\n }\n return props.disabled\n})\n\nconst radioClass = computed(() => [\n {\n 'u-radio--disabled': isDisabled.value,\n 'u-radio--checked': checked.value\n }\n])\n\nconst iconClass = computed(() => [\n {\n 'u-radio__icon--checked': checked.value,\n 'u-radio__icon--disabled': isDisabled.value\n }\n])\n\nconst iconStyle = computed(() => {\n const style: Record<string, string> = {}\n style.width = `${props.iconSize}px`\n style.height = `${props.iconSize}px`\n\n if (checked.value && props.checkedColor) {\n style.borderColor = props.checkedColor\n }\n\n return style\n})\n\nconst handleClick = () => {\n if (isDisabled.value) return\n\n if (group) {\n group.select(props.value)\n } else {\n emit('update:modelValue', props.value)\n emit('change', props.value)\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-radio {\n display: inline-flex;\n align-items: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid $--border-color;\n background-color: $--bg-color-2;\n border-radius: 50%;\n transition: all 0.2s;\n flex-shrink: 0;\n\n &--checked {\n border-color: $--color-primary;\n border-width: 6px;\n background-color: $--bg-color-2;\n }\n\n &--disabled {\n background-color: $--bg-color;\n border-color: $--border-color;\n }\n }\n\n &__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: $--color-primary;\n }\n\n &__label {\n margin-left: $--spacing-sm;\n font-size: $--font-size-base;\n color: $--text-color;\n line-height: 1.5;\n }\n\n &--disabled &__label {\n color: $--text-color-3;\n }\n}\n</style>","<template>\n <view class=\"u-radio-group\">\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\n\ninterface Props {\n modelValue?: any\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n disabled: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any]\n change: [value: any]\n}>()\n\nconst innerValue = ref(props.modelValue)\n\nwatch(() => props.modelValue, (val) => {\n innerValue.value = val\n})\n\nconst select = (value: any) => {\n if (innerValue.value === value) return\n\n innerValue.value = value\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nprovide('u-radio-group', {\n modelValue: innerValue,\n disabled: computed(() => props.disabled),\n select\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-radio-group {\n display: flex;\n flex-wrap: wrap;\n gap: $--spacing-base;\n}\n</style>","<template>\n <view v-if=\"visible\" class=\"u-toast\" :class=\"toastClass\" :style=\"toastStyle\">\n <view class=\"u-toast__content\">\n <view v-if=\"type === 'loading'\" class=\"u-toast__loading\">\n <view class=\"u-toast__loading-icon\" />\n </view>\n <text v-else-if=\"icon\" class=\"u-toast__icon\">{{ icon }}</text>\n <text v-if=\"message\" class=\"u-toast__text\">{{ message }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onUnmounted } from 'vue'\n\ntype ToastType = 'text' | 'loading' | 'success' | 'fail' | 'info'\n\ninterface Props {\n message?: string\n type?: ToastType\n duration?: number\n position?: 'top' | 'middle' | 'bottom'\n icon?: string\n forbidClick?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n message: '',\n type: 'text',\n duration: 2000,\n position: 'middle',\n icon: '',\n forbidClick: false\n})\n\nconst visible = ref(false)\nlet timer: ReturnType<typeof setTimeout> | null = null\n\nconst icons: Record<string, string> = {\n success: '✓',\n fail: '✗',\n info: 'ℹ'\n}\n\nconst displayIcon = computed(() => {\n if (props.icon) return props.icon\n if (props.type === 'loading') return ''\n return icons[props.type] || ''\n})\n\nconst toastClass = computed(() => [\n `u-toast--${props.position}`,\n {\n 'u-toast--forbid-click': props.forbidClick,\n 'u-toast--loading': props.type === 'loading'\n }\n])\n\nconst toastStyle = computed(() => ({\n zIndex: 1000\n}))\n\nconst show = () => {\n visible.value = true\n\n if (props.type !== 'loading' && props.duration > 0) {\n timer = setTimeout(() => {\n hide()\n }, props.duration)\n }\n}\n\nconst hide = () => {\n visible.value = false\n if (timer) {\n clearTimeout(timer)\n timer = null\n }\n}\n\nonUnmounted(() => {\n if (timer) {\n clearTimeout(timer)\n }\n})\n\ndefineExpose({\n show,\n hide\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-toast {\n position: fixed;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n pointer-events: none;\n\n &--top {\n top: 50px;\n }\n\n &--middle {\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n &--bottom {\n bottom: 50px;\n }\n\n &--forbid-click {\n pointer-events: auto;\n width: 100vw;\n height: 100vh;\n left: 0;\n top: 0;\n transform: none;\n background-color: transparent;\n }\n\n &__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-base $--spacing-lg;\n background-color: rgba(0, 0, 0, 0.7);\n border-radius: $--radius-lg;\n min-width: 100px;\n max-width: 280px;\n }\n\n &--loading &__content {\n min-width: 80px;\n min-height: 80px;\n padding: $--spacing-lg;\n }\n\n &__icon {\n font-size: 32px;\n color: $--text-color-white;\n margin-bottom: $--spacing-sm;\n }\n\n &__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: $--spacing-sm;\n }\n\n &__loading-icon {\n width: 24px;\n height: 24px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: $--text-color-white;\n border-radius: 50%;\n animation: u-toast-loading 0.8s linear infinite;\n }\n\n @keyframes u-toast-loading {\n to {\n transform: rotate(360deg);\n }\n }\n\n &__text {\n font-size: $--font-size-base;\n color: $--text-color-white;\n line-height: 1.4;\n text-align: center;\n }\n}\n</style>","<template>\n <view class=\"u-popup\" :class=\"popupClass\" @touchmove.stop.prevent>\n <view\n v-if=\"visible\"\n class=\"u-popup__overlay\"\n :class=\"{ 'u-popup__overlay--visible': overlayVisible }\"\n @click=\"handleOverlayClick\"\n />\n <view v-if=\"visible\" class=\"u-popup__content\" :class=\"contentClass\" :style=\"contentStyle\">\n <view v-if=\"closeable\" class=\"u-popup__close\" @click=\"handleClose\">\n <text class=\"u-popup__close-icon\">✕</text>\n </view>\n <slot />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ntype PopupPosition = 'top' | 'bottom' | 'left' | 'right' | 'center'\n\ninterface Props {\n visible?: boolean\n position?: PopupPosition\n overlay?: boolean\n overlayClass?: string\n closeable?: boolean\n closeOnClickOverlay?: boolean\n safeArea?: boolean\n round?: boolean\n duration?: number\n zIndex?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n position: 'bottom',\n overlay: true,\n overlayClass: '',\n closeable: false,\n closeOnClickOverlay: true,\n safeArea: true,\n round: false,\n duration: 300,\n zIndex: 1000\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n open: []\n close: []\n}>()\n\nconst overlayVisible = ref(false)\nconst contentVisible = ref(false)\n\nlet timer: ReturnType<typeof setTimeout> | null = null\n\nconst popupClass = computed(() => [\n {\n 'u-popup--safe-area': props.safeArea\n }\n])\n\nconst contentClass = computed(() => [\n `u-popup__content--${props.position}`,\n {\n 'u-popup__content--round': props.round,\n 'u-popup__content--visible': contentVisible.value\n }\n])\n\nconst contentStyle = computed(() => {\n const style: Record<string, string> = {}\n const positions: Record<string, string> = {\n top: 'top: 0; left: 0; right: 0;',\n bottom: 'bottom: 0; left: 0; right: 0;',\n left: 'left: 0; top: 0; bottom: 0;',\n right: 'right: 0; top: 0; bottom: 0;',\n center: 'top: 50%; left: 50%;'\n }\n\n style.zIndex = String(props.zIndex + 1)\n\n if (props.position === 'center') {\n style.transitionDuration = `${props.duration}ms`\n }\n\n return style\n})\n\nwatch(() => props.visible, (val) => {\n if (val) {\n overlayVisible.value = true\n timer = setTimeout(() => {\n contentVisible.value = true\n emit('open')\n }, 50)\n } else {\n contentVisible.value = false\n timer = setTimeout(() => {\n overlayVisible.value = false\n emit('close')\n }, props.duration)\n }\n})\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n handleClose()\n }\n}\n\nconst handleClose = () => {\n emit('update:visible', false)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-popup {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1000;\n pointer-events: none;\n\n &--safe-area {\n padding-bottom: constant(safe-area-inset-bottom);\n padding-bottom: env(safe-area-inset-bottom);\n /* 鴻蒙兼容 */\n padding-bottom: var(--safe-area-inset-bottom, env(safe-area-inset-bottom));\n }\n\n &__overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.7);\n opacity: 0;\n transition: opacity 0.3s;\n pointer-events: auto;\n\n &--visible {\n opacity: 1;\n }\n }\n\n &__content {\n position: absolute;\n background-color: $--bg-color-2;\n transition: transform 0.3s ease-out;\n pointer-events: auto;\n overflow: hidden;\n\n &--top {\n transform: translateY(-100%);\n\n &--visible {\n transform: translateY(0);\n }\n\n &--round {\n border-radius: 0 0 $--radius-lg $--radius-lg;\n }\n }\n\n &--bottom {\n transform: translateY(100%);\n\n &--visible {\n transform: translateY(0);\n }\n\n &--round {\n border-radius: $--radius-lg $--radius-lg 0 0;\n }\n }\n\n &--left {\n width: 80%;\n height: 100%;\n transform: translateX(-100%);\n\n &--visible {\n transform: translateX(0);\n }\n\n &--round {\n border-radius: 0 $--radius-lg $--radius-lg 0;\n }\n }\n\n &--right {\n width: 80%;\n height: 100%;\n transform: translateX(100%);\n\n &--visible {\n transform: translateX(0);\n }\n\n &--round {\n border-radius: $--radius-lg 0 0 $--radius-lg;\n }\n }\n\n &--center {\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.9);\n opacity: 0;\n min-width: 280px;\n border-radius: $--radius-lg;\n transition: transform 0.3s ease-out, opacity 0.3s ease-out;\n\n &--visible {\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n }\n\n &--round {\n border-radius: $--radius-lg;\n }\n }\n }\n\n &__close {\n position: absolute;\n top: $--spacing-base;\n right: $--spacing-base;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n\n &-icon {\n font-size: 18px;\n color: $--text-color-3;\n }\n }\n}\n</style>","<template>\n <view class=\"u-code-input\">\n <view class=\"u-code-input__wrapper\">\n <view\n v-for=\"i in length\"\n :key=\"i\"\n class=\"u-code-input__item\"\n :class=\"itemClass(i)\"\n :style=\"itemStyle\"\n >\n <text v-if=\"values[i - 1] && !password\" class=\"u-code-input__char\">{{ values[i - 1] }}</text>\n <view v-else-if=\"values[i - 1] && password\" class=\"u-code-input__dot\" />\n <view v-else class=\"u-code-input__placeholder\">{{ placeholderChar }}</view>\n <view v-if=\"focus && i - 1 === currentIndex\" class=\"u-code-input__cursor\" />\n </view>\n </view>\n <input\n class=\"u-code-input__input\"\n type=\"text\"\n :value=\"innerValue\"\n :maxlength=\"length\"\n :disabled=\"disabled\"\n :focus=\"focus\"\n :password=\"password\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ninterface Props {\n value?: string\n length?: number\n size?: number\n gap?: number\n plain?: boolean\n disabled?: boolean\n password?: boolean\n focus?: boolean\n borderColor?: string\n activeBorderColor?: string\n placeholderChar?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n length: 6,\n size: 40,\n gap: 10,\n plain: false,\n disabled: false,\n password: false,\n focus: false,\n borderColor: '#dcdee0',\n activeBorderColor: '#1989fa',\n placeholderChar: '·'\n})\n\nconst emit = defineEmits<{\n 'update:value': [value: string]\n 'update:modelValue': [value: string]\n input: [value: string]\n complete: [value: string]\n focus: []\n blur: []\n}>()\n\nconst innerValue = ref(props.value)\n\nwatch(() => props.value, (val) => {\n innerValue.value = val\n})\n\nconst values = computed(() => {\n const chars = innerValue.value.split('')\n return chars\n})\n\nconst currentIndex = computed(() => {\n return Math.min(values.value.length, props.length - 1)\n})\n\nconst itemStyle = computed(() => {\n return {\n width: `${props.size}px`,\n height: `${props.size}px`,\n marginRight: `${props.gap}px`\n }\n})\n\nconst itemClass = (i: number) => {\n const classes: string[] = []\n\n if (props.plain) {\n classes.push('u-code-input__item--plain')\n }\n\n if (!props.plain) {\n classes.push('u-code-input__item--filled')\n }\n\n if (values.value[i - 1]) {\n classes.push('u-code-input__item--active')\n }\n\n if (props.focus && i - 1 === currentIndex.value) {\n classes.push('u-code-input__item--focused')\n }\n\n if (props.disabled) {\n classes.push('u-code-input__item--disabled')\n }\n\n return classes\n}\n\nconst handleInput = (e: any) => {\n const val = e.detail.value.replace(/\\D/g, '').slice(0, props.length)\n innerValue.value = val\n\n emit('update:value', val)\n emit('update:modelValue', val)\n emit('input', val)\n\n if (val.length === props.length) {\n emit('complete', val)\n }\n}\n\nconst handleFocus = () => {\n emit('focus')\n}\n\nconst handleBlur = () => {\n emit('blur')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-code-input {\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &__wrapper {\n display: flex;\n flex-direction: row;\n }\n\n &__item {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n position: relative;\n flex-shrink: 0;\n\n &:last-child {\n margin-right: 0 !important;\n }\n\n &--filled {\n background-color: $--bg-color;\n border: 1px solid $--border-color;\n border-radius: $--radius-sm;\n }\n\n &--plain {\n border-bottom: 2px solid $--border-color;\n background-color: transparent;\n }\n\n &--active {\n border-color: $--color-primary;\n }\n\n &--focused {\n border-color: $--color-primary;\n }\n\n &--disabled {\n opacity: 0.5;\n }\n }\n\n &__char {\n color: $--text-color;\n }\n\n &__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: $--text-color;\n }\n\n &__placeholder {\n color: $--text-color-3;\n font-size: 24px;\n }\n\n &__cursor {\n position: absolute;\n left: 0;\n top: 10%;\n height: 80%;\n width: 2px;\n background-color: $--color-primary;\n animation: u-code-input-cursor 1s infinite;\n }\n\n @keyframes u-code-input-cursor {\n 0%, 50% {\n opacity: 1;\n }\n 51%, 100% {\n opacity: 0;\n }\n }\n\n &__input {\n position: absolute;\n top: 0;\n left: 0;\n width: 200%;\n height: 100%;\n opacity: 0;\n z-index: 2;\n }\n}\n</style>","<template>\n <view v-if=\"!loading\" class=\"u-skeleton__content\">\n <slot />\n </view>\n <view v-else class=\"u-skeleton\" :class=\"{ 'u-skeleton--animate': animate }\">\n <!-- 头像骨架 -->\n <view\n v-if=\"avatar\"\n class=\"u-skeleton__avatar\"\n :class=\"`u-skeleton__avatar--${avatarShape}`\"\n :style=\"avatarStyle\"\n />\n <!-- 内容区域 -->\n <view class=\"u-skeleton__content\">\n <!-- 标题骨架 -->\n <view\n v-if=\"title\"\n class=\"u-skeleton__title\"\n :style=\"titleStyle\"\n />\n <!-- 段落骨架 -->\n <view class=\"u-skeleton__paragraphs\">\n <view\n v-for=\"(row, index) in rowList\"\n :key=\"index\"\n class=\"u-skeleton__paragraph\"\n :style=\"getRowStyle(index)\"\n />\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype AvatarShape = 'circle' | 'square'\ntype TitleWidth = number | string\n\ninterface Props {\n loading?: boolean\n animate?: boolean\n avatar?: boolean\n avatarSize?: number | string\n avatarShape?: AvatarShape\n title?: boolean\n titleWidth?: TitleWidth\n row?: number\n rowWidth?: number | string | (number | string)[]\n rowHeight?: number | string | (number | string)[]\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n loading: true,\n animate: true,\n avatar: false,\n avatarSize: 40,\n avatarShape: 'circle',\n title: true,\n titleWidth: '40%',\n row: 3,\n rowWidth: '100%',\n rowHeight: 16\n})\n\nconst avatarStyle = computed(() => {\n const size = typeof props.avatarSize === 'number'\n ? `${props.avatarSize}px`\n : props.avatarSize\n return {\n width: size,\n height: size\n }\n})\n\nconst titleStyle = computed(() => {\n const width = typeof props.titleWidth === 'number'\n ? `${props.titleWidth}px`\n : props.titleWidth\n return { width }\n})\n\nconst rowList = computed(() => {\n return Array.from({ length: props.row }, (_, i) => i)\n})\n\nconst getRowStyle = (index: number) => {\n const style: Record<string, string> = {}\n\n // 处理宽度\n if (Array.isArray(props.rowWidth)) {\n const width = props.rowWidth[index]\n if (width !== undefined) {\n style.width = typeof width === 'number' ? `${width}px` : width\n }\n } else if (index === props.row - 1 && props.rowWidth === '100%') {\n // 最后一行默认 60% 宽度(如果是 100% 才处理)\n style.width = '60%'\n } else {\n style.width = typeof props.rowWidth === 'number'\n ? `${props.rowWidth}px`\n : props.rowWidth\n }\n\n // 处理高度\n if (Array.isArray(props.rowHeight)) {\n const height = props.rowHeight[index]\n if (height !== undefined) {\n style.height = typeof height === 'number' ? `${height}px` : height\n }\n } else {\n style.height = typeof props.rowHeight === 'number'\n ? `${props.rowHeight}px`\n : props.rowHeight\n }\n\n return style\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-skeleton {\n display: flex;\n gap: $--spacing-md;\n\n &--animate {\n .u-skeleton__avatar,\n .u-skeleton__title,\n .u-skeleton__paragraph {\n animation: skeleton-blink 1.2s ease-in-out infinite;\n }\n }\n\n &__avatar {\n flex-shrink: 0;\n background-color: $--bg-color-3;\n border-radius: 50%;\n\n &--circle {\n border-radius: 50%;\n }\n\n &--square {\n border-radius: $--radius-sm;\n }\n }\n\n &__content {\n flex: 1;\n min-width: 0;\n }\n\n &__title {\n height: 20px;\n margin-bottom: $--spacing-md;\n background-color: $--bg-color-3;\n border-radius: $--radius-sm;\n }\n\n &__paragraphs {\n display: flex;\n flex-direction: column;\n gap: $--spacing-sm;\n }\n\n &__paragraph {\n background-color: $--bg-color-3;\n border-radius: $--radius-sm;\n }\n}\n\n@keyframes skeleton-blink {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n}\n</style>","<template>\n <view\n v-show=\"visible\"\n class=\"u-transition\"\n :class=\"transitionClass\"\n :style=\"transitionStyle\"\n @transitionend=\"onTransitionEnd\"\n >\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ntype TransitionMode =\n | 'fade'\n | 'fade-up'\n | 'fade-down'\n | 'fade-left'\n | 'fade-right'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'zoom'\n | 'zoom-fade'\n\ninterface Props {\n show?: boolean\n mode?: TransitionMode\n duration?: number\n delay?: number\n customStyle?: Record<string, string | number>\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n show: false,\n mode: 'fade',\n duration: 300,\n delay: 0\n})\n\nconst emit = defineEmits<{\n (e: 'after-enter'): void\n (e: 'after-leave'): void\n}>()\n\nconst visible = ref(false)\nconst animationPhase = ref<'enter' | 'leave'>('enter')\n\n// 监听 show 变化\nwatch(\n () => props.show,\n (val) => {\n if (val) {\n visible.value = true\n animationPhase.value = 'enter'\n } else {\n animationPhase.value = 'leave'\n }\n },\n { immediate: true }\n)\n\nconst transitionClass = computed(() => {\n const classes: string[] = []\n\n if (animationPhase.value === 'enter') {\n classes.push(`u-transition--${props.mode}-enter`)\n } else {\n classes.push(`u-transition--${props.mode}-leave`)\n }\n\n return classes\n})\n\nconst transitionStyle = computed(() => {\n const style: Record<string, string | number> = {\n transitionDuration: `${props.duration}ms`,\n transitionDelay: `${props.delay}ms`,\n transitionProperty: 'opacity, transform',\n transitionTimingFunction: 'ease-out'\n }\n\n if (props.customStyle) {\n Object.assign(style, props.customStyle)\n }\n\n return style\n})\n\nconst onTransitionEnd = () => {\n if (animationPhase.value === 'leave') {\n visible.value = false\n emit('after-leave')\n } else {\n emit('after-enter')\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-transition {\n // 基础状态\n opacity: 1;\n transform: none;\n\n // 淡入淡出\n &--fade-enter {\n opacity: 0;\n }\n &--fade-leave {\n opacity: 0;\n }\n\n // 上滑淡入\n &--fade-up-enter {\n opacity: 0;\n transform: translateY(100%);\n }\n &--fade-up-leave {\n opacity: 0;\n transform: translateY(-100%);\n }\n\n // 下滑淡入\n &--fade-down-enter {\n opacity: 0;\n transform: translateY(-100%);\n }\n &--fade-down-leave {\n opacity: 0;\n transform: translateY(100%);\n }\n\n // 左滑淡入\n &--fade-left-enter {\n opacity: 0;\n transform: translateX(100%);\n }\n &--fade-left-leave {\n opacity: 0;\n transform: translateX(-100%);\n }\n\n // 右滑淡入\n &--fade-right-enter {\n opacity: 0;\n transform: translateX(-100%);\n }\n &--fade-right-leave {\n opacity: 0;\n transform: translateX(100%);\n }\n\n // 上滑进入\n &--slide-up-enter {\n transform: translateY(100%);\n }\n &--slide-up-leave {\n transform: translateY(-100%);\n }\n\n // 下滑进入\n &--slide-down-enter {\n transform: translateY(-100%);\n }\n &--slide-down-leave {\n transform: translateY(100%);\n }\n\n // 左滑进入\n &--slide-left-enter {\n transform: translateX(100%);\n }\n &--slide-left-leave {\n transform: translateX(-100%);\n }\n\n // 右滑进入\n &--slide-right-enter {\n transform: translateX(-100%);\n }\n &--slide-right-leave {\n transform: translateX(100%);\n }\n\n // 缩放\n &--zoom-enter {\n transform: scale(0);\n }\n &--zoom-leave {\n transform: scale(0);\n }\n\n // 缩放淡入\n &--zoom-fade-enter {\n opacity: 0;\n transform: scale(0.5);\n }\n &--zoom-fade-leave {\n opacity: 0;\n transform: scale(0.5);\n }\n}\n</style>","<template>\n <text\n class=\"u-link\"\n :class=\"linkClass\"\n :style=\"linkStyle\"\n @click=\"handleClick\"\n >\n <slot>{{ text }}</slot>\n </text>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype LinkType = 'default' | 'primary' | 'success' | 'warning' | 'danger'\n\ninterface Props {\n text?: string\n type?: LinkType\n color?: string\n underline?: boolean\n href?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n text: '',\n type: 'default',\n underline: false,\n disabled: false\n})\n\nconst emit = defineEmits<{\n (e: 'click'): void\n}>()\n\nconst linkClass = computed(() => [\n `u-link--${props.type}`,\n {\n 'u-link--underline': props.underline,\n 'u-link--disabled': props.disabled\n }\n])\n\nconst linkStyle = computed(() => {\n const style: Record<string, string> = {}\n if (props.color) {\n style.color = props.color\n }\n return style\n})\n\nconst handleClick = () => {\n if (props.disabled) return\n\n if (props.href) {\n // 在新窗口打开链接\n // uni-app 环境下使用特定方法\n // #ifdef H5\n window.open(props.href, '_blank')\n // #endif\n }\n\n emit('click')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-link {\n display: inline;\n color: $--text-color-2;\n font-size: inherit;\n word-break: break-all;\n\n &--default {\n color: $--text-color-2;\n }\n\n &--primary {\n color: $--color-primary;\n }\n\n &--success {\n color: $--color-success;\n }\n\n &--warning {\n color: $--color-warning;\n }\n\n &--danger {\n color: $--color-danger;\n }\n\n &--underline {\n text-decoration: underline;\n }\n\n &--disabled {\n color: $--text-color-3;\n opacity: 0.5;\n }\n}\n</style>","<template>\n <view class=\"u-read-more\">\n <view\n class=\"u-read-more__content\"\n :style=\"contentStyle\"\n >\n <slot />\n </view>\n <view\n v-if=\"showToggle\"\n class=\"u-read-more__toggle\"\n @click=\"handleToggle\"\n >\n <text class=\"u-read-more__toggle-text\">{{ toggleText }}</text>\n <text class=\"u-read-more__toggle-icon\">{{ expanded ? '↑' : '↓' }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ninterface Props {\n maxLength?: number\n rows?: number\n expandText?: string\n collapseText?: string\n autoCollapse?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n maxLength: 200,\n rows: 3,\n expandText: '展开',\n collapseText: '收起',\n autoCollapse: false\n})\n\nconst emit = defineEmits<{\n (e: 'expand'): void\n (e: 'collapse'): void\n}>()\n\nconst expanded = ref(false)\nconst showToggle = ref(true)\n\n// 内容区域样式\nconst contentStyle = computed(() => {\n if (expanded.value) {\n return {}\n }\n // 使用 line-clamp 限制行数\n return {\n display: '-webkit-box',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n webkitLineClamp: String(props.rows),\n webkitBoxOrient: 'vertical'\n }\n})\n\n// 切换按钮文字\nconst toggleText = computed(() => {\n return expanded.value ? props.collapseText : props.expandText\n})\n\n// 切换展开/收起\nconst handleToggle = () => {\n expanded.value = !expanded.value\n\n if (expanded.value) {\n emit('expand')\n } else {\n emit('collapse')\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-read-more {\n &__content {\n font-size: $--font-size-md;\n color: $--text-color;\n line-height: 1.6;\n word-break: break-all;\n }\n\n &__toggle {\n display: inline-flex;\n align-items: center;\n margin-top: $--spacing-sm;\n color: $--color-primary;\n font-size: $--font-size-md;\n\n &:active {\n opacity: 0.7;\n }\n }\n\n &__toggle-text {\n margin-right: $--spacing-xs;\n }\n\n &__toggle-icon {\n font-size: $--font-size-sm;\n }\n}\n</style>","<template>\n <view class=\"u-tabbar\">\n <!-- 导航栏背景 -->\n <view class=\"u-tabbar__nav-wrap\">\n <!-- 左侧Tab按钮 -->\n <view\n class=\"u-tabbar__tab-btn\"\n :class=\"{ 'u-tabbar__tab-btn--active': modelValue === leftTab.value }\"\n @click=\"switchTab(leftTab.value)\"\n >\n <u-icon\n v-if=\"leftTab.icon\"\n :name=\"leftTab.icon\"\n :size=\"16\"\n :color=\"modelValue === leftTab.value ? activeColor : inactiveColor\"\n />\n <text\n class=\"u-tabbar__tab-text\"\n :style=\"{ color: modelValue === leftTab.value ? activeColor : inactiveColor }\"\n >\n {{ leftTab.label }}\n </text>\n </view>\n\n <!-- 中间占位 + 凸起按钮 -->\n <view class=\"u-tabbar__center\">\n <view\n class=\"u-tabbar__center-btn\"\n :class=\"{\n 'u-tabbar__center-btn--active': modelValue === centerTab.value,\n 'u-tabbar__center-btn--left-active': modelValue === leftTab.value\n }\"\n @click=\"switchTab(centerTab.value)\"\n >\n <text class=\"u-tabbar__center-brand\">\n {{ centerBrand }}\n </text>\n <text class=\"u-tabbar__center-text\">\n {{ centerLabel }}\n </text>\n </view>\n </view>\n\n <!-- 右侧Tab按钮 -->\n <view\n class=\"u-tabbar__tab-btn\"\n :class=\"{ 'u-tabbar__tab-btn--active': modelValue === rightTab.value }\"\n @click=\"switchTab(rightTab.value)\"\n >\n <u-icon\n v-if=\"rightTab.icon\"\n :name=\"rightTab.icon\"\n :size=\"16\"\n :color=\"modelValue === rightTab.value ? activeColor : inactiveColor\"\n />\n <text\n class=\"u-tabbar__tab-text\"\n :style=\"{ color: modelValue === rightTab.value ? activeColor : inactiveColor }\"\n >\n {{ rightTab.label }}\n </text>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport UIcon from '../u-icon/u-icon.vue'\n\nexport interface TabItem {\n /** 标签文字 */\n label: string\n /** 图标名称 */\n icon?: string\n /** 标识值 */\n value: string\n}\n\nexport interface Props {\n /** 当前选中的tab值 */\n modelValue?: string\n /** 左侧Tab配置 */\n leftTab?: TabItem\n /** 中间Tab配置 */\n centerTab?: TabItem\n /** 右侧Tab配置 */\n rightTab?: TabItem\n /** 中间品牌文字 */\n centerBrand?: string\n /** 中间标签文字 */\n centerLabel?: string\n /** 激活状态颜色 */\n activeColor?: string\n /** 未激活状态颜色 */\n inactiveColor?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 'home',\n leftTab: () => ({ label: '首页', icon: 'home-fill', value: 'home' }),\n centerTab: () => ({ label: '图域', value: 'center' }),\n rightTab: () => ({ label: '我的', icon: 'account-fill', value: 'mine' }),\n centerBrand: 'TU',\n centerLabel: '图域',\n activeColor: '#0c958e',\n inactiveColor: '#ffffff'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n 'tab-change': [value: string]\n}>()\n\n/**\n * 切换tab\n * @param tab - 目标tab值\n */\nconst switchTab = (tab: string) => {\n emit('update:modelValue', tab)\n emit('tab-change', tab)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// 薄荷主题色\n$--mint-1: #12b6af;\n$--mint-2: #9fe4dd;\n$--mint-3: #65d8d1;\n$--ink: #1b4d4a;\n$--paper: #ffffff;\n\n.u-tabbar {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 999;\n width: 100%;\n pointer-events: none;\n\n &__nav-wrap {\n pointer-events: auto;\n position: absolute;\n left: 14px;\n right: 14px;\n bottom: 14px;\n z-index: 5;\n height: 56px;\n border-radius: 28px;\n background: linear-gradient(90deg, $--mint-1 0%, $--mint-2 100%);\n box-shadow: 0 10px 24px rgba(7, 114, 108, 0.3);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n box-sizing: border-box;\n }\n\n // Tab按钮\n &__tab-btn {\n height: 40px;\n border-radius: 20px;\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n transition: all 200ms ease;\n white-space: nowrap;\n overflow: hidden;\n padding: 0 16px;\n margin: 0 20px;\n\n &--active {\n background: $--paper;\n box-shadow: inset 0 0 0 1px rgba(17, 135, 128, 0.14);\n }\n }\n\n &__tab-text {\n font-weight: 600;\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // 中间区域 - 占位\n &__center {\n position: relative;\n width: 72px;\n height: 56px;\n flex-shrink: 0;\n }\n\n // 中间凸起按钮\n &__center-btn {\n position: absolute;\n left: 50%;\n top: -22px;\n transform: translateX(-50%);\n width: 72px;\n height: 72px;\n border-radius: 50%;\n border: 3px solid $--mint-2;\n background: $--paper;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 2px;\n box-shadow: 0 8px 20px rgba(8, 112, 106, 0.25);\n transition: all 200ms ease;\n\n &:active {\n transform: translateX(-50%) scale(0.95);\n }\n\n &--active {\n border-color: $--mint-1;\n box-shadow: 0 8px 24px rgba(8, 112, 106, 0.35);\n }\n\n // 左侧tab选中时的样式(首页选中)\n &--left-active {\n background: linear-gradient(135deg, $--mint-1 0%, $--mint-3 100%);\n border-color: $--mint-2;\n\n .u-tabbar__center-brand,\n .u-tabbar__center-text {\n color: $--paper;\n }\n }\n }\n\n &__center-brand {\n font-size: 22px;\n line-height: 1;\n font-weight: 700;\n color: $--mint-1;\n letter-spacing: 1px;\n }\n\n &__center-text {\n font-size: 12px;\n letter-spacing: 0.5px;\n color: $--mint-1;\n font-weight: 500;\n }\n}\n</style>\n"],"names":["__default__","computed","_createElementBlock","_openBlock","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_toDisplayString","_hoisted_5","_renderSlot","ref","$slots","_hoisted_1","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_normalizeClass","_normalizeStyle","_Fragment","_renderList","_createBlock","_createVNode","useSlots","nextValue","list","watch","date","provide","grid","inject","onUnmounted","_hoisted_11","tick","onMounted","_withModifiers","group","icons"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/u-button/u-button.vue","../src/components/u-input/u-input.vue","../src/components/u-cell/u-cell.vue","../src/components/u-cell-group/u-cell-group.vue","../src/components/u-modal/u-modal.vue","../src/components/u-icon/icons/arrow-down.svg","../src/components/u-icon/icons/arrow-left.svg","../src/components/u-icon/icons/arrow-right.svg","../src/components/u-icon/icons/arrow-up.svg","../src/components/u-icon/icons/check.svg","../src/components/u-icon/icons/check-circle.svg","../src/components/u-icon/icons/chevron-left.svg","../src/components/u-icon/icons/chevron-right.svg","../src/components/u-icon/icons/clear.svg","../src/components/u-icon/icons/clear-o.svg","../src/components/u-icon/icons/close.svg","../src/components/u-icon/icons/code.svg","../src/components/u-icon/icons/copy.svg","../src/components/u-icon/icons/delete.svg","../src/components/u-icon/icons/download.svg","../src/components/u-icon/icons/edit.svg","../src/components/u-icon/icons/email.svg","../src/components/u-icon/icons/error.svg","../src/components/u-icon/icons/error-o.svg","../src/components/u-icon/icons/expand-less.svg","../src/components/u-icon/icons/expand-more.svg","../src/components/u-icon/icons/eye.svg","../src/components/u-icon/icons/eye-off.svg","../src/components/u-icon/icons/flag.svg","../src/components/u-icon/icons/flag-o.svg","../src/components/u-icon/icons/fullscreen.svg","../src/components/u-icon/icons/exit-fullscreen.svg","../src/components/u-icon/icons/grid.svg","../src/components/u-icon/icons/heart.svg","../src/components/u-icon/icons/heart-o.svg","../src/components/u-icon/icons/info.svg","../src/components/u-icon/icons/info-o.svg","../src/components/u-icon/icons/keyboard-arrow-down.svg","../src/components/u-icon/icons/keyboard-arrow-left.svg","../src/components/u-icon/icons/keyboard-arrow-right.svg","../src/components/u-icon/icons/keyboard-arrow-up.svg","../src/components/u-icon/icons/like.svg","../src/components/u-icon/icons/like-o.svg","../src/components/u-icon/icons/link.svg","../src/components/u-icon/icons/list.svg","../src/components/u-icon/icons/lock.svg","../src/components/u-icon/icons/unlock.svg","../src/components/u-icon/icons/loading.svg","../src/components/u-icon/icons/menu.svg","../src/components/u-icon/icons/menu-o.svg","../src/components/u-icon/icons/message.svg","../src/components/u-icon/icons/minus.svg","../src/components/u-icon/icons/notification.svg","../src/components/u-icon/icons/bell.svg","../src/components/u-icon/icons/phone.svg","../src/components/u-icon/icons/plus.svg","../src/components/u-icon/icons/question.svg","../src/components/u-icon/icons/refresh.svg","../src/components/u-icon/icons/refresh-o.svg","../src/components/u-icon/icons/reload.svg","../src/components/u-icon/icons/redo.svg","../src/components/u-icon/icons/undo.svg","../src/components/u-icon/icons/search.svg","../src/components/u-icon/icons/search-o.svg","../src/components/u-icon/icons/setting.svg","../src/components/u-icon/icons/share.svg","../src/components/u-icon/icons/smile.svg","../src/components/u-icon/icons/smile-o.svg","../src/components/u-icon/icons/star.svg","../src/components/u-icon/icons/star-o.svg","../src/components/u-icon/icons/success.svg","../src/components/u-icon/icons/success-o.svg","../src/components/u-icon/icons/tick.svg","../src/components/u-icon/icons/upload.svg","../src/components/u-icon/icons/user.svg","../src/components/u-icon/icons/account.svg","../src/components/u-icon/icons/group.svg","../src/components/u-icon/icons/home.svg","../src/components/u-icon/icons/home-fill.svg","../src/components/u-icon/icons/account-fill.svg","../src/components/u-icon/icons/user-fill.svg","../src/components/u-icon/icons/warning.svg","../src/components/u-icon/icons/warning-o.svg","../src/components/u-icon/icons/zoom-in.svg","../src/components/u-icon/icons/zoom-out.svg","../src/components/u-icon/icons/sync.svg","../src/components/u-icon/icons/clock.svg","../src/components/u-icon/icons/bookmark.svg","../src/components/u-icon/icons/bookmark-o.svg","../src/components/u-icon/icons/chat.svg","../src/components/u-icon/icons/clipboard.svg","../src/components/u-icon/icons/location.svg","../src/components/u-icon/icons/scan.svg","../src/components/u-icon/icons/qrcode.svg","../src/components/u-icon/icons/moon.svg","../src/components/u-icon/index.ts","../src/components/u-icon/u-icon.vue","../src/components/u-loading/u-loading.vue","../src/components/u-tag/u-tag.vue","../src/components/u-switch/u-switch.vue","../src/components/u-image/u-image.vue","../src/components/u-divider/u-divider.vue","../src/components/u-notice-bar/u-notice-bar.vue","../src/components/u-layout/u-layout.vue","../src/components/u-badge/u-badge.vue","../src/components/u-loading-page/u-loading-page.vue","../src/components/u-parse/u-parse.vue","../src/components/u-keyboard/u-keyboard.vue","../src/components/u-picker/u-picker.vue","../src/components/u-datetime-picker/u-datetime-picker.vue","../src/components/u-rate/u-rate.vue","../src/components/u-grid/u-grid.vue","../src/components/u-grid-item/u-grid-item.vue","../src/components/u-swiper/u-swiper.vue","../src/components/u-swiper-item/u-swiper-item.vue","../src/components/u-search/u-search.vue","../src/components/u-number-box/u-number-box.vue","../src/components/u-upload/u-upload.vue","../src/components/u-textarea/u-textarea.vue","../src/components/u-slider/u-slider.vue","../src/components/u-list/u-list.vue","../src/components/u-list-item/u-list-item.vue","../src/components/u-line-progress/u-line-progress.vue","../src/components/u-count-down/u-count-down.vue","../src/components/u-tooltip/u-tooltip.vue","../src/components/u-avatar/u-avatar.vue","../src/components/u-empty/u-empty.vue","../src/components/u-checkbox/u-checkbox.vue","../src/components/u-checkbox-group/u-checkbox-group.vue","../src/components/u-radio/u-radio.vue","../src/components/u-radio-group/u-radio-group.vue","../src/components/u-toast/u-toast.vue","../src/components/u-popup/u-popup.vue","../src/components/u-code-input/u-code-input.vue","../src/components/u-skeleton/u-skeleton.vue","../src/components/u-transition/u-transition.vue","../src/components/u-link/u-link.vue","../src/components/u-read-more/u-read-more.vue","../src/components/u-tabbar/u-tabbar.vue","../src/components/u-qrcode/u-qrcode.vue","../src/components/u-barcode/u-barcode.vue"],"sourcesContent":["<template>\n <button\n class=\"u-button\"\n :class=\"[\n `u-button--${type}`,\n `u-button--${size}`,\n {\n 'u-button--plain': plain,\n 'u-button--round': round,\n 'u-button--square': square,\n 'u-button--disabled': disabled,\n 'u-button--loading': loading,\n 'u-button--block': block\n }\n ]\"\n :style=\"buttonStyle\"\n :disabled=\"disabled || loading\"\n :hover-class=\"disabled || loading ? '' : 'u-button--active'\"\n @click=\"handleClick\"\n >\n <view v-if=\"loading\" class=\"u-button__loading\">\n <view class=\"u-button__loading-icon\"></view>\n </view>\n <view v-else class=\"u-button__content\">\n <text v-if=\"icon\" class=\"u-button__icon\">{{ icon }}</text>\n <text class=\"u-button__text\"><slot /></text>\n </view>\n </button>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'default'\ntype ButtonSize = 'large' | 'normal' | 'small' | 'mini'\n\ninterface Props {\n type?: ButtonType\n size?: ButtonSize\n plain?: boolean\n round?: boolean\n square?: boolean\n disabled?: boolean\n loading?: boolean\n block?: boolean\n icon?: string\n color?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n type: 'default',\n size: 'normal',\n plain: false,\n round: false,\n square: false,\n disabled: false,\n loading: false,\n block: false\n})\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst buttonStyle = computed(() => {\n if (props.color) {\n return {\n backgroundColor: props.plain ? 'transparent' : props.color,\n borderColor: props.color,\n color: props.plain ? props.color : '#fff'\n }\n }\n return {}\n})\n\nconst handleClick = (event: MouseEvent) => {\n if (!props.disabled && !props.loading) {\n emit('click', event)\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n box-sizing: border-box;\n height: $--button-height;\n padding: 0 $--spacing-lg;\n margin: 0;\n font-size: $--font-size-md;\n line-height: 1.2;\n text-align: center;\n border-radius: $--border-radius-md;\n border: 1px solid transparent;\n transition: all $--transition-duration;\n -webkit-tap-highlight-color: transparent;\n\n &::after {\n border: none;\n }\n\n &--default {\n color: $--text-color;\n background-color: $--bg-color-2;\n border-color: $--border-color;\n }\n\n &--primary {\n color: $--text-color-white;\n background-color: $--color-primary;\n border-color: $--color-primary;\n }\n\n &--success {\n color: $--text-color-white;\n background-color: $--color-success;\n border-color: $--color-success;\n }\n\n &--warning {\n color: $--text-color-white;\n background-color: $--color-warning;\n border-color: $--color-warning;\n }\n\n &--danger {\n color: $--text-color-white;\n background-color: $--color-danger;\n border-color: $--color-danger;\n }\n\n &--large {\n height: $--button-height-lg;\n font-size: $--font-size-lg;\n }\n\n &--small {\n height: $--button-height-sm;\n padding: 0 $--spacing-md;\n font-size: $--font-size-sm;\n }\n\n &--mini {\n height: 24px;\n padding: 0 $--spacing-sm;\n font-size: $--font-size-xs;\n }\n\n &--plain {\n background-color: transparent;\n\n &.u-button--primary {\n color: $--color-primary;\n }\n\n &.u-button--success {\n color: $--color-success;\n }\n\n &.u-button--warning {\n color: $--color-warning;\n }\n\n &.u-button--danger {\n color: $--color-danger;\n }\n }\n\n &--round {\n border-radius: 999px;\n }\n\n &--square {\n border-radius: 0;\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &--loading {\n }\n\n &--block {\n display: flex;\n width: 100%;\n }\n\n &--active {\n opacity: 0.8;\n }\n\n &__content {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon {\n margin-right: $--spacing-xs;\n }\n\n &__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__loading-icon {\n width: 16px;\n height: 16px;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n animation: u-button-loading 0.8s linear infinite;\n }\n}\n\n@keyframes u-button-loading {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n","<template>\n <view\n class=\"u-input\"\n :class=\"{\n 'u-input--disabled': disabled,\n 'u-input--error': error,\n 'u-input--focus': isFocus\n }\"\n >\n <view v-if=\"$slots.prefix || prefixIcon\" class=\"u-input__prefix\">\n <slot name=\"prefix\">\n <text class=\"u-input__icon\">{{ prefixIcon }}</text>\n </slot>\n </view>\n\n <view class=\"u-input__body\">\n <input\n class=\"u-input__control\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :placeholder-style=\"placeholderStyle\"\n :placeholder-class=\"'u-input__placeholder'\"\n :disabled=\"disabled\"\n :maxlength=\"maxlength\"\n :focus=\"focus\"\n :confirm-type=\"confirmType\"\n :adjust-position=\"adjustPosition\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @confirm=\"handleConfirm\"\n />\n </view>\n\n <view v-if=\"clearable && modelValue\" class=\"u-input__clear\" @click=\"handleClear\">\n <text class=\"u-input__clear-icon\">×</text>\n </view>\n\n <view v-if=\"$slots.suffix || suffixIcon\" class=\"u-input__suffix\">\n <slot name=\"suffix\">\n <text class=\"u-input__icon\">{{ suffixIcon }}</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\ntype InputType = 'text' | 'number' | 'idcard' | 'digit' | 'password'\ntype ConfirmType = 'send' | 'search' | 'next' | 'go' | 'done'\n\ninterface Props {\n modelValue?: string | number\n type?: InputType\n placeholder?: string\n placeholderStyle?: string\n disabled?: boolean\n maxlength?: number\n clearable?: boolean\n focus?: boolean\n error?: boolean\n confirmType?: ConfirmType\n adjustPosition?: boolean\n prefixIcon?: string\n suffixIcon?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n type: 'text',\n placeholder: '请输入',\n disabled: false,\n maxlength: 140,\n clearable: false,\n focus: false,\n error: false,\n confirmType: 'done',\n adjustPosition: true\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n input: [value: string]\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n confirm: [value: string]\n clear: []\n}>()\n\nconst isFocus = ref(false)\n\nconst handleInput = (event: any) => {\n const value = event.detail.value\n emit('update:modelValue', value)\n emit('input', value)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n isFocus.value = true\n emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n isFocus.value = false\n emit('blur', event)\n}\n\nconst handleConfirm = (event: any) => {\n emit('confirm', event.detail.value)\n}\n\nconst handleClear = () => {\n emit('update:modelValue', '')\n emit('input', '')\n emit('clear')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-input {\n display: flex;\n align-items: center;\n width: 100%;\n height: $--input-height;\n padding: 0 $--spacing-md;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-md;\n border: 1px solid $--border-color;\n transition: all $--transition-duration;\n\n &--focus {\n border-color: $--color-primary;\n }\n\n &--error {\n border-color: $--color-danger;\n }\n\n &--disabled {\n background-color: $--bg-color;\n }\n\n &__body {\n flex: 1;\n display: flex;\n align-items: center;\n }\n\n &__control {\n flex: 1;\n height: 100%;\n font-size: $--font-size-md;\n color: $--text-color;\n background: transparent;\n }\n\n &__placeholder {\n color: $--text-color-3;\n }\n\n &__prefix,\n &__suffix {\n display: flex;\n align-items: center;\n }\n\n &__prefix {\n margin-right: $--spacing-sm;\n }\n\n &__suffix {\n margin-left: $--spacing-sm;\n }\n\n &__icon {\n color: $--text-color-2;\n font-size: $--font-size-md;\n }\n\n &__clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: $--spacing-sm;\n background-color: $--text-color-3;\n border-radius: 50%;\n }\n\n &__clear-icon {\n color: $--bg-color-2;\n font-size: 12px;\n line-height: 1;\n }\n}\n</style>\n","<template>\n <view\n class=\"u-cell\"\n :class=\"{\n 'u-cell--clickable': isClickable,\n 'u-cell--disabled': disabled\n }\"\n :hover-class=\"isClickable && !disabled ? 'u-cell--active' : ''\"\n @click=\"handleClick\"\n >\n <view v-if=\"$slots.icon || icon\" class=\"u-cell__icon\">\n <slot name=\"icon\">\n <image v-if=\"icon\" class=\"u-cell__icon-img\" :src=\"icon\" mode=\"aspectFit\" />\n </slot>\n </view>\n\n <view class=\"u-cell__content\">\n <view class=\"u-cell__title\">\n <text class=\"u-cell__title-text\">{{ title }}</text>\n <text v-if=\"label\" class=\"u-cell__label\">{{ label }}</text>\n </view>\n\n <view class=\"u-cell__value\">\n <slot name=\"value\">\n <text class=\"u-cell__value-text\">{{ value }}</text>\n </slot>\n </view>\n </view>\n\n <view v-if=\"isLink\" class=\"u-cell__arrow\">\n <text class=\"u-cell__arrow-icon\">›</text>\n </view>\n\n <slot name=\"right-icon\" />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n title?: string\n value?: string | number\n label?: string\n icon?: string\n isLink?: boolean\n to?: string\n url?: string\n disabled?: boolean\n clickable?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n isLink: false,\n disabled: false,\n clickable: false\n})\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst isClickable = computed(() => {\n return props.clickable || props.isLink || props.to || props.url\n})\n\nconst handleClick = (event: MouseEvent) => {\n if (props.disabled) return\n\n emit('click', event)\n\n if (props.url) {\n uni.navigateTo({ url: props.url })\n } else if (props.to) {\n uni.navigateTo({ url: props.to })\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-cell {\n display: flex;\n align-items: center;\n min-height: $--cell-height;\n padding: $--spacing-md $--spacing-lg;\n background-color: $--bg-color-2;\n position: relative;\n\n &::after {\n content: '';\n position: absolute;\n left: $--spacing-lg;\n right: 0;\n bottom: 0;\n height: 1px;\n background-color: $--border-color;\n transform: scaleY(0.5);\n }\n\n &:last-child::after {\n display: none;\n }\n\n &--clickable {\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &--active {\n background-color: $--bg-color;\n }\n\n &__icon {\n margin-right: $--spacing-md;\n\n &-img {\n width: 20px;\n height: 20px;\n }\n }\n\n &__content {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: space-between;\n overflow: hidden;\n }\n\n &__title {\n flex: 1;\n overflow: hidden;\n\n &-text {\n font-size: $--font-size-md;\n color: $--text-color;\n line-height: 24px;\n }\n }\n\n &__label {\n display: block;\n margin-top: 2px;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n line-height: 18px;\n }\n\n &__value {\n overflow: hidden;\n\n &-text {\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n }\n\n &__arrow {\n margin-left: $--spacing-sm;\n color: $--text-color-3;\n\n &-icon {\n font-size: 16px;\n }\n }\n}\n</style>\n","<template>\n <view class=\"u-cell-group\">\n <view v-if=\"title || $slots.title\" class=\"u-cell-group__title\">\n <slot name=\"title\">{{ title }}</slot>\n </view>\n <view class=\"u-cell-group__body\">\n <slot />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n title?: string\n}\n\nwithDefaults(defineProps<Props>(), {\n title: ''\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-cell-group {\n background-color: $--bg-color-2;\n\n &__title {\n padding: $--spacing-md $--spacing-lg;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n background-color: $--bg-color;\n }\n\n &__body {\n position: relative;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-modal\" @click=\"handleMaskClick\">\n <view class=\"u-modal__container\" @click.stop>\n <view v-if=\"title\" class=\"u-modal__header\">\n <text class=\"u-modal__title\">{{ title }}</text>\n </view>\n\n <view class=\"u-modal__body\">\n <slot>\n <text class=\"u-modal__message\">{{ message }}</text>\n </slot>\n </view>\n\n <view class=\"u-modal__footer\">\n <view\n v-if=\"showCancel\"\n class=\"u-modal__button u-modal__button--cancel\"\n @click=\"handleCancel\"\n >\n <text>{{ cancelText }}</text>\n </view>\n <view\n class=\"u-modal__button u-modal__button--confirm\"\n @click=\"handleConfirm\"\n >\n <text>{{ confirmText }}</text>\n </view>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n visible?: boolean\n title?: string\n message?: string\n showCancel?: boolean\n cancelText?: string\n confirmText?: string\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n title: '',\n message: '',\n showCancel: true,\n cancelText: '取消',\n confirmText: '确定',\n closeOnClickOverlay: false\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n cancel: []\n confirm: []\n}>()\n\nconst handleMaskClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n }\n}\n\nconst handleCancel = () => {\n emit('update:visible', false)\n emit('cancel')\n}\n\nconst handleConfirm = () => {\n emit('update:visible', false)\n emit('confirm')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-modal {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(0, 0, 0, 0.5);\n z-index: 999;\n\n &__container {\n width: 280px;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-lg;\n overflow: hidden;\n }\n\n &__header {\n padding: $--spacing-lg $--spacing-lg $--spacing-sm;\n text-align: center;\n }\n\n &__title {\n font-size: $--font-size-lg;\n font-weight: 600;\n color: $--text-color;\n }\n\n &__body {\n padding: $--spacing-md $--spacing-lg $--spacing-lg;\n text-align: center;\n max-height: 300px;\n overflow-y: auto;\n }\n\n &__message {\n font-size: $--font-size-md;\n color: $--text-color-2;\n line-height: 1.5;\n }\n\n &__footer {\n display: flex;\n border-top: 1px solid $--border-color;\n }\n\n &__button {\n flex: 1;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: $--font-size-md;\n transition: background-color $--transition-duration;\n\n &:active {\n background-color: $--bg-color;\n }\n\n &--cancel {\n color: $--text-color-2;\n border-right: 1px solid $--border-color;\n }\n\n &--confirm {\n color: $--color-primary;\n font-weight: 500;\n }\n }\n}\n</style>\n","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%208.59L12%2013.17l4.59-4.58L18%2010l-6%206-6-6%201.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%2011H7.83l5.59-5.59L12%204l-8%208%208%208%201.41-1.41L7.83%2013H20v-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%204l-1.41%201.41L16.17%2011H4v2h12.17l-5.58%205.59L12%2020l8-8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%2015.41L12%2010.83l4.59%204.58L18%2014l-6-6-6%206z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9%2016.17L4.83%2012l-1.42%201.41L9%2019%2021%207l-1.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm-2%2015l-5-5%201.41-1.41L10%2014.17l7.59-7.59L19%208l-9%209z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.41%207.41L14%206l-6%206%206%206%201.41-1.41L10.83%2012z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M10%206L8.59%207.41%2013.17%2012l-4.58%204.59L10%2018l6-6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%206.41L17.59%205%2012%2010.59%206.41%205%205%206.41%2010.59%2012%205%2017.59%206.41%2019%2012%2013.41%2017.59%2019%2019%2017.59%2013.41%2012z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M21%203H3c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h18c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm0%2016H3V5h18v14zM9.41%2015.95L12%2013.36l2.59%202.59L16%2014.54l-2.59-2.59L16%209.36l-1.41-1.41L12%2010.54%209.41%207.95%208%209.36l2.59%202.59L8%2014.54z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%206.41L17.59%205%2012%2010.59%206.41%205%205%206.41%2010.59%2012%205%2017.59%206.41%2019%2012%2013.41%2017.59%2019%2019%2017.59%2013.41%2012z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9.4%2016.6L4.8%2012l4.6-4.6L8%206l-6%206%206%206%201.4-1.4zm5.2%200l4.6-4.6-4.6-4.6L16%206l6%206-6%206-1.4-1.4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16%201H4c-1.1%200-2%20.9-2%202v14h2V3h12V1zm3%204H8c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h11c1.1%200%202-.9%202-2V7c0-1.1-.9-2-2-2zm0%2016H8V7h11v14z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M6%2019c0%201.1.9%202%202%202h8c1.1%200%202-.9%202-2V7H6v12zM19%204h-3.5l-1-1h-5l-1%201H5v2h14V4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%209h-4V3H9v6H5l7%207%207-7zM5%2018v2h14v-2H5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2017.25V21h3.75L17.81%209.94l-3.75-3.75L3%2017.25zM20.71%207.04c.39-.39.39-1.02%200-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41%200l-1.83%201.83%203.75%203.75%201.83-1.83z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%204H4c-1.1%200-1.99.9-1.99%202L2%2018c0%201.1.9%202%202%202h16c1.1%200%202-.9%202-2V6c0-1.1-.9-2-2-2zm0%204l-8%205-8-5V6l8%205%208-5v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.47%202%202%206.47%202%2012s4.47%2010%2010%2010%2010-4.47%2010-10S17.53%202%2012%202zm5%2013.59L15.59%2017%2012%2013.41%208.41%2017%207%2015.59%2010.59%2012%207%208.41%208.41%207%2012%2010.59%2015.59%207%2017%208.41%2013.41%2012%2017%2015.59z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.73%203H8.27L3%208.27v7.46L8.27%2021h7.46L21%2015.73V8.27L15.73%203zM19%2014.9L14.9%2019H9.1L5%2014.9V9.1L9.1%205h5.8L19%209.1v5.8zm-4.17-7.14L12%2010.59%209.17%207.76%207.76%209.17%2010.59%2012l-2.83%202.83%201.41%201.41L12%2013.41l2.83%202.83%201.41-1.41L13.41%2012l2.83-2.83z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7%2014l5-5%205%205z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7%2010l5%205%205-5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%204.5C7%204.5%202.73%207.61%201%2012c1.73%204.39%206%207.5%2011%207.5s9.27-3.11%2011-7.5c-1.73-4.39-6-7.5-11-7.5zM12%2017c-2.76%200-5-2.24-5-5s2.24-5%205-5%205%202.24%205%205-2.24%205-5%205zm0-8c-1.66%200-3%201.34-3%203s1.34%203%203%203%203-1.34%203-3-1.34-3-3-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%207c2.76%200%205%202.24%205%205%200%20.65-.13%201.26-.36%201.83l2.92%202.92c1.51-1.26%202.7-2.89%203.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4%200-2.74.25-3.98.7l2.16%202.16C10.74%207.13%2011.35%207%2012%207zM2%204.27l2.28%202.28.46.46C3.08%208.3%201.78%2010.02%201%2012c1.73%204.39%206%207.5%2011%207.5%201.55%200%203.03-.3%204.38-.84l.42.42L19.73%2022%2021%2020.73%203.27%203%202%204.27zM7.53%209.8l1.55%201.55c-.05.21-.08.43-.08.65%200%201.66%201.34%203%203%203%20.22%200%20.44-.03.65-.08l1.55%201.55c-.67.33-1.41.53-2.2.53-2.76%200-5-2.24-5-5%200-.79.2-1.53.53-2.2zm4.31-.78l3.15%203.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M14.4%206L14%204H5v17h2v-7h5.6l.4%202h7V6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M14.4%206L14%204H5v17h2v-7h5.6l.4%202h7V6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7%2014H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12%207h-3v2h5v-5h-2v3zM14%205v2h3v3h2V5h-5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M5%2016h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6%2011h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M4%208h4V4H4v4zm6%2012h4v-4h-4v4zm-6%200h4v-4H4v4zm0-6h4v-4H4v4zm6%200h4v-4h-4v4zm6-10v4h4V4h-4zm-6%204h4V4h-4v4zm6%206h4v-4h-4v4zm0%206h4v-4h-4v4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2021.35l-1.45-1.32C5.4%2015.36%202%2012.28%202%208.5%202%205.42%204.42%203%207.5%203c1.74%200%203.41.81%204.5%202.09C13.09%203.81%2014.76%203%2016.5%203%2019.58%203%2022%205.42%2022%208.5c0%203.78-3.4%206.86-8.55%2011.54L12%2021.35z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16.5%203c-1.74%200-3.41.81-4.5%202.09C10.91%203.81%209.24%203%207.5%203%204.42%203%202%205.42%202%208.5c0%203.78%203.4%206.86%208.55%2011.54L12%2021.35l1.45-1.32C18.6%2015.36%2022%2012.28%2022%208.5%2022%205.42%2019.58%203%2016.5%203zm-4.4%2015.55l-.1.1-.1-.1C7.14%2014.24%204%2011.39%204%208.5%204%206.5%205.5%205%207.5%205c1.54%200%203.04.99%203.57%202.36h1.87C13.46%205.99%2014.96%205%2016.5%205c2%200%203.5%201.5%203.5%203.5%200%202.89-3.14%205.74-7.9%2010.05z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%203H5c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h14c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm-5%2014H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2015h-2v-6h2v6zm0-8h-2V7h2v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%208.59L12%2013.17l4.59-4.58L18%2010l-6%206-6-6%201.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.41%2016.59L10.83%2012l4.58-4.59L14%206l-6%206%206%206%201.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M8.59%2016.59L13.17%2012%208.59%207.41%2010%206l6%206-6%206-1.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M7.41%2015.41L12%2010.83l4.59%204.58L18%2014l-6-6-6%206z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M1%2021h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17%201%207.59%207.59C7.22%207.95%207%208.45%207%209v10c0%201.1.9%202%202%202h9c.83%200%201.54-.5%201.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16.5%203c-1.74%200-3.41.81-4.5%202.09C10.91%203.81%209.24%203%207.5%203%204.42%203%202%205.42%202%208.5c0%203.78%203.4%206.86%208.55%2011.54L12%2021.35l1.45-1.32C18.6%2015.36%2022%2012.28%2022%208.5%2022%205.42%2019.58%203%2016.5%203zm-4.4%2015.55l-.1.1-.1-.1C7.14%2014.24%204%2011.39%204%208.5%204%206.5%205.5%205%207.5%205c1.54%200%203.04.99%203.57%202.36h1.87C13.46%205.99%2014.96%205%2016.5%205c2%200%203.5%201.5%203.5%203.5%200%202.89-3.14%205.74-7.9%2010.05z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%2019H5V5h7V3H5c-1.11%200-2%20.9-2%202v14c0%201.1.89%202%202%202h14c1.1%200%202-.9%202-2v-7h-2v7zM14%203v2h3.59l-9.83%209.83%201.41%201.41L19%206.41V10h2V3h-7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2013h2v-2H3v2zm0%204h2v-2H3v2zm0-8h2V7H3v2zm4%204h14v-2H7v2zm0%204h14v-2H7v2zM7%207v2h14V7H7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M18%208h-1V6c0-2.76-2.24-5-5-5S7%203.24%207%206v2H6c-1.1%200-2%20.9-2%202v10c0%201.1.9%202%202%202h12c1.1%200%202-.9%202-2V10c0-1.1-.9-2-2-2zm-6%209c-1.1%200-2-.9-2-2s.9-2%202-2%202%20.9%202%202-.9%202-2%202zm3.1-9H8.9V6c0-1.71%201.39-3.1%203.1-3.1%201.71%200%203.1%201.39%203.1%203.1v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2017c1.1%200%202-.9%202-2s-.9-2-2-2-2%20.9-2%202%20.9%202%202%202zm6-9h-1V6c0-2.76-2.24-5-5-5S7%203.24%207%206h1.9c0-1.71%201.39-3.1%203.1-3.1%201.71%200%203.1%201.39%203.1%203.1v2H6c-1.1%200-2%20.9-2%202v10c0%201.1.9%202%202%202h12c1.1%200%202-.9%202-2V10c0-1.1-.9-2-2-2zm0%2012H6V10h12v10z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9.4%2010.5l4.77-8.26C13.47%202.09%2012.75%202%2012%202c-2.4%200-4.6.85-6.32%202.25l3.66%206.35.06-.1zM21.54%209c-.92-2.92-3.15-5.26-5.99-6.34L11.88%209h9.66zm.26%201h-7.49l.29.5%204.76%208.25C21%2016.97%2022%2014.61%2022%2012c0-.69-.07-1.35-.2-2zM8.54%2012l-3.9-6.75C3.01%207.03%202%209.39%202%2012c0%20.69.07%201.35.2%202h7.49l-1.15-2zm-6.08%203c.92%202.92%203.15%205.26%205.99%206.34L12.12%2015H2.46zm11.27%200l-3.9%206.76c.7.15%201.42.24%202.17.24%202.4%200%204.6-.85%206.32-2.25l-3.66-6.35-.93%201.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2018h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M3%2018h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%202H4c-1.1%200-1.99.9-1.99%202L2%2022l4-4h14c1.1%200%202-.9%202-2V4c0-1.1-.9-2-2-2zM6%209h12v2H6V9zm8%205H6v-2h8v2zm4-6H6V6h12v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%2013H5v-2h14v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M10.01%2021.01c0%201.1.89%201.99%201.99%201.99s1.99-.89%201.99-1.99h-3.98zM12%202c-1.1%200-2%20.9-2%202v1.01c-2.88.44-5%202.95-5%205.99V17c0%201.1.9%202%202%202h10c1.1%200%202-.9%202-2v-6c0-3.04-2.12-5.55-5-5.99V4c0-1.1-.9-2-2-2zm0%204c2.21%200%204%201.79%204%204v6H8v-6c0-2.21%201.79-4%204-4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2022c1.1%200%202-.9%202-2h-4c0%201.1.89%202%202%202zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5%201.5v.68C7.63%205.36%206%207.92%206%2011v5l-2%202v1h16v-1l-2-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M6.62%2010.79c1.44%202.83%203.76%205.14%206.59%206.59l2.2-2.2c.27-.27.67-.36%201.02-.24%201.12.37%202.33.57%203.57.57.55%200%201%20.45%201%201V20c0%20.55-.45%201-1%201-9.39%200-17-7.61-17-17%200-.55.45-1%201-1h3.5c.55%200%201%20.45%201%201%200%201.25.2%202.45.57%203.57.11.35.03.74-.25%201.02l-2.2%202.2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%2013h-6v6h-2v-6H5v-2h6V5h2v6h6v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2017h-2v-2h2v2zm2.07-7.75l-.9.92C13.45%2012.9%2013%2013.5%2013%2015h-2v-.5c0-1.1.45-2.1%201.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41%200-1.1-.9-2-2-2s-2%20.9-2%202H8c0-2.21%201.79-4%204-4s4%201.79%204%204c0%20.88-.36%201.68-.93%202.25z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17.65%206.35C16.2%204.9%2014.21%204%2012%204c-4.42%200-7.99%203.58-7.99%208s3.57%208%207.99%208c3.73%200%206.84-2.55%207.73-6h-2.08c-.82%202.33-3.04%204-5.65%204-3.31%200-6-2.69-6-6s2.69-6%206-6c1.66%200%203.14.69%204.22%201.78L13%2011h7V4l-2.35%202.35z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12.5%208c-4.65%200-8.58%203.03-9.96%207.22L2%2014h9v-2l3.6%203.6c-1.05%203.19-4.05%205.5-7.6%205.5-2.65%200-5.05-.99-6.9-2.6L2%2022h9v-2l-3.6-3.6c1.05%203.19%204.05%205.5%207.6%205.5%204.65%200%208.58-3.03%209.96-7.22l-2.36-.78C20.92%2010.97%2017.15%208%2012.5%208z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17.65%206.35A7.958%207.958%200%200012%204c-4.42%200-7.99%203.58-7.99%208s3.57%208%207.99%208c3.73%200%206.84-2.55%207.73-6h-2.08A5.99%205.99%200%200112%2018c-3.31%200-6-2.69-6-6s2.69-6%206-6c1.66%200%203.14.69%204.22%201.78L13%2011h7V4l-2.35%202.35z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M18.4%2010.6C16.55%208.99%2014.15%208%2011.5%208c-4.65%200-8.58%203.03-9.96%207.22L3.9%2016c1.05-3.19%204.05-5.5%207.6-5.5%201.95%200%203.73.72%205.12%201.88L13%2016h9V7l-3.6%203.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12.5%208c-2.65%200-5.05.99-6.9%202.6L2%207v9h9l-3.62-3.62c1.39-1.16%203.16-1.88%205.12-1.88%203.54%200%206.55%202.31%207.6%205.5l2.37-.78C21.08%2011.03%2017.15%208%2012.5%208z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19.14%2012.94c.04-.31.06-.63.06-.94%200-.31-.02-.63-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24%200-.43.17-.47.41l-.36%202.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47%200-.59.22L2.74%208.87c-.12.21-.08.47.12.61l2.03%201.58c-.04.31-.06.63-.06.94s.02.63.06.94l-2.03%201.58c-.18.14-.23.41-.12.61l1.92%203.32c.12.22.37.29.59.22l2.39-.96c.5.38%201.03.7%201.62.94l.36%202.54c.05.24.24.41.48.41h3.84c.24%200%20.44-.17.47-.41l.36-2.54c.59-.24%201.13-.56%201.62-.94l2.39.96c.22.08.47%200%20.59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12%2015.6c-1.98%200-3.6-1.62-3.6-3.6s1.62-3.6%203.6-3.6%203.6%201.62%203.6%203.6-1.62%203.6-3.6%203.6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M18%2016.08c-.76%200-1.44.3-1.96.77L8.91%2012.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5%201.25.81%202.04.81%201.66%200%203-1.34%203-3s-1.34-3-3-3-3%201.34-3%203c0%20.24.04.47.09.7L8.04%209.81C7.5%209.31%206.79%209%206%209c-1.66%200-3%201.34-3%203s1.34%203%203%203c.79%200%201.5-.31%202.04-.81l7.12%204.16c-.05.21-.08.43-.08.65%200%201.61%201.31%202.92%202.92%202.92%201.61%200%202.92-1.31%202.92-2.92s-1.31-2.92-2.92-2.92z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M11.99%202C6.47%202%202%206.48%202%2012s4.47%2010%209.99%2010C17.52%2022%2022%2017.52%2022%2012S17.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208zm3.5-9c.83%200%201.5-.67%201.5-1.5S16.33%208%2015.5%208%2014%208.67%2014%209.5s.67%201.5%201.5%201.5zm-7%200c.83%200%201.5-.67%201.5-1.5S9.33%208%208.5%208%207%208.67%207%209.5%207.67%2011%208.5%2011zm3.5%206.5c2.33%200%204.31-1.46%205.11-3.5H6.89c.8%202.04%202.78%203.5%205.11%203.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M11.99%202C6.47%202%202%206.47%202%2012s4.47%2010%209.99%2010S22%2017.53%2022%2012%2017.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208zm3.5-9c.83%200%201.5-.67%201.5-1.5S16.33%208%2015.5%208%2014%208.67%2014%209.5s.67%201.5%201.5%201.5zm-7%200c.83%200%201.5-.67%201.5-1.5S9.33%208%208.5%208%207%208.67%207%209.5%207.67%2011%208.5%2011zm3.5%206.5c2.33%200%204.31-1.46%205.11-3.5H6.89c.8%202.04%202.78%203.5%205.11%203.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2017.27L18.18%2021l-1.64-7.03L22%209.24l-7.19-.61L12%202%209.19%208.63%202%209.24l5.46%204.73L5.82%2021z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M22%209.24l-7.19-.62L12%202%209.19%208.63%202%209.24l5.46%204.73L5.82%2021%2012%2017.27%2018.18%2021l-1.63-7.03L22%209.24zM12%2015.4l-3.76%202.27%201-4.28-3.32-2.88%204.38-.38L12%206.1l1.71%204.04%204.38.38-3.32%202.88%201%204.28L12%2015.4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm-2%2015l-5-5%201.41-1.41L10%2014.17l7.59-7.59L19%208l-9%209z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9%2016.2L4.8%2012l-1.4%201.4L9%2019%2021%207l-1.4-1.4L9%2016.2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M9%2016.17L4.83%2012l-1.42%201.41L9%2019%2021%207l-1.41-1.41z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19.35%2010.04C18.67%206.59%2015.64%204%2012%204%209.11%204%206.6%205.64%205.35%208.04%202.34%208.36%200%2010.91%200%2014c0%203.31%202.69%206%206%206h13c2.76%200%205-2.24%205-5%200-2.64-2.05-4.78-4.65-4.96zM14%2013v4h-4v-4H7l5-5%205%205h-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%2012c2.21%200%204-1.79%204-4s-1.79-4-4-4-4%201.79-4%204%201.79%204%204%204zm0%202c-2.67%200-8%201.34-8%204v2h16v-2c0-2.66-5.33-4-8-4z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%203H5c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h14c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm-7%203c1.93%200%203.5%201.57%203.5%203.5S13.93%2013%2012%2013s-3.5-1.57-3.5-3.5S10.07%206%2012%206zm7%2013H5v-.23c0-.62.28-1.2.76-1.58C7.47%2015.82%209.64%2015%2012%2015s4.53.82%206.24%202.19c.48.38.76.97.76%201.58V19z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M16%2011c1.66%200%202.99-1.34%202.99-3S17.66%205%2016%205c-1.66%200-3%201.34-3%203s1.34%203%203%203zm-8%200c1.66%200%202.99-1.34%202.99-3S9.66%205%208%205C6.34%205%205%206.34%205%208s1.34%203%203%203zm0%202c-2.33%200-7%201.17-7%203.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8%200c-.29%200-.62.02-.97.05%201.16.84%201.97%201.97%201.97%203.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M10%2020v-6h4v6h5v-8h3L12%203%202%2012h3v8z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%203L4%209v12h6v-6h4v6h6V9l-8-6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm0%203c1.66%200%203%201.34%203%203s-1.34%203-3%203-3-1.34-3-3%201.34-3%203-3zm0%2014.2c-2.5%200-4.71-1.28-6-3.22.03-1.99%204-3.08%206-3.08%201.99%200%205.97%201.09%206%203.08-1.29%201.94-3.5%203.22-6%203.22z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm0%203c1.66%200%203%201.34%203%203s-1.34%203-3%203-3-1.34-3-3%201.34-3%203-3zm0%2014.2c-2.5%200-4.71-1.28-6-3.22.03-1.99%204-3.08%206-3.08%201.99%200%205.97%201.09%206%203.08-1.29%201.94-3.5%203.22-6%203.22z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2015h-2v-2h2v2zm0-4h-2V7h2v6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%202C6.48%202%202%206.48%202%2012s4.48%2010%2010%2010%2010-4.48%2010-10S17.52%202%2012%202zm1%2015h-2v-2h2v2zm0-4h-2V7h2v6z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M15.5%2014h-.79l-.28-.27C15.41%2012.59%2016%2011.11%2016%209.5%2016%205.91%2013.09%203%209.5%203S3%205.91%203%209.5%205.91%2016%209.5%2016c1.61%200%203.09-.59%204.23-1.57l.27.28v.79l5%204.99L20.49%2019l-4.99-5zm-6%200C7.01%2014%205%2011.99%205%209.5S7.01%205%209.5%205%2014%207.01%2014%209.5%2011.99%2014%209.5%2014zM7%209h5v1H7z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M12%204V1L8%205l4%204V6c3.31%200%206%202.69%206%206%200%201.01-.25%201.97-.7%202.8l1.46%201.46C19.54%2015.03%2020%2013.57%2020%2012c0-4.42-3.58-8-8-8zm0%2014c-3.31%200-6-2.69-6-6%200-1.01.25-1.97.7-2.8L5.24%207.74C4.46%208.97%204%2010.43%204%2012c0%204.42%203.58%208%208%208v3l4-4-4-4v3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M11.99%202C6.47%202%202%206.48%202%2012s4.47%2010%209.99%2010C17.52%2022%2022%2017.52%2022%2012S17.52%202%2011.99%202zM12%2020c-4.42%200-8-3.58-8-8s3.58-8%208-8%208%203.58%208%208-3.58%208-8%208zm.5-13H11v6l5.25%203.15.75-1.23-4.5-2.67z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17%203H7c-1.1%200-2%20.9-2%202v16l7-3%207%203V5c0-1.1-.9-2-2-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M17%203H7c-1.1%200-1.99.9-1.99%202L5%2021l7-3%207%203V5c0-1.1-.9-2-2-2zm0%2015l-5-2.18L7%2018V5h10v13z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M20%202H4c-1.1%200-2%20.9-2%202v18l4-4h14c1.1%200%202-.9%202-2V4c0-1.1-.9-2-2-2zm0%2014H6l-2%202V4h16v12z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill='currentColor'%20d='M19%203h-4.18C14.4%201.84%2013.3%201%2012%201c-1.3%200-2.4.84-2.82%202H5c-1.1%200-2%20.9-2%202v14c0%201.1.9%202%202%202h14c1.1%200%202-.9%202-2V5c0-1.1-.9-2-2-2zm-7%200c.55%200%201%20.45%201%201s-.45%201-1%201-1-.45-1-1%20.45-1%201-1zm2%2014H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M12%202C8.13%202%205%205.13%205%209c0%205.25%207%2013%207%2013s7-7.75%207-13c0-3.87-3.13-7-7-7zm0%209.5c-1.38%200-2.5-1.12-2.5-2.5s1.12-2.5%202.5-2.5%202.5%201.12%202.5%202.5-1.12%202.5-2.5%202.5z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M3%2011h8V3H3v8zm2-6h4v4H5V5zm8-2v8h8V3h-8zm6%206h-4V5h4v4zM3%2021h8v-8H3v8zm2-6h4v4H5v-4zm13-2h-2v3h-3v2h3v3h2v-3h3v-2h-3v-3z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M3%203h6v6H3V3zm2%202v2h2V5H5zm8-2h6v6h-6V3zm2%202v2h2V5h-2zM3%2013h6v6H3v-6zm2%202v2h2v-2H5zm13-2h3v2h-3v-2zm-3%200h2v4h-2v-4zm-2%202h2v2h-2v-2zm2%202h3v2h-3v-2zm3%202h2v2h-2v-2zm-5%200h2v2h-2v-2z'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3cpath%20d='M12%203a9%209%200%20109%209c0-.46-.04-.92-.1-1.36a5.389%205.389%200%2001-4.4%202.26%205.403%205.403%200%2001-3.14-9.8c-.44-.06-.9-.1-1.36-.1z'/%3e%3c/svg%3e\"","// 导入所有 SVG 图标\nimport arrowDown from './icons/arrow-down.svg'\nimport arrowLeft from './icons/arrow-left.svg'\nimport arrowRight from './icons/arrow-right.svg'\nimport arrowUp from './icons/arrow-up.svg'\nimport check from './icons/check.svg'\nimport checkCircle from './icons/check-circle.svg'\nimport chevronLeft from './icons/chevron-left.svg'\nimport chevronRight from './icons/chevron-right.svg'\nimport clear from './icons/clear.svg'\nimport clearO from './icons/clear-o.svg'\nimport close from './icons/close.svg'\nimport code from './icons/code.svg'\nimport copy from './icons/copy.svg'\nimport deleteIcon from './icons/delete.svg'\nimport download from './icons/download.svg'\nimport edit from './icons/edit.svg'\nimport email from './icons/email.svg'\nimport error from './icons/error.svg'\nimport errorO from './icons/error-o.svg'\nimport expandLess from './icons/expand-less.svg'\nimport expandMore from './icons/expand-more.svg'\nimport eye from './icons/eye.svg'\nimport eyeOff from './icons/eye-off.svg'\nimport flag from './icons/flag.svg'\nimport flagO from './icons/flag-o.svg'\nimport fullscreen from './icons/fullscreen.svg'\nimport exitFullscreen from './icons/exit-fullscreen.svg'\nimport grid from './icons/grid.svg'\nimport heart from './icons/heart.svg'\nimport heartO from './icons/heart-o.svg'\nimport info from './icons/info.svg'\nimport infoO from './icons/info-o.svg'\nimport keyboardArrowDown from './icons/keyboard-arrow-down.svg'\nimport keyboardArrowLeft from './icons/keyboard-arrow-left.svg'\nimport keyboardArrowRight from './icons/keyboard-arrow-right.svg'\nimport keyboardArrowUp from './icons/keyboard-arrow-up.svg'\nimport like from './icons/like.svg'\nimport likeO from './icons/like-o.svg'\nimport link from './icons/link.svg'\nimport list from './icons/list.svg'\nimport lock from './icons/lock.svg'\nimport unlock from './icons/unlock.svg'\nimport loading from './icons/loading.svg'\nimport menu from './icons/menu.svg'\nimport menuO from './icons/menu-o.svg'\nimport message from './icons/message.svg'\nimport minus from './icons/minus.svg'\nimport notification from './icons/notification.svg'\nimport bell from './icons/bell.svg'\nimport phone from './icons/phone.svg'\nimport plus from './icons/plus.svg'\nimport question from './icons/question.svg'\nimport refresh from './icons/refresh.svg'\nimport refreshO from './icons/refresh-o.svg'\nimport reload from './icons/reload.svg'\nimport redo from './icons/redo.svg'\nimport undo from './icons/undo.svg'\nimport search from './icons/search.svg'\nimport searchO from './icons/search-o.svg'\nimport setting from './icons/setting.svg'\nimport share from './icons/share.svg'\nimport smile from './icons/smile.svg'\nimport smileO from './icons/smile-o.svg'\nimport star from './icons/star.svg'\nimport starO from './icons/star-o.svg'\nimport success from './icons/success.svg'\nimport successO from './icons/success-o.svg'\nimport tick from './icons/tick.svg'\nimport upload from './icons/upload.svg'\nimport user from './icons/user.svg'\nimport account from './icons/account.svg'\nimport group from './icons/group.svg'\nimport home from './icons/home.svg'\nimport homeFill from './icons/home-fill.svg'\nimport accountFill from './icons/account-fill.svg'\nimport userFill from './icons/user-fill.svg'\nimport warning from './icons/warning.svg'\nimport warningO from './icons/warning-o.svg'\nimport zoomIn from './icons/zoom-in.svg'\nimport zoomOut from './icons/zoom-out.svg'\nimport sync from './icons/sync.svg'\nimport clock from './icons/clock.svg'\nimport bookmark from './icons/bookmark.svg'\nimport bookmarkO from './icons/bookmark-o.svg'\nimport chat from './icons/chat.svg'\nimport clipboard from './icons/clipboard.svg'\nimport location from './icons/location.svg'\nimport scan from './icons/scan.svg'\nimport qrcode from './icons/qrcode.svg'\nimport moon from './icons/moon.svg'\n\n// 图标映射表\nexport const icons: Record<string, string> = {\n // 箭头类\n 'arrow-down': arrowDown,\n 'arrow-left': arrowLeft,\n 'arrow-right': arrowRight,\n 'arrow-up': arrowUp,\n 'chevron-left': chevronLeft,\n 'chevron-right': chevronRight,\n 'expand-less': expandLess,\n 'expand-more': expandMore,\n 'keyboard-arrow-down': keyboardArrowDown,\n 'keyboard-arrow-left': keyboardArrowLeft,\n 'keyboard-arrow-right': keyboardArrowRight,\n 'keyboard-arrow-up': keyboardArrowUp,\n\n // 操作类\n 'check': check,\n 'check-circle': checkCircle,\n 'clear': clear,\n 'clear-o': clearO,\n 'close': close,\n 'plus': plus,\n 'minus': minus,\n 'tick': tick,\n\n // 编辑类\n 'copy': copy,\n 'cut': copy,\n 'edit': edit,\n 'delete': deleteIcon,\n 'undo': undo,\n 'redo': redo,\n\n // 文件类\n 'upload': upload,\n 'download': download,\n 'file': clipboard,\n 'folder': clipboard,\n\n // 状态类\n 'success': success,\n 'success-o': successO,\n 'warning': warning,\n 'warning-o': warningO,\n 'error': error,\n 'error-o': errorO,\n 'info': info,\n 'info-o': infoO,\n 'question': question,\n 'loading': loading,\n\n // 社交类\n 'heart': heart,\n 'heart-o': heartO,\n 'star': star,\n 'star-o': starO,\n 'like': like,\n 'like-o': likeO,\n 'share': share,\n 'qrcode': qrcode,\n 'moon': moon,\n\n // 用户类\n 'user': user,\n 'user-fill': userFill,\n 'account': account,\n 'account-fill': accountFill,\n 'group': group,\n 'smile': smile,\n 'smile-o': smileO,\n\n // 导航类 - 新增首页图标\n 'home': home,\n 'home-fill': homeFill,\n\n // 安全类\n 'lock': lock,\n 'unlock': unlock,\n 'eye': eye,\n 'eye-off': eyeOff,\n\n // 交互类\n 'search': search,\n 'search-o': searchO,\n 'zoom-in': zoomIn,\n 'zoom-out': zoomOut,\n 'refresh': refresh,\n 'refresh-o': refreshO,\n 'reload': reload,\n 'sync': sync,\n 'setting': setting,\n 'fullscreen': fullscreen,\n 'exit-fullscreen': exitFullscreen,\n\n // 导航类\n 'menu': menu,\n 'menu-o': menuO,\n 'list': list,\n 'grid': grid,\n 'more': expandMore,\n 'less': expandLess,\n\n // 通讯类\n 'email': email,\n 'phone': phone,\n 'message': message,\n 'chat': chat,\n 'notification': notification,\n 'bell': bell,\n 'link': link,\n\n // 标记类\n 'flag': flag,\n 'flag-o': flagO,\n 'bookmark': bookmark,\n 'bookmark-o': bookmarkO,\n 'tag': flag,\n\n // 其他\n 'code': code,\n 'clock': clock,\n 'time': clock,\n 'calendar': clock,\n\n // 位置和扫码\n 'location': location,\n 'scan': scan,\n}\n\n// 获取图标 SVG 内容\nexport function getIcon(name: string): string | undefined {\n return icons[name]\n}\n\n// 获取所有图标名称\nexport function getIconNames(): string[] {\n return Object.keys(icons)\n}\n\n// 添加自定义图标\nexport function addIcon(name: string, svg: string): void {\n icons[name] = svg\n}\n\n// 默认导出所有图标\nexport default icons","<template>\n <view\n class=\"u-icon\"\n :class=\"{ 'u-icon--spin': spin }\"\n :style=\"iconStyle\"\n @click=\"handleClick\"\n >\n <!-- SVG 图标模式 -->\n <image\n v-if=\"isSvgIcon && iconSrc\"\n class=\"u-icon__svg\"\n :src=\"iconSrc\"\n :style=\"svgStyle\"\n mode=\"aspectFit\"\n />\n <!-- Emoji/文字模式 -->\n <text v-else class=\"u-icon__inner\">{{ name }}</text>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { getIcon } from './index'\n\ninterface Props {\n name: string\n size?: number | string\n color?: string\n spin?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n size: 16\n})\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst handleClick = (event: MouseEvent) => {\n emit('click', event)\n}\n\n// 判断是否为 SVG 图标\nconst isSvgIcon = computed(() => {\n return !!getIcon(props.name)\n})\n\n// 获取图标 SVG 资源\nconst iconSrc = computed(() => {\n return getIcon(props.name) || ''\n})\n\n// 尺寸转换为 px\nconst sizePx = computed(() => {\n const size = typeof props.size === 'number' ? props.size : parseInt(props.size)\n return size + 'px'\n})\n\n// 将颜色转换为 CSS filter\nconst colorToFilter = (color: string): string => {\n // 预定义颜色的 filter 值\n const colorMap: Record<string, string> = {\n '#ff9500': 'invert(58%) sepia(97%) saturate(1833%) hue-rotate(351deg) brightness(101%) contrast(101%)',\n '#12b6af': 'invert(47%) sepia(85%) saturate(475%) hue-rotate(131deg) brightness(92%) contrast(92%)',\n '#333333': 'invert(20%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#666666': 'invert(45%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#999999': 'invert(70%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#ffffff': 'invert(100%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(100%) contrast(100%)',\n '#ff4d4f': 'invert(46%) sepia(98%) saturate(1925%) hue-rotate(335deg) brightness(101%) contrast(101%)',\n }\n\n // 检查是否有预定义的 filter\n const lowerColor = color.toLowerCase()\n if (colorMap[lowerColor]) {\n return colorMap[lowerColor]\n }\n\n // 动态计算 filter(简化版本,适用于纯色图标)\n // 将 hex 转换为 RGB\n const hex = color.replace('#', '')\n const r = parseInt(hex.substring(0, 2), 16)\n const g = parseInt(hex.substring(2, 4), 16)\n const b = parseInt(hex.substring(4, 6), 16)\n\n // 使用 invert + sepia + hue-rotate 组合\n // 这是一个近似方案\n const hue = Math.atan2(Math.sqrt(3) * (g - b), 2 * r - g - b) * 180 / Math.PI\n return `invert(1) sepia(1) saturate(10000%) hue-rotate(${hue}deg)`\n}\n\n// 图标样式\nconst iconStyle = computed(() => {\n const size = typeof props.size === 'number' ? props.size : parseInt(props.size)\n const style: Record<string, string> = {\n fontSize: size + 'px',\n width: size + 'px',\n height: size + 'px'\n }\n\n // SVG 图标通过 filter 设置颜色\n if (props.color && isSvgIcon.value) {\n style.filter = colorToFilter(props.color)\n }\n\n // 非 SVG 图标设置颜色\n if (props.color && !isSvgIcon.value) {\n style.color = props.color\n }\n\n return style\n})\n\n// SVG 图标样式\nconst svgStyle = computed(() => {\n return {\n width: sizePx.value,\n height: sizePx.value\n }\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-style: normal;\n line-height: 1;\n\n &--spin {\n animation: u-icon-spin 1s linear infinite;\n }\n\n &__inner {\n font-family: inherit;\n line-height: 1;\n }\n\n &__svg {\n display: block;\n object-fit: contain;\n }\n}\n\n@keyframes u-icon-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n","<template>\n <view class=\"u-loading\" :class=\"{ 'u-loading--vertical': vertical }\">\n <view class=\"u-loading__spinner\" :style=\"{ width: size + 'px', height: size + 'px' }\">\n <view\n v-for=\"i in 12\"\n :key=\"i\"\n class=\"u-loading__line\"\n :style=\"{\n transform: `rotate(${i * 30}deg)`,\n backgroundColor: color\n }\"\n />\n </view>\n <text v-if=\"text\" class=\"u-loading__text\" :style=\"{ color: textColor || color }\">{{ text }}</text>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n size?: number | string\n color?: string\n text?: string\n textColor?: string\n vertical?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n size: 30,\n color: '#1989fa'\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-loading {\n display: inline-flex;\n align-items: center;\n gap: $--spacing-sm;\n\n &--vertical {\n flex-direction: column;\n }\n\n &__spinner {\n position: relative;\n display: inline-block;\n }\n\n &__line {\n position: absolute;\n top: 0;\n left: 50%;\n width: 2px;\n height: 25%;\n margin-left: -1px;\n border-radius: 1px;\n transform-origin: center 200%;\n opacity: 0.2;\n\n @for $i from 1 through 12 {\n &:nth-child(#{$i}) {\n opacity: 0.2 + ($i - 1) * 0.06;\n }\n }\n }\n\n &__text {\n font-size: $--font-size-sm;\n line-height: 1.5;\n }\n}\n</style>\n","<template>\n <view class=\"u-tag\" :class=\"[`u-tag--${type}`, `u-tag--${size}`, { 'u-tag--plain': plain, 'u-tag--round': round }]\" :style=\"tagStyle\">\n <text class=\"u-tag__text\"><slot /></text>\n <view v-if=\"closable\" class=\"u-tag__close\" @click=\"handleClose\">\n <text>×</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype TagType = 'primary' | 'success' | 'warning' | 'danger' | 'default'\ntype TagSize = 'large' | 'medium' | 'small'\n\ninterface Props {\n type?: TagType\n size?: TagSize\n plain?: boolean\n round?: boolean\n closable?: boolean\n color?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n type: 'default',\n size: 'medium',\n plain: false,\n round: false,\n closable: false\n})\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nconst tagStyle = computed(() => {\n if (props.color) {\n return {\n backgroundColor: props.plain ? 'transparent' : props.color,\n borderColor: props.color,\n color: props.plain ? props.color : '#fff'\n }\n }\n return {}\n})\n\nconst handleClose = () => {\n emit('close')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-tag {\n display: inline-flex;\n align-items: center;\n padding: 0 $--spacing-sm;\n border-radius: 2px;\n border: 1px solid transparent;\n font-size: $--font-size-sm;\n\n &--default {\n color: $--text-color;\n background-color: $--bg-color-3;\n border-color: $--bg-color-3;\n }\n\n &--primary {\n color: $--text-color-white;\n background-color: $--color-primary;\n border-color: $--color-primary;\n }\n\n &--success {\n color: $--text-color-white;\n background-color: $--color-success;\n border-color: $--color-success;\n }\n\n &--warning {\n color: $--text-color-white;\n background-color: $--color-warning;\n border-color: $--color-warning;\n }\n\n &--danger {\n color: $--text-color-white;\n background-color: $--color-danger;\n border-color: $--color-danger;\n }\n\n &--large {\n padding: $--spacing-sm $--spacing-md;\n font-size: $--font-size-md;\n }\n\n &--small {\n padding: 0 $--spacing-xs;\n font-size: $--font-size-xs;\n }\n\n &--plain {\n background-color: transparent;\n\n &.u-tag--primary {\n color: $--color-primary;\n }\n\n &.u-tag--success {\n color: $--color-success;\n }\n\n &.u-tag--warning {\n color: $--color-warning;\n }\n\n &.u-tag--danger {\n color: $--color-danger;\n }\n }\n\n &--round {\n border-radius: 999px;\n }\n\n &__text {\n line-height: 1.4;\n }\n\n &__close {\n margin-left: 2px;\n font-size: 12px;\n }\n}\n</style>\n","<template>\n <view\n class=\"u-switch\"\n :class=\"{ 'u-switch--on': modelValue, 'u-switch--disabled': disabled }\"\n :style=\"switchStyle\"\n @click=\"handleClick\"\n >\n <view class=\"u-switch__node\" :style=\"nodeStyle\">\n <u-loading v-if=\"loading\" :size=\"nodeSize\" :color=\"modelValue ? '#fff' : '#999'\" />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n modelValue?: boolean\n disabled?: boolean\n loading?: boolean\n size?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: false,\n disabled: false,\n loading: false,\n size: 30\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n change: [value: boolean]\n}>()\n\n// 计算节点大小\nconst nodeSize = computed(() => Math.round(props.size * 0.8))\n\n// 开关宽度\nconst switchWidth = computed(() => Math.round(props.size * 1.67))\n\n// 开关样式\nconst switchStyle = computed(() => ({\n width: `${switchWidth.value}px`,\n height: `${props.size}px`,\n borderRadius: `${props.size / 2}px`\n}))\n\n// 节点样式 - 使用 left 而不是 transform,兼容性更好\nconst nodeStyle = computed(() => {\n const node = nodeSize.value\n const gap = Math.round((props.size - node) / 2)\n const left = props.modelValue ? switchWidth.value - node - gap : gap\n\n return {\n width: `${node}px`,\n height: `${node}px`,\n top: `${gap}px`,\n left: `${left}px`\n }\n})\n\nconst handleClick = (e: Event) => {\n e.stopPropagation()\n if (props.disabled || props.loading) return\n\n const newValue = !props.modelValue\n emit('update:modelValue', newValue)\n emit('change', newValue)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-switch {\n position: relative;\n background-color: $--bg-color-3;\n transition: background-color $--transition-duration;\n box-sizing: border-box;\n\n &--on {\n background-color: $--color-primary;\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__node {\n position: absolute;\n background-color: $--bg-color-2;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: left $--transition-duration;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n}\n</style>","<template>\n <view class=\"u-image\" :style=\"{ width: width + 'px', height: height + 'px' }\">\n <image\n class=\"u-image__inner\"\n :src=\"src\"\n :mode=\"mode\"\n :lazy-load=\"lazyLoad\"\n :fade=\"fade\"\n @load=\"handleLoad\"\n @error=\"handleError\"\n />\n <view v-if=\"loading && !loaded\" class=\"u-image__loading\">\n <slot name=\"loading\">\n <u-loading :size=\"20\" />\n </slot>\n </view>\n <view v-if=\"error && !loaded\" class=\"u-image__error\">\n <slot name=\"error\">\n <text class=\"u-image__error-text\">加载失败</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\ninterface Props {\n src: string\n width?: number | string\n height?: number | string\n mode?: string\n lazyLoad?: boolean\n fade?: boolean\n loading?: boolean\n error?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n width: 100,\n height: 100,\n mode: 'aspectFill',\n lazyLoad: true,\n fade: true,\n loading: true,\n error: true\n})\n\nconst emit = defineEmits<{\n load: [event: Event]\n error: [event: Event]\n}>()\n\nconst loaded = ref(false)\n\nconst handleLoad = (event: Event) => {\n loaded.value = true\n emit('load', event)\n}\n\nconst handleError = (event: Event) => {\n loaded.value = false\n emit('error', event)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-image {\n position: relative;\n display: inline-block;\n overflow: hidden;\n\n &__inner {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n &__loading,\n &__error {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: $--bg-color;\n }\n\n &__error-text {\n font-size: $--font-size-sm;\n color: $--text-color-3;\n }\n}\n</style>\n","<template>\n <view class=\"u-divider\" :class=\"{ 'u-divider--hairline': hairline, 'u-divider--dashed': dashed }\">\n <view v-if=\"$slots.default || content\" class=\"u-divider__text\">\n <slot>{{ content }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n content?: string\n hairline?: boolean\n dashed?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n content: '',\n hairline: false,\n dashed: false\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-divider {\n display: flex;\n align-items: center;\n margin: $--spacing-lg 0;\n color: $--text-color-2;\n font-size: $--font-size-sm;\n line-height: 1;\n\n &::before,\n &::after {\n content: '';\n flex: 1;\n height: 1px;\n background-color: $--border-color;\n }\n\n &--hairline {\n &::before,\n &::after {\n transform: scaleY(0.5);\n }\n }\n\n &--dashed {\n &::before,\n &::after {\n border-style: dashed;\n background: transparent;\n border-top: 1px dashed $--border-color;\n border-bottom: none;\n height: 0;\n }\n }\n\n &__text {\n padding: 0 $--spacing-md;\n }\n}\n</style>\n","<template>\n <view class=\"u-notice-bar\" :class=\"{ 'u-notice-bar--wrapable': wrapable }\" :style=\"{ color, background: background }\">\n <view v-if=\"$slots.leftIcon || leftIcon\" class=\"u-notice-bar__left-icon\">\n <slot name=\"leftIcon\">\n <text>{{ leftIcon }}</text>\n </slot>\n </view>\n <view class=\"u-notice-bar__content\" :class=\"{ 'u-notice-bar__content--scrollable': scrollable }\">\n <view\n v-if=\"scrollable\"\n class=\"u-notice-bar__text\"\n :style=\"{ animationDuration: speed + 's' }\"\n >\n <text class=\"u-notice-bar__text-item\">{{ text }}</text>\n <text class=\"u-notice-bar__text-item\">{{ text }}</text>\n </view>\n <text v-else class=\"u-notice-bar__text\">{{ text }}</text>\n </view>\n <view v-if=\"$slots.rightIcon || rightIcon\" class=\"u-notice-bar__right-icon\" @click=\"handleRightIconClick\">\n <slot name=\"rightIcon\">\n <text>{{ rightIcon }}</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n text: string\n color?: string\n background?: string\n leftIcon?: string\n rightIcon?: string\n scrollable?: boolean\n speed?: number\n wrapable?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n color: '#ed6a0c',\n background: '#fffbe8',\n scrollable: false,\n speed: 10,\n wrapable: false\n})\n\nconst emit = defineEmits<{\n 'right-icon-click': []\n}>()\n\nconst handleRightIconClick = () => {\n emit('right-icon-click')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-notice-bar {\n display: flex;\n align-items: center;\n padding: $--spacing-md $--spacing-lg;\n font-size: $--font-size-sm;\n line-height: 24px;\n\n &--wrapable {\n flex-wrap: wrap;\n padding: $--spacing-md $--spacing-lg;\n }\n\n &__content {\n flex: 1;\n overflow: hidden;\n position: relative;\n\n &--scrollable {\n overflow: hidden;\n white-space: nowrap;\n }\n }\n\n &__text {\n display: inline-block;\n white-space: nowrap;\n\n .u-notice-bar__content--scrollable & {\n display: flex;\n animation: u-notice-bar-scroll linear infinite;\n }\n }\n\n &__text-item {\n display: inline-block;\n white-space: nowrap;\n padding-right: 40px;\n }\n\n &__left-icon {\n margin-right: $--spacing-sm;\n }\n\n &__right-icon {\n margin-left: $--spacing-sm;\n }\n}\n\n@keyframes u-notice-bar-scroll {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-50%);\n }\n}\n</style>\n","<template>\n <view class=\"u-layout\" :class=\"{ 'u-layout--has-footer': hasFooter }\">\n <view v-if=\"$slots.header\" class=\"u-layout__header\">\n <slot name=\"header\" />\n </view>\n <view class=\"u-layout__content\">\n <slot />\n </view>\n <view v-if=\"$slots.footer\" class=\"u-layout__footer\">\n <slot name=\"footer\" />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSlots, computed } from 'vue'\n\nconst slots = useSlots()\n\nconst hasFooter = computed(() => !!slots.footer)\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-layout {\n display: flex;\n flex-direction: column;\n min-height: 100vh;\n background-color: $--bg-color;\n\n &__header {\n position: sticky;\n top: 0;\n z-index: 100;\n background-color: $--bg-color-2;\n }\n\n &__content {\n flex: 1;\n overflow: auto;\n }\n\n &__footer {\n position: sticky;\n bottom: 0;\n z-index: 100;\n background-color: $--bg-color-2;\n }\n}\n</style>\n","<template>\n <view class=\"u-badge\" :class=\"{ 'u-badge--fixed': fixed }\">\n <slot />\n <view\n v-if=\"showBadge\"\n class=\"u-badge__content\"\n :class=\"[`u-badge__content--${type}`, { 'u-badge__content--dot': dot, 'u-badge__content--alone': !$slots.default }]\"\n :style=\"badgeStyle\"\n >\n <text v-if=\"!dot && displayValue\" class=\"u-badge__text\">{{ displayValue }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype BadgeType = 'primary' | 'success' | 'warning' | 'danger' | 'info'\n\ninterface Props {\n value?: number | string\n max?: number\n dot?: boolean\n hidden?: boolean\n type?: BadgeType\n color?: string\n offset?: [number, number]\n fixed?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n max: 99,\n dot: false,\n hidden: false,\n type: 'danger',\n fixed: false\n})\n\nconst showBadge = computed(() => {\n return !props.hidden && (props.dot || props.value !== undefined)\n})\n\nconst displayValue = computed(() => {\n if (props.dot) return ''\n if (typeof props.value === 'number') {\n return props.value > props.max ? `${props.max}+` : props.value\n }\n return props.value\n})\n\nconst badgeStyle = computed(() => {\n const style: Record<string, string> = {}\n\n if (props.color) {\n style.backgroundColor = props.color\n }\n\n if (props.offset && props.offset.length === 2) {\n const [x, y] = props.offset\n style.transform = `translate(${x}px, ${y}px)`\n }\n\n return style\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-badge {\n position: relative;\n display: inline-block;\n\n &--fixed {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n }\n\n &__content {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 5px;\n border-radius: 999px;\n font-size: $--font-size-xs;\n line-height: 1;\n color: $--text-color-white;\n white-space: nowrap;\n box-sizing: border-box;\n\n &--dot {\n min-width: 8px;\n width: 8px;\n height: 8px;\n padding: 0;\n border-radius: 50%;\n }\n\n &--alone {\n position: relative;\n transform: none;\n }\n\n &--primary {\n background-color: $--color-primary;\n }\n\n &--success {\n background-color: $--color-success;\n }\n\n &--warning {\n background-color: $--color-warning;\n }\n\n &--danger {\n background-color: $--color-danger;\n }\n\n &--info {\n background-color: $--color-info;\n }\n }\n\n &__text {\n display: inline-block;\n vertical-align: middle;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-loading-page\">\n <view class=\"u-loading-page__content\">\n <view class=\"u-loading-page__spinner\" :style=\"{ width: size + 'px', height: size + 'px' }\">\n <view\n v-for=\"i in 12\"\n :key=\"i\"\n class=\"u-loading-page__line\"\n :style=\"{\n transform: `rotate(${i * 30}deg)`,\n backgroundColor: color\n }\"\n />\n </view>\n <text v-if=\"text\" class=\"u-loading-page__text\" :style=\"{ color: textColor || color }\">{{ text }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n visible?: boolean\n text?: string\n color?: string\n textColor?: string\n size?: number | string\n}\n\nwithDefaults(defineProps<Props>(), {\n visible: false,\n text: '加载中...',\n color: '#1989fa',\n size: 40\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-loading-page {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 999;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: $--bg-color-2;\n\n &__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: $--spacing-md;\n }\n\n &__spinner {\n position: relative;\n display: inline-block;\n }\n\n &__line {\n position: absolute;\n top: 0;\n left: 50%;\n width: 3px;\n height: 25%;\n margin-left: -1.5px;\n border-radius: 2px;\n transform-origin: center 200%;\n opacity: 0.2;\n\n @for $i from 1 through 12 {\n &:nth-child(#{$i}) {\n opacity: 0.2 + ($i - 1) * 0.06;\n }\n }\n }\n\n &__text {\n font-size: $--font-size-md;\n line-height: 1.5;\n }\n}\n</style>\n","<template>\n <view class=\"u-parse\">\n <rich-text\n :nodes=\"parsedNodes\"\n :selectable=\"selectable\"\n :image-menu-prevent=\"imageMenuPrevent\"\n @tap=\"handleTap\"\n />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n content: string\n selectable?: boolean\n imageMenuPrevent?: boolean\n imageMode?: 'aspectFit' | 'aspectFill' | 'widthFix' | 'scaleToFill'\n tagStyle?: Record<string, string>\n lazyLoad?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n content: '',\n selectable: false,\n imageMenuPrevent: false,\n imageMode: 'widthFix',\n lazyLoad: false\n})\n\nconst emit = defineEmits<{\n load: []\n error: [event: Event]\n imgTap: [src: string]\n linkTap: [href: string]\n}>()\n\n// 默认标签样式\nconst defaultTagStyle: Record<string, string> = {\n p: 'margin: 0 0 16px 0; line-height: 1.6;',\n h1: 'font-size: 28px; font-weight: bold; margin: 0 0 16px 0;',\n h2: 'font-size: 24px; font-weight: bold; margin: 0 0 14px 0;',\n h3: 'font-size: 20px; font-weight: bold; margin: 0 0 12px 0;',\n h4: 'font-size: 18px; font-weight: bold; margin: 0 0 10px 0;',\n h5: 'font-size: 16px; font-weight: bold; margin: 0 0 8px 0;',\n h6: 'font-size: 14px; font-weight: bold; margin: 0 0 8px 0;',\n img: 'max-width: 100%; height: auto; display: block;',\n ul: 'margin: 0 0 16px 0; padding-left: 20px;',\n ol: 'margin: 0 0 16px 0; padding-left: 20px;',\n li: 'margin: 4px 0;',\n blockquote: 'margin: 0 0 16px 0; padding: 8px 16px; border-left: 4px solid #ebedf0; background: #f7f8fa;',\n pre: 'margin: 0 0 16px 0; padding: 12px; background: #f7f8fa; border-radius: 4px; overflow-x: auto;',\n code: 'padding: 2px 6px; background: #f7f8fa; border-radius: 2px; font-family: monospace;',\n a: 'color: #1989fa; text-decoration: none;',\n table: 'width: 100%; border-collapse: collapse; margin: 0 0 16px 0;',\n th: 'padding: 8px; border: 1px solid #ebedf0; background: #f7f8fa; font-weight: bold;',\n td: 'padding: 8px; border: 1px solid #ebedf0;',\n hr: 'border: none; border-top: 1px solid #ebedf0; margin: 16px 0;',\n br: 'content: \"\"; display: block; margin-bottom: 8px;'\n}\n\n// 合并样式\nconst mergedTagStyle = computed(() => {\n return { ...defaultTagStyle, ...props.tagStyle }\n})\n\n// 解析内容\nconst parsedNodes = computed(() => {\n if (!props.content) return ''\n\n let html = props.content\n\n // 处理图片\n html = html.replace(/<img([^>]*)>/gi, (match, attrs) => {\n const srcMatch = attrs.match(/src=[\"']([^\"']+)[\"']/i)\n const altMatch = attrs.match(/alt=[\"']([^\"']*)[\"']/i)\n const widthMatch = attrs.match(/width=[\"']?(\\d+)[\"']?/i)\n const heightMatch = attrs.match(/height=[\"']?(\\d+)[\"']?/i)\n\n const src = srcMatch ? srcMatch[1] : ''\n const alt = altMatch ? altMatch[1] : ''\n const width = widthMatch ? widthMatch[1] : 'auto'\n const height = heightMatch ? heightMatch[1] : 'auto'\n\n const style = mergedTagStyle.value.img || ''\n const widthStyle = width !== 'auto' ? `width: ${width}px;` : 'width: 100%;'\n const heightStyle = height !== 'auto' ? `height: ${height}px;` : ''\n\n // 懒加载处理\n const lazyAttr = props.lazyLoad ? `lazy-load=\"true\"` : ''\n return `<img src=\"${src}\" alt=\"${alt}\" style=\"${style} ${widthStyle} ${heightStyle}\" data-src=\"${src}\" ${lazyAttr} />`\n })\n\n // 处理链接\n html = html.replace(/<a([^>]*)>/gi, (match, attrs) => {\n const hrefMatch = attrs.match(/href=[\"']([^\"']+)[\"']/i)\n const href = hrefMatch ? hrefMatch[1] : '#'\n const style = mergedTagStyle.value.a || ''\n return `<a href=\"${href}\" style=\"${style}\" data-href=\"${href}\">`\n })\n\n // 添加默认样式到标签\n const tags = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'li', 'blockquote', 'pre', 'code', 'table', 'th', 'td', 'hr']\n tags.forEach(tag => {\n const style = mergedTagStyle.value[tag]\n if (style) {\n const regex = new RegExp(`<${tag}([^>]*)>`, 'gi')\n html = html.replace(regex, (match, attrs) => {\n const hasStyle = /style=/i.test(attrs)\n if (hasStyle) {\n return match.replace(/style=[\"']([^\"']*)[\"']/i, `style=\"$1; ${style}\"`)\n }\n return `<${tag} style=\"${style}\"${attrs}>`\n })\n }\n })\n\n return html\n})\n\n// 处理点击事件\nconst handleTap = (event: any) => {\n const target = event.target\n\n // 处理图片点击\n if (target.tagName === 'IMG') {\n const src = target.getAttribute('data-src') || target.getAttribute('src')\n if (src) {\n emit('imgTap', src)\n }\n }\n\n // 处理链接点击\n if (target.tagName === 'A') {\n event.stopPropagation?.()\n const href = target.getAttribute('data-href') || target.getAttribute('href')\n if (href && href !== '#') {\n emit('linkTap', href)\n }\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-parse {\n font-size: $--font-size-md;\n line-height: 1.6;\n color: $--text-color;\n word-break: break-word;\n\n :deep(img) {\n max-width: 100%;\n height: auto;\n vertical-align: middle;\n }\n\n :deep(a) {\n color: $--color-primary;\n text-decoration: none;\n\n &:active {\n opacity: 0.7;\n }\n }\n\n :deep(pre) {\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n :deep(code) {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n }\n\n :deep(table) {\n display: block;\n overflow-x: auto;\n }\n\n :deep(blockquote) {\n border-left: 4px solid $--border-color;\n background-color: $--bg-color;\n padding: $--spacing-md $--spacing-lg;\n margin: $--spacing-md 0;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-keyboard\" @click=\"handleOverlayClick\">\n <view class=\"u-keyboard__panel\" @click.stop>\n <view class=\"u-keyboard__header\">\n <text class=\"u-keyboard__title\">{{ title }}</text>\n <text class=\"u-keyboard__close\" @click=\"handleClose\">完成</text>\n </view>\n\n <view class=\"u-keyboard__body\" :class=\"`u-keyboard__body--${type}`\">\n <view\n v-for=\"(key, index) in displayKeys\"\n :key=\"`${key}-${index}`\"\n class=\"u-keyboard__key\"\n :class=\"{\n 'u-keyboard__key--action': isActionKey(key),\n 'u-keyboard__key--wide': key === '删除' || key === 'ABC' || key === '省份'\n }\"\n @click=\"handleKeyClick(key)\"\n >\n <text>{{ key }}</text>\n </view>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype KeyboardType = 'number' | 'idcard' | 'car'\n\ninterface Props {\n visible?: boolean\n type?: KeyboardType\n hideDot?: boolean\n randomKeyOrder?: boolean\n title?: string\n maxlength?: number\n modelValue?: string\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n type: 'number',\n hideDot: false,\n randomKeyOrder: false,\n title: '安全键盘',\n maxlength: 0,\n modelValue: '',\n closeOnClickOverlay: true\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n 'update:modelValue': [value: string]\n input: [value: string]\n delete: [value: string]\n confirm: [value: string]\n close: []\n}>()\n\nconst displayKeys = computed(() => {\n const { inputKeys, tailKeys } = getKeyGroups()\n const keys = props.randomKeyOrder ? shuffle(inputKeys) : inputKeys\n return [...keys, ...tailKeys]\n})\n\nconst getKeyGroups = () => {\n if (props.type === 'idcard') {\n const inputKeys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', props.hideDot ? 'X' : '.', '0', 'X']\n return {\n inputKeys: props.hideDot ? inputKeys.filter((key, index) => !(index === 9 && key === 'X')) : inputKeys.filter((key) => key !== '.' || !props.hideDot),\n tailKeys: ['删除']\n }\n }\n\n if (props.type === 'car') {\n return {\n inputKeys: [\n '京', '沪', '粤', '浙', '苏', '鲁', '晋', '冀', '豫', '川',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K',\n 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',\n 'W', 'X', 'Y', 'Z', '港', '澳'\n ],\n tailKeys: ['删除']\n }\n }\n\n return {\n inputKeys: ['1', '2', '3', '4', '5', '6', '7', '8', '9', ...(props.hideDot ? [] : ['.']), '0'],\n tailKeys: ['删除']\n }\n}\n\nconst handleKeyClick = (key: string) => {\n if (key === '删除') {\n const nextValue = props.modelValue.slice(0, -1)\n emit('update:modelValue', nextValue)\n emit('delete', nextValue)\n return\n }\n\n const nextValue = `${props.modelValue}${key}`\n if (props.maxlength > 0 && nextValue.length > props.maxlength) {\n return\n }\n\n emit('update:modelValue', nextValue)\n emit('input', nextValue)\n}\n\nconst handleClose = () => {\n emit('update:visible', false)\n emit('confirm', props.modelValue)\n emit('close')\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n emit('close')\n }\n}\n\nconst isActionKey = (key: string) => key === '删除' || key === 'ABC' || key === '省份'\n\nfunction shuffle(source: string[]) {\n const list = [...source]\n for (let i = list.length - 1; i > 0; i -= 1) {\n const j = Math.floor(Math.random() * (i + 1))\n ;[list[i], list[j]] = [list[j], list[i]]\n }\n return list\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-keyboard {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: flex-end;\n background: rgba(0, 0, 0, 0.45);\n z-index: 1000;\n\n &__panel {\n width: 100%;\n background: $--bg-color;\n border-radius: $--border-radius-lg $--border-radius-lg 0 0;\n padding: $--spacing-md;\n box-sizing: border-box;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: $--spacing-md;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n font-weight: 600;\n }\n\n &__close {\n font-size: $--font-size-md;\n color: $--color-primary;\n }\n\n &__body {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: $--spacing-sm;\n\n &--car {\n grid-template-columns: repeat(6, 1fr);\n }\n }\n\n &__key {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 44px;\n background: $--bg-color-2;\n border-radius: $--border-radius-md;\n font-size: $--font-size-lg;\n color: $--text-color;\n\n &--action {\n background: #d7dbe0;\n color: $--text-color-2;\n font-size: $--font-size-md;\n }\n\n &--wide {\n grid-column: span 1;\n }\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-picker\" @click=\"handleOverlayClick\">\n <view class=\"u-picker__popup\" @click.stop>\n <view class=\"u-picker__toolbar\">\n <text class=\"u-picker__action\" @click=\"handleCancel\">取消</text>\n <text class=\"u-picker__title\">{{ title }}</text>\n <text class=\"u-picker__action u-picker__action--confirm\" @click=\"handleConfirm\">确定</text>\n </view>\n\n <view v-if=\"loading\" class=\"u-picker__loading\">\n <text>加载中...</text>\n </view>\n\n <picker-view\n v-else\n class=\"u-picker__view\"\n :value=\"innerIndexes\"\n indicator-class=\"u-picker__indicator\"\n @change=\"handlePickerChange\"\n >\n <picker-view-column v-for=\"(column, columnIndex) in normalizedColumns\" :key=\"columnIndex\">\n <view\n v-for=\"(option, optionIndex) in column\"\n :key=\"option.value ?? option.label ?? optionIndex\"\n class=\"u-picker__option\"\n >\n <text>{{ option.label }}</text>\n </view>\n </picker-view-column>\n </picker-view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ninterface PickerOption {\n label: string\n value: string | number\n}\n\ntype PickerColumn = Array<string | number | PickerOption>\ntype PickerValue = Array<string | number>\n\ninterface Props {\n visible?: boolean\n columns?: PickerColumn[]\n modelValue?: PickerValue\n title?: string\n loading?: boolean\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n columns: () => [],\n modelValue: () => [],\n title: '选择器',\n loading: false,\n closeOnClickOverlay: false\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n 'update:modelValue': [value: PickerValue]\n change: [value: PickerValue, columnIndex: number]\n confirm: [value: PickerValue]\n cancel: []\n}>()\n\nconst normalizedColumns = computed(() => props.columns.map((column) => column.map(normalizeOption)))\nconst innerIndexes = ref<number[]>([])\n\nwatch(\n () => [props.columns, props.modelValue],\n () => {\n innerIndexes.value = getIndexesByValue(props.modelValue)\n },\n { immediate: true, deep: true }\n)\n\nconst currentValues = computed(() => getValuesByIndexes(innerIndexes.value))\n\nconst handlePickerChange = (event: any) => {\n const values = event.detail.value as number[]\n const previousIndexes = [...innerIndexes.value]\n innerIndexes.value = values\n const changedColumn = getChangedColumn(previousIndexes, values)\n const nextValues = getValuesByIndexes(values)\n emit('update:modelValue', nextValues)\n emit('change', nextValues, changedColumn)\n}\n\nconst handleCancel = () => {\n emit('update:visible', false)\n emit('cancel')\n}\n\nconst handleConfirm = () => {\n emit('update:visible', false)\n emit('confirm', currentValues.value)\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n emit('cancel')\n }\n}\n\nfunction normalizeOption(option: string | number | PickerOption): PickerOption {\n if (typeof option === 'object' && option !== null) {\n return option\n }\n\n return {\n label: String(option),\n value: option\n }\n}\n\nfunction getIndexesByValue(values: PickerValue) {\n return normalizedColumns.value.map((column, index) => {\n const target = values[index]\n const foundIndex = column.findIndex((option) => option.value === target)\n return foundIndex >= 0 ? foundIndex : 0\n })\n}\n\nfunction getValuesByIndexes(indexes: number[]) {\n return normalizedColumns.value.map((column, index) => column[indexes[index] || 0]?.value).filter((value) => value !== undefined)\n}\n\nfunction getChangedColumn(previousIndexes: number[], nextIndexes: number[]) {\n return nextIndexes.findIndex((item, index) => item !== previousIndexes[index])\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-picker {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: flex-end;\n background: rgba(0, 0, 0, 0.45);\n z-index: 1000;\n\n &__popup {\n width: 100%;\n background: $--bg-color-2;\n border-radius: $--border-radius-lg $--border-radius-lg 0 0;\n overflow: hidden;\n }\n\n &__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 48px;\n padding: 0 $--spacing-lg;\n border-bottom: 1px solid $--border-color;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n font-weight: 600;\n }\n\n &__action {\n font-size: $--font-size-md;\n color: $--text-color-2;\n\n &--confirm {\n color: $--color-primary;\n }\n }\n\n &__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 240px;\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__view {\n width: 100%;\n height: 240px;\n }\n\n &__indicator {\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__option {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 48px;\n font-size: $--font-size-lg;\n color: $--text-color;\n }\n}\n</style>\n","<template>\n <view v-if=\"visible\" class=\"u-datetime-picker\" @click=\"handleOverlayClick\">\n <view class=\"u-datetime-picker__popup\" @click.stop>\n <view class=\"u-datetime-picker__toolbar\">\n <text class=\"u-datetime-picker__action\" @click=\"handleCancel\">取消</text>\n <text class=\"u-datetime-picker__title\">{{ title }}</text>\n <text class=\"u-datetime-picker__action u-datetime-picker__action--confirm\" @click=\"handleConfirm\">确定</text>\n </view>\n\n <picker-view\n class=\"u-datetime-picker__view\"\n :value=\"indexes\"\n indicator-class=\"u-datetime-picker__indicator\"\n @change=\"handleChange\"\n >\n <picker-view-column v-for=\"(column, columnIndex) in displayColumns\" :key=\"columnIndex\">\n <view\n v-for=\"option in column\"\n :key=\"option.value\"\n class=\"u-datetime-picker__option\"\n >\n <text>{{ option.label }}</text>\n </view>\n </picker-view-column>\n </picker-view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ntype PickerType = 'datetime' | 'date' | 'year-month' | 'time'\n\ninterface PickerOption {\n label: string\n value: string\n}\n\ninterface DateTimeValues {\n year: string\n month: string\n day: string\n hour: string\n minute: string\n}\n\ninterface Props {\n visible?: boolean\n type?: PickerType\n modelValue?: Date | string | null\n title?: string\n minDate?: Date\n maxDate?: Date\n filter?: (type: string, values: string[]) => string[]\n formatter?: (type: string, value: string) => string\n closeOnClickOverlay?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n type: 'datetime',\n modelValue: null,\n title: '时间选择',\n minDate: () => new Date(2000, 0, 1, 0, 0),\n maxDate: () => new Date(2035, 11, 31, 23, 59),\n closeOnClickOverlay: false\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n 'update:modelValue': [value: Date | string]\n change: [value: Date | string]\n confirm: [value: Date | string]\n cancel: []\n}>()\n\nconst indexes = ref<number[]>([])\nconst innerValues = ref<DateTimeValues>(getInitialValues())\n\nconst columnTypes = computed(() => {\n if (props.type === 'date') return ['year', 'month', 'day']\n if (props.type === 'year-month') return ['year', 'month']\n if (props.type === 'time') return ['hour', 'minute']\n return ['year', 'month', 'day', 'hour', 'minute']\n})\n\nconst displayColumns = computed(() => {\n const values = innerValues.value\n return columnTypes.value.map((type) => buildColumn(type, values))\n})\n\nwatch(\n () => props.modelValue,\n () => {\n innerValues.value = getInitialValues()\n indexes.value = getIndexesByValues()\n },\n { immediate: true }\n)\n\nwatch(\n displayColumns,\n () => {\n alignValuesWithColumns()\n indexes.value = getIndexesByValues()\n },\n { deep: true }\n)\n\nconst currentValue = computed(() => formatOutput(innerValues.value))\n\nconst handleChange = (event: any) => {\n const nextIndexes = event.detail.value as number[]\n const nextValues = { ...innerValues.value }\n\n columnTypes.value.forEach((type, index) => {\n nextValues[type as keyof DateTimeValues] = displayColumns.value[index][nextIndexes[index] || 0]?.value || nextValues[type as keyof DateTimeValues]\n })\n\n innerValues.value = fixValues(nextValues)\n indexes.value = getIndexesByValues()\n emit('update:modelValue', currentValue.value)\n emit('change', currentValue.value)\n}\n\nconst handleCancel = () => {\n emit('update:visible', false)\n emit('cancel')\n}\n\nconst handleConfirm = () => {\n emit('update:visible', false)\n emit('confirm', currentValue.value)\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n emit('update:visible', false)\n emit('cancel')\n }\n}\n\nfunction getInitialValues(): DateTimeValues {\n const date = normalizeModelValue(props.modelValue)\n return {\n year: String(date.getFullYear()),\n month: pad(date.getMonth() + 1),\n day: pad(date.getDate()),\n hour: pad(date.getHours()),\n minute: pad(date.getMinutes())\n }\n}\n\nfunction normalizeModelValue(value: Date | string | null | undefined) {\n if (props.type === 'time' && typeof value === 'string' && value.includes(':')) {\n const [hour = '00', minute = '00'] = value.split(':')\n const date = new Date(props.minDate)\n date.setHours(Number(hour), Number(minute), 0, 0)\n return clampDate(date)\n }\n\n const date = value instanceof Date ? new Date(value) : value ? new Date(value) : new Date()\n return clampDate(date)\n}\n\nfunction clampDate(date: Date) {\n const time = date.getTime()\n const minTime = props.minDate.getTime()\n const maxTime = props.maxDate.getTime()\n\n if (time < minTime) return new Date(props.minDate)\n if (time > maxTime) return new Date(props.maxDate)\n return date\n}\n\nfunction buildColumn(type: string, values: DateTimeValues) {\n let options: string[] = []\n\n if (type === 'year') {\n for (let year = props.minDate.getFullYear(); year <= props.maxDate.getFullYear(); year += 1) {\n options.push(String(year))\n }\n }\n\n if (type === 'month') {\n const year = Number(values.year)\n const start = year === props.minDate.getFullYear() ? props.minDate.getMonth() + 1 : 1\n const end = year === props.maxDate.getFullYear() ? props.maxDate.getMonth() + 1 : 12\n for (let month = start; month <= end; month += 1) {\n options.push(pad(month))\n }\n }\n\n if (type === 'day') {\n const year = Number(values.year)\n const month = Number(values.month)\n const total = new Date(year, month, 0).getDate()\n const minDay = isSameYearMonth(year, month, props.minDate) ? props.minDate.getDate() : 1\n const maxDay = isSameYearMonth(year, month, props.maxDate) ? props.maxDate.getDate() : total\n for (let day = minDay; day <= maxDay; day += 1) {\n options.push(pad(day))\n }\n }\n\n if (type === 'hour') {\n const year = Number(values.year)\n const month = Number(values.month || '1')\n const day = Number(values.day || '1')\n const minHour = isSameDate(year, month, day, props.minDate) ? props.minDate.getHours() : 0\n const maxHour = isSameDate(year, month, day, props.maxDate) ? props.maxDate.getHours() : 23\n for (let hour = minHour; hour <= maxHour; hour += 1) {\n options.push(pad(hour))\n }\n }\n\n if (type === 'minute') {\n const year = Number(values.year || String(props.minDate.getFullYear()))\n const month = Number(values.month || '1')\n const day = Number(values.day || '1')\n const hour = Number(values.hour)\n const minMinute = isSameDateTimeHour(year, month, day, hour, props.minDate) ? props.minDate.getMinutes() : 0\n const maxMinute = isSameDateTimeHour(year, month, day, hour, props.maxDate) ? props.maxDate.getMinutes() : 59\n for (let minute = minMinute; minute <= maxMinute; minute += 1) {\n options.push(pad(minute))\n }\n }\n\n const filtered = props.filter ? props.filter(type, options) : options\n return filtered.map((value) => ({\n value,\n label: props.formatter ? props.formatter(type, value) : defaultFormatter(type, value)\n }))\n}\n\nfunction getIndexesByValues() {\n return columnTypes.value.map((type, index) => {\n const value = innerValues.value[type as keyof DateTimeValues]\n const column = displayColumns.value[index] || []\n const foundIndex = column.findIndex((item) => item.value === value)\n return foundIndex >= 0 ? foundIndex : 0\n })\n}\n\nfunction alignValuesWithColumns() {\n innerValues.value = fixValues(innerValues.value)\n}\n\nfunction fixValues(values: DateTimeValues) {\n const nextValues = { ...values }\n columnTypes.value.forEach((type, index) => {\n const column = displayColumns.value[index] || []\n const current = nextValues[type as keyof DateTimeValues]\n if (!column.some((item) => item.value === current) && column[0]) {\n nextValues[type as keyof DateTimeValues] = column[0].value\n }\n })\n return nextValues\n}\n\nfunction formatOutput(values: DateTimeValues) {\n if (props.type === 'time') {\n return `${values.hour}:${values.minute}`\n }\n\n const date = new Date(\n Number(values.year),\n Number(values.month || '1') - 1,\n Number(values.day || '1'),\n Number(values.hour || '0'),\n Number(values.minute || '0')\n )\n\n return props.type === 'year-month'\n ? `${values.year}-${values.month}`\n : props.type === 'date'\n ? new Date(date.getFullYear(), date.getMonth(), date.getDate())\n : date\n}\n\nfunction defaultFormatter(type: string, value: string) {\n if (type === 'year') return `${value}年`\n if (type === 'month') return `${value}月`\n if (type === 'day') return `${value}日`\n if (type === 'hour') return `${value}时`\n if (type === 'minute') return `${value}分`\n return value\n}\n\nfunction isSameYearMonth(year: number, month: number, date: Date) {\n return year === date.getFullYear() && month === date.getMonth() + 1\n}\n\nfunction isSameDate(year: number, month: number, day: number, date: Date) {\n return isSameYearMonth(year, month, date) && day === date.getDate()\n}\n\nfunction isSameDateTimeHour(year: number, month: number, day: number, hour: number, date: Date) {\n return isSameDate(year, month, day, date) && hour === date.getHours()\n}\n\nfunction pad(value: number) {\n return String(value).padStart(2, '0')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-datetime-picker {\n position: fixed;\n inset: 0;\n display: flex;\n align-items: flex-end;\n background: rgba(0, 0, 0, 0.45);\n z-index: 1000;\n\n &__popup {\n width: 100%;\n background: $--bg-color-2;\n border-radius: $--border-radius-lg $--border-radius-lg 0 0;\n overflow: hidden;\n }\n\n &__toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 48px;\n padding: 0 $--spacing-lg;\n border-bottom: 1px solid $--border-color;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n font-weight: 600;\n }\n\n &__action {\n font-size: $--font-size-md;\n color: $--text-color-2;\n\n &--confirm {\n color: $--color-primary;\n }\n }\n\n &__view {\n width: 100%;\n height: 240px;\n }\n\n &__indicator {\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__option {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 48px;\n font-size: $--font-size-lg;\n color: $--text-color;\n }\n}\n</style>\n","<template>\n <view\n class=\"u-rate\"\n :class=\"{\n 'u-rate--disabled': disabled,\n 'u-rate--readonly': readonly\n }\"\n >\n <view\n v-for=\"(_, index) in normalizedCount\"\n :key=\"index\"\n class=\"u-rate__item\"\n :style=\"itemStyle\"\n @click=\"handleClick(index, $event)\"\n >\n <text class=\"u-rate__icon u-rate__icon--void\" :style=\"voidStyle\">★</text>\n <view\n class=\"u-rate__icon-wrapper\"\n :style=\"getActiveWrapperStyle(index)\"\n >\n <text class=\"u-rate__icon u-rate__icon--active\" :style=\"activeStyle\">★</text>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype RateValue = number\n\ninterface Props {\n modelValue?: RateValue\n count?: number\n size?: number | string\n color?: string\n voidColor?: string\n readonly?: boolean\n disabled?: boolean\n allowHalf?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n count: 5,\n size: 20,\n color: '#ee0a24',\n voidColor: '#c8c9cc',\n readonly: false,\n disabled: false,\n allowHalf: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n change: [value: number]\n}>()\n\nconst normalizedCount = computed(() => Math.max(1, Math.floor(props.count)))\nconst normalizedValue = computed(() => {\n const value = Number(props.modelValue) || 0\n return Math.max(0, Math.min(normalizedCount.value, value))\n})\n\nconst itemStyle = computed(() => ({\n width: addUnit(props.size),\n height: addUnit(props.size)\n}))\n\nconst activeStyle = computed(() => ({\n color: props.color,\n fontSize: addUnit(props.size)\n}))\n\nconst voidStyle = computed(() => ({\n color: props.voidColor,\n fontSize: addUnit(props.size)\n}))\n\nconst getActiveWrapperStyle = (index: number) => {\n const diff = normalizedValue.value - index\n const percent = diff >= 1 ? 100 : diff > 0 ? 50 : 0\n\n return {\n width: `${percent}%`\n }\n}\n\nconst handleClick = (index: number, event: any) => {\n if (props.disabled || props.readonly) {\n return\n }\n\n let value = index + 1\n\n if (props.allowHalf) {\n // 获取触摸位置相对于元素的位置\n const touch = event.touches?.[0] || event\n const clientX = touch.clientX || 0\n\n // 使用 uni.createSelectorQuery 获取元素位置\n uni.createSelectorQuery()\n .select('.u-rate__item')\n .boundingClientRect((rect: any) => {\n if (rect) {\n const itemWidth = rect.width\n // 计算当前点击的item位置\n const itemLeft = rect.left + index * (itemWidth + 4) // 4是gap\n if (clientX - itemLeft <= itemWidth / 2) {\n value = index + 0.5\n }\n emit('update:modelValue', value)\n emit('change', value)\n } else {\n // fallback: 直接使用整星\n emit('update:modelValue', value)\n emit('change', value)\n }\n })\n .exec()\n } else {\n emit('update:modelValue', value)\n emit('change', value)\n }\n}\n\nfunction addUnit(value: string | number) {\n return typeof value === 'number' ? `${value}px` : value\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-rate {\n display: inline-flex;\n align-items: center;\n gap: $--spacing-xs;\n\n &--disabled,\n &--readonly {\n .u-rate__item {\n }\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__item {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n &__icon {\n line-height: 1;\n\n &--void {\n position: relative;\n z-index: 1;\n }\n\n &--active {\n display: block;\n }\n }\n\n &__icon-wrapper {\n position: absolute;\n top: 50%;\n left: 0;\n z-index: 2;\n overflow: hidden;\n transform: translateY(-50%);\n white-space: nowrap;\n }\n}\n</style>\n","<template>\n <view class=\"u-grid\">\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide } from 'vue'\n\ninterface Props {\n column?: number\n border?: boolean\n clickable?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n column: 4,\n border: false,\n clickable: false\n})\n\nconst emit = defineEmits<{\n click: [item: unknown, index: number]\n}>()\n\nconst column = computed(() => Math.max(1, Number(props.column) || 1))\nlet currentIndex = 0\n\nconst registerItem = () => {\n const index = currentIndex\n currentIndex += 1\n return index\n}\n\nconst onItemClick = (payload: { item: unknown; index: number }) => {\n emit('click', payload.item, payload.index)\n}\n\nprovide('u-grid', {\n column,\n border: computed(() => props.border),\n clickable: computed(() => props.clickable),\n registerItem,\n onItemClick\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-grid {\n display: flex;\n flex-wrap: wrap;\n background-color: $--bg-color-2;\n}\n</style>\n","<template>\n <view\n class=\"u-grid-item\"\n :class=\"{\n 'u-grid-item--border': hasBorder,\n 'u-grid-item--clickable': isClickable\n }\"\n :style=\"itemStyle\"\n @click=\"handleClick\"\n >\n <view v-if=\"$slots.icon || icon || iconUrl\" class=\"u-grid-item__icon\">\n <slot name=\"icon\">\n <image v-if=\"iconUrl\" class=\"u-grid-item__icon-image\" :src=\"iconUrl\" mode=\"aspectFit\" />\n <text v-else-if=\"icon\" class=\"u-grid-item__icon-text\">{{ icon }}</text>\n </slot>\n <view v-if=\"badge !== undefined && badge !== null && badge !== ''\" class=\"u-grid-item__badge\">\n <text class=\"u-grid-item__badge-text\">{{ badge }}</text>\n </view>\n </view>\n <view v-if=\"text || $slots.default\" class=\"u-grid-item__text\">\n <slot>{{ text }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject, useSlots } from 'vue'\nimport type { ComputedRef } from 'vue'\n\ninterface GridContext {\n column: ComputedRef<number>\n border: ComputedRef<boolean>\n clickable: ComputedRef<boolean>\n registerItem: () => number\n onItemClick: (payload: { item: unknown; index: number }) => void\n}\n\ninterface Props {\n text?: string\n icon?: string\n iconUrl?: string\n badge?: string | number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n text: '',\n icon: '',\n iconUrl: ''\n})\n\nconst emit = defineEmits<{\n click: [item: { text: string; icon: string; iconUrl: string; badge?: string | number }, index: number]\n}>()\n\nconst slots = useSlots()\nconst grid = inject<GridContext | null>('u-grid', null)\nconst itemIndex = grid?.registerItem() ?? -1\n\nconst itemData = computed(() => ({\n text: props.text,\n icon: props.icon,\n iconUrl: props.iconUrl,\n badge: props.badge\n}))\n\nconst hasBorder = computed(() => grid?.border.value ?? false)\nconst isClickable = computed(() => grid?.clickable.value ?? false)\nconst column = computed(() => grid?.column.value ?? 4)\n\nconst itemStyle = computed(() => {\n const width = `${100 / column.value}%`\n\n return {\n flexBasis: width,\n maxWidth: width\n }\n})\n\nconst handleClick = () => {\n if (!grid?.clickable.value) {\n return\n }\n\n const index = itemIndex\n emit('click', itemData.value, index)\n grid.onItemClick({ item: itemData.value, index })\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-grid-item {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-lg $--spacing-sm;\n box-sizing: border-box;\n background-color: $--bg-color-2;\n\n &--clickable {\n &:active {\n background-color: $--bg-color;\n }\n }\n\n &--border {\n border-right: 1px solid $--border-color;\n border-bottom: 1px solid $--border-color;\n }\n\n &__icon {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n margin-bottom: $--spacing-sm;\n }\n\n &__icon-image {\n width: 32px;\n height: 32px;\n }\n\n &__icon-text {\n font-size: 24px;\n line-height: 1;\n }\n\n &__text {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n line-height: 1.4;\n text-align: center;\n word-break: break-all;\n }\n\n &__badge {\n position: absolute;\n top: -4px;\n right: -8px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 999px;\n background-color: $--color-danger;\n box-sizing: border-box;\n }\n\n &__badge-text {\n font-size: 10px;\n line-height: 1;\n color: $--text-color-white;\n }\n}\n</style>\n","<template>\n <view class=\"u-swiper\">\n <swiper\n class=\"u-swiper__wrapper\"\n :style=\"{ height: swiperHeight }\"\n :autoplay=\"autoplay\"\n :interval=\"interval\"\n :duration=\"duration\"\n :indicator-dots=\"false\"\n :circular=\"circular\"\n :vertical=\"vertical\"\n :current=\"currentIndex\"\n @change=\"handleChange\"\n @animationfinish=\"handleAnimationFinish\"\n >\n <slot />\n </swiper>\n\n <!-- 加载状态 -->\n <view v-if=\"loading\" class=\"u-swiper__loading\">\n <view class=\"u-swiper__loading-icon\" />\n </view>\n\n <!-- 标题 -->\n <view v-if=\"showTitle && currentTitle\" class=\"u-swiper__title\">\n <text class=\"u-swiper__title-text\">{{ currentTitle }}</text>\n </view>\n\n <!-- 自定义指示器 -->\n <view v-if=\"showIndicator && indicatorSlot\" class=\"u-swiper__indicator\">\n <slot name=\"indicator\" :current=\"currentIndex\" :total=\"itemCount\" />\n </view>\n\n <!-- 默认指示器样式 -->\n <view v-if=\"showIndicator && !customIndicator && !indicatorSlot\" :class=\"indicatorClass\" :style=\"indicatorStyle\">\n <view\n v-for=\"i in itemCount\"\n :key=\"i\"\n class=\"u-swiper__indicator-item\"\n :class=\"{ 'u-swiper__indicator-item--active': i - 1 === currentIndex }\"\n />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useSlots, watch, provide } from 'vue'\n\ntype IndicatorPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n\ninterface Props {\n autoplay?: boolean\n interval?: number\n duration?: number\n circular?: boolean\n vertical?: boolean\n indicatorDots?: boolean\n indicatorColor?: string\n indicatorActiveColor?: string\n indicatorPosition?: IndicatorPosition\n loading?: boolean\n showTitle?: boolean\n height?: string | number\n card?: boolean\n cardScale?: number\n cardSpace?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n autoplay: true,\n interval: 3000,\n duration: 500,\n circular: true,\n vertical: false,\n indicatorDots: true,\n indicatorColor: 'rgba(255, 255, 255, 0.5)',\n indicatorActiveColor: '#ffffff',\n indicatorPosition: 'bottom-right',\n loading: false,\n showTitle: false,\n height: 200,\n card: false,\n cardScale: 0.9,\n cardSpace: 10\n})\n\nconst emit = defineEmits<{\n change: [index: number]\n animationfinish: [index: number]\n}>()\n\nconst slots = useSlots()\nconst currentIndex = ref(0)\nconst itemCount = ref(0)\nconst currentTitle = ref('')\nconst itemTitles = ref<string[]>([])\n\nconst indicatorSlot = computed(() => Boolean(slots.indicator))\nconst customIndicator = computed(() => props.card)\n\nconst showIndicator = computed(() => props.indicatorDots && itemCount.value > 1)\n\nconst indicatorClass = computed(() => [\n 'u-swiper__indicator-wrapper',\n `u-swiper__indicator-wrapper--${props.indicatorPosition}`,\n {\n 'u-swiper__indicator-wrapper--vertical': props.vertical\n }\n])\n\nconst indicatorStyle = computed(() => {\n const style: Record<string, string> = {}\n\n if (props.indicatorColor) {\n style['--indicator-color'] = props.indicatorColor\n }\n if (props.indicatorActiveColor) {\n style['--indicator-active-color'] = props.indicatorActiveColor\n }\n\n return style\n})\n\nconst swiperHeight = computed(() => {\n if (typeof props.height === 'number') {\n return `${props.height}px`\n }\n return props.height\n})\n\nconst registerItem = (title?: string) => {\n const index = itemCount.value\n itemCount.value += 1\n if (title) {\n itemTitles.value.push(title)\n }\n return index\n}\n\nconst handleChange = (e: any) => {\n const { current } = e.detail\n currentIndex.value = current\n if (itemTitles.value[current]) {\n currentTitle.value = itemTitles.value[current]\n }\n emit('change', current)\n}\n\nconst handleAnimationFinish = (e: any) => {\n emit('animationfinish', e.detail.current)\n}\n\nconst setActiveIndex = (index: number) => {\n currentIndex.value = index\n}\n\nwatch(() => props.loading, (val) => {\n if (!val && itemTitles.value[currentIndex.value]) {\n currentTitle.value = itemTitles.value[currentIndex.value]\n }\n})\n\nprovide('u-swiper', {\n card: computed(() => props.card),\n cardScale: computed(() => props.cardScale),\n cardSpace: computed(() => props.cardSpace),\n vertical: computed(() => props.vertical),\n height: swiperHeight,\n registerItem,\n setActiveIndex\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-swiper {\n position: relative;\n width: 100%;\n overflow: hidden;\n\n &__wrapper {\n width: 100%;\n }\n\n &__loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(0, 0, 0, 0.3);\n z-index: 10;\n\n &-icon {\n width: 32px;\n height: 32px;\n border: 3px solid rgba(255, 255, 255, 0.3);\n border-top-color: #fff;\n border-radius: 50%;\n animation: u-swiper-loading 0.8s linear infinite;\n }\n }\n\n @keyframes u-swiper-loading {\n to {\n transform: rotate(360deg);\n }\n }\n\n &__title {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n padding: $--spacing-sm $--spacing-base;\n background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.5));\n z-index: 5;\n\n &-text {\n font-size: $--font-size-base;\n color: $--text-color-white;\n line-height: 1.4;\n }\n }\n\n &__indicator {\n position: absolute;\n z-index: 5;\n }\n\n &__indicator-wrapper {\n position: absolute;\n display: flex;\n z-index: 5;\n padding: $--spacing-xs $--spacing-sm;\n\n &--top-left {\n top: 0;\n left: 0;\n }\n\n &--top-right {\n top: 0;\n right: 0;\n }\n\n &--bottom-left {\n bottom: 0;\n left: 0;\n }\n\n &--bottom-right {\n bottom: 0;\n right: 0;\n }\n\n &--vertical {\n flex-direction: column;\n }\n }\n\n &__indicator-item {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: var(--indicator-color, rgba(255, 255, 255, 0.5));\n margin: 0 4px;\n transition: all 0.3s;\n\n &--active {\n width: 16px;\n border-radius: 4px;\n background-color: var(--indicator-active-color, #fff);\n }\n }\n}\n\n.u-swiper__indicator-wrapper--vertical .u-swiper__indicator-item {\n width: 6px;\n height: 6px;\n margin: 4px 0;\n\n &--active {\n width: 6px;\n height: 16px;\n }\n}\n</style>","<template>\n <swiper-item class=\"u-swiper-item\" :class=\"{ 'u-swiper-item--card': isCard }\" :style=\"itemStyle\">\n <slot />\n </swiper-item>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport type { ComputedRef } from 'vue'\n\ninterface SwiperContext {\n card: ComputedRef<boolean>\n cardScale: ComputedRef<number>\n cardSpace: ComputedRef<number>\n vertical: ComputedRef<boolean>\n height: ComputedRef<string>\n registerItem: (title?: string) => number\n setActiveIndex: (index: number) => void\n}\n\ninterface Props {\n title?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: ''\n})\n\nconst swiper = inject<SwiperContext | null>('u-swiper', null)\n\nif (swiper) {\n swiper.registerItem(props.title)\n}\n\nconst isCard = computed(() => swiper?.card.value ?? false)\nconst cardScale = computed(() => swiper?.cardScale.value ?? 0.9)\nconst cardSpace = computed(() => swiper?.cardSpace.value ?? 10)\nconst isVertical = computed(() => swiper?.vertical.value ?? false)\nconst swiperHeight = computed(() => swiper?.height.value ?? '200px')\n\nconst itemStyle = computed(() => {\n if (!isCard.value) {\n return {}\n }\n\n if (isVertical.value) {\n return {\n height: swiperHeight.value,\n padding: `${cardSpace.value}px 0`\n }\n }\n\n return {\n width: `${cardScale.value * 100}%`,\n marginLeft: `${(1 - cardScale.value) * 50}%`,\n marginRight: `${(1 - cardScale.value) * 50}%`\n }\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-swiper-item {\n width: 100%;\n height: 100%;\n overflow: hidden;\n\n &--card {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n</style>","<template>\n <view\n class=\"u-search\"\n :class=\"{\n 'u-search--disabled': disabled,\n 'u-search--focus': isFocus\n }\"\n >\n <view class=\"u-search__content\" :style=\"contentStyle\">\n <view v-if=\"showSearchIcon\" class=\"u-search__icon\">\n <text class=\"u-search__icon-text\">🔍</text>\n </view>\n\n <view class=\"u-search__body\">\n <input\n class=\"u-search__control\"\n :type=\"type\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :placeholder-style=\"placeholderStyle\"\n :placeholder-class=\"'u-search__placeholder'\"\n :disabled=\"disabled\"\n :maxlength=\"maxlength\"\n :focus=\"focus\"\n :confirm-type=\"confirmType\"\n :adjust-position=\"adjustPosition\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @confirm=\"handleSearch\"\n />\n </view>\n\n <view v-if=\"clearable && modelValue\" class=\"u-search__clear\" @click=\"handleClear\">\n <text class=\"u-search__clear-icon\">×</text>\n </view>\n </view>\n\n <view v-if=\"$slots.action || actionText\" class=\"u-search__action\" @click=\"handleAction\">\n <slot name=\"action\">\n <text class=\"u-search__action-text\">{{ actionText }}</text>\n </slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\ntype ConfirmType = 'send' | 'search' | 'next' | 'go' | 'done'\n\ninterface Props {\n modelValue?: string | number\n type?: 'text' | 'number' | 'idcard' | 'digit'\n placeholder?: string\n placeholderStyle?: string\n disabled?: boolean\n maxlength?: number\n clearable?: boolean\n focus?: boolean\n confirmType?: ConfirmType\n adjustPosition?: boolean\n showSearchIcon?: boolean\n actionText?: string\n inputAlign?: 'left' | 'center' | 'right'\n shape?: 'square' | 'round'\n background?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n type: 'text',\n placeholder: '请输入搜索关键词',\n disabled: false,\n maxlength: 140,\n clearable: true,\n focus: false,\n confirmType: 'search',\n adjustPosition: true,\n showSearchIcon: true,\n actionText: '',\n inputAlign: 'left',\n shape: 'round',\n background: '#f7f8fa'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n input: [value: string]\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n search: [value: string]\n clear: []\n action: []\n}>()\n\nconst isFocus = ref(false)\n\nconst contentStyle = computed(() => {\n const style: Record<string, string> = {\n background: props.background,\n 'text-align': props.inputAlign\n }\n if (props.shape === 'round') {\n style['border-radius'] = '999px'\n }\n return style\n})\n\nconst handleInput = (event: any) => {\n const value = event.detail.value\n emit('update:modelValue', value)\n emit('input', value)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n isFocus.value = true\n emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n isFocus.value = false\n emit('blur', event)\n}\n\nconst handleSearch = (event: any) => {\n emit('search', event.detail.value)\n}\n\nconst handleClear = () => {\n emit('update:modelValue', '')\n emit('input', '')\n emit('clear')\n}\n\nconst handleAction = () => {\n if (!props.disabled) {\n emit('action')\n emit('search', String(props.modelValue))\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-search {\n display: flex;\n align-items: center;\n width: 100%;\n padding: $--spacing-sm $--spacing-md;\n\n &--disabled {\n opacity: 0.6;\n }\n\n &__content {\n flex: 1;\n display: flex;\n align-items: center;\n height: $--search-height;\n padding: 0 $--spacing-md;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-lg;\n transition: all $--transition-duration;\n }\n\n &--focus .u-search__content {\n background-color: $--bg-color-2;\n box-shadow: 0 0 0 1px $--color-primary;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n margin-right: $--spacing-sm;\n }\n\n &__icon-text {\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__body {\n flex: 1;\n display: flex;\n align-items: center;\n }\n\n &__control {\n flex: 1;\n width: 100%;\n height: 100%;\n font-size: $--font-size-md;\n color: $--text-color;\n background: transparent;\n }\n\n &__placeholder {\n color: $--text-color-3;\n }\n\n &__clear {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: $--spacing-sm;\n background-color: $--text-color-3;\n border-radius: 50%;\n }\n\n &__clear-icon {\n color: $--bg-color-2;\n font-size: 12px;\n line-height: 1;\n }\n\n &__action {\n display: flex;\n align-items: center;\n padding: $--spacing-sm $--spacing-md;\n }\n\n &__action-text {\n font-size: $--font-size-md;\n color: $--color-primary;\n }\n}\n</style>","<template>\n <view\n class=\"u-number-box\"\n :class=\"{\n 'u-number-box--disabled': disabled\n }\"\n >\n <view\n class=\"u-number-box__btn u-number-box__btn--minus\"\n :class=\"{\n 'u-number-box__btn--disabled': minusDisabled\n }\"\n :style=\"btnStyle\"\n @click=\"handleMinus\"\n @touchstart=\"startLongPress('minus')\"\n @touchend=\"stopLongPress\"\n @touchcancel=\"stopLongPress\"\n >\n <text class=\"u-number-box__btn-icon\">−</text>\n </view>\n\n <input\n class=\"u-number-box__input\"\n :class=\"{\n 'u-number-box__input--disabled': disabledInput\n }\"\n :style=\"inputStyle\"\n :type=\"inputType\"\n :value=\"displayValue\"\n :disabled=\"disabled || disabledInput\"\n @input=\"handleInput\"\n @blur=\"handleBlur\"\n @focus=\"handleFocus\"\n />\n\n <view\n class=\"u-number-box__btn u-number-box__btn--plus\"\n :class=\"{\n 'u-number-box__btn--disabled': plusDisabled\n }\"\n :style=\"btnStyle\"\n @click=\"handlePlus\"\n @touchstart=\"startLongPress('plus')\"\n @touchend=\"stopLongPress\"\n @touchcancel=\"stopLongPress\"\n >\n <text class=\"u-number-box__btn-icon\">+</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onUnmounted } from 'vue'\n\ninterface Props {\n modelValue?: number\n min?: number\n max?: number\n step?: number\n integer?: boolean\n decimalPlaces?: number\n disabled?: boolean\n disabledInput?: boolean\n disabledLongPress?: boolean\n buttonSize?: number | string\n inputWidth?: number | string\n theme?: 'default' | 'primary'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n min: 0,\n max: Infinity,\n step: 1,\n integer: false,\n decimalPlaces: 0,\n disabled: false,\n disabledInput: false,\n disabledLongPress: false,\n buttonSize: 28,\n inputWidth: 36,\n theme: 'default'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number]\n change: [value: number]\n overlimit: [type: 'minus' | 'plus']\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n}>()\n\nconst currentValue = ref(props.modelValue)\nlet longPressTimer: ReturnType<typeof setInterval> | null = null\n\nconst minusDisabled = computed(() => props.disabled || currentValue.value <= props.min)\nconst plusDisabled = computed(() => props.disabled || currentValue.value >= props.max)\n\nconst inputType = computed(() => props.integer ? 'number' : 'digit')\n\nconst displayValue = computed(() => {\n if (props.decimalPlaces > 0) {\n return currentValue.value.toFixed(props.decimalPlaces)\n }\n return currentValue.value\n})\n\nconst btnSize = computed(() => {\n const size = props.buttonSize\n return typeof size === 'number' ? `${size}px` : size\n})\n\nconst iptWidth = computed(() => {\n const width = props.inputWidth\n return typeof width === 'number' ? `${width}px` : width\n})\n\nconst btnStyle = computed(() => ({\n width: btnSize.value,\n height: btnSize.value,\n fontSize: `calc(${btnSize.value} * 0.5)`,\n backgroundColor: props.theme === 'primary' ? '#1989fa' : '#f2f3f5',\n color: props.theme === 'primary' ? '#fff' : '#323233'\n}))\n\nconst inputStyle = computed(() => ({\n width: iptWidth.value,\n height: btnSize.value\n}))\n\nwatch(() => props.modelValue, (val) => {\n currentValue.value = formatValue(val)\n})\n\nconst formatValue = (val: number): number => {\n let value = Number(val)\n if (isNaN(value)) value = props.min\n if (props.integer) value = Math.round(value)\n value = Math.max(props.min, Math.min(props.max, value))\n return value\n}\n\nconst updateValue = (val: number) => {\n const formatted = formatValue(val)\n currentValue.value = formatted\n emit('update:modelValue', formatted)\n emit('change', formatted)\n}\n\nconst handleMinus = () => {\n if (minusDisabled.value) {\n emit('overlimit', 'minus')\n return\n }\n updateValue(currentValue.value - props.step)\n}\n\nconst handlePlus = () => {\n if (plusDisabled.value) {\n emit('overlimit', 'plus')\n return\n }\n updateValue(currentValue.value + props.step)\n}\n\nconst handleInput = (event: any) => {\n const val = event.detail.value\n if (val === '' || val === '-') return\n let value = Number(val)\n if (!isNaN(value)) {\n currentValue.value = value\n }\n}\n\nconst handleBlur = (event: FocusEvent) => {\n updateValue(currentValue.value)\n emit('blur', event)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n emit('focus', event)\n}\n\nconst startLongPress = (type: 'minus' | 'plus') => {\n if (props.disabledLongPress || props.disabled) return\n\n const action = type === 'minus' ? handleMinus : handlePlus\n longPressTimer = setInterval(() => {\n action()\n }, 150)\n}\n\nconst stopLongPress = () => {\n if (longPressTimer) {\n clearInterval(longPressTimer)\n longPressTimer = null\n }\n}\n\nonUnmounted(() => {\n stopLongPress()\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-number-box {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n transition: all $--transition-duration;\n border-radius: $--border-radius-sm;\n\n &:active {\n opacity: 0.7;\n }\n\n &--disabled {\n opacity: 0.4;\n }\n }\n\n &__btn-icon {\n line-height: 1;\n }\n\n &__input {\n text-align: center;\n font-size: $--font-size-md;\n color: $--text-color;\n background: $--bg-color-2;\n border: 1px solid $--border-color;\n border-radius: $--border-radius-sm;\n outline: none;\n\n &--disabled {\n background: $--bg-color;\n }\n }\n}\n</style>","<template>\n <view class=\"u-upload\">\n <view class=\"u-upload__list\">\n <!-- 已上传文件列表 -->\n <view\n v-for=\"(file, index) in fileList\"\n :key=\"index\"\n class=\"u-upload__item\"\n :class=\"{\n 'u-upload__item--error': file.status === 'error',\n 'u-upload__item--uploading': file.status === 'uploading'\n }\"\n >\n <!-- 图片预览 -->\n <image\n v-if=\"isImage(file)\"\n class=\"u-upload__preview\"\n :src=\"file.url || file.thumb\"\n mode=\"aspectFill\"\n @click=\"handlePreview(file, index)\"\n />\n\n <!-- 视频预览 -->\n <view v-else-if=\"isVideo(file)\" class=\"u-upload__video\">\n <image\n class=\"u-upload__preview\"\n :src=\"file.thumb || defaultVideoThumb\"\n mode=\"aspectFill\"\n @click=\"handlePreview(file, index)\"\n />\n <view class=\"u-upload__video-icon\">\n <text>▶</text>\n </view>\n </view>\n\n <!-- 其他文件 -->\n <view v-else class=\"u-upload__file\" @click=\"handlePreview(file, index)\">\n <text class=\"u-upload__file-icon\">📄</text>\n <text class=\"u-upload__file-name\">{{ getFileName(file) }}</text>\n </view>\n\n <!-- 上传进度 -->\n <view v-if=\"file.status === 'uploading'\" class=\"u-upload__progress\">\n <view class=\"u-upload__progress-bar\" :style=\"{ width: file.progress + '%' }\"></view>\n </view>\n\n <!-- 删除按钮 -->\n <view\n v-if=\"deletable && file.status !== 'uploading'\"\n class=\"u-upload__delete\"\n @click=\"handleDelete(index)\"\n >\n <text class=\"u-upload__delete-icon\">×</text>\n </view>\n\n <!-- 上传失败提示 -->\n <view v-if=\"file.status === 'error'\" class=\"u-upload__error\">\n <text>上传失败</text>\n </view>\n </view>\n\n <!-- 上传按钮 -->\n <view\n v-if=\"showUploadBtn\"\n class=\"u-upload__trigger\"\n :class=\"{\n 'u-upload__trigger--disabled': disabled || fileList.length >= maxCount\n }\"\n @click=\"handleTrigger\"\n >\n <slot name=\"trigger\">\n <view class=\"u-upload__trigger-default\">\n <text class=\"u-upload__trigger-icon\">+</text>\n <text v-if=\"triggerText\" class=\"u-upload__trigger-text\">{{ triggerText }}</text>\n </view>\n </slot>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ninterface UploadFile {\n url?: string\n thumb?: string\n name?: string\n size?: number\n status?: 'pending' | 'uploading' | 'done' | 'error'\n progress?: number\n type?: string\n file?: any\n}\n\ninterface Props {\n modelValue?: UploadFile[]\n accept?: 'image' | 'video' | 'media' | 'all'\n multiple?: boolean\n maxCount?: number\n maxSize?: number\n disabled?: boolean\n deletable?: boolean\n showUpload?: boolean\n triggerText?: string\n previewFull?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: () => [],\n accept: 'image',\n multiple: false,\n maxCount: 99,\n maxSize: 10 * 1024 * 1024,\n disabled: false,\n deletable: true,\n showUpload: true,\n triggerText: '',\n previewFull: true\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [files: UploadFile[]]\n change: [files: UploadFile[]]\n success: [file: UploadFile]\n fail: [error: any]\n delete: [file: UploadFile, index: number]\n preview: [file: UploadFile, index: number]\n oversize: [files: UploadFile[]]\n overcount: []\n}>()\n\nconst fileList = ref<UploadFile[]>(props.modelValue)\n// 默认视频缩略图占位符\nconst defaultVideoThumb = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIHZpZXdCb3g9IjAgMCA4MCA4MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iODAiIGhlaWdodD0iODAiIGZpbGw9IiNFNUU1RTUiLz48dGV4dCB4PSI1MCUiIHk9IjUwJSIgZmlsbD0iIzk5OSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgZm9udC1zaXplPSIyNCI+▶PC90ZXh0Pjwvc3ZnPg=='\n\nconst showUploadBtn = computed(() => {\n return props.showUpload && (!props.maxCount || fileList.value.length < props.maxCount)\n})\n\nwatch(() => props.modelValue, (val) => {\n fileList.value = val\n}, { deep: true })\n\nconst isImage = (file: UploadFile) => {\n if (file.type) return file.type.startsWith('image/')\n const url = file.url || ''\n return /\\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url)\n}\n\nconst isVideo = (file: UploadFile) => {\n if (file.type) return file.type.startsWith('video/')\n const url = file.url || ''\n return /\\.(mp4|mov|avi|mkv|webm)$/i.test(url)\n}\n\nconst getFileName = (file: UploadFile) => {\n if (file.name) return file.name\n const url = file.url || ''\n const match = url.match(/[^/]+$/)\n return match ? match[0] : '文件'\n}\n\nconst handleTrigger = () => {\n if (props.disabled || fileList.value.length >= props.maxCount) {\n if (fileList.value.length >= props.maxCount) {\n emit('overcount')\n }\n return\n }\n\n // 模拟文件选择,实际在uni-app中使用 uni.chooseImage/uni.chooseVideo\n // 这里仅作演示\n}\n\nconst handlePreview = (file: UploadFile, index: number) => {\n emit('preview', file, index)\n}\n\nconst handleDelete = (index: number) => {\n const file = fileList.value[index]\n fileList.value.splice(index, 1)\n emit('update:modelValue', fileList.value)\n emit('change', fileList.value)\n emit('delete', file, index)\n}\n\nconst afterRead = (files: UploadFile | UploadFile[]) => {\n const fileArray = Array.isArray(files) ? files : [files]\n\n // 检查数量限制\n if (fileList.value.length + fileArray.length > props.maxCount) {\n emit('overcount')\n return\n }\n\n // 检查大小限制\n const oversizeFiles = fileArray.filter(f => f.size && f.size > props.maxSize)\n if (oversizeFiles.length > 0) {\n emit('oversize', oversizeFiles)\n return\n }\n\n // 添加文件到列表\n fileArray.forEach(file => {\n file.status = 'uploading'\n file.progress = 0\n fileList.value.push(file)\n\n // 模拟上传过程\n simulateUpload(file)\n })\n}\n\nconst simulateUpload = (file: UploadFile) => {\n // 模拟上传进度\n let progress = 0\n const timer = setInterval(() => {\n progress += Math.random() * 30\n if (progress >= 100) {\n progress = 100\n file.status = 'done'\n file.progress = 100\n clearInterval(timer)\n emit('update:modelValue', fileList.value)\n emit('change', fileList.value)\n emit('success', file)\n } else {\n file.progress = progress\n }\n }, 200)\n}\n\n// 提供外部调用的方法\ndefineExpose({\n afterRead,\n fileList\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-upload {\n width: 100%;\n\n &__list {\n display: flex;\n flex-wrap: wrap;\n gap: $--spacing-sm;\n }\n\n &__item {\n position: relative;\n width: 80px;\n height: 80px;\n border-radius: $--border-radius-md;\n overflow: hidden;\n background: $--bg-color-2;\n border: 1px solid $--border-color;\n\n &--error {\n border-color: $--color-danger;\n }\n\n &--uploading {\n opacity: 0.8;\n }\n }\n\n &__preview {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n\n &__video {\n width: 100%;\n height: 100%;\n position: relative;\n\n &-icon {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.3);\n color: #fff;\n font-size: 24px;\n }\n }\n\n &__file {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-xs;\n\n &-icon {\n font-size: 24px;\n margin-bottom: 4px;\n }\n\n &-name {\n font-size: $--font-size-xs;\n color: $--text-color-2;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n }\n }\n\n &__progress {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 4px;\n background: rgba(255, 255, 255, 0.8);\n\n &-bar {\n height: 100%;\n background: $--color-primary;\n transition: width 0.2s;\n }\n }\n\n &__delete {\n position: absolute;\n top: 0;\n right: 0;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 0 $--border-radius-md 0 0;\n\n &-icon {\n color: #fff;\n font-size: 12px;\n }\n }\n\n &__error {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(238, 10, 36, 0.1);\n color: $--color-danger;\n font-size: $--font-size-xs;\n }\n\n &__trigger {\n width: 80px;\n height: 80px;\n border-radius: $--border-radius-md;\n background: $--bg-color;\n border: 1px solid $--border-color;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &-default {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n &-icon {\n font-size: 24px;\n color: $--text-color-3;\n }\n\n &-text {\n font-size: $--font-size-xs;\n color: $--text-color-3;\n margin-top: 4px;\n }\n }\n}\n</style>","<template>\n <view\n class=\"u-textarea\"\n :class=\"{\n 'u-textarea--disabled': disabled,\n 'u-textarea--error': error,\n 'u-textarea--focus': isFocus\n }\"\n >\n <textarea\n class=\"u-textarea__control\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :placeholder-style=\"placeholderStyle\"\n :placeholder-class=\"'u-textarea__placeholder'\"\n :disabled=\"disabled\"\n :maxlength=\"maxlength\"\n :focus=\"focus\"\n :auto-height=\"autoHeight\"\n :fixed=\"fixed\"\n :cursor-spacing=\"cursorSpacing\"\n :show-confirm-bar=\"showConfirmBar\"\n :adjust-position=\"adjustPosition\"\n :style=\"textareaStyle\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @confirm=\"handleConfirm\"\n @linechange=\"handleLineChange\"\n />\n\n <view v-if=\"showWordLimit && maxlength\" class=\"u-textarea__limit\">\n <text class=\"u-textarea__limit-text\">{{ currentLength }}/{{ maxlength }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\n\ninterface Props {\n modelValue?: string\n placeholder?: string\n placeholderStyle?: string\n disabled?: boolean\n maxlength?: number\n focus?: boolean\n autoHeight?: boolean\n fixed?: boolean\n cursorSpacing?: number\n showConfirmBar?: boolean\n adjustPosition?: boolean\n showWordLimit?: boolean\n error?: boolean\n rows?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n placeholder: '请输入内容',\n disabled: false,\n maxlength: -1,\n focus: false,\n autoHeight: false,\n fixed: false,\n cursorSpacing: 0,\n showConfirmBar: true,\n adjustPosition: true,\n showWordLimit: false,\n error: false,\n rows: 3\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n input: [value: string]\n focus: [event: FocusEvent]\n blur: [event: FocusEvent]\n confirm: [value: string]\n linechange: [event: any]\n}>()\n\nconst isFocus = ref(false)\n\nconst currentLength = computed(() => {\n return String(props.modelValue).length\n})\n\nconst textareaStyle = computed(() => {\n if (props.autoHeight) return {}\n return {\n minHeight: `calc($--font-size-md * $--textarea-line-height * ${props.rows})`\n }\n})\n\nconst handleInput = (event: any) => {\n const value = event.detail.value\n emit('update:modelValue', value)\n emit('input', value)\n}\n\nconst handleFocus = (event: FocusEvent) => {\n isFocus.value = true\n emit('focus', event)\n}\n\nconst handleBlur = (event: FocusEvent) => {\n isFocus.value = false\n emit('blur', event)\n}\n\nconst handleConfirm = (event: any) => {\n emit('confirm', event.detail.value)\n}\n\nconst handleLineChange = (event: any) => {\n emit('linechange', event)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-textarea {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: $--spacing-md;\n background-color: $--bg-color-2;\n border-radius: $--border-radius-md;\n border: 1px solid $--border-color;\n transition: all $--transition-duration;\n\n &--focus {\n border-color: $--color-primary;\n }\n\n &--error {\n border-color: $--color-danger;\n }\n\n &--disabled {\n background-color: $--bg-color;\n }\n\n &__control {\n width: 100%;\n min-height: calc($--font-size-md * $--textarea-line-height * 3);\n font-size: $--font-size-md;\n line-height: $--textarea-line-height;\n color: $--text-color;\n background: transparent;\n resize: none;\n outline: none;\n border: none;\n }\n\n &__placeholder {\n color: $--text-color-3;\n }\n\n &__limit {\n display: flex;\n justify-content: flex-end;\n padding-top: $--spacing-sm;\n }\n\n &__limit-text {\n font-size: $--font-size-sm;\n color: $--text-color-3;\n }\n\n &--disabled &__limit-text {\n color: $--text-color-3;\n }\n\n &--error &__limit-text {\n color: $--color-danger;\n }\n}\n</style>","<template>\n <view\n class=\"u-slider\"\n :class=\"{\n 'u-slider--disabled': disabled\n }\"\n >\n <!-- 最小值标签 -->\n <view v-if=\"showMinMax\" class=\"u-slider__min\">\n <text class=\"u-slider__label\">{{ min }}</text>\n </view>\n\n <!-- 滑动轨道 -->\n <view\n class=\"u-slider__track\"\n :style=\"trackStyle\"\n @click=\"handleTrackClick\"\n @touchstart=\"handleTouchStart\"\n @touchmove=\"handleTouchMove\"\n @touchend=\"handleTouchEnd\"\n >\n <!-- 已选择区域 -->\n <view class=\"u-slider__bar\" :style=\"barStyle\">\n <!-- 滑块 -->\n <view\n v-if=\"!range\"\n class=\"u-slider__button\"\n :style=\"buttonStyle\"\n @touchstart.stop=\"handleButtonTouchStart\"\n @touchmove.stop=\"handleButtonTouchMove\"\n @touchend.stop=\"handleButtonTouchEnd\"\n >\n <view v-if=\"showValue\" class=\"u-slider__tooltip\">\n <text class=\"u-slider__tooltip-text\">{{ currentValue }}</text>\n </view>\n </view>\n\n <!-- 双滑块 -->\n <template v-else>\n <view\n class=\"u-slider__button u-slider__button--start\"\n :style=\"startButtonStyle\"\n @touchstart.stop=\"handleStartButtonTouchStart\"\n @touchmove.stop=\"handleStartButtonTouchMove\"\n @touchend.stop=\"handleButtonTouchEnd\"\n >\n <view v-if=\"showValue\" class=\"u-slider__tooltip\">\n <text class=\"u-slider__tooltip-text\">{{ startValue }}</text>\n </view>\n </view>\n <view\n class=\"u-slider__button u-slider__button--end\"\n :style=\"endButtonStyle\"\n @touchstart.stop=\"handleEndButtonTouchStart\"\n @touchmove.stop=\"handleEndButtonTouchMove\"\n @touchend.stop=\"handleButtonTouchEnd\"\n >\n <view v-if=\"showValue\" class=\"u-slider__tooltip\">\n <text class=\"u-slider__tooltip-text\">{{ endValue }}</text>\n </view>\n </view>\n </template>\n </view>\n\n <!-- 刻度标记 -->\n <view v-if=\"showTicks\" class=\"u-slider__ticks\">\n <view\n v-for=\"(tick, index) in ticks\"\n :key=\"index\"\n class=\"u-slider__tick\"\n :style=\"{ left: tick.position + '%' }\"\n ></view>\n </view>\n </view>\n\n <!-- 最大值标签 -->\n <view v-if=\"showMinMax\" class=\"u-slider__max\">\n <text class=\"u-slider__label\">{{ max }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ninterface Props {\n modelValue?: number | [number, number]\n min?: number\n max?: number\n step?: number\n disabled?: boolean\n range?: boolean\n showValue?: boolean\n showMinMax?: boolean\n showTicks?: boolean\n barHeight?: number | string\n activeColor?: string\n inactiveColor?: string\n buttonColor?: string\n buttonSize?: number | string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 0,\n min: 0,\n max: 100,\n step: 1,\n disabled: false,\n range: false,\n showValue: false,\n showMinMax: false,\n showTicks: false,\n barHeight: 2,\n activeColor: '#1989fa',\n inactiveColor: '#e5e5e5',\n buttonColor: '#fff',\n buttonSize: 24\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: number | [number, number]]\n change: [value: number | [number, number]]\n dragstart: []\n dragend: []\n}>()\n\nconst currentValue = ref(0)\nconst startValue = ref(0)\nconst endValue = ref(100)\nconst trackWidth = ref(0)\nconst trackLeft = ref(0)\nconst isDragging = ref(false)\nconst dragType = ref<'single' | 'start' | 'end'>('single')\n\nconst barHeightStyle = computed(() => {\n const height = props.barHeight\n return typeof height === 'number' ? `${height}px` : height\n})\n\nconst buttonSizeStyle = computed(() => {\n const size = props.buttonSize\n return typeof size === 'number' ? `${size}px` : size\n})\n\nconst trackStyle = computed(() => ({\n height: barHeightStyle.value,\n backgroundColor: props.inactiveColor\n}))\n\nconst barStyle = computed(() => {\n if (props.range) {\n const startPercent = ((startValue.value - props.min) / (props.max - props.min)) * 100\n const endPercent = ((endValue.value - props.min) / (props.max - props.min)) * 100\n return {\n left: `${startPercent}%`,\n width: `${endPercent - startPercent}%`,\n height: barHeightStyle.value,\n backgroundColor: props.activeColor\n }\n }\n const percent = ((currentValue.value - props.min) / (props.max - props.min)) * 100\n return {\n width: `${percent}%`,\n height: barHeightStyle.value,\n backgroundColor: props.activeColor\n }\n})\n\nconst buttonStyle = computed(() => ({\n width: buttonSizeStyle.value,\n height: buttonSizeStyle.value,\n backgroundColor: props.buttonColor,\n borderColor: props.activeColor\n}))\n\nconst startButtonStyle = computed(() => ({\n ...buttonStyle.value,\n left: `-${parseInt(buttonSizeStyle.value) / 2}px`\n}))\n\nconst endButtonStyle = computed(() => ({\n ...buttonStyle.value,\n right: `-${parseInt(buttonSizeStyle.value) / 2}px`\n}))\n\nconst ticks = computed(() => {\n const tickCount = Math.floor((props.max - props.min) / props.step)\n const result = []\n for (let i = 0; i <= tickCount; i++) {\n result.push({\n position: (i / tickCount) * 100\n })\n }\n return result\n})\n\nwatch(() => props.modelValue, (val) => {\n if (props.range && Array.isArray(val)) {\n startValue.value = val[0]\n endValue.value = val[1]\n } else if (typeof val === 'number') {\n currentValue.value = val\n }\n}, { immediate: true })\n\nconst updateTrackRect = () => {\n // uni-app 中需要使用 createSelectorQuery\n // 这里简化处理,在touch事件中动态计算\n const query = uni.createSelectorQuery?.()\n if (query) {\n query.select('.u-slider__track').boundingClientRect((rect: any) => {\n if (rect) {\n trackWidth.value = rect.width\n trackLeft.value = rect.left\n }\n }).exec()\n }\n}\n\nconst getStepValue = (value: number): number => {\n const stepCount = Math.round((value - props.min) / props.step)\n return props.min + stepCount * props.step\n}\n\nconst updateValue = (value: number) => {\n const stepped = getStepValue(value)\n currentValue.value = stepped\n emit('update:modelValue', stepped)\n emit('change', stepped)\n}\n\nconst updateRangeValue = (type: 'start' | 'end', value: number) => {\n const stepped = getStepValue(value)\n if (type === 'start') {\n if (stepped < endValue.value) {\n startValue.value = stepped\n }\n } else {\n if (stepped > startValue.value) {\n endValue.value = stepped\n }\n }\n emit('update:modelValue', [startValue.value, endValue.value])\n emit('change', [startValue.value, endValue.value])\n}\n\nconst handleTrackClick = (event: any) => {\n if (props.disabled) return\n if (!trackWidth.value) updateTrackRect()\n\n // 获取触摸/点击位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + percent * (props.max - props.min)\n\n if (props.range) {\n if (Math.abs(value - startValue.value) < Math.abs(value - endValue.value)) {\n updateRangeValue('start', value)\n } else {\n updateRangeValue('end', value)\n }\n } else {\n updateValue(value)\n }\n}\n\nconst handleTouchStart = (event: any) => {\n if (props.disabled) return\n // 初始化轨道位置信息\n const touch = event.touches?.[0]\n if (touch) {\n trackWidth.value = 1 // 初始化避免为0\n }\n}\n\nconst handleTouchMove = (event: any) => {\n // 轨道触摸移动处理\n}\n\nconst handleButtonTouchStart = () => {\n if (props.disabled) return\n isDragging.value = true\n dragType.value = 'single'\n emit('dragstart')\n updateTrackRect()\n}\n\nconst handleButtonTouchMove = (event: any) => {\n if (!isDragging.value || props.disabled) return\n\n // 获取触摸位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + Math.max(0, Math.min(1, percent)) * (props.max - props.min)\n updateValue(value)\n}\n\nconst handleButtonTouchEnd = () => {\n isDragging.value = false\n emit('dragend')\n}\n\nconst handleStartButtonTouchStart = () => {\n if (props.disabled) return\n isDragging.value = true\n dragType.value = 'start'\n emit('dragstart')\n updateTrackRect()\n}\n\nconst handleStartButtonTouchMove = (event: any) => {\n if (!isDragging.value || props.disabled) return\n\n // 获取触摸位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + Math.max(0, Math.min(1, percent)) * (props.max - props.min)\n updateRangeValue('start', value)\n}\n\nconst handleEndButtonTouchStart = () => {\n if (props.disabled) return\n isDragging.value = true\n dragType.value = 'end'\n emit('dragstart')\n updateTrackRect()\n}\n\nconst handleEndButtonTouchMove = (event: any) => {\n if (!isDragging.value || props.disabled) return\n\n // 获取触摸位置(兼容各平台)\n const touch = event.touches?.[0] || event\n const x = touch.clientX || touch.x || 0\n\n const percent = (x - trackLeft.value) / trackWidth.value\n const value = props.min + Math.max(0, Math.min(1, percent)) * (props.max - props.min)\n updateRangeValue('end', value)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-slider {\n display: flex;\n align-items: center;\n width: 100%;\n padding: $--spacing-md 0;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__min,\n &__max {\n min-width: 32px;\n text-align: center;\n }\n\n &__label {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n }\n\n &__track {\n flex: 1;\n position: relative;\n border-radius: 999px;\n }\n\n &__bar {\n position: absolute;\n border-radius: 999px;\n transition: width 0.1s, left 0.1s;\n }\n\n &__button {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n border-radius: 50%;\n border: 2px solid $--color-primary;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n transition: transform 0.1s;\n\n &:active {\n transform: translateY(-50%) scale(1.2);\n }\n\n &--start {\n left: calc(-1 * $--slider-button-size / 2);\n }\n\n &--end {\n right: calc(-1 * $--slider-button-size / 2);\n }\n }\n\n &__tooltip {\n position: absolute;\n left: 50%;\n bottom: 100%;\n transform: translateX(-50%);\n padding: 4px 8px;\n background: $--text-color;\n color: #fff;\n font-size: $--font-size-xs;\n border-radius: $--border-radius-sm;\n white-space: nowrap;\n margin-bottom: 8px;\n\n &::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n border: 4px solid transparent;\n border-top-color: $--text-color;\n }\n }\n\n &__ticks {\n position: absolute;\n inset: 0;\n }\n\n &__tick {\n position: absolute;\n width: 2px;\n height: 100%;\n background: rgba(0, 0, 0, 0.1);\n transform: translateX(-50%);\n }\n}\n</style>","<template>\n <view class=\"u-list\">\n <!-- 列表头部 -->\n <view v-if=\"$slots.header || header\" class=\"u-list__header\">\n <slot name=\"header\">{{ header }}</slot>\n </view>\n\n <!-- 列表内容 -->\n <view class=\"u-list__content\">\n <slot />\n </view>\n\n <!-- 加载状态 -->\n <view v-if=\"loading\" class=\"u-list__loading\">\n <view class=\"u-list__loading-icon\"></view>\n <text class=\"u-list__loading-text\">{{ loadingText }}</text>\n </view>\n\n <!-- 加载完成 -->\n <view v-if=\"finished && !loading\" class=\"u-list__finished\">\n <text class=\"u-list__finished-text\">{{ finishedText }}</text>\n </view>\n\n <!-- 加载失败 -->\n <view v-if=\"error && !loading\" class=\"u-list__error\" @click=\"handleErrorClick\">\n <text class=\"u-list__error-text\">{{ errorText }}</text>\n </view>\n\n <!-- 列表底部 -->\n <view v-if=\"$slots.footer || footer\" class=\"u-list__footer\">\n <slot name=\"footer\">{{ footer }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n loading?: boolean\n finished?: boolean\n error?: boolean\n loadingText?: string\n finishedText?: string\n errorText?: string\n header?: string\n footer?: string\n immediateCheck?: boolean\n offset?: number\n direction?: 'up' | 'down'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n loading: false,\n finished: false,\n error: false,\n loadingText: '加载中...',\n finishedText: '加载完成',\n errorText: '加载失败,点击重试',\n header: '',\n footer: '',\n immediateCheck: true,\n offset: 50,\n direction: 'down'\n})\n\nconst emit = defineEmits<{\n load: []\n 'update:loading': [value: boolean]\n 'update:error': [value: boolean]\n}>()\n\nconst handleErrorClick = () => {\n emit('update:error', false)\n emit('load')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-list {\n width: 100%;\n\n &__header,\n &__footer {\n padding: $--spacing-md $--spacing-lg;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n }\n\n &__content {\n min-height: 50px;\n }\n\n &__loading,\n &__finished,\n &__error {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: $--spacing-lg;\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__loading {\n gap: $--spacing-sm;\n }\n\n &__loading-icon {\n width: 16px;\n height: 16px;\n border: 2px solid $--border-color;\n border-top-color: $--color-primary;\n border-radius: 50%;\n animation: u-list-spin 0.8s linear infinite;\n }\n\n &__loading-text,\n &__finished-text,\n &__error-text {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n }\n\n &__error {\n }\n\n &__error-text {\n color: $--color-primary;\n }\n}\n\n@keyframes u-list-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>","<template>\n <view\n class=\"u-list-item\"\n :class=\"{\n 'u-list-item--clickable': clickable,\n 'u-list-item--disabled': disabled\n }\"\n @click=\"handleClick\"\n >\n <!-- 列表项图标/图片 -->\n <view v-if=\"$slots.icon || icon || thumb\" class=\"u-list-item__icon\">\n <slot name=\"icon\">\n <image v-if=\"thumb\" class=\"u-list-item__thumb\" :src=\"thumb\" mode=\"aspectFill\" />\n <text v-else-if=\"icon\" class=\"u-list-item__icon-text\">{{ icon }}</text>\n </slot>\n </view>\n\n <!-- 列表项主体 -->\n <view class=\"u-list-item__body\">\n <view v-if=\"title || $slots.title\" class=\"u-list-item__title\">\n <slot name=\"title\">{{ title }}</slot>\n </view>\n <view v-if=\"desc || $slots.desc\" class=\"u-list-item__desc\">\n <slot name=\"desc\">{{ desc }}</slot>\n </view>\n <view v-if=\"$slots.default\" class=\"u-list-item__content\">\n <slot />\n </view>\n </view>\n\n <!-- 列表项右侧内容 -->\n <view v-if=\"$slots.extra || extra || value\" class=\"u-list-item__extra\">\n <slot name=\"extra\">\n <text v-if=\"value\" class=\"u-list-item__value\">{{ value }}</text>\n <text v-if=\"extra\" class=\"u-list-item__extra-text\">{{ extra }}</text>\n </slot>\n <view v-if=\"showArrow\" class=\"u-list-item__arrow\">\n <text class=\"u-list-item__arrow-icon\">›</text>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n title?: string\n desc?: string\n value?: string\n extra?: string\n icon?: string\n thumb?: string\n clickable?: boolean\n disabled?: boolean\n showArrow?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n title: '',\n desc: '',\n value: '',\n extra: '',\n icon: '',\n thumb: '',\n clickable: false,\n disabled: false,\n showArrow: false\n})\n\nconst emit = defineEmits<{\n click: [event: Event]\n}>()\n\nconst handleClick = (event: Event) => {\n if (props.disabled) return\n emit('click', event)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-list-item {\n display: flex;\n align-items: flex-start;\n padding: $--spacing-md $--spacing-lg;\n background-color: $--bg-color-2;\n border-bottom: 1px solid $--border-color;\n transition: background-color $--transition-duration;\n\n &:last-child {\n border-bottom: none;\n }\n\n &--clickable {\n &:active {\n background-color: $--bg-color;\n }\n }\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n margin-right: $--spacing-md;\n }\n\n &__thumb {\n width: 40px;\n height: 40px;\n border-radius: $--border-radius-sm;\n object-fit: cover;\n }\n\n &__icon-text {\n font-size: 20px;\n }\n\n &__body {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0;\n }\n\n &__title {\n font-size: $--font-size-md;\n color: $--text-color;\n line-height: 1.5;\n }\n\n &__desc {\n margin-top: $--spacing-xs;\n font-size: $--font-size-sm;\n color: $--text-color-2;\n line-height: 1.4;\n }\n\n &__content {\n margin-top: $--spacing-sm;\n }\n\n &__extra {\n display: flex;\n align-items: center;\n margin-left: $--spacing-md;\n flex-shrink: 0;\n }\n\n &__value {\n font-size: $--font-size-md;\n color: $--text-color-2;\n }\n\n &__extra-text {\n font-size: $--font-size-sm;\n color: $--text-color-3;\n }\n\n &__arrow {\n display: flex;\n align-items: center;\n margin-left: $--spacing-sm;\n color: $--text-color-3;\n }\n\n &__arrow-icon {\n font-size: 16px;\n }\n}\n</style>","<template>\n <view class=\"u-line-progress\" :style=\"wrapperStyle\">\n <view class=\"u-line-progress__track\" :style=\"trackStyle\">\n <view\n class=\"u-line-progress__bar\"\n :class=\"{\n 'u-line-progress__bar--striped': striped,\n 'u-line-progress__bar--animated': striped && animated\n }\"\n :style=\"barStyle\"\n >\n <text\n v-if=\"showText && textInside && percentage <= 100\"\n class=\"u-line-progress__text u-line-progress__text--inside\"\n >{{ textContent }}</text>\n </view>\n </view>\n <text\n v-if=\"showText && !textInside\"\n class=\"u-line-progress__text\"\n >{{ textContent }}</text>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n percentage: number\n height?: number | string\n color?: string\n trackColor?: string\n showText?: boolean\n textInside?: boolean\n format?: (percentage: number) => string\n striped?: boolean\n animated?: boolean\n inactive?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n percentage: 0,\n height: 6,\n color: '#1989fa',\n trackColor: '#e5e5e5',\n showText: true,\n textInside: false,\n striped: false,\n animated: false,\n inactive: false\n})\n\nconst heightStyle = computed(() => {\n const height = props.height\n return typeof height === 'number' ? `${height}px` : height\n})\n\nconst wrapperStyle = computed(() => ({\n height: props.textInside ? heightStyle.value : 'auto'\n}))\n\nconst trackStyle = computed(() => ({\n height: heightStyle.value,\n backgroundColor: props.trackColor,\n borderRadius: heightStyle.value\n}))\n\nconst barStyle = computed(() => {\n const percentage = Math.min(100, Math.max(0, props.percentage))\n return {\n width: `${percentage}%`,\n backgroundColor: props.inactive ? '#c8c9cc' : props.color,\n borderRadius: heightStyle.value\n }\n})\n\nconst textContent = computed(() => {\n if (props.format) {\n return props.format(props.percentage)\n }\n return `${Math.round(props.percentage)}%`\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-line-progress {\n display: flex;\n align-items: center;\n width: 100%;\n\n &__track {\n flex: 1;\n overflow: hidden;\n position: relative;\n }\n\n &__bar {\n height: 100%;\n transition: width 0.3s ease-out;\n position: relative;\n\n &--striped {\n background-image: linear-gradient(\n 45deg,\n rgba(255, 255, 255, 0.15) 25%,\n transparent 25%,\n transparent 50%,\n rgba(255, 255, 255, 0.15) 50%,\n rgba(255, 255, 255, 0.15) 75%,\n transparent 75%,\n transparent\n );\n background-size: 1rem 1rem;\n }\n\n &--animated {\n animation: u-line-progress-stripes 1s linear infinite;\n }\n }\n\n &__text {\n font-size: $--font-size-sm;\n color: $--text-color-2;\n white-space: nowrap;\n margin-left: $--spacing-sm;\n\n &--inside {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n margin-left: 0;\n color: #fff;\n font-size: 12px;\n }\n }\n}\n\n@keyframes u-line-progress-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n</style>","<template>\n <view class=\"u-count-down\">\n <slot :time=\"timeData\" :current=\"current\">\n <text class=\"u-count-down__text\" :style=\"textStyle\">{{ formattedTime }}</text>\n </slot>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, onMounted, onUnmounted } from 'vue'\n\ninterface TimeData {\n days: number\n hours: number\n minutes: number\n seconds: number\n milliseconds: number\n total: number\n}\n\ninterface Props {\n time: number\n format?: string\n millisecond?: boolean\n autoStart?: boolean\n fontSize?: number | string\n color?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n time: 0,\n format: 'HH:mm:ss',\n millisecond: false,\n autoStart: true,\n fontSize: 14,\n color: ''\n})\n\nconst emit = defineEmits<{\n finish: []\n change: [timeData: TimeData]\n}>()\n\nconst current = ref(props.time)\nconst counting = ref(false)\nlet timer: ReturnType<typeof setInterval> | null = null\n\nconst textStyle = computed(() => {\n const fontSize = typeof props.fontSize === 'number' ? `${props.fontSize}px` : props.fontSize\n return {\n fontSize,\n color: props.color || undefined\n }\n})\n\nconst padZero = (num: number, length: number = 2): string => {\n return String(num).padStart(length, '0')\n}\n\nconst timeData = computed<TimeData>(() => {\n const total = current.value\n const days = Math.floor(total / (1000 * 60 * 60 * 24))\n const hours = Math.floor((total % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))\n const minutes = Math.floor((total % (1000 * 60 * 60)) / (1000 * 60))\n const seconds = Math.floor((total % (1000 * 60)) / 1000)\n const milliseconds = total % 1000\n\n return {\n days,\n hours,\n minutes,\n seconds,\n milliseconds,\n total\n }\n})\n\nconst formattedTime = computed(() => {\n const data = timeData.value\n let result = props.format\n\n // 按照从长到短的顺序替换,避免错误替换\n const replacements: [string, string][] = [\n ['DD', padZero(data.days)],\n ['D', String(data.days)],\n ['HH', padZero(data.hours)],\n ['H', String(data.hours)],\n ['mm', padZero(data.minutes)],\n ['m', String(data.minutes)],\n ['ss', padZero(data.seconds)],\n ['s', String(data.seconds)],\n ['SSS', padZero(data.milliseconds, 3)],\n ['S', String(Math.floor(data.milliseconds / 100))]\n ]\n\n replacements.forEach(([key, value]) => {\n result = result.replace(new RegExp(key, 'g'), value)\n })\n\n return result\n})\n\nconst tick = () => {\n if (current.value <= 0) {\n stop()\n emit('finish')\n return\n }\n\n const interval = props.millisecond ? 10 : 1000\n current.value = Math.max(0, current.value - interval)\n emit('change', timeData.value)\n}\n\nconst start = () => {\n if (counting.value || current.value <= 0) return\n counting.value = true\n const interval = props.millisecond ? 10 : 1000\n timer = setInterval(tick, interval)\n}\n\nconst stop = () => {\n if (timer) {\n clearInterval(timer)\n timer = null\n }\n counting.value = false\n}\n\nconst pause = () => {\n stop()\n}\n\nconst reset = (newTime?: number) => {\n stop()\n current.value = newTime !== undefined ? newTime : props.time\n if (props.autoStart) {\n start()\n }\n}\n\nwatch(() => props.time, (val) => {\n reset(val)\n})\n\nonMounted(() => {\n if (props.autoStart) {\n start()\n }\n})\n\nonUnmounted(() => {\n stop()\n})\n\ndefineExpose({\n start,\n stop,\n pause,\n reset,\n timeData\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-count-down {\n display: inline-block;\n\n &__text {\n font-variant-numeric: tabular-nums;\n }\n}\n</style>","<template>\n <view\n class=\"u-tooltip\"\n :class=\"{\n 'u-tooltip--active': visible\n }\"\n @longpress=\"handleLongPress\"\n @touchstart=\"handleTouchStart\"\n @touchend=\"handleTouchEnd\"\n >\n <!-- 触发元素 -->\n <view\n class=\"u-tooltip__trigger\"\n :class=\"{\n 'u-tooltip__trigger--highlight': highlight && visible\n }\"\n :style=\"highlight ? highlightStyle : {}\"\n >\n <slot />\n </view>\n\n <!-- 提示气泡 -->\n <view\n v-if=\"visible\"\n class=\"u-tooltip__popup\"\n :class=\"[`u-tooltip__popup--${placement}`, `u-tooltip__popup--${actualPlacement}`]\"\n :style=\"popupStyle\"\n >\n <!-- 箭头 -->\n <view class=\"u-tooltip__arrow\" :class=\"`u-tooltip__arrow--${actualPlacement}`\"></view>\n\n <!-- 内容 -->\n <view class=\"u-tooltip__content\">\n <!-- 操作按钮 -->\n <view v-if=\"actions.length\" class=\"u-tooltip__actions\">\n <view\n v-for=\"(action, index) in actions\"\n :key=\"index\"\n class=\"u-tooltip__action\"\n :class=\"{ 'u-tooltip__action--disabled': action.disabled }\"\n @click.stop=\"handleActionClick(action, index)\"\n >\n <text class=\"u-tooltip__action-text\">{{ action.text }}</text>\n </view>\n </view>\n\n <!-- 自定义内容 -->\n <slot v-else name=\"content\">\n <text class=\"u-tooltip__text\">{{ content }}</text>\n </slot>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\n\n// 检测是否在 uniapp 环境中\nconst isUniApp = typeof uni !== 'undefined'\n\ninterface Action {\n text: string\n disabled?: boolean\n [key: string]: any\n}\n\ninterface Props {\n content?: string\n placement?: 'top' | 'bottom'\n actions?: Action[]\n highlight?: boolean\n highlightColor?: string\n autoAdjust?: boolean\n showDuration?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n content: '',\n placement: 'top',\n actions: () => [],\n highlight: false,\n highlightColor: 'rgba(25, 137, 250, 0.1)',\n autoAdjust: true,\n showDuration: 0\n})\n\nconst emit = defineEmits<{\n show: []\n hide: []\n select: [action: Action, index: number]\n}>()\n\nconst visible = ref(false)\nconst actualPlacement = ref(props.placement)\nlet hideTimer: ReturnType<typeof setTimeout> | null = null\nlet triggerRect = { top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0 }\n\nconst highlightStyle = computed(() => ({\n backgroundColor: props.highlightColor\n}))\n\nconst popupStyle = computed(() => ({}))\n\nconst handleTouchStart = (event: any) => {\n const touch = event.touches?.[0]\n if (isUniApp) {\n // uni-app 使用 createSelectorQuery\n const query = uni.createSelectorQuery()\n query.select('.u-tooltip__trigger').boundingClientRect((rect: any) => {\n if (rect) {\n triggerRect = {\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n }\n }\n }).exec()\n } else if (event.currentTarget) {\n // 小程序/鸿蒙环境:使用 uni.createSelectorQuery 作为 fallback\n uni.createSelectorQuery()\n .select('.u-tooltip__trigger')\n .boundingClientRect((rect: any) => {\n if (rect) {\n triggerRect = {\n top: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n }\n }\n })\n .exec()\n }\n}\n\nconst handleTouchEnd = () => {\n // touch end handled\n}\n\nconst handleLongPress = () => {\n show()\n}\n\nconst show = () => {\n visible.value = true\n emit('show')\n\n if (props.autoAdjust) {\n adjustPlacement()\n }\n\n if (props.showDuration > 0) {\n hideTimer = setTimeout(() => {\n hide()\n }, props.showDuration)\n }\n}\n\nconst hide = () => {\n visible.value = false\n emit('hide')\n if (hideTimer) {\n clearTimeout(hideTimer)\n hideTimer = null\n }\n}\n\nconst adjustPlacement = () => {\n // 简化的位置调整逻辑\n if (isUniApp) {\n // uni-app 中使用系统信息获取窗口高度\n const systemInfo = uni.getSystemInfoSync()\n const windowHeight = systemInfo.windowHeight\n const spaceAbove = triggerRect.top\n const spaceBelow = windowHeight - triggerRect.bottom\n\n if (props.placement === 'top' && spaceAbove < 50) {\n actualPlacement.value = 'bottom'\n } else if (props.placement === 'bottom' && spaceBelow < 50) {\n actualPlacement.value = 'top'\n } else {\n actualPlacement.value = props.placement\n }\n } else {\n const windowHeight = window.innerHeight\n const spaceAbove = triggerRect.top\n const spaceBelow = windowHeight - triggerRect.bottom\n\n if (props.placement === 'top' && spaceAbove < 50) {\n actualPlacement.value = 'bottom'\n } else if (props.placement === 'bottom' && spaceBelow < 50) {\n actualPlacement.value = 'top'\n } else {\n actualPlacement.value = props.placement\n }\n }\n}\n\nconst handleActionClick = (action: Action, index: number) => {\n if (action.disabled) return\n emit('select', action, index)\n hide()\n}\n\nconst handleClickOutside = (event: TouchEvent | MouseEvent) => {\n if (visible.value) {\n hide()\n }\n}\n\nonMounted(() => {\n if (isUniApp) {\n // uni-app 中使用页面生命周期事件处理\n } else {\n document.addEventListener('click', handleClickOutside)\n document.addEventListener('touchstart', handleClickOutside)\n }\n})\n\nonUnmounted(() => {\n if (isUniApp) {\n // uni-app 清理\n } else {\n document.removeEventListener('click', handleClickOutside)\n document.removeEventListener('touchstart', handleClickOutside)\n }\n if (hideTimer) {\n clearTimeout(hideTimer)\n }\n})\n\ndefineExpose({\n show,\n hide\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-tooltip {\n position: relative;\n display: inline-block;\n\n &--active {\n z-index: 999;\n }\n\n &__trigger {\n display: inline;\n transition: background-color 0.15s;\n\n &--highlight {\n border-radius: 2px;\n }\n }\n\n &__popup {\n position: absolute;\n z-index: 1000;\n padding: 8px 12px;\n background: #323233;\n border-radius: 8px;\n white-space: nowrap;\n animation: u-tooltip-fade-in 0.15s ease-out;\n\n &--top {\n bottom: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-bottom: 8px;\n }\n\n &--bottom {\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n margin-top: 8px;\n }\n }\n\n &__arrow {\n position: absolute;\n width: 0;\n height: 0;\n border: 6px solid transparent;\n\n &--top {\n bottom: -12px;\n left: 50%;\n transform: translateX(-50%);\n border-top-color: #323233;\n border-bottom: none;\n }\n\n &--bottom {\n top: -12px;\n left: 50%;\n transform: translateX(-50%);\n border-bottom-color: #323233;\n border-top: none;\n }\n }\n\n &__content {\n display: flex;\n align-items: center;\n }\n\n &__text {\n font-size: 14px;\n color: #fff;\n line-height: 1.4;\n }\n\n &__actions {\n display: flex;\n gap: 16px;\n }\n\n &__action {\n display: flex;\n align-items: center;\n padding: 4px 0;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &:not(&--disabled):active {\n opacity: 0.7;\n }\n }\n\n &__action-text {\n font-size: 14px;\n color: #fff;\n }\n}\n\n@keyframes u-tooltip-fade-in {\n from {\n opacity: 0;\n transform: translateX(-50%) scale(0.9);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) scale(1);\n }\n}\n</style>","<template>\n <view class=\"u-avatar\" :class=\"avatarClass\" :style=\"avatarStyle\">\n <slot>\n <image v-if=\"src\" class=\"u-avatar__image\" :src=\"src\" mode=\"aspectFill\" @error=\"handleError\" />\n <text v-else-if=\"text\" class=\"u-avatar__text\">{{ displayText }}</text>\n <text v-else class=\"u-avatar__icon\">{{ icon || '👤' }}</text>\n </slot>\n <view v-if=\"badge && !badgeSlot\" class=\"u-avatar__badge\" :class=\"badgeClass\">\n <text v-if=\"!dot\" class=\"u-avatar__badge-text\">{{ badge }}</text>\n </view>\n <slot name=\"badge\" />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, useSlots } from 'vue'\n\ntype AvatarSize = 'small' | 'medium' | 'large' | 'xlarge'\ntype AvatarShape = 'circle' | 'square'\ntype BadgePosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'\n\ninterface Props {\n src?: string\n text?: string\n icon?: string\n size?: AvatarSize | number\n shape?: AvatarShape\n color?: string\n bgColor?: string\n badge?: string | number\n dot?: boolean\n badgeColor?: string\n badgePosition?: BadgePosition\n maxTextLength?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n src: '',\n text: '',\n icon: '',\n size: 'medium',\n shape: 'circle',\n bgColor: '#e8e8e8',\n dot: false,\n badgePosition: 'top-right',\n maxTextLength: 2\n})\n\nconst slots = useSlots()\nconst loadError = ref(false)\n\nconst badgeSlot = computed(() => Boolean(slots.badge))\n\nconst handleError = () => {\n loadError.value = true\n}\n\nconst displayText = computed(() => {\n if (!props.text) return ''\n if (props.text.length <= props.maxTextLength) return props.text\n return props.text.slice(0, props.maxTextLength)\n})\n\nconst sizeMap: Record<string, number> = {\n small: 32,\n medium: 48,\n large: 64,\n xlarge: 80\n}\n\nconst avatarSize = computed(() => {\n if (typeof props.size === 'number') return props.size\n return sizeMap[props.size] || 48\n})\n\nconst avatarClass = computed(() => [\n `u-avatar--${props.shape}`,\n {\n 'u-avatar--error': loadError.value\n }\n])\n\nconst avatarStyle = computed(() => {\n const style: Record<string, string> = {}\n const size = avatarSize.value\n\n style.width = `${size}px`\n style.height = `${size}px`\n\n if (props.bgColor) {\n style.backgroundColor = props.bgColor\n }\n\n if (props.color) {\n style.color = props.color\n }\n\n if (props.shape === 'square') {\n style.borderRadius = '4px'\n }\n\n return style\n})\n\nconst badgeClass = computed(() => [\n `u-avatar__badge--${props.badgePosition}`,\n {\n 'u-avatar__badge--dot': props.dot\n }\n])\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-avatar {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n box-sizing: border-box;\n background-color: $--bg-color;\n font-weight: 500;\n\n &--circle {\n border-radius: 50%;\n }\n\n &--square {\n border-radius: $--radius-sm;\n }\n\n &__image {\n width: 100%;\n height: 100%;\n }\n\n &__text {\n font-size: 16px;\n color: $--text-color-2;\n line-height: 1;\n }\n\n &__icon {\n font-size: 24px;\n color: $--text-color-3;\n }\n\n &__badge {\n position: absolute;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n font-size: 10px;\n color: $--text-color-white;\n background-color: $--color-danger;\n border-radius: 999px;\n box-sizing: border-box;\n\n &--dot {\n min-width: 8px;\n width: 8px;\n height: 8px;\n padding: 0;\n border-radius: 50%;\n }\n\n &--top-right {\n top: 0;\n right: 0;\n transform: translate(25%, -25%);\n }\n\n &--top-left {\n top: 0;\n left: 0;\n transform: translate(-25%, -25%);\n }\n\n &--bottom-right {\n bottom: 0;\n right: 0;\n transform: translate(25%, 25%);\n }\n\n &--bottom-left {\n bottom: 0;\n left: 0;\n transform: translate(-25%, 25%);\n }\n }\n}\n</style>","<template>\n <view class=\"u-empty\" :class=\"{ 'u-empty--inline': inline }\">\n <view class=\"u-empty__image\">\n <slot name=\"image\">\n <image v-if=\"image\" class=\"u-empty__image-src\" :src=\"image\" mode=\"aspectFit\" />\n <view v-else class=\"u-empty__image-default\">\n <text class=\"u-empty__icon\">📭</text>\n </view>\n </slot>\n </view>\n <view v-if=\"description || $slots.description\" class=\"u-empty__description\">\n <slot name=\"description\">{{ description }}</slot>\n </view>\n <view v-if=\"$slots.default\" class=\"u-empty__bottom\">\n <slot />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\ninterface Props {\n image?: string\n description?: string\n inline?: boolean\n}\n\nwithDefaults(defineProps<Props>(), {\n image: '',\n description: '暂无数据',\n inline: false\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-xl $--spacing-base;\n box-sizing: border-box;\n\n &--inline {\n display: inline-flex;\n padding: $--spacing-base;\n }\n\n &__image {\n width: 160px;\n height: 160px;\n margin-bottom: $--spacing-base;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__image-src {\n width: 100%;\n height: 100%;\n }\n\n &__image-default {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: $--bg-color;\n border-radius: $--radius-lg;\n }\n\n &__icon {\n font-size: 64px;\n color: $--text-color-3;\n }\n\n &__description {\n font-size: $--font-size-base;\n color: $--text-color-3;\n line-height: 1.5;\n text-align: center;\n margin-bottom: $--spacing-base;\n }\n\n &__bottom {\n margin-top: $--spacing-sm;\n }\n}\n</style>","<template>\n <view class=\"u-checkbox\" :class=\"checkboxClass\" @click=\"handleClick\">\n <view class=\"u-checkbox__icon\" :class=\"iconClass\" :style=\"iconStyle\">\n <text v-if=\"checked\" class=\"u-checkbox__check\">✓</text>\n </view>\n <view v-if=\"label || $slots.default\" class=\"u-checkbox__label\">\n <slot>{{ label }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\ninterface CheckboxGroupContext {\n modelValue: Ref<any[]>\n disabled: ComputedRef<boolean>\n max: ComputedRef<number>\n toggle: (value: any) => void\n}\n\ninterface Props {\n value?: any\n label?: string\n disabled?: boolean\n checkedColor?: string\n shape?: 'square' | 'circle'\n iconSize?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n label: '',\n disabled: false,\n checkedColor: '',\n shape: 'square',\n iconSize: 20\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n change: [checked: boolean]\n}>()\n\nconst group = inject<CheckboxGroupContext | null>('u-checkbox-group', null)\n\nconst checked = computed(() => {\n if (group) {\n return group.modelValue.value.includes(props.value)\n }\n return false\n})\n\nconst isDisabled = computed(() => {\n if (group) {\n return group.disabled.value || props.disabled\n }\n return props.disabled\n})\n\nconst checkboxClass = computed(() => [\n {\n 'u-checkbox--disabled': isDisabled.value,\n 'u-checkbox--checked': checked.value\n }\n])\n\nconst iconClass = computed(() => [\n `u-checkbox__icon--${props.shape}`,\n {\n 'u-checkbox__icon--checked': checked.value,\n 'u-checkbox__icon--disabled': isDisabled.value\n }\n])\n\nconst iconStyle = computed(() => {\n const style: Record<string, string> = {}\n style.width = `${props.iconSize}px`\n style.height = `${props.iconSize}px`\n\n if (checked.value && props.checkedColor) {\n style.backgroundColor = props.checkedColor\n style.borderColor = props.checkedColor\n }\n\n return style\n})\n\nconst handleClick = () => {\n if (isDisabled.value) return\n\n if (group) {\n group.toggle(props.value)\n } else {\n emit('update:modelValue', !checked.value)\n emit('change', !checked.value)\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-checkbox {\n display: inline-flex;\n align-items: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid $--border-color;\n background-color: $--bg-color-2;\n transition: all 0.2s;\n flex-shrink: 0;\n\n &--square {\n border-radius: $--radius-sm;\n }\n\n &--circle {\n border-radius: 50%;\n }\n\n &--checked {\n background-color: $--color-primary;\n border-color: $--color-primary;\n }\n\n &--disabled {\n background-color: $--bg-color;\n border-color: $--border-color;\n }\n }\n\n &__check {\n color: $--text-color-white;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n }\n\n &__label {\n margin-left: $--spacing-sm;\n font-size: $--font-size-base;\n color: $--text-color;\n line-height: 1.5;\n }\n\n &--checked &__label {\n color: $--text-color;\n }\n\n &--disabled &__label {\n color: $--text-color-3;\n }\n}\n</style>","<template>\n <view class=\"u-checkbox-group\">\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\n\ninterface Props {\n modelValue?: any[]\n disabled?: boolean\n max?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: () => [],\n disabled: false,\n max: 0\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any[]]\n change: [value: any[]]\n}>()\n\nconst innerValue = ref([...props.modelValue])\n\nwatch(() => props.modelValue, (val) => {\n innerValue.value = [...val]\n}, { deep: true })\n\nconst toggle = (value: any) => {\n const index = innerValue.value.indexOf(value)\n\n if (index > -1) {\n innerValue.value.splice(index, 1)\n } else {\n if (props.max > 0 && innerValue.value.length >= props.max) {\n return\n }\n innerValue.value.push(value)\n }\n\n emit('update:modelValue', [...innerValue.value])\n emit('change', [...innerValue.value])\n}\n\nprovide('u-checkbox-group', {\n modelValue: innerValue,\n disabled: computed(() => props.disabled),\n max: computed(() => props.max),\n toggle\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-checkbox-group {\n display: flex;\n flex-wrap: wrap;\n gap: $--spacing-base;\n}\n</style>","<template>\n <view class=\"u-radio\" :class=\"radioClass\" @click=\"handleClick\">\n <view class=\"u-radio__icon\" :class=\"iconClass\" :style=\"iconStyle\">\n <view v-if=\"checked\" class=\"u-radio__dot\" />\n </view>\n <view v-if=\"label || $slots.default\" class=\"u-radio__label\">\n <slot>{{ label }}</slot>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, inject } from 'vue'\nimport type { ComputedRef, Ref } from 'vue'\n\ninterface RadioGroupContext {\n modelValue: Ref<any>\n disabled: ComputedRef<boolean>\n select: (value: any) => void\n}\n\ninterface Props {\n value?: any\n label?: string\n disabled?: boolean\n checkedColor?: string\n iconSize?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n label: '',\n disabled: false,\n checkedColor: '',\n iconSize: 20\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any]\n change: [value: any]\n}>()\n\nconst group = inject<RadioGroupContext | null>('u-radio-group', null)\n\nconst checked = computed(() => {\n if (group) {\n return group.modelValue.value === props.value\n }\n return false\n})\n\nconst isDisabled = computed(() => {\n if (group) {\n return group.disabled.value || props.disabled\n }\n return props.disabled\n})\n\nconst radioClass = computed(() => [\n {\n 'u-radio--disabled': isDisabled.value,\n 'u-radio--checked': checked.value\n }\n])\n\nconst iconClass = computed(() => [\n {\n 'u-radio__icon--checked': checked.value,\n 'u-radio__icon--disabled': isDisabled.value\n }\n])\n\nconst iconStyle = computed(() => {\n const style: Record<string, string> = {}\n style.width = `${props.iconSize}px`\n style.height = `${props.iconSize}px`\n\n if (checked.value && props.checkedColor) {\n style.borderColor = props.checkedColor\n }\n\n return style\n})\n\nconst handleClick = () => {\n if (isDisabled.value) return\n\n if (group) {\n group.select(props.value)\n } else {\n emit('update:modelValue', props.value)\n emit('change', props.value)\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-radio {\n display: inline-flex;\n align-items: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &--disabled {\n opacity: 0.5;\n }\n\n &__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid $--border-color;\n background-color: $--bg-color-2;\n border-radius: 50%;\n transition: all 0.2s;\n flex-shrink: 0;\n\n &--checked {\n border-color: $--color-primary;\n border-width: 6px;\n background-color: $--bg-color-2;\n }\n\n &--disabled {\n background-color: $--bg-color;\n border-color: $--border-color;\n }\n }\n\n &__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: $--color-primary;\n }\n\n &__label {\n margin-left: $--spacing-sm;\n font-size: $--font-size-base;\n color: $--text-color;\n line-height: 1.5;\n }\n\n &--disabled &__label {\n color: $--text-color-3;\n }\n}\n</style>","<template>\n <view class=\"u-radio-group\">\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, ref, watch } from 'vue'\n\ninterface Props {\n modelValue?: any\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: '',\n disabled: false\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any]\n change: [value: any]\n}>()\n\nconst innerValue = ref(props.modelValue)\n\nwatch(() => props.modelValue, (val) => {\n innerValue.value = val\n})\n\nconst select = (value: any) => {\n if (innerValue.value === value) return\n\n innerValue.value = value\n emit('update:modelValue', value)\n emit('change', value)\n}\n\nprovide('u-radio-group', {\n modelValue: innerValue,\n disabled: computed(() => props.disabled),\n select\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-radio-group {\n display: flex;\n flex-wrap: wrap;\n gap: $--spacing-base;\n}\n</style>","<template>\n <view v-if=\"visible\" class=\"u-toast\" :class=\"toastClass\" :style=\"toastStyle\">\n <view class=\"u-toast__content\">\n <view v-if=\"type === 'loading'\" class=\"u-toast__loading\">\n <view class=\"u-toast__loading-icon\" />\n </view>\n <text v-else-if=\"icon\" class=\"u-toast__icon\">{{ icon }}</text>\n <text v-if=\"message\" class=\"u-toast__text\">{{ message }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onUnmounted } from 'vue'\n\ntype ToastType = 'text' | 'loading' | 'success' | 'fail' | 'info'\n\ninterface Props {\n message?: string\n type?: ToastType\n duration?: number\n position?: 'top' | 'middle' | 'bottom'\n icon?: string\n forbidClick?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n message: '',\n type: 'text',\n duration: 2000,\n position: 'middle',\n icon: '',\n forbidClick: false\n})\n\nconst visible = ref(false)\nlet timer: ReturnType<typeof setTimeout> | null = null\n\nconst icons: Record<string, string> = {\n success: '✓',\n fail: '✗',\n info: 'ℹ'\n}\n\nconst displayIcon = computed(() => {\n if (props.icon) return props.icon\n if (props.type === 'loading') return ''\n return icons[props.type] || ''\n})\n\nconst toastClass = computed(() => [\n `u-toast--${props.position}`,\n {\n 'u-toast--forbid-click': props.forbidClick,\n 'u-toast--loading': props.type === 'loading'\n }\n])\n\nconst toastStyle = computed(() => ({\n zIndex: 1000\n}))\n\nconst show = () => {\n visible.value = true\n\n if (props.type !== 'loading' && props.duration > 0) {\n timer = setTimeout(() => {\n hide()\n }, props.duration)\n }\n}\n\nconst hide = () => {\n visible.value = false\n if (timer) {\n clearTimeout(timer)\n timer = null\n }\n}\n\nonUnmounted(() => {\n if (timer) {\n clearTimeout(timer)\n }\n})\n\ndefineExpose({\n show,\n hide\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-toast {\n position: fixed;\n left: 50%;\n transform: translateX(-50%);\n z-index: 1000;\n pointer-events: none;\n\n &--top {\n top: 50px;\n }\n\n &--middle {\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n &--bottom {\n bottom: 50px;\n }\n\n &--forbid-click {\n pointer-events: auto;\n width: 100vw;\n height: 100vh;\n left: 0;\n top: 0;\n transform: none;\n background-color: transparent;\n }\n\n &__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: $--spacing-base $--spacing-lg;\n background-color: rgba(0, 0, 0, 0.7);\n border-radius: $--radius-lg;\n min-width: 100px;\n max-width: 280px;\n }\n\n &--loading &__content {\n min-width: 80px;\n min-height: 80px;\n padding: $--spacing-lg;\n }\n\n &__icon {\n font-size: 32px;\n color: $--text-color-white;\n margin-bottom: $--spacing-sm;\n }\n\n &__loading {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: $--spacing-sm;\n }\n\n &__loading-icon {\n width: 24px;\n height: 24px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: $--text-color-white;\n border-radius: 50%;\n animation: u-toast-loading 0.8s linear infinite;\n }\n\n @keyframes u-toast-loading {\n to {\n transform: rotate(360deg);\n }\n }\n\n &__text {\n font-size: $--font-size-base;\n color: $--text-color-white;\n line-height: 1.4;\n text-align: center;\n }\n}\n</style>","<template>\n <view class=\"u-popup\" :class=\"popupClass\" @touchmove.stop.prevent>\n <view\n v-if=\"visible\"\n class=\"u-popup__overlay\"\n :class=\"{ 'u-popup__overlay--visible': overlayVisible }\"\n @click=\"handleOverlayClick\"\n />\n <view v-if=\"visible\" class=\"u-popup__content\" :class=\"contentClass\" :style=\"contentStyle\">\n <view v-if=\"closeable\" class=\"u-popup__close\" @click=\"handleClose\">\n <text class=\"u-popup__close-icon\">✕</text>\n </view>\n <slot />\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ntype PopupPosition = 'top' | 'bottom' | 'left' | 'right' | 'center'\n\ninterface Props {\n visible?: boolean\n position?: PopupPosition\n overlay?: boolean\n overlayClass?: string\n closeable?: boolean\n closeOnClickOverlay?: boolean\n safeArea?: boolean\n round?: boolean\n duration?: number\n zIndex?: number\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n visible: false,\n position: 'bottom',\n overlay: true,\n overlayClass: '',\n closeable: false,\n closeOnClickOverlay: true,\n safeArea: true,\n round: false,\n duration: 300,\n zIndex: 1000\n})\n\nconst emit = defineEmits<{\n 'update:visible': [value: boolean]\n open: []\n close: []\n}>()\n\nconst overlayVisible = ref(false)\nconst contentVisible = ref(false)\n\nlet timer: ReturnType<typeof setTimeout> | null = null\n\nconst popupClass = computed(() => [\n {\n 'u-popup--safe-area': props.safeArea\n }\n])\n\nconst contentClass = computed(() => [\n `u-popup__content--${props.position}`,\n {\n 'u-popup__content--round': props.round,\n 'u-popup__content--visible': contentVisible.value\n }\n])\n\nconst contentStyle = computed(() => {\n const style: Record<string, string> = {}\n const positions: Record<string, string> = {\n top: 'top: 0; left: 0; right: 0;',\n bottom: 'bottom: 0; left: 0; right: 0;',\n left: 'left: 0; top: 0; bottom: 0;',\n right: 'right: 0; top: 0; bottom: 0;',\n center: 'top: 50%; left: 50%;'\n }\n\n style.zIndex = String(props.zIndex + 1)\n\n if (props.position === 'center') {\n style.transitionDuration = `${props.duration}ms`\n }\n\n return style\n})\n\nwatch(() => props.visible, (val) => {\n if (val) {\n overlayVisible.value = true\n timer = setTimeout(() => {\n contentVisible.value = true\n emit('open')\n }, 50)\n } else {\n contentVisible.value = false\n timer = setTimeout(() => {\n overlayVisible.value = false\n emit('close')\n }, props.duration)\n }\n})\n\nconst handleOverlayClick = () => {\n if (props.closeOnClickOverlay) {\n handleClose()\n }\n}\n\nconst handleClose = () => {\n emit('update:visible', false)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-popup {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1000;\n pointer-events: none;\n\n &--safe-area {\n padding-bottom: constant(safe-area-inset-bottom);\n padding-bottom: env(safe-area-inset-bottom);\n /* 鴻蒙兼容 */\n padding-bottom: var(--safe-area-inset-bottom, env(safe-area-inset-bottom));\n }\n\n &__overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.7);\n opacity: 0;\n transition: opacity 0.3s;\n pointer-events: auto;\n\n &--visible {\n opacity: 1;\n }\n }\n\n &__content {\n position: absolute;\n background-color: $--bg-color-2;\n transition: transform 0.3s ease-out;\n pointer-events: auto;\n overflow: hidden;\n\n &--top {\n transform: translateY(-100%);\n\n &--visible {\n transform: translateY(0);\n }\n\n &--round {\n border-radius: 0 0 $--radius-lg $--radius-lg;\n }\n }\n\n &--bottom {\n transform: translateY(100%);\n\n &--visible {\n transform: translateY(0);\n }\n\n &--round {\n border-radius: $--radius-lg $--radius-lg 0 0;\n }\n }\n\n &--left {\n width: 80%;\n height: 100%;\n transform: translateX(-100%);\n\n &--visible {\n transform: translateX(0);\n }\n\n &--round {\n border-radius: 0 $--radius-lg $--radius-lg 0;\n }\n }\n\n &--right {\n width: 80%;\n height: 100%;\n transform: translateX(100%);\n\n &--visible {\n transform: translateX(0);\n }\n\n &--round {\n border-radius: $--radius-lg 0 0 $--radius-lg;\n }\n }\n\n &--center {\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%) scale(0.9);\n opacity: 0;\n min-width: 280px;\n border-radius: $--radius-lg;\n transition: transform 0.3s ease-out, opacity 0.3s ease-out;\n\n &--visible {\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n }\n\n &--round {\n border-radius: $--radius-lg;\n }\n }\n }\n\n &__close {\n position: absolute;\n top: $--spacing-base;\n right: $--spacing-base;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n\n &-icon {\n font-size: 18px;\n color: $--text-color-3;\n }\n }\n}\n</style>","<template>\n <view class=\"u-code-input\">\n <view class=\"u-code-input__wrapper\">\n <view\n v-for=\"i in length\"\n :key=\"i\"\n class=\"u-code-input__item\"\n :class=\"itemClass(i)\"\n :style=\"itemStyle\"\n >\n <text v-if=\"values[i - 1] && !password\" class=\"u-code-input__char\">{{ values[i - 1] }}</text>\n <view v-else-if=\"values[i - 1] && password\" class=\"u-code-input__dot\" />\n <view v-else class=\"u-code-input__placeholder\">{{ placeholderChar }}</view>\n <view v-if=\"focus && i - 1 === currentIndex\" class=\"u-code-input__cursor\" />\n </view>\n </view>\n <input\n class=\"u-code-input__input\"\n type=\"text\"\n :value=\"innerValue\"\n :maxlength=\"length\"\n :disabled=\"disabled\"\n :focus=\"focus\"\n :password=\"password\"\n @input=\"handleInput\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch } from 'vue'\n\ninterface Props {\n value?: string\n length?: number\n size?: number\n gap?: number\n plain?: boolean\n disabled?: boolean\n password?: boolean\n focus?: boolean\n borderColor?: string\n activeBorderColor?: string\n placeholderChar?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n length: 6,\n size: 40,\n gap: 10,\n plain: false,\n disabled: false,\n password: false,\n focus: false,\n borderColor: '#dcdee0',\n activeBorderColor: '#1989fa',\n placeholderChar: '·'\n})\n\nconst emit = defineEmits<{\n 'update:value': [value: string]\n 'update:modelValue': [value: string]\n input: [value: string]\n complete: [value: string]\n focus: []\n blur: []\n}>()\n\nconst innerValue = ref(props.value)\n\nwatch(() => props.value, (val) => {\n innerValue.value = val\n})\n\nconst values = computed(() => {\n const chars = innerValue.value.split('')\n return chars\n})\n\nconst currentIndex = computed(() => {\n return Math.min(values.value.length, props.length - 1)\n})\n\nconst itemStyle = computed(() => {\n return {\n width: `${props.size}px`,\n height: `${props.size}px`,\n marginRight: `${props.gap}px`\n }\n})\n\nconst itemClass = (i: number) => {\n const classes: string[] = []\n\n if (props.plain) {\n classes.push('u-code-input__item--plain')\n }\n\n if (!props.plain) {\n classes.push('u-code-input__item--filled')\n }\n\n if (values.value[i - 1]) {\n classes.push('u-code-input__item--active')\n }\n\n if (props.focus && i - 1 === currentIndex.value) {\n classes.push('u-code-input__item--focused')\n }\n\n if (props.disabled) {\n classes.push('u-code-input__item--disabled')\n }\n\n return classes\n}\n\nconst handleInput = (e: any) => {\n const val = e.detail.value.replace(/\\D/g, '').slice(0, props.length)\n innerValue.value = val\n\n emit('update:value', val)\n emit('update:modelValue', val)\n emit('input', val)\n\n if (val.length === props.length) {\n emit('complete', val)\n }\n}\n\nconst handleFocus = () => {\n emit('focus')\n}\n\nconst handleBlur = () => {\n emit('blur')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-code-input {\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n &__wrapper {\n display: flex;\n flex-direction: row;\n }\n\n &__item {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n font-weight: 500;\n line-height: 1;\n position: relative;\n flex-shrink: 0;\n\n &:last-child {\n margin-right: 0 !important;\n }\n\n &--filled {\n background-color: $--bg-color;\n border: 1px solid $--border-color;\n border-radius: $--radius-sm;\n }\n\n &--plain {\n border-bottom: 2px solid $--border-color;\n background-color: transparent;\n }\n\n &--active {\n border-color: $--color-primary;\n }\n\n &--focused {\n border-color: $--color-primary;\n }\n\n &--disabled {\n opacity: 0.5;\n }\n }\n\n &__char {\n color: $--text-color;\n }\n\n &__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: $--text-color;\n }\n\n &__placeholder {\n color: $--text-color-3;\n font-size: 24px;\n }\n\n &__cursor {\n position: absolute;\n left: 0;\n top: 10%;\n height: 80%;\n width: 2px;\n background-color: $--color-primary;\n animation: u-code-input-cursor 1s infinite;\n }\n\n @keyframes u-code-input-cursor {\n 0%, 50% {\n opacity: 1;\n }\n 51%, 100% {\n opacity: 0;\n }\n }\n\n &__input {\n position: absolute;\n top: 0;\n left: 0;\n width: 200%;\n height: 100%;\n opacity: 0;\n z-index: 2;\n }\n}\n</style>","<template>\n <view v-if=\"!loading\" class=\"u-skeleton__content\">\n <slot />\n </view>\n <view v-else class=\"u-skeleton\" :class=\"{ 'u-skeleton--animate': animate }\">\n <!-- 头像骨架 -->\n <view\n v-if=\"avatar\"\n class=\"u-skeleton__avatar\"\n :class=\"`u-skeleton__avatar--${avatarShape}`\"\n :style=\"avatarStyle\"\n />\n <!-- 内容区域 -->\n <view class=\"u-skeleton__content\">\n <!-- 标题骨架 -->\n <view\n v-if=\"title\"\n class=\"u-skeleton__title\"\n :style=\"titleStyle\"\n />\n <!-- 段落骨架 -->\n <view class=\"u-skeleton__paragraphs\">\n <view\n v-for=\"(row, index) in rowList\"\n :key=\"index\"\n class=\"u-skeleton__paragraph\"\n :style=\"getRowStyle(index)\"\n />\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype AvatarShape = 'circle' | 'square'\ntype TitleWidth = number | string\n\ninterface Props {\n loading?: boolean\n animate?: boolean\n avatar?: boolean\n avatarSize?: number | string\n avatarShape?: AvatarShape\n title?: boolean\n titleWidth?: TitleWidth\n row?: number\n rowWidth?: number | string | (number | string)[]\n rowHeight?: number | string | (number | string)[]\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n loading: true,\n animate: true,\n avatar: false,\n avatarSize: 40,\n avatarShape: 'circle',\n title: true,\n titleWidth: '40%',\n row: 3,\n rowWidth: '100%',\n rowHeight: 16\n})\n\nconst avatarStyle = computed(() => {\n const size = typeof props.avatarSize === 'number'\n ? `${props.avatarSize}px`\n : props.avatarSize\n return {\n width: size,\n height: size\n }\n})\n\nconst titleStyle = computed(() => {\n const width = typeof props.titleWidth === 'number'\n ? `${props.titleWidth}px`\n : props.titleWidth\n return { width }\n})\n\nconst rowList = computed(() => {\n return Array.from({ length: props.row }, (_, i) => i)\n})\n\nconst getRowStyle = (index: number) => {\n const style: Record<string, string> = {}\n\n // 处理宽度\n if (Array.isArray(props.rowWidth)) {\n const width = props.rowWidth[index]\n if (width !== undefined) {\n style.width = typeof width === 'number' ? `${width}px` : width\n }\n } else if (index === props.row - 1 && props.rowWidth === '100%') {\n // 最后一行默认 60% 宽度(如果是 100% 才处理)\n style.width = '60%'\n } else {\n style.width = typeof props.rowWidth === 'number'\n ? `${props.rowWidth}px`\n : props.rowWidth\n }\n\n // 处理高度\n if (Array.isArray(props.rowHeight)) {\n const height = props.rowHeight[index]\n if (height !== undefined) {\n style.height = typeof height === 'number' ? `${height}px` : height\n }\n } else {\n style.height = typeof props.rowHeight === 'number'\n ? `${props.rowHeight}px`\n : props.rowHeight\n }\n\n return style\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-skeleton {\n display: flex;\n gap: $--spacing-md;\n\n &--animate {\n .u-skeleton__avatar,\n .u-skeleton__title,\n .u-skeleton__paragraph {\n animation: skeleton-blink 1.2s ease-in-out infinite;\n }\n }\n\n &__avatar {\n flex-shrink: 0;\n background-color: $--bg-color-3;\n border-radius: 50%;\n\n &--circle {\n border-radius: 50%;\n }\n\n &--square {\n border-radius: $--radius-sm;\n }\n }\n\n &__content {\n flex: 1;\n min-width: 0;\n }\n\n &__title {\n height: 20px;\n margin-bottom: $--spacing-md;\n background-color: $--bg-color-3;\n border-radius: $--radius-sm;\n }\n\n &__paragraphs {\n display: flex;\n flex-direction: column;\n gap: $--spacing-sm;\n }\n\n &__paragraph {\n background-color: $--bg-color-3;\n border-radius: $--radius-sm;\n }\n}\n\n@keyframes skeleton-blink {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n 100% {\n opacity: 1;\n }\n}\n</style>","<template>\n <view\n v-show=\"visible\"\n class=\"u-transition\"\n :class=\"transitionClass\"\n :style=\"transitionStyle\"\n @transitionend=\"onTransitionEnd\"\n >\n <slot />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ntype TransitionMode =\n | 'fade'\n | 'fade-up'\n | 'fade-down'\n | 'fade-left'\n | 'fade-right'\n | 'slide-up'\n | 'slide-down'\n | 'slide-left'\n | 'slide-right'\n | 'zoom'\n | 'zoom-fade'\n\ninterface Props {\n show?: boolean\n mode?: TransitionMode\n duration?: number\n delay?: number\n customStyle?: Record<string, string | number>\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n show: false,\n mode: 'fade',\n duration: 300,\n delay: 0\n})\n\nconst emit = defineEmits<{\n (e: 'after-enter'): void\n (e: 'after-leave'): void\n}>()\n\nconst visible = ref(false)\nconst animationPhase = ref<'enter' | 'leave'>('enter')\n\n// 监听 show 变化\nwatch(\n () => props.show,\n (val) => {\n if (val) {\n visible.value = true\n animationPhase.value = 'enter'\n } else {\n animationPhase.value = 'leave'\n }\n },\n { immediate: true }\n)\n\nconst transitionClass = computed(() => {\n const classes: string[] = []\n\n if (animationPhase.value === 'enter') {\n classes.push(`u-transition--${props.mode}-enter`)\n } else {\n classes.push(`u-transition--${props.mode}-leave`)\n }\n\n return classes\n})\n\nconst transitionStyle = computed(() => {\n const style: Record<string, string | number> = {\n transitionDuration: `${props.duration}ms`,\n transitionDelay: `${props.delay}ms`,\n transitionProperty: 'opacity, transform',\n transitionTimingFunction: 'ease-out'\n }\n\n if (props.customStyle) {\n Object.assign(style, props.customStyle)\n }\n\n return style\n})\n\nconst onTransitionEnd = () => {\n if (animationPhase.value === 'leave') {\n visible.value = false\n emit('after-leave')\n } else {\n emit('after-enter')\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-transition {\n // 基础状态\n opacity: 1;\n transform: none;\n\n // 淡入淡出\n &--fade-enter {\n opacity: 0;\n }\n &--fade-leave {\n opacity: 0;\n }\n\n // 上滑淡入\n &--fade-up-enter {\n opacity: 0;\n transform: translateY(100%);\n }\n &--fade-up-leave {\n opacity: 0;\n transform: translateY(-100%);\n }\n\n // 下滑淡入\n &--fade-down-enter {\n opacity: 0;\n transform: translateY(-100%);\n }\n &--fade-down-leave {\n opacity: 0;\n transform: translateY(100%);\n }\n\n // 左滑淡入\n &--fade-left-enter {\n opacity: 0;\n transform: translateX(100%);\n }\n &--fade-left-leave {\n opacity: 0;\n transform: translateX(-100%);\n }\n\n // 右滑淡入\n &--fade-right-enter {\n opacity: 0;\n transform: translateX(-100%);\n }\n &--fade-right-leave {\n opacity: 0;\n transform: translateX(100%);\n }\n\n // 上滑进入\n &--slide-up-enter {\n transform: translateY(100%);\n }\n &--slide-up-leave {\n transform: translateY(-100%);\n }\n\n // 下滑进入\n &--slide-down-enter {\n transform: translateY(-100%);\n }\n &--slide-down-leave {\n transform: translateY(100%);\n }\n\n // 左滑进入\n &--slide-left-enter {\n transform: translateX(100%);\n }\n &--slide-left-leave {\n transform: translateX(-100%);\n }\n\n // 右滑进入\n &--slide-right-enter {\n transform: translateX(-100%);\n }\n &--slide-right-leave {\n transform: translateX(100%);\n }\n\n // 缩放\n &--zoom-enter {\n transform: scale(0);\n }\n &--zoom-leave {\n transform: scale(0);\n }\n\n // 缩放淡入\n &--zoom-fade-enter {\n opacity: 0;\n transform: scale(0.5);\n }\n &--zoom-fade-leave {\n opacity: 0;\n transform: scale(0.5);\n }\n}\n</style>","<template>\n <text\n class=\"u-link\"\n :class=\"linkClass\"\n :style=\"linkStyle\"\n @click=\"handleClick\"\n >\n <slot>{{ text }}</slot>\n </text>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype LinkType = 'default' | 'primary' | 'success' | 'warning' | 'danger'\n\ninterface Props {\n text?: string\n type?: LinkType\n color?: string\n underline?: boolean\n href?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n text: '',\n type: 'default',\n underline: false,\n disabled: false\n})\n\nconst emit = defineEmits<{\n (e: 'click'): void\n}>()\n\nconst linkClass = computed(() => [\n `u-link--${props.type}`,\n {\n 'u-link--underline': props.underline,\n 'u-link--disabled': props.disabled\n }\n])\n\nconst linkStyle = computed(() => {\n const style: Record<string, string> = {}\n if (props.color) {\n style.color = props.color\n }\n return style\n})\n\nconst handleClick = () => {\n if (props.disabled) return\n\n if (props.href) {\n // 在新窗口打开链接\n // uni-app 环境下使用特定方法\n // #ifdef H5\n window.open(props.href, '_blank')\n // #endif\n }\n\n emit('click')\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-link {\n display: inline;\n color: $--text-color-2;\n font-size: inherit;\n word-break: break-all;\n\n &--default {\n color: $--text-color-2;\n }\n\n &--primary {\n color: $--color-primary;\n }\n\n &--success {\n color: $--color-success;\n }\n\n &--warning {\n color: $--color-warning;\n }\n\n &--danger {\n color: $--color-danger;\n }\n\n &--underline {\n text-decoration: underline;\n }\n\n &--disabled {\n color: $--text-color-3;\n opacity: 0.5;\n }\n}\n</style>","<template>\n <view class=\"u-read-more\">\n <view\n class=\"u-read-more__content\"\n :style=\"contentStyle\"\n >\n <slot />\n </view>\n <view\n v-if=\"showToggle\"\n class=\"u-read-more__toggle\"\n @click=\"handleToggle\"\n >\n <text class=\"u-read-more__toggle-text\">{{ toggleText }}</text>\n <text class=\"u-read-more__toggle-icon\">{{ expanded ? '↑' : '↓' }}</text>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\n\ninterface Props {\n maxLength?: number\n rows?: number\n expandText?: string\n collapseText?: string\n autoCollapse?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n maxLength: 200,\n rows: 3,\n expandText: '展开',\n collapseText: '收起',\n autoCollapse: false\n})\n\nconst emit = defineEmits<{\n (e: 'expand'): void\n (e: 'collapse'): void\n}>()\n\nconst expanded = ref(false)\nconst showToggle = ref(true)\n\n// 内容区域样式\nconst contentStyle = computed(() => {\n if (expanded.value) {\n return {}\n }\n // 使用 line-clamp 限制行数\n return {\n display: '-webkit-box',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n webkitLineClamp: String(props.rows),\n webkitBoxOrient: 'vertical'\n }\n})\n\n// 切换按钮文字\nconst toggleText = computed(() => {\n return expanded.value ? props.collapseText : props.expandText\n})\n\n// 切换展开/收起\nconst handleToggle = () => {\n expanded.value = !expanded.value\n\n if (expanded.value) {\n emit('expand')\n } else {\n emit('collapse')\n }\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-read-more {\n &__content {\n font-size: $--font-size-md;\n color: $--text-color;\n line-height: 1.6;\n word-break: break-all;\n }\n\n &__toggle {\n display: inline-flex;\n align-items: center;\n margin-top: $--spacing-sm;\n color: $--color-primary;\n font-size: $--font-size-md;\n\n &:active {\n opacity: 0.7;\n }\n }\n\n &__toggle-text {\n margin-right: $--spacing-xs;\n }\n\n &__toggle-icon {\n font-size: $--font-size-sm;\n }\n}\n</style>","<template>\n <view class=\"u-tabbar\">\n <!-- 导航栏背景 -->\n <view class=\"u-tabbar__nav-wrap\">\n <!-- 左侧Tab按钮 -->\n <view\n class=\"u-tabbar__tab-btn\"\n :class=\"{ 'u-tabbar__tab-btn--active': modelValue === leftTab.value }\"\n @click=\"switchTab(leftTab.value)\"\n >\n <u-icon\n v-if=\"leftTab.icon\"\n :name=\"leftTab.icon\"\n :size=\"16\"\n :color=\"modelValue === leftTab.value ? activeColor : inactiveColor\"\n />\n <text\n class=\"u-tabbar__tab-text\"\n :style=\"{ color: modelValue === leftTab.value ? activeColor : inactiveColor }\"\n >\n {{ leftTab.label }}\n </text>\n </view>\n\n <!-- 中间占位 + 凸起按钮 -->\n <view class=\"u-tabbar__center\">\n <view\n class=\"u-tabbar__center-btn\"\n :class=\"{\n 'u-tabbar__center-btn--active': modelValue === centerTab.value,\n 'u-tabbar__center-btn--left-active': modelValue === leftTab.value\n }\"\n @click=\"switchTab(centerTab.value)\"\n >\n <text class=\"u-tabbar__center-brand\">\n {{ centerBrand }}\n </text>\n <text class=\"u-tabbar__center-text\">\n {{ centerLabel }}\n </text>\n </view>\n </view>\n\n <!-- 右侧Tab按钮 -->\n <view\n class=\"u-tabbar__tab-btn\"\n :class=\"{ 'u-tabbar__tab-btn--active': modelValue === rightTab.value }\"\n @click=\"switchTab(rightTab.value)\"\n >\n <u-icon\n v-if=\"rightTab.icon\"\n :name=\"rightTab.icon\"\n :size=\"16\"\n :color=\"modelValue === rightTab.value ? activeColor : inactiveColor\"\n />\n <text\n class=\"u-tabbar__tab-text\"\n :style=\"{ color: modelValue === rightTab.value ? activeColor : inactiveColor }\"\n >\n {{ rightTab.label }}\n </text>\n </view>\n </view>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport UIcon from '../u-icon/u-icon.vue'\n\nexport interface TabItem {\n /** 标签文字 */\n label: string\n /** 图标名称 */\n icon?: string\n /** 标识值 */\n value: string\n}\n\nexport interface Props {\n /** 当前选中的tab值 */\n modelValue?: string\n /** 左侧Tab配置 */\n leftTab?: TabItem\n /** 中间Tab配置 */\n centerTab?: TabItem\n /** 右侧Tab配置 */\n rightTab?: TabItem\n /** 中间品牌文字 */\n centerBrand?: string\n /** 中间标签文字 */\n centerLabel?: string\n /** 激活状态颜色 */\n activeColor?: string\n /** 未激活状态颜色 */\n inactiveColor?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n modelValue: 'home',\n leftTab: () => ({ label: '首页', icon: 'home-fill', value: 'home' }),\n centerTab: () => ({ label: '图域', value: 'center' }),\n rightTab: () => ({ label: '我的', icon: 'account-fill', value: 'mine' }),\n centerBrand: 'TU',\n centerLabel: '图域',\n activeColor: '#0c958e',\n inactiveColor: '#ffffff'\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n 'tab-change': [value: string]\n}>()\n\n/**\n * 切换tab\n * @param tab - 目标tab值\n */\nconst switchTab = (tab: string) => {\n emit('update:modelValue', tab)\n emit('tab-change', tab)\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// 薄荷主题色\n$--mint-1: #12b6af;\n$--mint-2: #9fe4dd;\n$--mint-3: #65d8d1;\n$--ink: #1b4d4a;\n$--paper: #ffffff;\n\n.u-tabbar {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 999;\n width: 100%;\n pointer-events: none;\n\n &__nav-wrap {\n pointer-events: auto;\n position: absolute;\n left: 14px;\n right: 14px;\n bottom: 14px;\n z-index: 5;\n height: 56px;\n border-radius: 28px;\n background: linear-gradient(90deg, $--mint-1 0%, $--mint-2 100%);\n box-shadow: 0 10px 24px rgba(7, 114, 108, 0.3);\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 8px;\n box-sizing: border-box;\n }\n\n // Tab按钮\n &__tab-btn {\n height: 40px;\n border-radius: 20px;\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n font-size: 14px;\n transition: all 200ms ease;\n white-space: nowrap;\n overflow: hidden;\n padding: 0 16px;\n margin: 0 20px;\n\n &--active {\n background: $--paper;\n box-shadow: inset 0 0 0 1px rgba(17, 135, 128, 0.14);\n }\n }\n\n &__tab-text {\n font-weight: 600;\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // 中间区域 - 占位\n &__center {\n position: relative;\n width: 72px;\n height: 56px;\n flex-shrink: 0;\n }\n\n // 中间凸起按钮\n &__center-btn {\n position: absolute;\n left: 50%;\n top: -22px;\n transform: translateX(-50%);\n width: 72px;\n height: 72px;\n border-radius: 50%;\n border: 3px solid $--mint-2;\n background: $--paper;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 2px;\n box-shadow: 0 8px 20px rgba(8, 112, 106, 0.25);\n transition: all 200ms ease;\n\n &:active {\n transform: translateX(-50%) scale(0.95);\n }\n\n &--active {\n border-color: $--mint-1;\n box-shadow: 0 8px 24px rgba(8, 112, 106, 0.35);\n }\n\n // 左侧tab选中时的样式(首页选中)\n &--left-active {\n background: linear-gradient(135deg, $--mint-1 0%, $--mint-3 100%);\n border-color: $--mint-2;\n\n .u-tabbar__center-brand,\n .u-tabbar__center-text {\n color: $--paper;\n }\n }\n }\n\n &__center-brand {\n font-size: 22px;\n line-height: 1;\n font-weight: 700;\n color: $--mint-1;\n letter-spacing: 1px;\n }\n\n &__center-text {\n font-size: 12px;\n letter-spacing: 0.5px;\n color: $--mint-1;\n font-weight: 500;\n }\n}\n</style>\n","<template>\n <view class=\"u-qrcode\">\n <canvas\n v-if=\"canvasWidth > 0\"\n :canvas-id=\"canvasId\"\n :style=\"{ width: `${canvasWidth}px`, height: `${canvasWidth}px` }\"\n class=\"u-qrcode__canvas\"\n />\n <image\n v-if=\"imageUrl\"\n :src=\"imageUrl\"\n :style=\"{ width: `${size}px`, height: `${size}px` }\"\n class=\"u-qrcode__image\"\n mode=\"aspectFit\"\n />\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted, nextTick } from 'vue'\n\ninterface Props {\n value: string\n size?: number\n color?: string\n bgColor?: string\n errorCorrectLevel?: 'L' | 'M' | 'Q' | 'H'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n size: 200,\n color: '#000000',\n bgColor: '#ffffff',\n errorCorrectLevel: 'M'\n})\n\nconst canvasId = ref(`qrcode_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`)\nconst canvasWidth = ref(0)\nconst imageUrl = ref('')\n\n// QR Code 生成算法\nconst QRCode = {\n // 错误纠正级别\n ECL: { L: 1, M: 0, Q: 3, H: 2 },\n\n // 版本容量表\n getCapacity(version: number, ecl: number): number {\n const capacities = [\n 0, 17, 32, 53, 78, 106, 134, 154, 192, 230, 271, 321, 367, 425, 458, 520,\n 586, 644, 718, 792, 858, 929, 1003, 1091, 1171, 1273, 1367, 1465, 1528, 1628, 1732, 1840,\n 1952, 2068, 2188, 2303, 2431, 2563, 2699, 2809, 2953\n ]\n return capacities[version] || 0\n },\n\n // 获取版本\n getVersion(length: number, ecl: number): number {\n for (let v = 1; v <= 40; v++) {\n if (this.getCapacity(v, ecl) >= length) return v\n }\n return 40\n },\n\n // 生成二维码矩阵\n generate(data: string, ecl: string): number[][] {\n const level = this.ECL[ecl] || 0\n const version = this.getVersion(data.length, level)\n const size = version * 4 + 17\n const matrix: number[][] = []\n\n // 初始化矩阵\n for (let i = 0; i < size; i++) {\n matrix[i] = new Array(size).fill(-1)\n }\n\n // 添加定位图案\n this.addFinderPattern(matrix, 0, 0)\n this.addFinderPattern(matrix, size - 7, 0)\n this.addFinderPattern(matrix, 0, size - 7)\n\n // 添加分隔符\n this.addSeparator(matrix, size)\n\n // 添加定位图案\n this.addAlignmentPattern(matrix, version)\n\n // 添加定时图案\n this.addTimingPattern(matrix, size)\n\n // 添加格式信息区域\n this.addFormatInfo(matrix, size)\n\n // 填充数据\n this.fillData(matrix, data, version, size)\n\n return matrix\n },\n\n addFinderPattern(matrix: number[][], row: number, col: number) {\n for (let r = 0; r < 7; r++) {\n for (let c = 0; c < 7; c++) {\n if (row + r < matrix.length && col + c < matrix.length) {\n if (r === 0 || r === 6 || c === 0 || c === 6 ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix[row + r][col + c] = 1\n } else {\n matrix[row + r][col + c] = 0\n }\n }\n }\n }\n },\n\n addSeparator(matrix: number[][], size: number) {\n for (let i = 0; i < 8; i++) {\n // 左上\n if (i < size && matrix[7]) matrix[7][i] = 0\n if (i < size && matrix[i]) matrix[i][7] = 0\n // 右上\n if (size - 8 + i < size && matrix[7]) matrix[7][size - 8 + i] = 0\n if (i < size && matrix[i]) matrix[i][size - 8] = 0\n // 左下\n if (i < size && matrix[size - 8]) matrix[size - 8][i] = 0\n if (size - 8 + i < size && matrix[size - 1 - i]) matrix[size - 1 - i][7] = 0\n }\n },\n\n addAlignmentPattern(matrix: number[][], version: number) {\n if (version < 2) return\n\n const positions = this.getAlignmentPositions(version)\n for (const row of positions) {\n for (const col of positions) {\n if (matrix[row][col] === -1) {\n this.addAlignmentPatternAt(matrix, row, col)\n }\n }\n }\n },\n\n getAlignmentPositions(version: number): number[] {\n if (version === 1) return []\n const intervals = Math.floor(version / 7) + 1\n const size = version * 4 + 17\n const step = Math.ceil((size - 13) / intervals)\n const positions = [6]\n\n for (let i = 1; i <= intervals; i++) {\n positions.push(size - 7 + (i - intervals) * step)\n }\n\n return [...new Set(positions)].sort((a, b) => a - b)\n },\n\n addAlignmentPatternAt(matrix: number[][], row: number, col: number) {\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (row + r >= 0 && row + r < matrix.length &&\n col + c >= 0 && col + c < matrix.length) {\n if (Math.abs(r) === 2 || Math.abs(c) === 2 || (r === 0 && c === 0)) {\n matrix[row + r][col + c] = 1\n } else {\n matrix[row + r][col + c] = 0\n }\n }\n }\n }\n },\n\n addTimingPattern(matrix: number[][], size: number) {\n for (let i = 8; i < size - 8; i++) {\n if (matrix[6][i] === -1) matrix[6][i] = i % 2 === 0 ? 1 : 0\n if (matrix[i][6] === -1) matrix[i][6] = i % 2 === 0 ? 1 : 0\n }\n },\n\n addFormatInfo(matrix: number[][], size: number) {\n // 预留格式信息区域\n for (let i = 0; i < 9; i++) {\n if (matrix[8][i] === -1) matrix[8][i] = 0\n if (matrix[i][8] === -1) matrix[i][8] = 0\n }\n for (let i = 0; i < 8; i++) {\n if (matrix[8][size - 1 - i] === -1) matrix[8][size - 1 - i] = 0\n if (matrix[size - 1 - i][8] === -1) matrix[size - 1 - i][8] = 0\n }\n },\n\n fillData(matrix: number[][], data: string, version: number, size: number) {\n // 简化版数据填充\n const bytes = this.encodeData(data)\n let bitIndex = 0\n let upward = true\n\n for (let col = size - 1; col >= 1; col -= 2) {\n if (col === 6) col = 5 // 跳过定时图案列\n\n for (let row = upward ? size - 1 : 0; upward ? row >= 0 : row < size; upward ? row-- : row++) {\n for (let c = 0; c < 2; c++) {\n const currentCol = col - c\n if (matrix[row][currentCol] === -1) {\n const bit = bitIndex < bytes.length * 8\n ? (bytes[Math.floor(bitIndex / 8)] >> (7 - (bitIndex % 8))) & 1\n : (bitIndex % 2 === 0 ? 1 : 0) // 填充掩码\n matrix[row][currentCol] = bit\n bitIndex++\n }\n }\n }\n upward = !upward\n }\n },\n\n encodeData(data: string): number[] {\n const bytes: number[] = []\n // 添加模式指示符(字节模式)\n bytes.push(0x40) // 0100\n\n // 添加字符计数\n const len = data.length\n if (len < 256) {\n bytes.push(len)\n }\n\n // 添加数据\n for (let i = 0; i < data.length; i++) {\n bytes.push(data.charCodeAt(i))\n }\n\n // 添加终止符\n bytes.push(0)\n bytes.push(0)\n bytes.push(0)\n bytes.push(0)\n\n return bytes\n }\n}\n\nconst generateQRCode = async () => {\n if (!props.value) return\n\n const dpr = uni.getSystemInfoSync().pixelRatio || 2\n canvasWidth.value = props.size * dpr\n\n await nextTick()\n\n const matrix = QRCode.generate(props.value, props.errorCorrectLevel)\n const size = matrix.length\n const cellSize = canvasWidth.value / size\n\n const ctx = uni.createCanvasContext(canvasId.value)\n\n // 绘制背景\n ctx.setFillStyle(props.bgColor)\n ctx.fillRect(0, 0, canvasWidth.value, canvasWidth.value)\n\n // 绘制二维码\n ctx.setFillStyle(props.color)\n for (let row = 0; row < size; row++) {\n for (let col = 0; col < size; col++) {\n if (matrix[row][col] === 1) {\n ctx.fillRect(col * cellSize, row * cellSize, cellSize, cellSize)\n }\n }\n }\n\n ctx.draw(false, () => {\n setTimeout(() => {\n uni.canvasToTempFilePath({\n canvasId: canvasId.value,\n width: canvasWidth.value,\n height: canvasWidth.value,\n success: (res) => {\n imageUrl.value = res.tempFilePath\n },\n fail: (err) => {\n console.error('生成二维码失败:', err)\n }\n })\n }, 100)\n })\n}\n\nwatch(() => props.value, generateQRCode)\nwatch(() => props.size, generateQRCode)\nwatch(() => props.color, generateQRCode)\nwatch(() => props.bgColor, generateQRCode)\n\nonMounted(() => {\n generateQRCode()\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-qrcode {\n display: inline-block;\n position: relative;\n\n &__canvas {\n position: absolute;\n left: -9999px;\n top: -9999px;\n }\n\n &__image {\n display: block;\n }\n}\n</style>\n","<template>\n <view class=\"u-barcode\">\n <canvas\n v-if=\"canvasWidth > 0\"\n :canvas-id=\"canvasId\"\n :style=\"{ width: `${canvasWidth}px`, height: `${canvasHeight}px` }\"\n class=\"u-barcode__canvas\"\n />\n <image\n v-if=\"imageUrl\"\n :src=\"imageUrl\"\n :style=\"{ width: `${width}px`, height: `${height}px` }\"\n class=\"u-barcode__image\"\n mode=\"aspectFit\"\n />\n <text v-if=\"showValue\" class=\"u-barcode__value\" :style=\"{ color: textColor }\">{{ value }}</text>\n </view>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watch, onMounted, nextTick } from 'vue'\n\ninterface Props {\n value: string\n width?: number\n height?: number\n lineWidth?: number\n lineColor?: string\n bgColor?: string\n showValue?: boolean\n textColor?: string\n format?: 'CODE128' | 'CODE39' | 'EAN13' | 'EAN8' | 'UPC'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n value: '',\n width: 200,\n height: 80,\n lineWidth: 2,\n lineColor: '#000000',\n bgColor: '#ffffff',\n showValue: true,\n textColor: '#000000',\n format: 'CODE128'\n})\n\nconst canvasId = ref(`barcode_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`)\nconst canvasWidth = ref(0)\nconst canvasHeight = ref(0)\nconst imageUrl = ref('')\n\n// CODE128 编码表\nconst CODE128 = {\n START_B: 104,\n STOP: 106,\n PATTERNS: [\n '11011001100', '11001101100', '11001100110', '10010011000', '10010001100',\n '10001001100', '10011001000', '10011000100', '10001100100', '11001001000',\n '11001000100', '11000100100', '10110011100', '10011011100', '10011001110',\n '10111001100', '10011101100', '10011100110', '11001110010', '11001011100',\n '11001001110', '11011100100', '11001110100', '11101101110', '11101001100',\n '11100101100', '11100100110', '11101100100', '11100110100', '11100110010',\n '11011011000', '11011000110', '11000110110', '10100011000', '10001011000',\n '10001000110', '10110001000', '10001101000', '10001100010', '11010001000',\n '11000101000', '11000100010', '10110111000', '10110001110', '10001101110',\n '10111011000', '10111000110', '10001110110', '11101110110', '11010001110',\n '11000101110', '11011101000', '11011100010', '11011101110', '11101011000',\n '11101000110', '11100010110', '11101101000', '11101100010', '11100011010',\n '11101111010', '11001000010', '11110001010', '10100110000', '10100001100',\n '10010110000', '10010000110', '10000101100', '10000100110', '10110010000',\n '10110000100', '10011010000', '10011000010', '10000110100', '10000110010',\n '11000010010', '11001010000', '11110111010', '11000010100', '10001111010',\n '10100111100', '10010111100', '10010011110', '10111100100', '10011110100',\n '10011110010', '11110100100', '11110010100', '11110010010', '11011011110',\n '11011110110', '11110110110', '10101111000', '10100011110', '10001011110',\n '10111101000', '10111100010', '11110101000', '11110100010', '10111011110',\n '10111101110', '11101011110', '11110101110', '11010000100', '11010010000',\n '11010011100', '1100011101011'\n ],\n getValue(char: string): number {\n return char.charCodeAt(0) - 32\n },\n encode(data: string): string {\n let code = this.PATTERNS[this.START_B]\n let checksum = this.START_B\n\n for (let i = 0; i < data.length; i++) {\n const val = this.getValue(data[i])\n code += this.PATTERNS[val]\n checksum += val * (i + 1)\n }\n\n checksum = checksum % 103\n code += this.PATTERNS[checksum]\n code += this.PATTERNS[this.STOP]\n\n return code\n }\n}\n\n// CODE39 编码表\nconst CODE39 = {\n CHARS: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*',\n PATTERNS: [\n '101001101101', '110100101011', '101100101011', '110110010101', '101001101011',\n '110100110101', '101100110101', '101001011011', '110100101101', '101100101101',\n '110101001011', '101101001011', '110110100101', '101011001011', '110101100101',\n '101101100101', '101010011011', '110101001101', '101101001101', '101011001101',\n '110101010011', '101101010011', '110110101001', '101011010011', '110101101001',\n '101101101001', '101010110011', '110101011001', '101101011001', '101011011001',\n '110010101011', '100110101011', '110011010101', '100101101011', '110010110101',\n '100110110101', '100101011011', '110010101101', '100110101101', '100100100101',\n '100100101001', '100101001001', '101001001001', '100101101101'\n ],\n encode(data: string): string {\n const start = '101001101101' // *\n let code = start + '0' // 添加间隔\n\n for (const char of data.toUpperCase()) {\n const index = this.CHARS.indexOf(char)\n if (index >= 0) {\n code += this.PATTERNS[index] + '0'\n }\n }\n\n code += start\n return code\n }\n}\n\n// EAN13 编码表\nconst EAN13 = {\n L_PATTERNS: [\n '0001101', '0011001', '0010011', '0111101', '0100011',\n '0110001', '0101111', '0111011', '0110111', '0001011'\n ],\n G_PATTERNS: [\n '0100111', '0110011', '0011011', '0100001', '0011101',\n '0111001', '0000101', '0010001', '0001001', '0010111'\n ],\n R_PATTERNS: [\n '1110010', '1100110', '1101100', '1000010', '1011100',\n '1001110', '1010000', '1000100', '1001000', '1110100'\n ],\n FIRST_DIGIT_PATTERNS: ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL'],\n encode(data: string): string {\n if (data.length === 12) {\n data = this.addChecksum(data)\n }\n if (data.length !== 13) return ''\n\n const firstDigit = parseInt(data[0])\n const pattern = this.FIRST_DIGIT_PATTERNS[firstDigit]\n\n let code = '101' // 起始符\n\n // 左侧数据\n for (let i = 1; i <= 6; i++) {\n const digit = parseInt(data[i])\n if (pattern[i - 1] === 'L') {\n code += this.L_PATTERNS[digit]\n } else {\n code += this.G_PATTERNS[digit]\n }\n }\n\n code += '01010' // 中间分隔符\n\n // 右侧数据\n for (let i = 7; i <= 12; i++) {\n const digit = parseInt(data[i])\n code += this.R_PATTERNS[digit]\n }\n\n code += '101' // 结束符\n\n return code\n },\n addChecksum(data: string): string {\n let sum = 0\n for (let i = 0; i < 12; i++) {\n const digit = parseInt(data[i])\n sum += i % 2 === 0 ? digit : digit * 3\n }\n const checksum = (10 - (sum % 10)) % 10\n return data + checksum\n }\n}\n\n// EAN8 编码\nconst EAN8 = {\n L_PATTERNS: EAN13.L_PATTERNS,\n R_PATTERNS: EAN13.R_PATTERNS,\n encode(data: string): string {\n if (data.length === 7) {\n data = this.addChecksum(data)\n }\n if (data.length !== 8) return ''\n\n let code = '101'\n\n for (let i = 0; i < 4; i++) {\n code += this.L_PATTERNS[parseInt(data[i])]\n }\n\n code += '01010'\n\n for (let i = 4; i < 8; i++) {\n code += this.R_PATTERNS[parseInt(data[i])]\n }\n\n code += '101'\n return code\n },\n addChecksum(data: string): string {\n let sum = 0\n for (let i = 0; i < 7; i++) {\n const digit = parseInt(data[i])\n sum += i % 2 === 0 ? digit * 3 : digit\n }\n const checksum = (10 - (sum % 10)) % 10\n return data + checksum\n }\n}\n\nconst generateBarcode = async () => {\n if (!props.value) return\n\n const dpr = uni.getSystemInfoSync().pixelRatio || 2\n canvasWidth.value = props.width * dpr\n canvasHeight.value = props.height * dpr\n\n await nextTick()\n\n let pattern = ''\n\n switch (props.format) {\n case 'CODE128':\n pattern = CODE128.encode(props.value)\n break\n case 'CODE39':\n pattern = CODE39.encode(props.value)\n break\n case 'EAN13':\n pattern = EAN13.encode(props.value)\n break\n case 'EAN8':\n pattern = EAN8.encode(props.value)\n break\n default:\n pattern = CODE128.encode(props.value)\n }\n\n if (!pattern) return\n\n const barWidth = canvasWidth.value / pattern.length\n const ctx = uni.createCanvasContext(canvasId.value)\n\n // 绘制背景\n ctx.setFillStyle(props.bgColor)\n ctx.fillRect(0, 0, canvasWidth.value, canvasHeight.value)\n\n // 绘制条形码\n ctx.setFillStyle(props.lineColor)\n for (let i = 0; i < pattern.length; i++) {\n if (pattern[i] === '1') {\n ctx.fillRect(i * barWidth, 0, barWidth, canvasHeight.value)\n }\n }\n\n ctx.draw(false, () => {\n setTimeout(() => {\n uni.canvasToTempFilePath({\n canvasId: canvasId.value,\n width: canvasWidth.value,\n height: canvasHeight.value,\n success: (res) => {\n imageUrl.value = res.tempFilePath\n },\n fail: (err) => {\n console.error('生成条形码失败:', err)\n }\n })\n }, 100)\n })\n}\n\nwatch(() => props.value, generateBarcode)\nwatch(() => props.width, generateBarcode)\nwatch(() => props.height, generateBarcode)\nwatch(() => props.format, generateBarcode)\n\nonMounted(() => {\n generateBarcode()\n})\n</script>\n\n<script lang=\"ts\">\nexport default {\n options: {\n virtualHost: true,\n styleIsolation: 'shared'\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.u-barcode {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n\n &__canvas {\n position: absolute;\n left: -9999px;\n top: -9999px;\n }\n\n &__image {\n display: block;\n }\n\n &__value {\n font-size: 14px;\n margin-top: 8px;\n font-family: monospace;\n letter-spacing: 2px;\n }\n}\n</style>\n"],"names":["__default__","computed","_createElementBlock","_openBlock","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_toDisplayString","_hoisted_5","_renderSlot","ref","$slots","_hoisted_1","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_normalizeClass","_normalizeStyle","_Fragment","_renderList","_createBlock","_createVNode","useSlots","nextValue","list","watch","date","provide","grid","inject","onUnmounted","_hoisted_11","tick","onMounted","_withModifiers","group","icons","nextTick","code"],"mappings":"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"}