@veltra/desktop 1.1.25 → 1.1.27

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 (243) 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 +3 -3
  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-button.vue.d.ts +1 -1
  23. package/dist/components/checkbox/checkbox.js.map +1 -1
  24. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  25. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
  26. package/dist/components/code-editor/code-editor.js.map +1 -1
  27. package/dist/components/collapse/collapse-item.js.map +1 -1
  28. package/dist/components/collapse/collapse.js.map +1 -1
  29. package/dist/components/condition-editor/components/condition-row.js.map +1 -1
  30. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  31. package/dist/components/context-menu/context-menu-item.js.map +1 -1
  32. package/dist/components/context-menu/context-menu.js.map +1 -1
  33. package/dist/components/date-panel/date-panel.js.map +1 -1
  34. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  35. package/dist/components/date-panel/headers/day.js.map +1 -1
  36. package/dist/components/date-panel/headers/month.js.map +1 -1
  37. package/dist/components/date-panel/headers/year.js.map +1 -1
  38. package/dist/components/date-panel/panels/day.js.map +1 -1
  39. package/dist/components/date-panel/panels/month.js.map +1 -1
  40. package/dist/components/date-panel/panels/year.js.map +1 -1
  41. package/dist/components/date-picker/date-picker.js.map +1 -1
  42. package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
  43. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  44. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
  45. package/dist/components/dialog/dialog.js.map +1 -1
  46. package/dist/components/drawer/drawer.js.map +1 -1
  47. package/dist/components/empty/empty.js.map +1 -1
  48. package/dist/components/expression-editor/components/path-preview.js.map +1 -1
  49. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  50. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  51. package/dist/components/file-picker/file-picker.js.map +1 -1
  52. package/dist/components/file-picker/file-picker.vue.d.ts +1 -1
  53. package/dist/components/file-viewer/file-viewer.js.map +1 -1
  54. package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
  55. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  56. package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
  57. package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
  58. package/dist/components/float-button/float-button.js.map +1 -1
  59. package/dist/components/form/form-model.d.ts +2 -2
  60. package/dist/components/form/form-model.js.map +1 -1
  61. package/dist/components/form/form.js.map +1 -1
  62. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
  64. package/dist/components/grid/grid-item.js.map +1 -1
  65. package/dist/components/grid/grid.js.map +1 -1
  66. package/dist/components/grid-input/grid-input.js.map +1 -1
  67. package/dist/components/group-input/group-input.js.map +1 -1
  68. package/dist/components/icon/icon.js.map +1 -1
  69. package/dist/components/input/input.js.map +1 -1
  70. package/dist/components/input/input.vue.d.ts +2 -2
  71. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  72. package/dist/components/layout/layout-resizer.js.map +1 -1
  73. package/dist/components/layout/layout.js.map +1 -1
  74. package/dist/components/list/list-item.js.map +1 -1
  75. package/dist/components/list/list.js.map +1 -1
  76. package/dist/components/loading/loading.js.map +1 -1
  77. package/dist/components/menu/menu-icon.js.map +1 -1
  78. package/dist/components/menu/menu-sub-collapsed.js.map +1 -1
  79. package/dist/components/menu/menu.js.map +1 -1
  80. package/dist/components/message/message-box.js.map +1 -1
  81. package/dist/components/message/message.js.map +1 -1
  82. package/dist/components/message-confirm/message-confirm.js.map +1 -1
  83. package/dist/components/multi-select/multi-select-option.js.map +1 -1
  84. package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
  85. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +3 -3
  86. package/dist/components/notification/notification.js.map +1 -1
  87. package/dist/components/notification/notification.vue.d.ts +1 -1
  88. package/dist/components/number/number.js.map +1 -1
  89. package/dist/components/number/number.vue.d.ts +1 -1
  90. package/dist/components/number-input/number-input.js.map +1 -1
  91. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  92. package/dist/components/paginator/paginator.js.map +1 -1
  93. package/dist/components/palette/palette-alpha.js.map +1 -1
  94. package/dist/components/palette/palette-color-switch.js.map +1 -1
  95. package/dist/components/palette/palette-hue.js.map +1 -1
  96. package/dist/components/palette/palette-sv.js.map +1 -1
  97. package/dist/components/palette/palette.js.map +1 -1
  98. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  99. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
  100. package/dist/components/progress/progress.js.map +1 -1
  101. package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
  102. package/dist/components/radio/radio.js.map +1 -1
  103. package/dist/components/radio-group/radio-group.js.map +1 -1
  104. package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
  105. package/dist/components/scroll/scroll-bar.js.map +1 -1
  106. package/dist/components/scroll/scroll.js.map +1 -1
  107. package/dist/components/select/select.vue.d.ts +2 -2
  108. package/dist/components/slider/slider-thumb.js.map +1 -1
  109. package/dist/components/slider/slider.js.map +1 -1
  110. package/dist/components/steps/steps.js.map +1 -1
  111. package/dist/components/switch/switch.js.map +1 -1
  112. package/dist/components/table/table-body.js.map +1 -1
  113. package/dist/components/table/table-cell.js.map +1 -1
  114. package/dist/components/table/table-foot.js.map +1 -1
  115. package/dist/components/table/table.vue.d.ts +2 -2
  116. package/dist/components/table-editor/table-editor.js.map +1 -1
  117. package/dist/components/tabs/tabs-horizontal.js.map +1 -1
  118. package/dist/components/tabs/tabs-horizontal.vue.d.ts +3 -3
  119. package/dist/components/tabs/tabs-vertical.js.map +1 -1
  120. package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
  121. package/dist/components/tabs/tabs.js.map +1 -1
  122. package/dist/components/tabs/tabs.vue.d.ts +3 -3
  123. package/dist/components/tag/tag.js.map +1 -1
  124. package/dist/components/text/text.js.map +1 -1
  125. package/dist/components/textarea/textarea.js.map +1 -1
  126. package/dist/components/textarea/textarea.vue.d.ts +3 -3
  127. package/dist/components/theme/theme.js.map +1 -1
  128. package/dist/components/tip/tip.js.map +1 -1
  129. package/dist/components/tip/tip.vue.d.ts +1 -1
  130. package/dist/components/tree/tree-node.js.map +1 -1
  131. package/dist/components/tree/tree.js.map +1 -1
  132. package/dist/components/tree-select/tree-select.vue.d.ts +3 -3
  133. package/dist/components/watermark/watermark.js.map +1 -1
  134. package/package.json +6 -6
  135. package/src/components/action/action.vue +1 -4
  136. package/src/components/badge/badge.vue +3 -9
  137. package/src/components/batch-edit/batch-edit-form.vue +1 -5
  138. package/src/components/batch-edit/batch-edit-list.vue +2 -6
  139. package/src/components/batch-edit/batch-edit.vue +2 -12
  140. package/src/components/breadcrumb/breadcrumb.vue +4 -13
  141. package/src/components/button/button-group.vue +2 -6
  142. package/src/components/button/button.vue +3 -9
  143. package/src/components/calendar/calendar.vue +1 -3
  144. package/src/components/card/card-action.vue +1 -3
  145. package/src/components/card/card-content.vue +1 -6
  146. package/src/components/card/card-cover.vue +1 -3
  147. package/src/components/card/card.vue +2 -6
  148. package/src/components/cascade/cascade-panel-item.vue +2 -8
  149. package/src/components/cascade/cascade.vue +5 -37
  150. package/src/components/check-tag/check-tag.vue +1 -3
  151. package/src/components/checkbox/checkbox-button.vue +2 -6
  152. package/src/components/checkbox/checkbox.vue +1 -3
  153. package/src/components/checkbox-group/checkbox-group.vue +1 -3
  154. package/src/components/code-editor/code-editor.vue +4 -12
  155. package/src/components/collapse/collapse-item.vue +1 -3
  156. package/src/components/collapse/collapse.vue +2 -8
  157. package/src/components/condition-editor/components/condition-row.vue +2 -8
  158. package/src/components/condition-editor/condition-editor.vue +2 -6
  159. package/src/components/context-menu/context-menu-item.vue +3 -10
  160. package/src/components/context-menu/context-menu.vue +5 -17
  161. package/src/components/date-panel/date-panel.vue +3 -11
  162. package/src/components/date-panel/headers/day.vue +1 -3
  163. package/src/components/date-panel/headers/month.vue +1 -3
  164. package/src/components/date-panel/headers/year.vue +1 -3
  165. package/src/components/date-panel/panels/day.vue +1 -4
  166. package/src/components/date-panel/panels/month.vue +1 -3
  167. package/src/components/date-panel/panels/year.vue +1 -3
  168. package/src/components/date-picker/date-picker.vue +1 -3
  169. package/src/components/date-range-picker/date-range-picker.vue +1 -3
  170. package/src/components/dialog/dialog.vue +7 -24
  171. package/src/components/drawer/drawer.vue +3 -11
  172. package/src/components/empty/empty.vue +2 -7
  173. package/src/components/expression-editor/components/path-preview.vue +2 -6
  174. package/src/components/expression-editor/components/variable-picker.vue +1 -3
  175. package/src/components/expression-editor/expression-editor.vue +2 -6
  176. package/src/components/expression-editor/style.scss +1 -1
  177. package/src/components/file-picker/file-picker.vue +2 -7
  178. package/src/components/file-viewer/file-viewer.vue +4 -22
  179. package/src/components/file-viewer/previewers/pdf-previewer.vue +1 -5
  180. package/src/components/file-viewer/previewers/pdf-viewport-scroll.vue +1 -7
  181. package/src/components/file-viewer/previewers/pdf-zoom-bridge.vue +2 -7
  182. package/src/components/file-viewer/previewers/sheet-previewer.vue +4 -10
  183. package/src/components/float-button/float-button.vue +1 -3
  184. package/src/components/form/form-model.ts +9 -2
  185. package/src/components/form/form.vue +3 -13
  186. package/src/components/gantt-chart/gantt-chart.vue +1 -3
  187. package/src/components/grid/grid-item.vue +3 -9
  188. package/src/components/grid/grid.vue +5 -18
  189. package/src/components/grid-input/grid-input.vue +2 -6
  190. package/src/components/group-input/group-input.vue +2 -7
  191. package/src/components/icon/icon.vue +2 -6
  192. package/src/components/input/input.vue +2 -6
  193. package/src/components/layout/layout-resizer.vue +1 -3
  194. package/src/components/layout/layout.vue +3 -9
  195. package/src/components/list/list-item.vue +1 -3
  196. package/src/components/list/list.vue +2 -6
  197. package/src/components/loading/loading.vue +3 -9
  198. package/src/components/menu/menu-icon.vue +2 -6
  199. package/src/components/menu/menu-sub-collapsed.vue +2 -8
  200. package/src/components/menu/menu.vue +3 -9
  201. package/src/components/menu/style.scss +1 -1
  202. package/src/components/message/message-box.vue +3 -10
  203. package/src/components/message/message.vue +3 -9
  204. package/src/components/message-confirm/message-confirm.vue +2 -6
  205. package/src/components/multi-select/multi-select-option.vue +3 -9
  206. package/src/components/notification/notification.vue +3 -11
  207. package/src/components/number/number.vue +4 -14
  208. package/src/components/number-input/number-input.vue +7 -36
  209. package/src/components/number-range-input/number-range-input.vue +4 -17
  210. package/src/components/paginator/paginator.vue +7 -22
  211. package/src/components/palette/palette-alpha.vue +2 -6
  212. package/src/components/palette/palette-color-switch.vue +1 -3
  213. package/src/components/palette/palette-hue.vue +2 -6
  214. package/src/components/palette/palette-sv.vue +5 -17
  215. package/src/components/palette/palette.vue +2 -12
  216. package/src/components/pop-confirm/pop-confirm.vue +2 -6
  217. package/src/components/progress/progress.vue +2 -7
  218. package/src/components/progress-nodes/progress-nodes.vue +2 -7
  219. package/src/components/radio/radio.vue +2 -6
  220. package/src/components/radio-group/radio-group.vue +1 -3
  221. package/src/components/scroll/scroll-bar.vue +5 -17
  222. package/src/components/scroll/scroll.vue +5 -16
  223. package/src/components/slider/slider-thumb.vue +4 -12
  224. package/src/components/slider/slider.vue +3 -14
  225. package/src/components/steps/steps.vue +3 -10
  226. package/src/components/switch/switch.vue +2 -7
  227. package/src/components/table/table-body.vue +2 -8
  228. package/src/components/table/table-cell.vue +2 -7
  229. package/src/components/table/table-foot.vue +2 -9
  230. package/src/components/table-editor/table-editor.vue +1 -3
  231. package/src/components/tabs/tabs-horizontal.vue +2 -6
  232. package/src/components/tabs/tabs-vertical.vue +1 -3
  233. package/src/components/tabs/tabs.vue +1 -3
  234. package/src/components/tag/tag.vue +2 -6
  235. package/src/components/text/text.vue +3 -9
  236. package/src/components/textarea/textarea.vue +1 -3
  237. package/src/components/theme/group-item.vue +1 -3
  238. package/src/components/theme/group.vue +1 -3
  239. package/src/components/theme/theme.vue +6 -26
  240. package/src/components/tip/tip.vue +1 -3
  241. package/src/components/tree/tree-node.vue +1 -3
  242. package/src/components/tree/tree.vue +7 -30
  243. package/src/components/watermark/watermark.vue +4 -15
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","names":[],"sources":["../../../src/components/form/form.vue"],"sourcesContent":["<template>\n <u-grid\n tag=\"form\"\n ref=\"gridRef\"\n @submit.prevent\n :cols=\"cols || breakpointCols\"\n :class=\"[cls.b, bem.is('readonly', readonly)]\"\n >\n <template\n v-for=\"{ node, isFormItem, formItemProps, field, modelValue } of getSlotsNodes()\"\n :key=\"node.key\"\n >\n <component v-if=\"isFormItem || !field\" :is=\"node\" />\n\n <u-form-item v-else v-bind=\"formItemProps\">\n <component\n :is=\"node\"\n :model-value=\"modelValue ?? o(model?.data ?? {}).get(field)\"\n @update:model-value=\"handleUpdateValue(field, $event)\"\n />\n\n <div :class=\"cls.e('data-before')\" v-if=\"showInitialNode(field)\">\n <i :class=\"cls.e('changed-tag')\">变更前:</i>\n\n <component :is=\"node\" readonly :model-value=\"o(model?.initialData ?? {}).get(field)\" />\n </div>\n </u-form-item>\n </template>\n </u-grid>\n</template>\n\n<script lang=\"tsx\" setup generic=\"Model extends FormModel | DynamicFormModel\">\nimport { o } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { provideFormContext } from '@veltra/utils'\nimport { shallowRef, toRef } from 'vue'\n\nimport type { BreakCols, GridExposed, FormProps, _FormExposed } from '../../types'\nimport { UFormItem } from '../form-item'\nimport { UGrid } from '../grid'\nimport type { DynamicFormModel } from './dynamic-form-model'\nimport type { FormModel } from './form-model'\nimport { useNodeInterceptor } from './use-node-interceptor'\n\ndefineOptions({\n name: 'Form'\n})\n\nconst props = defineProps<FormProps<Model>>()\n\ndefineSlots<{\n default(props: {\n /** 表单数据 */\n data: Model['data']\n /** 表单模型 */\n model: Model\n }): any\n}>()\n\nconst cls = bem('form')\n\nconst breakpointCols: BreakCols = {\n xs: 1,\n md: 2,\n lg: 3,\n xl: 4,\n default: 4\n}\n\nprovideFormContext(props)\n\nconst { getSlotsNodes } = useNodeInterceptor({ props })\n\nfunction handleUpdateValue(field: string, value: any) {\n const { model } = props\n if (!model) return\n o(model.data).set(field, value)\n}\n\nfunction showInitialNode(field: string) {\n const { data, initialData } = props.model || {}\n\n const currentValue = o(data ?? {}).get(field)\n const initialValue = o(initialData ?? {}).get(field)\n const notEqual = !(initialValue === currentValue || (!initialValue && !currentValue))\n\n return props.showInitialData && notEqual\n}\n\nconst gridRef = shallowRef<GridExposed>()\n\ndefineExpose<_FormExposed>({\n el: toRef(() => gridRef.value?.el)\n})\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"form.js","names":[],"sources":["../../../src/components/form/form.vue"],"sourcesContent":["<template>\n <u-grid\n tag=\"form\"\n ref=\"gridRef\"\n @submit.prevent\n :cols=\"cols || breakpointCols\"\n :class=\"[cls.b, bem.is('readonly', readonly)]\"\n >\n <template\n v-for=\"{ node, isFormItem, formItemProps, field, modelValue } of getSlotsNodes()\"\n :key=\"node.key\"\n >\n <component v-if=\"isFormItem || !field\" :is=\"node\" />\n\n <u-form-item v-else v-bind=\"formItemProps\">\n <component\n :is=\"node\"\n :model-value=\"modelValue ?? o(model?.data ?? {}).get(field)\"\n @update:model-value=\"handleUpdateValue(field, $event)\"\n />\n\n <div :class=\"cls.e('data-before')\" v-if=\"showInitialNode(field)\">\n <i :class=\"cls.e('changed-tag')\">变更前:</i>\n\n <component :is=\"node\" readonly :model-value=\"o(model?.initialData ?? {}).get(field)\" />\n </div>\n </u-form-item>\n </template>\n </u-grid>\n</template>\n\n<script lang=\"tsx\" setup generic=\"Model extends FormModel | DynamicFormModel\">\nimport { o } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { provideFormContext } from '@veltra/utils'\nimport { shallowRef, toRef } from 'vue'\n\nimport type { BreakCols, GridExposed, FormProps, _FormExposed } from '../../types'\nimport { UFormItem } from '../form-item'\nimport { UGrid } from '../grid'\nimport type { DynamicFormModel } from './dynamic-form-model'\nimport type { FormModel } from './form-model'\nimport { useNodeInterceptor } from './use-node-interceptor'\n\ndefineOptions({ name: 'Form' })\n\nconst props = defineProps<FormProps<Model>>()\n\ndefineSlots<{\n default(props: {\n /** 表单数据 */\n data: Model['data']\n /** 表单模型 */\n model: Model\n }): any\n}>()\n\nconst cls = bem('form')\n\nconst breakpointCols: BreakCols = { xs: 1, md: 2, lg: 3, xl: 4, default: 4 }\n\nprovideFormContext(props)\n\nconst { getSlotsNodes } = useNodeInterceptor({ props })\n\nfunction handleUpdateValue(field: string, value: any) {\n const { model } = props\n if (!model) return\n o(model.data).set(field, value)\n}\n\nfunction showInitialNode(field: string) {\n const { data, initialData } = props.model || {}\n\n const currentValue = o(data ?? {}).get(field)\n const initialValue = o(initialData ?? {}).get(field)\n const notEqual = !(initialValue === currentValue || (!initialValue && !currentValue))\n\n return props.showInitialData && notEqual\n}\n\nconst gridRef = shallowRef<GridExposed>()\n\ndefineExpose<_FormExposed>({ el: toRef(() => gridRef.value?.el) })\n</script>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"form.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/form/form.vue"],"sourcesContent":["<template>\n <u-grid\n tag=\"form\"\n ref=\"gridRef\"\n @submit.prevent\n :cols=\"cols || breakpointCols\"\n :class=\"[cls.b, bem.is('readonly', readonly)]\"\n >\n <template\n v-for=\"{ node, isFormItem, formItemProps, field, modelValue } of getSlotsNodes()\"\n :key=\"node.key\"\n >\n <component v-if=\"isFormItem || !field\" :is=\"node\" />\n\n <u-form-item v-else v-bind=\"formItemProps\">\n <component\n :is=\"node\"\n :model-value=\"modelValue ?? o(model?.data ?? {}).get(field)\"\n @update:model-value=\"handleUpdateValue(field, $event)\"\n />\n\n <div :class=\"cls.e('data-before')\" v-if=\"showInitialNode(field)\">\n <i :class=\"cls.e('changed-tag')\">变更前:</i>\n\n <component :is=\"node\" readonly :model-value=\"o(model?.initialData ?? {}).get(field)\" />\n </div>\n </u-form-item>\n </template>\n </u-grid>\n</template>\n\n<script lang=\"tsx\" setup generic=\"Model extends FormModel | DynamicFormModel\">\nimport { o } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { provideFormContext } from '@veltra/utils'\nimport { shallowRef, toRef } from 'vue'\n\nimport type { BreakCols, GridExposed, FormProps, _FormExposed } from '../../types'\nimport { UFormItem } from '../form-item'\nimport { UGrid } from '../grid'\nimport type { DynamicFormModel } from './dynamic-form-model'\nimport type { FormModel } from './form-model'\nimport { useNodeInterceptor } from './use-node-interceptor'\n\ndefineOptions({\n name: 'Form'\n})\n\nconst props = defineProps<FormProps<Model>>()\n\ndefineSlots<{\n default(props: {\n /** 表单数据 */\n data: Model['data']\n /** 表单模型 */\n model: Model\n }): any\n}>()\n\nconst cls = bem('form')\n\nconst breakpointCols: BreakCols = {\n xs: 1,\n md: 2,\n lg: 3,\n xl: 4,\n default: 4\n}\n\nprovideFormContext(props)\n\nconst { getSlotsNodes } = useNodeInterceptor({ props })\n\nfunction handleUpdateValue(field: string, value: any) {\n const { model } = props\n if (!model) return\n o(model.data).set(field, value)\n}\n\nfunction showInitialNode(field: string) {\n const { data, initialData } = props.model || {}\n\n const currentValue = o(data ?? {}).get(field)\n const initialValue = o(initialData ?? {}).get(field)\n const notEqual = !(initialValue === currentValue || (!initialValue && !currentValue))\n\n return props.showInitialData && notEqual\n}\n\nconst gridRef = shallowRef<GridExposed>()\n\ndefineExpose<_FormExposed>({\n el: toRef(() => gridRef.value?.el)\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAgDA,MAAM,QAAQ;EAWd,MAAM,MAAM,IAAI,OAAM;EAEtB,MAAM,iBAA4B;GAChC,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACX;EAEA,mBAAmB,MAAK;EAExB,MAAM,EAAE,kBAAkB,mBAAmB,EAAE,OAAO,CAAA;EAEtD,SAAS,kBAAkB,OAAe,OAAY;GACpD,MAAM,EAAE,UAAU;GAClB,IAAI,CAAC,OAAO;GACZ,EAAE,MAAM,KAAK,CAAC,IAAI,OAAO,MAAK;;EAGhC,SAAS,gBAAgB,OAAe;GACtC,MAAM,EAAE,MAAM,gBAAgB,MAAM,SAAS,EAAC;GAE9C,MAAM,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,MAAK;GAC5C,MAAM,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC,IAAI,MAAK;GACnD,MAAM,WAAW,EAAE,iBAAiB,gBAAiB,CAAC,gBAAgB,CAAC;GAEvE,OAAO,MAAM,mBAAmB;;EAGlC,MAAM,UAAU,YAAwB;EAExC,SAA2B,EACzB,IAAI,YAAY,QAAQ,OAAO,GAAE,EAClC,CAAA;;uBA5FC,YA2BS,MAAA,UAAA,EAAA;IA1BP,KAAI;aACA;IAAJ,KAAI;IACH,UAAM,OAAA,OAAA,OAAA,KAAA,oBAAP,IAAe,CAAA,UAAA,CAAA;IACd,MAAM,QAAA,QAAQ;IACd,OAAK,eAAA,CAAG,MAAA,IAAG,CAAC,GAAG,MAAA,IAAG,CAAC,GAAE,YAAa,QAAA,SAAQ,CAAA,CAAA;;2BAGwC,EAAA,UAAA,KAAA,EADnF,mBAmBW,UAAA,MAAA,WAlBwD,MAAA,cAAa,EAAA,GAAA,EAArE,MAAM,YAAY,eAAe,OAAO,iBAAU;6DACrD,KAAK,KAAA,EAAA,CAEM,cAAU,CAAK,SAAA,WAAA,EAAhC,YAAoD,wBAAR,KAAI,EAAA,EAAA,KAAA,GAAA,CAAA,KAAA,WAAA,EAEhD,YAYc,MAAA,kBAAA,EAZd,WAYc;;;QAZc,cAAa,EAAA;6BAKrC,EAAA,WAAA,EAJF,YAIE,wBAHK,KAAI,EAAA;OACR,eAAa,cAAc,MAAA,EAAC,CAAC,QAAA,OAAO,QAAI,EAAA,CAAA,CAAQ,IAAI,MAAK;OACzD,wBAAkB,WAAE,kBAAkB,OAAO,OAAM;4DAGb,gBAAgB,MAAK,IAAA,WAAA,EAA9D,mBAIM,OAAA;;OAJA,OAAK,eAAE,MAAA,IAAG,CAAC,EAAC,cAAA,CAAA;UAChB,mBAAyC,KAAA,EAArC,OAAK,eAAE,MAAA,IAAG,CAAC,EAAC,cAAA,CAAA,EAAA,EAAiB,QAAI,EAAA,GAAA,WAAA,EAErC,YAAuF,wBAAvE,KAAI,EAAA;OAAE,UAAA;OAAU,eAAa,MAAA,EAAC,CAAC,QAAA,OAAO,eAAW,EAAA,CAAA,CAAQ,IAAI,MAAK"}
1
+ {"version":3,"file":"form.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/form/form.vue"],"sourcesContent":["<template>\n <u-grid\n tag=\"form\"\n ref=\"gridRef\"\n @submit.prevent\n :cols=\"cols || breakpointCols\"\n :class=\"[cls.b, bem.is('readonly', readonly)]\"\n >\n <template\n v-for=\"{ node, isFormItem, formItemProps, field, modelValue } of getSlotsNodes()\"\n :key=\"node.key\"\n >\n <component v-if=\"isFormItem || !field\" :is=\"node\" />\n\n <u-form-item v-else v-bind=\"formItemProps\">\n <component\n :is=\"node\"\n :model-value=\"modelValue ?? o(model?.data ?? {}).get(field)\"\n @update:model-value=\"handleUpdateValue(field, $event)\"\n />\n\n <div :class=\"cls.e('data-before')\" v-if=\"showInitialNode(field)\">\n <i :class=\"cls.e('changed-tag')\">变更前:</i>\n\n <component :is=\"node\" readonly :model-value=\"o(model?.initialData ?? {}).get(field)\" />\n </div>\n </u-form-item>\n </template>\n </u-grid>\n</template>\n\n<script lang=\"tsx\" setup generic=\"Model extends FormModel | DynamicFormModel\">\nimport { o } from '@cat-kit/core'\nimport { bem } from '@veltra/utils'\nimport { provideFormContext } from '@veltra/utils'\nimport { shallowRef, toRef } from 'vue'\n\nimport type { BreakCols, GridExposed, FormProps, _FormExposed } from '../../types'\nimport { UFormItem } from '../form-item'\nimport { UGrid } from '../grid'\nimport type { DynamicFormModel } from './dynamic-form-model'\nimport type { FormModel } from './form-model'\nimport { useNodeInterceptor } from './use-node-interceptor'\n\ndefineOptions({ name: 'Form' })\n\nconst props = defineProps<FormProps<Model>>()\n\ndefineSlots<{\n default(props: {\n /** 表单数据 */\n data: Model['data']\n /** 表单模型 */\n model: Model\n }): any\n}>()\n\nconst cls = bem('form')\n\nconst breakpointCols: BreakCols = { xs: 1, md: 2, lg: 3, xl: 4, default: 4 }\n\nprovideFormContext(props)\n\nconst { getSlotsNodes } = useNodeInterceptor({ props })\n\nfunction handleUpdateValue(field: string, value: any) {\n const { model } = props\n if (!model) return\n o(model.data).set(field, value)\n}\n\nfunction showInitialNode(field: string) {\n const { data, initialData } = props.model || {}\n\n const currentValue = o(data ?? {}).get(field)\n const initialValue = o(initialData ?? {}).get(field)\n const notEqual = !(initialValue === currentValue || (!initialValue && !currentValue))\n\n return props.showInitialData && notEqual\n}\n\nconst gridRef = shallowRef<GridExposed>()\n\ndefineExpose<_FormExposed>({ el: toRef(() => gridRef.value?.el) })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EA8CA,MAAM,QAAQ;EAWd,MAAM,MAAM,IAAI,OAAM;EAEtB,MAAM,iBAA4B;GAAE,IAAI;GAAG,IAAI;GAAG,IAAI;GAAG,IAAI;GAAG,SAAS;GAAE;EAE3E,mBAAmB,MAAK;EAExB,MAAM,EAAE,kBAAkB,mBAAmB,EAAE,OAAO,CAAA;EAEtD,SAAS,kBAAkB,OAAe,OAAY;GACpD,MAAM,EAAE,UAAU;GAClB,IAAI,CAAC,OAAO;GACZ,EAAE,MAAM,KAAK,CAAC,IAAI,OAAO,MAAK;;EAGhC,SAAS,gBAAgB,OAAe;GACtC,MAAM,EAAE,MAAM,gBAAgB,MAAM,SAAS,EAAC;GAE9C,MAAM,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,MAAK;GAC5C,MAAM,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC,IAAI,MAAK;GACnD,MAAM,WAAW,EAAE,iBAAiB,gBAAiB,CAAC,gBAAgB,CAAC;GAEvE,OAAO,MAAM,mBAAmB;;EAGlC,MAAM,UAAU,YAAwB;EAExC,SAA2B,EAAE,IAAI,YAAY,QAAQ,OAAO,GAAE,EAAG,CAAA;;uBAlF/D,YA2BS,MAAA,UAAA,EAAA;IA1BP,KAAI;aACA;IAAJ,KAAI;IACH,UAAM,OAAA,OAAA,OAAA,KAAA,oBAAP,IAAe,CAAA,UAAA,CAAA;IACd,MAAM,QAAA,QAAQ;IACd,OAAK,eAAA,CAAG,MAAA,IAAG,CAAC,GAAG,MAAA,IAAG,CAAC,GAAE,YAAa,QAAA,SAAQ,CAAA,CAAA;;2BAGwC,EAAA,UAAA,KAAA,EADnF,mBAmBW,UAAA,MAAA,WAlBwD,MAAA,cAAa,EAAA,GAAA,EAArE,MAAM,YAAY,eAAe,OAAO,iBAAU;6DACrD,KAAK,KAAA,EAAA,CAEM,cAAU,CAAK,SAAA,WAAA,EAAhC,YAAoD,wBAAR,KAAI,EAAA,EAAA,KAAA,GAAA,CAAA,KAAA,WAAA,EAEhD,YAYc,MAAA,kBAAA,EAZd,WAYc;;;QAZc,cAAa,EAAA;6BAKrC,EAAA,WAAA,EAJF,YAIE,wBAHK,KAAI,EAAA;OACR,eAAa,cAAc,MAAA,EAAC,CAAC,QAAA,OAAO,QAAI,EAAA,CAAA,CAAQ,IAAI,MAAK;OACzD,wBAAkB,WAAE,kBAAkB,OAAO,OAAM;4DAGb,gBAAgB,MAAK,IAAA,WAAA,EAA9D,mBAIM,OAAA;;OAJA,OAAK,eAAE,MAAA,IAAG,CAAC,EAAC,cAAA,CAAA;UAChB,mBAAyC,KAAA,EAArC,OAAK,eAAE,MAAA,IAAG,CAAC,EAAC,cAAA,CAAA,EAAA,EAAiB,QAAI,EAAA,GAAA,WAAA,EAErC,YAAuF,wBAAvE,KAAI,EAAA;OAAE,UAAA;OAAU,eAAa,MAAA,EAAC,CAAC,QAAA,OAAO,eAAW,EAAA,CAAA,CAAQ,IAAI,MAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"gantt-chart.js","names":[],"sources":["../../../src/components/gantt-chart/gantt-chart.vue"],"sourcesContent":["<template>\n <div :class=\"cls.b\"></div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\n\nimport type { GanttChartProps } from '../../types'\n\ndefineOptions({\n name: 'GanttChart'\n})\n\ndefineProps<GanttChartProps>()\n\nconst cls = bem('gantt-chart')\n</script>\n"],"mappings":";;;;;;;;EAeA,MAAM,MAAM,IAAI,cAAa;;uBAd3B,mBAA0B,OAAA,EAApB,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,EAAA,EAAA,MAAA,EAAA"}
1
+ {"version":3,"file":"gantt-chart.js","names":[],"sources":["../../../src/components/gantt-chart/gantt-chart.vue"],"sourcesContent":["<template>\n <div :class=\"cls.b\"></div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\n\nimport type { GanttChartProps } from '../../types'\n\ndefineOptions({ name: 'GanttChart' })\n\ndefineProps<GanttChartProps>()\n\nconst cls = bem('gantt-chart')\n</script>\n"],"mappings":";;;;;;;;EAaA,MAAM,MAAM,IAAI,cAAa;;uBAZ3B,mBAA0B,OAAA,EAApB,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,EAAA,EAAA,MAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"grid-item.js","names":[],"sources":["../../../src/components/grid/grid-item.vue"],"sourcesContent":["<template>\n <component :is=\"tag\" :style=\"style\" :class=\"cls.b\" v-if=\"span !== 0\">\n <slot />\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, inject, type CSSProperties, watch } from 'vue'\n\nimport type { GridItemProps } from '../../types'\nimport { GridDIKey } from './di'\n\ndefineOptions({\n name: 'GridItem'\n})\n\nconst props = withDefaults(defineProps<GridItemProps>(), {\n tag: 'div'\n})\n\nconst cls = bem('grid-item')\n\nconst { currentBreakpoint, gridItemsProps } = inject(GridDIKey) ?? {}\n\nif (!currentBreakpoint) {\n console.error('GridItem组件仅能在Grid组件中使用')\n}\n\nconst span = computed<number | 'full'>(() => {\n let { span } = props\n if (span === undefined) return 1\n if (span === 'full') return 'full'\n\n if (typeof span === 'number') return span\n\n const breakpoint = currentBreakpoint?.value\n\n if (!breakpoint) return span.default\n return span[breakpoint.name] ?? span.default\n})\n\nconst style = computed<CSSProperties>(() => {\n return {\n gridColumn: span.value === 'full' ? '1 / -1' : `span ${span.value}`\n }\n})\n\nwatch(\n () => props.span,\n (span) => {\n if (typeof span === 'object') {\n gridItemsProps?.add(props)\n } else {\n gridItemsProps?.delete(props)\n }\n },\n { immediate: true }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;EAiBA,MAAM,QAAQ;EAId,MAAM,MAAM,IAAI,YAAW;EAE3B,MAAM,EAAE,mBAAmB,mBAAmB,OAAO,UAAS,IAAK,EAAC;EAEpE,IAAI,CAAC,mBACH,QAAQ,MAAM,yBAAwB;EAGxC,MAAM,OAAO,eAAgC;GAC3C,IAAI,EAAE,SAAS;GACf,IAAI,SAAS,KAAA,GAAW,OAAO;GAC/B,IAAI,SAAS,QAAQ,OAAO;GAE5B,IAAI,OAAO,SAAS,UAAU,OAAO;GAErC,MAAM,aAAa,mBAAmB;GAEtC,IAAI,CAAC,YAAY,OAAO,KAAK;GAC7B,OAAO,KAAK,WAAW,SAAS,KAAK;IACtC;EAED,MAAM,QAAQ,eAA8B;GAC1C,OAAO,EACL,YAAY,KAAK,UAAU,SAAS,WAAW,QAAQ,KAAK,SAC9D;IACD;EAED,YACQ,MAAM,OACX,SAAS;GACR,IAAI,OAAO,SAAS,UAClB,gBAAgB,IAAI,MAAK;QAEzB,gBAAgB,OAAO,MAAK;KAGhC,EAAE,WAAW,MACf,CAAA;;UAzD2D,KAAA,UAAI,KAAA,WAAA,EAA7D,YAEY,wBAFI,QAAA,IAAG,EAAA;;IAAG,OAAK,eAAE,MAAA,MAAK;IAAG,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;;2BACvC,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"grid-item.js","names":[],"sources":["../../../src/components/grid/grid-item.vue"],"sourcesContent":["<template>\n <component :is=\"tag\" :style=\"style\" :class=\"cls.b\" v-if=\"span !== 0\">\n <slot />\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, inject, type CSSProperties, watch } from 'vue'\n\nimport type { GridItemProps } from '../../types'\nimport { GridDIKey } from './di'\n\ndefineOptions({ name: 'GridItem' })\n\nconst props = withDefaults(defineProps<GridItemProps>(), { tag: 'div' })\n\nconst cls = bem('grid-item')\n\nconst { currentBreakpoint, gridItemsProps } = inject(GridDIKey) ?? {}\n\nif (!currentBreakpoint) {\n console.error('GridItem组件仅能在Grid组件中使用')\n}\n\nconst span = computed<number | 'full'>(() => {\n let { span } = props\n if (span === undefined) return 1\n if (span === 'full') return 'full'\n\n if (typeof span === 'number') return span\n\n const breakpoint = currentBreakpoint?.value\n\n if (!breakpoint) return span.default\n return span[breakpoint.name] ?? span.default\n})\n\nconst style = computed<CSSProperties>(() => {\n return { gridColumn: span.value === 'full' ? '1 / -1' : `span ${span.value}` }\n})\n\nwatch(\n () => props.span,\n (span) => {\n if (typeof span === 'object') {\n gridItemsProps?.add(props)\n } else {\n gridItemsProps?.delete(props)\n }\n },\n { immediate: true }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;EAeA,MAAM,QAAQ;EAEd,MAAM,MAAM,IAAI,YAAW;EAE3B,MAAM,EAAE,mBAAmB,mBAAmB,OAAO,UAAS,IAAK,EAAC;EAEpE,IAAI,CAAC,mBACH,QAAQ,MAAM,yBAAwB;EAGxC,MAAM,OAAO,eAAgC;GAC3C,IAAI,EAAE,SAAS;GACf,IAAI,SAAS,KAAA,GAAW,OAAO;GAC/B,IAAI,SAAS,QAAQ,OAAO;GAE5B,IAAI,OAAO,SAAS,UAAU,OAAO;GAErC,MAAM,aAAa,mBAAmB;GAEtC,IAAI,CAAC,YAAY,OAAO,KAAK;GAC7B,OAAO,KAAK,WAAW,SAAS,KAAK;IACtC;EAED,MAAM,QAAQ,eAA8B;GAC1C,OAAO,EAAE,YAAY,KAAK,UAAU,SAAS,WAAW,QAAQ,KAAK,SAAQ;IAC9E;EAED,YACQ,MAAM,OACX,SAAS;GACR,IAAI,OAAO,SAAS,UAClB,gBAAgB,IAAI,MAAK;QAEzB,gBAAgB,OAAO,MAAK;KAGhC,EAAE,WAAW,MACf,CAAA;;UAnD2D,KAAA,UAAI,KAAA,WAAA,EAA7D,YAEY,wBAFI,QAAA,IAAG,EAAA;;IAAG,OAAK,eAAE,MAAA,MAAK;IAAG,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;;2BACvC,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","names":[],"sources":["../../../src/components/grid/grid.vue"],"sourcesContent":["<template>\n <component :is=\"tag\" :class=\"cls.b\" ref=\"grid\">\n <slot />\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem, removeStyles, setStyles, withUnit } from '@veltra/utils'\nimport { type CSSProperties, provide, watch, useTemplateRef, computed } from 'vue'\n\nimport type { GridProps, GridEmits, _GridExposed } from '../../types'\nimport { getBreakpointCols } from './breakpoint'\nimport { GridDIKey } from './di'\nimport { useResponsive } from './use-responsive'\n\ndefineOptions({\n name: 'Grid'\n})\n\nconst props = withDefaults(defineProps<GridProps>(), {\n tag: 'div'\n})\n\nconst emit = defineEmits<GridEmits>()\n\nconst cls = bem('grid')\n\nconst gridRef = useTemplateRef<HTMLElement>('grid')\n\nconst { currentBreakpoint, gridItemsProps } = useResponsive({\n props,\n emit,\n gridRef\n})\n\nconst styles = computed(() => {\n const { gap, cols } = props\n const result: CSSProperties = {}\n\n // 间距\n if (typeof gap === 'number') {\n if (gap > 0) {\n result.rowGap = result.columnGap = gap + 'px'\n }\n } else if (typeof gap === 'string') {\n const [rowGap, columnGap] = gap.split(' ')\n result.columnGap = withUnit(columnGap || rowGap, 'px')\n result.rowGap = withUnit(rowGap, 'px')\n }\n\n const breakpoint = currentBreakpoint.value\n\n switch (typeof cols) {\n case 'number':\n result.gridTemplateColumns = `repeat(${cols}, minmax(0px, 1fr))`\n break\n case 'function':\n if (breakpoint) {\n result.gridTemplateColumns = `repeat(${cols(breakpoint)}, minmax(0px, 1fr))`\n }\n break\n case 'object':\n if (breakpoint) {\n const amount = getBreakpointCols(cols, breakpoint)\n result.gridTemplateColumns = `repeat(${amount}, minmax(0px, 1fr))`\n }\n }\n\n return result\n})\n\nwatch([styles, gridRef], ([styles, dom]) => {\n if (!dom) return\n\n // 重置并移除样式\n removeStyles(dom, ['gridTemplateColumns', 'columnGap', 'rowGap'])\n setStyles(dom, styles)\n})\n\nprovide(GridDIKey, {\n currentBreakpoint,\n gridItemsProps\n})\n\ndefineExpose<_GridExposed>({\n el: gridRef\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAmBA,MAAM,QAAQ;EAId,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,OAAM;EAEtB,MAAM,UAAU,eAA4B,OAAM;EAElD,MAAM,EAAE,mBAAmB,mBAAmB,cAAc;GAC1D;GACA;GACA;GACD,CAAA;EAsCD,MAAM,CApCS,eAAe;GAC5B,MAAM,EAAE,KAAK,SAAS;GACtB,MAAM,SAAwB,EAAC;GAG/B,IAAI,OAAO,QAAQ;QACb,MAAM,GACR,OAAO,SAAS,OAAO,YAAY,MAAM;UAEtC,IAAI,OAAO,QAAQ,UAAU;IAClC,MAAM,CAAC,QAAQ,aAAa,IAAI,MAAM,IAAG;IACzC,OAAO,YAAY,SAAS,aAAa,QAAQ,KAAI;IACrD,OAAO,SAAS,SAAS,QAAQ,KAAI;;GAGvC,MAAM,aAAa,kBAAkB;GAErC,QAAQ,OAAO,MAAf;IACE,KAAK;KACH,OAAO,sBAAsB,UAAU,KAAK;KAC5C;IACF,KAAK;KACH,IAAI,YACF,OAAO,sBAAsB,UAAU,KAAK,WAAU,CAAE;KAE1D;IACF,KAAK,UACH,IAAI,YAEF,OAAO,sBAAsB,UADd,kBAAkB,MAAM,WACA,CAAO;;GAIpD,OAAO;IAGF,EAAQ,QAAO,GAAI,CAAC,QAAQ,SAAS;GAC1C,IAAI,CAAC,KAAK;GAGV,aAAa,KAAK;IAAC;IAAuB;IAAa;IAAS,CAAA;GAChE,UAAU,KAAK,OAAM;IACtB;EAED,QAAQ,WAAW;GACjB;GACA;GACD,CAAA;EAED,SAA2B,EACzB,IAAI,SACL,CAAA;;uBArFC,YAEY,wBAFI,QAAA,IAAG,EAAA;IAAG,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAE,KAAI;;2BAC9B,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"grid.js","names":[],"sources":["../../../src/components/grid/grid.vue"],"sourcesContent":["<template>\n <component :is=\"tag\" :class=\"cls.b\" ref=\"grid\">\n <slot />\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem, removeStyles, setStyles, withUnit } from '@veltra/utils'\nimport { type CSSProperties, provide, watch, useTemplateRef, computed } from 'vue'\n\nimport type { GridProps, GridEmits, _GridExposed } from '../../types'\nimport { getBreakpointCols } from './breakpoint'\nimport { GridDIKey } from './di'\nimport { useResponsive } from './use-responsive'\n\ndefineOptions({ name: 'Grid' })\n\nconst props = withDefaults(defineProps<GridProps>(), { tag: 'div' })\n\nconst emit = defineEmits<GridEmits>()\n\nconst cls = bem('grid')\n\nconst gridRef = useTemplateRef<HTMLElement>('grid')\n\nconst { currentBreakpoint, gridItemsProps } = useResponsive({ props, emit, gridRef })\n\nconst styles = computed(() => {\n const { gap, cols } = props\n const result: CSSProperties = {}\n\n // 间距\n if (typeof gap === 'number') {\n if (gap > 0) {\n result.rowGap = result.columnGap = gap + 'px'\n }\n } else if (typeof gap === 'string') {\n const [rowGap, columnGap] = gap.split(' ')\n result.columnGap = withUnit(columnGap || rowGap, 'px')\n result.rowGap = withUnit(rowGap, 'px')\n }\n\n const breakpoint = currentBreakpoint.value\n\n switch (typeof cols) {\n case 'number':\n result.gridTemplateColumns = `repeat(${cols}, minmax(0px, 1fr))`\n break\n case 'function':\n if (breakpoint) {\n result.gridTemplateColumns = `repeat(${cols(breakpoint)}, minmax(0px, 1fr))`\n }\n break\n case 'object':\n if (breakpoint) {\n const amount = getBreakpointCols(cols, breakpoint)\n result.gridTemplateColumns = `repeat(${amount}, minmax(0px, 1fr))`\n }\n }\n\n return result\n})\n\nwatch([styles, gridRef], ([styles, dom]) => {\n if (!dom) return\n\n // 重置并移除样式\n removeStyles(dom, ['gridTemplateColumns', 'columnGap', 'rowGap'])\n setStyles(dom, styles)\n})\n\nprovide(GridDIKey, { currentBreakpoint, gridItemsProps })\n\ndefineExpose<_GridExposed>({ el: gridRef })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAiBA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,OAAM;EAEtB,MAAM,UAAU,eAA4B,OAAM;EAElD,MAAM,EAAE,mBAAmB,mBAAmB,cAAc;GAAE;GAAO;GAAM;GAAS,CAAA;EAsCpF,MAAM,CApCS,eAAe;GAC5B,MAAM,EAAE,KAAK,SAAS;GACtB,MAAM,SAAwB,EAAC;GAG/B,IAAI,OAAO,QAAQ;QACb,MAAM,GACR,OAAO,SAAS,OAAO,YAAY,MAAM;UAEtC,IAAI,OAAO,QAAQ,UAAU;IAClC,MAAM,CAAC,QAAQ,aAAa,IAAI,MAAM,IAAG;IACzC,OAAO,YAAY,SAAS,aAAa,QAAQ,KAAI;IACrD,OAAO,SAAS,SAAS,QAAQ,KAAI;;GAGvC,MAAM,aAAa,kBAAkB;GAErC,QAAQ,OAAO,MAAf;IACE,KAAK;KACH,OAAO,sBAAsB,UAAU,KAAK;KAC5C;IACF,KAAK;KACH,IAAI,YACF,OAAO,sBAAsB,UAAU,KAAK,WAAU,CAAE;KAE1D;IACF,KAAK,UACH,IAAI,YAEF,OAAO,sBAAsB,UADd,kBAAkB,MAAM,WACA,CAAO;;GAIpD,OAAO;IAGF,EAAQ,QAAO,GAAI,CAAC,QAAQ,SAAS;GAC1C,IAAI,CAAC,KAAK;GAGV,aAAa,KAAK;IAAC;IAAuB;IAAa;IAAS,CAAA;GAChE,UAAU,KAAK,OAAM;IACtB;EAED,QAAQ,WAAW;GAAE;GAAmB;GAAgB,CAAA;EAExD,SAA2B,EAAE,IAAI,SAAS,CAAA;;uBAxExC,YAEY,wBAFI,QAAA,IAAG,EAAA;IAAG,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAE,KAAI;;2BAC9B,CAAR,WAAQ,KAAA,QAAA,UAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"grid-input.js","names":[],"sources":["../../../src/components/grid-input/grid-input.vue"],"sourcesContent":["<template>\n <ul :class=\"[cls.b, cls.m(size)]\">\n <li\n v-for=\"(_, index) in length\"\n :key=\"index\"\n tabindex=\"0\"\n @keydown=\"onKeydown($event, valueArray[index]!, index)\"\n @focus=\"focus(index)\"\n @blur=\"index === position && (blur = true)\"\n ref=\"items\"\n :class=\"[cls.e('item'), bem.is('focus', index === position && !blur)]\"\n >\n <span :class=\"cls.em('item', 'text')\" v-if=\"valueArray[index]\">\n {{ valueArray[index] }}\n </span>\n\n <span :class=\"cls.em('item', 'cursor')\" v-else-if=\"index === position\"></span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { computed, ref, getCurrentInstance } from 'vue'\n\nimport type { GridInputProps, GridInputEmits, GridInputExposed } from '../../types'\n\ndefineOptions({\n name: 'GridInput'\n})\n\nconst emit = defineEmits<GridInputEmits>()\n\nconst props = withDefaults(defineProps<GridInputProps>(), {\n length: 6,\n zero: false,\n separator: '-'\n})\n\nconst { size } = useFallbackProps([props], {\n size: 'default'\n})\n\nconst cls = bem('grid-input')\n\nconst _numberReg = computed(() => (props.zero ? /^[0-9]$/ : /^[1-9]$/))\n\nconst valueArray = ref<string[]>([])\n\nconst position = ref<number>(-1)\n\nconst blur = ref<boolean>(false)\n\nconst instance = getCurrentInstance()\n\nconst focus = async (index?: number) => {\n if (index === undefined) {\n focus(position.value)\n return\n }\n if (index !== 0 && index > valueArray.value.length) {\n index = valueArray.value.length\n }\n position.value = index\n const items = (instance?.refs as { items?: unknown })?.items as any\n let dom = items?.[index]\n dom?.focus()\n blur.value = false\n}\n\nconst changeValue = (value: string, index: number) => {\n if (position.value === props.length) return\n const currentValue = valueArray.value[index]\n\n if (currentValue) {\n valueArray.value.splice(index, 1, value)\n } else if (index === valueArray.value.length) {\n valueArray.value.push(value)\n } else {\n return\n }\n position.value++\n focus()\n\n emit('input', valueArray.value.filter((v) => v).join(props.separator))\n}\n\nconst baseOperation = {\n Backspace: (value: string, index: number) => {\n if (value) {\n valueArray.value.splice(index, 1)\n } else if (index - 1 >= 0) {\n valueArray.value.splice(index - 1, 1)\n }\n if (index !== 0) {\n focus(index - 1)\n }\n emit('input', valueArray.value.filter((v) => v).join(props.separator))\n },\n ArrowLeft: (value: string, index: number) => {\n if (index === 0) return\n focus(index - 1)\n },\n ArrowRight: (value: string, index: number) => {\n if (index === valueArray.value.length) return\n focus(index + 1)\n }\n}\n\nconst onKeydown = (e: any, value: string, index: number) => {\n if (_numberReg.value.test(e.key)) {\n changeValue(e.key, index)\n return\n }\n baseOperation[e.key](value, index)\n}\n\nconst clear = () => {\n while (valueArray.value.length) {\n valueArray.value.pop()\n }\n}\n\ndefineExpose<GridInputExposed>({ clear })\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"grid-input.js","names":[],"sources":["../../../src/components/grid-input/grid-input.vue"],"sourcesContent":["<template>\n <ul :class=\"[cls.b, cls.m(size)]\">\n <li\n v-for=\"(_, index) in length\"\n :key=\"index\"\n tabindex=\"0\"\n @keydown=\"onKeydown($event, valueArray[index]!, index)\"\n @focus=\"focus(index)\"\n @blur=\"index === position && (blur = true)\"\n ref=\"items\"\n :class=\"[cls.e('item'), bem.is('focus', index === position && !blur)]\"\n >\n <span :class=\"cls.em('item', 'text')\" v-if=\"valueArray[index]\">\n {{ valueArray[index] }}\n </span>\n\n <span :class=\"cls.em('item', 'cursor')\" v-else-if=\"index === position\"></span>\n </li>\n </ul>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { computed, ref, getCurrentInstance } from 'vue'\n\nimport type { GridInputProps, GridInputEmits, GridInputExposed } from '../../types'\n\ndefineOptions({ name: 'GridInput' })\n\nconst emit = defineEmits<GridInputEmits>()\n\nconst props = withDefaults(defineProps<GridInputProps>(), {\n length: 6,\n zero: false,\n separator: '-'\n})\n\nconst { size } = useFallbackProps([props], { size: 'default' })\n\nconst cls = bem('grid-input')\n\nconst _numberReg = computed(() => (props.zero ? /^[0-9]$/ : /^[1-9]$/))\n\nconst valueArray = ref<string[]>([])\n\nconst position = ref<number>(-1)\n\nconst blur = ref<boolean>(false)\n\nconst instance = getCurrentInstance()\n\nconst focus = async (index?: number) => {\n if (index === undefined) {\n focus(position.value)\n return\n }\n if (index !== 0 && index > valueArray.value.length) {\n index = valueArray.value.length\n }\n position.value = index\n const items = (instance?.refs as { items?: unknown })?.items as any\n let dom = items?.[index]\n dom?.focus()\n blur.value = false\n}\n\nconst changeValue = (value: string, index: number) => {\n if (position.value === props.length) return\n const currentValue = valueArray.value[index]\n\n if (currentValue) {\n valueArray.value.splice(index, 1, value)\n } else if (index === valueArray.value.length) {\n valueArray.value.push(value)\n } else {\n return\n }\n position.value++\n focus()\n\n emit('input', valueArray.value.filter((v) => v).join(props.separator))\n}\n\nconst baseOperation = {\n Backspace: (value: string, index: number) => {\n if (value) {\n valueArray.value.splice(index, 1)\n } else if (index - 1 >= 0) {\n valueArray.value.splice(index - 1, 1)\n }\n if (index !== 0) {\n focus(index - 1)\n }\n emit('input', valueArray.value.filter((v) => v).join(props.separator))\n },\n ArrowLeft: (value: string, index: number) => {\n if (index === 0) return\n focus(index - 1)\n },\n ArrowRight: (value: string, index: number) => {\n if (index === valueArray.value.length) return\n focus(index + 1)\n }\n}\n\nconst onKeydown = (e: any, value: string, index: number) => {\n if (_numberReg.value.test(e.key)) {\n changeValue(e.key, index)\n return\n }\n baseOperation[e.key](value, index)\n}\n\nconst clear = () => {\n while (valueArray.value.length) {\n valueArray.value.pop()\n }\n}\n\ndefineExpose<GridInputExposed>({ clear })\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"group-input.js","names":[],"sources":["../../../src/components/group-input/group-input.vue"],"sourcesContent":["<template>\n <ul :class=\"[cls.b, cls.m(size)]\" v-if=\"!readonly\">\n <li v-if=\"isEmpty && creatable\">\n <u-button style=\"width: 100%\" :icon=\"Plus\" @click=\"handleAdd(0)\" :size=\"size\">\n 新增\n </u-button>\n </li>\n <li v-for=\"(item, index) of items\" :key=\"item.id\" :class=\"cls.e('item')\" :style=\"itemStyle\">\n <slot v-bind=\"{ item: item.data, index }\" />\n <span :class=\"cls.e('actions')\">\n <u-button\n :icon=\"Minus\"\n circle\n :disabled=\"disabled\"\n :size=\"size\"\n @click=\"handleRemove(index)\"\n />\n <u-button\n :icon=\"Plus\"\n circle\n :disabled=\"disabled\"\n :size=\"size\"\n type=\"primary\"\n @click=\"handleAdd(index)\"\n />\n </span>\n </li>\n </ul>\n\n <template v-else-if=\"items?.length\">\n <ul :class=\"[cls.b, cls.m(size)]\">\n <li v-for=\"item of items\" :key=\"item.id\" :class=\"cls.e('item')\">\n <span v-for=\"v in item.data\">{{ v }}</span>\n </li>\n </ul>\n </template>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup generic=\"GroupItem extends Record<string, any>\">\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { Minus, Plus } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { GroupInputEmits, GroupInputProps } from '../../types'\nimport { UButton } from '../button'\nimport { useGroupItems } from './use-group-items'\n\ndefineOptions({\n name: 'GroupInput'\n})\n\nconst props = withDefaults(defineProps<GroupInputProps<GroupItem>>(), {\n modelValue: () => [],\n disabled: undefined,\n readonly: undefined,\n creatable: true\n})\n\nconst emit = defineEmits<GroupInputEmits>()\n\nconst cls = bem('group-input')\n\nconst { formProps } = injectFormContext()\nconst { disabled, size, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst { items, createItem, runByEvent } = useGroupItems({\n props,\n emit\n})\n\nconst isEmpty = computed(() => {\n return !items.value.length\n})\n\nfunction handleAdd(index: number) {\n runByEvent(() => {\n items.value = [\n ...items.value.slice(0, index + 1),\n createItem({}),\n ...items.value.slice(index + 1)\n ]\n })\n}\n\nfunction handleRemove(index: number) {\n runByEvent(() => {\n items.value = [...items.value.slice(0, index), ...items.value.slice(index + 1)]\n })\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"group-input.js","names":[],"sources":["../../../src/components/group-input/group-input.vue"],"sourcesContent":["<template>\n <ul :class=\"[cls.b, cls.m(size)]\" v-if=\"!readonly\">\n <li v-if=\"isEmpty && creatable\">\n <u-button style=\"width: 100%\" :icon=\"Plus\" @click=\"handleAdd(0)\" :size=\"size\">\n 新增\n </u-button>\n </li>\n <li v-for=\"(item, index) of items\" :key=\"item.id\" :class=\"cls.e('item')\" :style=\"itemStyle\">\n <slot v-bind=\"{ item: item.data, index }\" />\n <span :class=\"cls.e('actions')\">\n <u-button\n :icon=\"Minus\"\n circle\n :disabled=\"disabled\"\n :size=\"size\"\n @click=\"handleRemove(index)\"\n />\n <u-button\n :icon=\"Plus\"\n circle\n :disabled=\"disabled\"\n :size=\"size\"\n type=\"primary\"\n @click=\"handleAdd(index)\"\n />\n </span>\n </li>\n </ul>\n\n <template v-else-if=\"items?.length\">\n <ul :class=\"[cls.b, cls.m(size)]\">\n <li v-for=\"item of items\" :key=\"item.id\" :class=\"cls.e('item')\">\n <span v-for=\"v in item.data\">{{ v }}</span>\n </li>\n </ul>\n </template>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup generic=\"GroupItem extends Record<string, any>\">\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { Minus, Plus } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { GroupInputEmits, GroupInputProps } from '../../types'\nimport { UButton } from '../button'\nimport { useGroupItems } from './use-group-items'\n\ndefineOptions({ name: 'GroupInput' })\n\nconst props = withDefaults(defineProps<GroupInputProps<GroupItem>>(), {\n modelValue: () => [],\n disabled: undefined,\n readonly: undefined,\n creatable: true\n})\n\nconst emit = defineEmits<GroupInputEmits>()\n\nconst cls = bem('group-input')\n\nconst { formProps } = injectFormContext()\nconst { disabled, size, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst { items, createItem, runByEvent } = useGroupItems({ props, emit })\n\nconst isEmpty = computed(() => {\n return !items.value.length\n})\n\nfunction handleAdd(index: number) {\n runByEvent(() => {\n items.value = [\n ...items.value.slice(0, index + 1),\n createItem({}),\n ...items.value.slice(index + 1)\n ]\n })\n}\n\nfunction handleRemove(index: number) {\n runByEvent(() => {\n items.value = [...items.value.slice(0, index), ...items.value.slice(index + 1)]\n })\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,cAAa;EAE7B,MAAM,EAAE,cAAc,mBAAkB;EACxC,MAAM,EAAE,UAAU,MAAM,aAAa,qBAAqB,CAAC,aAAa,EAAC,EAAG,MAAK,EAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;GACX,CAAA;EAED,MAAM,EAAE,OAAO,YAAY,eAAe,cAAc;GAAE;GAAO;GAAM,CAAA;EAEvE,MAAM,UAAU,eAAe;GAC7B,OAAO,CAAC,MAAM,MAAM;IACrB;EAED,SAAS,UAAU,OAAe;GAChC,iBAAiB;IACf,MAAM,QAAQ;KACZ,GAAG,MAAM,MAAM,MAAM,GAAG,QAAQ,EAAC;KACjC,WAAW,EAAE,CAAA;KACb,GAAG,MAAM,MAAM,MAAM,QAAQ,EAAC;KAChC;KACD;;EAGH,SAAS,aAAa,OAAe;GACnC,iBAAiB;IACf,MAAM,QAAQ,CAAC,GAAG,MAAM,MAAM,MAAM,GAAG,MAAK,EAAG,GAAG,MAAM,MAAM,MAAM,QAAQ,EAAE,CAAA;KAC/E;;;WA3FwC,MAAA,SAAA,IAAA,WAAA,EAAzC,mBA0BK,MAAA;;IA1BA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA;OAClB,QAAA,SAAW,QAAA,aAAA,WAAA,EAArB,mBAIK,MAAA,YAAA,CAHH,YAEW,MAAA,YAAA,EAAA;IAFD,OAAA,EAAA,SAAA,QAAA;IAAqB,MAAM,MAAA,KAAA;IAAO,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,UAAS,EAAA;IAAM,MAAM,MAAA,KAAA;;2BAExE,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAF8E,QAE9E,GAAA,CAAA,EAAA,CAAA;;oFAEF,mBAmBK,UAAA,MAAA,WAnBuB,MAAA,MAAA,GAAhB,MAAM,UAAK;wBAAvB,mBAmBK,MAAA;KAnB+B,KAAK,KAAK;KAAK,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KAAW,OAAK,eAAE,QAAA,UAAS;QACxF,WAA4C,KAAA,QAAA,WAA5C,WAA4C,EAAA,SAAA,MAAA,EAAA;KAAA,MAAtB,KAAK;KAAM;KAAK,CAAA,CAAA,EACtC,mBAgBO,QAAA,EAhBA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA,EAAA,EAAA,CACjB,YAME,MAAA,YAAA,EAAA;KALC,MAAM,MAAA,MAAA;KACP,QAAA;KACC,UAAU,MAAA,SAAA;KACV,MAAM,MAAA,KAAA;KACN,UAAK,WAAE,aAAa,MAAK;;;;;;QAE5B,YAOE,MAAA,YAAA,EAAA;KANC,MAAM,MAAA,KAAA;KACP,QAAA;KACC,UAAU,MAAA,SAAA;KACV,MAAM,MAAA,KAAA;KACP,MAAK;KACJ,UAAK,WAAE,UAAU,MAAK;;;;;;;qBAMV,MAAA,MAAA,EAAO,UAAA,WAAA,EAC1B,mBAIK,MAAA;;IAJA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA;yBAC5B,mBAEK,UAAA,MAAA,WAFc,MAAA,MAAA,GAAR,SAAI;wBAAf,mBAEK,MAAA;KAFsB,KAAK,KAAK;KAAK,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;0BACpD,mBAA2C,UAAA,MAAA,WAAzB,KAAK,OAAV,MAAC;yBAAd,mBAA2C,QAAA,MAAA,gBAAX,EAAC,EAAA,EAAA;;mCAKvC,mBAEW,UAAA,EAAA,KAAA,GAAA,EAAA,CAAA,gBAAA,gBADN,MAAA,mBAAkB,CAAA,EAAA,EAAA,CAAA,EAAA,GAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"icon.js","names":[],"sources":["../../../src/components/icon/icon.vue"],"sourcesContent":["<template>\n <i :class=\"cls.b\" :style=\"style\">\n <slot></slot>\n </i>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem, withUnit } from '@veltra/utils'\nimport { type CSSProperties, computed } from 'vue'\n\nimport type { IconProps } from '../../types'\n\ndefineOptions({\n name: 'Icon'\n})\n\nconst props = defineProps<IconProps>()\n\nconst cls = bem('icon')\n\nconst style = computed<CSSProperties>(() => {\n return {\n fontSize: withUnit(props.size, 'px')\n }\n})\n</script>\n"],"mappings":";;;;;;;;EAgBA,MAAM,QAAQ;EAEd,MAAM,MAAM,IAAI,OAAM;EAEtB,MAAM,QAAQ,eAA8B;GAC1C,OAAO,EACL,UAAU,SAAS,MAAM,MAAM,KAAI,EACrC;IACD;;uBAvBC,mBAEI,KAAA;IAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAG,OAAK,eAAE,MAAA,MAAK;OAC7B,WAAa,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"icon.js","names":[],"sources":["../../../src/components/icon/icon.vue"],"sourcesContent":["<template>\n <i :class=\"cls.b\" :style=\"style\">\n <slot></slot>\n </i>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem, withUnit } from '@veltra/utils'\nimport { type CSSProperties, computed } from 'vue'\n\nimport type { IconProps } from '../../types'\n\ndefineOptions({ name: 'Icon' })\n\nconst props = defineProps<IconProps>()\n\nconst cls = bem('icon')\n\nconst style = computed<CSSProperties>(() => {\n return { fontSize: withUnit(props.size, 'px') }\n})\n</script>\n"],"mappings":";;;;;;;;EAcA,MAAM,QAAQ;EAEd,MAAM,MAAM,IAAI,OAAM;EAEtB,MAAM,QAAQ,eAA8B;GAC1C,OAAO,EAAE,UAAU,SAAS,MAAM,MAAM,KAAI,EAAE;IAC/C;;uBAnBC,mBAEI,KAAA;IAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAG,OAAK,eAAE,MAAA,MAAK;OAC7B,WAAa,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","names":[],"sources":["../../../src/components/input/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"inputClass\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n v-if=\"!readonly\"\n >\n <span v-if=\"$slots.prefix || prefix\" :class=\"prefixClass\" @click=\"handlePrefixClick\">\n {{ prefix }}\n <slot name=\"prefix\"></slot>\n </span>\n\n <input\n :class=\"cls.e('native')\"\n :placeholder=\"props.placeholder\"\n type=\"text\"\n :value=\"model\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @compositionstart=\"handleCompositionStart\"\n @compositionend=\"handleCompositionEnd\"\n autocomplete=\"off\"\n ref=\"el\"\n :disabled=\"disabled\"\n :readonly=\"nativeReadonly\"\n />\n\n <span :class=\"suffixClass\" v-if=\"hasSuffix\">\n <Transition name=\"zoom-in\" mode=\"out-in\">\n <UIcon\n v-if=\"showClear\"\n :class=\"cls.e('clear')\"\n title=\"清除\"\n @click.stop=\"clearModelValue\"\n key=\"clear\"\n >\n <Close />\n </UIcon>\n\n <span v-else :class=\"cls.e('suffix-content')\" @click=\"handleSuffixClick\" key=\"suffix\">\n {{ suffix }}\n <slot name=\"suffix\"></slot>\n </span>\n </Transition>\n </span>\n </div>\n\n <template v-else>\n {{ generateModel || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"tsx\" setup>\nimport { useFocus, useFormFallbackProps } from '@veltra/compositions'\nimport { Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, ref, shallowRef, nextTick } from 'vue'\n\nimport type { InputEmits, InputProps, _InputExposed } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({\n name: 'Input'\n})\n\nconst props = withDefaults(defineProps<InputProps>(), {\n placeholder: '请输入',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<InputEmits>()\n\nconst model = defineModel<string>()\n\nconst inst = getCurrentInstance()\n\nconst cls = bem('input')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst { focus, handleBlur, handleFocus } = useFocus((focused) => {\n if (focused) {\n emit('focus')\n } else {\n emit('blur')\n }\n})\n\nconst inputClass = 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('focus', focus.value)\n ]\n})\n\nconst prefixClass = [cls.e('prefix'), bem.is('clickable', !!inst?.vnode.props?.['onPrefix:click'])]\n\nconst suffixClass = [cls.e('suffix'), bem.is('clickable', !!inst?.vnode.props?.['onSuffix:click'])]\n\nlet isComposing = false\n\nfunction handleCompositionStart() {\n isComposing = true\n}\n\nfunction handleCompositionEnd(e: Event) {\n isComposing = false\n handleInput(e)\n}\n\nconst handleInput = (e: Event) => {\n if (isComposing) return\n\n const inputVal = (e.target as HTMLInputElement).value\n emit('native:input', e)\n\n const valid = props.pattern?.test(inputVal) ?? true\n\n if (!valid) return\n model.value = inputVal\n}\n\nconst handlePrefixClick = () => {\n emit('prefix:click', model.value)\n}\n\nconst handleSuffixClick = () => {\n emit('suffix:click', model.value)\n}\n\nconst clearModelValue = () => {\n model.value = ''\n emit('clear')\n}\n\nconst hovered = ref(false)\nconst handleMouseEnter = () => {\n hovered.value = true\n}\n\nconst handleMouseLeave = () => {\n hovered.value = false\n}\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && !!model.value && hovered.value\n})\n\nconst hasSuffixContent = computed(() => {\n return !!inst?.slots.suffix || !!props.suffix\n})\n\nconst hasSuffix = computed(() => {\n return hasSuffixContent.value || showClear.value\n})\n\nconst handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n\n const valid = props.pattern?.test(target.value) ?? true\n\n if (valid) {\n emit('change', target.value)\n } else {\n nextTick(() => {\n target.value = model.value ?? ''\n })\n }\n}\n\nconst el = shallowRef<HTMLInputElement>()\n\nconst generateModel = computed(() => {\n if (!model.value) return ''\n\n return `${props.prefix ?? ''}${model.value}${props.suffix ?? ''}`\n})\n\ndefineExpose<_InputExposed>({\n el\n})\n</script>\n"],"mappings":""}
1
+ {"version":3,"file":"input.js","names":[],"sources":["../../../src/components/input/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"inputClass\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n v-if=\"!readonly\"\n >\n <span v-if=\"$slots.prefix || prefix\" :class=\"prefixClass\" @click=\"handlePrefixClick\">\n {{ prefix }}\n <slot name=\"prefix\"></slot>\n </span>\n\n <input\n :class=\"cls.e('native')\"\n :placeholder=\"props.placeholder\"\n type=\"text\"\n :value=\"model\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @compositionstart=\"handleCompositionStart\"\n @compositionend=\"handleCompositionEnd\"\n autocomplete=\"off\"\n ref=\"el\"\n :disabled=\"disabled\"\n :readonly=\"nativeReadonly\"\n />\n\n <span :class=\"suffixClass\" v-if=\"hasSuffix\">\n <Transition name=\"zoom-in\" mode=\"out-in\">\n <UIcon\n v-if=\"showClear\"\n :class=\"cls.e('clear')\"\n title=\"清除\"\n @click.stop=\"clearModelValue\"\n key=\"clear\"\n >\n <Close />\n </UIcon>\n\n <span v-else :class=\"cls.e('suffix-content')\" @click=\"handleSuffixClick\" key=\"suffix\">\n {{ suffix }}\n <slot name=\"suffix\"></slot>\n </span>\n </Transition>\n </span>\n </div>\n\n <template v-else>\n {{ generateModel || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"tsx\" setup>\nimport { useFocus, useFormFallbackProps } from '@veltra/compositions'\nimport { Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, ref, shallowRef, nextTick } from 'vue'\n\nimport type { InputEmits, InputProps, _InputExposed } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'Input' })\n\nconst props = withDefaults(defineProps<InputProps>(), {\n placeholder: '请输入',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<InputEmits>()\n\nconst model = defineModel<string>()\n\nconst inst = getCurrentInstance()\n\nconst cls = bem('input')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst { focus, handleBlur, handleFocus } = useFocus((focused) => {\n if (focused) {\n emit('focus')\n } else {\n emit('blur')\n }\n})\n\nconst inputClass = 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('focus', focus.value)\n ]\n})\n\nconst prefixClass = [cls.e('prefix'), bem.is('clickable', !!inst?.vnode.props?.['onPrefix:click'])]\n\nconst suffixClass = [cls.e('suffix'), bem.is('clickable', !!inst?.vnode.props?.['onSuffix:click'])]\n\nlet isComposing = false\n\nfunction handleCompositionStart() {\n isComposing = true\n}\n\nfunction handleCompositionEnd(e: Event) {\n isComposing = false\n handleInput(e)\n}\n\nconst handleInput = (e: Event) => {\n if (isComposing) return\n\n const inputVal = (e.target as HTMLInputElement).value\n emit('native:input', e)\n\n const valid = props.pattern?.test(inputVal) ?? true\n\n if (!valid) return\n model.value = inputVal\n}\n\nconst handlePrefixClick = () => {\n emit('prefix:click', model.value)\n}\n\nconst handleSuffixClick = () => {\n emit('suffix:click', model.value)\n}\n\nconst clearModelValue = () => {\n model.value = ''\n emit('clear')\n}\n\nconst hovered = ref(false)\nconst handleMouseEnter = () => {\n hovered.value = true\n}\n\nconst handleMouseLeave = () => {\n hovered.value = false\n}\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && !!model.value && hovered.value\n})\n\nconst hasSuffixContent = computed(() => {\n return !!inst?.slots.suffix || !!props.suffix\n})\n\nconst hasSuffix = computed(() => {\n return hasSuffixContent.value || showClear.value\n})\n\nconst handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n\n const valid = props.pattern?.test(target.value) ?? true\n\n if (valid) {\n emit('change', target.value)\n } else {\n nextTick(() => {\n target.value = model.value ?? ''\n })\n }\n}\n\nconst el = shallowRef<HTMLInputElement>()\n\nconst generateModel = computed(() => {\n if (!model.value) return ''\n\n return `${props.prefix ?? ''}${model.value}${props.suffix ?? ''}`\n})\n\ndefineExpose<_InputExposed>({ el })\n</script>\n"],"mappings":""}
@@ -18,19 +18,19 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, _InputExposed
18
18
  } & {
19
19
  "update:modelValue": (value: string) => any;
20
20
  change: (value: string) => any;
21
- clear: () => any;
22
21
  "suffix:click": (value?: string | undefined) => any;
23
22
  "prefix:click": (value?: string | undefined) => any;
24
23
  focus: (value?: string | undefined) => any;
24
+ clear: () => any;
25
25
  blur: (value?: string | undefined) => any;
26
26
  "native:input": (ev: Event) => any;
27
27
  }, string, _$vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
28
28
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
29
29
  onChange?: ((value: string) => any) | undefined;
30
- onClear?: (() => any) | undefined;
31
30
  "onSuffix:click"?: ((value?: string | undefined) => any) | undefined;
32
31
  "onPrefix:click"?: ((value?: string | undefined) => any) | undefined;
33
32
  onFocus?: ((value?: string | undefined) => any) | undefined;
33
+ onClear?: (() => any) | undefined;
34
34
  onBlur?: ((value?: string | undefined) => any) | undefined;
35
35
  "onNative:input"?: ((ev: Event) => any) | undefined;
36
36
  }>, {
@@ -1 +1 @@
1
- {"version":3,"file":"input.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/input/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"inputClass\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n v-if=\"!readonly\"\n >\n <span v-if=\"$slots.prefix || prefix\" :class=\"prefixClass\" @click=\"handlePrefixClick\">\n {{ prefix }}\n <slot name=\"prefix\"></slot>\n </span>\n\n <input\n :class=\"cls.e('native')\"\n :placeholder=\"props.placeholder\"\n type=\"text\"\n :value=\"model\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @compositionstart=\"handleCompositionStart\"\n @compositionend=\"handleCompositionEnd\"\n autocomplete=\"off\"\n ref=\"el\"\n :disabled=\"disabled\"\n :readonly=\"nativeReadonly\"\n />\n\n <span :class=\"suffixClass\" v-if=\"hasSuffix\">\n <Transition name=\"zoom-in\" mode=\"out-in\">\n <UIcon\n v-if=\"showClear\"\n :class=\"cls.e('clear')\"\n title=\"清除\"\n @click.stop=\"clearModelValue\"\n key=\"clear\"\n >\n <Close />\n </UIcon>\n\n <span v-else :class=\"cls.e('suffix-content')\" @click=\"handleSuffixClick\" key=\"suffix\">\n {{ suffix }}\n <slot name=\"suffix\"></slot>\n </span>\n </Transition>\n </span>\n </div>\n\n <template v-else>\n {{ generateModel || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"tsx\" setup>\nimport { useFocus, useFormFallbackProps } from '@veltra/compositions'\nimport { Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, ref, shallowRef, nextTick } from 'vue'\n\nimport type { InputEmits, InputProps, _InputExposed } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({\n name: 'Input'\n})\n\nconst props = withDefaults(defineProps<InputProps>(), {\n placeholder: '请输入',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<InputEmits>()\n\nconst model = defineModel<string>()\n\nconst inst = getCurrentInstance()\n\nconst cls = bem('input')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst { focus, handleBlur, handleFocus } = useFocus((focused) => {\n if (focused) {\n emit('focus')\n } else {\n emit('blur')\n }\n})\n\nconst inputClass = 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('focus', focus.value)\n ]\n})\n\nconst prefixClass = [cls.e('prefix'), bem.is('clickable', !!inst?.vnode.props?.['onPrefix:click'])]\n\nconst suffixClass = [cls.e('suffix'), bem.is('clickable', !!inst?.vnode.props?.['onSuffix:click'])]\n\nlet isComposing = false\n\nfunction handleCompositionStart() {\n isComposing = true\n}\n\nfunction handleCompositionEnd(e: Event) {\n isComposing = false\n handleInput(e)\n}\n\nconst handleInput = (e: Event) => {\n if (isComposing) return\n\n const inputVal = (e.target as HTMLInputElement).value\n emit('native:input', e)\n\n const valid = props.pattern?.test(inputVal) ?? true\n\n if (!valid) return\n model.value = inputVal\n}\n\nconst handlePrefixClick = () => {\n emit('prefix:click', model.value)\n}\n\nconst handleSuffixClick = () => {\n emit('suffix:click', model.value)\n}\n\nconst clearModelValue = () => {\n model.value = ''\n emit('clear')\n}\n\nconst hovered = ref(false)\nconst handleMouseEnter = () => {\n hovered.value = true\n}\n\nconst handleMouseLeave = () => {\n hovered.value = false\n}\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && !!model.value && hovered.value\n})\n\nconst hasSuffixContent = computed(() => {\n return !!inst?.slots.suffix || !!props.suffix\n})\n\nconst hasSuffix = computed(() => {\n return hasSuffixContent.value || showClear.value\n})\n\nconst handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n\n const valid = props.pattern?.test(target.value) ?? true\n\n if (valid) {\n emit('change', target.value)\n } else {\n nextTick(() => {\n target.value = model.value ?? ''\n })\n }\n}\n\nconst el = shallowRef<HTMLInputElement>()\n\nconst generateModel = computed(() => {\n if (!model.value) return ''\n\n return `${props.prefix ?? ''}${model.value}${props.suffix ?? ''}`\n})\n\ndefineExpose<_InputExposed>({\n el\n})\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"input.vue_vue_type_script_setup_true_lang.js","names":["$slots"],"sources":["../../../src/components/input/input.vue"],"sourcesContent":["<template>\n <div\n :class=\"inputClass\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n v-if=\"!readonly\"\n >\n <span v-if=\"$slots.prefix || prefix\" :class=\"prefixClass\" @click=\"handlePrefixClick\">\n {{ prefix }}\n <slot name=\"prefix\"></slot>\n </span>\n\n <input\n :class=\"cls.e('native')\"\n :placeholder=\"props.placeholder\"\n type=\"text\"\n :value=\"model\"\n @input=\"handleInput\"\n @change=\"handleChange\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @compositionstart=\"handleCompositionStart\"\n @compositionend=\"handleCompositionEnd\"\n autocomplete=\"off\"\n ref=\"el\"\n :disabled=\"disabled\"\n :readonly=\"nativeReadonly\"\n />\n\n <span :class=\"suffixClass\" v-if=\"hasSuffix\">\n <Transition name=\"zoom-in\" mode=\"out-in\">\n <UIcon\n v-if=\"showClear\"\n :class=\"cls.e('clear')\"\n title=\"清除\"\n @click.stop=\"clearModelValue\"\n key=\"clear\"\n >\n <Close />\n </UIcon>\n\n <span v-else :class=\"cls.e('suffix-content')\" @click=\"handleSuffixClick\" key=\"suffix\">\n {{ suffix }}\n <slot name=\"suffix\"></slot>\n </span>\n </Transition>\n </span>\n </div>\n\n <template v-else>\n {{ generateModel || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"tsx\" setup>\nimport { useFocus, useFormFallbackProps } from '@veltra/compositions'\nimport { Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, ref, shallowRef, nextTick } from 'vue'\n\nimport type { InputEmits, InputProps, _InputExposed } from '../../types'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'Input' })\n\nconst props = withDefaults(defineProps<InputProps>(), {\n placeholder: '请输入',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<InputEmits>()\n\nconst model = defineModel<string>()\n\nconst inst = getCurrentInstance()\n\nconst cls = bem('input')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst { focus, handleBlur, handleFocus } = useFocus((focused) => {\n if (focused) {\n emit('focus')\n } else {\n emit('blur')\n }\n})\n\nconst inputClass = 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('focus', focus.value)\n ]\n})\n\nconst prefixClass = [cls.e('prefix'), bem.is('clickable', !!inst?.vnode.props?.['onPrefix:click'])]\n\nconst suffixClass = [cls.e('suffix'), bem.is('clickable', !!inst?.vnode.props?.['onSuffix:click'])]\n\nlet isComposing = false\n\nfunction handleCompositionStart() {\n isComposing = true\n}\n\nfunction handleCompositionEnd(e: Event) {\n isComposing = false\n handleInput(e)\n}\n\nconst handleInput = (e: Event) => {\n if (isComposing) return\n\n const inputVal = (e.target as HTMLInputElement).value\n emit('native:input', e)\n\n const valid = props.pattern?.test(inputVal) ?? true\n\n if (!valid) return\n model.value = inputVal\n}\n\nconst handlePrefixClick = () => {\n emit('prefix:click', model.value)\n}\n\nconst handleSuffixClick = () => {\n emit('suffix:click', model.value)\n}\n\nconst clearModelValue = () => {\n model.value = ''\n emit('clear')\n}\n\nconst hovered = ref(false)\nconst handleMouseEnter = () => {\n hovered.value = true\n}\n\nconst handleMouseLeave = () => {\n hovered.value = false\n}\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && !!model.value && hovered.value\n})\n\nconst hasSuffixContent = computed(() => {\n return !!inst?.slots.suffix || !!props.suffix\n})\n\nconst hasSuffix = computed(() => {\n return hasSuffixContent.value || showClear.value\n})\n\nconst handleChange = (e: Event) => {\n const target = e.target as HTMLInputElement\n\n const valid = props.pattern?.test(target.value) ?? true\n\n if (valid) {\n emit('change', target.value)\n } else {\n nextTick(() => {\n target.value = model.value ?? ''\n })\n }\n}\n\nconst el = shallowRef<HTMLInputElement>()\n\nconst generateModel = computed(() => {\n if (!model.value) return ''\n\n return `${props.prefix ?? ''}${model.value}${props.suffix ?? ''}`\n})\n\ndefineExpose<_InputExposed>({ el })\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout-resizer.js","names":[],"sources":["../../../src/components/layout/layout-resizer.vue"],"sourcesContent":["<template>\n <div\n :class=\"className\"\n :style=\"{ transform: `translate3d(${offsets.x}, ${offsets.y}, 0)` }\"\n ref=\"resizerRef\"\n >\n <u-icon :size=\"10\"> <Move /> </u-icon>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { Move } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject, shallowReactive, shallowRef } from 'vue'\n\nimport { UIcon } from '../icon'\nimport { LayoutDIKey } from './di'\n\ndefineOptions({\n name: 'LayoutResizer'\n})\n\nconst props = defineProps<{\n /** 是否横向 */\n horizontal?: boolean\n /** 默认偏移量 */\n offset?: number\n}>()\n\nconst emit = defineEmits<{\n (e: 'resize', offset: number): void\n (e: 'resize-start'): void\n (e: 'resize-end'): void\n}>()\n\nconst { cls } = inject(LayoutDIKey)!\n\nconst className = computed(() => {\n return [cls.e('resizer'), bem.is('horizontal', props.horizontal)]\n})\n\nconst resizerRef = shallowRef<HTMLDivElement>()\n\nlet offset = props.offset ?? 0\nconst offsets = shallowReactive({\n x: props.horizontal ? '0' : offset + 'px',\n y: props.horizontal ? offset + 'px' : '0'\n})\nlet currentOffset = 0\nuseDrag({\n target: resizerRef,\n onDragStart() {\n currentOffset = offset\n emit('resize-start')\n },\n onDrag({ x, y }) {\n if (!props.horizontal) {\n offset = currentOffset + x\n offsets.x = offset + 'px'\n emit('resize', x)\n } else {\n offset = currentOffset + y\n offsets.y = offset + 'px'\n emit('resize', y)\n }\n },\n onDragEnd() {\n emit('resize-end')\n }\n})\n\ndefineExpose({\n update(_offset: number): void {\n offset = _offset\n if (!props.horizontal) {\n offsets.x = offset + 'px'\n } else {\n offsets.y = offset + 'px'\n }\n }\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAuBA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAMb,MAAM,EAAE,QAAQ,OAAO,YAAW;EAElC,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,EAAE,UAAS,EAAG,IAAI,GAAG,cAAc,MAAM,WAAW,CAAA;IACjE;EAED,MAAM,aAAa,YAA2B;EAE9C,IAAI,SAAS,MAAM,UAAU;EAC7B,MAAM,UAAU,gBAAgB;GAC9B,GAAG,MAAM,aAAa,MAAM,SAAS;GACrC,GAAG,MAAM,aAAa,SAAS,OAAO;GACvC,CAAA;EACD,IAAI,gBAAgB;EACpB,QAAQ;GACN,QAAQ;GACR,cAAc;IACZ,gBAAgB;IAChB,KAAK,eAAc;;GAErB,OAAO,EAAE,GAAG,KAAK;IACf,IAAI,CAAC,MAAM,YAAY;KACrB,SAAS,gBAAgB;KACzB,QAAQ,IAAI,SAAS;KACrB,KAAK,UAAU,EAAC;WACX;KACL,SAAS,gBAAgB;KACzB,QAAQ,IAAI,SAAS;KACrB,KAAK,UAAU,EAAC;;;GAGpB,YAAY;IACV,KAAK,aAAY;;GAEpB,CAAA;EAED,SAAa,EACX,OAAO,SAAuB;GAC5B,SAAS;GACT,IAAI,CAAC,MAAM,YACT,QAAQ,IAAI,SAAS;QAErB,QAAQ,IAAI,SAAS;KAG1B,CAAA;;uBAhFC,mBAMM,OAAA;IALH,OAAK,eAAE,UAAA,MAAS;IAChB,OAAK,eAAA,EAAA,WAAA,eAA8B,MAAA,QAAA,CAAQ,EAAC,IAAK,MAAA,QAAA,CAAQ,EAAC,OAAA,CAAA;aACvD;IAAJ,KAAI;OAEJ,YAAsC,MAAA,YAAA,EAAA,EAA7B,MAAM,IAAE,EAAA;2BAAW,CAAR,YAAQ,MAAA,KAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"layout-resizer.js","names":[],"sources":["../../../src/components/layout/layout-resizer.vue"],"sourcesContent":["<template>\n <div\n :class=\"className\"\n :style=\"{ transform: `translate3d(${offsets.x}, ${offsets.y}, 0)` }\"\n ref=\"resizerRef\"\n >\n <u-icon :size=\"10\"> <Move /> </u-icon>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { Move } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject, shallowReactive, shallowRef } from 'vue'\n\nimport { UIcon } from '../icon'\nimport { LayoutDIKey } from './di'\n\ndefineOptions({ name: 'LayoutResizer' })\n\nconst props = defineProps<{\n /** 是否横向 */\n horizontal?: boolean\n /** 默认偏移量 */\n offset?: number\n}>()\n\nconst emit = defineEmits<{\n (e: 'resize', offset: number): void\n (e: 'resize-start'): void\n (e: 'resize-end'): void\n}>()\n\nconst { cls } = inject(LayoutDIKey)!\n\nconst className = computed(() => {\n return [cls.e('resizer'), bem.is('horizontal', props.horizontal)]\n})\n\nconst resizerRef = shallowRef<HTMLDivElement>()\n\nlet offset = props.offset ?? 0\nconst offsets = shallowReactive({\n x: props.horizontal ? '0' : offset + 'px',\n y: props.horizontal ? offset + 'px' : '0'\n})\nlet currentOffset = 0\nuseDrag({\n target: resizerRef,\n onDragStart() {\n currentOffset = offset\n emit('resize-start')\n },\n onDrag({ x, y }) {\n if (!props.horizontal) {\n offset = currentOffset + x\n offsets.x = offset + 'px'\n emit('resize', x)\n } else {\n offset = currentOffset + y\n offsets.y = offset + 'px'\n emit('resize', y)\n }\n },\n onDragEnd() {\n emit('resize-end')\n }\n})\n\ndefineExpose({\n update(_offset: number): void {\n offset = _offset\n if (!props.horizontal) {\n offsets.x = offset + 'px'\n } else {\n offsets.y = offset + 'px'\n }\n }\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAqBA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAMb,MAAM,EAAE,QAAQ,OAAO,YAAW;EAElC,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,EAAE,UAAS,EAAG,IAAI,GAAG,cAAc,MAAM,WAAW,CAAA;IACjE;EAED,MAAM,aAAa,YAA2B;EAE9C,IAAI,SAAS,MAAM,UAAU;EAC7B,MAAM,UAAU,gBAAgB;GAC9B,GAAG,MAAM,aAAa,MAAM,SAAS;GACrC,GAAG,MAAM,aAAa,SAAS,OAAO;GACvC,CAAA;EACD,IAAI,gBAAgB;EACpB,QAAQ;GACN,QAAQ;GACR,cAAc;IACZ,gBAAgB;IAChB,KAAK,eAAc;;GAErB,OAAO,EAAE,GAAG,KAAK;IACf,IAAI,CAAC,MAAM,YAAY;KACrB,SAAS,gBAAgB;KACzB,QAAQ,IAAI,SAAS;KACrB,KAAK,UAAU,EAAC;WACX;KACL,SAAS,gBAAgB;KACzB,QAAQ,IAAI,SAAS;KACrB,KAAK,UAAU,EAAC;;;GAGpB,YAAY;IACV,KAAK,aAAY;;GAEpB,CAAA;EAED,SAAa,EACX,OAAO,SAAuB;GAC5B,SAAS;GACT,IAAI,CAAC,MAAM,YACT,QAAQ,IAAI,SAAS;QAErB,QAAQ,IAAI,SAAS;KAG1B,CAAA;;uBA9EC,mBAMM,OAAA;IALH,OAAK,eAAE,UAAA,MAAS;IAChB,OAAK,eAAA,EAAA,WAAA,eAA8B,MAAA,QAAA,CAAQ,EAAC,IAAK,MAAA,QAAA,CAAQ,EAAC,OAAA,CAAA;aACvD;IAAJ,KAAI;OAEJ,YAAsC,MAAA,YAAA,EAAA,EAA7B,MAAM,IAAE,EAAA;2BAAW,CAAR,YAAQ,MAAA,KAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","names":[],"sources":["../../../src/components/layout/layout.vue"],"sourcesContent":["<template>\n <component :is=\"tag\" :class=\"cls.b\" :style=\"style\" ref=\"containerRef\">\n <slot />\n\n <!-- 竖向调节 -->\n <ULayoutResizer\n v-for=\"(offset, index) of resizerOffsets\"\n :offset=\"offset\"\n :key=\"index\"\n ref=\"resizerRefs\"\n direction=\"vertical\"\n @resize=\"handleResize($event, index)\"\n @resize-start=\"handleStartResize(index)\"\n >\n </ULayoutResizer>\n\n <!-- 横向调节 -->\n <!-- <ULayoutResizer\n v-for=\"item in horizontalResizerList\"\n :key=\"item\"\n direction=\"horizontal\"\n /> -->\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useResizeObserver } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport {\n computed,\n shallowRef,\n type CSSProperties,\n provide,\n watchEffect,\n ref,\n watch,\n nextTick\n} from 'vue'\n\nimport type { LayoutProps } from '../../types'\nimport { LayoutDIKey } from './di'\nimport ULayoutResizer from './layout-resizer.vue'\n\ndefineOptions({\n name: 'Layout'\n})\n\nconst props = withDefaults(defineProps<LayoutProps>(), {\n tag: 'div'\n})\n\nconst cls = bem('layout')\n\nconst templateCols = ref<string[]>([])\n\nwatchEffect(() => {\n const { cols } = props\n if (!cols) {\n templateCols.value = []\n return\n }\n templateCols.value = typeof cols === 'string' ? cols.split(' ') : [...cols]\n})\n\nconst style = computed<CSSProperties>(() => {\n const { rows, gap, resizable } = props\n return {\n gridTemplateColumns: templateCols.value.join(' '),\n gridTemplateRows: rows ? (typeof rows === 'string' ? rows : rows.join(' ')) : '',\n columnGap: resizable ? '10px' : withUnit(gap, 'px')\n }\n})\n\nconst containerRef = shallowRef<HTMLElement>()\nconst resizerRefs = shallowRef<InstanceType<typeof ULayoutResizer>[]>([])\n\nconst resizerOffsets = ref<number[]>([])\n\nfunction getResizeOffsets() {\n const container = containerRef.value\n if (!props.resizable || !container || !props.cols) {\n return (resizerOffsets.value = [])\n }\n\n resizerOffsets.value = templateCols.value.slice(0, -1).map((_, index) => {\n const dom = container.children[index] as HTMLElement\n if (!dom) return 0\n return dom.offsetLeft + dom.offsetWidth\n })\n}\n\nwatch([() => props.resizable, containerRef, () => props.cols], () => {\n nextTick(() => {\n getResizeOffsets()\n })\n})\n\nuseResizeObserver({\n targets: containerRef,\n onResize() {\n getResizeOffsets()\n resizerRefs.value.forEach((r, i) => {\n r.update(resizerOffsets.value![i]!)\n })\n }\n})\n\n// const horizontalResizerList = []\n\n// const resizing = shallowRef(false)\n\nlet prevSize = 0\nlet nextSize = 0\nconst handleStartResize = (index: number) => {\n const container = containerRef.value\n if (!container) return\n\n // 拖拽前把相邻两列按实际渲染宽度固定成 px,\n // 这样拖拽时两列等量增减、容器整体宽度保持不变。\n const prevDom = container.children[index] as HTMLElement | undefined\n const nextDom = container.children[index + 1] as HTMLElement | undefined\n prevSize = prevDom ? prevDom.getBoundingClientRect().width : 0\n nextSize = nextDom ? nextDom.getBoundingClientRect().width : 0\n}\nconst handleResize = (offset: number, index: number) => {\n // 钳位到 [-prevSize, nextSize],避免轨道尺寸出现负值——\n // 一旦 grid-template-columns 中带负值,整条声明会被浏览器丢弃。\n const clamped = Math.max(-prevSize, Math.min(nextSize, offset))\n templateCols.value[index] = `${prevSize + clamped}px`\n templateCols.value[index + 1] = `${nextSize - clamped}px`\n}\n\nprovide(LayoutDIKey, {\n cls\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;EA+CA,MAAM,QAAQ;EAId,MAAM,MAAM,IAAI,SAAQ;EAExB,MAAM,eAAe,IAAc,EAAE,CAAA;EAErC,kBAAkB;GAChB,MAAM,EAAE,SAAS;GACjB,IAAI,CAAC,MAAM;IACT,aAAa,QAAQ,EAAC;IACtB;;GAEF,aAAa,QAAQ,OAAO,SAAS,WAAW,KAAK,MAAM,IAAG,GAAI,CAAC,GAAG,KAAI;IAC3E;EAED,MAAM,QAAQ,eAA8B;GAC1C,MAAM,EAAE,MAAM,KAAK,cAAc;GACjC,OAAO;IACL,qBAAqB,aAAa,MAAM,KAAK,IAAG;IAChD,kBAAkB,OAAQ,OAAO,SAAS,WAAW,OAAO,KAAK,KAAK,IAAG,GAAK;IAC9E,WAAW,YAAY,SAAS,SAAS,KAAK,KAAI;IACpD;IACD;EAED,MAAM,eAAe,YAAwB;EAC7C,MAAM,cAAc,WAAkD,EAAE,CAAA;EAExE,MAAM,iBAAiB,IAAc,EAAE,CAAA;EAEvC,SAAS,mBAAmB;GAC1B,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,MAAM,aAAa,CAAC,aAAa,CAAC,MAAM,MAC3C,OAAQ,eAAe,QAAQ,EAAC;GAGlC,eAAe,QAAQ,aAAa,MAAM,MAAM,GAAG,GAAE,CAAE,KAAK,GAAG,UAAU;IACvE,MAAM,MAAM,UAAU,SAAS;IAC/B,IAAI,CAAC,KAAK,OAAO;IACjB,OAAO,IAAI,aAAa,IAAI;KAC7B;;EAGH,MAAM;SAAO,MAAM;GAAW;SAAoB,MAAM;GAAI,QAAS;GACnE,eAAe;IACb,kBAAiB;KAClB;IACF;EAED,kBAAkB;GAChB,SAAS;GACT,WAAW;IACT,kBAAiB;IACjB,YAAY,MAAM,SAAS,GAAG,MAAM;KAClC,EAAE,OAAO,eAAe,MAAO,GAAG;MACnC;;GAEJ,CAAA;EAMD,IAAI,WAAW;EACf,IAAI,WAAW;EACf,MAAM,qBAAqB,UAAkB;GAC3C,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,WAAW;GAIhB,MAAM,UAAU,UAAU,SAAS;GACnC,MAAM,UAAU,UAAU,SAAS,QAAQ;GAC3C,WAAW,UAAU,QAAQ,uBAAsB,CAAE,QAAQ;GAC7D,WAAW,UAAU,QAAQ,uBAAsB,CAAE,QAAQ;;EAE/D,MAAM,gBAAgB,QAAgB,UAAkB;GAGtD,MAAM,UAAU,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,UAAU,OAAO,CAAA;GAC9D,aAAa,MAAM,SAAS,GAAG,WAAW,QAAQ;GAClD,aAAa,MAAM,QAAQ,KAAK,GAAG,WAAW,QAAQ;;EAGxD,QAAQ,aAAa,EACnB,KACD,CAAA;;uBArIC,YAqBY,wBArBI,QAAA,IAAG,EAAA;IAAG,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAG,OAAK,eAAE,MAAA,MAAK;aAAM;IAAJ,KAAI;;2BAC7C;KAAR,WAAQ,KAAA,QAAA,UAAA;KAER,mBAAA,SAAA;uBACA,mBASiB,UAAA,MAAA,WARW,eAAA,QAAlB,QAAQ,UAAK;0BADvB,YASiB,aAAA;OAPN;OACR,KAAK;;gBACF;OAAJ,KAAI;OACJ,WAAU;OACT,WAAM,WAAE,aAAa,QAAQ,MAAK;OAClC,gBAAY,WAAE,kBAAkB,MAAK;;;;;;;KAIxC,mBAAA,SAAA;KACA,mBAAA,gIAAA"}
1
+ {"version":3,"file":"layout.js","names":[],"sources":["../../../src/components/layout/layout.vue"],"sourcesContent":["<template>\n <component :is=\"tag\" :class=\"cls.b\" :style=\"style\" ref=\"containerRef\">\n <slot />\n\n <!-- 竖向调节 -->\n <ULayoutResizer\n v-for=\"(offset, index) of resizerOffsets\"\n :offset=\"offset\"\n :key=\"index\"\n ref=\"resizerRefs\"\n direction=\"vertical\"\n @resize=\"handleResize($event, index)\"\n @resize-start=\"handleStartResize(index)\"\n >\n </ULayoutResizer>\n\n <!-- 横向调节 -->\n <!-- <ULayoutResizer\n v-for=\"item in horizontalResizerList\"\n :key=\"item\"\n direction=\"horizontal\"\n /> -->\n </component>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useResizeObserver } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport {\n computed,\n shallowRef,\n type CSSProperties,\n provide,\n watchEffect,\n ref,\n watch,\n nextTick\n} from 'vue'\n\nimport type { LayoutProps } from '../../types'\nimport { LayoutDIKey } from './di'\nimport ULayoutResizer from './layout-resizer.vue'\n\ndefineOptions({ name: 'Layout' })\n\nconst props = withDefaults(defineProps<LayoutProps>(), { tag: 'div' })\n\nconst cls = bem('layout')\n\nconst templateCols = ref<string[]>([])\n\nwatchEffect(() => {\n const { cols } = props\n if (!cols) {\n templateCols.value = []\n return\n }\n templateCols.value = typeof cols === 'string' ? cols.split(' ') : [...cols]\n})\n\nconst style = computed<CSSProperties>(() => {\n const { rows, gap, resizable } = props\n return {\n gridTemplateColumns: templateCols.value.join(' '),\n gridTemplateRows: rows ? (typeof rows === 'string' ? rows : rows.join(' ')) : '',\n columnGap: resizable ? '10px' : withUnit(gap, 'px')\n }\n})\n\nconst containerRef = shallowRef<HTMLElement>()\nconst resizerRefs = shallowRef<InstanceType<typeof ULayoutResizer>[]>([])\n\nconst resizerOffsets = ref<number[]>([])\n\nfunction getResizeOffsets() {\n const container = containerRef.value\n if (!props.resizable || !container || !props.cols) {\n return (resizerOffsets.value = [])\n }\n\n resizerOffsets.value = templateCols.value.slice(0, -1).map((_, index) => {\n const dom = container.children[index] as HTMLElement\n if (!dom) return 0\n return dom.offsetLeft + dom.offsetWidth\n })\n}\n\nwatch([() => props.resizable, containerRef, () => props.cols], () => {\n nextTick(() => {\n getResizeOffsets()\n })\n})\n\nuseResizeObserver({\n targets: containerRef,\n onResize() {\n getResizeOffsets()\n resizerRefs.value.forEach((r, i) => {\n r.update(resizerOffsets.value![i]!)\n })\n }\n})\n\n// const horizontalResizerList = []\n\n// const resizing = shallowRef(false)\n\nlet prevSize = 0\nlet nextSize = 0\nconst handleStartResize = (index: number) => {\n const container = containerRef.value\n if (!container) return\n\n // 拖拽前把相邻两列按实际渲染宽度固定成 px,\n // 这样拖拽时两列等量增减、容器整体宽度保持不变。\n const prevDom = container.children[index] as HTMLElement | undefined\n const nextDom = container.children[index + 1] as HTMLElement | undefined\n prevSize = prevDom ? prevDom.getBoundingClientRect().width : 0\n nextSize = nextDom ? nextDom.getBoundingClientRect().width : 0\n}\nconst handleResize = (offset: number, index: number) => {\n // 钳位到 [-prevSize, nextSize],避免轨道尺寸出现负值——\n // 一旦 grid-template-columns 中带负值,整条声明会被浏览器丢弃。\n const clamped = Math.max(-prevSize, Math.min(nextSize, offset))\n templateCols.value[index] = `${prevSize + clamped}px`\n templateCols.value[index + 1] = `${nextSize - clamped}px`\n}\n\nprovide(LayoutDIKey, { cls })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;EA6CA,MAAM,QAAQ;EAEd,MAAM,MAAM,IAAI,SAAQ;EAExB,MAAM,eAAe,IAAc,EAAE,CAAA;EAErC,kBAAkB;GAChB,MAAM,EAAE,SAAS;GACjB,IAAI,CAAC,MAAM;IACT,aAAa,QAAQ,EAAC;IACtB;;GAEF,aAAa,QAAQ,OAAO,SAAS,WAAW,KAAK,MAAM,IAAG,GAAI,CAAC,GAAG,KAAI;IAC3E;EAED,MAAM,QAAQ,eAA8B;GAC1C,MAAM,EAAE,MAAM,KAAK,cAAc;GACjC,OAAO;IACL,qBAAqB,aAAa,MAAM,KAAK,IAAG;IAChD,kBAAkB,OAAQ,OAAO,SAAS,WAAW,OAAO,KAAK,KAAK,IAAG,GAAK;IAC9E,WAAW,YAAY,SAAS,SAAS,KAAK,KAAI;IACpD;IACD;EAED,MAAM,eAAe,YAAwB;EAC7C,MAAM,cAAc,WAAkD,EAAE,CAAA;EAExE,MAAM,iBAAiB,IAAc,EAAE,CAAA;EAEvC,SAAS,mBAAmB;GAC1B,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,MAAM,aAAa,CAAC,aAAa,CAAC,MAAM,MAC3C,OAAQ,eAAe,QAAQ,EAAC;GAGlC,eAAe,QAAQ,aAAa,MAAM,MAAM,GAAG,GAAE,CAAE,KAAK,GAAG,UAAU;IACvE,MAAM,MAAM,UAAU,SAAS;IAC/B,IAAI,CAAC,KAAK,OAAO;IACjB,OAAO,IAAI,aAAa,IAAI;KAC7B;;EAGH,MAAM;SAAO,MAAM;GAAW;SAAoB,MAAM;GAAI,QAAS;GACnE,eAAe;IACb,kBAAiB;KAClB;IACF;EAED,kBAAkB;GAChB,SAAS;GACT,WAAW;IACT,kBAAiB;IACjB,YAAY,MAAM,SAAS,GAAG,MAAM;KAClC,EAAE,OAAO,eAAe,MAAO,GAAG;MACnC;;GAEJ,CAAA;EAMD,IAAI,WAAW;EACf,IAAI,WAAW;EACf,MAAM,qBAAqB,UAAkB;GAC3C,MAAM,YAAY,aAAa;GAC/B,IAAI,CAAC,WAAW;GAIhB,MAAM,UAAU,UAAU,SAAS;GACnC,MAAM,UAAU,UAAU,SAAS,QAAQ;GAC3C,WAAW,UAAU,QAAQ,uBAAsB,CAAE,QAAQ;GAC7D,WAAW,UAAU,QAAQ,uBAAsB,CAAE,QAAQ;;EAE/D,MAAM,gBAAgB,QAAgB,UAAkB;GAGtD,MAAM,UAAU,KAAK,IAAI,CAAC,UAAU,KAAK,IAAI,UAAU,OAAO,CAAA;GAC9D,aAAa,MAAM,SAAS,GAAG,WAAW,QAAQ;GAClD,aAAa,MAAM,QAAQ,KAAK,GAAG,WAAW,QAAQ;;EAGxD,QAAQ,aAAa,EAAE,KAAK,CAAA;;uBA/H1B,YAqBY,wBArBI,QAAA,IAAG,EAAA;IAAG,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC;IAAG,OAAK,eAAE,MAAA,MAAK;aAAM;IAAJ,KAAI;;2BAC7C;KAAR,WAAQ,KAAA,QAAA,UAAA;KAER,mBAAA,SAAA;uBACA,mBASiB,UAAA,MAAA,WARW,eAAA,QAAlB,QAAQ,UAAK;0BADvB,YASiB,aAAA;OAPN;OACR,KAAK;;gBACF;OAAJ,KAAI;OACJ,WAAU;OACT,WAAM,WAAE,aAAa,QAAQ,MAAK;OAClC,gBAAY,WAAE,kBAAkB,MAAK;;;;;;;KAIxC,mBAAA,SAAA;KACA,mBAAA,gIAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-item.js","names":[],"sources":["../../../src/components/list/list-item.vue"],"sourcesContent":["<template>\n <li :class=\"cls.b\">\n <slot />\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\n\ndefineOptions({\n name: 'ListItem'\n})\n\nconst cls = bem('list-item')\n</script>\n"],"mappings":";;;;;;;EAaA,MAAM,MAAM,IAAI,YAAW;;uBAZzB,mBAEK,MAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,EAAA,EAAA,CACf,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"list-item.js","names":[],"sources":["../../../src/components/list/list-item.vue"],"sourcesContent":["<template>\n <li :class=\"cls.b\">\n <slot />\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\n\ndefineOptions({ name: 'ListItem' })\n\nconst cls = bem('list-item')\n</script>\n"],"mappings":";;;;;;;EAWA,MAAM,MAAM,IAAI,YAAW;;uBAVzB,mBAEK,MAAA,EAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,EAAA,EAAA,CACf,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","names":[],"sources":["../../../src/components/list/list.vue"],"sourcesContent":["<template>\n <u-scroll tag=\"ul\" :class=\"[cls.b, cls.m(size)]\">\n <slot v-for=\"(item, index) of data\" v-bind=\"{ item, index }\" />\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\n\nimport type { ListProps } from '../../types'\nimport type { ComponentSize } from '../../types'\nimport { UScroll } from '../scroll'\n\ndefineOptions({\n name: 'List'\n})\n\nconst props = withDefaults(defineProps<ListProps>(), {})\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst cls = bem('list')\n</script>\n"],"mappings":";;;;;;;;;;;;;EAoBA,MAAM,EAAE,SAAS,iBAAiB,CAAC,QAAK,EAAG,EACzC,MAAM,WACP,CAAA;EAED,MAAM,MAAM,IAAI,OAAM;;uBAvBpB,YAEW,MAAA,YAAA,EAAA;IAFD,KAAI;IAAM,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA;;2BACR,EAAA,UAAA,KAAA,EAAnC,mBAA+D,UAAA,MAAA,WAAjC,QAAA,OAAhB,MAAM,UAAK;YAAzB,WAA+D,KAAA,QAAA,WAA/D,WAA+D,EAAA,SAAA,MAAA,EAAA;MAAjB;MAAM;MAAK,CAAA,CAAA"}
1
+ {"version":3,"file":"list.js","names":[],"sources":["../../../src/components/list/list.vue"],"sourcesContent":["<template>\n <u-scroll tag=\"ul\" :class=\"[cls.b, cls.m(size)]\">\n <slot v-for=\"(item, index) of data\" v-bind=\"{ item, index }\" />\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\n\nimport type { ListProps } from '../../types'\nimport type { ComponentSize } from '../../types'\nimport { UScroll } from '../scroll'\n\ndefineOptions({ name: 'List' })\n\nconst props = withDefaults(defineProps<ListProps>(), {})\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst cls = bem('list')\n</script>\n"],"mappings":";;;;;;;;;;;;;EAkBA,MAAM,EAAE,SAAS,iBAAiB,CAAC,QAAK,EAAG,EAAE,MAAM,WAA4B,CAAA;EAE/E,MAAM,MAAM,IAAI,OAAM;;uBAnBpB,YAEW,MAAA,YAAA,EAAA;IAFD,KAAI;IAAM,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA;;2BACR,EAAA,UAAA,KAAA,EAAnC,mBAA+D,UAAA,MAAA,WAAjC,QAAA,OAAhB,MAAM,UAAK;YAAzB,WAA+D,KAAA,QAAA,WAA/D,WAA+D,EAAA,SAAA,MAAA,EAAA;MAAjB;MAAM;MAAK,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"loading.js","names":[],"sources":["../../../src/components/loading/loading.vue"],"sourcesContent":["<template>\n <transition name=\"fade\" appear>\n <div :class=\"className\" :style=\"{ zIndex: zIndex() }\">\n <div :class=\"cls.e('loader')\"></div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, zIndex } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { LoadingProps, ComponentSize } from '../../types'\n\ndefineOptions({\n name: 'Loading'\n})\n\nconst props = withDefaults(defineProps<LoadingProps>(), {\n type: 'spinner'\n})\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst cls = bem('loading')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), cls.e(props.type)]\n})\n</script>\n"],"mappings":";;;;;;;;;EAmBA,MAAM,QAAQ;EAId,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EACzC,MAAM,WACP,CAAA;EAED,MAAM,MAAM,IAAI,UAAS;EAEzB,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,MAAK;IAAG,IAAI,EAAE,MAAM,KAAI;IAAC;IACpD;;uBA9BC,YAIa,YAAA;IAJD,MAAK;IAAO,QAAA;;2BAGhB,CAFN,mBAEM,OAAA;KAFA,OAAK,eAAE,UAAA,MAAS;KAAG,OAAK,eAAA,EAAA,QAAY,MAAA,OAAA,EAAM,EAAA,CAAA;QAC9C,mBAAoC,OAAA,EAA9B,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"loading.js","names":[],"sources":["../../../src/components/loading/loading.vue"],"sourcesContent":["<template>\n <transition name=\"fade\" appear>\n <div :class=\"className\" :style=\"{ zIndex: zIndex() }\">\n <div :class=\"cls.e('loader')\"></div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, zIndex } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { LoadingProps, ComponentSize } from '../../types'\n\ndefineOptions({ name: 'Loading' })\n\nconst props = withDefaults(defineProps<LoadingProps>(), { type: 'spinner' })\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst cls = bem('loading')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), cls.e(props.type)]\n})\n</script>\n"],"mappings":";;;;;;;;;EAiBA,MAAM,QAAQ;EAEd,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EAAE,MAAM,WAA4B,CAAA;EAE/E,MAAM,MAAM,IAAI,UAAS;EAEzB,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,MAAK;IAAG,IAAI,EAAE,MAAM,KAAI;IAAC;IACpD;;uBAxBC,YAIa,YAAA;IAJD,MAAK;IAAO,QAAA;;2BAGhB,CAFN,mBAEM,OAAA;KAFA,OAAK,eAAE,UAAA,MAAS;KAAG,OAAK,eAAA,EAAA,QAAY,MAAA,OAAA,EAAM,EAAA,CAAA;QAC9C,mBAAoC,OAAA,EAA9B,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-icon.js","names":[],"sources":["../../../src/components/menu/menu-icon.vue"],"sourcesContent":["<template>\n <u-icon v-if=\"typeof icon !== 'string'\">\n <component :is=\"icon\" />\n </u-icon>\n\n <img :src=\"icon\" v-else alt=\"icon\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DefineComponent } from 'vue'\n\nimport { UIcon } from '../icon'\n\ndefineOptions({\n name: 'MenuIcon'\n})\n\ndefineProps<{\n icon: string | DefineComponent\n}>()\n</script>\n"],"mappings":";;;;;;;;;;iBACuB,QAAA,SAAI,YAAA,WAAA,EAAzB,YAES,MAAA,YAAA,EAAA,EAAA,KAAA,GAAA,EAAA;2BADiB,EAAA,WAAA,EAAxB,YAAwB,wBAAR,QAAA,KAAI,CAAA,EAAA,CAAA;;uBAGtB,mBAAqC,OAAA;;IAA/B,KAAK,QAAA;IAAa,KAAI"}
1
+ {"version":3,"file":"menu-icon.js","names":[],"sources":["../../../src/components/menu/menu-icon.vue"],"sourcesContent":["<template>\n <u-icon v-if=\"typeof icon !== 'string'\">\n <component :is=\"icon\" />\n </u-icon>\n\n <img :src=\"icon\" v-else alt=\"icon\" />\n</template>\n\n<script lang=\"ts\" setup>\nimport type { DefineComponent } from 'vue'\n\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'MenuIcon' })\n\ndefineProps<{ icon: string | DefineComponent }>()\n</script>\n"],"mappings":";;;;;;;;;;iBACuB,QAAA,SAAI,YAAA,WAAA,EAAzB,YAES,MAAA,YAAA,EAAA,EAAA,KAAA,GAAA,EAAA;2BADiB,EAAA,WAAA,EAAxB,YAAwB,wBAAR,QAAA,KAAI,CAAA,EAAA,CAAA;;uBAGtB,mBAAqC,OAAA;;IAA/B,KAAK,QAAA;IAAa,KAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-sub-collapsed.js","names":[],"sources":["../../../src/components/menu/menu-sub-collapsed.vue"],"sourcesContent":["<template>\n <u-tip\n hide-arrow\n direction=\"right\"\n alignment=\"start\"\n :class=\"[collapsedCls.m(size), collapsedCls.e('panel')]\"\n style=\"padding: 0\"\n v-model:visible=\"visible\"\n >\n <li :class=\"[collapsedCls.e('sub-content'), bem.is('first-level', depth === 0)]\">\n <MenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <span v-else>{{ menu.title[0] }}</span>\n\n <template v-if=\"depth !== 0\">\n <span :class=\"collapsedCls.e('sub-title')\">\n {{ menu.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[collapsedCls.e('sub-expand')]\">\n <ArrowRight />\n </u-icon>\n </template>\n </li>\n\n <template #content>\n <u-scroll tag=\"ul\" :class=\"collapsedCls.e('sub-list')\">\n <template v-for=\"(child, index) of menu.children!\" :key=\"getKey(index, parentKey)\">\n <UMenuItemCollapsed\n v-if=\"!child.children?.length\"\n :menu=\"child\"\n :depth=\"depth + 1\"\n @click=\"closeSubMenu\"\n />\n\n <MenuSubCollapsed\n v-else\n :menu=\"child\"\n :parent-key=\"getKey(index, parentKey)\"\n :depth=\"depth + 1\"\n />\n </template>\n </u-scroll>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject, ref } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { UTip } from '../tip'\nimport { MenuDIKey } from './di'\nimport { getKey } from './helper'\nimport MenuIcon from './menu-icon.vue'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\n\ndefineOptions({\n name: 'MenuSubCollapsed'\n})\n\ndefineProps<{\n menu: MenuItem\n parentKey: string\n depth: number\n}>()\n\nconst visible = ref(false)\n\nfunction closeSubMenu() {\n visible.value = false\n}\n\nconst { collapsedCls, size } = inject(MenuDIKey)!\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAwEA,MAAM,UAAU,IAAI,MAAK;EAEzB,SAAS,eAAe;GACtB,QAAQ,QAAQ;;EAGlB,MAAM,EAAE,cAAc,SAAS,OAAO,UAAS;;;uBA7E7C,YA4CQ,MAAA,YAAA,EAAA;IA3CN,cAAA;IACA,WAAU;IACV,WAAU;IACT,OAAK,eAAA,CAAG,MAAA,aAAA,CAAa,EAAE,MAAA,KAAI,CAAA,EAAG,MAAA,aAAA,CAAa,EAAC,QAAA,CAAA,CAAA;IAC7C,OAAA,EAAA,WAAA,KAAA;IACQ,SAAS,QAAA;8DAAA,QAAO,QAAA;;IAmBb,SAAO,cAiBL,CAhBX,YAgBW,MAAA,YAAA,EAAA;KAhBD,KAAI;KAAM,OAAK,eAAE,MAAA,aAAA,CAAa,EAAC,WAAA,CAAA;;4BACW,EAAA,UAAA,KAAA,EAAlD,mBAcW,UAAA,MAAA,WAdwB,QAAA,KAAK,WAAtB,OAAO,UAAK;8DAA2B,MAAA,OAAA,CAAO,OAAO,QAAA,UAAS,EAAA,EAAA,CAAA,CAErE,MAAM,UAAU,UAAA,WAAA,EADzB,YAKE,aAAA;;OAHC,MAAM;OACN,OAAO,QAAA,QAAK;OACZ,SAAO;sDAGV,YAKE,6BAAA;;OAHC,MAAM;OACN,cAAY,MAAA,OAAA,CAAO,OAAO,QAAA,UAAS;OACnC,OAAO,QAAA,QAAK;;;;;;;;;2BAhBhB,CAfL,mBAeK,MAAA,EAfA,OAAK,eAAA,CAAG,MAAA,aAAA,CAAa,EAAC,cAAA,EAAiB,MAAA,IAAA,CAAI,GAAE,eAAgB,QAAA,UAAK,EAAA,CAAA,CAAA,EAAA,EAAA,CACrD,QAAA,KAAK,QAAA,WAAA,EAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,aAAA,CAAa,EAAC,OAAA,CAAA;oDAEnE,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,GAAA,EAAA,EAAA,GAEV,QAAA,UAAK,KAAA,WAAA,EAArB,mBASW,UAAA,EAAA,KAAA,GAAA,EAAA;KART,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,aAAA,CAAa,EAAC,YAAA,CAAA,EAAA,EAAA,gBACvB,QAAA,KAAK,MAAK,EAAA,EAAA;KAGf,mBAAA,SAAA;KACA,YAES,MAAA,YAAA,EAAA,EAFA,OAAK,eAAA,CAAG,MAAA,aAAA,CAAa,EAAC,aAAA,CAAA,CAAA,EAAA,EAAA;6BACf,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"menu-sub-collapsed.js","names":[],"sources":["../../../src/components/menu/menu-sub-collapsed.vue"],"sourcesContent":["<template>\n <u-tip\n hide-arrow\n direction=\"right\"\n alignment=\"start\"\n :class=\"[collapsedCls.m(size), collapsedCls.e('panel')]\"\n style=\"padding: 0\"\n v-model:visible=\"visible\"\n >\n <li :class=\"[collapsedCls.e('sub-content'), bem.is('first-level', depth === 0)]\">\n <MenuIcon v-if=\"menu.icon\" :icon=\"menu.icon\" :class=\"collapsedCls.e('icon')\" />\n\n <span v-else>{{ menu.title[0] }}</span>\n\n <template v-if=\"depth !== 0\">\n <span :class=\"collapsedCls.e('sub-title')\">\n {{ menu.title }}\n </span>\n\n <!-- 展开图标 -->\n <u-icon :class=\"[collapsedCls.e('sub-expand')]\">\n <ArrowRight />\n </u-icon>\n </template>\n </li>\n\n <template #content>\n <u-scroll tag=\"ul\" :class=\"collapsedCls.e('sub-list')\">\n <template v-for=\"(child, index) of menu.children!\" :key=\"getKey(index, parentKey)\">\n <UMenuItemCollapsed\n v-if=\"!child.children?.length\"\n :menu=\"child\"\n :depth=\"depth + 1\"\n @click=\"closeSubMenu\"\n />\n\n <MenuSubCollapsed\n v-else\n :menu=\"child\"\n :parent-key=\"getKey(index, parentKey)\"\n :depth=\"depth + 1\"\n />\n </template>\n </u-scroll>\n </template>\n </u-tip>\n</template>\n\n<script setup lang=\"ts\">\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { inject, ref } from 'vue'\n\nimport type { MenuItem } from '../../types'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { UTip } from '../tip'\nimport { MenuDIKey } from './di'\nimport { getKey } from './helper'\nimport MenuIcon from './menu-icon.vue'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\n\ndefineOptions({ name: 'MenuSubCollapsed' })\n\ndefineProps<{ menu: MenuItem; parentKey: string; depth: number }>()\n\nconst visible = ref(false)\n\nfunction closeSubMenu() {\n visible.value = false\n}\n\nconst { collapsedCls, size } = inject(MenuDIKey)!\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAkEA,MAAM,UAAU,IAAI,MAAK;EAEzB,SAAS,eAAe;GACtB,QAAQ,QAAQ;;EAGlB,MAAM,EAAE,cAAc,SAAS,OAAO,UAAS;;;uBAvE7C,YA4CQ,MAAA,YAAA,EAAA;IA3CN,cAAA;IACA,WAAU;IACV,WAAU;IACT,OAAK,eAAA,CAAG,MAAA,aAAA,CAAa,EAAE,MAAA,KAAI,CAAA,EAAG,MAAA,aAAA,CAAa,EAAC,QAAA,CAAA,CAAA;IAC7C,OAAA,EAAA,WAAA,KAAA;IACQ,SAAS,QAAA;8DAAA,QAAO,QAAA;;IAmBb,SAAO,cAiBL,CAhBX,YAgBW,MAAA,YAAA,EAAA;KAhBD,KAAI;KAAM,OAAK,eAAE,MAAA,aAAA,CAAa,EAAC,WAAA,CAAA;;4BACW,EAAA,UAAA,KAAA,EAAlD,mBAcW,UAAA,MAAA,WAdwB,QAAA,KAAK,WAAtB,OAAO,UAAK;8DAA2B,MAAA,OAAA,CAAO,OAAO,QAAA,UAAS,EAAA,EAAA,CAAA,CAErE,MAAM,UAAU,UAAA,WAAA,EADzB,YAKE,aAAA;;OAHC,MAAM;OACN,OAAO,QAAA,QAAK;OACZ,SAAO;sDAGV,YAKE,6BAAA;;OAHC,MAAM;OACN,cAAY,MAAA,OAAA,CAAO,OAAO,QAAA,UAAS;OACnC,OAAO,QAAA,QAAK;;;;;;;;;2BAhBhB,CAfL,mBAeK,MAAA,EAfA,OAAK,eAAA,CAAG,MAAA,aAAA,CAAa,EAAC,cAAA,EAAiB,MAAA,IAAA,CAAI,GAAE,eAAgB,QAAA,UAAK,EAAA,CAAA,CAAA,EAAA,EAAA,CACrD,QAAA,KAAK,QAAA,WAAA,EAArB,YAA+E,aAAA;;KAAnD,MAAM,QAAA,KAAK;KAAO,OAAK,eAAE,MAAA,aAAA,CAAa,EAAC,OAAA,CAAA;oDAEnE,mBAAuC,QAAA,YAAA,gBAAvB,QAAA,KAAK,MAAK,GAAA,EAAA,EAAA,GAEV,QAAA,UAAK,KAAA,WAAA,EAArB,mBASW,UAAA,EAAA,KAAA,GAAA,EAAA;KART,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,aAAA,CAAa,EAAC,YAAA,CAAA,EAAA,EAAA,gBACvB,QAAA,KAAK,MAAK,EAAA,EAAA;KAGf,mBAAA,SAAA;KACA,YAES,MAAA,YAAA,EAAA,EAFA,OAAK,eAAA,CAAG,MAAA,aAAA,CAAa,EAAC,aAAA,CAAA,CAAA,EAAA,EAAA;6BACf,CAAd,YAAc,MAAA,WAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","names":[],"sources":["../../../src/components/menu/menu.vue"],"sourcesContent":["<template>\n <u-scroll\n tag=\"ul\"\n :class=\"[menuCls.b, menuCls.m(size)]\"\n :container-class=\"menuCls.e('container')\"\n >\n <!-- 常规 -->\n <template v-if=\"!collapsed\">\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSub\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItem v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n\n <!-- 折叠 -->\n <template v-else>\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSubCollapsed\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItemCollapsed v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, shallowReactive, watch } from 'vue'\n\nimport type { MenuEmits, MenuProps, ComponentSize } from '../../types'\nimport { UScroll } from '../scroll'\nimport { MenuDIKey } from './di'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\nimport UMenuItem from './menu-item.vue'\nimport UMenuSubCollapsed from './menu-sub-collapsed.vue'\nimport UMenuSub from './menu-sub.vue'\nimport { walkMenuWithPath } from './walk-menu-path'\n\ndefineOptions({\n name: 'Menu'\n})\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n expand: false,\n activeIndex: '',\n collapsed: false,\n uniqueOpened: false\n})\n\nconst emit = defineEmits<MenuEmits>()\n\nconst cls = bem('menu')\nconst collapsedCls = bem('collapsed-menu')\n\nconst menuCls = computed(() => {\n return props.collapsed ? collapsedCls : cls\n})\n\nconst expandTransition = new ExpandTransition({\n enterTransition:\n 'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',\n leaveTransition:\n 'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',\n opacity: true\n})\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst expandedPath = shallowReactive(new Set<string>())\n\nwatch(\n [() => props.currentPath, () => props.menus],\n ([currentPath, menus]) => {\n if (!currentPath || !menus) return\n menus.forEach((menu) => {\n walkMenuWithPath(menu, (node, nodePath) => {\n if (node.path === currentPath) {\n nodePath.slice(0, -1).forEach((path) => {\n expandedPath.add(path.path)\n })\n return false\n }\n })\n })\n },\n {\n immediate: true\n }\n)\n\nprovide(MenuDIKey, {\n cls,\n collapsedCls,\n menuProps: props,\n menuEmit: emit,\n expandedPath,\n size,\n expandTransition\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,OAAM;EACtB,MAAM,eAAe,IAAI,iBAAgB;EAEzC,MAAM,UAAU,eAAe;GAC7B,OAAO,MAAM,YAAY,eAAe;IACzC;EAED,MAAM,mBAAmB,IAAI,iBAAiB;GAC5C,iBACE;GACF,iBACE;GACF,SAAS;GACV,CAAA;EAED,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EACzC,MAAM,WACP,CAAA;EAED,MAAM,eAAe,gCAAgB,IAAI,KAAa,CAAA;EAEtD,MACE,OAAO,MAAM,mBAAmB,MAAM,MAAK,GAC1C,CAAC,aAAa,WAAW;GACxB,IAAI,CAAC,eAAe,CAAC,OAAO;GAC5B,MAAM,SAAS,SAAS;IACtB,iBAAiB,OAAO,MAAM,aAAa;KACzC,IAAI,KAAK,SAAS,aAAa;MAC7B,SAAS,MAAM,GAAG,GAAE,CAAE,SAAS,SAAS;OACtC,aAAa,IAAI,KAAK,KAAI;QAC3B;MACD,OAAO;;MAEV;KACF;KAEH,EACE,WAAW,MAEf,CAAA;EAEA,QAAQ,WAAW;GACjB;GACA;GACA,WAAW;GACX,UAAU;GACV;GACA;GACA;GACD,CAAA;;uBA7GC,YA8BW,MAAA,YAAA,EAAA;IA7BT,KAAI;IACH,OAAK,eAAA,CAAG,QAAA,MAAQ,GAAG,QAAA,MAAQ,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA;IACjC,mBAAiB,QAAA,MAAQ,EAAC,YAAA;;2BAEhB,CAAX,mBAAA,OAAA,EAAA,CACiB,QAAA,aAAA,UAAA,KAAA,EACf,mBAQW,UAAA,EAAA,KAAA,GAAA,EAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,OAAK,EAAA,CAE1C,KAAK,UAAU,UAAA,WAAA,EADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,MAAK;MACxB,OAAO;0DAEV,YAAyD,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO;;8BAKxD,mBAUW,UAAA,EAAA,KAAA,GAAA,EAAA,CAXX,mBAAA,OAAA,GAAA,UAAA,KAAA,EAEE,mBAQW,UAAA,MAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,OAAK,EAAA,CAE1C,KAAK,UAAU,UAAA,WAAA,EADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,MAAK;MACxB,OAAO;0DAEV,YAAkE,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO"}
1
+ {"version":3,"file":"menu.js","names":[],"sources":["../../../src/components/menu/menu.vue"],"sourcesContent":["<template>\n <u-scroll\n tag=\"ul\"\n :class=\"[menuCls.b, menuCls.m(size)]\"\n :container-class=\"menuCls.e('container')\"\n >\n <!-- 常规 -->\n <template v-if=\"!collapsed\">\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSub\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItem v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n\n <!-- 折叠 -->\n <template v-else>\n <template v-for=\"(menu, index) of menus\" :key=\"index\">\n <UMenuSubCollapsed\n v-if=\"menu.children?.length\"\n :menu=\"menu\"\n :parent-key=\"String(index)\"\n :depth=\"0\"\n />\n <UMenuItemCollapsed v-else :menu=\"menu\" :key=\"index\" :depth=\"0\" />\n </template>\n </template>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, shallowReactive, watch } from 'vue'\n\nimport type { MenuEmits, MenuProps, ComponentSize } from '../../types'\nimport { UScroll } from '../scroll'\nimport { MenuDIKey } from './di'\nimport UMenuItemCollapsed from './menu-item-collapsed.vue'\nimport UMenuItem from './menu-item.vue'\nimport UMenuSubCollapsed from './menu-sub-collapsed.vue'\nimport UMenuSub from './menu-sub.vue'\nimport { walkMenuWithPath } from './walk-menu-path'\n\ndefineOptions({ name: 'Menu' })\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n expand: false,\n activeIndex: '',\n collapsed: false,\n uniqueOpened: false\n})\n\nconst emit = defineEmits<MenuEmits>()\n\nconst cls = bem('menu')\nconst collapsedCls = bem('collapsed-menu')\n\nconst menuCls = computed(() => {\n return props.collapsed ? collapsedCls : cls\n})\n\nconst expandTransition = new ExpandTransition({\n enterTransition:\n 'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',\n leaveTransition:\n 'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',\n opacity: true\n})\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst expandedPath = shallowReactive(new Set<string>())\n\nwatch(\n [() => props.currentPath, () => props.menus],\n ([currentPath, menus]) => {\n if (!currentPath || !menus) return\n menus.forEach((menu) => {\n walkMenuWithPath(menu, (node, nodePath) => {\n if (node.path === currentPath) {\n nodePath.slice(0, -1).forEach((path) => {\n expandedPath.add(path.path)\n })\n return false\n }\n })\n })\n },\n { immediate: true }\n)\n\nprovide(MenuDIKey, {\n cls,\n collapsedCls,\n menuProps: props,\n menuEmit: emit,\n expandedPath,\n size,\n expandTransition\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,OAAM;EACtB,MAAM,eAAe,IAAI,iBAAgB;EAEzC,MAAM,UAAU,eAAe;GAC7B,OAAO,MAAM,YAAY,eAAe;IACzC;EAED,MAAM,mBAAmB,IAAI,iBAAiB;GAC5C,iBACE;GACF,iBACE;GACF,SAAS;GACV,CAAA;EAED,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EAAE,MAAM,WAA4B,CAAA;EAE/E,MAAM,eAAe,gCAAgB,IAAI,KAAa,CAAA;EAEtD,MACE,OAAO,MAAM,mBAAmB,MAAM,MAAK,GAC1C,CAAC,aAAa,WAAW;GACxB,IAAI,CAAC,eAAe,CAAC,OAAO;GAC5B,MAAM,SAAS,SAAS;IACtB,iBAAiB,OAAO,MAAM,aAAa;KACzC,IAAI,KAAK,SAAS,aAAa;MAC7B,SAAS,MAAM,GAAG,GAAE,CAAE,SAAS,SAAS;OACtC,aAAa,IAAI,KAAK,KAAI;QAC3B;MACD,OAAO;;MAEV;KACF;KAEH,EAAE,WAAW,MACf,CAAA;EAEA,QAAQ,WAAW;GACjB;GACA;GACA,WAAW;GACX,UAAU;GACV;GACA;GACA;GACD,CAAA;;uBAvGC,YA8BW,MAAA,YAAA,EAAA;IA7BT,KAAI;IACH,OAAK,eAAA,CAAG,QAAA,MAAQ,GAAG,QAAA,MAAQ,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA;IACjC,mBAAiB,QAAA,MAAQ,EAAC,YAAA;;2BAEhB,CAAX,mBAAA,OAAA,EAAA,CACiB,QAAA,aAAA,UAAA,KAAA,EACf,mBAQW,UAAA,EAAA,KAAA,GAAA,EAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,OAAK,EAAA,CAE1C,KAAK,UAAU,UAAA,WAAA,EADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,MAAK;MACxB,OAAO;0DAEV,YAAyD,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO;;8BAKxD,mBAUW,UAAA,EAAA,KAAA,GAAA,EAAA,CAXX,mBAAA,OAAA,GAAA,UAAA,KAAA,EAEE,mBAQW,UAAA,MAAA,WARuB,QAAA,QAAhB,MAAM,UAAK;6DAAkB,OAAK,EAAA,CAE1C,KAAK,UAAU,UAAA,WAAA,EADvB,YAKE,aAAA;;MAHO;MACN,cAAY,OAAO,MAAK;MACxB,OAAO;0DAEV,YAAkE,aAAA;MAAhC;MAAO,KAAK;MAAQ,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-box.js","names":[],"sources":["../../../src/components/message/message-box.vue"],"sourcesContent":["<template>\n <transition-group name=\"message\" appear @after-leave=\"handleAfterLeave\">\n <UMessage\n v-for=\"({ onClose, ...message }, index) of messages\"\n v-bind=\"message\"\n :data-id=\"message.key\"\n @close=\"handleClose(index, onClose)\"\n />\n </transition-group>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { MessageOptions } from '../../types'\nimport UMessage from './message.vue'\n\ndefineOptions({\n name: 'MessageBox'\n})\n\ndefineProps<{\n messages: Array<Omit<MessageOptions & { key: string }, 'onClosed'>>\n}>()\n\nconst emit = defineEmits<{\n (e: 'closed', id: string): void\n (e: 'close', index: number): void\n}>()\n\nfunction handleAfterLeave(el: Element) {\n emit('closed', (el as HTMLElement).dataset.id as string)\n}\n\nfunction handleClose(i: number, onClose?: () => void) {\n emit('close', i)\n onClose?.()\n}\n</script>\n"],"mappings":";;;;;;;;;EAuBA,MAAM,OAAO;EAKb,SAAS,iBAAiB,IAAa;GACrC,KAAK,UAAW,GAAmB,QAAQ,GAAY;;EAGzD,SAAS,YAAY,GAAW,SAAsB;GACpD,KAAK,SAAS,EAAC;GACf,WAAU;;;uBAjCV,YAOmB,iBAAA;IAPD,MAAK;IAAU,QAAA;IAAQ,cAAa;;2BAEE,EAAA,UAAA,KAAA,EADtD,mBAKE,UAAA,MAAA,WAJ2C,QAAA,WAAQ,EAAzC,SAAO,GAAK,WAAW,UAAK;yBADxC,YAKE,aALF,WAKE,EAAA,SAAA,MAAA,EAHQ,SAAO;MACd,WAAS,QAAQ;MACjB,UAAK,WAAE,YAAY,OAAO,QAAO"}
1
+ {"version":3,"file":"message-box.js","names":[],"sources":["../../../src/components/message/message-box.vue"],"sourcesContent":["<template>\n <transition-group name=\"message\" appear @after-leave=\"handleAfterLeave\">\n <UMessage\n v-for=\"({ onClose, ...message }, index) of messages\"\n v-bind=\"message\"\n :data-id=\"message.key\"\n @close=\"handleClose(index, onClose)\"\n />\n </transition-group>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { MessageOptions } from '../../types'\nimport UMessage from './message.vue'\n\ndefineOptions({ name: 'MessageBox' })\n\ndefineProps<{ messages: Array<Omit<MessageOptions & { key: string }, 'onClosed'>> }>()\n\nconst emit = defineEmits<{ (e: 'closed', id: string): void; (e: 'close', index: number): void }>()\n\nfunction handleAfterLeave(el: Element) {\n emit('closed', (el as HTMLElement).dataset.id as string)\n}\n\nfunction handleClose(i: number, onClose?: () => void) {\n emit('close', i)\n onClose?.()\n}\n</script>\n"],"mappings":";;;;;;;;;EAmBA,MAAM,OAAO;EAEb,SAAS,iBAAiB,IAAa;GACrC,KAAK,UAAW,GAAmB,QAAQ,GAAY;;EAGzD,SAAS,YAAY,GAAW,SAAsB;GACpD,KAAK,SAAS,EAAC;GACf,WAAU;;;uBA1BV,YAOmB,iBAAA;IAPD,MAAK;IAAU,QAAA;IAAQ,cAAa;;2BAEE,EAAA,UAAA,KAAA,EADtD,mBAKE,UAAA,MAAA,WAJ2C,QAAA,WAAQ,EAAzC,SAAO,GAAK,WAAW,UAAK;yBADxC,YAKE,aALF,WAKE,EAAA,SAAA,MAAA,EAHQ,SAAO;MACd,WAAS,QAAQ;MACjB,UAAK,WAAE,YAAY,OAAO,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","names":[],"sources":["../../../src/components/message/message.vue"],"sourcesContent":["<template>\n <li\n :class=\"[cls.b, cls.m(size), cls.m('color-' + getTypeColor(type))]\"\n @mouseenter=\"suspendClose\"\n @mouseleave=\"close\"\n >\n <div :class=\"cls.e('icon')\">\n <UIcon>\n <component :is=\"getTypeIcon(type, icon)\" />\n </UIcon>\n </div>\n <div :class=\"cls.e('content')\" v-if=\"html\" v-html=\"message\"></div>\n <div :class=\"cls.e('content')\" v-else>\n {{ message }}\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable || duration === 0\" @click.stop=\"immediateClose\">\n <UIcon><Close /></UIcon>\n </div>\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { Close } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { onMounted } from 'vue'\n\nimport type { MessageProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { getTypeColor, getTypeIcon } from './helper'\n\ndefineOptions({\n name: 'Message'\n})\n\nconst props = withDefaults(defineProps<MessageProps>(), {\n type: 'default',\n duration: 3000,\n offset: 20\n})\n\nconst emit = defineEmits<{\n (e: 'close'): void\n}>()\n\nconst { size } = useFallbackProps([props], {\n size: 'default'\n})\n\nconst cls = bem('message')\n\nlet startTime = 0\nlet timer: number\nlet restDuration = 0\n\nfunction close() {\n if (props.duration === 0) return\n startTime = Date.now()\n timer = setTimeout(() => {\n emit('close')\n }, restDuration)\n}\n\nfunction startClose() {\n if (props.duration <= 0) return\n restDuration = props.duration\n close()\n}\n\nonMounted(() => {\n startClose()\n})\n\nfunction suspendClose() {\n clearTimeout(timer)\n restDuration = restDuration - (Date.now() - startTime)\n}\n\nfunction immediateClose() {\n emit('close')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAmCA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAIb,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EACzC,MAAM,WACP,CAAA;EAED,MAAM,MAAM,IAAI,UAAS;EAEzB,IAAI,YAAY;EAChB,IAAI;EACJ,IAAI,eAAe;EAEnB,SAAS,QAAQ;GACf,IAAI,MAAM,aAAa,GAAG;GAC1B,YAAY,KAAK,KAAI;GACrB,QAAQ,iBAAiB;IACvB,KAAK,QAAO;MACX,aAAY;;EAGjB,SAAS,aAAa;GACpB,IAAI,MAAM,YAAY,GAAG;GACzB,eAAe,MAAM;GACrB,OAAM;;EAGR,gBAAgB;GACd,YAAW;IACZ;EAED,SAAS,eAAe;GACtB,aAAa,MAAK;GAClB,eAAe,gBAAgB,KAAK,KAAI,GAAI;;EAG9C,SAAS,iBAAiB;GACxB,KAAK,QAAO;;;uBA9EZ,mBAiBK,MAAA;IAhBF,OAAK,eAAA;KAAG,MAAA,IAAA,CAAI;KAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA;KAAG,MAAA,IAAA,CAAI,EAAC,WAAY,MAAA,aAAA,CAAa,QAAA,KAAI,CAAA;KAAA,CAAA;IAC9D,cAAY;IACZ,cAAY;;IAEb,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,CAChB,YAEQ,MAAA,YAAA,EAAA,MAAA;4BADqC,EAAA,WAAA,EAA3C,YAA2C,wBAA3B,MAAA,YAAA,CAAY,QAAA,MAAM,QAAA,KAAI,CAAA,CAAA,EAAA,CAAA;;;IAGL,QAAA,QAAA,WAAA,EAArC,mBAAkE,OAAA;;KAA5D,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA;KAAyB,WAAQ,QAAA;8CACnD,mBAEM,OAAA;;KAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA;uBACb,QAAA,QAAO,EAAA,EAAA;IAEuB,QAAA,YAAY,QAAA,aAAQ,KAAA,WAAA,EAAvD,mBAEM,OAAA;;KAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;KAA8C,SAAK,cAAO,gBAAc,CAAA,OAAA,CAAA;QACxF,YAAwB,MAAA,YAAA,EAAA,MAAA;4BAAR,CAAT,YAAS,MAAA,MAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"message.js","names":[],"sources":["../../../src/components/message/message.vue"],"sourcesContent":["<template>\n <li\n :class=\"[cls.b, cls.m(size), cls.m('color-' + getTypeColor(type))]\"\n @mouseenter=\"suspendClose\"\n @mouseleave=\"close\"\n >\n <div :class=\"cls.e('icon')\">\n <UIcon>\n <component :is=\"getTypeIcon(type, icon)\" />\n </UIcon>\n </div>\n <div :class=\"cls.e('content')\" v-if=\"html\" v-html=\"message\"></div>\n <div :class=\"cls.e('content')\" v-else>\n {{ message }}\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable || duration === 0\" @click.stop=\"immediateClose\">\n <UIcon><Close /></UIcon>\n </div>\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { Close } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { onMounted } from 'vue'\n\nimport type { MessageProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { getTypeColor, getTypeIcon } from './helper'\n\ndefineOptions({ name: 'Message' })\n\nconst props = withDefaults(defineProps<MessageProps>(), {\n type: 'default',\n duration: 3000,\n offset: 20\n})\n\nconst emit = defineEmits<{ (e: 'close'): void }>()\n\nconst { size } = useFallbackProps([props], { size: 'default' })\n\nconst cls = bem('message')\n\nlet startTime = 0\nlet timer: number\nlet restDuration = 0\n\nfunction close() {\n if (props.duration === 0) return\n startTime = Date.now()\n timer = setTimeout(() => {\n emit('close')\n }, restDuration)\n}\n\nfunction startClose() {\n if (props.duration <= 0) return\n restDuration = props.duration\n close()\n}\n\nonMounted(() => {\n startClose()\n})\n\nfunction suspendClose() {\n clearTimeout(timer)\n restDuration = restDuration - (Date.now() - startTime)\n}\n\nfunction immediateClose() {\n emit('close')\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAiCA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAEb,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EAAE,MAAM,WAAW,CAAA;EAE9D,MAAM,MAAM,IAAI,UAAS;EAEzB,IAAI,YAAY;EAChB,IAAI;EACJ,IAAI,eAAe;EAEnB,SAAS,QAAQ;GACf,IAAI,MAAM,aAAa,GAAG;GAC1B,YAAY,KAAK,KAAI;GACrB,QAAQ,iBAAiB;IACvB,KAAK,QAAO;MACX,aAAY;;EAGjB,SAAS,aAAa;GACpB,IAAI,MAAM,YAAY,GAAG;GACzB,eAAe,MAAM;GACrB,OAAM;;EAGR,gBAAgB;GACd,YAAW;IACZ;EAED,SAAS,eAAe;GACtB,aAAa,MAAK;GAClB,eAAe,gBAAgB,KAAK,KAAI,GAAI;;EAG9C,SAAS,iBAAiB;GACxB,KAAK,QAAO;;;uBAxEZ,mBAiBK,MAAA;IAhBF,OAAK,eAAA;KAAG,MAAA,IAAA,CAAI;KAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA;KAAG,MAAA,IAAA,CAAI,EAAC,WAAY,MAAA,aAAA,CAAa,QAAA,KAAI,CAAA;KAAA,CAAA;IAC9D,cAAY;IACZ,cAAY;;IAEb,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA,EAAA,EAAA,CAChB,YAEQ,MAAA,YAAA,EAAA,MAAA;4BADqC,EAAA,WAAA,EAA3C,YAA2C,wBAA3B,MAAA,YAAA,CAAY,QAAA,MAAM,QAAA,KAAI,CAAA,CAAA,EAAA,CAAA;;;IAGL,QAAA,QAAA,WAAA,EAArC,mBAAkE,OAAA;;KAA5D,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA;KAAyB,WAAQ,QAAA;8CACnD,mBAEM,OAAA;;KAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA;uBACb,QAAA,QAAO,EAAA,EAAA;IAEuB,QAAA,YAAY,QAAA,aAAQ,KAAA,WAAA,EAAvD,mBAEM,OAAA;;KAFA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,QAAA,CAAA;KAA8C,SAAK,cAAO,gBAAc,CAAA,OAAA,CAAA;QACxF,YAAwB,MAAA,YAAA,EAAA,MAAA;4BAAR,CAAT,YAAS,MAAA,MAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-confirm.js","names":["$emit"],"sources":["../../../src/components/message-confirm/message-confirm.vue"],"sourcesContent":["<template>\n <transition name=\"message-confirm-fade\" @after-leave=\"$emit('destroy')\">\n <div :class=\"[cls.b, cls.m(size)]\" v-show=\"visible\">\n <div :class=\"cls.e('mask')\" :style=\"{ zIndex: `${zIndex()}` }\">\n <div :class=\"cls.e('box')\">\n <div :class=\"cls.e('header')\" v-if=\"title\">{{ title }}</div>\n <div :class=\"cls.e('content')\">{{ message }}</div>\n <div :class=\"cls.e('footer')\">\n <UButton\n plain\n @click=\"close('cancel')\"\n :class=\"cls.em('footer', 'btn')\"\n v-if=\"cancelButtonText\"\n >{{ cancelButtonText }}</UButton\n >\n <UButton\n :type=\"confirmButtonType\"\n @click=\"close('confirm')\"\n :class=\"cls.em('footer', 'btn')\"\n >{{ confirmButtonText }}</UButton\n >\n </div>\n </div>\n </div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, zIndex } from '@veltra/utils'\nimport { ref, onMounted } from 'vue'\n\nimport type { MessageConfirmProps, ColorType, ComponentSize } from '../../types'\nimport { UButton } from '../button'\n\ndefineOptions({\n name: 'MessageConfirm'\n})\n\nconst props = withDefaults(defineProps<MessageConfirmProps>(), {\n title: '',\n message: '',\n confirmButtonText: '确定',\n confirmButtonType: 'primary' as ColorType,\n cancelButtonText: ''\n})\n\nconst { size } = useFallbackProps([props], {\n size: 'default' as ComponentSize\n})\n\nconst cls = bem('message-confirm')\n\nconst visible = ref<boolean>(false)\n\nonMounted(() => {\n visible.value = true\n})\n\nconst close = (action: 'cancel' | 'confirm') => {\n visible.value = false\n if (props.onClose) props.onClose(action)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAwCA,MAAM,QAAQ;EAQd,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EACzC,MAAM,WACP,CAAA;EAED,MAAM,MAAM,IAAI,kBAAiB;EAEjC,MAAM,UAAU,IAAa,MAAK;EAElC,gBAAgB;GACd,QAAQ,QAAQ;IACjB;EAED,MAAM,SAAS,WAAiC;GAC9C,QAAQ,QAAQ;GAChB,IAAI,MAAM,SAAS,MAAM,QAAQ,OAAM;;;uBA7DvC,YAwBa,YAAA;IAxBD,MAAK;IAAwB,cAAW,OAAA,OAAA,OAAA,MAAA,WAAEA,KAAAA,MAAK,UAAA;IAA3D,WAAA;;2BAuBQ,CAAA,eAtBN,mBAsBM,OAAA,EAtBA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA,EAAA,EAAA,CAC7B,mBAoBM,OAAA;KApBA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KAAW,OAAK,eAAA,EAAA,QAAA,GAAe,MAAA,OAAA,EAAM,IAAA,CAAA;QACrD,mBAkBM,OAAA,EAlBA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,MAAA,CAAA,EAAA,EAAA;KACoB,QAAA,SAAA,WAAA,EAApC,mBAA4D,OAAA;;MAAtD,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;wBAA4B,QAAA,MAAK,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;KACnD,mBAAkD,OAAA,EAA5C,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA,EAAA,EAAA,gBAAgB,QAAA,QAAO,EAAA,EAAA;KACzC,mBAcM,OAAA,EAdA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,CAKR,QAAA,oBAAA,WAAA,EAJR,YAMC,MAAA,YAAA,EAAA;;MALC,OAAA;MACC,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,SAAA;MACZ,OAAK,eAAE,MAAA,IAAA,CAAI,GAAE,UAAA,MAAA,CAAA;;6BAES,CAAA,gBAAA,gBAAnB,QAAA,iBAAgB,EAAA,EAAA,CAAA,CAAA;;2DAEtB,YAKC,MAAA,YAAA,EAAA;MAJE,MAAM,QAAA;MACN,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,UAAA;MACZ,OAAK,eAAE,MAAA,IAAA,CAAI,GAAE,UAAA,MAAA,CAAA;;6BACU,CAAA,gBAAA,gBAApB,QAAA,kBAAiB,EAAA,EAAA,CAAA,CAAA;;;8BAjBY,QAAA,MAAO,CAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"message-confirm.js","names":["$emit"],"sources":["../../../src/components/message-confirm/message-confirm.vue"],"sourcesContent":["<template>\n <transition name=\"message-confirm-fade\" @after-leave=\"$emit('destroy')\">\n <div :class=\"[cls.b, cls.m(size)]\" v-show=\"visible\">\n <div :class=\"cls.e('mask')\" :style=\"{ zIndex: `${zIndex()}` }\">\n <div :class=\"cls.e('box')\">\n <div :class=\"cls.e('header')\" v-if=\"title\">{{ title }}</div>\n <div :class=\"cls.e('content')\">{{ message }}</div>\n <div :class=\"cls.e('footer')\">\n <UButton\n plain\n @click=\"close('cancel')\"\n :class=\"cls.em('footer', 'btn')\"\n v-if=\"cancelButtonText\"\n >{{ cancelButtonText }}</UButton\n >\n <UButton\n :type=\"confirmButtonType\"\n @click=\"close('confirm')\"\n :class=\"cls.em('footer', 'btn')\"\n >{{ confirmButtonText }}</UButton\n >\n </div>\n </div>\n </div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport { bem, zIndex } from '@veltra/utils'\nimport { ref, onMounted } from 'vue'\n\nimport type { MessageConfirmProps, ColorType, ComponentSize } from '../../types'\nimport { UButton } from '../button'\n\ndefineOptions({ name: 'MessageConfirm' })\n\nconst props = withDefaults(defineProps<MessageConfirmProps>(), {\n title: '',\n message: '',\n confirmButtonText: '确定',\n confirmButtonType: 'primary' as ColorType,\n cancelButtonText: ''\n})\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst cls = bem('message-confirm')\n\nconst visible = ref<boolean>(false)\n\nonMounted(() => {\n visible.value = true\n})\n\nconst close = (action: 'cancel' | 'confirm') => {\n visible.value = false\n if (props.onClose) props.onClose(action)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAsCA,MAAM,QAAQ;EAQd,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAK,EAAG,EAAE,MAAM,WAA4B,CAAA;EAE/E,MAAM,MAAM,IAAI,kBAAiB;EAEjC,MAAM,UAAU,IAAa,MAAK;EAElC,gBAAgB;GACd,QAAQ,QAAQ;IACjB;EAED,MAAM,SAAS,WAAiC;GAC9C,QAAQ,QAAQ;GAChB,IAAI,MAAM,SAAS,MAAM,QAAQ,OAAM;;;uBAzDvC,YAwBa,YAAA;IAxBD,MAAK;IAAwB,cAAW,OAAA,OAAA,OAAA,MAAA,WAAEA,KAAAA,MAAK,UAAA;IAA3D,WAAA;;2BAuBQ,CAAA,eAtBN,mBAsBM,OAAA,EAtBA,OAAK,eAAA,CAAG,MAAA,IAAA,CAAI,GAAG,MAAA,IAAA,CAAI,EAAE,MAAA,KAAI,CAAA,CAAA,CAAA,EAAA,EAAA,CAC7B,mBAoBM,OAAA;KApBA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,OAAA,CAAA;KAAW,OAAK,eAAA,EAAA,QAAA,GAAe,MAAA,OAAA,EAAM,IAAA,CAAA;QACrD,mBAkBM,OAAA,EAlBA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,MAAA,CAAA,EAAA,EAAA;KACoB,QAAA,SAAA,WAAA,EAApC,mBAA4D,OAAA;;MAAtD,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA;wBAA4B,QAAA,MAAK,EAAA,EAAA,IAAA,mBAAA,QAAA,KAAA;KACnD,mBAAkD,OAAA,EAA5C,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,UAAA,CAAA,EAAA,EAAA,gBAAgB,QAAA,QAAO,EAAA,EAAA;KACzC,mBAcM,OAAA,EAdA,OAAK,eAAE,MAAA,IAAA,CAAI,EAAC,SAAA,CAAA,EAAA,EAAA,CAKR,QAAA,oBAAA,WAAA,EAJR,YAMC,MAAA,YAAA,EAAA;;MALC,OAAA;MACC,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,SAAA;MACZ,OAAK,eAAE,MAAA,IAAA,CAAI,GAAE,UAAA,MAAA,CAAA;;6BAES,CAAA,gBAAA,gBAAnB,QAAA,iBAAgB,EAAA,EAAA,CAAA,CAAA;;2DAEtB,YAKC,MAAA,YAAA,EAAA;MAJE,MAAM,QAAA;MACN,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAK,UAAA;MACZ,OAAK,eAAE,MAAA,IAAA,CAAI,GAAE,UAAA,MAAA,CAAA;;6BACU,CAAA,gBAAA,gBAApB,QAAA,kBAAiB,EAAA,EAAA,CAAA,CAAA;;;8BAjBY,QAAA,MAAO,CAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select-option.js","names":[],"sources":["../../../src/components/multi-select/multi-select-option.vue"],"sourcesContent":["<template>\n <li\n :class=\"optionClass\"\n @click=\"handleClick\"\n @mousedown=\"handleMousedown\"\n @mouseup=\"handleMouseup\"\n @mouseleave=\"handleMouseleave\"\n :ref=\"measureRef\"\n >\n <u-checkbox\n :class=\"checkboxClass\"\n :model-value=\"checked\"\n @update:model-value=\"emit('check', $event)\"\n @click.stop\n :disabled=\"disabled\"\n />\n\n <slot />\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Ripple } from '@veltra/directives'\nimport { inject, onBeforeUnmount, shallowRef } from 'vue'\n\nimport { UCheckbox } from '../checkbox'\nimport { MultiSelectDIKey } from './di'\n\ndefineOptions({\n name: 'MultiSelectOption'\n})\n\nconst props = defineProps<{\n option: Record<string, any>\n disabled?: boolean\n checked: boolean\n /**\n * 虚拟项索引:对应 `options` 数组中的绝对位置。\n * 非虚拟模式下可省略;虚拟模式下必须传入,否则元素卸载时 Virtualizer 无法及时解绑,\n * 会因为 ResizeObserver 对脱离 DOM 的元素回调 size=0 而污染尺寸缓存。\n */\n index?: number\n measureElement?: (index: number, el: Element | null) => void\n}>()\n\nfunction measureRef(el: unknown) {\n if (typeof props.index !== 'number' || !props.measureElement) return\n props.measureElement(props.index, el as Element | null)\n}\n\nconst emit = defineEmits<{\n (e: 'check', checked: boolean): void\n}>()\n\nconst { optionClass, rippleClass, checkboxClass } = inject(MultiSelectDIKey)!\n\nconst rippleRef = shallowRef<Ripple | null>(null)\n\nfunction handleClick(e) {\n if (props.disabled) return\n emit('check', !props.checked)\n}\n\nfunction handleMousedown(e: MouseEvent) {\n if (props.disabled) return\n\n // 清理旧实例,避免同一元素上多个 Ripple 实例同时修改样式\n if (rippleRef.value) {\n rippleRef.value.remove()\n rippleRef.value = null\n }\n\n rippleRef.value = new Ripple(e.currentTarget as HTMLElement, {\n rippleClass\n })\n\n rippleRef.value.showByEvent(e)\n}\n\nfunction handleMouseleave() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nfunction handleMouseup() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nonBeforeUnmount(() => {\n rippleRef.value?.remove()\n rippleRef.value = null\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;EAgCA,MAAM,QAAQ;EAad,SAAS,WAAW,IAAa;GAC/B,IAAI,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,gBAAgB;GAC9D,MAAM,eAAe,MAAM,OAAO,GAAoB;;EAGxD,MAAM,OAAO;EAIb,MAAM,EAAE,aAAa,aAAa,kBAAkB,OAAO,iBAAgB;EAE3E,MAAM,YAAY,WAA0B,KAAI;EAEhD,SAAS,YAAY,GAAG;GACtB,IAAI,MAAM,UAAU;GACpB,KAAK,SAAS,CAAC,MAAM,QAAO;;EAG9B,SAAS,gBAAgB,GAAe;GACtC,IAAI,MAAM,UAAU;GAGpB,IAAI,UAAU,OAAO;IACnB,UAAU,MAAM,QAAO;IACvB,UAAU,QAAQ;;GAGpB,UAAU,QAAQ,IAAI,OAAO,EAAE,eAA8B,EAC3D,aACD,CAAA;GAED,UAAU,MAAM,YAAY,EAAC;;EAG/B,SAAS,mBAAmB;GAC1B,UAAU,OAAO,QAAO;GACxB,UAAU,QAAQ;;EAGpB,SAAS,gBAAgB;GACvB,UAAU,OAAO,QAAO;GACxB,UAAU,QAAQ;;EAGpB,sBAAsB;GACpB,UAAU,OAAO,QAAO;GACxB,UAAU,QAAQ;IACnB;;uBA3FC,mBAiBK,MAAA;IAhBF,OAAK,eAAE,MAAA,YAAW,CAAA;IAClB,SAAO;IACP,aAAW;IACX,WAAS;IACT,cAAY;IACZ,KAAK;OAEN,YAME,MAAA,YAAA,EAAA;IALC,OAAK,eAAE,MAAA,cAAa,CAAA;IACpB,eAAa,QAAA;IACb,uBAAkB,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,SAAU,OAAM;IACxC,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;IACV,UAAU,QAAA;;;;;OAGb,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,GAAA"}
1
+ {"version":3,"file":"multi-select-option.js","names":[],"sources":["../../../src/components/multi-select/multi-select-option.vue"],"sourcesContent":["<template>\n <li\n :class=\"optionClass\"\n @click=\"handleClick\"\n @mousedown=\"handleMousedown\"\n @mouseup=\"handleMouseup\"\n @mouseleave=\"handleMouseleave\"\n :ref=\"measureRef\"\n >\n <u-checkbox\n :class=\"checkboxClass\"\n :model-value=\"checked\"\n @update:model-value=\"emit('check', $event)\"\n @click.stop\n :disabled=\"disabled\"\n />\n\n <slot />\n </li>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Ripple } from '@veltra/directives'\nimport { inject, onBeforeUnmount, shallowRef } from 'vue'\n\nimport { UCheckbox } from '../checkbox'\nimport { MultiSelectDIKey } from './di'\n\ndefineOptions({ name: 'MultiSelectOption' })\n\nconst props = defineProps<{\n option: Record<string, any>\n disabled?: boolean\n checked: boolean\n /**\n * 虚拟项索引:对应 `options` 数组中的绝对位置。\n * 非虚拟模式下可省略;虚拟模式下必须传入,否则元素卸载时 Virtualizer 无法及时解绑,\n * 会因为 ResizeObserver 对脱离 DOM 的元素回调 size=0 而污染尺寸缓存。\n */\n index?: number\n measureElement?: (index: number, el: Element | null) => void\n}>()\n\nfunction measureRef(el: unknown) {\n if (typeof props.index !== 'number' || !props.measureElement) return\n props.measureElement(props.index, el as Element | null)\n}\n\nconst emit = defineEmits<{ (e: 'check', checked: boolean): void }>()\n\nconst { optionClass, rippleClass, checkboxClass } = inject(MultiSelectDIKey)!\n\nconst rippleRef = shallowRef<Ripple | null>(null)\n\nfunction handleClick(e) {\n if (props.disabled) return\n emit('check', !props.checked)\n}\n\nfunction handleMousedown(e: MouseEvent) {\n if (props.disabled) return\n\n // 清理旧实例,避免同一元素上多个 Ripple 实例同时修改样式\n if (rippleRef.value) {\n rippleRef.value.remove()\n rippleRef.value = null\n }\n\n rippleRef.value = new Ripple(e.currentTarget as HTMLElement, { rippleClass })\n\n rippleRef.value.showByEvent(e)\n}\n\nfunction handleMouseleave() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nfunction handleMouseup() {\n rippleRef.value?.remove()\n rippleRef.value = null\n}\n\nonBeforeUnmount(() => {\n rippleRef.value?.remove()\n rippleRef.value = null\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;EA8BA,MAAM,QAAQ;EAad,SAAS,WAAW,IAAa;GAC/B,IAAI,OAAO,MAAM,UAAU,YAAY,CAAC,MAAM,gBAAgB;GAC9D,MAAM,eAAe,MAAM,OAAO,GAAoB;;EAGxD,MAAM,OAAO;EAEb,MAAM,EAAE,aAAa,aAAa,kBAAkB,OAAO,iBAAgB;EAE3E,MAAM,YAAY,WAA0B,KAAI;EAEhD,SAAS,YAAY,GAAG;GACtB,IAAI,MAAM,UAAU;GACpB,KAAK,SAAS,CAAC,MAAM,QAAO;;EAG9B,SAAS,gBAAgB,GAAe;GACtC,IAAI,MAAM,UAAU;GAGpB,IAAI,UAAU,OAAO;IACnB,UAAU,MAAM,QAAO;IACvB,UAAU,QAAQ;;GAGpB,UAAU,QAAQ,IAAI,OAAO,EAAE,eAA8B,EAAE,aAAa,CAAA;GAE5E,UAAU,MAAM,YAAY,EAAC;;EAG/B,SAAS,mBAAmB;GAC1B,UAAU,OAAO,QAAO;GACxB,UAAU,QAAQ;;EAGpB,SAAS,gBAAgB;GACvB,UAAU,OAAO,QAAO;GACxB,UAAU,QAAQ;;EAGpB,sBAAsB;GACpB,UAAU,OAAO,QAAO;GACxB,UAAU,QAAQ;IACnB;;uBArFC,mBAiBK,MAAA;IAhBF,OAAK,eAAE,MAAA,YAAW,CAAA;IAClB,SAAO;IACP,aAAW;IACX,WAAS;IACT,cAAY;IACZ,KAAK;OAEN,YAME,MAAA,YAAA,EAAA;IALC,OAAK,eAAE,MAAA,cAAa,CAAA;IACpB,eAAa,QAAA;IACb,uBAAkB,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,SAAU,OAAM;IACxC,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,IAAW,CAAA,OAAA,CAAA;IACV,UAAU,QAAA;;;;;OAGb,WAAQ,KAAA,QAAA,UAAA,CAAA,EAAA,GAAA"}
@@ -28,13 +28,13 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
28
28
  "onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
29
29
  onChange?: ((options: Record<string, any>[]) => any) | undefined;
30
30
  }>, {
31
- labelKey: string;
32
- valueKey: string;
33
31
  disabled: boolean;
34
32
  readonly: boolean;
33
+ labelKey: string;
34
+ valueKey: string;
35
+ minWidth: string;
35
36
  placeholder: string;
36
37
  clearable: boolean;
37
- minWidth: string;
38
38
  visibilityLimit: number;
39
39
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
40
40
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -22,15 +22,15 @@ declare const __VLS_base: _$vue.DefineComponent<__VLS_PublicProps, {}, {}, {}, {
22
22
  onChange?: ((checked: Record<string, any>[]) => any) | undefined;
23
23
  onClear?: (() => any) | undefined;
24
24
  }>, {
25
+ disabled: boolean;
26
+ readonly: boolean;
25
27
  expandAll: boolean;
26
28
  labelKey: string;
27
29
  valueKey: string;
28
- disabled: boolean;
29
- readonly: boolean;
30
+ minWidth: string;
30
31
  placeholder: string;
31
32
  clearable: boolean;
32
33
  filterable: boolean;
33
- minWidth: string;
34
34
  visibilityLimit: number;
35
35
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;
36
36
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -1 +1 @@
1
- {"version":3,"file":"notification.js","names":["$emit"],"sources":["../../../src/components/notification/notification.vue"],"sourcesContent":["<template>\n <transition\n :name=\"`notification-fade-${position.split('-')[0]}`\"\n @before-leave=\"onClose\"\n @after-leave=\"$emit('destroy')\"\n >\n <div\n :class=\"[cls.b, cls.m(size), cls.e(type), cls.e(position)]\"\n v-show=\"visible\"\n :style=\"customStyle\"\n >\n <div :class=\"cls.e('icon')\">\n <UIcon>\n <component :is=\"typeIcon\" />\n </UIcon>\n </div>\n <div :class=\"cls.e('content')\">\n <div :class=\"cls.em('content', 'title')\">{{ title }}</div>\n <div :class=\"cls.em('content', 'message')\">{{ message }}</div>\n <div :class=\"cls.em('content', 'button')\" v-if=\"buttonText\">\n <UButton :type=\"type\" plain @click=\"handleClick\">{{ buttonText }}</UButton>\n </div>\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable\" @click.stop=\"close\">\n <UIcon><Close /></UIcon>\n </div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport {\n CircleCheckFilled,\n CircleClose,\n Close,\n InfoFilled,\n QuestionFilled,\n WarningFilled\n} from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { ref, computed, onMounted, type CSSProperties } from 'vue'\n\nimport type { NotificationProps, NotificationExposed, ColorType } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\n\ndefineOptions({\n name: 'Notification'\n})\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n closable: false,\n duration: 4500,\n offset: 20,\n buttonText: '',\n position: 'bottom-right'\n})\n\nconst { type, size } = useFallbackProps([props], {\n type: 'primary' as ColorType,\n size: 'default'\n})\n\nconst typeIcon = computed(() => {\n return (\n props.icon ||\n {\n primary: InfoFilled,\n info: QuestionFilled,\n success: CircleCheckFilled,\n warning: WarningFilled,\n danger: CircleClose\n }[type.value]\n )\n})\n\nconst cls = bem('notification')\n\nconst visible = ref<boolean>(false)\n\nonMounted(() => {\n visible.value = true\n startTimer()\n})\n\nconst close = () => {\n visible.value = false\n}\n\nconst customStyle = computed<CSSProperties>(() => {\n return props.offset > 0\n ? {\n [`${props.position.split('-')[0]}`]: `${props.offset}px`,\n zIndex: props.zIndex,\n transform:\n props.position.split('-')[0] === 'bottom'\n ? `translateY(-${props.offset}px)`\n : `translateY(${props.offset}px)`,\n transition: `opacity 0.3s, transform 0.4s, top 0.4s`\n }\n : {\n [`${props.position.split('-')[0]}`]: `${props.offset}px`,\n zIndex: props.zIndex\n }\n})\n\nlet timer = 0\n\nconst startTimer = () => {\n if (props.duration) {\n timer = setTimeout(() => {\n close()\n }, props.duration)\n }\n}\n\nconst clearTimer = () => clearTimeout(timer)\n\nconst handleClick = (e: MouseEvent) => {\n if (props.onClick) props.onClick(e)\n close()\n}\n\ndefineExpose<NotificationExposed>({ startTimer, clearTimer })\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"notification.js","names":["$emit"],"sources":["../../../src/components/notification/notification.vue"],"sourcesContent":["<template>\n <transition\n :name=\"`notification-fade-${position.split('-')[0]}`\"\n @before-leave=\"onClose\"\n @after-leave=\"$emit('destroy')\"\n >\n <div\n :class=\"[cls.b, cls.m(size), cls.e(type), cls.e(position)]\"\n v-show=\"visible\"\n :style=\"customStyle\"\n >\n <div :class=\"cls.e('icon')\">\n <UIcon>\n <component :is=\"typeIcon\" />\n </UIcon>\n </div>\n <div :class=\"cls.e('content')\">\n <div :class=\"cls.em('content', 'title')\">{{ title }}</div>\n <div :class=\"cls.em('content', 'message')\">{{ message }}</div>\n <div :class=\"cls.em('content', 'button')\" v-if=\"buttonText\">\n <UButton :type=\"type\" plain @click=\"handleClick\">{{ buttonText }}</UButton>\n </div>\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable\" @click.stop=\"close\">\n <UIcon><Close /></UIcon>\n </div>\n </div>\n </transition>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFallbackProps } from '@veltra/compositions'\nimport {\n CircleCheckFilled,\n CircleClose,\n Close,\n InfoFilled,\n QuestionFilled,\n WarningFilled\n} from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { ref, computed, onMounted, type CSSProperties } from 'vue'\n\nimport type { NotificationProps, NotificationExposed, ColorType } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'Notification' })\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n closable: false,\n duration: 4500,\n offset: 20,\n buttonText: '',\n position: 'bottom-right'\n})\n\nconst { type, size } = useFallbackProps([props], { type: 'primary' as ColorType, size: 'default' })\n\nconst typeIcon = computed(() => {\n return (\n props.icon ||\n {\n primary: InfoFilled,\n info: QuestionFilled,\n success: CircleCheckFilled,\n warning: WarningFilled,\n danger: CircleClose\n }[type.value]\n )\n})\n\nconst cls = bem('notification')\n\nconst visible = ref<boolean>(false)\n\nonMounted(() => {\n visible.value = true\n startTimer()\n})\n\nconst close = () => {\n visible.value = false\n}\n\nconst customStyle = computed<CSSProperties>(() => {\n return props.offset > 0\n ? {\n [`${props.position.split('-')[0]}`]: `${props.offset}px`,\n zIndex: props.zIndex,\n transform:\n props.position.split('-')[0] === 'bottom'\n ? `translateY(-${props.offset}px)`\n : `translateY(${props.offset}px)`,\n transition: `opacity 0.3s, transform 0.4s, top 0.4s`\n }\n : { [`${props.position.split('-')[0]}`]: `${props.offset}px`, zIndex: props.zIndex }\n})\n\nlet timer = 0\n\nconst startTimer = () => {\n if (props.duration) {\n timer = setTimeout(() => {\n close()\n }, props.duration)\n }\n}\n\nconst clearTimer = () => clearTimeout(timer)\n\nconst handleClick = (e: MouseEvent) => {\n if (props.onClick) props.onClick(e)\n close()\n}\n\ndefineExpose<NotificationExposed>({ startTimer, clearTimer })\n</script>\n"],"mappings":"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"}
@@ -4,9 +4,9 @@ import * as _$_veltra_utils0 from "@veltra/utils";
4
4
 
5
5
  //#region src/components/notification/notification.vue.d.ts
6
6
  declare const __VLS_export: _$vue.DefineComponent<NotificationProps, _$_veltra_utils0.DeconstructValue<_NotificationExposed>, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {}, string, _$vue.PublicProps, Readonly<NotificationProps> & Readonly<{}>, {
7
+ duration: number;
7
8
  closable: boolean;
8
9
  position: "top-left" | "top-right" | "bottom-left" | "bottom-right";
9
- duration: number;
10
10
  offset: number;
11
11
  buttonText: string;
12
12
  }, {}, {}, {}, string, _$vue.ComponentProvideOptions, false, {}, any>;