@veltra/desktop 1.1.25 → 1.1.26

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.
Files changed (227) hide show
  1. package/dist/components/action/action-group.vue.d.ts +2 -2
  2. package/dist/components/action/action.js.map +1 -1
  3. package/dist/components/action/action.vue.d.ts +1 -1
  4. package/dist/components/badge/badge.js.map +1 -1
  5. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  6. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  7. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  8. package/dist/components/batch-edit/batch-edit.vue.d.ts +2 -2
  9. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  10. package/dist/components/button/button-group.js.map +1 -1
  11. package/dist/components/button/button.js.map +1 -1
  12. package/dist/components/calendar/calendar.js.map +1 -1
  13. package/dist/components/card/card-action.js.map +1 -1
  14. package/dist/components/card/card-content.js.map +1 -1
  15. package/dist/components/card/card-cover.js.map +1 -1
  16. package/dist/components/card/card.js.map +1 -1
  17. package/dist/components/cascade/cascade-panel-item.js.map +1 -1
  18. package/dist/components/cascade/cascade.js.map +1 -1
  19. package/dist/components/cascade/cascade.vue.d.ts +2 -2
  20. package/dist/components/check-tag/check-tag.js.map +1 -1
  21. package/dist/components/checkbox/checkbox-button.js.map +1 -1
  22. package/dist/components/checkbox/checkbox.js.map +1 -1
  23. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  24. package/dist/components/code-editor/code-editor.js.map +1 -1
  25. package/dist/components/collapse/collapse-item.js.map +1 -1
  26. package/dist/components/collapse/collapse.js.map +1 -1
  27. package/dist/components/condition-editor/components/condition-row.js.map +1 -1
  28. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  29. package/dist/components/context-menu/context-menu-item.js.map +1 -1
  30. package/dist/components/context-menu/context-menu.js.map +1 -1
  31. package/dist/components/date-panel/date-panel.js.map +1 -1
  32. package/dist/components/date-panel/headers/day.js.map +1 -1
  33. package/dist/components/date-panel/headers/month.js.map +1 -1
  34. package/dist/components/date-panel/headers/year.js.map +1 -1
  35. package/dist/components/date-panel/panels/day.js.map +1 -1
  36. package/dist/components/date-panel/panels/month.js.map +1 -1
  37. package/dist/components/date-panel/panels/year.js.map +1 -1
  38. package/dist/components/date-picker/date-picker.js.map +1 -1
  39. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  40. package/dist/components/dialog/dialog.js.map +1 -1
  41. package/dist/components/drawer/drawer.js.map +1 -1
  42. package/dist/components/empty/empty.js.map +1 -1
  43. package/dist/components/expression-editor/components/path-preview.js.map +1 -1
  44. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  45. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  46. package/dist/components/file-picker/file-picker.js.map +1 -1
  47. package/dist/components/file-picker/file-picker.vue.d.ts +1 -1
  48. package/dist/components/file-viewer/file-viewer.js.map +1 -1
  49. package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
  50. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  51. package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
  52. package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
  53. package/dist/components/float-button/float-button.js.map +1 -1
  54. package/dist/components/form/form.js.map +1 -1
  55. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  56. package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
  57. package/dist/components/grid/grid-item.js.map +1 -1
  58. package/dist/components/grid/grid.js.map +1 -1
  59. package/dist/components/grid-input/grid-input.js.map +1 -1
  60. package/dist/components/group-input/group-input.js.map +1 -1
  61. package/dist/components/icon/icon.js.map +1 -1
  62. package/dist/components/input/input.js.map +1 -1
  63. package/dist/components/input/input.vue.d.ts +2 -2
  64. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  65. package/dist/components/layout/layout-resizer.js.map +1 -1
  66. package/dist/components/layout/layout.js.map +1 -1
  67. package/dist/components/list/list-item.js.map +1 -1
  68. package/dist/components/list/list.js.map +1 -1
  69. package/dist/components/loading/loading.js.map +1 -1
  70. package/dist/components/menu/menu-icon.js.map +1 -1
  71. package/dist/components/menu/menu-sub-collapsed.js.map +1 -1
  72. package/dist/components/menu/menu.js.map +1 -1
  73. package/dist/components/message/message-box.js.map +1 -1
  74. package/dist/components/message/message.js.map +1 -1
  75. package/dist/components/message-confirm/message-confirm.js.map +1 -1
  76. package/dist/components/multi-select/multi-select-option.js.map +1 -1
  77. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +2 -2
  78. package/dist/components/notification/notification.js.map +1 -1
  79. package/dist/components/number/number.js.map +1 -1
  80. package/dist/components/number/number.vue.d.ts +1 -1
  81. package/dist/components/number-input/number-input.js.map +1 -1
  82. package/dist/components/number-input/number-input.vue.d.ts +2 -2
  83. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  84. package/dist/components/paginator/paginator.js.map +1 -1
  85. package/dist/components/palette/palette-alpha.js.map +1 -1
  86. package/dist/components/palette/palette-color-switch.js.map +1 -1
  87. package/dist/components/palette/palette-hue.js.map +1 -1
  88. package/dist/components/palette/palette-sv.js.map +1 -1
  89. package/dist/components/palette/palette.js.map +1 -1
  90. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  91. package/dist/components/progress/progress.js.map +1 -1
  92. package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
  93. package/dist/components/radio/radio.js.map +1 -1
  94. package/dist/components/radio-group/radio-group.js.map +1 -1
  95. package/dist/components/scroll/scroll-bar.js.map +1 -1
  96. package/dist/components/scroll/scroll.js.map +1 -1
  97. package/dist/components/slider/slider-thumb.js.map +1 -1
  98. package/dist/components/slider/slider.js.map +1 -1
  99. package/dist/components/steps/steps.js.map +1 -1
  100. package/dist/components/switch/switch.js.map +1 -1
  101. package/dist/components/table/table-body.js.map +1 -1
  102. package/dist/components/table/table-cell.js.map +1 -1
  103. package/dist/components/table/table-foot.js.map +1 -1
  104. package/dist/components/table/table.vue.d.ts +2 -2
  105. package/dist/components/table-editor/table-editor.js.map +1 -1
  106. package/dist/components/tabs/tabs-horizontal.js.map +1 -1
  107. package/dist/components/tabs/tabs-vertical.js.map +1 -1
  108. package/dist/components/tabs/tabs.js.map +1 -1
  109. package/dist/components/tag/tag.js.map +1 -1
  110. package/dist/components/text/text.js.map +1 -1
  111. package/dist/components/textarea/textarea.js.map +1 -1
  112. package/dist/components/textarea/textarea.vue.d.ts +2 -2
  113. package/dist/components/theme/theme.js.map +1 -1
  114. package/dist/components/tip/tip.js.map +1 -1
  115. package/dist/components/tree/tree-node.js.map +1 -1
  116. package/dist/components/tree/tree.js.map +1 -1
  117. package/dist/components/tree-select/tree-select.vue.d.ts +2 -2
  118. package/dist/components/watermark/watermark.js.map +1 -1
  119. package/package.json +6 -6
  120. package/src/components/action/action.vue +1 -4
  121. package/src/components/badge/badge.vue +3 -9
  122. package/src/components/batch-edit/batch-edit-form.vue +1 -5
  123. package/src/components/batch-edit/batch-edit-list.vue +2 -6
  124. package/src/components/batch-edit/batch-edit.vue +2 -12
  125. package/src/components/breadcrumb/breadcrumb.vue +4 -13
  126. package/src/components/button/button-group.vue +2 -6
  127. package/src/components/button/button.vue +3 -9
  128. package/src/components/calendar/calendar.vue +1 -3
  129. package/src/components/card/card-action.vue +1 -3
  130. package/src/components/card/card-content.vue +1 -6
  131. package/src/components/card/card-cover.vue +1 -3
  132. package/src/components/card/card.vue +2 -6
  133. package/src/components/cascade/cascade-panel-item.vue +2 -8
  134. package/src/components/cascade/cascade.vue +5 -37
  135. package/src/components/check-tag/check-tag.vue +1 -3
  136. package/src/components/checkbox/checkbox-button.vue +2 -6
  137. package/src/components/checkbox/checkbox.vue +1 -3
  138. package/src/components/checkbox-group/checkbox-group.vue +1 -3
  139. package/src/components/code-editor/code-editor.vue +4 -12
  140. package/src/components/collapse/collapse-item.vue +1 -3
  141. package/src/components/collapse/collapse.vue +2 -8
  142. package/src/components/condition-editor/components/condition-row.vue +2 -8
  143. package/src/components/condition-editor/condition-editor.vue +2 -6
  144. package/src/components/context-menu/context-menu-item.vue +3 -10
  145. package/src/components/context-menu/context-menu.vue +5 -17
  146. package/src/components/date-panel/date-panel.vue +3 -11
  147. package/src/components/date-panel/headers/day.vue +1 -3
  148. package/src/components/date-panel/headers/month.vue +1 -3
  149. package/src/components/date-panel/headers/year.vue +1 -3
  150. package/src/components/date-panel/panels/day.vue +1 -4
  151. package/src/components/date-panel/panels/month.vue +1 -3
  152. package/src/components/date-panel/panels/year.vue +1 -3
  153. package/src/components/date-picker/date-picker.vue +1 -3
  154. package/src/components/date-range-picker/date-range-picker.vue +1 -3
  155. package/src/components/dialog/dialog.vue +7 -24
  156. package/src/components/drawer/drawer.vue +3 -11
  157. package/src/components/empty/empty.vue +2 -7
  158. package/src/components/expression-editor/components/path-preview.vue +2 -6
  159. package/src/components/expression-editor/components/variable-picker.vue +1 -3
  160. package/src/components/expression-editor/expression-editor.vue +2 -6
  161. package/src/components/expression-editor/style.scss +1 -1
  162. package/src/components/file-picker/file-picker.vue +2 -7
  163. package/src/components/file-viewer/file-viewer.vue +4 -22
  164. package/src/components/file-viewer/previewers/pdf-previewer.vue +1 -5
  165. package/src/components/file-viewer/previewers/pdf-viewport-scroll.vue +1 -7
  166. package/src/components/file-viewer/previewers/pdf-zoom-bridge.vue +2 -7
  167. package/src/components/file-viewer/previewers/sheet-previewer.vue +4 -10
  168. package/src/components/float-button/float-button.vue +1 -3
  169. package/src/components/form/form.vue +3 -13
  170. package/src/components/gantt-chart/gantt-chart.vue +1 -3
  171. package/src/components/grid/grid-item.vue +3 -9
  172. package/src/components/grid/grid.vue +5 -18
  173. package/src/components/grid-input/grid-input.vue +2 -6
  174. package/src/components/group-input/group-input.vue +2 -7
  175. package/src/components/icon/icon.vue +2 -6
  176. package/src/components/input/input.vue +2 -6
  177. package/src/components/layout/layout-resizer.vue +1 -3
  178. package/src/components/layout/layout.vue +3 -9
  179. package/src/components/list/list-item.vue +1 -3
  180. package/src/components/list/list.vue +2 -6
  181. package/src/components/loading/loading.vue +3 -9
  182. package/src/components/menu/menu-icon.vue +2 -6
  183. package/src/components/menu/menu-sub-collapsed.vue +2 -8
  184. package/src/components/menu/menu.vue +3 -9
  185. package/src/components/menu/style.scss +1 -1
  186. package/src/components/message/message-box.vue +3 -10
  187. package/src/components/message/message.vue +3 -9
  188. package/src/components/message-confirm/message-confirm.vue +2 -6
  189. package/src/components/multi-select/multi-select-option.vue +3 -9
  190. package/src/components/notification/notification.vue +3 -11
  191. package/src/components/number/number.vue +4 -14
  192. package/src/components/number-input/number-input.vue +7 -36
  193. package/src/components/number-range-input/number-range-input.vue +4 -17
  194. package/src/components/paginator/paginator.vue +7 -22
  195. package/src/components/palette/palette-alpha.vue +2 -6
  196. package/src/components/palette/palette-color-switch.vue +1 -3
  197. package/src/components/palette/palette-hue.vue +2 -6
  198. package/src/components/palette/palette-sv.vue +5 -17
  199. package/src/components/palette/palette.vue +2 -12
  200. package/src/components/pop-confirm/pop-confirm.vue +2 -6
  201. package/src/components/progress/progress.vue +2 -7
  202. package/src/components/progress-nodes/progress-nodes.vue +2 -7
  203. package/src/components/radio/radio.vue +2 -6
  204. package/src/components/radio-group/radio-group.vue +1 -3
  205. package/src/components/scroll/scroll-bar.vue +5 -17
  206. package/src/components/scroll/scroll.vue +5 -16
  207. package/src/components/slider/slider-thumb.vue +4 -12
  208. package/src/components/slider/slider.vue +3 -14
  209. package/src/components/steps/steps.vue +3 -10
  210. package/src/components/switch/switch.vue +2 -7
  211. package/src/components/table/table-body.vue +2 -8
  212. package/src/components/table/table-cell.vue +2 -7
  213. package/src/components/table/table-foot.vue +2 -9
  214. package/src/components/table-editor/table-editor.vue +1 -3
  215. package/src/components/tabs/tabs-horizontal.vue +2 -6
  216. package/src/components/tabs/tabs-vertical.vue +1 -3
  217. package/src/components/tabs/tabs.vue +1 -3
  218. package/src/components/tag/tag.vue +2 -6
  219. package/src/components/text/text.vue +3 -9
  220. package/src/components/textarea/textarea.vue +1 -3
  221. package/src/components/theme/group-item.vue +1 -3
  222. package/src/components/theme/group.vue +1 -3
  223. package/src/components/theme/theme.vue +6 -26
  224. package/src/components/tip/tip.vue +1 -3
  225. package/src/components/tree/tree-node.vue +1 -3
  226. package/src/components/tree/tree.vue +7 -30
  227. package/src/components/watermark/watermark.vue +4 -15
@@ -1 +1 @@
1
- {"version":3,"file":"number-range-input.js","names":[],"sources":["../../../src/components/number-range-input/number-range-input.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" :class=\"className\">\n <u-number-input\n v-model=\"startModel\"\n :placeholder=\"startPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"emitChange\"\n />\n <span :class=\"cls.e('separator')\">{{ separator }}</span>\n <u-number-input\n v-model=\"endModel\"\n :placeholder=\"endPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"emitChange\"\n />\n </div>\n\n <template v-else>\n {{ readonlyText || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, $n, o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, nextTick, onMounted, watch } from 'vue'\n\nimport type { NumberRangeInputEmits, NumberRangeInputProps, NumberRangeTuple } from '../../types'\nimport { UNumberInput } from '../number-input'\n\ndefineOptions({\n name: 'NumberRangeInput'\n})\n\nconst props = withDefaults(defineProps<NumberRangeInputProps>(), {\n startPlaceholder: '请输入',\n endPlaceholder: '请输入',\n separator: '~',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<NumberRangeInputEmits>()\n\nconst inst = getCurrentInstance()\n\nfunction splitBound(): boolean {\n const p = inst?.vnode.props\n if (!p) return false\n return 'start' in p || 'onUpdate:start' in p || 'end' in p || 'onUpdate:end' in p\n}\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst cls = bem('number-range-input')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\nconst model = defineModel<NumberRangeTuple>({\n default: () => [undefined, undefined]\n})\n\nconst startRef = defineModel<number | undefined>('start')\nconst endRef = defineModel<number | undefined>('end')\n\nlet syncGuard = false\n\nfunction normalizeFromSplit(s: number | undefined, e: number | undefined): NumberRangeTuple {\n let nextS = s\n let nextE = e\n if (nextS !== undefined && nextE !== undefined && nextS > nextE) nextE = nextS\n return [nextS, nextE]\n}\n\nwatch(\n model,\n (t) => {\n if (syncGuard) return\n syncGuard = true\n const tuple = t ?? [undefined, undefined]\n if (startRef.value !== tuple[0]) startRef.value = tuple[0]\n if (endRef.value !== tuple[1]) endRef.value = tuple[1]\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nwatch(\n [startRef, endRef],\n () => {\n if (!splitBound() || syncGuard) return\n syncGuard = true\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n const cur = model.value ?? [undefined, undefined]\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n model.value = normalized\n }\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nonMounted(() => {\n if (!splitBound()) return\n const cur = model.value ?? [undefined, undefined]\n const hasModel = cur[0] !== undefined || cur[1] !== undefined\n if (hasModel) return\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n syncGuard = true\n model.value = normalized\n nextTick(() => {\n syncGuard = false\n })\n }\n})\n\nconst numberInputBind = computed(() => {\n return o(props).pick([\n 'clearable',\n 'prefix',\n 'suffix',\n 'step',\n 'min',\n 'max',\n 'currency',\n 'precision',\n 'minPrecision',\n 'maxPrecision',\n 'multiple'\n ])\n})\n\nconst startModel = computed({\n get(): number | undefined {\n return model.value?.[0]\n },\n set(v: number | undefined) {\n const cur = model.value ?? [undefined, undefined]\n const end = cur[1]\n let nextEnd = end\n if (v !== undefined && end !== undefined && v > end) nextEnd = v\n model.value = [v, nextEnd]\n }\n})\n\nconst endModel = computed({\n get(): number | undefined {\n return model.value?.[1]\n },\n set(v: number | undefined) {\n const cur = model.value ?? [undefined, undefined]\n const start = cur[0]\n let nextStart = start\n if (v !== undefined && start !== undefined && v < start) nextStart = v\n model.value = [nextStart, v]\n }\n})\n\nfunction formatNumberPart(num: number): string {\n const { currency, precision, minPrecision, maxPrecision, multiple } = props\n\n const displayValue = multiple ? $n.div(num, multiple) : num\n\n return currency\n ? n(displayValue).currency('CNY', {\n precision,\n minPrecision,\n maxPrecision\n })\n : n(displayValue).fixed(\n precision ?? {\n minPrecision,\n maxPrecision\n }\n )\n}\n\nconst readonlyText = computed(() => {\n const [s, e] = model.value ?? [undefined, undefined]\n if (s === undefined && e === undefined) return ''\n const p = props.prefix ?? ''\n const sfx = props.suffix ?? ''\n const sep = props.separator ?? '~'\n const a = s === undefined ? '—' : formatNumberPart(s)\n const b = e === undefined ? '—' : formatNumberPart(e)\n return `${p}${a} ${sep} ${b}${sfx}`\n})\n\nfunction emitChange(): void {\n emit('change', model.value ?? [undefined, undefined])\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"number-range-input.js","names":[],"sources":["../../../src/components/number-range-input/number-range-input.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" :class=\"className\">\n <u-number-input\n v-model=\"startModel\"\n :placeholder=\"startPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"emitChange\"\n />\n <span :class=\"cls.e('separator')\">{{ separator }}</span>\n <u-number-input\n v-model=\"endModel\"\n :placeholder=\"endPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"emitChange\"\n />\n </div>\n\n <template v-else>\n {{ readonlyText || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, $n, o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, nextTick, onMounted, watch } from 'vue'\n\nimport type { NumberRangeInputEmits, NumberRangeInputProps, NumberRangeTuple } from '../../types'\nimport { UNumberInput } from '../number-input'\n\ndefineOptions({ name: 'NumberRangeInput' })\n\nconst props = withDefaults(defineProps<NumberRangeInputProps>(), {\n startPlaceholder: '请输入',\n endPlaceholder: '请输入',\n separator: '~',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<NumberRangeInputEmits>()\n\nconst inst = getCurrentInstance()\n\nfunction splitBound(): boolean {\n const p = inst?.vnode.props\n if (!p) return false\n return 'start' in p || 'onUpdate:start' in p || 'end' in p || 'onUpdate:end' in p\n}\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst cls = bem('number-range-input')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\nconst model = defineModel<NumberRangeTuple>({ default: () => [undefined, undefined] })\n\nconst startRef = defineModel<number | undefined>('start')\nconst endRef = defineModel<number | undefined>('end')\n\nlet syncGuard = false\n\nfunction normalizeFromSplit(s: number | undefined, e: number | undefined): NumberRangeTuple {\n let nextS = s\n let nextE = e\n if (nextS !== undefined && nextE !== undefined && nextS > nextE) nextE = nextS\n return [nextS, nextE]\n}\n\nwatch(\n model,\n (t) => {\n if (syncGuard) return\n syncGuard = true\n const tuple = t ?? [undefined, undefined]\n if (startRef.value !== tuple[0]) startRef.value = tuple[0]\n if (endRef.value !== tuple[1]) endRef.value = tuple[1]\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nwatch(\n [startRef, endRef],\n () => {\n if (!splitBound() || syncGuard) return\n syncGuard = true\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n const cur = model.value ?? [undefined, undefined]\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n model.value = normalized\n }\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nonMounted(() => {\n if (!splitBound()) return\n const cur = model.value ?? [undefined, undefined]\n const hasModel = cur[0] !== undefined || cur[1] !== undefined\n if (hasModel) return\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n syncGuard = true\n model.value = normalized\n nextTick(() => {\n syncGuard = false\n })\n }\n})\n\nconst numberInputBind = computed(() => {\n return o(props).pick([\n 'clearable',\n 'prefix',\n 'suffix',\n 'step',\n 'min',\n 'max',\n 'currency',\n 'precision',\n 'minPrecision',\n 'maxPrecision',\n 'multiple'\n ])\n})\n\nconst startModel = computed({\n get(): number | undefined {\n return model.value?.[0]\n },\n set(v: number | undefined) {\n const cur = model.value ?? [undefined, undefined]\n const end = cur[1]\n let nextEnd = end\n if (v !== undefined && end !== undefined && v > end) nextEnd = v\n model.value = [v, nextEnd]\n }\n})\n\nconst endModel = computed({\n get(): number | undefined {\n return model.value?.[1]\n },\n set(v: number | undefined) {\n const cur = model.value ?? [undefined, undefined]\n const start = cur[0]\n let nextStart = start\n if (v !== undefined && start !== undefined && v < start) nextStart = v\n model.value = [nextStart, v]\n }\n})\n\nfunction formatNumberPart(num: number): string {\n const { currency, precision, minPrecision, maxPrecision, multiple } = props\n\n const displayValue = multiple ? $n.div(num, multiple) : num\n\n return currency\n ? n(displayValue).currency('CNY', { precision, minPrecision, maxPrecision })\n : n(displayValue).fixed(precision ?? { minPrecision, maxPrecision })\n}\n\nconst readonlyText = computed(() => {\n const [s, e] = model.value ?? [undefined, undefined]\n if (s === undefined && e === undefined) return ''\n const p = props.prefix ?? ''\n const sfx = props.suffix ?? ''\n const sep = props.separator ?? '~'\n const a = s === undefined ? '—' : formatNumberPart(s)\n const b = e === undefined ? '—' : formatNumberPart(e)\n return `${p}${a} ${sep} ${b}${sfx}`\n})\n\nfunction emitChange(): void {\n emit('change', model.value ?? [undefined, undefined])\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"paginator.js","names":[],"sources":["../../../src/components/paginator/paginator.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, cls.m(size)]\" ref=\"paginatorRef\">\n <div>共 {{ total }} 条</div>\n\n <u-select\n :class=\"cls.e('size-select')\"\n v-model=\"pageSize\"\n size=\"small\"\n :options=\"sizeOptions\"\n :clearable=\"false\"\n @change=\"handleChangePageSize\"\n />\n\n <ul :class=\"[cls.e('pages')]\" v-if=\"!simple\">\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', preDisabled)]\"\n @click=\"handleJumpToFirst\"\n @mouseenter=\"hovered.first = true\"\n @mouseleave=\"hovered.first = false\"\n v-ripple=\"!preDisabled\"\n >\n <span v-if=\"hovered.first\">1</span>\n <UIcon v-else><DArrowLeft /></UIcon>\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', pageNumber === 1)]\"\n @click=\"handleJumpToPrev\"\n v-ripple=\"!preDisabled\"\n >\n <UIcon><ArrowLeft /></UIcon>\n </li>\n\n <li\n v-for=\"num in pageNumbers\"\n :key=\"num\"\n :class=\"[cls.e('btn'), bem.is('active', pageNumber === num)]\"\n @click=\"handleChangePageNumber(num)\"\n v-ripple\n >\n {{ num }}\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToNext\"\n v-ripple=\"!nextDisabled\"\n >\n <UIcon><ArrowRight /></UIcon>\n </li>\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToLast\"\n @mouseenter=\"hovered.last = true\"\n @mouseleave=\"hovered.last = false\"\n v-ripple=\"!nextDisabled\"\n >\n <span v-if=\"hovered.last\">{{ totalPages }}</span>\n <UIcon v-else><DArrowRight /></UIcon>\n </li>\n </ul>\n\n <div :class=\"cls.e('jumper')\">\n <span>前往</span>\n <u-number-input\n :class=\"cls.e('page-input')\"\n size=\"small\"\n :min=\"1\"\n :max=\"totalPages\"\n :precision=\"0\"\n :model-value=\"pageNumber\"\n :clearable=\"false\"\n @keyup.enter=\"handleKeyEnter\"\n @change=\"pageNumber = $event!\"\n />\n <span>/ {{ totalPages }}</span>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { useConfig, useFallbackProps } from '@veltra/compositions'\nimport { vRipple } from '@veltra/directives'\nimport { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, reactive, shallowRef } from 'vue'\n\nimport type { PaginatorProps, PaginatorEmits, _PaginatorExposed, ComponentSize } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNumberInput } from '../number-input'\nimport { USelect } from '../select'\n\ndefineOptions({\n name: 'Paginator'\n})\n\nconst { config } = useConfig()\n\nconst props = withDefaults(defineProps<PaginatorProps>(), {\n total: 0\n})\n\nconst emit = defineEmits<PaginatorEmits>()\n\nconst cls = bem('paginator')\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst pageNumber = defineModel<number>('pageNumber', {\n default: 1\n})\n\nconst pageSize = defineModel<number>('pageSize', {\n default: 10\n})\n\nfunction emitPageSize(value: number) {\n emit('change:pageSize', value)\n}\n\nfunction emitPageNumber(value: number) {\n emit('change:pageNumber', value)\n}\n\nconst handleChangePageSize = (size?: Record<string, any>) => {\n emitPageSize(size?.value)\n pageNumber.value = 1\n}\n\nfunction handleChangePageNumber(num: number) {\n if (props.pageNumber === num) return\n pageNumber.value = num\n emitPageNumber(pageNumber.value)\n}\n\nconst currentSize = computed(() => {\n return props.pageSize ?? config.paginator.pageSize\n})\n\n/** 完整页码 */\nconst totalPages = computed(() => {\n return Math.ceil(props.total / currentSize.value)\n})\n\nconst sizeOptions = computed(() => {\n return (props.pageSizeOptions ?? config.paginator.pageSizeOptions).map((value) => {\n return { label: `${value}条`, value }\n })\n})\n\n/** 做多显示5个页码 */\nconst pageNumbers = computed(() => {\n const startPageNum = n(pageNumber.value - 2).range(1, Math.max(totalPages.value - 4, 1))\n\n return Array.from({ length: Math.min(totalPages.value, 5) }).map(\n (_, index) => startPageNum + index\n )\n})\n\nconst preDisabled = computed(() => {\n return pageNumber.value <= 1\n})\nconst nextDisabled = computed(() => {\n return pageNumber.value >= totalPages.value\n})\n\nfunction handleJumpToFirst() {\n if (preDisabled.value) return\n pageNumber.value = 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToLast() {\n if (nextDisabled.value) return\n pageNumber.value = totalPages.value\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToPrev() {\n if (preDisabled.value) return\n pageNumber.value = pageNumber.value - 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToNext() {\n if (nextDisabled.value) return\n\n pageNumber.value = pageNumber.value + 1\n emitPageNumber(pageNumber.value)\n}\n\nfunction handleKeyEnter(e: KeyboardEvent) {\n const target = e.target as HTMLInputElement\n const val = +target.value\n if (!isNaN(val) && val > 0 && val <= totalPages.value) {\n pageNumber.value = val\n emitPageNumber(pageNumber.value)\n }\n}\n\n/** 鼠标停留位置 */\nconst hovered = reactive({\n first: false,\n last: false\n})\n\nconst paginatorRef = shallowRef<HTMLElement>()\n\ndefineExpose<_PaginatorExposed>({\n el: paginatorRef\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"paginator.js","names":[],"sources":["../../../src/components/paginator/paginator.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, cls.m(size)]\" ref=\"paginatorRef\">\n <div>共 {{ total }} 条</div>\n\n <u-select\n :class=\"cls.e('size-select')\"\n v-model=\"pageSize\"\n size=\"small\"\n :options=\"sizeOptions\"\n :clearable=\"false\"\n @change=\"handleChangePageSize\"\n />\n\n <ul :class=\"[cls.e('pages')]\" v-if=\"!simple\">\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', preDisabled)]\"\n @click=\"handleJumpToFirst\"\n @mouseenter=\"hovered.first = true\"\n @mouseleave=\"hovered.first = false\"\n v-ripple=\"!preDisabled\"\n >\n <span v-if=\"hovered.first\">1</span>\n <UIcon v-else><DArrowLeft /></UIcon>\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', pageNumber === 1)]\"\n @click=\"handleJumpToPrev\"\n v-ripple=\"!preDisabled\"\n >\n <UIcon><ArrowLeft /></UIcon>\n </li>\n\n <li\n v-for=\"num in pageNumbers\"\n :key=\"num\"\n :class=\"[cls.e('btn'), bem.is('active', pageNumber === num)]\"\n @click=\"handleChangePageNumber(num)\"\n v-ripple\n >\n {{ num }}\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToNext\"\n v-ripple=\"!nextDisabled\"\n >\n <UIcon><ArrowRight /></UIcon>\n </li>\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToLast\"\n @mouseenter=\"hovered.last = true\"\n @mouseleave=\"hovered.last = false\"\n v-ripple=\"!nextDisabled\"\n >\n <span v-if=\"hovered.last\">{{ totalPages }}</span>\n <UIcon v-else><DArrowRight /></UIcon>\n </li>\n </ul>\n\n <div :class=\"cls.e('jumper')\">\n <span>前往</span>\n <u-number-input\n :class=\"cls.e('page-input')\"\n size=\"small\"\n :min=\"1\"\n :max=\"totalPages\"\n :precision=\"0\"\n :model-value=\"pageNumber\"\n :clearable=\"false\"\n @keyup.enter=\"handleKeyEnter\"\n @change=\"pageNumber = $event!\"\n />\n <span>/ {{ totalPages }}</span>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { useConfig, useFallbackProps } from '@veltra/compositions'\nimport { vRipple } from '@veltra/directives'\nimport { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, reactive, shallowRef } from 'vue'\n\nimport type { PaginatorProps, PaginatorEmits, _PaginatorExposed, ComponentSize } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNumberInput } from '../number-input'\nimport { USelect } from '../select'\n\ndefineOptions({ name: 'Paginator' })\n\nconst { config } = useConfig()\n\nconst props = withDefaults(defineProps<PaginatorProps>(), { total: 0 })\n\nconst emit = defineEmits<PaginatorEmits>()\n\nconst cls = bem('paginator')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst pageNumber = defineModel<number>('pageNumber', { default: 1 })\n\nconst pageSize = defineModel<number>('pageSize', { default: 10 })\n\nfunction emitPageSize(value: number) {\n emit('change:pageSize', value)\n}\n\nfunction emitPageNumber(value: number) {\n emit('change:pageNumber', value)\n}\n\nconst handleChangePageSize = (size?: Record<string, any>) => {\n emitPageSize(size?.value)\n pageNumber.value = 1\n}\n\nfunction handleChangePageNumber(num: number) {\n if (props.pageNumber === num) return\n pageNumber.value = num\n emitPageNumber(pageNumber.value)\n}\n\nconst currentSize = computed(() => {\n return props.pageSize ?? config.paginator.pageSize\n})\n\n/** 完整页码 */\nconst totalPages = computed(() => {\n return Math.ceil(props.total / currentSize.value)\n})\n\nconst sizeOptions = computed(() => {\n return (props.pageSizeOptions ?? config.paginator.pageSizeOptions).map((value) => {\n return { label: `${value}条`, value }\n })\n})\n\n/** 做多显示5个页码 */\nconst pageNumbers = computed(() => {\n const startPageNum = n(pageNumber.value - 2).range(1, Math.max(totalPages.value - 4, 1))\n\n return Array.from({ length: Math.min(totalPages.value, 5) }).map(\n (_, index) => startPageNum + index\n )\n})\n\nconst preDisabled = computed(() => {\n return pageNumber.value <= 1\n})\nconst nextDisabled = computed(() => {\n return pageNumber.value >= totalPages.value\n})\n\nfunction handleJumpToFirst() {\n if (preDisabled.value) return\n pageNumber.value = 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToLast() {\n if (nextDisabled.value) return\n pageNumber.value = totalPages.value\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToPrev() {\n if (preDisabled.value) return\n pageNumber.value = pageNumber.value - 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToNext() {\n if (nextDisabled.value) return\n\n pageNumber.value = pageNumber.value + 1\n emitPageNumber(pageNumber.value)\n}\n\nfunction handleKeyEnter(e: KeyboardEvent) {\n const target = e.target as HTMLInputElement\n const val = +target.value\n if (!isNaN(val) && val > 0 && val <= totalPages.value) {\n pageNumber.value = val\n emitPageNumber(pageNumber.value)\n }\n}\n\n/** 鼠标停留位置 */\nconst hovered = reactive({ first: false, last: false })\n\nconst paginatorRef = shallowRef<HTMLElement>()\n\ndefineExpose<_PaginatorExposed>({ el: paginatorRef })\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-alpha.js","names":[],"sources":["../../../src/components/palette/palette-alpha.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('alpha')\" ref=\"alphaRef\">\n <div :class=\"cls.e('alpha-bg')\" :style=\"{ background: alphaSliderBG }\"></div>\n\n <span :class=\"cls.e('alpha-thumb')\" @click.stop :style=\"alphaThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, shallowRef, onMounted, watch } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({\n name: 'PaletteAlpha'\n})\n\nconst { cls, updateAlpha, hueRGB, alpha, userAction, isUserActive } = inject(PaletteDIKey)!\n\nconst alphaRef = shallowRef<HTMLElement>()\n\nconst alphaThumbTransformX = shallowRef(0)\n\nconst alphaThumbStyle = computed(() => {\n return { transform: `translateX(${alphaThumbTransformX.value}px)` }\n})\n\nlet alphaWidth = 0\nconst rangeX = [0, 0] as [number, number]\n\nfunction getAlphaWidth() {\n alphaWidth = alphaRef.value?.offsetWidth ?? 0\n rangeX[1] = alphaWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n alphaThumbTransformX.value = offsetX\n updateAlpha(alphaWidth > 0 ? offsetX / alphaWidth : 0)\n})\n\nconst alphaDragger = useDrag({\n target: alphaRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getAlphaWidth()\n\n alphaDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nconst alphaSliderBG = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0), rgba(${r}, ${g}, ${b}, 1))`\n})\n\nfunction init(): void {\n getAlphaWidth()\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * alpha.value : 0\n}\n\nonMounted(() => {\n init()\n})\n\nwatch(\n alpha,\n (newAlphaValue) => {\n if (isUserActive()) return\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * newAlphaValue : 0\n },\n { flush: 'post' }\n)\n\ndefineExpose({\n init\n})\n</script>\n"],"mappings":";;;;;;;;EAkBA,MAAM,EAAE,KAAK,aAAa,QAAQ,OAAO,YAAY,iBAAiB,OAAO,aAAY;EAEzF,MAAM,WAAW,YAAwB;EAEzC,MAAM,uBAAuB,WAAW,EAAC;EAEzC,MAAM,kBAAkB,eAAe;GACrC,OAAO,EAAE,WAAW,cAAc,qBAAqB,MAAM,MAAK;IACnE;EAED,IAAI,aAAa;EACjB,MAAM,SAAS,CAAC,GAAG,EAAC;EAEpB,SAAS,gBAAgB;GACvB,aAAa,SAAS,OAAO,eAAe;GAC5C,OAAO,KAAK;;EAGd,MAAM,gBAAgB,YAAY,YAAoB;GACpD,qBAAqB,QAAQ;GAC7B,YAAY,aAAa,IAAI,UAAU,aAAa,EAAC;IACtD;EAED,MAAM,eAAe,QAAQ;GAC3B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,QAAO;;GAEvB,YAAY,GAAG;IACb,eAAc;IAEd,aAAa,OAAO,EAAE,SAAS,EAAE,SAAS,CAAA;IAE1C,cAAc,EAAE,QAAO;;GAE1B,CAAA;EAED,MAAM,gBAAgB,eAAe;GACnC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,kCAAkC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IACnF;EAED,SAAS,OAAa;GACpB,eAAc;GACd,qBAAqB,QAAQ,aAAa,IAAI,aAAa,MAAM,QAAQ;;EAG3E,gBAAgB;GACd,MAAK;IACN;EAED,MACE,QACC,kBAAkB;GACjB,IAAI,cAAa,EAAG;GACpB,qBAAqB,QAAQ,aAAa,IAAI,aAAa,gBAAgB;KAE7E,EAAE,OAAO,QACX,CAAA;EAEA,SAAa,EACX,MACD,CAAA;;uBAhFC,mBAIM,OAAA;IAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;aAAe;IAAJ,KAAI;OAC/B,mBAA6E,OAAA;IAAvE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;IAAe,OAAK,eAAA,EAAA,YAAgB,cAAA,OAAa,CAAA;gBAEnE,mBAAgF,QAAA;IAAzE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;IAAkB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;IAAE,OAAK,eAAE,gBAAA,MAAe"}
1
+ {"version":3,"file":"palette-alpha.js","names":[],"sources":["../../../src/components/palette/palette-alpha.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('alpha')\" ref=\"alphaRef\">\n <div :class=\"cls.e('alpha-bg')\" :style=\"{ background: alphaSliderBG }\"></div>\n\n <span :class=\"cls.e('alpha-thumb')\" @click.stop :style=\"alphaThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, shallowRef, onMounted, watch } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'PaletteAlpha' })\n\nconst { cls, updateAlpha, hueRGB, alpha, userAction, isUserActive } = inject(PaletteDIKey)!\n\nconst alphaRef = shallowRef<HTMLElement>()\n\nconst alphaThumbTransformX = shallowRef(0)\n\nconst alphaThumbStyle = computed(() => {\n return { transform: `translateX(${alphaThumbTransformX.value}px)` }\n})\n\nlet alphaWidth = 0\nconst rangeX = [0, 0] as [number, number]\n\nfunction getAlphaWidth() {\n alphaWidth = alphaRef.value?.offsetWidth ?? 0\n rangeX[1] = alphaWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n alphaThumbTransformX.value = offsetX\n updateAlpha(alphaWidth > 0 ? offsetX / alphaWidth : 0)\n})\n\nconst alphaDragger = useDrag({\n target: alphaRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getAlphaWidth()\n\n alphaDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nconst alphaSliderBG = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0), rgba(${r}, ${g}, ${b}, 1))`\n})\n\nfunction init(): void {\n getAlphaWidth()\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * alpha.value : 0\n}\n\nonMounted(() => {\n init()\n})\n\nwatch(\n alpha,\n (newAlphaValue) => {\n if (isUserActive()) return\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * newAlphaValue : 0\n },\n { flush: 'post' }\n)\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAgBA,MAAM,EAAE,KAAK,aAAa,QAAQ,OAAO,YAAY,iBAAiB,OAAO,aAAY;EAEzF,MAAM,WAAW,YAAwB;EAEzC,MAAM,uBAAuB,WAAW,EAAC;EAEzC,MAAM,kBAAkB,eAAe;GACrC,OAAO,EAAE,WAAW,cAAc,qBAAqB,MAAM,MAAK;IACnE;EAED,IAAI,aAAa;EACjB,MAAM,SAAS,CAAC,GAAG,EAAC;EAEpB,SAAS,gBAAgB;GACvB,aAAa,SAAS,OAAO,eAAe;GAC5C,OAAO,KAAK;;EAGd,MAAM,gBAAgB,YAAY,YAAoB;GACpD,qBAAqB,QAAQ;GAC7B,YAAY,aAAa,IAAI,UAAU,aAAa,EAAC;IACtD;EAED,MAAM,eAAe,QAAQ;GAC3B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,QAAO;;GAEvB,YAAY,GAAG;IACb,eAAc;IAEd,aAAa,OAAO,EAAE,SAAS,EAAE,SAAS,CAAA;IAE1C,cAAc,EAAE,QAAO;;GAE1B,CAAA;EAED,MAAM,gBAAgB,eAAe;GACnC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,kCAAkC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IACnF;EAED,SAAS,OAAa;GACpB,eAAc;GACd,qBAAqB,QAAQ,aAAa,IAAI,aAAa,MAAM,QAAQ;;EAG3E,gBAAgB;GACd,MAAK;IACN;EAED,MACE,QACC,kBAAkB;GACjB,IAAI,cAAa,EAAG;GACpB,qBAAqB,QAAQ,aAAa,IAAI,aAAa,gBAAgB;KAE7E,EAAE,OAAO,QACX,CAAA;EAEA,SAAa,EAAE,MAAM,CAAA;;uBA5EnB,mBAIM,OAAA;IAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;aAAe;IAAJ,KAAI;OAC/B,mBAA6E,OAAA;IAAvE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;IAAe,OAAK,eAAA,EAAA,YAAgB,cAAA,OAAa,CAAA;gBAEnE,mBAAgF,QAAA;IAAzE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;IAAkB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;IAAE,OAAK,eAAE,gBAAA,MAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-color-switch.js","names":[],"sources":["../../../src/components/palette/palette-color-switch.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('color-switch')\">\n <div :class=\"cls.e('color-type')\">HEX(A)</div>\n\n <u-input\n :class=\"cls.e('color-hexa')\"\n :clearable=\"false\"\n :model-value=\"color\"\n @change=\"handleUpdateColor\"\n :pattern=\"pattern\"\n />\n\n <u-button text type=\"primary\" :class=\"cls.e('clear-btn')\" @click=\"emit('clear')\">\n 清除\n </u-button>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject } from 'vue'\n\nimport { UButton } from '../button'\nimport { UInput } from '../input'\nimport { PaletteDIKey } from './di'\n\ndefineProps<{\n color?: string\n}>()\n\nconst emit = defineEmits(['clear', 'update:color'])\n\nconst { cls } = inject(PaletteDIKey)!\n\nconst pattern = /^#([0-9a-fA-F]{3,4}){1,2}$/\n\nconst handleUpdateColor = (value: string) => {\n emit('update:color', value)\n}\n</script>\n"],"mappings":";;;;;;;;;;EA6BA,MAAM,OAAO;EAEb,MAAM,EAAE,QAAQ,OAAO,aAAY;EAEnC,MAAM,UAAU;EAEhB,MAAM,qBAAqB,UAAkB;GAC3C,KAAK,gBAAgB,MAAK;;;uBAnC1B,mBAcM,OAAA,EAdA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,eAAA,CAAA,EAAA,EAAA;IAChB,mBAA8C,OAAA,EAAxC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,aAAA,CAAA,EAAA,EAAgB,UAAM,EAAA;IAExC,YAME,MAAA,cAAA,EAAA;KALC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,aAAA,CAAA;KACZ,WAAW;KACX,eAAa,QAAA;KACb,UAAQ;KACC;;IAGZ,YAEW,MAAA,YAAA,EAAA;KAFD,MAAA;KAAK,MAAK;KAAW,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,YAAA,CAAA;KAAgB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;;4BAEtE,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFiF,QAEjF,GAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"palette-color-switch.js","names":[],"sources":["../../../src/components/palette/palette-color-switch.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('color-switch')\">\n <div :class=\"cls.e('color-type')\">HEX(A)</div>\n\n <u-input\n :class=\"cls.e('color-hexa')\"\n :clearable=\"false\"\n :model-value=\"color\"\n @change=\"handleUpdateColor\"\n :pattern=\"pattern\"\n />\n\n <u-button text type=\"primary\" :class=\"cls.e('clear-btn')\" @click=\"emit('clear')\">\n 清除\n </u-button>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject } from 'vue'\n\nimport { UButton } from '../button'\nimport { UInput } from '../input'\nimport { PaletteDIKey } from './di'\n\ndefineProps<{ color?: string }>()\n\nconst emit = defineEmits(['clear', 'update:color'])\n\nconst { cls } = inject(PaletteDIKey)!\n\nconst pattern = /^#([0-9a-fA-F]{3,4}){1,2}$/\n\nconst handleUpdateColor = (value: string) => {\n emit('update:color', value)\n}\n</script>\n"],"mappings":";;;;;;;;;;EA2BA,MAAM,OAAO;EAEb,MAAM,EAAE,QAAQ,OAAO,aAAY;EAEnC,MAAM,UAAU;EAEhB,MAAM,qBAAqB,UAAkB;GAC3C,KAAK,gBAAgB,MAAK;;;uBAjC1B,mBAcM,OAAA,EAdA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,eAAA,CAAA,EAAA,EAAA;IAChB,mBAA8C,OAAA,EAAxC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,aAAA,CAAA,EAAA,EAAgB,UAAM,EAAA;IAExC,YAME,MAAA,cAAA,EAAA;KALC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,aAAA,CAAA;KACZ,WAAW;KACX,eAAa,QAAA;KACb,UAAQ;KACC;;IAGZ,YAEW,MAAA,YAAA,EAAA;KAFD,MAAA;KAAK,MAAK;KAAW,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,YAAA,CAAA;KAAgB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,QAAA;;4BAEtE,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFiF,QAEjF,GAAA,CAAA,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-hue.js","names":[],"sources":["../../../src/components/palette/palette-hue.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('hue')\" ref=\"hueRef\">\n <span :class=\"cls.e('hue-thumb')\" @click.stop :style=\"hueThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { inject, onMounted } from 'vue'\nimport { shallowRef, computed } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({\n name: 'PaletteHue'\n})\n\nconst { cls, updateHue, HSV, userAction } = inject(PaletteDIKey)!\n\nconst hueRef = shallowRef<HTMLElement>()\n\nconst transformX = shallowRef(0)\nlet sliderWidth = 0\n\nconst hueThumbStyle = computed(() => {\n return { transform: `translateX(${transformX.value}px)` }\n})\n\nconst rangeX = [0, 0] as [number, number]\n\nfunction getSliderWidth() {\n sliderWidth = hueRef.value?.offsetWidth ?? 0\n rangeX[1] = sliderWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n transformX.value = offsetX\n updateHue(Math.round((offsetX / sliderWidth) * 360))\n})\n\nconst sliderDragger = useDrag({\n target: hueRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getSliderWidth()\n\n sliderDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nfunction init(): void {\n getSliderWidth()\n transformX.value = (sliderWidth * HSV.h) / 360\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({\n init\n})\n</script>\n"],"mappings":";;;;;;;;EAiBA,MAAM,EAAE,KAAK,WAAW,KAAK,eAAe,OAAO,aAAY;EAE/D,MAAM,SAAS,YAAwB;EAEvC,MAAM,aAAa,WAAW,EAAC;EAC/B,IAAI,cAAc;EAElB,MAAM,gBAAgB,eAAe;GACnC,OAAO,EAAE,WAAW,cAAc,WAAW,MAAM,MAAK;IACzD;EAED,MAAM,SAAS,CAAC,GAAG,EAAC;EAEpB,SAAS,iBAAiB;GACxB,cAAc,OAAO,OAAO,eAAe;GAC3C,OAAO,KAAK;;EAGd,MAAM,gBAAgB,YAAY,YAAoB;GACpD,WAAW,QAAQ;GACnB,UAAU,KAAK,MAAO,UAAU,cAAe,IAAI,CAAA;IACpD;EAED,MAAM,gBAAgB,QAAQ;GAC5B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,QAAO;;GAEvB,YAAY,GAAG;IACb,gBAAe;IAEf,cAAc,OAAO,EAAE,SAAS,EAAE,SAAS,CAAA;IAE3C,cAAc,EAAE,QAAO;;GAE1B,CAAA;EAED,SAAS,OAAa;GACpB,gBAAe;GACf,WAAW,QAAS,cAAc,IAAI,IAAK;;EAG7C,gBAAgB;GACd,MAAK;IACN;EAED,SAAa,EACX,MACD,CAAA;;uBAjEC,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,MAAA,CAAA;aAAa;IAAJ,KAAI;OAC7B,mBAA4E,QAAA;IAArE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,YAAA,CAAA;IAAgB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;IAAE,OAAK,eAAE,cAAA,MAAa"}
1
+ {"version":3,"file":"palette-hue.js","names":[],"sources":["../../../src/components/palette/palette-hue.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('hue')\" ref=\"hueRef\">\n <span :class=\"cls.e('hue-thumb')\" @click.stop :style=\"hueThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { inject, onMounted } from 'vue'\nimport { shallowRef, computed } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'PaletteHue' })\n\nconst { cls, updateHue, HSV, userAction } = inject(PaletteDIKey)!\n\nconst hueRef = shallowRef<HTMLElement>()\n\nconst transformX = shallowRef(0)\nlet sliderWidth = 0\n\nconst hueThumbStyle = computed(() => {\n return { transform: `translateX(${transformX.value}px)` }\n})\n\nconst rangeX = [0, 0] as [number, number]\n\nfunction getSliderWidth() {\n sliderWidth = hueRef.value?.offsetWidth ?? 0\n rangeX[1] = sliderWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n transformX.value = offsetX\n updateHue(Math.round((offsetX / sliderWidth) * 360))\n})\n\nconst sliderDragger = useDrag({\n target: hueRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getSliderWidth()\n\n sliderDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nfunction init(): void {\n getSliderWidth()\n transformX.value = (sliderWidth * HSV.h) / 360\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAeA,MAAM,EAAE,KAAK,WAAW,KAAK,eAAe,OAAO,aAAY;EAE/D,MAAM,SAAS,YAAwB;EAEvC,MAAM,aAAa,WAAW,EAAC;EAC/B,IAAI,cAAc;EAElB,MAAM,gBAAgB,eAAe;GACnC,OAAO,EAAE,WAAW,cAAc,WAAW,MAAM,MAAK;IACzD;EAED,MAAM,SAAS,CAAC,GAAG,EAAC;EAEpB,SAAS,iBAAiB;GACxB,cAAc,OAAO,OAAO,eAAe;GAC3C,OAAO,KAAK;;EAGd,MAAM,gBAAgB,YAAY,YAAoB;GACpD,WAAW,QAAQ;GACnB,UAAU,KAAK,MAAO,UAAU,cAAe,IAAI,CAAA;IACpD;EAED,MAAM,gBAAgB,QAAQ;GAC5B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,QAAO;;GAEvB,YAAY,GAAG;IACb,gBAAe;IAEf,cAAc,OAAO,EAAE,SAAS,EAAE,SAAS,CAAA;IAE3C,cAAc,EAAE,QAAO;;GAE1B,CAAA;EAED,SAAS,OAAa;GACpB,gBAAe;GACf,WAAW,QAAS,cAAc,IAAI,IAAK;;EAG7C,gBAAgB;GACd,MAAK;IACN;EAED,SAAa,EAAE,MAAM,CAAA;;uBA7DnB,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,MAAA,CAAA;aAAa;IAAJ,KAAI;OAC7B,mBAA4E,QAAA;IAArE,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,YAAA,CAAA;IAAgB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;IAAE,OAAK,eAAE,cAAA,MAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-sv.js","names":[],"sources":["../../../src/components/palette/palette-sv.vue"],"sourcesContent":["<template>\n <!-- 调色画布 -->\n <div :class=\"cls.e('sv')\" ref=\"svRef\">\n <div :class=\"cls.e('sv-s')\" :style=\"{ backgroundImage: canvasBackground }\"></div>\n <div :class=\"cls.e('sv-v')\">{{}}</div>\n\n <div\n :class=\"cls.e('sv-thumb')\"\n ref=\"svThumbRef\"\n @click.stop\n @mousedown.stop\n :style=\"svThumbStyle\"\n ></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, reactive, shallowRef, onMounted } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({\n name: 'PaletteSV'\n})\n\nconst { cls, hueRGB, HSV, updateSV, userAction } = inject(PaletteDIKey)!\n\nconst svRef = shallowRef<HTMLDivElement>()\n\nconst canvasSize = {\n width: 0,\n height: 0\n}\n\nconst rangeX = [0, 0] as [number, number]\nconst rangeY = [0, 0] as [number, number]\n\nconst getCanvasSize = () => {\n if (!svRef.value) return\n const { offsetHeight, offsetWidth } = svRef.value!\n\n canvasSize.width = offsetWidth\n rangeX[1] = offsetWidth\n\n canvasSize.height = offsetHeight\n rangeY[1] = offsetHeight\n}\n\nconst transform = reactive({\n x: 0,\n y: 0\n})\n\nconst svThumbStyle = computed(() => {\n return {\n transform: `translate(${transform.x}px, ${transform.y}px)`\n }\n})\n\nconst updateThumb = userAction((offsetX: number, offsetY: number) => {\n transform.x = offsetX\n transform.y = offsetY\n\n // 根据画布位置计算饱和度和亮度\n // 水平方向表示饱和度,从左到右饱和度逐渐增高\n // 垂直方向表示亮度,上亮下暗\n const s = Math.max(0, Math.min(1, offsetX / canvasSize.width))\n const v = Math.max(0, Math.min(1, 1 - offsetY / canvasSize.height))\n\n // 更新饱和度和亮度\n updateSV({ s, v })\n})\n\nconst svDragger = useDrag({\n target: svRef,\n rangeX,\n rangeY,\n\n onDrag({ offsetX, offsetY }) {\n updateThumb(offsetX, offsetY)\n },\n onDragStart(e) {\n getCanvasSize()\n\n const { offsetX, offsetY } = e\n\n updateThumb(offsetX, offsetY)\n\n svDragger.update({ offsetX, offsetY })\n }\n})\n\nconst canvasBackground = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgb(255, 255, 255), rgb(${r}, ${g}, ${b}))`\n})\n\nfunction init(): void {\n getCanvasSize()\n transform.x = canvasSize.width * HSV.s\n transform.y = canvasSize.height * (1 - HSV.v)\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({\n init\n})\n</script>\n"],"mappings":";;;;;;;;EA0BA,MAAM,EAAE,KAAK,QAAQ,KAAK,UAAU,eAAe,OAAO,aAAY;EAEtE,MAAM,QAAQ,YAA2B;EAEzC,MAAM,aAAa;GACjB,OAAO;GACP,QAAQ;GACV;EAEA,MAAM,SAAS,CAAC,GAAG,EAAC;EACpB,MAAM,SAAS,CAAC,GAAG,EAAC;EAEpB,MAAM,sBAAsB;GAC1B,IAAI,CAAC,MAAM,OAAO;GAClB,MAAM,EAAE,cAAc,gBAAgB,MAAM;GAE5C,WAAW,QAAQ;GACnB,OAAO,KAAK;GAEZ,WAAW,SAAS;GACpB,OAAO,KAAK;;EAGd,MAAM,YAAY,SAAS;GACzB,GAAG;GACH,GAAG;GACJ,CAAA;EAED,MAAM,eAAe,eAAe;GAClC,OAAO,EACL,WAAW,aAAa,UAAU,EAAE,MAAM,UAAU,EAAE,MACxD;IACD;EAED,MAAM,cAAc,YAAY,SAAiB,YAAoB;GACnE,UAAU,IAAI;GACd,UAAU,IAAI;GASd,SAAS;IAAE,GAJD,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,WAAW,MAAM,CAIlD;IAAG,GAHJ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,UAAU,WAAW,OAAO,CAGpD;IAAG,CAAA;IAClB;EAED,MAAM,YAAY,QAAQ;GACxB,QAAQ;GACR;GACA;GAEA,OAAO,EAAE,SAAS,WAAW;IAC3B,YAAY,SAAS,QAAO;;GAE9B,YAAY,GAAG;IACb,eAAc;IAEd,MAAM,EAAE,SAAS,YAAY;IAE7B,YAAY,SAAS,QAAO;IAE5B,UAAU,OAAO;KAAE;KAAS;KAAS,CAAA;;GAExC,CAAA;EAED,MAAM,mBAAmB,eAAe;GACtC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,qDAAqD,EAAE,IAAI,EAAE,IAAI,EAAE;IAC3E;EAED,SAAS,OAAa;GACpB,eAAc;GACd,UAAU,IAAI,WAAW,QAAQ,IAAI;GACrC,UAAU,IAAI,WAAW,UAAU,IAAI,IAAI;;EAG7C,gBAAgB;GACd,MAAK;IACN;EAED,SAAa,EACX,MACD,CAAA;;2DA7GC,mBAAA,SAAA,EACA,mBAWM,OAAA;IAXA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,KAAA,CAAA;aAAY;IAAJ,KAAI;;IAC5B,mBAAiF,OAAA;KAA3E,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KAAW,OAAK,eAAA,EAAA,iBAAqB,iBAAA,OAAgB,CAAA;;IACvE,mBAAsC,OAAA,EAAhC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,iBAAA,EAAA,EAAA;IAElB,mBAMO,OAAA;KALJ,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;KACb,KAAI;KACH,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;KACV,aAAS,OAAA,OAAA,OAAA,KAAA,oBAAV,IAAe,CAAA,OAAA,CAAA;KACd,OAAK,eAAE,aAAA,MAAY"}
1
+ {"version":3,"file":"palette-sv.js","names":[],"sources":["../../../src/components/palette/palette-sv.vue"],"sourcesContent":["<template>\n <!-- 调色画布 -->\n <div :class=\"cls.e('sv')\" ref=\"svRef\">\n <div :class=\"cls.e('sv-s')\" :style=\"{ backgroundImage: canvasBackground }\"></div>\n <div :class=\"cls.e('sv-v')\">{{}}</div>\n\n <div\n :class=\"cls.e('sv-thumb')\"\n ref=\"svThumbRef\"\n @click.stop\n @mousedown.stop\n :style=\"svThumbStyle\"\n ></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, reactive, shallowRef, onMounted } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'PaletteSV' })\n\nconst { cls, hueRGB, HSV, updateSV, userAction } = inject(PaletteDIKey)!\n\nconst svRef = shallowRef<HTMLDivElement>()\n\nconst canvasSize = { width: 0, height: 0 }\n\nconst rangeX = [0, 0] as [number, number]\nconst rangeY = [0, 0] as [number, number]\n\nconst getCanvasSize = () => {\n if (!svRef.value) return\n const { offsetHeight, offsetWidth } = svRef.value!\n\n canvasSize.width = offsetWidth\n rangeX[1] = offsetWidth\n\n canvasSize.height = offsetHeight\n rangeY[1] = offsetHeight\n}\n\nconst transform = reactive({ x: 0, y: 0 })\n\nconst svThumbStyle = computed(() => {\n return { transform: `translate(${transform.x}px, ${transform.y}px)` }\n})\n\nconst updateThumb = userAction((offsetX: number, offsetY: number) => {\n transform.x = offsetX\n transform.y = offsetY\n\n // 根据画布位置计算饱和度和亮度\n // 水平方向表示饱和度,从左到右饱和度逐渐增高\n // 垂直方向表示亮度,上亮下暗\n const s = Math.max(0, Math.min(1, offsetX / canvasSize.width))\n const v = Math.max(0, Math.min(1, 1 - offsetY / canvasSize.height))\n\n // 更新饱和度和亮度\n updateSV({ s, v })\n})\n\nconst svDragger = useDrag({\n target: svRef,\n rangeX,\n rangeY,\n\n onDrag({ offsetX, offsetY }) {\n updateThumb(offsetX, offsetY)\n },\n onDragStart(e) {\n getCanvasSize()\n\n const { offsetX, offsetY } = e\n\n updateThumb(offsetX, offsetY)\n\n svDragger.update({ offsetX, offsetY })\n }\n})\n\nconst canvasBackground = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgb(255, 255, 255), rgb(${r}, ${g}, ${b}))`\n})\n\nfunction init(): void {\n getCanvasSize()\n transform.x = canvasSize.width * HSV.s\n transform.y = canvasSize.height * (1 - HSV.v)\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAwBA,MAAM,EAAE,KAAK,QAAQ,KAAK,UAAU,eAAe,OAAO,aAAY;EAEtE,MAAM,QAAQ,YAA2B;EAEzC,MAAM,aAAa;GAAE,OAAO;GAAG,QAAQ;GAAE;EAEzC,MAAM,SAAS,CAAC,GAAG,EAAC;EACpB,MAAM,SAAS,CAAC,GAAG,EAAC;EAEpB,MAAM,sBAAsB;GAC1B,IAAI,CAAC,MAAM,OAAO;GAClB,MAAM,EAAE,cAAc,gBAAgB,MAAM;GAE5C,WAAW,QAAQ;GACnB,OAAO,KAAK;GAEZ,WAAW,SAAS;GACpB,OAAO,KAAK;;EAGd,MAAM,YAAY,SAAS;GAAE,GAAG;GAAG,GAAG;GAAG,CAAA;EAEzC,MAAM,eAAe,eAAe;GAClC,OAAO,EAAE,WAAW,aAAa,UAAU,EAAE,MAAM,UAAU,EAAE,MAAK;IACrE;EAED,MAAM,cAAc,YAAY,SAAiB,YAAoB;GACnE,UAAU,IAAI;GACd,UAAU,IAAI;GASd,SAAS;IAAE,GAJD,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,WAAW,MAAM,CAIlD;IAAG,GAHJ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,UAAU,WAAW,OAAO,CAGpD;IAAG,CAAA;IAClB;EAED,MAAM,YAAY,QAAQ;GACxB,QAAQ;GACR;GACA;GAEA,OAAO,EAAE,SAAS,WAAW;IAC3B,YAAY,SAAS,QAAO;;GAE9B,YAAY,GAAG;IACb,eAAc;IAEd,MAAM,EAAE,SAAS,YAAY;IAE7B,YAAY,SAAS,QAAO;IAE5B,UAAU,OAAO;KAAE;KAAS;KAAS,CAAA;;GAExC,CAAA;EAED,MAAM,mBAAmB,eAAe;GACtC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,qDAAqD,EAAE,IAAI,EAAE,IAAI,EAAE;IAC3E;EAED,SAAS,OAAa;GACpB,eAAc;GACd,UAAU,IAAI,WAAW,QAAQ,IAAI;GACrC,UAAU,IAAI,WAAW,UAAU,IAAI,IAAI;;EAG7C,gBAAgB;GACd,MAAK;IACN;EAED,SAAa,EAAE,MAAM,CAAA;;2DAjGnB,mBAAA,SAAA,EACA,mBAWM,OAAA;IAXA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,KAAA,CAAA;aAAY;IAAJ,KAAI;;IAC5B,mBAAiF,OAAA;KAA3E,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KAAW,OAAK,eAAA,EAAA,iBAAqB,iBAAA,OAAgB,CAAA;;IACvE,mBAAsC,OAAA,EAAhC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,iBAAA,EAAA,EAAA;IAElB,mBAMO,OAAA;KALJ,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;KACb,KAAI;KACH,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;KACV,aAAS,OAAA,OAAA,OAAA,KAAA,oBAAV,IAAe,CAAA,OAAA,CAAA;KACd,OAAK,eAAE,aAAA,MAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette.js","names":[],"sources":["../../../src/components/palette/palette.vue"],"sourcesContent":["<template>\n <u-tip\n trigger=\"click\"\n :class=\"cls.e('panel')\"\n v-model:visible=\"visible\"\n :disabled=\"disabled || readonly\"\n >\n <span :class=\"className\" :style=\"{ backgroundColor: color }\"> </span>\n\n <template #content>\n <!-- 饱和度和亮度 -->\n <PaletteSV ref=\"palette-sv\" />\n\n <!-- 色相 -->\n <PaletteHue ref=\"palette-hue\" />\n\n <!-- 透明度 -->\n <PaletteAlpha ref=\"palette-alpha\" />\n\n <!-- 颜色切换 -->\n <PaletteColorSwitch v-model:color=\"color\" @clear=\"handleClear\" />\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { PaletteProps } from '../../types'\nimport { UTip } from '../tip'\nimport { HSV2RGB, RGB2HEX, HEX2RGBA, RGB2HSV } from './color-transform'\nimport { PaletteDIKey } from './di'\nimport PaletteAlpha from './palette-alpha.vue'\nimport PaletteColorSwitch from './palette-color-switch.vue'\nimport PaletteHue from './palette-hue.vue'\nimport PaletteSV from './palette-sv.vue'\nimport { useHSV } from './use-hsv'\n\ndefineOptions({\n name: 'Palette'\n})\n\nconst props = withDefaults(defineProps<PaletteProps>(), {\n disabled: undefined,\n readonly: undefined\n})\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst cls = bem('palette')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('no-color', !color.value)]\n})\n\nconst { HSV, alpha, ...rest } = useHSV()\n\nconst color = defineModel<string>()\nconst RGB = computed(() => HSV2RGB(HSV))\nconst { userAction, isUserActive } = useUserAction()\n\nconst visible = shallowRef(false)\n\n/** 清除时跳过一次内部状态到 color 的同步,防止 updateAlpha 把已清空的 color 覆盖回来 */\nlet skipColorUpdate = false\n\nconst handleClear = userAction(() => {\n if (alpha.value !== 1) {\n skipColorUpdate = true\n }\n color.value = ''\n rest.updateAlpha(1)\n visible.value = false\n})\n\nwatch([alpha, RGB], ([alpha, RGB]) => {\n if (skipColorUpdate) {\n skipColorUpdate = false\n return\n }\n color.value = `#${RGB2HEX(RGB, alpha)}`\n})\n\nconst paletteSVRef = useTemplateRef('palette-sv')\nconst paletteHueRef = useTemplateRef('palette-hue')\nconst paletteAlphaRef = useTemplateRef('palette-alpha')\n\nwatch(\n color,\n (color) => {\n if (!color) return\n if (isUserActive()) return\n\n const { RGB, alpha } = HEX2RGBA(color)\n const hsv = RGB2HSV(RGB)\n rest.updateHue(hsv.h)\n rest.updateSV({ s: hsv.s, v: hsv.v })\n rest.updateAlpha(alpha)\n\n paletteSVRef.value?.init()\n paletteHueRef.value?.init()\n paletteAlphaRef.value?.init()\n },\n { immediate: true }\n)\n\nprovide(PaletteDIKey, {\n cls,\n HSV,\n RGB,\n alpha,\n userAction,\n isUserActive,\n ...rest\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CA,MAAM,QAAQ;EAKd,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAM,CAAA;EAElF,MAAM,MAAM,IAAI,UAAS;EAEzB,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,MAAK;IAAG,IAAI,GAAG,YAAY,CAAC,MAAM,MAAK;IAAC;IACnE;EAED,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS,QAAO;EAEvC,MAAM,QAAQ,SAAmB,SAAA,aAAC;EAClC,MAAM,MAAM,eAAe,QAAQ,IAAI,CAAA;EACvC,MAAM,EAAE,YAAY,iBAAiB,eAAc;EAEnD,MAAM,UAAU,WAAW,MAAK;;EAGhC,IAAI,kBAAkB;EAEtB,MAAM,cAAc,iBAAiB;GACnC,IAAI,MAAM,UAAU,GAClB,kBAAkB;GAEpB,MAAM,QAAQ;GACd,KAAK,YAAY,EAAC;GAClB,QAAQ,QAAQ;IACjB;EAED,MAAM,CAAC,OAAO,IAAG,GAAI,CAAC,OAAO,SAAS;GACpC,IAAI,iBAAiB;IACnB,kBAAkB;IAClB;;GAEF,MAAM,QAAQ,IAAI,QAAQ,KAAK,MAAK;IACrC;EAED,MAAM,eAAe,eAAe,aAAY;EAChD,MAAM,gBAAgB,eAAe,cAAa;EAClD,MAAM,kBAAkB,eAAe,gBAAe;EAEtD,MACE,QACC,UAAU;GACT,IAAI,CAAC,OAAO;GACZ,IAAI,cAAa,EAAG;GAEpB,MAAM,EAAE,KAAK,UAAU,SAAS,MAAK;GACrC,MAAM,MAAM,QAAQ,IAAG;GACvB,KAAK,UAAU,IAAI,EAAC;GACpB,KAAK,SAAS;IAAE,GAAG,IAAI;IAAG,GAAG,IAAI;IAAG,CAAA;GACpC,KAAK,YAAY,MAAK;GAEtB,aAAa,OAAO,MAAK;GACzB,cAAc,OAAO,MAAK;GAC1B,gBAAgB,OAAO,MAAK;KAE9B,EAAE,WAAW,MACf,CAAA;EAEA,QAAQ,cAAc;GACpB;GACA;GACA;GACA;GACA;GACA;GACA,GAAG;GACJ,CAAA;;uBAtHC,YAqBQ,MAAA,YAAA,EAAA;IApBN,SAAQ;IACP,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;IACL,SAAS,QAAA;8DAAA,QAAO,QAAA;IACvB,UAAU,MAAA,SAAA,IAAY,MAAA,SAAA;;IAIZ,SAAO,cACD;KAAf,mBAAA,WAAA;KACA,YAA8B,aAAA,EAAnB,KAAI,cAAY,EAAA,MAAA,IAAA;KAE3B,mBAAA,OAAA;KACA,YAAgC,aAAA,EAApB,KAAI,eAAa,EAAA,MAAA,IAAA;KAE7B,mBAAA,QAAA;KACA,YAAoC,aAAA,EAAtB,KAAI,iBAAe,EAAA,MAAA,IAAA;KAEjC,mBAAA,SAAA;KACA,YAAiE,aAAA;MAArC,OAAO,MAAA;8DAAA,MAAK,QAAA;MAAG,SAAO,MAAA,YAAA;;;2BAbiB,CAArE,mBAAqE,QAAA;KAA9D,OAAK,eAAE,UAAA,MAAS;KAAG,OAAK,eAAA,EAAA,iBAAqB,MAAA,OAAK,CAAA"}
1
+ {"version":3,"file":"palette.js","names":[],"sources":["../../../src/components/palette/palette.vue"],"sourcesContent":["<template>\n <u-tip\n trigger=\"click\"\n :class=\"cls.e('panel')\"\n v-model:visible=\"visible\"\n :disabled=\"disabled || readonly\"\n >\n <span :class=\"className\" :style=\"{ backgroundColor: color }\"> </span>\n\n <template #content>\n <!-- 饱和度和亮度 -->\n <PaletteSV ref=\"palette-sv\" />\n\n <!-- 色相 -->\n <PaletteHue ref=\"palette-hue\" />\n\n <!-- 透明度 -->\n <PaletteAlpha ref=\"palette-alpha\" />\n\n <!-- 颜色切换 -->\n <PaletteColorSwitch v-model:color=\"color\" @clear=\"handleClear\" />\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { PaletteProps } from '../../types'\nimport { UTip } from '../tip'\nimport { HSV2RGB, RGB2HEX, HEX2RGBA, RGB2HSV } from './color-transform'\nimport { PaletteDIKey } from './di'\nimport PaletteAlpha from './palette-alpha.vue'\nimport PaletteColorSwitch from './palette-color-switch.vue'\nimport PaletteHue from './palette-hue.vue'\nimport PaletteSV from './palette-sv.vue'\nimport { useHSV } from './use-hsv'\n\ndefineOptions({ name: 'Palette' })\n\nconst props = withDefaults(defineProps<PaletteProps>(), {\n disabled: undefined,\n readonly: undefined\n})\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst cls = bem('palette')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('no-color', !color.value)]\n})\n\nconst { HSV, alpha, ...rest } = useHSV()\n\nconst color = defineModel<string>()\nconst RGB = computed(() => HSV2RGB(HSV))\nconst { userAction, isUserActive } = useUserAction()\n\nconst visible = shallowRef(false)\n\n/** 清除时跳过一次内部状态到 color 的同步,防止 updateAlpha 把已清空的 color 覆盖回来 */\nlet skipColorUpdate = false\n\nconst handleClear = userAction(() => {\n if (alpha.value !== 1) {\n skipColorUpdate = true\n }\n color.value = ''\n rest.updateAlpha(1)\n visible.value = false\n})\n\nwatch([alpha, RGB], ([alpha, RGB]) => {\n if (skipColorUpdate) {\n skipColorUpdate = false\n return\n }\n color.value = `#${RGB2HEX(RGB, alpha)}`\n})\n\nconst paletteSVRef = useTemplateRef('palette-sv')\nconst paletteHueRef = useTemplateRef('palette-hue')\nconst paletteAlphaRef = useTemplateRef('palette-alpha')\n\nwatch(\n color,\n (color) => {\n if (!color) return\n if (isUserActive()) return\n\n const { RGB, alpha } = HEX2RGBA(color)\n const hsv = RGB2HSV(RGB)\n rest.updateHue(hsv.h)\n rest.updateSV({ s: hsv.s, v: hsv.v })\n rest.updateAlpha(alpha)\n\n paletteSVRef.value?.init()\n paletteHueRef.value?.init()\n paletteAlphaRef.value?.init()\n },\n { immediate: true }\n)\n\nprovide(PaletteDIKey, { cls, HSV, RGB, alpha, userAction, isUserActive, ...rest })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAKd,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAM,CAAA;EAElF,MAAM,MAAM,IAAI,UAAS;EAEzB,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,MAAK;IAAG,IAAI,GAAG,YAAY,CAAC,MAAM,MAAK;IAAC;IACnE;EAED,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS,QAAO;EAEvC,MAAM,QAAQ,SAAmB,SAAA,aAAC;EAClC,MAAM,MAAM,eAAe,QAAQ,IAAI,CAAA;EACvC,MAAM,EAAE,YAAY,iBAAiB,eAAc;EAEnD,MAAM,UAAU,WAAW,MAAK;;EAGhC,IAAI,kBAAkB;EAEtB,MAAM,cAAc,iBAAiB;GACnC,IAAI,MAAM,UAAU,GAClB,kBAAkB;GAEpB,MAAM,QAAQ;GACd,KAAK,YAAY,EAAC;GAClB,QAAQ,QAAQ;IACjB;EAED,MAAM,CAAC,OAAO,IAAG,GAAI,CAAC,OAAO,SAAS;GACpC,IAAI,iBAAiB;IACnB,kBAAkB;IAClB;;GAEF,MAAM,QAAQ,IAAI,QAAQ,KAAK,MAAK;IACrC;EAED,MAAM,eAAe,eAAe,aAAY;EAChD,MAAM,gBAAgB,eAAe,cAAa;EAClD,MAAM,kBAAkB,eAAe,gBAAe;EAEtD,MACE,QACC,UAAU;GACT,IAAI,CAAC,OAAO;GACZ,IAAI,cAAa,EAAG;GAEpB,MAAM,EAAE,KAAK,UAAU,SAAS,MAAK;GACrC,MAAM,MAAM,QAAQ,IAAG;GACvB,KAAK,UAAU,IAAI,EAAC;GACpB,KAAK,SAAS;IAAE,GAAG,IAAI;IAAG,GAAG,IAAI;IAAG,CAAA;GACpC,KAAK,YAAY,MAAK;GAEtB,aAAa,OAAO,MAAK;GACzB,cAAc,OAAO,MAAK;GAC1B,gBAAgB,OAAO,MAAK;KAE9B,EAAE,WAAW,MACf,CAAA;EAEA,QAAQ,cAAc;GAAE;GAAK;GAAK;GAAK;GAAO;GAAY;GAAc,GAAG;GAAM,CAAA;;uBA5G/E,YAqBQ,MAAA,YAAA,EAAA;IApBN,SAAQ;IACP,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;IACL,SAAS,QAAA;8DAAA,QAAO,QAAA;IACvB,UAAU,MAAA,SAAA,IAAY,MAAA,SAAA;;IAIZ,SAAO,cACD;KAAf,mBAAA,WAAA;KACA,YAA8B,aAAA,EAAnB,KAAI,cAAY,EAAA,MAAA,IAAA;KAE3B,mBAAA,OAAA;KACA,YAAgC,aAAA,EAApB,KAAI,eAAa,EAAA,MAAA,IAAA;KAE7B,mBAAA,QAAA;KACA,YAAoC,aAAA,EAAtB,KAAI,iBAAe,EAAA,MAAA,IAAA;KAEjC,mBAAA,SAAA;KACA,YAAiE,aAAA;MAArC,OAAO,MAAA;8DAAA,MAAK,QAAA;MAAG,SAAO,MAAA,YAAA;;;2BAbiB,CAArE,mBAAqE,QAAA;KAA9D,OAAK,eAAE,UAAA,MAAS;KAAG,OAAK,eAAA,EAAA,iBAAqB,MAAA,OAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"pop-confirm.js","names":[],"sources":["../../../src/components/pop-confirm/pop-confirm.vue"],"sourcesContent":["<template>\n <u-tip\n :class=\"cls.b\"\n :trigger=\"trigger\"\n :direction=\"direction\"\n :alignment=\"alignment\"\n :content-tag=\"contentTag\"\n v-model:visible=\"visible\"\n >\n <slot name=\"reference\" />\n\n <template #content>\n <div :class=\"[cls.m('main'), cls.m(size)]\">\n <u-icon :size=\"16\" :class=\"cls.m('icon')\" :style=\"{ color: iconColor }\">\n <component :is=\"icon\" />\n </u-icon>\n <span>\n {{ title }}\n </span>\n </div>\n <div :class=\"cls.m('action')\">\n <u-button size=\"small\" @click=\"cancel\" type=\"primary\" text>\n {{ cancelText }}\n </u-button>\n &nbsp;\n <u-button size=\"small\" type=\"primary\" @click=\"confirm\">\n {{ confirmText }}\n </u-button>\n </div>\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { QuestionFilled } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { ref } from 'vue'\n\nimport type { PopConfirmProps, PopConfirmEmits } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { UTip } from '../tip'\n\ndefineOptions({\n name: 'PopConfirm'\n})\n\nconst emit = defineEmits<PopConfirmEmits>()\n\nwithDefaults(defineProps<PopConfirmProps>(), {\n trigger: 'click',\n icon: QuestionFilled,\n direction: 'bottom',\n iconColor: '#ffc107',\n confirmText: '确认',\n cancelText: '取消'\n})\n\nconst cls = bem('pop-confirm')\n\nconst visible = ref(false)\n\nconst { formProps } = injectFormContext()\n\nconst { size } = useFormFallbackProps([formProps ?? {}], {\n size: 'default'\n})\n\nconst confirm = () => {\n emit('confirm')\n visible.value = false\n}\n\nconst cancel = () => {\n emit('cancel')\n visible.value = false\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAiDA,MAAM,OAAO;EAWb,MAAM,MAAM,IAAI,cAAa;EAE7B,MAAM,UAAU,IAAI,MAAK;EAEzB,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,SAAS,qBAAqB,CAAC,aAAa,EAAE,CAAA,EAAG,EACvD,MAAM,WACP,CAAA;EAED,MAAM,gBAAgB;GACpB,KAAK,UAAS;GACd,QAAQ,QAAQ;;EAGlB,MAAM,eAAe;GACnB,KAAK,SAAQ;GACb,QAAQ,QAAQ;;;uBA5EhB,YA6BQ,MAAA,YAAA,EAAA;IA5BL,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IACZ,SAAS,QAAA;IACT,WAAW,QAAA;IACX,WAAW,QAAA;IACX,eAAa,QAAA;IACN,SAAS,QAAA;8DAAA,QAAO,QAAA;;IAIb,SAAO,cAQV,CAPN,mBAOM,OAAA,EAPA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,OAAA,EAAU,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA,EAAA,EAAA,CACrC,YAES,MAAA,YAAA,EAAA;KAFA,MAAM;KAAK,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KAAW,OAAK,eAAA,EAAA,OAAW,QAAA,WAAS,CAAA;;4BAC1C,EAAA,WAAA,EAAxB,YAAwB,wBAAR,QAAA,KAAI,CAAA,EAAA,CAAA;;+BAEtB,mBAEO,QAAA,MAAA,gBADF,QAAA,MAAK,EAAA,EAAA,CAAA,EAAA,EAAA,EAGZ,mBAQM,OAAA,EARA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA;KAChB,YAEW,MAAA,YAAA,EAAA;MAFD,MAAK;MAAS,SAAO;MAAQ,MAAK;MAAU,MAAA;;6BACpC,CAAA,gBAAA,gBAAb,QAAA,WAAU,EAAA,EAAA,CAAA,CAAA;;;+CACJ,UAEX,GAAA;KAAA,YAEW,MAAA,YAAA,EAAA;MAFD,MAAK;MAAQ,MAAK;MAAW,SAAO;;6BAC3B,CAAA,gBAAA,gBAAd,QAAA,YAAW,EAAA,EAAA,CAAA,CAAA;;;;2BAjBK,CAAzB,WAAyB,KAAA,QAAA,YAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"pop-confirm.js","names":[],"sources":["../../../src/components/pop-confirm/pop-confirm.vue"],"sourcesContent":["<template>\n <u-tip\n :class=\"cls.b\"\n :trigger=\"trigger\"\n :direction=\"direction\"\n :alignment=\"alignment\"\n :content-tag=\"contentTag\"\n v-model:visible=\"visible\"\n >\n <slot name=\"reference\" />\n\n <template #content>\n <div :class=\"[cls.m('main'), cls.m(size)]\">\n <u-icon :size=\"16\" :class=\"cls.m('icon')\" :style=\"{ color: iconColor }\">\n <component :is=\"icon\" />\n </u-icon>\n <span>\n {{ title }}\n </span>\n </div>\n <div :class=\"cls.m('action')\">\n <u-button size=\"small\" @click=\"cancel\" type=\"primary\" text>\n {{ cancelText }}\n </u-button>\n &nbsp;\n <u-button size=\"small\" type=\"primary\" @click=\"confirm\">\n {{ confirmText }}\n </u-button>\n </div>\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { QuestionFilled } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { ref } from 'vue'\n\nimport type { PopConfirmProps, PopConfirmEmits } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: 'PopConfirm' })\n\nconst emit = defineEmits<PopConfirmEmits>()\n\nwithDefaults(defineProps<PopConfirmProps>(), {\n trigger: 'click',\n icon: QuestionFilled,\n direction: 'bottom',\n iconColor: '#ffc107',\n confirmText: '确认',\n cancelText: '取消'\n})\n\nconst cls = bem('pop-confirm')\n\nconst visible = ref(false)\n\nconst { formProps } = injectFormContext()\n\nconst { size } = useFormFallbackProps([formProps ?? {}], { size: 'default' })\n\nconst confirm = () => {\n emit('confirm')\n visible.value = false\n}\n\nconst cancel = () => {\n emit('cancel')\n visible.value = false\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EA+CA,MAAM,OAAO;EAWb,MAAM,MAAM,IAAI,cAAa;EAE7B,MAAM,UAAU,IAAI,MAAK;EAEzB,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,SAAS,qBAAqB,CAAC,aAAa,EAAE,CAAA,EAAG,EAAE,MAAM,WAAW,CAAA;EAE5E,MAAM,gBAAgB;GACpB,KAAK,UAAS;GACd,QAAQ,QAAQ;;EAGlB,MAAM,eAAe;GACnB,KAAK,SAAQ;GACb,QAAQ,QAAQ;;;uBAxEhB,YA6BQ,MAAA,YAAA,EAAA;IA5BL,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IACZ,SAAS,QAAA;IACT,WAAW,QAAA;IACX,WAAW,QAAA;IACX,eAAa,QAAA;IACN,SAAS,QAAA;8DAAA,QAAO,QAAA;;IAIb,SAAO,cAQV,CAPN,mBAOM,OAAA,EAPA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,OAAA,EAAU,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA,EAAA,EAAA,CACrC,YAES,MAAA,YAAA,EAAA;KAFA,MAAM;KAAK,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KAAW,OAAK,eAAA,EAAA,OAAW,QAAA,WAAS,CAAA;;4BAC1C,EAAA,WAAA,EAAxB,YAAwB,wBAAR,QAAA,KAAI,CAAA,EAAA,CAAA;;+BAEtB,mBAEO,QAAA,MAAA,gBADF,QAAA,MAAK,EAAA,EAAA,CAAA,EAAA,EAAA,EAGZ,mBAQM,OAAA,EARA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA;KAChB,YAEW,MAAA,YAAA,EAAA;MAFD,MAAK;MAAS,SAAO;MAAQ,MAAK;MAAU,MAAA;;6BACpC,CAAA,gBAAA,gBAAb,QAAA,WAAU,EAAA,EAAA,CAAA,CAAA;;;+CACJ,UAEX,GAAA;KAAA,YAEW,MAAA,YAAA,EAAA;MAFD,MAAK;MAAQ,MAAK;MAAW,SAAO;;6BAC3B,CAAA,gBAAA,gBAAd,QAAA,YAAW,EAAA,EAAA,CAAA,CAAA;;;;2BAjBK,CAAzB,WAAyB,KAAA,QAAA,YAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","names":[],"sources":["../../../src/components/progress/progress.vue"],"sourcesContent":["<template>\n <div :class=\"className\">\n <!-- 条形进度条 -->\n <div :class=\"cls.e('bar-wrap')\" v-if=\"!circle\">\n <div :class=\"cls.e('bar')\" :style=\"{ width: percentage + '%' }\">\n <slot v-bind=\"{ percentage, type }\">{{ percentage }}%</slot>\n </div>\n </div>\n\n <!-- 环形进度条 -->\n <div\n v-else\n :class=\"cls.e('circle')\"\n :style=\"{ height: withUnit(size, 'px'), width: withUnit(size, 'px') }\"\n >\n <svg viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" :r=\"r\" fill=\"none\" stroke=\"#f5f8fa\" stroke-width=\"8\" />\n <circle\n :class=\"cls.e('circle-ring')\"\n cx=\"50\"\n cy=\"50\"\n :r=\"r\"\n fill=\"none\"\n :stroke=\"stroke\"\n stroke-width=\"8\"\n :stroke-dasharray=\"dashArray\"\n :stroke-dashoffset=\"offset\"\n :stroke-linecap=\"percentage === 0 ? undefined : 'round'\"\n />\n </svg>\n\n <div :class=\"cls.e('circle-content')\">\n <slot v-bind=\"{ percentage, type }\"> {{ percentage }}% </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { ProgressProps, ColorType } from '../../types'\n\ndefineOptions({\n name: 'Progress'\n})\n\nconst props = withDefaults(defineProps<ProgressProps>(), {\n type: 'primary',\n circle: false\n})\n\ndefineSlots<{\n default: (props: {\n /** 进度百分比 */\n percentage: number\n /** 样式类型 */\n type: ColorType\n }) => any\n}>()\n\nconst cls = bem('progress')\n\nconst percentage = computed(() => {\n return n(props.percentage ?? 0).range(0, 100)\n})\n\nconst type = computed<ColorType>(() => {\n const { type } = props\n return typeof type === 'function' ? type(percentage.value) : type\n})\n\nconst className = computed(() => {\n return [cls.b, bem.is('circle', props.circle), cls.m(type.value)]\n})\n\n/** 描边 */\nconst stroke = computed(() => {\n return `var(--u-color-${type.value})`\n})\n\nconst r = 44\nconst c = 2 * Math.PI * r\nconst offset = c / 4\n\n/** 圆周 */\nconst dashArray = computed(() => {\n const dashLen = (c * percentage.value) / 100\n return `${dashLen}, ${c - dashLen}`\n})\n</script>\n"],"mappings":";;;;;;;;;;AAmFA,MAAM,IAAI;;;;;;;;;;;;;;;;;EAlCV,MAAM,QAAQ;EAcd,MAAM,MAAM,IAAI,WAAU;EAE1B,MAAM,aAAa,eAAe;GAChC,OAAO,EAAE,MAAM,cAAc,EAAC,CAAE,MAAM,GAAG,IAAG;IAC7C;EAED,MAAM,OAAO,eAA0B;GACrC,MAAM,EAAE,SAAS;GACjB,OAAO,OAAO,SAAS,aAAa,KAAK,WAAW,MAAK,GAAI;IAC9D;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,GAAG,UAAU,MAAM,OAAM;IAAG,IAAI,EAAE,KAAK,MAAK;IAAC;IACjE;;EAGD,MAAM,SAAS,eAAe;GAC5B,OAAO,iBAAiB,KAAK,MAAM;IACpC;EAGD,MAAM,IAAI,IAAI,KAAK,KAAK;EACxB,MAAM,SAAS,IAAI;;EAGnB,MAAM,YAAY,eAAe;GAC/B,MAAM,UAAW,IAAI,WAAW,QAAS;GACzC,OAAO,GAAG,QAAQ,IAAI,IAAI;IAC3B;;uBA1FC,mBAkCM,OAAA,EAlCA,OAAK,eAAE,UAAA,MAAS,EAAA,EAAA,CACpB,mBAAA,UAAA,EAAA,CACuC,QAAA,UAAA,WAAA,EAAvC,mBAIM,OAAA;;IAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;OAChB,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,MAAA,CAAA;IAAU,OAAK,eAAA,EAAA,OAAW,WAAA,QAAU,KAAA,CAAA;OACpD,WAA4D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA5C,WAAA;IAAU,MAAE,KAAA;IAAI,CAAA,CAAA,QAA4B,CAAA,gBAAA,gBAArB,WAAA,MAAU,GAAG,KAAC,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,KAAA,WAAA,EAKzD,mBAwBM,UAAA,EAAA,KAAA,GAAA,EAAA,CAzBN,mBAAA,UAAA,EACA,mBAwBM,OAAA;IAtBH,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;IACZ,OAAK,eAAA;KAAA,QAAY,MAAA,SAAA,CAAS,QAAA,MAAI,KAAA;KAAA,OAAgB,MAAA,SAAA,CAAS,QAAA,MAAI,KAAA;KAAA,CAAA;qBAE5D,mBAcM,OAdN,YAcM,CAbJ,mBAA+E,UAAA;IAAvE,IAAG;IAAK,IAAG;IAAS;IAAG,MAAK;IAAO,QAAO;IAAU,gBAAa;OACzE,mBAWE,UAAA;IAVC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;IACb,IAAG;IACH,IAAG;IACC;IACJ,MAAK;IACJ,QAAQ,OAAA;IACT,gBAAa;IACZ,oBAAkB,UAAA;IAClB,qBAAmB;IACnB,kBAAgB,WAAA,UAAU,IAAS,KAAA,IAAS;gCAIjD,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,iBAAA,CAAA,EAAA,EAAA,CAChB,WAA8D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA9C,WAAA;IAAU,MAAE,KAAA;IAAI,CAAA,CAAA,QAA8B,CAAA,gBAAA,gBAAtB,WAAA,MAAU,GAAG,MAAE,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"progress.js","names":[],"sources":["../../../src/components/progress/progress.vue"],"sourcesContent":["<template>\n <div :class=\"className\">\n <!-- 条形进度条 -->\n <div :class=\"cls.e('bar-wrap')\" v-if=\"!circle\">\n <div :class=\"cls.e('bar')\" :style=\"{ width: percentage + '%' }\">\n <slot v-bind=\"{ percentage, type }\">{{ percentage }}%</slot>\n </div>\n </div>\n\n <!-- 环形进度条 -->\n <div\n v-else\n :class=\"cls.e('circle')\"\n :style=\"{ height: withUnit(size, 'px'), width: withUnit(size, 'px') }\"\n >\n <svg viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" :r=\"r\" fill=\"none\" stroke=\"#f5f8fa\" stroke-width=\"8\" />\n <circle\n :class=\"cls.e('circle-ring')\"\n cx=\"50\"\n cy=\"50\"\n :r=\"r\"\n fill=\"none\"\n :stroke=\"stroke\"\n stroke-width=\"8\"\n :stroke-dasharray=\"dashArray\"\n :stroke-dashoffset=\"offset\"\n :stroke-linecap=\"percentage === 0 ? undefined : 'round'\"\n />\n </svg>\n\n <div :class=\"cls.e('circle-content')\">\n <slot v-bind=\"{ percentage, type }\"> {{ percentage }}% </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { ProgressProps, ColorType } from '../../types'\n\ndefineOptions({ name: 'Progress' })\n\nconst props = withDefaults(defineProps<ProgressProps>(), { type: 'primary', circle: false })\n\ndefineSlots<{\n default: (props: {\n /** 进度百分比 */\n percentage: number\n /** 样式类型 */\n type: ColorType\n }) => any\n}>()\n\nconst cls = bem('progress')\n\nconst percentage = computed(() => {\n return n(props.percentage ?? 0).range(0, 100)\n})\n\nconst type = computed<ColorType>(() => {\n const { type } = props\n return typeof type === 'function' ? type(percentage.value) : type\n})\n\nconst className = computed(() => {\n return [cls.b, bem.is('circle', props.circle), cls.m(type.value)]\n})\n\n/** 描边 */\nconst stroke = computed(() => {\n return `var(--u-color-${type.value})`\n})\n\nconst r = 44\nconst c = 2 * Math.PI * r\nconst offset = c / 4\n\n/** 圆周 */\nconst dashArray = computed(() => {\n const dashLen = (c * percentage.value) / 100\n return `${dashLen}, ${c - dashLen}`\n})\n</script>\n"],"mappings":";;;;;;;;;;AA8EA,MAAM,IAAI;;;;;;;;;;;;;;;;;EA/BV,MAAM,QAAQ;EAWd,MAAM,MAAM,IAAI,WAAU;EAE1B,MAAM,aAAa,eAAe;GAChC,OAAO,EAAE,MAAM,cAAc,EAAC,CAAE,MAAM,GAAG,IAAG;IAC7C;EAED,MAAM,OAAO,eAA0B;GACrC,MAAM,EAAE,SAAS;GACjB,OAAO,OAAO,SAAS,aAAa,KAAK,WAAW,MAAK,GAAI;IAC9D;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,GAAG,UAAU,MAAM,OAAM;IAAG,IAAI,EAAE,KAAK,MAAK;IAAC;IACjE;;EAGD,MAAM,SAAS,eAAe;GAC5B,OAAO,iBAAiB,KAAK,MAAM;IACpC;EAGD,MAAM,IAAI,IAAI,KAAK,KAAK;EACxB,MAAM,SAAS,IAAI;;EAGnB,MAAM,YAAY,eAAe;GAC/B,MAAM,UAAW,IAAI,WAAW,QAAS;GACzC,OAAO,GAAG,QAAQ,IAAI,IAAI;IAC3B;;uBArFC,mBAkCM,OAAA,EAlCA,OAAK,eAAE,UAAA,MAAS,EAAA,EAAA,CACpB,mBAAA,UAAA,EAAA,CACuC,QAAA,UAAA,WAAA,EAAvC,mBAIM,OAAA;;IAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,WAAA,CAAA;OAChB,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,MAAA,CAAA;IAAU,OAAK,eAAA,EAAA,OAAW,WAAA,QAAU,KAAA,CAAA;OACpD,WAA4D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA5C,WAAA;IAAU,MAAE,KAAA;IAAI,CAAA,CAAA,QAA4B,CAAA,gBAAA,gBAArB,WAAA,MAAU,GAAG,KAAC,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,KAAA,WAAA,EAKzD,mBAwBM,UAAA,EAAA,KAAA,GAAA,EAAA,CAzBN,mBAAA,UAAA,EACA,mBAwBM,OAAA;IAtBH,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;IACZ,OAAK,eAAA;KAAA,QAAY,MAAA,SAAA,CAAS,QAAA,MAAI,KAAA;KAAA,OAAgB,MAAA,SAAA,CAAS,QAAA,MAAI,KAAA;KAAA,CAAA;qBAE5D,mBAcM,OAdN,YAcM,CAbJ,mBAA+E,UAAA;IAAvE,IAAG;IAAK,IAAG;IAAS;IAAG,MAAK;IAAO,QAAO;IAAU,gBAAa;OACzE,mBAWE,UAAA;IAVC,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,cAAA,CAAA;IACb,IAAG;IACH,IAAG;IACC;IACJ,MAAK;IACJ,QAAQ,OAAA;IACT,gBAAa;IACZ,oBAAkB,UAAA;IAClB,qBAAmB;IACnB,kBAAgB,WAAA,UAAU,IAAS,KAAA,IAAS;gCAIjD,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,iBAAA,CAAA,EAAA,EAAA,CAChB,WAA8D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA9C,WAAA;IAAU,MAAE,KAAA;IAAI,CAAA,CAAA,QAA8B,CAAA,gBAAA,gBAAtB,WAAA,MAAU,GAAG,MAAE,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress-nodes.js","names":[],"sources":["../../../src/components/progress-nodes/progress-nodes.vue"],"sourcesContent":["<template>\n <div ref=\"container\" :class=\"className\" :style=\"containerStyle\" @scroll=\"checkScroll\">\n <ul :class=\"cls.e('list')\">\n <li\n v-for=\"(node, index) in nodes\"\n :key=\"node.key ?? index\"\n :class=\"[\n cls.e('item'),\n bem.is('checked', isChecked(node, index)),\n bem.is('active', isActive(node))\n ]\"\n @click=\"handleClick(node, index)\"\n >\n <div :class=\"cls.e('node')\">\n <!-- 虚线连接 -->\n <div v-if=\"index !== nodes.length - 1\" :class=\"cls.e('link')\"></div>\n\n <!-- 节点圆点 -->\n <span :class=\"cls.e('dot')\">\n <slot name=\"icon\" :node=\"node\" :index=\"index\" />\n </span>\n </div>\n\n <div :class=\"cls.e('label')\">\n <slot :node=\"node\" :index=\"index\">\n {{ getLabel(node) }}\n </slot>\n </div>\n </li>\n </ul>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o } from '@cat-kit/core'\nimport { useDrag, useResizeObserver } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef, toRefs, useTemplateRef, watch, nextTick } from 'vue'\n\nimport type { ProgressNodesProps, ProgressNodesEmits } from '../../types'\n\ndefineOptions({\n name: 'ProgressNodes'\n})\n\nconst props = withDefaults(defineProps<ProgressNodesProps>(), {\n colorType: 'primary',\n labelKey: 'label',\n valueKey: 'value'\n})\n\nconst emit = defineEmits<ProgressNodesEmits>()\n\nconst { nodes } = toRefs(props)\n\nconst cls = bem('progress-nodes')\nconst containerRef = useTemplateRef('container')\nconst isDragging = shallowRef(false)\nconst isScrollable = shallowRef(false)\nconst showMaskStart = shallowRef(false)\nconst showMaskEnd = shallowRef(false)\n\nconst className = computed(() => [\n cls.b,\n cls.m(props.colorType),\n bem.is('scrollable', isScrollable.value),\n bem.is('dragging', isDragging.value),\n bem.is('mask-start', showMaskStart.value),\n bem.is('mask-end', showMaskEnd.value)\n])\n\nconst containerStyle = computed(() => {\n const style: Record<string, string> = {}\n const maxWidth = toCssSize(props.maxWidth)\n if (maxWidth) style.maxWidth = maxWidth\n return style\n})\n\nlet startScrollLeft = 0\n\nuseDrag({\n target: containerRef,\n onDragStart() {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n isDragging.value = true\n startScrollLeft = container.scrollLeft\n },\n onDrag({ x }) {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n container.scrollLeft = startScrollLeft - x\n },\n onDragEnd() {\n isDragging.value = false\n }\n})\n\nuseResizeObserver({\n targets: containerRef,\n onResize: checkScroll\n})\n\nwatch(\n nodes,\n () => {\n nextTick(checkScroll)\n },\n { deep: true }\n)\n\nfunction checkScroll() {\n const container = containerRef.value\n if (!container) return\n\n const { scrollLeft, scrollWidth, clientWidth } = container\n isScrollable.value = scrollWidth > clientWidth + 1\n showMaskStart.value = scrollLeft > 0\n showMaskEnd.value = scrollLeft + clientWidth < scrollWidth - 1\n}\n\nfunction isChecked(node: Record<string, any>, index: number) {\n return props.check?.(node, index) ?? false\n}\n\nfunction isActive(node: Record<string, any>) {\n const value = o(node).get(props.valueKey)\n return props.modelValue === value\n}\n\nfunction getLabel(node: Record<string, any>) {\n return o(node).get(props.labelKey)\n}\n\nfunction handleClick(node: Record<string, any>, index: number) {\n const value = o(node).get(props.valueKey)\n emit('update:modelValue', value)\n emit('click', node, index)\n}\n\nfunction toCssSize(value?: number | string) {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"progress-nodes.js","names":[],"sources":["../../../src/components/progress-nodes/progress-nodes.vue"],"sourcesContent":["<template>\n <div ref=\"container\" :class=\"className\" :style=\"containerStyle\" @scroll=\"checkScroll\">\n <ul :class=\"cls.e('list')\">\n <li\n v-for=\"(node, index) in nodes\"\n :key=\"node.key ?? index\"\n :class=\"[\n cls.e('item'),\n bem.is('checked', isChecked(node, index)),\n bem.is('active', isActive(node))\n ]\"\n @click=\"handleClick(node, index)\"\n >\n <div :class=\"cls.e('node')\">\n <!-- 虚线连接 -->\n <div v-if=\"index !== nodes.length - 1\" :class=\"cls.e('link')\"></div>\n\n <!-- 节点圆点 -->\n <span :class=\"cls.e('dot')\">\n <slot name=\"icon\" :node=\"node\" :index=\"index\" />\n </span>\n </div>\n\n <div :class=\"cls.e('label')\">\n <slot :node=\"node\" :index=\"index\">\n {{ getLabel(node) }}\n </slot>\n </div>\n </li>\n </ul>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o } from '@cat-kit/core'\nimport { useDrag, useResizeObserver } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef, toRefs, useTemplateRef, watch, nextTick } from 'vue'\n\nimport type { ProgressNodesProps, ProgressNodesEmits } from '../../types'\n\ndefineOptions({ name: 'ProgressNodes' })\n\nconst props = withDefaults(defineProps<ProgressNodesProps>(), {\n colorType: 'primary',\n labelKey: 'label',\n valueKey: 'value'\n})\n\nconst emit = defineEmits<ProgressNodesEmits>()\n\nconst { nodes } = toRefs(props)\n\nconst cls = bem('progress-nodes')\nconst containerRef = useTemplateRef('container')\nconst isDragging = shallowRef(false)\nconst isScrollable = shallowRef(false)\nconst showMaskStart = shallowRef(false)\nconst showMaskEnd = shallowRef(false)\n\nconst className = computed(() => [\n cls.b,\n cls.m(props.colorType),\n bem.is('scrollable', isScrollable.value),\n bem.is('dragging', isDragging.value),\n bem.is('mask-start', showMaskStart.value),\n bem.is('mask-end', showMaskEnd.value)\n])\n\nconst containerStyle = computed(() => {\n const style: Record<string, string> = {}\n const maxWidth = toCssSize(props.maxWidth)\n if (maxWidth) style.maxWidth = maxWidth\n return style\n})\n\nlet startScrollLeft = 0\n\nuseDrag({\n target: containerRef,\n onDragStart() {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n isDragging.value = true\n startScrollLeft = container.scrollLeft\n },\n onDrag({ x }) {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n container.scrollLeft = startScrollLeft - x\n },\n onDragEnd() {\n isDragging.value = false\n }\n})\n\nuseResizeObserver({ targets: containerRef, onResize: checkScroll })\n\nwatch(\n nodes,\n () => {\n nextTick(checkScroll)\n },\n { deep: true }\n)\n\nfunction checkScroll() {\n const container = containerRef.value\n if (!container) return\n\n const { scrollLeft, scrollWidth, clientWidth } = container\n isScrollable.value = scrollWidth > clientWidth + 1\n showMaskStart.value = scrollLeft > 0\n showMaskEnd.value = scrollLeft + clientWidth < scrollWidth - 1\n}\n\nfunction isChecked(node: Record<string, any>, index: number) {\n return props.check?.(node, index) ?? false\n}\n\nfunction isActive(node: Record<string, any>) {\n const value = o(node).get(props.valueKey)\n return props.modelValue === value\n}\n\nfunction getLabel(node: Record<string, any>) {\n return o(node).get(props.labelKey)\n}\n\nfunction handleClick(node: Record<string, any>, index: number) {\n const value = o(node).get(props.valueKey)\n emit('update:modelValue', value)\n emit('click', node, index)\n}\n\nfunction toCssSize(value?: number | string) {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"radio.js","names":[],"sources":["../../../src/components/radio/radio.vue"],"sourcesContent":["<template>\n <label :class=\"classList\">\n <!-- radio框 -->\n <section :class=\"cls.e('button')\">\n <input\n type=\"radio\"\n :class=\"cls.e('native')\"\n :value=\"value\"\n v-model=\"model\"\n :disabled=\"disabled\"\n hidden\n />\n\n <transition name=\"zoom-in\">\n <span :class=\"cls.e('inner')\" v-if=\"radioChecked\"></span>\n </transition>\n </section>\n\n <span :class=\"cls.e('label')\">\n <slot>{{ label }}</slot>\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { RadioProps, RadioEmits } from '../../types'\n\ndefineOptions({\n name: 'Radio'\n})\n\nconst model = defineModel<any>()\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n disabled: undefined\n})\n\ndefineEmits<RadioEmits>()\n\nconst cls = bem('radio')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false\n})\n\nconst radioChecked = computed(() => model.value === props.value)\n\nconst classList = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('checked', radioChecked.value)\n ]\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCA,MAAM,QAAQ,SAAgB,SAAA,aAAC;EAE/B,MAAM,QAAQ;EAMd,MAAM,MAAM,IAAI,QAAO;EAEvB,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAK,EAAG;GACxE,MAAM;GACN,UAAU;GACX,CAAA;EAED,MAAM,eAAe,eAAe,MAAM,UAAU,MAAM,MAAK;EAE/D,MAAM,YAAY,eAAe;GAC/B,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,MAAK;IAChB,IAAI,GAAG,YAAY,SAAS,MAAK;IACjC,IAAI,GAAG,WAAW,aAAa,MAAK;IACtC;IACD;;uBA7DC,mBAoBQ,SAAA,EApBA,OAAK,eAAE,UAAA,MAAS,EAAA,EAAA;IACtB,mBAAA,WAAA;IACA,mBAaU,WAAA,EAbA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,CAAA,eACpB,mBAOE,SAAA;KANA,MAAK;KACJ,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;KACZ,OAAO,QAAA;kEACC,MAAK,QAAA;KACb,UAAU,MAAA,SAAA;KACX,QAAA;6CAFS,MAAA,MAAK,CAAA,CAAA,EAKhB,YAEa,YAAA,EAFD,MAAK,WAAS,EAAA;4BACiC,CAArB,aAAA,SAAA,WAAA,EAApC,mBAAyD,QAAA;;MAAlD,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;;;;IAIvB,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA,EAAA,EAAA,CACjB,WAAwB,KAAA,QAAA,WAAA,EAAA,QAAA,CAAA,gBAAA,gBAAf,QAAA,MAAK,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"radio.js","names":[],"sources":["../../../src/components/radio/radio.vue"],"sourcesContent":["<template>\n <label :class=\"classList\">\n <!-- radio框 -->\n <section :class=\"cls.e('button')\">\n <input\n type=\"radio\"\n :class=\"cls.e('native')\"\n :value=\"value\"\n v-model=\"model\"\n :disabled=\"disabled\"\n hidden\n />\n\n <transition name=\"zoom-in\">\n <span :class=\"cls.e('inner')\" v-if=\"radioChecked\"></span>\n </transition>\n </section>\n\n <span :class=\"cls.e('label')\">\n <slot>{{ label }}</slot>\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { RadioProps, RadioEmits } from '../../types'\n\ndefineOptions({ name: 'Radio' })\n\nconst model = defineModel<any>()\n\nconst props = withDefaults(defineProps<RadioProps>(), { disabled: undefined })\n\ndefineEmits<RadioEmits>()\n\nconst cls = bem('radio')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false\n})\n\nconst radioChecked = computed(() => model.value === props.value)\n\nconst classList = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('checked', radioChecked.value)\n ]\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,QAAQ,SAAgB,SAAA,aAAC;EAE/B,MAAM,QAAQ;EAId,MAAM,MAAM,IAAI,QAAO;EAEvB,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAK,EAAG;GACxE,MAAM;GACN,UAAU;GACX,CAAA;EAED,MAAM,eAAe,eAAe,MAAM,UAAU,MAAM,MAAK;EAE/D,MAAM,YAAY,eAAe;GAC/B,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,MAAK;IAChB,IAAI,GAAG,YAAY,SAAS,MAAK;IACjC,IAAI,GAAG,WAAW,aAAa,MAAK;IACtC;IACD;;uBAzDC,mBAoBQ,SAAA,EApBA,OAAK,eAAE,UAAA,MAAS,EAAA,EAAA;IACtB,mBAAA,WAAA;IACA,mBAaU,WAAA,EAbA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,CAAA,eACpB,mBAOE,SAAA;KANA,MAAK;KACJ,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;KACZ,OAAO,QAAA;kEACC,MAAK,QAAA;KACb,UAAU,MAAA,SAAA;KACX,QAAA;6CAFS,MAAA,MAAK,CAAA,CAAA,EAKhB,YAEa,YAAA,EAFD,MAAK,WAAS,EAAA;4BACiC,CAArB,aAAA,SAAA,WAAA,EAApC,mBAAyD,QAAA;;MAAlD,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;;;;IAIvB,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA,EAAA,EAAA,CACjB,WAAwB,KAAA,QAAA,WAAA,EAAA,QAAA,CAAA,gBAAA,gBAAf,QAAA,MAAK,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"radio-group.js","names":[],"sources":["../../../src/components/radio-group/radio-group.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, bem.is('block', block), cls.m(size)]\" v-if=\"!readonly\">\n <u-radio\n v-for=\"item of items\"\n :key=\"item[valueKey]\"\n :value=\"item[valueKey]\"\n :model-value=\"model\"\n @update:model-value=\"handleUpdate($event, item)\"\n :disabled=\"disabledItem?.(item) || disabled\"\n :size=\"size\"\n >\n {{ item[labelKey] }}\n </u-radio>\n </div>\n\n <template v-else>\n {{ items.find((item) => item[valueKey] === model)?.[labelKey] || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\n\nimport type { RadioGroupProps, RadioGroupEmits } from '../../types'\nimport URadio from '../radio/radio.vue'\n\ndefineOptions({\n name: 'RadioGroup'\n})\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n disabled: undefined,\n readonly: undefined\n})\n\nconst model = defineModel<any>()\n\nconst emit = defineEmits<RadioGroupEmits>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst cls = bem('radio-group')\n\nconst handleUpdate = (value: any, item: Record<string, any>) => {\n model.value = value\n emit('change', item)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCA,MAAM,QAAQ;EAOd,MAAM,QAAQ,SAAgB,SAAA,aAAC;EAE/B,MAAM,OAAO;EAEb,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAK,EAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;GACX,CAAA;EAED,MAAM,MAAM,IAAI,cAAa;EAE7B,MAAM,gBAAgB,OAAY,SAA8B;GAC9D,MAAM,QAAQ;GACd,KAAK,UAAU,KAAI;;;WAtD+C,MAAA,SAAA,IAAA,WAAA,EAAlE,mBAYM,OAAA;;IAZA,OAAK,eAAA;KAAG,MAAA,IAAA,CAAI;KAAG,MAAA,IAAA,CAAI,GAAE,SAAU,QAAA,MAAK;KAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA;KAAA,CAAA;yBACrD,mBAUU,UAAA,MAAA,WATO,QAAA,QAAR,SAAI;wBADb,YAUU,aAAA;KARP,KAAK,KAAK,QAAA;KACV,OAAO,KAAK,QAAA;KACZ,eAAa,MAAA;KACb,wBAAkB,WAAE,aAAa,QAAQ,KAAI;KAC7C,UAAU,QAAA,eAAe,KAAI,IAAK,MAAA,SAAA;KAClC,MAAM,MAAA,KAAA;;4BAEa,CAAA,gBAAA,gBAAjB,KAAK,QAAA,UAAQ,EAAA,EAAA,CAAA,CAAA;;;;;;;;;mCAIpB,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,QAAA,MAAM,MAAM,SAAS,KAAK,QAAA,cAAc,MAAA,MAAK,GAAI,QAAA,aAAa,MAAA,mBAAkB,CAAA,EAAA,EAAA,CAAA,EAAA,GAAA"}
1
+ {"version":3,"file":"radio-group.js","names":[],"sources":["../../../src/components/radio-group/radio-group.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, bem.is('block', block), cls.m(size)]\" v-if=\"!readonly\">\n <u-radio\n v-for=\"item of items\"\n :key=\"item[valueKey]\"\n :value=\"item[valueKey]\"\n :model-value=\"model\"\n @update:model-value=\"handleUpdate($event, item)\"\n :disabled=\"disabledItem?.(item) || disabled\"\n :size=\"size\"\n >\n {{ item[labelKey] }}\n </u-radio>\n </div>\n\n <template v-else>\n {{ items.find((item) => item[valueKey] === model)?.[labelKey] || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\n\nimport type { RadioGroupProps, RadioGroupEmits } from '../../types'\nimport URadio from '../radio/radio.vue'\n\ndefineOptions({ name: 'RadioGroup' })\n\nconst props = withDefaults(defineProps<RadioGroupProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n disabled: undefined,\n readonly: undefined\n})\n\nconst model = defineModel<any>()\n\nconst emit = defineEmits<RadioGroupEmits>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst cls = bem('radio-group')\n\nconst handleUpdate = (value: any, item: Record<string, any>) => {\n model.value = value\n emit('change', item)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BA,MAAM,QAAQ;EAOd,MAAM,QAAQ,SAAgB,SAAA,aAAC;EAE/B,MAAM,OAAO;EAEb,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAK,EAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;GACX,CAAA;EAED,MAAM,MAAM,IAAI,cAAa;EAE7B,MAAM,gBAAgB,OAAY,SAA8B;GAC9D,MAAM,QAAQ;GACd,KAAK,UAAU,KAAI;;;WApD+C,MAAA,SAAA,IAAA,WAAA,EAAlE,mBAYM,OAAA;;IAZA,OAAK,eAAA;KAAG,MAAA,IAAA,CAAI;KAAG,MAAA,IAAA,CAAI,GAAE,SAAU,QAAA,MAAK;KAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA;KAAA,CAAA;yBACrD,mBAUU,UAAA,MAAA,WATO,QAAA,QAAR,SAAI;wBADb,YAUU,aAAA;KARP,KAAK,KAAK,QAAA;KACV,OAAO,KAAK,QAAA;KACZ,eAAa,MAAA;KACb,wBAAkB,WAAE,aAAa,QAAQ,KAAI;KAC7C,UAAU,QAAA,eAAe,KAAI,IAAK,MAAA,SAAA;KAClC,MAAM,MAAA,KAAA;;4BAEa,CAAA,gBAAA,gBAAjB,KAAK,QAAA,UAAQ,EAAA,EAAA,CAAA,CAAA;;;;;;;;;mCAIpB,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,QAAA,MAAM,MAAM,SAAS,KAAK,QAAA,cAAc,MAAA,MAAK,GAAI,QAAA,aAAa,MAAA,mBAAkB,CAAA,EAAA,EAAA,CAAA,EAAA,GAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-bar.js","names":[],"sources":["../../../src/components/scroll/scroll-bar.vue"],"sourcesContent":["<template>\n <div v-show=\"!!size\" ref=\"domRef\" :style=\"style\" :class=\"className\"></div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { computed, inject, shallowRef } from 'vue'\n\nimport { ScrollDIKey } from './di'\n\ndefineOptions({\n name: 'ScrollBar'\n})\n\nconst props = defineProps<{\n type: 'x' | 'y'\n}>()\n\nconst emit = defineEmits<{\n drag: [offset: number, size: number]\n}>()\n\n/** 滚动条高度(type为x时为宽度) */\nconst size = shallowRef(0)\n/** 滚动条偏移量 */\nconst offset = shallowRef(0)\n/** 滚动条拖拽前偏移量 */\nlet currentOffset = 0\n/** 滚动条轨道尺寸 */\nlet trackSize = 0\n\nconst { cls } = inject(ScrollDIKey)!\n\nconst dragging = shallowRef(false)\n\nconst className = computed(() => {\n return [cls.e(`bar-${props.type}`), bem.is('active', dragging.value)]\n})\n\nconst style =\n props.type === 'x'\n ? computed(() => {\n return {\n width: size.value + 'px',\n transform: `translateX(${offset.value}px)`\n }\n })\n : computed(() => {\n return {\n height: size.value + 'px',\n transform: `translateY(${offset.value}px)`\n }\n })\n\nconst domRef = shallowRef<HTMLElement>()\n\n/** 获取拖拽偏移量 */\nconst getDragOffset =\n props.type === 'x'\n ? (x: number, y: number) => currentOffset + x\n : (x: number, y: number) => currentOffset + y\n\n// 应用拖拽\nuseDrag({\n target: domRef,\n onDragStart() {\n dragging.value = true\n currentOffset = offset.value\n },\n onDragEnd() {\n dragging.value = false\n },\n onDrag({ x, y }) {\n const newOffset = getDragOffset(x, y)\n const maxOffset = trackSize - size.value\n\n if (newOffset < 0) {\n offset.value = 0\n } else if (newOffset > maxOffset) {\n offset.value = maxOffset\n } else {\n offset.value = newOffset\n }\n\n emit('drag', offset.value, size.value)\n }\n})\n\ndefineExpose({\n /** 更新滚动条状态 */\n update(_size: number, _offset: number): void {\n size.value = _size\n offset.value = _offset\n },\n\n /** 设置轨道尺寸 */\n setTrackSize(size: number): void {\n trackSize = size\n }\n})\n</script>\n"],"mappings":";;;;;;;;;;;EAeA,MAAM,QAAQ;EAId,MAAM,OAAO;;EAKb,MAAM,OAAO,WAAW,EAAC;;EAEzB,MAAM,SAAS,WAAW,EAAC;;EAE3B,IAAI,gBAAgB;;EAEpB,IAAI,YAAY;EAEhB,MAAM,EAAE,QAAQ,OAAO,YAAW;EAElC,MAAM,WAAW,WAAW,MAAK;EAEjC,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,EAAE,OAAO,MAAM,OAAM,EAAG,IAAI,GAAG,UAAU,SAAS,MAAM,CAAA;IACrE;EAED,MAAM,QACJ,MAAM,SAAS,MACX,eAAe;GACb,OAAO;IACL,OAAO,KAAK,QAAQ;IACpB,WAAW,cAAc,OAAO,MAAM;IACxC;IACD,GACD,eAAe;GACb,OAAO;IACL,QAAQ,KAAK,QAAQ;IACrB,WAAW,cAAc,OAAO,MAAM;IACxC;IACD;EAEP,MAAM,SAAS,YAAwB;;EAGvC,MAAM,gBACJ,MAAM,SAAS,OACV,GAAW,MAAc,gBAAgB,KACzC,GAAW,MAAc,gBAAgB;EAGhD,QAAQ;GACN,QAAQ;GACR,cAAc;IACZ,SAAS,QAAQ;IACjB,gBAAgB,OAAO;;GAEzB,YAAY;IACV,SAAS,QAAQ;;GAEnB,OAAO,EAAE,GAAG,KAAK;IACf,MAAM,YAAY,cAAc,GAAG,EAAC;IACpC,MAAM,YAAY,YAAY,KAAK;IAEnC,IAAI,YAAY,GACd,OAAO,QAAQ;SACV,IAAI,YAAY,WACrB,OAAO,QAAQ;SAEf,OAAO,QAAQ;IAGjB,KAAK,QAAQ,OAAO,OAAO,KAAK,MAAK;;GAExC,CAAA;EAED,SAAa;;GAEX,OAAO,OAAe,SAAuB;IAC3C,KAAK,QAAQ;IACb,OAAO,QAAQ;;;GAIjB,aAAa,MAAoB;IAC/B,YAAY;;GAEf,CAAA;;uCAnGC,mBAA0E,OAAA;aAAjD;IAAJ,KAAI;IAAU,OAAK,eAAE,MAAA,MAAK,CAAA;IAAG,OAAK,eAAE,UAAA,MAAS;4BAAnD,KAAA,MAAI,CAAA,CAAA"}
1
+ {"version":3,"file":"scroll-bar.js","names":[],"sources":["../../../src/components/scroll/scroll-bar.vue"],"sourcesContent":["<template>\n <div v-show=\"!!size\" ref=\"domRef\" :style=\"style\" :class=\"className\"></div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { computed, inject, shallowRef } from 'vue'\n\nimport { ScrollDIKey } from './di'\n\ndefineOptions({ name: 'ScrollBar' })\n\nconst props = defineProps<{ type: 'x' | 'y' }>()\n\nconst emit = defineEmits<{ drag: [offset: number, size: number] }>()\n\n/** 滚动条高度(type为x时为宽度) */\nconst size = shallowRef(0)\n/** 滚动条偏移量 */\nconst offset = shallowRef(0)\n/** 滚动条拖拽前偏移量 */\nlet currentOffset = 0\n/** 滚动条轨道尺寸 */\nlet trackSize = 0\n\nconst { cls } = inject(ScrollDIKey)!\n\nconst dragging = shallowRef(false)\n\nconst className = computed(() => {\n return [cls.e(`bar-${props.type}`), bem.is('active', dragging.value)]\n})\n\nconst style =\n props.type === 'x'\n ? computed(() => {\n return { width: size.value + 'px', transform: `translateX(${offset.value}px)` }\n })\n : computed(() => {\n return { height: size.value + 'px', transform: `translateY(${offset.value}px)` }\n })\n\nconst domRef = shallowRef<HTMLElement>()\n\n/** 获取拖拽偏移量 */\nconst getDragOffset =\n props.type === 'x'\n ? (x: number, y: number) => currentOffset + x\n : (x: number, y: number) => currentOffset + y\n\n// 应用拖拽\nuseDrag({\n target: domRef,\n onDragStart() {\n dragging.value = true\n currentOffset = offset.value\n },\n onDragEnd() {\n dragging.value = false\n },\n onDrag({ x, y }) {\n const newOffset = getDragOffset(x, y)\n const maxOffset = trackSize - size.value\n\n if (newOffset < 0) {\n offset.value = 0\n } else if (newOffset > maxOffset) {\n offset.value = maxOffset\n } else {\n offset.value = newOffset\n }\n\n emit('drag', offset.value, size.value)\n }\n})\n\ndefineExpose({\n /** 更新滚动条状态 */\n update(_size: number, _offset: number): void {\n size.value = _size\n offset.value = _offset\n },\n\n /** 设置轨道尺寸 */\n setTrackSize(size: number): void {\n trackSize = size\n }\n})\n</script>\n"],"mappings":";;;;;;;;;;;EAaA,MAAM,QAAQ;EAEd,MAAM,OAAO;;EAGb,MAAM,OAAO,WAAW,EAAC;;EAEzB,MAAM,SAAS,WAAW,EAAC;;EAE3B,IAAI,gBAAgB;;EAEpB,IAAI,YAAY;EAEhB,MAAM,EAAE,QAAQ,OAAO,YAAW;EAElC,MAAM,WAAW,WAAW,MAAK;EAEjC,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,EAAE,OAAO,MAAM,OAAM,EAAG,IAAI,GAAG,UAAU,SAAS,MAAM,CAAA;IACrE;EAED,MAAM,QACJ,MAAM,SAAS,MACX,eAAe;GACb,OAAO;IAAE,OAAO,KAAK,QAAQ;IAAM,WAAW,cAAc,OAAO,MAAM;IAAK;IAC/E,GACD,eAAe;GACb,OAAO;IAAE,QAAQ,KAAK,QAAQ;IAAM,WAAW,cAAc,OAAO,MAAM;IAAK;IAChF;EAEP,MAAM,SAAS,YAAwB;;EAGvC,MAAM,gBACJ,MAAM,SAAS,OACV,GAAW,MAAc,gBAAgB,KACzC,GAAW,MAAc,gBAAgB;EAGhD,QAAQ;GACN,QAAQ;GACR,cAAc;IACZ,SAAS,QAAQ;IACjB,gBAAgB,OAAO;;GAEzB,YAAY;IACV,SAAS,QAAQ;;GAEnB,OAAO,EAAE,GAAG,KAAK;IACf,MAAM,YAAY,cAAc,GAAG,EAAC;IACpC,MAAM,YAAY,YAAY,KAAK;IAEnC,IAAI,YAAY,GACd,OAAO,QAAQ;SACV,IAAI,YAAY,WACrB,OAAO,QAAQ;SAEf,OAAO,QAAQ;IAGjB,KAAK,QAAQ,OAAO,OAAO,KAAK,MAAK;;GAExC,CAAA;EAED,SAAa;;GAEX,OAAO,OAAe,SAAuB;IAC3C,KAAK,QAAQ;IACb,OAAO,QAAQ;;;GAIjB,aAAa,MAAoB;IAC/B,YAAY;;GAEf,CAAA;;uCAvFC,mBAA0E,OAAA;aAAjD;IAAJ,KAAI;IAAU,OAAK,eAAE,MAAA,MAAK,CAAA;IAAG,OAAK,eAAE,UAAA,MAAS;4BAAnD,KAAA,MAAI,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"scroll.js","names":[],"sources":["../../../src/components/scroll/scroll.vue"],"sourcesContent":["<template>\n <div :class=\"className\" :style=\"style\" ref=\"scrollRef\">\n <div\n ref=\"containerRef\"\n :class=\"[cls.e('container'), containerClass]\"\n @scroll.passive=\"handleScroll\"\n :style=\"containerStyle\"\n >\n <component\n ref=\"contentRef\"\n :style=\"contentStyle\"\n :class=\"[cls.e('content'), contentClass]\"\n :is=\"tag\"\n >\n <slot />\n </component>\n </div>\n\n <u-scroll-bar type=\"y\" :class=\"cls.e('bar-y')\" @drag=\"handleDragY\" ref=\"barY\" />\n <u-scroll-bar type=\"x\" :class=\"cls.e('bar-x')\" @drag=\"handleDragX\" ref=\"barX\" />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { debounce } from '@cat-kit/core'\nimport { useResizeObserver } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { type CSSProperties, computed, provide, shallowRef } from 'vue'\n\nimport type { ScrollPosition, _ScrollExposed, ScrollProps, ScrollEmits } from '../../types'\nimport { ScrollDIKey } from './di'\nimport UScrollBar from './scroll-bar.vue'\n\ndefineOptions({\n name: 'Scroll'\n})\n\nconst props = withDefaults(defineProps<ScrollProps>(), {\n tag: 'div'\n})\n\nconst emit = defineEmits<ScrollEmits>()\n\ndefineSlots<{\n /** 默认插槽 */\n default(): any\n /** 内容插槽 */\n content(): any\n}>()\n\nconst cls = bem('scroll')\n\nconst className = computed(() => {\n return [cls.b, bem.is('always', props.always)]\n})\n\nconst style = computed<CSSProperties>(() => {\n return {\n height: withUnit(props.height, 'px')\n }\n})\n\nconst contentRef = shallowRef<HTMLElement>()\nconst scrollRef = shallowRef<HTMLElement>()\nconst containerRef = shallowRef<HTMLElement>()\nconst barX = shallowRef<InstanceType<typeof UScrollBar>>()\nconst barY = shallowRef<InstanceType<typeof UScrollBar>>()\nconst minSize = 20\n\nconst trackSize = {\n width: 0,\n height: 0\n}\n\nconst updateBar = () => {\n const container = containerRef.value\n if (!container) return\n\n const { scrollHeight, clientHeight, scrollTop, scrollWidth, clientWidth, scrollLeft } = container\n\n emit('scroll', {\n x: scrollLeft,\n y: scrollTop,\n sw: scrollWidth,\n sh: scrollHeight,\n cw: clientWidth,\n ch: clientHeight\n })\n\n if (scrollHeight !== clientHeight) {\n const barYHeight = Math.max((clientHeight / scrollHeight) * trackSize.height, minSize)\n const barYTop = (scrollTop / (scrollHeight - clientHeight)) * (trackSize.height - barYHeight)\n barY.value?.update(barYHeight, barYTop)\n } else {\n barY.value?.update(0, 0)\n }\n\n if (scrollWidth !== clientWidth) {\n const barXWidth = Math.max((clientWidth / scrollWidth) * trackSize.width, minSize)\n const barXLeft = (scrollLeft / (scrollWidth - clientWidth)) * (trackSize.width - barXWidth)\n barX.value?.update(barXWidth, barXLeft)\n } else {\n barX.value?.update(0, 0)\n }\n}\n\nconst handleDragX = debounce(\n (offset: number, size: number) => {\n const container = containerRef.value\n if (!container) return\n const { clientWidth, scrollWidth } = container\n container.scrollLeft = (offset / (trackSize.width - size)) * (scrollWidth - clientWidth)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleDragY = debounce(\n (offset: number, size: number) => {\n const container = containerRef.value\n if (!container) return\n const { clientHeight, scrollHeight } = container\n container.scrollTop = (offset / (trackSize.height - size)) * (scrollHeight - clientHeight)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleScroll = () => {\n updateBar()\n}\n\nuseResizeObserver({\n targets: [contentRef, scrollRef],\n onResize: (entries) => {\n const trackEl = scrollRef.value\n if (trackEl) {\n trackSize.width = trackEl.clientWidth\n trackSize.height = trackEl.clientHeight\n barX.value?.setTrackSize(trackSize.width)\n barY.value?.setTrackSize(trackSize.height)\n }\n updateBar()\n if (entries.length) {\n emit(\n 'resize',\n entries.map((entry) => entry.target as HTMLElement)\n )\n }\n }\n})\n\nconst scrollToLeft = (left: number) => {\n const container = containerRef.value\n if (!container) return\n container.scrollTo({ left })\n}\n\nconst scrollToTop = (top: number) => {\n const container = containerRef.value\n if (!container) return\n container.scrollTo({ top })\n}\n\nconst scrollTo = (position: ScrollPosition) => {\n if (position.x !== undefined) scrollToLeft(position.x)\n if (position.y !== undefined) scrollToTop(position.y)\n}\n\nprovide(ScrollDIKey, {\n cls\n})\n\nconst exposed: _ScrollExposed = {\n el: scrollRef,\n contentRef,\n containerRef,\n scrollTo,\n update: updateBar\n}\n\ndefineExpose(exposed)\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"scroll.js","names":[],"sources":["../../../src/components/scroll/scroll.vue"],"sourcesContent":["<template>\n <div :class=\"className\" :style=\"style\" ref=\"scrollRef\">\n <div\n ref=\"containerRef\"\n :class=\"[cls.e('container'), containerClass]\"\n @scroll.passive=\"handleScroll\"\n :style=\"containerStyle\"\n >\n <component\n ref=\"contentRef\"\n :style=\"contentStyle\"\n :class=\"[cls.e('content'), contentClass]\"\n :is=\"tag\"\n >\n <slot />\n </component>\n </div>\n\n <u-scroll-bar type=\"y\" :class=\"cls.e('bar-y')\" @drag=\"handleDragY\" ref=\"barY\" />\n <u-scroll-bar type=\"x\" :class=\"cls.e('bar-x')\" @drag=\"handleDragX\" ref=\"barX\" />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { debounce } from '@cat-kit/core'\nimport { useResizeObserver } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { type CSSProperties, computed, provide, shallowRef } from 'vue'\n\nimport type { ScrollPosition, _ScrollExposed, ScrollProps, ScrollEmits } from '../../types'\nimport { ScrollDIKey } from './di'\nimport UScrollBar from './scroll-bar.vue'\n\ndefineOptions({ name: 'Scroll' })\n\nconst props = withDefaults(defineProps<ScrollProps>(), { tag: 'div' })\n\nconst emit = defineEmits<ScrollEmits>()\n\ndefineSlots<{\n /** 默认插槽 */\n default(): any\n /** 内容插槽 */\n content(): any\n}>()\n\nconst cls = bem('scroll')\n\nconst className = computed(() => {\n return [cls.b, bem.is('always', props.always)]\n})\n\nconst style = computed<CSSProperties>(() => {\n return { height: withUnit(props.height, 'px') }\n})\n\nconst contentRef = shallowRef<HTMLElement>()\nconst scrollRef = shallowRef<HTMLElement>()\nconst containerRef = shallowRef<HTMLElement>()\nconst barX = shallowRef<InstanceType<typeof UScrollBar>>()\nconst barY = shallowRef<InstanceType<typeof UScrollBar>>()\nconst minSize = 20\n\nconst trackSize = { width: 0, height: 0 }\n\nconst updateBar = () => {\n const container = containerRef.value\n if (!container) return\n\n const { scrollHeight, clientHeight, scrollTop, scrollWidth, clientWidth, scrollLeft } = container\n\n emit('scroll', {\n x: scrollLeft,\n y: scrollTop,\n sw: scrollWidth,\n sh: scrollHeight,\n cw: clientWidth,\n ch: clientHeight\n })\n\n if (scrollHeight !== clientHeight) {\n const barYHeight = Math.max((clientHeight / scrollHeight) * trackSize.height, minSize)\n const barYTop = (scrollTop / (scrollHeight - clientHeight)) * (trackSize.height - barYHeight)\n barY.value?.update(barYHeight, barYTop)\n } else {\n barY.value?.update(0, 0)\n }\n\n if (scrollWidth !== clientWidth) {\n const barXWidth = Math.max((clientWidth / scrollWidth) * trackSize.width, minSize)\n const barXLeft = (scrollLeft / (scrollWidth - clientWidth)) * (trackSize.width - barXWidth)\n barX.value?.update(barXWidth, barXLeft)\n } else {\n barX.value?.update(0, 0)\n }\n}\n\nconst handleDragX = debounce(\n (offset: number, size: number) => {\n const container = containerRef.value\n if (!container) return\n const { clientWidth, scrollWidth } = container\n container.scrollLeft = (offset / (trackSize.width - size)) * (scrollWidth - clientWidth)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleDragY = debounce(\n (offset: number, size: number) => {\n const container = containerRef.value\n if (!container) return\n const { clientHeight, scrollHeight } = container\n container.scrollTop = (offset / (trackSize.height - size)) * (scrollHeight - clientHeight)\n },\n props.dragDebounce ?? 0,\n false\n)\n\nconst handleScroll = () => {\n updateBar()\n}\n\nuseResizeObserver({\n targets: [contentRef, scrollRef],\n onResize: (entries) => {\n const trackEl = scrollRef.value\n if (trackEl) {\n trackSize.width = trackEl.clientWidth\n trackSize.height = trackEl.clientHeight\n barX.value?.setTrackSize(trackSize.width)\n barY.value?.setTrackSize(trackSize.height)\n }\n updateBar()\n if (entries.length) {\n emit(\n 'resize',\n entries.map((entry) => entry.target as HTMLElement)\n )\n }\n }\n})\n\nconst scrollToLeft = (left: number) => {\n const container = containerRef.value\n if (!container) return\n container.scrollTo({ left })\n}\n\nconst scrollToTop = (top: number) => {\n const container = containerRef.value\n if (!container) return\n container.scrollTo({ top })\n}\n\nconst scrollTo = (position: ScrollPosition) => {\n if (position.x !== undefined) scrollToLeft(position.x)\n if (position.y !== undefined) scrollToTop(position.y)\n}\n\nprovide(ScrollDIKey, { cls })\n\nconst exposed: _ScrollExposed = {\n el: scrollRef,\n contentRef,\n containerRef,\n scrollTo,\n update: updateBar\n}\n\ndefineExpose(exposed)\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"slider-thumb.js","names":[],"sources":["../../../src/components/slider/slider-thumb.vue"],"sourcesContent":["<template>\n <div ref=\"thumb\" :class=\"cls.e('thumb')\" :style></div>\n</template>\n<script lang=\"ts\" setup>\nimport { useDrag, useUserAction } from '@veltra/compositions'\nimport { computed, inject, useTemplateRef, watch } from 'vue'\n\nimport { sliderContextKey } from './di'\n\nconst props = defineProps<{\n modelValue: number\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: number): void\n}>()\n\nconst { cls, range, disabled, sliderProps, getOffsetByStep } = inject(sliderContextKey)!\n\nconst thumbRef = useTemplateRef('thumb')\n\nconst style = computed(() => {\n if (sliderProps.vertical) {\n return {\n transform: `translate(0, ${props.modelValue}px)`\n }\n }\n return {\n transform: `translate(${props.modelValue}px, 0)`\n }\n})\n\nconst { userAction, isUserActive } = useUserAction()\n\nfunction updateModel(offset: number) {\n offset = getOffsetByStep(offset)\n emit('update:modelValue', offset)\n return offset\n}\n\nconst dragger = useDrag({\n target: computed(() => (disabled.value ? null : thumbRef.value)),\n\n onDrag: userAction(({ offsetX, offsetY }) => {\n updateModel(sliderProps.vertical ? offsetY : offsetX)\n }),\n rangeX: range,\n rangeY: range,\n onDragEnd: userAction(({ offsetX, offsetY }) => {\n const offset = updateModel(sliderProps.vertical ? offsetY : offsetX)\n updateDragger(offset)\n })\n})\n\nfunction updateDragger(offset: number) {\n if (sliderProps.vertical) {\n dragger.update({ offsetY: offset })\n } else {\n dragger.update({ offsetX: offset })\n }\n}\n\nwatch(\n () => props.modelValue,\n (offset) => {\n if (isUserActive()) return\n updateDragger(offset)\n }\n)\n</script>\n"],"mappings":";;;;;;;;;EASA,MAAM,QAAQ;EAId,MAAM,OAAO;EAIb,MAAM,EAAE,KAAK,OAAO,UAAU,aAAa,oBAAoB,OAAO,iBAAgB;EAEtF,MAAM,WAAW,eAAe,QAAO;EAEvC,MAAM,QAAQ,eAAe;GAC3B,IAAI,YAAY,UACd,OAAO,EACL,WAAW,gBAAgB,MAAM,WAAW,MAC9C;GAEF,OAAO,EACL,WAAW,aAAa,MAAM,WAAW,SAC3C;IACD;EAED,MAAM,EAAE,YAAY,iBAAiB,eAAc;EAEnD,SAAS,YAAY,QAAgB;GACnC,SAAS,gBAAgB,OAAM;GAC/B,KAAK,qBAAqB,OAAM;GAChC,OAAO;;EAGT,MAAM,UAAU,QAAQ;GACtB,QAAQ,eAAgB,SAAS,QAAQ,OAAO,SAAS,MAAM;GAE/D,QAAQ,YAAY,EAAE,SAAS,cAAc;IAC3C,YAAY,YAAY,WAAW,UAAU,QAAO;KACrD;GACD,QAAQ;GACR,QAAQ;GACR,WAAW,YAAY,EAAE,SAAS,cAAc;IAE9C,cADe,YAAY,YAAY,WAAW,UAAU,QACxC,CAAA;KACrB;GACF,CAAA;EAED,SAAS,cAAc,QAAgB;GACrC,IAAI,YAAY,UACd,QAAQ,OAAO,EAAE,SAAS,QAAQ,CAAA;QAElC,QAAQ,OAAO,EAAE,SAAS,QAAQ,CAAA;;EAItC,YACQ,MAAM,aACX,WAAW;GACV,IAAI,cAAa,EAAG;GACpB,cAAc,OAAM;IAExB;;uBAnEE,mBAAsD,OAAA;IAAjD,KAAI;IAAS,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;IAAY,OAAK,eAAL,MAAA,MAAK"}
1
+ {"version":3,"file":"slider-thumb.js","names":[],"sources":["../../../src/components/slider/slider-thumb.vue"],"sourcesContent":["<template>\n <div ref=\"thumb\" :class=\"cls.e('thumb')\" :style></div>\n</template>\n<script lang=\"ts\" setup>\nimport { useDrag, useUserAction } from '@veltra/compositions'\nimport { computed, inject, useTemplateRef, watch } from 'vue'\n\nimport { sliderContextKey } from './di'\n\nconst props = defineProps<{ modelValue: number }>()\n\nconst emit = defineEmits<{ (e: 'update:modelValue', value: number): void }>()\n\nconst { cls, range, disabled, sliderProps, getOffsetByStep } = inject(sliderContextKey)!\n\nconst thumbRef = useTemplateRef('thumb')\n\nconst style = computed(() => {\n if (sliderProps.vertical) {\n return { transform: `translate(0, ${props.modelValue}px)` }\n }\n return { transform: `translate(${props.modelValue}px, 0)` }\n})\n\nconst { userAction, isUserActive } = useUserAction()\n\nfunction updateModel(offset: number) {\n offset = getOffsetByStep(offset)\n emit('update:modelValue', offset)\n return offset\n}\n\nconst dragger = useDrag({\n target: computed(() => (disabled.value ? null : thumbRef.value)),\n\n onDrag: userAction(({ offsetX, offsetY }) => {\n updateModel(sliderProps.vertical ? offsetY : offsetX)\n }),\n rangeX: range,\n rangeY: range,\n onDragEnd: userAction(({ offsetX, offsetY }) => {\n const offset = updateModel(sliderProps.vertical ? offsetY : offsetX)\n updateDragger(offset)\n })\n})\n\nfunction updateDragger(offset: number) {\n if (sliderProps.vertical) {\n dragger.update({ offsetY: offset })\n } else {\n dragger.update({ offsetX: offset })\n }\n}\n\nwatch(\n () => props.modelValue,\n (offset) => {\n if (isUserActive()) return\n updateDragger(offset)\n }\n)\n</script>\n"],"mappings":";;;;;;;;;EASA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,EAAE,KAAK,OAAO,UAAU,aAAa,oBAAoB,OAAO,iBAAgB;EAEtF,MAAM,WAAW,eAAe,QAAO;EAEvC,MAAM,QAAQ,eAAe;GAC3B,IAAI,YAAY,UACd,OAAO,EAAE,WAAW,gBAAgB,MAAM,WAAW,MAAK;GAE5D,OAAO,EAAE,WAAW,aAAa,MAAM,WAAW,SAAQ;IAC3D;EAED,MAAM,EAAE,YAAY,iBAAiB,eAAc;EAEnD,SAAS,YAAY,QAAgB;GACnC,SAAS,gBAAgB,OAAM;GAC/B,KAAK,qBAAqB,OAAM;GAChC,OAAO;;EAGT,MAAM,UAAU,QAAQ;GACtB,QAAQ,eAAgB,SAAS,QAAQ,OAAO,SAAS,MAAM;GAE/D,QAAQ,YAAY,EAAE,SAAS,cAAc;IAC3C,YAAY,YAAY,WAAW,UAAU,QAAO;KACrD;GACD,QAAQ;GACR,QAAQ;GACR,WAAW,YAAY,EAAE,SAAS,cAAc;IAE9C,cADe,YAAY,YAAY,WAAW,UAAU,QACxC,CAAA;KACrB;GACF,CAAA;EAED,SAAS,cAAc,QAAgB;GACrC,IAAI,YAAY,UACd,QAAQ,OAAO,EAAE,SAAS,QAAQ,CAAA;QAElC,QAAQ,OAAO,EAAE,SAAS,QAAQ,CAAA;;EAItC,YACQ,MAAM,aACX,WAAW;GACV,IAAI,cAAa,EAAG;GACpB,cAAc,OAAM;IAExB;;uBA3DE,mBAAsD,OAAA;IAAjD,KAAI;IAAS,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;IAAY,OAAK,eAAL,MAAA,MAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"slider.js","names":[],"sources":["../../../src/components/slider/slider.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" :class=\"className\">\n <div :class=\"cls.e('track')\" ref=\"sliderRef\" @click=\"handleClickSlider\">\n <div :class=\"cls.e('bar')\" :style=\"barStyles\" />\n\n <slider-thumb v-model=\"offset1\" @click.stop />\n <slider-thumb v-if=\"range\" v-model=\"offset2\" @click.stop />\n\n <div\n v-for=\"tick in ticks\"\n :style=\"{ [vertical ? 'bottom' : 'left']: `${tick}%` }\"\n :class=\"cls.e('tick')\"\n />\n </div>\n </div>\n\n <div v-else>\n {{ props.modelValue }}\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends number | [number, number]\">\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, watch } from 'vue'\n\nimport type { SliderProps, SliderEmits } from '../../types'\nimport { sliderContextKey } from './di'\nimport SliderThumb from './slider-thumb.vue'\nimport { useSlider } from './use-slider'\n\ndefineOptions({\n name: 'Slider'\n})\n\nconst props = withDefaults(defineProps<SliderProps<T>>(), {\n min: 0,\n max: 100,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<SliderEmits<T>>()\n\nconst cls = bem('slider')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('range', props.range),\n bem.is('horizontal', !props.vertical),\n bem.is('vertical', props.vertical)\n ]\n})\n\nconst {\n offset1,\n offset2,\n sliderRef,\n slideRange,\n sliderSize,\n sliderOffset2Value,\n value2SliderOffset,\n getOffsetByStep\n} = useSlider(props)\n\nconst barStyles = computed(() => {\n const { vertical } = props\n const offsetProp = vertical ? 'bottom' : 'left'\n const sizeProp = vertical ? 'height' : 'width'\n\n if (!props.range) {\n return {\n [offsetProp]: 0,\n [sizeProp]: `${Math.abs(offset1.value)}px`\n }\n }\n return {\n [offsetProp]: `${Math.min(Math.abs(offset1.value), Math.abs(offset2.value))}px`,\n [sizeProp]: `${Math.abs(offset1.value - offset2.value)}px`\n }\n})\n\nconst { userAction, isUserActive } = useUserAction()\n\nwatch(\n [sliderSize, ...['modelValue', 'range', 'max', 'min', 'vertical'].map((k) => () => props[k])],\n ([size, value, range]) => {\n if (isUserActive()) return\n if (value === undefined || size === 0) return\n\n if (range) {\n offset1.value = value2SliderOffset((value as [number, number])[0])\n offset2.value = value2SliderOffset((value as [number, number])[1])\n } else {\n offset1.value = value2SliderOffset(value as number)\n }\n },\n { immediate: true }\n)\n\nconst ticks = computed(() => {\n const { step, min, max } = props\n if (!step) return []\n const tickLength = Math.ceil((max! - min!) / step)\n const offsetPercent = (step / (max! - min!)) * 100\n\n return [...Array.from({ length: tickLength }, (_, i) => i * offsetPercent), 100]\n})\n\nwatch(\n [offset1, offset2],\n userAction((v) => {\n if (props.range) {\n emit('update:modelValue', v.map(sliderOffset2Value).toSorted() as T)\n } else {\n emit('update:modelValue', sliderOffset2Value(v[0]) as T)\n }\n })\n)\n\nfunction handleClickSlider(e: MouseEvent) {\n if (disabled.value || props.range) return\n\n // 获取点击位置相对于滑块的偏移量\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n\n offset1.value = getOffsetByStep(e.clientX - rect.left)\n}\n\nprovide(sliderContextKey, {\n sliderProps: props,\n disabled,\n range: slideRange,\n cls,\n getOffsetByStep\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"slider.js","names":[],"sources":["../../../src/components/slider/slider.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" :class=\"className\">\n <div :class=\"cls.e('track')\" ref=\"sliderRef\" @click=\"handleClickSlider\">\n <div :class=\"cls.e('bar')\" :style=\"barStyles\" />\n\n <slider-thumb v-model=\"offset1\" @click.stop />\n <slider-thumb v-if=\"range\" v-model=\"offset2\" @click.stop />\n\n <div\n v-for=\"tick in ticks\"\n :style=\"{ [vertical ? 'bottom' : 'left']: `${tick}%` }\"\n :class=\"cls.e('tick')\"\n />\n </div>\n </div>\n\n <div v-else>\n {{ props.modelValue }}\n </div>\n</template>\n\n<script lang=\"ts\" setup generic=\"T extends number | [number, number]\">\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, watch } from 'vue'\n\nimport type { SliderProps, SliderEmits } from '../../types'\nimport { sliderContextKey } from './di'\nimport SliderThumb from './slider-thumb.vue'\nimport { useSlider } from './use-slider'\n\ndefineOptions({ name: 'Slider' })\n\nconst props = withDefaults(defineProps<SliderProps<T>>(), {\n min: 0,\n max: 100,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<SliderEmits<T>>()\n\nconst cls = bem('slider')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('range', props.range),\n bem.is('horizontal', !props.vertical),\n bem.is('vertical', props.vertical)\n ]\n})\n\nconst {\n offset1,\n offset2,\n sliderRef,\n slideRange,\n sliderSize,\n sliderOffset2Value,\n value2SliderOffset,\n getOffsetByStep\n} = useSlider(props)\n\nconst barStyles = computed(() => {\n const { vertical } = props\n const offsetProp = vertical ? 'bottom' : 'left'\n const sizeProp = vertical ? 'height' : 'width'\n\n if (!props.range) {\n return { [offsetProp]: 0, [sizeProp]: `${Math.abs(offset1.value)}px` }\n }\n return {\n [offsetProp]: `${Math.min(Math.abs(offset1.value), Math.abs(offset2.value))}px`,\n [sizeProp]: `${Math.abs(offset1.value - offset2.value)}px`\n }\n})\n\nconst { userAction, isUserActive } = useUserAction()\n\nwatch(\n [sliderSize, ...['modelValue', 'range', 'max', 'min', 'vertical'].map((k) => () => props[k])],\n ([size, value, range]) => {\n if (isUserActive()) return\n if (value === undefined || size === 0) return\n\n if (range) {\n offset1.value = value2SliderOffset((value as [number, number])[0])\n offset2.value = value2SliderOffset((value as [number, number])[1])\n } else {\n offset1.value = value2SliderOffset(value as number)\n }\n },\n { immediate: true }\n)\n\nconst ticks = computed(() => {\n const { step, min, max } = props\n if (!step) return []\n const tickLength = Math.ceil((max! - min!) / step)\n const offsetPercent = (step / (max! - min!)) * 100\n\n return [...Array.from({ length: tickLength }, (_, i) => i * offsetPercent), 100]\n})\n\nwatch(\n [offset1, offset2],\n userAction((v) => {\n if (props.range) {\n emit('update:modelValue', v.map(sliderOffset2Value).toSorted() as T)\n } else {\n emit('update:modelValue', sliderOffset2Value(v[0]) as T)\n }\n })\n)\n\nfunction handleClickSlider(e: MouseEvent) {\n if (disabled.value || props.range) return\n\n // 获取点击位置相对于滑块的偏移量\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect()\n\n offset1.value = getOffsetByStep(e.clientX - rect.left)\n}\n\nprovide(sliderContextKey, { sliderProps: props, disabled, range: slideRange, cls, getOffsetByStep })\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"steps.js","names":[],"sources":["../../../src/components/steps/steps.vue"],"sourcesContent":["<template>\n <ol :class=\"className\" ref=\"steps\">\n <li\n v-for=\"(item, index) in items\"\n :class=\"[\n cls.e('item'),\n bem.is('current', index === currentIndex),\n bem.is('finished', currentIndex === undefined || index < currentIndex)\n ]\"\n @click=\"handleStepClick(item, index)\"\n >\n <div :class=\"cls.e('node')\">\n <i :class=\"cls.e('link')\" v-if=\"index !== items.length - 1\"></i>\n\n <span\n :class=\"cls.e('icon')\"\n @mouseenter=\"handleStepMouseenter($event, item, index)\"\n @mouseleave=\"handleStepMouseleave\"\n >\n <slot name=\"icon\" :item=\"item\" :index=\"index\">\n <UIcon v-if=\"currentIndex === undefined || index < currentIndex\">\n <Check />\n </UIcon>\n\n <template v-else>\n {{ index + 1 }}\n </template>\n </slot>\n </span>\n </div>\n\n <div :class=\"cls.e('content')\">\n <slot name=\"content\" :item=\"item\" :index=\"index\">\n {{ o(item).get(labelKey) }}\n </slot>\n </div>\n </li>\n\n <u-tip\n v-if=\"slots.tip\"\n ref=\"tip\"\n :trigger-dom=\"tipTriggerDom\"\n v-model:visible=\"tipVisible\"\n @update:visible=\"handleTipUpdateVisible\"\n >\n <template #content>\n <UNodeRender :content=\"tipContent\" />\n </template>\n </u-tip>\n </ol>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, o } from '@cat-kit/core'\nimport { useFallbackProps } from '@veltra/compositions'\nimport { Check } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { StepsProps, StepsEmits, ComponentSize, StepsSlotScope } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { UTip } from '../tip'\n\ndefineOptions({\n name: 'Steps'\n})\n\nconst props = withDefaults(defineProps<StepsProps>(), {\n direction: 'horizontal',\n finishedStepType: 'success',\n labelKey: 'label'\n})\n\nconst emit = defineEmits<StepsEmits>()\n\nconst slots = defineSlots<{\n icon?: (scope: StepsSlotScope) => any\n content?: (scope: StepsSlotScope) => any\n tip?: (scope: StepsSlotScope) => any\n}>()\n\nconst cls = bem('steps')\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst className = computed(() => {\n const { direction, currentStepType, finishedStepType } = props\n const ret: string[] = [\n cls.b,\n bem.is(direction),\n cls.m(size.value),\n bem.is('align-center', props.alignCenter),\n cls.em('finished', finishedStepType)\n ]\n currentStepType && ret.push(cls.em('current', currentStepType))\n return ret\n})\n\nconst stepsRef = useTemplateRef('steps')\n\nconst currentToIndexMap = computed<Record<string, number> | undefined>(() => {\n const { currentKey, items } = props\n if (!currentKey) return undefined\n return items.reduce(\n (acc, item, index) => {\n acc[o(item).get(currentKey)] = index\n return acc\n },\n {} as Record<string, number>\n )\n})\n\n/** 当前索引 */\nconst currentIndex = computed<number | undefined>(() => {\n const { currentKey, current } = props\n if (current === undefined) return undefined\n\n if (currentKey) {\n return currentToIndexMap.value?.[current]\n }\n\n if (typeof current !== 'number') return undefined\n return n(current).range(0, props.items.length - 1)\n})\n\nwatch(currentIndex, (index) => {\n if (index === undefined || props.direction === 'vertical') return\n const step = stepsRef.value?.children[index]\n if (step) {\n step.scrollIntoView({\n behavior: 'smooth',\n block: 'center'\n })\n }\n})\n\n// 点击步骤项\nfunction handleStepClick(item: Record<string, any>, index: number) {\n emit('item-click', item, index)\n emit('update:current', props.currentKey ? o(item).get(props.currentKey) : index)\n}\n\n// 提示\nconst tipVisible = shallowRef(false)\nconst tipTriggerDom = shallowRef<HTMLElement>()\nconst tipContent = shallowRef()\n\nfunction handleStepMouseenter(event: MouseEvent, item: Record<string, any>, index: number) {\n if (!slots.tip) return\n tipTriggerDom.value = event.target as HTMLElement\n tipVisible.value = true\n tipContent.value = slots.tip?.({ item, index })\n}\n\nlet timer: number | undefined = undefined\nfunction closeTip() {\n timer = setTimeout(() => {\n tipVisible.value = false\n tipContent.value = undefined\n tipTriggerDom.value = undefined\n }, 250)\n}\n\nfunction handleTipUpdateVisible(visible: boolean) {\n visible && clearTimeout(timer)\n}\n\nfunction handleStepMouseleave() {\n if (!slots.tip) return\n closeTip()\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAoEA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAEb,MAAM,QAAQ,UAAA;EAMd,MAAM,MAAM,IAAI,QAAO;EAEvB,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EACzC,MAAM,WACP,CAAA;EAED,MAAM,YAAY,eAAe;GAC/B,MAAM,EAAE,WAAW,iBAAiB,qBAAqB;GACzD,MAAM,MAAgB;IACpB,IAAI;IACJ,IAAI,GAAG,UAAS;IAChB,IAAI,EAAE,KAAK,MAAK;IAChB,IAAI,GAAG,gBAAgB,MAAM,YAAW;IACxC,IAAI,GAAG,YAAY,iBAAgB;IACrC;GACA,mBAAmB,IAAI,KAAK,IAAI,GAAG,WAAW,gBAAgB,CAAA;GAC9D,OAAO;IACR;EAED,MAAM,WAAW,eAAe,QAAO;EAEvC,MAAM,oBAAoB,eAAmD;GAC3E,MAAM,EAAE,YAAY,UAAU;GAC9B,IAAI,CAAC,YAAY,OAAO,KAAA;GACxB,OAAO,MAAM,QACV,KAAK,MAAM,UAAU;IACpB,IAAI,EAAE,KAAI,CAAE,IAAI,WAAU,IAAK;IAC/B,OAAO;MAET,EACF,CAAA;IACD;;EAGD,MAAM,eAAe,eAAmC;GACtD,MAAM,EAAE,YAAY,YAAY;GAChC,IAAI,YAAY,KAAA,GAAW,OAAO,KAAA;GAElC,IAAI,YACF,OAAO,kBAAkB,QAAQ;GAGnC,IAAI,OAAO,YAAY,UAAU,OAAO,KAAA;GACxC,OAAO,EAAE,QAAO,CAAE,MAAM,GAAG,MAAM,MAAM,SAAS,EAAC;IAClD;EAED,MAAM,eAAe,UAAU;GAC7B,IAAI,UAAU,KAAA,KAAa,MAAM,cAAc,YAAY;GAC3D,MAAM,OAAO,SAAS,OAAO,SAAS;GACtC,IAAI,MACF,KAAK,eAAe;IAClB,UAAU;IACV,OAAO;IACR,CAAA;IAEJ;EAGD,SAAS,gBAAgB,MAA2B,OAAe;GACjE,KAAK,cAAc,MAAM,MAAK;GAC9B,KAAK,kBAAkB,MAAM,aAAa,EAAE,KAAI,CAAE,IAAI,MAAM,WAAU,GAAI,MAAK;;EAIjF,MAAM,aAAa,WAAW,MAAK;EACnC,MAAM,gBAAgB,YAAwB;EAC9C,MAAM,aAAa,YAAW;EAE9B,SAAS,qBAAqB,OAAmB,MAA2B,OAAe;GACzF,IAAI,CAAC,MAAM,KAAK;GAChB,cAAc,QAAQ,MAAM;GAC5B,WAAW,QAAQ;GACnB,WAAW,QAAQ,MAAM,MAAM;IAAE;IAAM;IAAO,CAAA;;EAGhD,IAAI,QAA4B,KAAA;EAChC,SAAS,WAAW;GAClB,QAAQ,iBAAiB;IACvB,WAAW,QAAQ;IACnB,WAAW,QAAQ,KAAA;IACnB,cAAc,QAAQ,KAAA;MACrB,IAAG;;EAGR,SAAS,uBAAuB,SAAkB;GAChD,WAAW,aAAa,MAAK;;EAG/B,SAAS,uBAAuB;GAC9B,IAAI,CAAC,MAAM,KAAK;GAChB,UAAS;;;uBA3KT,mBAgDK,MAAA;IAhDA,OAAK,eAAE,UAAA,MAAS;IAAE,KAAI;yBACzB,mBAkCK,UAAA,MAAA,WAjCqB,QAAA,QAAhB,MAAM,UAAK;wBADrB,mBAkCK,MAAA;KAhCF,OAAK,eAAA;MAAY,MAAA,IAAA,CAAI,EAAC,OAAA;MAAkB,MAAA,IAAA,CAAI,GAAE,WAAY,UAAU,aAAA,MAAY;MAAW,MAAA,IAAA,CAAI,GAAE,YAAa,aAAA,UAAiB,KAAA,KAAa,QAAQ,aAAA,MAAY;;KAKhK,UAAK,WAAE,gBAAgB,MAAM,MAAK;QAEnC,mBAkBM,OAAA,EAlBA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,CACgB,UAAU,QAAA,MAAM,SAAM,KAAA,WAAA,EAAtD,mBAAgE,KAAA;;KAA5D,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;qDAEhB,mBAcO,QAAA;KAbJ,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KACZ,eAAU,WAAE,qBAAqB,QAAQ,MAAM,MAAK;KACpD,cAAY;QAEb,WAQO,KAAA,QAAA,QAAA;KARkB;KAAc;aAQhC,CAPQ,aAAA,UAAiB,KAAA,KAAa,QAAQ,aAAA,SAAA,WAAA,EAAnD,YAEQ,MAAA,YAAA,EAAA,EAAA,KAAA,GAAA,EAAA;4BADG,CAAT,YAAS,MAAA,MAAA,CAAA,CAAA,CAAA;;wBAGX,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,QAAK,EAAA,EAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,CAAA,EAAA,IAAA,WAAA,CAAA,EAAA,EAAA,EAMhB,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA,EAAA,EAAA,CAChB,WAEO,KAAA,QAAA,WAAA;KAFqB;KAAc;aAEnC,CAAA,gBAAA,gBADF,MAAA,EAAA,CAAE,KAAI,CAAE,IAAI,QAAA,SAAQ,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,EAAA,IAAA,WAAA;cAMrB,MAAM,OAAA,WAAA,EADd,YAUQ,MAAA,YAAA,EAAA;;IARN,KAAI;IACH,eAAa,cAAA;IACN,SAAS,WAAA;+DAAA,WAAU,QAAA,SACV,uBAAA;;IAEN,SAAO,cACqB,CAArC,YAAqC,MAAA,WAAA,EAAA,EAAvB,SAAS,WAAA,OAAU,EAAA,MAAA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"steps.js","names":[],"sources":["../../../src/components/steps/steps.vue"],"sourcesContent":["<template>\n <ol :class=\"className\" ref=\"steps\">\n <li\n v-for=\"(item, index) in items\"\n :class=\"[\n cls.e('item'),\n bem.is('current', index === currentIndex),\n bem.is('finished', currentIndex === undefined || index < currentIndex)\n ]\"\n @click=\"handleStepClick(item, index)\"\n >\n <div :class=\"cls.e('node')\">\n <i :class=\"cls.e('link')\" v-if=\"index !== items.length - 1\"></i>\n\n <span\n :class=\"cls.e('icon')\"\n @mouseenter=\"handleStepMouseenter($event, item, index)\"\n @mouseleave=\"handleStepMouseleave\"\n >\n <slot name=\"icon\" :item=\"item\" :index=\"index\">\n <UIcon v-if=\"currentIndex === undefined || index < currentIndex\">\n <Check />\n </UIcon>\n\n <template v-else>\n {{ index + 1 }}\n </template>\n </slot>\n </span>\n </div>\n\n <div :class=\"cls.e('content')\">\n <slot name=\"content\" :item=\"item\" :index=\"index\">\n {{ o(item).get(labelKey) }}\n </slot>\n </div>\n </li>\n\n <u-tip\n v-if=\"slots.tip\"\n ref=\"tip\"\n :trigger-dom=\"tipTriggerDom\"\n v-model:visible=\"tipVisible\"\n @update:visible=\"handleTipUpdateVisible\"\n >\n <template #content>\n <UNodeRender :content=\"tipContent\" />\n </template>\n </u-tip>\n </ol>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, o } from '@cat-kit/core'\nimport { useFallbackProps } from '@veltra/compositions'\nimport { Check } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { StepsProps, StepsEmits, ComponentSize, StepsSlotScope } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNodeRender } from '../node-render'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: 'Steps' })\n\nconst props = withDefaults(defineProps<StepsProps>(), {\n direction: 'horizontal',\n finishedStepType: 'success',\n labelKey: 'label'\n})\n\nconst emit = defineEmits<StepsEmits>()\n\nconst slots = defineSlots<{\n icon?: (scope: StepsSlotScope) => any\n content?: (scope: StepsSlotScope) => any\n tip?: (scope: StepsSlotScope) => any\n}>()\n\nconst cls = bem('steps')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst className = computed(() => {\n const { direction, currentStepType, finishedStepType } = props\n const ret: string[] = [\n cls.b,\n bem.is(direction),\n cls.m(size.value),\n bem.is('align-center', props.alignCenter),\n cls.em('finished', finishedStepType)\n ]\n currentStepType && ret.push(cls.em('current', currentStepType))\n return ret\n})\n\nconst stepsRef = useTemplateRef('steps')\n\nconst currentToIndexMap = computed<Record<string, number> | undefined>(() => {\n const { currentKey, items } = props\n if (!currentKey) return undefined\n return items.reduce(\n (acc, item, index) => {\n acc[o(item).get(currentKey)] = index\n return acc\n },\n {} as Record<string, number>\n )\n})\n\n/** 当前索引 */\nconst currentIndex = computed<number | undefined>(() => {\n const { currentKey, current } = props\n if (current === undefined) return undefined\n\n if (currentKey) {\n return currentToIndexMap.value?.[current]\n }\n\n if (typeof current !== 'number') return undefined\n return n(current).range(0, props.items.length - 1)\n})\n\nwatch(currentIndex, (index) => {\n if (index === undefined || props.direction === 'vertical') return\n const step = stepsRef.value?.children[index]\n if (step) {\n step.scrollIntoView({ behavior: 'smooth', block: 'center' })\n }\n})\n\n// 点击步骤项\nfunction handleStepClick(item: Record<string, any>, index: number) {\n emit('item-click', item, index)\n emit('update:current', props.currentKey ? o(item).get(props.currentKey) : index)\n}\n\n// 提示\nconst tipVisible = shallowRef(false)\nconst tipTriggerDom = shallowRef<HTMLElement>()\nconst tipContent = shallowRef()\n\nfunction handleStepMouseenter(event: MouseEvent, item: Record<string, any>, index: number) {\n if (!slots.tip) return\n tipTriggerDom.value = event.target as HTMLElement\n tipVisible.value = true\n tipContent.value = slots.tip?.({ item, index })\n}\n\nlet timer: number | undefined = undefined\nfunction closeTip() {\n timer = setTimeout(() => {\n tipVisible.value = false\n tipContent.value = undefined\n tipTriggerDom.value = undefined\n }, 250)\n}\n\nfunction handleTipUpdateVisible(visible: boolean) {\n visible && clearTimeout(timer)\n}\n\nfunction handleStepMouseleave() {\n if (!slots.tip) return\n closeTip()\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"switch.js","names":[],"sources":["../../../src/components/switch/switch.vue"],"sourcesContent":["<template>\n <label :class=\"switchClass\" @click.stop>\n <input\n type=\"checkbox\"\n :class=\"cls.e('native')\"\n hidden\n :checked=\"model\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n />\n <span :class=\"[cls.e('text'), bem.is('selected', !model)]\" v-if=\"inactiveText\">\n {{ inactiveText }}\n </span>\n\n <div :class=\"cls.e('button')\">\n <span :class=\"cls.e('thumb')\"></span>\n </div>\n\n <span v-if=\"activeText\" :class=\"[cls.e('text'), bem.is('selected', model)]\">\n {{ activeText }}\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { SwitchEmits, SwitchProps, _SwitchExposed } from '../../types'\n\ndefineOptions({\n name: 'Switch'\n})\n\nconst props = withDefaults(defineProps<SwitchProps>(), {\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<SwitchEmits>()\n\nconst model = defineModel<boolean>()\n\nconst cls = bem('switch')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst switchClass = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('readonly', readonly.value),\n bem.is('checked', model.value)\n ]\n})\n\nconst handleInput = (e: Event) => {\n if (disabled.value || readonly.value) return\n\n const newValue = (e.target as HTMLInputElement).checked\n model.value = newValue\n emit('change', newValue)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCA,MAAM,QAAQ;EAKd,MAAM,OAAO;EAEb,MAAM,QAAQ,SAAoB,SAAA,aAAC;EAEnC,MAAM,MAAM,IAAI,SAAQ;EAExB,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAM,CAAA;EAElF,MAAM,cAAc,eAAe;GACjC,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,MAAK;IAChB,IAAI,GAAG,YAAY,SAAS,MAAK;IACjC,IAAI,GAAG,YAAY,SAAS,MAAK;IACjC,IAAI,GAAG,WAAW,MAAM,MAAK;IAC/B;IACD;EAED,MAAM,eAAe,MAAa;GAChC,IAAI,SAAS,SAAS,SAAS,OAAO;GAEtC,MAAM,WAAY,EAAE,OAA4B;GAChD,MAAM,QAAQ;GACd,KAAK,UAAU,SAAQ;;;uBAjEvB,mBAoBQ,SAAA;IApBA,OAAK,eAAE,YAAA,MAAW;IAAG,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;;IACrC,mBAOE,SAAA;KANA,MAAK;KACJ,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;KACb,QAAA;KACC,SAAS,MAAA;KACT,UAAU,MAAA,SAAA;KACV,SAAO;;IAEuD,QAAA,gBAAA,WAAA,EAAjE,mBAEO,QAAA;;KAFA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,OAAA,EAAU,MAAA,IAAA,CAAI,GAAE,YAAA,CAAc,MAAA,MAAK,CAAA,CAAA;uBAClD,QAAA,aAAY,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;IAGjB,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,CAChB,mBAAqC,QAAA,EAA9B,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA;IAGT,QAAA,cAAA,WAAA,EAAZ,mBAEO,QAAA;;KAFkB,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,OAAA,EAAU,MAAA,IAAA,CAAI,GAAE,YAAa,MAAA,MAAK,CAAA,CAAA;uBACnE,QAAA,WAAU,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA"}
1
+ {"version":3,"file":"switch.js","names":[],"sources":["../../../src/components/switch/switch.vue"],"sourcesContent":["<template>\n <label :class=\"switchClass\" @click.stop>\n <input\n type=\"checkbox\"\n :class=\"cls.e('native')\"\n hidden\n :checked=\"model\"\n :disabled=\"disabled\"\n @input=\"handleInput\"\n />\n <span :class=\"[cls.e('text'), bem.is('selected', !model)]\" v-if=\"inactiveText\">\n {{ inactiveText }}\n </span>\n\n <div :class=\"cls.e('button')\">\n <span :class=\"cls.e('thumb')\"></span>\n </div>\n\n <span v-if=\"activeText\" :class=\"[cls.e('text'), bem.is('selected', model)]\">\n {{ activeText }}\n </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { SwitchEmits, SwitchProps, _SwitchExposed } from '../../types'\n\ndefineOptions({ name: 'Switch' })\n\nconst props = withDefaults(defineProps<SwitchProps>(), { disabled: undefined, readonly: undefined })\n\nconst emit = defineEmits<SwitchEmits>()\n\nconst model = defineModel<boolean>()\n\nconst cls = bem('switch')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst switchClass = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('readonly', readonly.value),\n bem.is('checked', model.value)\n ]\n})\n\nconst handleInput = (e: Event) => {\n if (disabled.value || readonly.value) return\n\n const newValue = (e.target as HTMLInputElement).checked\n model.value = newValue\n emit('change', newValue)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,QAAQ,SAAoB,SAAA,aAAC;EAEnC,MAAM,MAAM,IAAI,SAAQ;EAExB,MAAM,EAAE,cAAc,mBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAM,CAAA;EAElF,MAAM,cAAc,eAAe;GACjC,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,MAAK;IAChB,IAAI,GAAG,YAAY,SAAS,MAAK;IACjC,IAAI,GAAG,YAAY,SAAS,MAAK;IACjC,IAAI,GAAG,WAAW,MAAM,MAAK;IAC/B;IACD;EAED,MAAM,eAAe,MAAa;GAChC,IAAI,SAAS,SAAS,SAAS,OAAO;GAEtC,MAAM,WAAY,EAAE,OAA4B;GAChD,MAAM,QAAQ;GACd,KAAK,UAAU,SAAQ;;;uBA5DvB,mBAoBQ,SAAA;IApBA,OAAK,eAAE,YAAA,MAAW;IAAG,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;;IACrC,mBAOE,SAAA;KANA,MAAK;KACJ,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;KACb,QAAA;KACC,SAAS,MAAA;KACT,UAAU,MAAA,SAAA;KACV,SAAO;;IAEuD,QAAA,gBAAA,WAAA,EAAjE,mBAEO,QAAA;;KAFA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,OAAA,EAAU,MAAA,IAAA,CAAI,GAAE,YAAA,CAAc,MAAA,MAAK,CAAA,CAAA;uBAClD,QAAA,aAAY,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;IAGjB,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,CAChB,mBAAqC,QAAA,EAA9B,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA;IAGT,QAAA,cAAA,WAAA,EAAZ,mBAEO,QAAA;;KAFkB,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,EAAC,OAAA,EAAU,MAAA,IAAA,CAAI,GAAE,YAAa,MAAA,MAAK,CAAA,CAAA;uBACnE,QAAA,WAAU,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-body.js","names":[],"sources":["../../../src/components/table/table-body.vue"],"sourcesContent":["<template>\n <tbody :class=\"bodyCls\">\n <template v-for=\"{ row, index, stripeIndex } of tableRows\" :key=\"row.uid\">\n <UExpandTableRow v-if=\"row.isExpandRow\" :row=\"row\" :index=\"index\" />\n <UTableRow v-else :row=\"row\" :index=\"index\" :class=\"getStripeCls(stripeIndex)\" />\n </template>\n\n <!-- 空 -->\n <tr v-if=\"!rows.length\" :class=\"emptyRowCls\">\n <td :colspan=\"leafColumns.length\">\n <slot name=\"empty\">\n <UEmpty :class=\"emptyCls\" />\n </slot>\n </td>\n </tr>\n\n <slot></slot>\n </tbody>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport { UEmpty } from '../empty'\nimport { TableDIKey } from './di'\nimport { UTableRow, UExpandTableRow } from './table-row'\n\ndefineOptions({\n name: 'TableBody'\n})\n\nconst { cls, rows, virtualList, columnConfig, tableProps, virtualEnabled } = inject(TableDIKey)!\nconst { leafColumns } = columnConfig\n\n// A1 的同族优化:把 body / empty / empty-row 等静态 class 一次性取出,\n// 避免每次 render 触发 `cls.e` 的字符串拼接。\nconst bodyCls = cls.e('body')\nconst emptyRowCls = cls.e('row')\nconst emptyCls = cls.e('empty')\n\n/**\n * C1:stripe class 查找表。\n *\n * `bem.is('stripe', true) === 'is-stripe'`,`bem.is('stripe', false) === ''`。\n * 两种输出是全局常量,无需每次调用 `bem.is`;按奇偶直接查表即可。\n * 非 stripe 模式下两个位置均返回空串。\n */\nconst STRIPE_CLS_ON: readonly [string, string] = [bem.is('stripe', false), bem.is('stripe', true)]\nconst STRIPE_CLS_OFF: readonly [string, string] = ['', '']\n\nconst stripeTable = computed<readonly [string, string]>(() =>\n tableProps.stripe ? STRIPE_CLS_ON : STRIPE_CLS_OFF\n)\nconst getStripeCls = (index: number): string => stripeTable.value[index & 1]!\n\nconst tableRows = computed(() => {\n if (!virtualEnabled.value) {\n return rows.value.map((row, index) => {\n return {\n row,\n stripeIndex: row.index,\n index\n }\n })\n }\n\n // 虚拟列表:仅渲染可视窗口内的行,位置由 table.vue 中的 before/after 占位 tbody 撑开\n return virtualList.value.map((item) => {\n return {\n row: rows.value[item.index]!,\n stripeIndex: rows.value[item.index]!.index,\n index: item.index\n }\n })\n})\n</script>\n"],"mappings":";;;;;;;;;;;EAgCA,MAAM,EAAE,KAAK,MAAM,aAAa,cAAc,YAAY,mBAAmB,OAAO,WAAU;EAC9F,MAAM,EAAE,gBAAgB;EAIxB,MAAM,UAAU,IAAI,EAAE,OAAM;EAC5B,MAAM,cAAc,IAAI,EAAE,MAAK;EAC/B,MAAM,WAAW,IAAI,EAAE,QAAO;;;;;;;;EAS9B,MAAM,gBAA2C,CAAC,IAAI,GAAG,UAAU,MAAK,EAAG,IAAI,GAAG,UAAU,KAAK,CAAA;EACjG,MAAM,iBAA4C,CAAC,IAAI,GAAE;EAEzD,MAAM,cAAc,eAClB,WAAW,SAAS,gBAAgB,eACtC;EACA,MAAM,gBAAgB,UAA0B,YAAY,MAAM,QAAQ;EAE1E,MAAM,YAAY,eAAe;GAC/B,IAAI,CAAC,eAAe,OAClB,OAAO,KAAK,MAAM,KAAK,KAAK,UAAU;IACpC,OAAO;KACL;KACA,aAAa,IAAI;KACjB;KACF;KACD;GAIH,OAAO,YAAY,MAAM,KAAK,SAAS;IACrC,OAAO;KACL,KAAK,KAAK,MAAM,KAAK;KACrB,aAAa,KAAK,MAAM,KAAK,OAAQ;KACrC,OAAO,KAAK;KACd;KACD;IACF;;uBA1EC,mBAgBQ,SAAA,EAhBA,OAAK,eAAE,MAAA,QAAO,CAAA,EAAA,EAAA;sBACpB,mBAGW,UAAA,MAAA,WAHqC,UAAA,QAAS,EAAtC,KAAK,OAAO,kBAAW;6DAAuB,IAAI,KAAA,EAAA,CAC5C,IAAI,eAAA,WAAA,EAA3B,YAAoE,MAAA,gBAAA,EAAA;;MAAtB;MAAa;oDAC3D,YAAiF,MAAA,UAAA,EAAA;;MAAzD;MAAa;MAAQ,OAAK,eAAE,aAAa,YAAW,CAAA;;;;;;;IAG9E,mBAAA,MAAA;KACW,MAAA,KAAA,CAAK,UAAA,WAAA,EAAhB,mBAMK,MAAA;;KANoB,OAAK,eAAE,MAAA,YAAW,CAAA;QACzC,mBAIK,MAAA,EAJA,SAAS,MAAA,YAAA,CAAY,QAAA,EAAA,CACxB,WAEO,KAAA,QAAA,SAAA,EAAA,QAAA,CADL,YAA4B,MAAA,YAAA,EAAA,EAAnB,OAAK,eAAE,MAAA,SAAQ,CAAA,EAAA,EAAA,MAAA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,EAAA,GAAA,WAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;IAK9B,WAAa,KAAA,QAAA,UAAA"}
1
+ {"version":3,"file":"table-body.js","names":[],"sources":["../../../src/components/table/table-body.vue"],"sourcesContent":["<template>\n <tbody :class=\"bodyCls\">\n <template v-for=\"{ row, index, stripeIndex } of tableRows\" :key=\"row.uid\">\n <UExpandTableRow v-if=\"row.isExpandRow\" :row=\"row\" :index=\"index\" />\n <UTableRow v-else :row=\"row\" :index=\"index\" :class=\"getStripeCls(stripeIndex)\" />\n </template>\n\n <!-- 空 -->\n <tr v-if=\"!rows.length\" :class=\"emptyRowCls\">\n <td :colspan=\"leafColumns.length\">\n <slot name=\"empty\">\n <UEmpty :class=\"emptyCls\" />\n </slot>\n </td>\n </tr>\n\n <slot></slot>\n </tbody>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, inject } from 'vue'\n\nimport { UEmpty } from '../empty'\nimport { TableDIKey } from './di'\nimport { UTableRow, UExpandTableRow } from './table-row'\n\ndefineOptions({ name: 'TableBody' })\n\nconst { cls, rows, virtualList, columnConfig, tableProps, virtualEnabled } = inject(TableDIKey)!\nconst { leafColumns } = columnConfig\n\n// A1 的同族优化:把 body / empty / empty-row 等静态 class 一次性取出,\n// 避免每次 render 触发 `cls.e` 的字符串拼接。\nconst bodyCls = cls.e('body')\nconst emptyRowCls = cls.e('row')\nconst emptyCls = cls.e('empty')\n\n/**\n * C1:stripe class 查找表。\n *\n * `bem.is('stripe', true) === 'is-stripe'`,`bem.is('stripe', false) === ''`。\n * 两种输出是全局常量,无需每次调用 `bem.is`;按奇偶直接查表即可。\n * 非 stripe 模式下两个位置均返回空串。\n */\nconst STRIPE_CLS_ON: readonly [string, string] = [bem.is('stripe', false), bem.is('stripe', true)]\nconst STRIPE_CLS_OFF: readonly [string, string] = ['', '']\n\nconst stripeTable = computed<readonly [string, string]>(() =>\n tableProps.stripe ? STRIPE_CLS_ON : STRIPE_CLS_OFF\n)\nconst getStripeCls = (index: number): string => stripeTable.value[index & 1]!\n\nconst tableRows = computed(() => {\n if (!virtualEnabled.value) {\n return rows.value.map((row, index) => {\n return { row, stripeIndex: row.index, index }\n })\n }\n\n // 虚拟列表:仅渲染可视窗口内的行,位置由 table.vue 中的 before/after 占位 tbody 撑开\n return virtualList.value.map((item) => {\n return {\n row: rows.value[item.index]!,\n stripeIndex: rows.value[item.index]!.index,\n index: item.index\n }\n })\n})\n</script>\n"],"mappings":";;;;;;;;;;;EA8BA,MAAM,EAAE,KAAK,MAAM,aAAa,cAAc,YAAY,mBAAmB,OAAO,WAAU;EAC9F,MAAM,EAAE,gBAAgB;EAIxB,MAAM,UAAU,IAAI,EAAE,OAAM;EAC5B,MAAM,cAAc,IAAI,EAAE,MAAK;EAC/B,MAAM,WAAW,IAAI,EAAE,QAAO;;;;;;;;EAS9B,MAAM,gBAA2C,CAAC,IAAI,GAAG,UAAU,MAAK,EAAG,IAAI,GAAG,UAAU,KAAK,CAAA;EACjG,MAAM,iBAA4C,CAAC,IAAI,GAAE;EAEzD,MAAM,cAAc,eAClB,WAAW,SAAS,gBAAgB,eACtC;EACA,MAAM,gBAAgB,UAA0B,YAAY,MAAM,QAAQ;EAE1E,MAAM,YAAY,eAAe;GAC/B,IAAI,CAAC,eAAe,OAClB,OAAO,KAAK,MAAM,KAAK,KAAK,UAAU;IACpC,OAAO;KAAE;KAAK,aAAa,IAAI;KAAO;KAAM;KAC7C;GAIH,OAAO,YAAY,MAAM,KAAK,SAAS;IACrC,OAAO;KACL,KAAK,KAAK,MAAM,KAAK;KACrB,aAAa,KAAK,MAAM,KAAK,OAAQ;KACrC,OAAO,KAAK;KACd;KACD;IACF;;uBApEC,mBAgBQ,SAAA,EAhBA,OAAK,eAAE,MAAA,QAAO,CAAA,EAAA,EAAA;sBACpB,mBAGW,UAAA,MAAA,WAHqC,UAAA,QAAS,EAAtC,KAAK,OAAO,kBAAW;6DAAuB,IAAI,KAAA,EAAA,CAC5C,IAAI,eAAA,WAAA,EAA3B,YAAoE,MAAA,gBAAA,EAAA;;MAAtB;MAAa;oDAC3D,YAAiF,MAAA,UAAA,EAAA;;MAAzD;MAAa;MAAQ,OAAK,eAAE,aAAa,YAAW,CAAA;;;;;;;IAG9E,mBAAA,MAAA;KACW,MAAA,KAAA,CAAK,UAAA,WAAA,EAAhB,mBAMK,MAAA;;KANoB,OAAK,eAAE,MAAA,YAAW,CAAA;QACzC,mBAIK,MAAA,EAJA,SAAS,MAAA,YAAA,CAAY,QAAA,EAAA,CACxB,WAEO,KAAA,QAAA,SAAA,EAAA,QAAA,CADL,YAA4B,MAAA,YAAA,EAAA,EAAnB,OAAK,eAAE,MAAA,SAAQ,CAAA,EAAA,EAAA,MAAA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,EAAA,GAAA,WAAA,CAAA,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;IAK9B,WAAa,KAAA,QAAA,UAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-cell.js","names":[],"sources":["../../../src/components/table/table-cell.vue"],"sourcesContent":["<template>\n <td\n :class=\"cellClass\"\n :style=\"style\"\n :rowspan=\"rowspan\"\n :colspan=\"colspan\"\n v-if=\"rowspan !== 0 && colspan !== 0\"\n >\n <slot />\n </td>\n</template>\n\n<script lang=\"ts\" setup>\nimport { withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\ndefineOptions({\n name: 'TableCell'\n})\n\n/**\n * B2: TableCell 去 inject 化。\n *\n * 原先每个可见单元格都会执行 `inject(TableDIKey)` 并在模板中调用 `getCellClass(column)`,\n * 在 30 列场景下每次滚动每行产生 30 次 inject / 30 次类名拼接。\n * 父组件 `TableRow` 已经持有注入上下文,直接把 `cellClass` 传下来即可;\n * 这里变成「完全受控」的纯渲染单元。\n */\nconst { left, right } = defineProps<{\n cellClass: string\n left?: number\n right?: number\n rowspan?: number\n colspan?: number\n}>()\n\nconst style = computed(() => ({\n left: withUnit(left, 'px'),\n right: withUnit(right, 'px')\n}))\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAoCA,MAAM,QAAQ,gBAAgB;GAC5B,MAAM,SAAS,QAAA,MAAM,KAAI;GACzB,OAAO,SAAS,QAAA,OAAO,KAAI;GAC7B,EAAE;;UAjCQ,QAAA,YAAO,KAAU,QAAA,YAAO,KAAA,WAAA,EALhC,mBAQK,MAAA;;IAPF,OAAK,eAAE,QAAA,UAAS;IAChB,OAAK,eAAE,MAAA,MAAK;IACZ,SAAS,QAAA;IACT,SAAS,QAAA;OAGV,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA,IAAA,mBAAA,QAAA,KAAA"}
1
+ {"version":3,"file":"table-cell.js","names":[],"sources":["../../../src/components/table/table-cell.vue"],"sourcesContent":["<template>\n <td\n :class=\"cellClass\"\n :style=\"style\"\n :rowspan=\"rowspan\"\n :colspan=\"colspan\"\n v-if=\"rowspan !== 0 && colspan !== 0\"\n >\n <slot />\n </td>\n</template>\n\n<script lang=\"ts\" setup>\nimport { withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\ndefineOptions({ name: 'TableCell' })\n\n/**\n * B2: TableCell 去 inject 化。\n *\n * 原先每个可见单元格都会执行 `inject(TableDIKey)` 并在模板中调用 `getCellClass(column)`,\n * 在 30 列场景下每次滚动每行产生 30 次 inject / 30 次类名拼接。\n * 父组件 `TableRow` 已经持有注入上下文,直接把 `cellClass` 传下来即可;\n * 这里变成「完全受控」的纯渲染单元。\n */\nconst { left, right } = defineProps<{\n cellClass: string\n left?: number\n right?: number\n rowspan?: number\n colspan?: number\n}>()\n\nconst style = computed(() => ({ left: withUnit(left, 'px'), right: withUnit(right, 'px') }))\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,QAAQ,gBAAgB;GAAE,MAAM,SAAS,QAAA,MAAM,KAAI;GAAG,OAAO,SAAS,QAAA,OAAO,KAAI;GAAE,EAAE;;UA5BjF,QAAA,YAAO,KAAU,QAAA,YAAO,KAAA,WAAA,EALhC,mBAQK,MAAA;;IAPF,OAAK,eAAE,QAAA,UAAS;IAChB,OAAK,eAAE,MAAA,MAAK;IACZ,SAAS,QAAA;IACT,SAAS,QAAA;OAGV,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,IAAA,WAAA,IAAA,mBAAA,QAAA,KAAA"}