@veltra/desktop 1.4.0 → 1.5.0

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 (442) hide show
  1. package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
  2. package/dist/components/action/action.js.map +1 -1
  3. package/dist/components/auto-complete/auto-complete.js.map +1 -1
  4. package/dist/components/badge/badge.js.map +1 -1
  5. package/dist/components/badge/style.d.ts +1 -1
  6. package/dist/components/batch-edit/batch-edit-form.js +8 -12
  7. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  8. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  9. package/dist/components/batch-edit/batch-edit.js +2 -1
  10. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  11. package/dist/components/batch-edit/di.js.map +1 -1
  12. package/dist/components/batch-edit/index.d.ts +2 -2
  13. package/dist/components/batch-edit/use-edit-state.js +11 -9
  14. package/dist/components/batch-edit/use-edit-state.js.map +1 -1
  15. package/dist/components/batch-edit/use-handlers.js.map +1 -1
  16. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  17. package/dist/components/breadcrumb/style.d.ts +1 -1
  18. package/dist/components/button/button-group.js.map +1 -1
  19. package/dist/components/button/button.js.map +1 -1
  20. package/dist/components/calendar/calendar.js.map +1 -1
  21. package/dist/components/calendar/style.d.ts +1 -1
  22. package/dist/components/card/card-action.js.map +1 -1
  23. package/dist/components/card/card-content.js.map +1 -1
  24. package/dist/components/card/card-cover.js.map +1 -1
  25. package/dist/components/card/card-header.js.map +1 -1
  26. package/dist/components/card/card.js.map +1 -1
  27. package/dist/components/card/style.d.ts +1 -1
  28. package/dist/components/cascade/cascade-panel-item.js.map +1 -1
  29. package/dist/components/cascade/cascade.js.map +1 -1
  30. package/dist/components/check-tag/check-tag.js.map +1 -1
  31. package/dist/components/check-tag/style.d.ts +1 -1
  32. package/dist/components/checkbox/checkbox-button.js.map +1 -1
  33. package/dist/components/checkbox/checkbox.js.map +1 -1
  34. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  35. package/dist/components/code-editor/basic-setup.js +2 -2
  36. package/dist/components/code-editor/code-editor.js +2 -2
  37. package/dist/components/code-editor/code-editor.js.map +1 -1
  38. package/dist/components/code-editor/lang-loaders.js +1 -1
  39. package/dist/components/code-editor/shell-extension.js +2 -2
  40. package/dist/components/collapse/collapse-item.js.map +1 -1
  41. package/dist/components/collapse/collapse.js.map +1 -1
  42. package/dist/components/collapse/style.d.ts +1 -1
  43. package/dist/components/condition-editor/components/condition-group.js.map +1 -1
  44. package/dist/components/condition-editor/components/condition-row.js.map +1 -1
  45. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  46. package/dist/components/condition-editor/index.d.ts +2 -2
  47. package/dist/components/contextmenu/contextmenu-item.js +13 -6
  48. package/dist/components/contextmenu/contextmenu-item.js.map +1 -1
  49. package/dist/components/contextmenu/contextmenu-panel.js +12 -6
  50. package/dist/components/contextmenu/contextmenu-panel.js.map +1 -1
  51. package/dist/components/contextmenu/contextmenu-sub.js.map +1 -1
  52. package/dist/components/contextmenu/contextmenu.js.map +1 -1
  53. package/dist/components/contextmenu/di.d.ts +15 -0
  54. package/dist/components/contextmenu/index.d.ts +3 -2
  55. package/dist/components/contextmenu/style2.css +13 -0
  56. package/dist/components/date-panel/date-panel.js.map +1 -1
  57. package/dist/components/date-panel/headers/day.js.map +1 -1
  58. package/dist/components/date-panel/headers/month.js.map +1 -1
  59. package/dist/components/date-panel/headers/year.js.map +1 -1
  60. package/dist/components/date-panel/panels/day.js.map +1 -1
  61. package/dist/components/date-panel/panels/month.js.map +1 -1
  62. package/dist/components/date-panel/panels/year.js.map +1 -1
  63. package/dist/components/date-panel/style.d.ts +1 -1
  64. package/dist/components/date-picker/date-picker.js.map +1 -1
  65. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  66. package/dist/components/dialog/dialog.js.map +1 -1
  67. package/dist/components/drawer/drawer.js.map +1 -1
  68. package/dist/components/dropdown/dropdown.js.map +1 -1
  69. package/dist/components/dual-nav/dual-nav-app.js.map +1 -1
  70. package/dist/components/dual-nav/dual-nav.js.map +1 -1
  71. package/dist/components/empty/empty.js.map +1 -1
  72. package/dist/components/empty/style.d.ts +1 -1
  73. package/dist/components/expression-editor/components/path-preview.js.map +1 -1
  74. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  75. package/dist/components/expression-editor/core/editor.js.map +1 -1
  76. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  77. package/dist/components/expression-editor/style.d.ts +1 -1
  78. package/dist/components/file-picker/file-picker.js.map +1 -1
  79. package/dist/components/file-picker/style.d.ts +1 -1
  80. package/dist/components/file-viewer/file-viewer.js.map +1 -1
  81. package/dist/components/file-viewer/helper.js +1 -38
  82. package/dist/components/file-viewer/helper.js.map +1 -1
  83. package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
  84. package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
  85. package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
  86. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  87. package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
  88. package/dist/components/file-viewer/previewers/sheet-previewer.js +68 -37
  89. package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
  90. package/dist/components/file-viewer/previewers/text-previewer.js +2 -2
  91. package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -1
  92. package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
  93. package/dist/components/file-viewer/style.d.ts +1 -1
  94. package/dist/components/float-button/float-button.js.map +1 -1
  95. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/components/form/style.d.ts +1 -1
  97. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/components/form-item/style.d.ts +1 -1
  99. package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
  100. package/dist/components/gantt-chart/style.d.ts +1 -1
  101. package/dist/components/grid/grid-item.js.map +1 -1
  102. package/dist/components/grid/grid.js +3 -2
  103. package/dist/components/grid/grid.js.map +1 -1
  104. package/dist/components/grid/style.d.ts +1 -1
  105. package/dist/components/grid-input/grid-input.js.map +1 -1
  106. package/dist/components/grid-input/style.d.ts +1 -1
  107. package/dist/components/group-input/group-input.js.map +1 -1
  108. package/dist/components/group-nav/group-nav-item.js.map +1 -1
  109. package/dist/components/group-nav/group-nav.js.map +1 -1
  110. package/dist/components/group-nav/style.d.ts +1 -1
  111. package/dist/components/icon/icon.js.map +1 -1
  112. package/dist/components/icon/style.d.ts +1 -1
  113. package/dist/components/index.d.ts +91 -156
  114. package/dist/components/index.js +4 -1
  115. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  116. package/dist/components/kbd/kbd.js.map +1 -1
  117. package/dist/components/kbd/style.d.ts +1 -1
  118. package/dist/components/layout/layout-resizer.js.map +1 -1
  119. package/dist/components/layout/layout.js.map +1 -1
  120. package/dist/components/layout/style.d.ts +1 -1
  121. package/dist/components/list/list-item.js.map +1 -1
  122. package/dist/components/list/list.js.map +1 -1
  123. package/dist/components/loading/directive.js +2 -1
  124. package/dist/components/loading/directive.js.map +1 -1
  125. package/dist/components/loading/index.d.ts +2 -2
  126. package/dist/components/loading/loading.js.map +1 -1
  127. package/dist/components/message/index.d.ts +2 -2
  128. package/dist/components/message/message-box.js.map +1 -1
  129. package/dist/components/message/message.js.map +1 -1
  130. package/dist/components/message/style.d.ts +1 -1
  131. package/dist/components/message-confirm/index.d.ts +2 -2
  132. package/dist/components/message-confirm/message-confirm-box.js.map +1 -1
  133. package/dist/components/message-confirm/message-confirm.js.map +1 -1
  134. package/dist/components/message-confirm/style.d.ts +1 -1
  135. package/dist/components/message-confirm/style2.css +18 -0
  136. package/dist/components/multi-select/multi-select-option.js.map +1 -1
  137. package/dist/components/multi-select/multi-select.js +6 -3
  138. package/dist/components/multi-select/multi-select.js.map +1 -1
  139. package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
  140. package/dist/components/nav/nav-icon.js.map +1 -1
  141. package/dist/components/nav/nav-item-collapsed.js.map +1 -1
  142. package/dist/components/nav/nav-item.js +4 -2
  143. package/dist/components/nav/nav-item.js.map +1 -1
  144. package/dist/components/nav/nav-sub-collapsed.js.map +1 -1
  145. package/dist/components/nav/nav-sub.js.map +1 -1
  146. package/dist/components/nav/nav.js.map +1 -1
  147. package/dist/components/nav/style.d.ts +1 -1
  148. package/dist/components/node-render/style.d.ts +1 -1
  149. package/dist/components/notification/index.d.ts +2 -2
  150. package/dist/components/notification/notification-box.js +2 -2
  151. package/dist/components/notification/notification-box.js.map +1 -1
  152. package/dist/components/notification/notification.js.map +1 -1
  153. package/dist/components/notification/style.d.ts +1 -1
  154. package/dist/components/number/number.js.map +1 -1
  155. package/dist/components/number/style.d.ts +1 -1
  156. package/dist/components/number-input/number-input.js +2 -1
  157. package/dist/components/number-input/number-input.js.map +1 -1
  158. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  159. package/dist/components/paginator/paginator.js.map +1 -1
  160. package/dist/components/palette/palette-alpha.js.map +1 -1
  161. package/dist/components/palette/palette-color-switch.js.map +1 -1
  162. package/dist/components/palette/palette-hue.js.map +1 -1
  163. package/dist/components/palette/palette-sv.js.map +1 -1
  164. package/dist/components/palette/palette.js.map +1 -1
  165. package/dist/components/password-input/password-input.js.map +1 -1
  166. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  167. package/dist/components/progress/progress.js.map +1 -1
  168. package/dist/components/progress/style.d.ts +1 -1
  169. package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
  170. package/dist/components/progress-nodes/style.d.ts +1 -1
  171. package/dist/components/radio/radio.js.map +1 -1
  172. package/dist/components/radio-group/radio-group.js.map +1 -1
  173. package/dist/components/rich-text-editor/rich-text-editor.js +2 -1
  174. package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
  175. package/dist/components/rich-text-editor/style.d.ts +1 -1
  176. package/dist/components/rich-text-editor/toolbar.js +3 -4
  177. package/dist/components/rich-text-editor/toolbar.js.map +1 -1
  178. package/dist/components/scroll/scroll-bar.js.map +1 -1
  179. package/dist/components/scroll/scroll.js.map +1 -1
  180. package/dist/components/scroll/style.d.ts +1 -1
  181. package/dist/components/select/select.js.map +1 -1
  182. package/dist/components/slider/slider-thumb.js.map +1 -1
  183. package/dist/components/slider/slider.js.map +1 -1
  184. package/dist/components/slider/style.d.ts +1 -1
  185. package/dist/components/steps/steps.js.map +1 -1
  186. package/dist/components/steps/style.d.ts +1 -1
  187. package/dist/components/switch/style.d.ts +1 -1
  188. package/dist/components/switch/switch.js.map +1 -1
  189. package/dist/components/table/index.d.ts +2 -2
  190. package/dist/components/table/node/col.d.ts +1 -49
  191. package/dist/components/table/table-body.js.map +1 -1
  192. package/dist/components/table/table-cell.js.map +1 -1
  193. package/dist/components/table/table-foot.js.map +1 -1
  194. package/dist/components/table/table-row.js +2 -1
  195. package/dist/components/table/table-row.js.map +1 -1
  196. package/dist/components/table/table.js.map +1 -1
  197. package/dist/components/table/use-check.js +2 -1
  198. package/dist/components/table/use-check.js.map +1 -1
  199. package/dist/components/table/use-columns.d.ts +1 -1
  200. package/dist/components/table/use-rows.js +2 -1
  201. package/dist/components/table/use-rows.js.map +1 -1
  202. package/dist/components/table-editor/table-editor.js.map +1 -1
  203. package/dist/components/tabs/tabs-horizontal.js +2 -1
  204. package/dist/components/tabs/tabs-horizontal.js.map +1 -1
  205. package/dist/components/tabs/tabs-vertical.js.map +1 -1
  206. package/dist/components/tabs/tabs.js.map +1 -1
  207. package/dist/components/tabs/use-tabs-bar.js +10 -25
  208. package/dist/components/tabs/use-tabs-bar.js.map +1 -1
  209. package/dist/components/tag/style.d.ts +1 -1
  210. package/dist/components/tag/tag.js.map +1 -1
  211. package/dist/components/text/style.d.ts +1 -1
  212. package/dist/components/text/text.js.map +1 -1
  213. package/dist/components/textarea/textarea.js.map +1 -1
  214. package/dist/components/theme/theme.js +3 -2
  215. package/dist/components/theme/theme.js.map +1 -1
  216. package/dist/components/tip/style.d.ts +1 -1
  217. package/dist/components/tip/tip.js.map +1 -1
  218. package/dist/components/tree/tree-node.js.map +1 -1
  219. package/dist/components/tree/tree.js.map +1 -1
  220. package/dist/components/tree-select/tree-select.js.map +1 -1
  221. package/dist/components/watermark/style.d.ts +1 -1
  222. package/dist/components/watermark/watermark.js.map +1 -1
  223. package/dist/index.d.ts +92 -96
  224. package/dist/index.js +2 -1
  225. package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js +2 -2
  226. package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js.map +1 -1
  227. package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js +3 -3
  228. package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js.map +1 -1
  229. package/dist/node_modules/.bun/@codemirror_lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js.map +1 -1
  230. package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js +5 -4
  231. package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js.map +1 -1
  232. package/dist/node_modules/.bun/@codemirror_lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js +2 -2
  233. package/dist/node_modules/.bun/{@codemirror_lang-markdown@6.5.1 → @codemirror_lang-markdown@6.5.2}/node_modules/@codemirror/lang-markdown/dist/index.js +4 -3
  234. package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.2/node_modules/@codemirror/lang-markdown/dist/index.js.map +1 -0
  235. package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js +2 -1
  236. package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js.map +1 -1
  237. package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js +2 -2
  238. package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js.map +1 -1
  239. package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js +4 -3
  240. package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js.map +1 -1
  241. package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js +2 -2
  242. package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js.map +1 -1
  243. package/dist/node_modules/.bun/{@codemirror_state@6.7.0 → @codemirror_state@6.7.1}/node_modules/@codemirror/state/dist/index.js +13 -3
  244. package/dist/node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js.map +1 -0
  245. package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js +1 -1
  246. package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js.map +1 -1
  247. package/dist/node_modules/.bun/{@codemirror_view@6.43.4 → @codemirror_view@6.43.8}/node_modules/@codemirror/view/dist/index.js +86 -64
  248. package/dist/node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js.map +1 -0
  249. package/dist/node_modules/.bun/@lezer_common@1.5.2/node_modules/@lezer/common/dist/index.js.map +1 -1
  250. package/dist/node_modules/.bun/@lezer_css@1.3.4/node_modules/@lezer/css/dist/index.js.map +1 -1
  251. package/dist/node_modules/.bun/@lezer_highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js.map +1 -1
  252. package/dist/node_modules/.bun/@lezer_html@1.3.13/node_modules/@lezer/html/dist/index.js.map +1 -1
  253. package/dist/node_modules/.bun/@lezer_javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js.map +1 -1
  254. package/dist/node_modules/.bun/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.js.map +1 -1
  255. package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js +1 -1
  256. package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js.map +1 -1
  257. package/dist/node_modules/.bun/@marijn_find-cluster-break@1.0.2/node_modules/@marijn/find-cluster-break/src/index.js.map +1 -1
  258. package/dist/node_modules/.bun/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js.map +1 -1
  259. package/dist/types/contextmenu.d.ts +10 -4
  260. package/dist/types/index.d.ts +1 -7
  261. package/package.json +34 -30
  262. package/src/components/batch-edit/__test__/batch-edit.test.ts +199 -0
  263. package/src/components/batch-edit/batch-edit-form.vue +8 -8
  264. package/src/components/batch-edit/batch-edit.vue +2 -1
  265. package/src/components/batch-edit/di.ts +2 -0
  266. package/src/components/batch-edit/use-edit-state.ts +19 -12
  267. package/src/components/contextmenu/__test__/contextmenu.test.ts +165 -0
  268. package/src/components/contextmenu/contextmenu-item.vue +7 -4
  269. package/src/components/contextmenu/contextmenu-panel.vue +7 -4
  270. package/src/components/contextmenu/index.ts +1 -0
  271. package/src/components/contextmenu/style.scss +16 -0
  272. package/src/components/file-viewer/helper.ts +0 -53
  273. package/src/components/file-viewer/previewers/sheet-previewer.vue +91 -46
  274. package/src/components/message-confirm/style.scss +19 -0
  275. package/src/components/notification/style.scss +16 -4
  276. package/src/components/radio-group/style.scss +1 -1
  277. package/src/components/slider/style.scss +1 -1
  278. package/src/components/tabs/use-tabs-bar.ts +15 -20
  279. package/src/types/contextmenu.ts +10 -4
  280. package/dist/components/action/action-group.vue.d.ts +0 -25
  281. package/dist/components/action/action.vue.d.ts +0 -33
  282. package/dist/components/action/index.d.ts +0 -3
  283. package/dist/components/auto-complete/auto-complete.vue.d.ts +0 -41
  284. package/dist/components/auto-complete/index.d.ts +0 -2
  285. package/dist/components/badge/badge.vue.d.ts +0 -20
  286. package/dist/components/badge/index.d.ts +0 -2
  287. package/dist/components/batch-edit/batch-edit.vue.d.ts +0 -45
  288. package/dist/components/breadcrumb/breadcrumb.vue.d.ts +0 -24
  289. package/dist/components/breadcrumb/index.d.ts +0 -2
  290. package/dist/components/button/button-group.vue.d.ts +0 -19
  291. package/dist/components/button/button.vue.d.ts +0 -27
  292. package/dist/components/button/index.d.ts +0 -3
  293. package/dist/components/calendar/calendar.vue.d.ts +0 -17
  294. package/dist/components/calendar/index.d.ts +0 -2
  295. package/dist/components/card/card-action.vue.d.ts +0 -18
  296. package/dist/components/card/card-content.vue.d.ts +0 -18
  297. package/dist/components/card/card-cover.vue.d.ts +0 -8
  298. package/dist/components/card/card-header.vue.d.ts +0 -16
  299. package/dist/components/card/card.vue.d.ts +0 -18
  300. package/dist/components/card/index.d.ts +0 -6
  301. package/dist/components/cascade/cascade.vue.d.ts +0 -31
  302. package/dist/components/cascade/index.d.ts +0 -2
  303. package/dist/components/check-tag/check-tag.vue.d.ts +0 -22
  304. package/dist/components/check-tag/index.d.ts +0 -2
  305. package/dist/components/checkbox/checkbox-button.vue.d.ts +0 -35
  306. package/dist/components/checkbox/checkbox.vue.d.ts +0 -34
  307. package/dist/components/checkbox/index.d.ts +0 -3
  308. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +0 -24
  309. package/dist/components/checkbox-group/index.d.ts +0 -2
  310. package/dist/components/code-editor/code-editor.vue.d.ts +0 -30
  311. package/dist/components/code-editor/index.d.ts +0 -2
  312. package/dist/components/collapse/collapse-item.vue.d.ts +0 -32
  313. package/dist/components/collapse/collapse.vue.d.ts +0 -27
  314. package/dist/components/collapse/index.d.ts +0 -3
  315. package/dist/components/condition-editor/condition-editor.vue.d.ts +0 -15
  316. package/dist/components/contextmenu/contextmenu.vue.d.ts +0 -14
  317. package/dist/components/date-panel/date-panel.vue.d.ts +0 -17
  318. package/dist/components/date-panel/index.d.ts +0 -2
  319. package/dist/components/date-picker/date-picker.vue.d.ts +0 -18
  320. package/dist/components/date-picker/index.d.ts +0 -2
  321. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +0 -18
  322. package/dist/components/date-range-picker/index.d.ts +0 -2
  323. package/dist/components/dialog/dialog.vue.d.ts +0 -43
  324. package/dist/components/dialog/index.d.ts +0 -2
  325. package/dist/components/drawer/drawer.vue.d.ts +0 -36
  326. package/dist/components/drawer/index.d.ts +0 -2
  327. package/dist/components/dropdown/dropdown.vue.d.ts +0 -30
  328. package/dist/components/dropdown/index.d.ts +0 -2
  329. package/dist/components/dual-nav/dual-nav.vue.d.ts +0 -15
  330. package/dist/components/dual-nav/index.d.ts +0 -2
  331. package/dist/components/empty/empty.vue.d.ts +0 -11
  332. package/dist/components/empty/index.d.ts +0 -2
  333. package/dist/components/expression-editor/expression-editor.vue.d.ts +0 -16
  334. package/dist/components/expression-editor/index.d.ts +0 -2
  335. package/dist/components/file-picker/file-picker.vue.d.ts +0 -27
  336. package/dist/components/file-picker/index.d.ts +0 -2
  337. package/dist/components/file-viewer/file-viewer.vue.d.ts +0 -40
  338. package/dist/components/file-viewer/index.d.ts +0 -2
  339. package/dist/components/file-viewer/sheet-parser.js +0 -46
  340. package/dist/components/file-viewer/sheet-parser.js.map +0 -1
  341. package/dist/components/float-button/float-button.vue.d.ts +0 -12
  342. package/dist/components/float-button/index.d.ts +0 -2
  343. package/dist/components/form/form.vue.d.ts +0 -23
  344. package/dist/components/form/index.d.ts +0 -2
  345. package/dist/components/form-item/form-item.vue.d.ts +0 -21
  346. package/dist/components/form-item/index.d.ts +0 -2
  347. package/dist/components/gantt-chart/gantt-chart.vue.d.ts +0 -8
  348. package/dist/components/gantt-chart/index.d.ts +0 -2
  349. package/dist/components/grid/grid-item.vue.d.ts +0 -20
  350. package/dist/components/grid/grid.vue.d.ts +0 -27
  351. package/dist/components/grid/index.d.ts +0 -3
  352. package/dist/components/grid-input/grid-input.vue.d.ts +0 -19
  353. package/dist/components/grid-input/index.d.ts +0 -2
  354. package/dist/components/group-input/group-input.vue.d.ts +0 -26
  355. package/dist/components/group-input/index.d.ts +0 -2
  356. package/dist/components/group-nav/group-nav.vue.d.ts +0 -12
  357. package/dist/components/group-nav/index.d.ts +0 -2
  358. package/dist/components/icon/icon.vue.d.ts +0 -18
  359. package/dist/components/icon/index.d.ts +0 -2
  360. package/dist/components/input/index.d.ts +0 -2
  361. package/dist/components/input/input.vue.d.ts +0 -50
  362. package/dist/components/kbd/kbd.vue.d.ts +0 -16
  363. package/dist/components/layout/index.d.ts +0 -2
  364. package/dist/components/layout/layout.vue.d.ts +0 -20
  365. package/dist/components/list/index.d.ts +0 -3
  366. package/dist/components/list/list-item.vue.d.ts +0 -16
  367. package/dist/components/list/list.vue.d.ts +0 -21
  368. package/dist/components/loading/loading.vue.d.ts +0 -11
  369. package/dist/components/message/message.vue.d.ts +0 -16
  370. package/dist/components/message-confirm/message-confirm.vue.d.ts +0 -19
  371. package/dist/components/multi-select/index.d.ts +0 -2
  372. package/dist/components/multi-select/multi-select.vue.d.ts +0 -48
  373. package/dist/components/multi-tree-select/index.d.ts +0 -2
  374. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +0 -44
  375. package/dist/components/nav/index.d.ts +0 -4
  376. package/dist/components/nav/nav-item.vue.d.ts +0 -12
  377. package/dist/components/nav/nav-sub.vue.d.ts +0 -13
  378. package/dist/components/nav/nav.vue.d.ts +0 -19
  379. package/dist/components/notification/notification.vue.d.ts +0 -18
  380. package/dist/components/number/index.d.ts +0 -2
  381. package/dist/components/number/number.vue.d.ts +0 -11
  382. package/dist/components/number-input/index.d.ts +0 -2
  383. package/dist/components/number-input/number-input.vue.d.ts +0 -39
  384. package/dist/components/number-range-input/index.d.ts +0 -2
  385. package/dist/components/number-range-input/number-range-input.vue.d.ts +0 -36
  386. package/dist/components/paginator/index.d.ts +0 -2
  387. package/dist/components/paginator/paginator.vue.d.ts +0 -29
  388. package/dist/components/palette/index.d.ts +0 -2
  389. package/dist/components/palette/palette.vue.d.ts +0 -20
  390. package/dist/components/password-input/index.d.ts +0 -2
  391. package/dist/components/password-input/password-input.vue.d.ts +0 -30
  392. package/dist/components/pop-confirm/index.d.ts +0 -2
  393. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +0 -33
  394. package/dist/components/progress/index.d.ts +0 -2
  395. package/dist/components/progress/progress.vue.d.ts +0 -25
  396. package/dist/components/progress-nodes/index.d.ts +0 -2
  397. package/dist/components/progress-nodes/progress-nodes.vue.d.ts +0 -36
  398. package/dist/components/radio/index.d.ts +0 -2
  399. package/dist/components/radio/radio.vue.d.ts +0 -31
  400. package/dist/components/radio-group/index.d.ts +0 -2
  401. package/dist/components/radio-group/radio-group.vue.d.ts +0 -26
  402. package/dist/components/rich-text-editor/index.d.ts +0 -2
  403. package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +0 -23
  404. package/dist/components/scroll/index.d.ts +0 -2
  405. package/dist/components/scroll/scroll.vue.d.ts +0 -28
  406. package/dist/components/select/index.d.ts +0 -2
  407. package/dist/components/select/select.vue.d.ts +0 -38
  408. package/dist/components/slider/index.d.ts +0 -2
  409. package/dist/components/slider/slider.vue.d.ts +0 -21
  410. package/dist/components/steps/index.d.ts +0 -2
  411. package/dist/components/steps/steps.vue.d.ts +0 -29
  412. package/dist/components/switch/index.d.ts +0 -2
  413. package/dist/components/switch/switch.vue.d.ts +0 -24
  414. package/dist/components/table/node/row.d.ts +0 -49
  415. package/dist/components/table/table.vue.d.ts +0 -54
  416. package/dist/components/table-editor/index.d.ts +0 -2
  417. package/dist/components/table-editor/table-editor.vue.d.ts +0 -12
  418. package/dist/components/tabs/index.d.ts +0 -4
  419. package/dist/components/tabs/tabs-horizontal.vue.d.ts +0 -40
  420. package/dist/components/tabs/tabs-vertical.vue.d.ts +0 -39
  421. package/dist/components/tabs/tabs.vue.d.ts +0 -36
  422. package/dist/components/tag/index.d.ts +0 -2
  423. package/dist/components/tag/tag.vue.d.ts +0 -22
  424. package/dist/components/text/index.d.ts +0 -2
  425. package/dist/components/text/text.vue.d.ts +0 -10
  426. package/dist/components/textarea/index.d.ts +0 -2
  427. package/dist/components/textarea/textarea.vue.d.ts +0 -34
  428. package/dist/components/theme/index.d.ts +0 -2
  429. package/dist/components/theme/theme.vue.d.ts +0 -8
  430. package/dist/components/tip/index.d.ts +0 -2
  431. package/dist/components/tip/tip.vue.d.ts +0 -31
  432. package/dist/components/tree/di.d.ts +0 -12
  433. package/dist/components/tree/index.d.ts +0 -2
  434. package/dist/components/tree/tree.vue.d.ts +0 -40
  435. package/dist/components/tree-select/index.d.ts +0 -2
  436. package/dist/components/tree-select/tree-select.vue.d.ts +0 -48
  437. package/dist/components/watermark/index.d.ts +0 -2
  438. package/dist/components/watermark/watermark.vue.d.ts +0 -21
  439. package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.1/node_modules/@codemirror/lang-markdown/dist/index.js.map +0 -1
  440. package/dist/node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js.map +0 -1
  441. package/dist/node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js.map +0 -1
  442. package/src/components/file-viewer/sheet-parser.ts +0 -52
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -1,3 +1,3 @@
1
- import _default from "./notification.vue.js";
1
+ import _sfc_main from "./notification.js";
2
2
  import { notification } from "./notification.js";
3
- export { _default as UNotification, notification };
3
+ export { _sfc_main as UNotification, notification };
@@ -52,7 +52,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
52
52
  pointerEvents: "auto"
53
53
  };
54
54
  }
55
- const clamped = Math.min(stackIndex, MAX_VISIBLE - 1);
55
+ const clamped = Math.min(stackIndex, 2);
56
56
  return {
57
57
  transform: `translateY(${direction.value * clamped * PEEK}px) scale(${1 - clamped * .05})`,
58
58
  opacity: stackIndex >= MAX_VISIBLE ? 0 : 1,
@@ -63,7 +63,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
63
63
  const items = props.notifications;
64
64
  if (!items.length) return { height: "0px" };
65
65
  if (hovering.value) return { height: `${items.reduce((sum, item) => sum + (heights[item.key] ?? 0), 0) + (items.length - 1) * GAP}px` };
66
- return { height: `${(heights[items[items.length - 1].key] ?? 0) + Math.min(items.length - 1, MAX_VISIBLE - 1) * PEEK}px` };
66
+ return { height: `${(heights[items[items.length - 1].key] ?? 0) + Math.min(items.length - 1, 2) * PEEK}px` };
67
67
  });
68
68
  function toCardProps(item) {
69
69
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"notification-box.js","names":[],"sources":["../../../src/components/notification/notification-box.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.e('stack'), cls.em('stack', position)]\"\n :style=\"stackStyle\"\n @mouseenter=\"hovering = true\"\n @mouseleave=\"hovering = false\"\n >\n <transition-group :name=\"`notification-${vertical}`\" appear @after-leave=\"handleAfterLeave\">\n <div\n v-for=\"(item, index) of notifications\"\n :key=\"item.key\"\n :ref=\"(el) => observeItem(el, item.key)\"\n :data-key=\"item.key\"\n :class=\"cls.e('item')\"\n >\n <UNotification\n v-bind=\"toCardProps(item)\"\n :style=\"cardStyle(index)\"\n @close=\"handleClose(item.key, item.onClose)\"\n @action=\"handleAction(item.key, item.onClick, item.onClose, $event)\"\n />\n </div>\n </transition-group>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, onBeforeUnmount, reactive, ref, type CSSProperties } from 'vue'\n\nimport type { NotificationOptions, NotificationPosition, NotificationProps } from '../../types'\nimport UNotification from './notification.vue'\n\ndefineOptions({ name: 'UNotificationBox' })\n\n/** 通知项数据结构 */\ntype NotificationItem = NotificationOptions & { key: string }\n\nconst props = defineProps<{ notifications: NotificationItem[]; position: NotificationPosition }>()\n\nconst emit = defineEmits<{ (e: 'closed', key: string): void; (e: 'close', key: string): void }>()\n\nconst cls = bem('notification')\n\n/** 展开态卡片间距 */\nconst GAP = 10\n/** 折叠态每层露出的高度 */\nconst PEEK = 14\n/** 折叠态最多露出的卡片数 */\nconst MAX_VISIBLE = 3\n\nconst hovering = ref(false)\n\n/** 各卡片实测高度, 驱动展开态位移与容器高度 */\nconst heights = reactive<Record<string, number>>({})\n\nconst vertical = computed(() => (props.position.startsWith('top') ? 'top' : 'bottom'))\n\n/** 底部锚定向上堆叠(负向偏移), 顶部锚定向下堆叠 */\nconst direction = computed(() => (vertical.value === 'bottom' ? -1 : 1))\n\nconst observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const el = entry.target as HTMLElement\n const key = el.dataset.key\n if (key) heights[key] = el.offsetHeight\n }\n})\n\nfunction observeItem(el: Element | null, key: string) {\n if (el) observer.observe(el)\n}\n\nonBeforeUnmount(() => observer.disconnect())\n\n/** 数组末尾为最新通知, 位于堆叠最前 */\nfunction cardStyle(index: number): CSSProperties {\n const items = props.notifications\n const stackIndex = items.length - 1 - index\n\n if (hovering.value) {\n // 展开态: 按前方卡片累计高度偏移\n let offset = 0\n for (let i = index + 1; i < items.length; i++) {\n offset += (heights[items[i]!.key] ?? 0) + GAP\n }\n return {\n transform: `translateY(${direction.value * offset}px) scale(1)`,\n opacity: 1,\n pointerEvents: 'auto'\n }\n }\n\n const clamped = Math.min(stackIndex, MAX_VISIBLE - 1)\n return {\n transform: `translateY(${direction.value * clamped * PEEK}px) scale(${1 - clamped * 0.05})`,\n opacity: stackIndex >= MAX_VISIBLE ? 0 : 1,\n pointerEvents: stackIndex === 0 ? 'auto' : 'none'\n }\n}\n\nconst stackStyle = computed<CSSProperties>(() => {\n const items = props.notifications\n if (!items.length) return { height: '0px' }\n\n if (hovering.value) {\n const total = items.reduce((sum, item) => sum + (heights[item.key] ?? 0), 0)\n return { height: `${total + (items.length - 1) * GAP}px` }\n }\n\n const frontHeight = heights[items[items.length - 1]!.key] ?? 0\n const behind = Math.min(items.length - 1, MAX_VISIBLE - 1)\n return { height: `${frontHeight + behind * PEEK}px` }\n})\n\nfunction toCardProps(item: NotificationItem): NotificationProps {\n return {\n title: item.title,\n message: item.message,\n type: item.type,\n closable: item.closable,\n duration: item.duration,\n icon: item.icon,\n buttonText: item.buttonText,\n size: item.size\n }\n}\n\nfunction handleAfterLeave(el: Element) {\n const key = (el as HTMLElement).dataset.key as string\n observer.unobserve(el as HTMLElement)\n delete heights[key]\n emit('closed', key)\n}\n\nfunction handleClose(key: string, onClose?: () => void) {\n emit('close', key)\n onClose?.()\n}\n\nfunction handleAction(\n key: string,\n onClick: NotificationItem['onClick'],\n onClose: NotificationItem['onClose'],\n e: MouseEvent\n) {\n onClick?.(e)\n handleClose(key, onClose)\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"notification-box.js","names":[],"sources":["../../../src/components/notification/notification-box.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.e('stack'), cls.em('stack', position)]\"\n :style=\"stackStyle\"\n @mouseenter=\"hovering = true\"\n @mouseleave=\"hovering = false\"\n >\n <transition-group :name=\"`notification-${vertical}`\" appear @after-leave=\"handleAfterLeave\">\n <div\n v-for=\"(item, index) of notifications\"\n :key=\"item.key\"\n :ref=\"(el) => observeItem(el, item.key)\"\n :data-key=\"item.key\"\n :class=\"cls.e('item')\"\n >\n <UNotification\n v-bind=\"toCardProps(item)\"\n :style=\"cardStyle(index)\"\n @close=\"handleClose(item.key, item.onClose)\"\n @action=\"handleAction(item.key, item.onClick, item.onClose, $event)\"\n />\n </div>\n </transition-group>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed, onBeforeUnmount, reactive, ref, type CSSProperties } from 'vue'\n\nimport type { NotificationOptions, NotificationPosition, NotificationProps } from '../../types'\nimport UNotification from './notification.vue'\n\ndefineOptions({ name: 'UNotificationBox' })\n\n/** 通知项数据结构 */\ntype NotificationItem = NotificationOptions & { key: string }\n\nconst props = defineProps<{ notifications: NotificationItem[]; position: NotificationPosition }>()\n\nconst emit = defineEmits<{ (e: 'closed', key: string): void; (e: 'close', key: string): void }>()\n\nconst cls = bem('notification')\n\n/** 展开态卡片间距 */\nconst GAP = 10\n/** 折叠态每层露出的高度 */\nconst PEEK = 14\n/** 折叠态最多露出的卡片数 */\nconst MAX_VISIBLE = 3\n\nconst hovering = ref(false)\n\n/** 各卡片实测高度, 驱动展开态位移与容器高度 */\nconst heights = reactive<Record<string, number>>({})\n\nconst vertical = computed(() => (props.position.startsWith('top') ? 'top' : 'bottom'))\n\n/** 底部锚定向上堆叠(负向偏移), 顶部锚定向下堆叠 */\nconst direction = computed(() => (vertical.value === 'bottom' ? -1 : 1))\n\nconst observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const el = entry.target as HTMLElement\n const key = el.dataset.key\n if (key) heights[key] = el.offsetHeight\n }\n})\n\nfunction observeItem(el: Element | null, key: string) {\n if (el) observer.observe(el)\n}\n\nonBeforeUnmount(() => observer.disconnect())\n\n/** 数组末尾为最新通知, 位于堆叠最前 */\nfunction cardStyle(index: number): CSSProperties {\n const items = props.notifications\n const stackIndex = items.length - 1 - index\n\n if (hovering.value) {\n // 展开态: 按前方卡片累计高度偏移\n let offset = 0\n for (let i = index + 1; i < items.length; i++) {\n offset += (heights[items[i]!.key] ?? 0) + GAP\n }\n return {\n transform: `translateY(${direction.value * offset}px) scale(1)`,\n opacity: 1,\n pointerEvents: 'auto'\n }\n }\n\n const clamped = Math.min(stackIndex, MAX_VISIBLE - 1)\n return {\n transform: `translateY(${direction.value * clamped * PEEK}px) scale(${1 - clamped * 0.05})`,\n opacity: stackIndex >= MAX_VISIBLE ? 0 : 1,\n pointerEvents: stackIndex === 0 ? 'auto' : 'none'\n }\n}\n\nconst stackStyle = computed<CSSProperties>(() => {\n const items = props.notifications\n if (!items.length) return { height: '0px' }\n\n if (hovering.value) {\n const total = items.reduce((sum, item) => sum + (heights[item.key] ?? 0), 0)\n return { height: `${total + (items.length - 1) * GAP}px` }\n }\n\n const frontHeight = heights[items[items.length - 1]!.key] ?? 0\n const behind = Math.min(items.length - 1, MAX_VISIBLE - 1)\n return { height: `${frontHeight + behind * PEEK}px` }\n})\n\nfunction toCardProps(item: NotificationItem): NotificationProps {\n return {\n title: item.title,\n message: item.message,\n type: item.type,\n closable: item.closable,\n duration: item.duration,\n icon: item.icon,\n buttonText: item.buttonText,\n size: item.size\n }\n}\n\nfunction handleAfterLeave(el: Element) {\n const key = (el as HTMLElement).dataset.key as string\n observer.unobserve(el as HTMLElement)\n delete heights[key]\n emit('closed', key)\n}\n\nfunction handleClose(key: string, onClose?: () => void) {\n emit('close', key)\n onClose?.()\n}\n\nfunction handleAction(\n key: string,\n onClick: NotificationItem['onClick'],\n onClose: NotificationItem['onClose'],\n e: MouseEvent\n) {\n onClick?.(e)\n handleClose(key, onClose)\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"notification.js","names":[],"sources":["../../../src/components/notification/notification.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.b, cls.m(size), cls.e(type)]\"\n @mouseenter=\"suspendTimer\"\n @mouseleave=\"startTimer\"\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')\" v-if=\"title\">{{ title }}</div>\n <div :class=\"cls.em('content', 'message')\" v-if=\"message\">{{ message }}</div>\n <div :class=\"cls.em('content', 'button')\" v-if=\"buttonText\">\n <UButton :type=\"type\" plain @click=\"(e) => emit('action', e)\">{{ buttonText }}</UButton>\n </div>\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable || duration === 0\" @click.stop=\"emit('close')\">\n <UIcon><Close /></UIcon>\n </div>\n </div>\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 { computed, onBeforeUnmount, onMounted } from 'vue'\n\nimport type { NotificationEmits, NotificationProps, ColorType } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UNotification' })\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n closable: false,\n duration: 4500,\n buttonText: ''\n})\n\nconst emit = defineEmits<NotificationEmits>()\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\n/** 剩余时长制的自动关闭计时器, 悬停暂停 */\nlet startTime = 0\nlet timer = 0\nlet restDuration = 0\n\nfunction startTimer() {\n if (!props.duration) return\n startTime = Date.now()\n timer = setTimeout(() => emit('close'), restDuration)\n}\n\nfunction suspendTimer() {\n if (!props.duration) return\n clearTimeout(timer)\n restDuration -= Date.now() - startTime\n}\n\nonMounted(() => {\n restDuration = props.duration\n startTimer()\n})\n\nonBeforeUnmount(() => clearTimeout(timer))\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAEb,MAAM,EAAE,MAAM,SAAS,iBAAiB,CAAC,KAAK,GAAG;GAAE,MAAM;GAAwB,MAAM;EAAU,CAAC;EAElG,MAAM,WAAW,eAAe;GAC9B,OACE,MAAM,QACN;IACE,SAAS;IACT,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;GACV,EAAE,KAAK;EAEX,CAAC;EAED,MAAM,MAAM,IAAI,cAAc;;EAG9B,IAAI,YAAY;EAChB,IAAI,QAAQ;EACZ,IAAI,eAAe;EAEnB,SAAS,aAAa;GACpB,IAAI,CAAC,MAAM,UAAU;GACrB,YAAY,KAAK,IAAI;GACrB,QAAQ,iBAAiB,KAAK,OAAO,GAAG,YAAY;EACtD;EAEA,SAAS,eAAe;GACtB,IAAI,CAAC,MAAM,UAAU;GACrB,aAAa,KAAK;GAClB,gBAAgB,KAAK,IAAI,IAAI;EAC/B;EAEA,gBAAgB;GACd,eAAe,MAAM;GACrB,WAAW;EACb,CAAC;EAED,sBAAsB,aAAa,KAAK,CAAC;;uBAzFvC,mBAoBM,OAAA;IAnBH,OAAK,eAAA;KAAG,MAAA,GAAA,CAAG,CAAC;KAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;KAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;IAAA,CAAA;IACtC,cAAY;IACZ,cAAY;;IAEb,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,CAChB,YAEQ,MAAA,WAAA,GAAA,MAAA;4BADsB,EAAA,UAAA,GAA5B,YAA4B,wBAAZ,SAAA,KAAQ,CAAA,EAAA,CAAA;;;IAG5B,mBAMM,OAAA,EANA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,SAAA,CAAA,EAAA,GAAA;KAC+B,QAAA,SAAA,UAAA,GAA/C,mBAAuE,OAAA;;MAAjE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,OAAA,CAAA;wBAAsC,QAAA,KAAK,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;KACb,QAAA,WAAA,UAAA,GAAjD,mBAA6E,OAAA;;MAAvE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,SAAA,CAAA;wBAA0C,QAAA,OAAO,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;KACpB,QAAA,cAAA,UAAA,GAAhD,mBAEM,OAAA;;MAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,QAAA,CAAA;SACjB,YAAwF,MAAA,WAAA,GAAA;MAA9E,MAAM,MAAA,IAAA;MAAM,OAAA;MAAO,SAAK,OAAA,OAAA,OAAA,MAAG,MAAM,KAAI,UAAW,CAAC;;6BAAmB,CAAA,gBAAA,gBAAb,QAAA,UAAU,GAAA,CAAA,CAAA,CAAA;;;;IAG5C,QAAA,YAAY,QAAA,aAAQ,KAAA,UAAA,GAAvD,mBAEM,OAAA;;KAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;KAA8C,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,OAAA,GAAA,CAAA,MAAA,CAAA;QAC9E,YAAwB,MAAA,WAAA,GAAA,MAAA;4BAAR,CAAT,YAAS,MAAA,KAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"notification.js","names":[],"sources":["../../../src/components/notification/notification.vue"],"sourcesContent":["<template>\n <div\n :class=\"[cls.b, cls.m(size), cls.e(type)]\"\n @mouseenter=\"suspendTimer\"\n @mouseleave=\"startTimer\"\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')\" v-if=\"title\">{{ title }}</div>\n <div :class=\"cls.em('content', 'message')\" v-if=\"message\">{{ message }}</div>\n <div :class=\"cls.em('content', 'button')\" v-if=\"buttonText\">\n <UButton :type=\"type\" plain @click=\"(e) => emit('action', e)\">{{ buttonText }}</UButton>\n </div>\n </div>\n <div :class=\"cls.e('close')\" v-if=\"closable || duration === 0\" @click.stop=\"emit('close')\">\n <UIcon><Close /></UIcon>\n </div>\n </div>\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 { computed, onBeforeUnmount, onMounted } from 'vue'\n\nimport type { NotificationEmits, NotificationProps, ColorType } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\n\ndefineOptions({ name: 'UNotification' })\n\nconst props = withDefaults(defineProps<NotificationProps>(), {\n closable: false,\n duration: 4500,\n buttonText: ''\n})\n\nconst emit = defineEmits<NotificationEmits>()\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\n/** 剩余时长制的自动关闭计时器, 悬停暂停 */\nlet startTime = 0\nlet timer = 0\nlet restDuration = 0\n\nfunction startTimer() {\n if (!props.duration) return\n startTime = Date.now()\n timer = setTimeout(() => emit('close'), restDuration)\n}\n\nfunction suspendTimer() {\n if (!props.duration) return\n clearTimeout(timer)\n restDuration -= Date.now() - startTime\n}\n\nonMounted(() => {\n restDuration = props.duration\n startTimer()\n})\n\nonBeforeUnmount(() => clearTimeout(timer))\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAMd,MAAM,OAAO;EAEb,MAAM,EAAE,MAAM,SAAS,iBAAiB,CAAC,KAAK,GAAG;GAAE,MAAM;GAAwB,MAAM;EAAU,CAAC;EAElG,MAAM,WAAW,eAAe;GAC9B,OACE,MAAM,QACN;IACE,SAAS;IACT,MAAM;IACN,SAAS;IACT,SAAS;IACT,QAAQ;GACV,EAAE,KAAK;EAEX,CAAC;EAED,MAAM,MAAM,IAAI,cAAc;;EAG9B,IAAI,YAAY;EAChB,IAAI,QAAQ;EACZ,IAAI,eAAe;EAEnB,SAAS,aAAa;GACpB,IAAI,CAAC,MAAM,UAAU;GACrB,YAAY,KAAK,IAAI;GACrB,QAAQ,iBAAiB,KAAK,OAAO,GAAG,YAAY;EACtD;EAEA,SAAS,eAAe;GACtB,IAAI,CAAC,MAAM,UAAU;GACrB,aAAa,KAAK;GAClB,gBAAgB,KAAK,IAAI,IAAI;EAC/B;EAEA,gBAAgB;GACd,eAAe,MAAM;GACrB,WAAW;EACb,CAAC;EAED,sBAAsB,aAAa,KAAK,CAAC;;GAzFvC,OAAA,UAAA,GAAA,mBAoBM,OAAA;IAnBH,OAAK,eAAA;KAAG,MAAA,GAAA,CAAG,CAAC;KAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;KAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;IAAA,CAAA;IACtC,cAAY;IACZ,cAAY;;IAEb,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAChB,CAAA,YAEQ,MAAA,WAAA,GAAA,MAAA;KADsB,SAAA,cAAA,EAAA,UAAA,GAA5B,YAA4B,wBAAZ,SAAA,KAAQ,CAAA,EAAA,CAAA;;;IAG5B,mBAMM,OAAA,EANA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,SAAA,CAAA,EAAA,GAAA;KAC+B,QAAA,SAAA,UAAA,GAA/C,mBAAuE,OAAA;;MAAjE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,OAAA,CAAA;KAAsC,GAAA,gBAAA,QAAA,KAAK,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;KACb,QAAA,WAAA,UAAA,GAAjD,mBAA6E,OAAA;;MAAvE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,SAAA,CAAA;KAA0C,GAAA,gBAAA,QAAA,OAAO,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA;KACpB,QAAA,cAAA,UAAA,GAAhD,mBAEM,OAAA;;MAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,GAAE,WAAA,QAAA,CAAA;KACjB,GAAA,CAAA,YAAwF,MAAA,WAAA,GAAA;MAA9E,MAAM,MAAA,IAAA;MAAM,OAAA;MAAO,SAAK,OAAA,OAAA,OAAA,MAAG,MAAM,KAAI,UAAW,CAAC;;MAAmB,SAAA,cAAA,CAAA,gBAAb,gBAAA,QAAA,UAAU,GAAA,CAAA,CAAA,CAAA;;;;IAG5C,QAAA,YAAY,QAAA,aAAQ,KAAA,UAAA,GAAvD,mBAEM,OAAA;;KAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;KAA8C,SAAK,OAAA,OAAA,OAAA,KAAA,eAAA,WAAO,KAAI,OAAA,GAAA,CAAA,MAAA,CAAA;IAC9E,GAAA,CAAA,YAAwB,MAAA,WAAA,GAAA,MAAA;KAAR,SAAA,cAAA,CAAT,YAAS,MAAA,KAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","names":[],"sources":["../../../src/components/number/number.vue"],"sourcesContent":["<template>\n {{ formatted }}\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n } from '@cat-kit/core'\nimport { Tween } from '@veltra/utils'\nimport { computed, reactive, watch } from 'vue'\n\nimport type { NumberProps } from '../../types'\n\ndefineOptions({ name: 'UNumber' })\n\nconst props = withDefaults(defineProps<NumberProps>(), { duration: 800, format: 'decimal' })\n\nconst number = reactive({ value: 0 })\n\nconst tween = computed(() =>\n props.tween\n ? new Tween(number, { duration: props.duration, easingFunction: Tween.easing.easeInOutQuad })\n : null\n)\n\nconst formatter = computed(() => {\n return $n.formatter({\n currency: props.format === 'currency' ? 'CNY' : undefined,\n style: props.format,\n precision: props.precision,\n maximumFractionDigits: props.maxPrecision,\n minimumFractionDigits: props.minPrecision\n })\n})\n\nconst formatted = computed(() => {\n return formatter.value.format(number.value)\n})\n\nwatch(\n () => props.value,\n () => {\n props.tween ? tween.value.to({ value: props.value }) : (number.value = props.value)\n },\n { immediate: true }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAEd,MAAM,SAAS,SAAS,EAAE,OAAO,EAAE,CAAC;EAEpC,MAAM,QAAQ,eACZ,MAAM,QACF,IAAI,MAAM,QAAQ;GAAE,UAAU,MAAM;GAAU,gBAAgB,MAAM,OAAO;EAAc,CAAC,IAC1F,IACN;EAEA,MAAM,YAAY,eAAe;GAC/B,OAAO,GAAG,UAAU;IAClB,UAAU,MAAM,WAAW,aAAa,QAAQ,KAAA;IAChD,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,uBAAuB,MAAM;IAC7B,uBAAuB,MAAM;GAC/B,CAAC;EACH,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO,UAAU,MAAM,OAAO,OAAO,KAAK;EAC5C,CAAC;EAED,YACQ,MAAM,aACN;GACJ,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,MAAM,CAAC,IAAK,OAAO,QAAQ,MAAM;EAC/E,GACA,EAAE,WAAW,KAAK,CACpB;;0BA1CK,UAAA,KAAS"}
1
+ {"version":3,"file":"number.js","names":[],"sources":["../../../src/components/number/number.vue"],"sourcesContent":["<template>\n {{ formatted }}\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n } from '@cat-kit/core'\nimport { Tween } from '@veltra/utils'\nimport { computed, reactive, watch } from 'vue'\n\nimport type { NumberProps } from '../../types'\n\ndefineOptions({ name: 'UNumber' })\n\nconst props = withDefaults(defineProps<NumberProps>(), { duration: 800, format: 'decimal' })\n\nconst number = reactive({ value: 0 })\n\nconst tween = computed(() =>\n props.tween\n ? new Tween(number, { duration: props.duration, easingFunction: Tween.easing.easeInOutQuad })\n : null\n)\n\nconst formatter = computed(() => {\n return $n.formatter({\n currency: props.format === 'currency' ? 'CNY' : undefined,\n style: props.format,\n precision: props.precision,\n maximumFractionDigits: props.maxPrecision,\n minimumFractionDigits: props.minPrecision\n })\n})\n\nconst formatted = computed(() => {\n return formatter.value.format(number.value)\n})\n\nwatch(\n () => props.value,\n () => {\n props.tween ? tween.value.to({ value: props.value }) : (number.value = props.value)\n },\n { immediate: true }\n)\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAEd,MAAM,SAAS,SAAS,EAAE,OAAO,EAAE,CAAC;EAEpC,MAAM,QAAQ,eACZ,MAAM,QACF,IAAI,MAAM,QAAQ;GAAE,UAAU,MAAM;GAAU,gBAAgB,MAAM,OAAO;EAAc,CAAC,IAC1F,IACN;EAEA,MAAM,YAAY,eAAe;GAC/B,OAAO,GAAG,UAAU;IAClB,UAAU,MAAM,WAAW,aAAa,QAAQ,KAAA;IAChD,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,uBAAuB,MAAM;IAC7B,uBAAuB,MAAM;GAC/B,CAAC;EACH,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO,UAAU,MAAM,OAAO,OAAO,KAAK;EAC5C,CAAC;EAED,YACQ,MAAM,aACN;GACJ,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,OAAO,MAAM,MAAM,CAAC,IAAK,OAAO,QAAQ,MAAM;EAC/E,GACA,EAAE,WAAW,KAAK,CACpB;;GA1CK,OAAA,gBAAA,UAAA,KAAS"}
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -267,7 +267,8 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
267
267
  if (model.value === void 0) return;
268
268
  const { precision, maxPrecision, minPrecision, multiple } = props;
269
269
  if (multiple) {
270
- const fixedRawVal = +n($n.div(model.value, multiple)).fixed(precision ?? {
270
+ const rawVal = $n.div(model.value, multiple);
271
+ const fixedRawVal = +n(rawVal).fixed(precision ?? {
271
272
  maxPrecision,
272
273
  minPrecision
273
274
  });
@@ -1 +1 @@
1
- {"version":3,"file":"number-input.js","names":[],"sources":["../../../src/components/number-input/number-input.vue"],"sourcesContent":["<template>\n <u-input\n v-if=\"!readonly\"\n ref=\"inputRef\"\n :class=\"className\"\n :model-value=\"displayed\"\n v-bind=\"inputProps\"\n @update:model-value=\"handleUpdateModelValue\"\n @change=\"handleChange\"\n @keydown.stop=\"handleKeydown\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n :size=\"size\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :clearable=\"false\"\n >\n <template #suffix v-if=\"hasSuffix\">\n <span :class=\"cls.e('suffix')\">\n <u-icon\n v-if=\"props.clearable\"\n :class=\"[cls.e('clear'), bem.is('hidden', !showClear)]\"\n :title=\"showClear ? '清除' : undefined\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n <span v-if=\"hasCustomSuffix\" :class=\"cls.e('suffix-content')\">\n {{ suffix }}\n <slot name=\"suffix\" />\n </span>\n </span>\n\n <div v-if=\"showStep\" :class=\"cls.e('step')\">\n <u-icon\n @click=\"increase\"\n v-ripple=\"!disabled && increasable\"\n :class=\"bem.is('disabled', disabled || !increasable)\"\n >\n <ArrowUp />\n </u-icon>\n <u-icon\n @click=\"decrease\"\n v-ripple=\"!disabled && reducible\"\n :class=\"bem.is('disabled', disabled || !reducible)\"\n >\n <ArrowDown />\n </u-icon>\n </div>\n </template>\n\n <template #prefix v-if=\"slots.prefix\">\n <slot name=\"prefix\" />\n </template>\n </u-input>\n\n <template v-else>\n {{ generateDisplayed || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n, n, o, isUndef } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { vRipple } from '@veltra/directives'\nimport { ArrowDown, ArrowUp, Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT, Tween } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, useAttrs, watch } from 'vue'\n\nimport type { NumberInputEmits, NumberInputProps, InputExposed } from '../../types'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\n\ndefineOptions({ name: 'UNumberInput', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<NumberInputProps>(), {\n placeholder: '请输入',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\nconst emit = defineEmits<NumberInputEmits>()\n\nconst slots = defineSlots<{ prefix?: () => any; suffix?: () => any }>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst attrs = useAttrs()\n\nconst inputProps = computed(() => ({\n ...attrs,\n ...o(props).pick(['disabled', 'placeholder', 'size', 'prefix'])\n}))\n\nconst inputRef = shallowRef<InputExposed>()\n\nconst inputDom = computed(() => inputRef.value?.el)\n\nconst cls = bem('number-input')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\n/** 实际值 */\nconst model = defineModel<NumberInputProps['modelValue']>()\n\n// 展示值\nconst displayed = shallowRef('')\n\nconst focused = shallowRef(false)\nconst hovered = shallowRef(false)\n\nconst generateDisplayed = computed(() => {\n if (!displayed.value) return ''\n\n return `${props.prefix ?? ''}${displayed.value}${props.suffix ?? ''}`\n})\n\nconst showStep = computed(() => props.step !== undefined && props.step !== false)\n\nconst hasCustomSuffix = computed(() => !!props.suffix || !!slots.suffix)\n\nconst hasSuffix = computed(() => props.clearable || hasCustomSuffix.value || showStep.value)\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && displayed.value !== '' && hovered.value\n})\n\n/** 步长 */\nconst stepVal = computed<number>(() => {\n const { step } = props\n if (step === undefined) return 1\n return typeof step === 'boolean' ? 1 : step\n})\n\n/** 是否可增 */\nconst increasable = computed(() => {\n const { max, multiple } = props\n if (isUndef(max) || isUndef(model.value)) return true\n // 如果存在倍数,先将 model.value 除以倍数得到原始值再比较\n const rawValue = multiple ? $n.div(model.value, multiple) : model.value\n return rawValue < max\n})\n\n/** 是否可减 */\nconst reducible = computed(() => {\n const { min, multiple } = props\n if (isUndef(min) || isUndef(model.value)) return true\n // 如果存在倍数,先将 model.value 除以倍数得到原始值再比较\n const rawValue = multiple ? $n.div(model.value, multiple) : model.value\n return rawValue > min\n})\n\n// 通过值和步长值计算默认的最大精度\nconst defaultMaxPrecision = computed(() => {\n const { multiple } = props\n // 如果存在倍数,基于原始值计算精度\n const rawValue =\n multiple && model.value !== undefined ? $n.div(model.value, multiple) : model.value\n return Math.max(\n String(rawValue).split('.')[1]?.length ?? 0,\n String(stepVal.value).split('.')[1]?.length ?? 0\n )\n})\n\n/**\n * 获取展示值\n * @param num 实际值\n */\nfunction getDisplayed(num?: number): string {\n if (!num && num !== 0) return ''\n\n const {\n currency,\n precision,\n minPrecision,\n // 如果没有指定最大精度那么设置默认为值和步长值中的较大值\n maxPrecision = defaultMaxPrecision.value,\n multiple\n } = props\n\n // 如果存在倍数,先将实际值除以倍数得到原始值\n const displayValue = multiple ? $n.div(num, multiple) : num\n\n return currency\n ? n(displayValue).currency('CNY', { precision, minPrecision, maxPrecision })\n : n(displayValue).fixed(precision ?? { minPrecision, maxPrecision })\n}\n\nwatch(\n [model, focused, () => props.currency],\n ([modelValue, inputFocused]) => {\n if (inputFocused) return\n displayed.value = getDisplayed(modelValue)\n },\n { immediate: true }\n)\n\n/**\n * 解析展示值\n * @param str 展示值\n */\nfunction parseDisplayed(str: string): number | undefined {\n if (!str) return undefined\n\n // 将货币格式去掉再转化为数字\n const number = +str.replace(/,/g, '')\n const { multiple } = props\n\n // 如果解析失败,使用当前值作为回退\n // 如果存在倍数,需要先将 model.value 除以倍数得到原始值\n let result: number | undefined\n if (isNaN(number)) {\n if (model.value === undefined) return undefined\n result = multiple ? $n.div(model.value, multiple) : model.value\n } else {\n result = number\n }\n\n if (result === undefined) return undefined\n\n const { precision, maxPrecision, minPrecision } = props\n\n const fixedResult = +n(result).fixed(precision ?? { minPrecision, maxPrecision })\n\n // 如果存在倍数,将原始值乘以倍数返回实际值\n return multiple ? $n.mul(fixedResult, multiple) : fixedResult\n}\n\n/**\n * 获取有效值\n * @param val 值\n */\nfunction getValidValue<T extends undefined | number>(val: T): T {\n if (val === undefined) return val\n const { min, max, multiple } = props\n\n // 如果存在倍数,先将值除以倍数得到原始值进行验证,验证后再乘以倍数\n if (multiple) {\n const rawVal = $n.div(val, multiple)\n let validRawVal = rawVal\n if (min !== undefined && rawVal < min) validRawVal = min\n if (max !== undefined && rawVal > max) validRawVal = max\n return $n.mul(validRawVal, multiple) as T\n }\n\n if (min !== undefined && val < min) return min as T\n if (max !== undefined && val > max) return max as T\n return val\n}\n\nfunction handleUpdateModelValue(input: string): void {\n const newVal = parseDisplayed(input)\n model.value = getValidValue(newVal)\n displayed.value = input\n}\n\nfunction handleClear(): void {\n if (!showClear.value) return\n model.value = undefined\n displayed.value = ''\n emit('clear')\n}\n\n/**\n * 处理输入值变化的函数, 该函数仅在输入框失去焦点时触发,\n * 主要用于在输入非数字的情况下的修正处理\n * @param input 输入的值\n */\nfunction handleChange() {\n emit('change', model.value)\n}\n\nconst tween = new Tween(\n { n: model.value ?? 0 },\n {\n onUpdate(state) {\n const _rawInput = inputDom.value\n if (!_rawInput) return\n const { multiple } = props\n // 如果存在倍数,tween.state.n 存储的是原始值,需要乘以倍数后传给 getDisplayed\n const actualValue = multiple ? $n.mul(state.n, multiple) : state.n\n _rawInput.value = getDisplayed(actualValue)\n },\n // 动画进行的过程值有可能被改变, 因此在onComplete中确保还原的是原本的值\n onComplete() {\n const _rawInput = inputDom.value\n if (!_rawInput) return\n _rawInput.value = getDisplayed(model.value)\n }\n }\n)\n\n/** 增 */\nfunction increase(): void {\n if (disabled.value) return\n const { multiple } = props\n const val = model.value ?? 0\n\n if (multiple) {\n // 如果存在倍数,先将实际值除以倍数得到原始值\n const rawVal = $n.div(val, multiple)\n // 在原始值基础上加步长\n const newRawVal = $n.plus(rawVal, stepVal.value)\n // 乘以倍数得到新的实际值\n const newVal = $n.mul(newRawVal, multiple)\n const target = getValidValue(newVal)\n model.value = target\n // tween 动画在原始值上进行\n tween.state.n = $n.div(target, multiple)\n tween.to({ n: $n.div(target, multiple) })\n } else {\n tween.state.n = val\n const target = getValidValue($n.plus(val, stepVal.value))\n model.value = target\n tween.to({ n: target })\n }\n}\n\n/** 减 */\nfunction decrease(): void {\n if (disabled.value) return\n const { multiple } = props\n const val = model.value ?? 0\n\n if (multiple) {\n // 如果存在倍数,先将实际值除以倍数得到原始值\n const rawVal = $n.div(val, multiple)\n // 在原始值基础上减步长\n const newRawVal = $n.minus(rawVal, stepVal.value)\n // 乘以倍数得到新的实际值\n const newVal = $n.mul(newRawVal, multiple)\n const target = getValidValue(newVal)\n model.value = target\n // tween 动画在原始值上进行\n tween.state.n = $n.div(target, multiple)\n tween.to({ n: $n.div(target, multiple) })\n } else {\n tween.state.n = val\n const target = getValidValue($n.minus(val, stepVal.value))\n model.value = target\n tween.to({ n: target })\n }\n}\n\nfunction handleKeydown(e: KeyboardEvent): void {\n if (!props.step) return\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n return increase()\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n return decrease()\n }\n}\n\nfunction handleFocus(): void {\n focused.value = true\n\n // 如果初始值和当前设置的精度不匹配则进行精度修正\n if (model.value === undefined) return\n const { precision, maxPrecision, minPrecision, multiple } = props\n\n if (multiple) {\n // 如果存在倍数,先除以倍数得到原始值进行精度修正,再乘以倍数\n const rawVal = $n.div(model.value, multiple)\n const fixedRawVal = +n(rawVal).fixed(precision ?? { maxPrecision, minPrecision })\n model.value = $n.mul(fixedRawVal, multiple)\n } else {\n model.value = +n(model.value).fixed(precision ?? { maxPrecision, minPrecision })\n }\n}\n\nfunction handleBlur(): void {\n focused.value = false\n model.value = props.modelValue\n}\n\nfunction handleMouseEnter(): void {\n hovered.value = true\n}\n\nfunction handleMouseLeave(): void {\n hovered.value = false\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"number-input.js","names":[],"sources":["../../../src/components/number-input/number-input.vue"],"sourcesContent":["<template>\n <u-input\n v-if=\"!readonly\"\n ref=\"inputRef\"\n :class=\"className\"\n :model-value=\"displayed\"\n v-bind=\"inputProps\"\n @update:model-value=\"handleUpdateModelValue\"\n @change=\"handleChange\"\n @keydown.stop=\"handleKeydown\"\n @focus=\"handleFocus\"\n @blur=\"handleBlur\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n :size=\"size\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :clearable=\"false\"\n >\n <template #suffix v-if=\"hasSuffix\">\n <span :class=\"cls.e('suffix')\">\n <u-icon\n v-if=\"props.clearable\"\n :class=\"[cls.e('clear'), bem.is('hidden', !showClear)]\"\n :title=\"showClear ? '清除' : undefined\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n <span v-if=\"hasCustomSuffix\" :class=\"cls.e('suffix-content')\">\n {{ suffix }}\n <slot name=\"suffix\" />\n </span>\n </span>\n\n <div v-if=\"showStep\" :class=\"cls.e('step')\">\n <u-icon\n @click=\"increase\"\n v-ripple=\"!disabled && increasable\"\n :class=\"bem.is('disabled', disabled || !increasable)\"\n >\n <ArrowUp />\n </u-icon>\n <u-icon\n @click=\"decrease\"\n v-ripple=\"!disabled && reducible\"\n :class=\"bem.is('disabled', disabled || !reducible)\"\n >\n <ArrowDown />\n </u-icon>\n </div>\n </template>\n\n <template #prefix v-if=\"slots.prefix\">\n <slot name=\"prefix\" />\n </template>\n </u-input>\n\n <template v-else>\n {{ generateDisplayed || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { $n, n, o, isUndef } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { vRipple } from '@veltra/directives'\nimport { ArrowDown, ArrowUp, Close } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT, Tween } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, useAttrs, watch } from 'vue'\n\nimport type { NumberInputEmits, NumberInputProps, InputExposed } from '../../types'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\n\ndefineOptions({ name: 'UNumberInput', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<NumberInputProps>(), {\n placeholder: '请输入',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\nconst emit = defineEmits<NumberInputEmits>()\n\nconst slots = defineSlots<{ prefix?: () => any; suffix?: () => any }>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst attrs = useAttrs()\n\nconst inputProps = computed(() => ({\n ...attrs,\n ...o(props).pick(['disabled', 'placeholder', 'size', 'prefix'])\n}))\n\nconst inputRef = shallowRef<InputExposed>()\n\nconst inputDom = computed(() => inputRef.value?.el)\n\nconst cls = bem('number-input')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\n/** 实际值 */\nconst model = defineModel<NumberInputProps['modelValue']>()\n\n// 展示值\nconst displayed = shallowRef('')\n\nconst focused = shallowRef(false)\nconst hovered = shallowRef(false)\n\nconst generateDisplayed = computed(() => {\n if (!displayed.value) return ''\n\n return `${props.prefix ?? ''}${displayed.value}${props.suffix ?? ''}`\n})\n\nconst showStep = computed(() => props.step !== undefined && props.step !== false)\n\nconst hasCustomSuffix = computed(() => !!props.suffix || !!slots.suffix)\n\nconst hasSuffix = computed(() => props.clearable || hasCustomSuffix.value || showStep.value)\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && displayed.value !== '' && hovered.value\n})\n\n/** 步长 */\nconst stepVal = computed<number>(() => {\n const { step } = props\n if (step === undefined) return 1\n return typeof step === 'boolean' ? 1 : step\n})\n\n/** 是否可增 */\nconst increasable = computed(() => {\n const { max, multiple } = props\n if (isUndef(max) || isUndef(model.value)) return true\n // 如果存在倍数,先将 model.value 除以倍数得到原始值再比较\n const rawValue = multiple ? $n.div(model.value, multiple) : model.value\n return rawValue < max\n})\n\n/** 是否可减 */\nconst reducible = computed(() => {\n const { min, multiple } = props\n if (isUndef(min) || isUndef(model.value)) return true\n // 如果存在倍数,先将 model.value 除以倍数得到原始值再比较\n const rawValue = multiple ? $n.div(model.value, multiple) : model.value\n return rawValue > min\n})\n\n// 通过值和步长值计算默认的最大精度\nconst defaultMaxPrecision = computed(() => {\n const { multiple } = props\n // 如果存在倍数,基于原始值计算精度\n const rawValue =\n multiple && model.value !== undefined ? $n.div(model.value, multiple) : model.value\n return Math.max(\n String(rawValue).split('.')[1]?.length ?? 0,\n String(stepVal.value).split('.')[1]?.length ?? 0\n )\n})\n\n/**\n * 获取展示值\n * @param num 实际值\n */\nfunction getDisplayed(num?: number): string {\n if (!num && num !== 0) return ''\n\n const {\n currency,\n precision,\n minPrecision,\n // 如果没有指定最大精度那么设置默认为值和步长值中的较大值\n maxPrecision = defaultMaxPrecision.value,\n multiple\n } = props\n\n // 如果存在倍数,先将实际值除以倍数得到原始值\n const displayValue = multiple ? $n.div(num, multiple) : num\n\n return currency\n ? n(displayValue).currency('CNY', { precision, minPrecision, maxPrecision })\n : n(displayValue).fixed(precision ?? { minPrecision, maxPrecision })\n}\n\nwatch(\n [model, focused, () => props.currency],\n ([modelValue, inputFocused]) => {\n if (inputFocused) return\n displayed.value = getDisplayed(modelValue)\n },\n { immediate: true }\n)\n\n/**\n * 解析展示值\n * @param str 展示值\n */\nfunction parseDisplayed(str: string): number | undefined {\n if (!str) return undefined\n\n // 将货币格式去掉再转化为数字\n const number = +str.replace(/,/g, '')\n const { multiple } = props\n\n // 如果解析失败,使用当前值作为回退\n // 如果存在倍数,需要先将 model.value 除以倍数得到原始值\n let result: number | undefined\n if (isNaN(number)) {\n if (model.value === undefined) return undefined\n result = multiple ? $n.div(model.value, multiple) : model.value\n } else {\n result = number\n }\n\n if (result === undefined) return undefined\n\n const { precision, maxPrecision, minPrecision } = props\n\n const fixedResult = +n(result).fixed(precision ?? { minPrecision, maxPrecision })\n\n // 如果存在倍数,将原始值乘以倍数返回实际值\n return multiple ? $n.mul(fixedResult, multiple) : fixedResult\n}\n\n/**\n * 获取有效值\n * @param val 值\n */\nfunction getValidValue<T extends undefined | number>(val: T): T {\n if (val === undefined) return val\n const { min, max, multiple } = props\n\n // 如果存在倍数,先将值除以倍数得到原始值进行验证,验证后再乘以倍数\n if (multiple) {\n const rawVal = $n.div(val, multiple)\n let validRawVal = rawVal\n if (min !== undefined && rawVal < min) validRawVal = min\n if (max !== undefined && rawVal > max) validRawVal = max\n return $n.mul(validRawVal, multiple) as T\n }\n\n if (min !== undefined && val < min) return min as T\n if (max !== undefined && val > max) return max as T\n return val\n}\n\nfunction handleUpdateModelValue(input: string): void {\n const newVal = parseDisplayed(input)\n model.value = getValidValue(newVal)\n displayed.value = input\n}\n\nfunction handleClear(): void {\n if (!showClear.value) return\n model.value = undefined\n displayed.value = ''\n emit('clear')\n}\n\n/**\n * 处理输入值变化的函数, 该函数仅在输入框失去焦点时触发,\n * 主要用于在输入非数字的情况下的修正处理\n * @param input 输入的值\n */\nfunction handleChange() {\n emit('change', model.value)\n}\n\nconst tween = new Tween(\n { n: model.value ?? 0 },\n {\n onUpdate(state) {\n const _rawInput = inputDom.value\n if (!_rawInput) return\n const { multiple } = props\n // 如果存在倍数,tween.state.n 存储的是原始值,需要乘以倍数后传给 getDisplayed\n const actualValue = multiple ? $n.mul(state.n, multiple) : state.n\n _rawInput.value = getDisplayed(actualValue)\n },\n // 动画进行的过程值有可能被改变, 因此在onComplete中确保还原的是原本的值\n onComplete() {\n const _rawInput = inputDom.value\n if (!_rawInput) return\n _rawInput.value = getDisplayed(model.value)\n }\n }\n)\n\n/** 增 */\nfunction increase(): void {\n if (disabled.value) return\n const { multiple } = props\n const val = model.value ?? 0\n\n if (multiple) {\n // 如果存在倍数,先将实际值除以倍数得到原始值\n const rawVal = $n.div(val, multiple)\n // 在原始值基础上加步长\n const newRawVal = $n.plus(rawVal, stepVal.value)\n // 乘以倍数得到新的实际值\n const newVal = $n.mul(newRawVal, multiple)\n const target = getValidValue(newVal)\n model.value = target\n // tween 动画在原始值上进行\n tween.state.n = $n.div(target, multiple)\n tween.to({ n: $n.div(target, multiple) })\n } else {\n tween.state.n = val\n const target = getValidValue($n.plus(val, stepVal.value))\n model.value = target\n tween.to({ n: target })\n }\n}\n\n/** 减 */\nfunction decrease(): void {\n if (disabled.value) return\n const { multiple } = props\n const val = model.value ?? 0\n\n if (multiple) {\n // 如果存在倍数,先将实际值除以倍数得到原始值\n const rawVal = $n.div(val, multiple)\n // 在原始值基础上减步长\n const newRawVal = $n.minus(rawVal, stepVal.value)\n // 乘以倍数得到新的实际值\n const newVal = $n.mul(newRawVal, multiple)\n const target = getValidValue(newVal)\n model.value = target\n // tween 动画在原始值上进行\n tween.state.n = $n.div(target, multiple)\n tween.to({ n: $n.div(target, multiple) })\n } else {\n tween.state.n = val\n const target = getValidValue($n.minus(val, stepVal.value))\n model.value = target\n tween.to({ n: target })\n }\n}\n\nfunction handleKeydown(e: KeyboardEvent): void {\n if (!props.step) return\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n return increase()\n }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n return decrease()\n }\n}\n\nfunction handleFocus(): void {\n focused.value = true\n\n // 如果初始值和当前设置的精度不匹配则进行精度修正\n if (model.value === undefined) return\n const { precision, maxPrecision, minPrecision, multiple } = props\n\n if (multiple) {\n // 如果存在倍数,先除以倍数得到原始值进行精度修正,再乘以倍数\n const rawVal = $n.div(model.value, multiple)\n const fixedRawVal = +n(rawVal).fixed(precision ?? { maxPrecision, minPrecision })\n model.value = $n.mul(fixedRawVal, multiple)\n } else {\n model.value = +n(model.value).fixed(precision ?? { maxPrecision, minPrecision })\n }\n}\n\nfunction handleBlur(): void {\n focused.value = false\n model.value = props.modelValue\n}\n\nfunction handleMouseEnter(): void {\n hovered.value = true\n}\n\nfunction handleMouseLeave(): void {\n hovered.value = false\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"number-range-input.js","names":["$attrs"],"sources":["../../../src/components/number-range-input/number-range-input.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"className\">\n <u-number-input\n v-model=\"startModel\"\n :placeholder=\"startPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"handleStartChange\"\n />\n <span :class=\"cls.e('separator')\">{{ separator }}</span>\n <u-number-input\n v-model=\"endModel\"\n :placeholder=\"endPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"handleEndChange\"\n />\n </div>\n\n <template v-else>\n {{ readonlyText || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, $n, o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, nextTick, onMounted, watch } from 'vue'\n\nimport type { NumberRangeInputEmits, NumberRangeInputProps, NumberRangeTuple } from '../../types'\nimport { UNumberInput } from '../number-input'\n\ndefineOptions({ name: 'UNumberRangeInput', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<NumberRangeInputProps>(), {\n startPlaceholder: '请输入',\n endPlaceholder: '请输入',\n separator: '~',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<NumberRangeInputEmits>()\n\nconst inst = getCurrentInstance()\n\nfunction splitBound(): boolean {\n const p = inst?.vnode.props\n if (!p) return false\n return 'start' in p || 'onUpdate:start' in p || 'end' in p || 'onUpdate:end' in p\n}\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst cls = bem('number-range-input')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\nconst model = defineModel<NumberRangeTuple>({ default: () => [undefined, undefined] })\n\nconst startRef = defineModel<number | undefined>('start')\nconst endRef = defineModel<number | undefined>('end')\n\nlet syncGuard = false\n\nfunction normalizeFromSplit(s: number | undefined, e: number | undefined): NumberRangeTuple {\n // 外部 split 写入无法区分哪一侧后改,统一将越界的 end 抬到 start\n if (s !== undefined && e !== undefined && s > e) return [s, s]\n return [s, e]\n}\n\nwatch(\n model,\n (t) => {\n if (syncGuard) return\n syncGuard = true\n const tuple = t ?? [undefined, undefined]\n if (startRef.value !== tuple[0]) startRef.value = tuple[0]\n if (endRef.value !== tuple[1]) endRef.value = tuple[1]\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nwatch(\n [startRef, endRef],\n () => {\n if (!splitBound() || syncGuard) return\n syncGuard = true\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n const cur = model.value ?? [undefined, undefined]\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n model.value = normalized\n }\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nonMounted(() => {\n if (!splitBound()) return\n const cur = model.value ?? [undefined, undefined]\n const hasModel = cur[0] !== undefined || cur[1] !== undefined\n if (hasModel) return\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n syncGuard = true\n model.value = normalized\n nextTick(() => {\n syncGuard = false\n })\n }\n})\n\nconst numberInputBind = computed(() => {\n return o(props).pick([\n 'clearable',\n 'prefix',\n 'suffix',\n 'step',\n 'min',\n 'max',\n 'currency',\n 'precision',\n 'minPrecision',\n 'maxPrecision',\n 'multiple'\n ])\n})\n\nconst startModel = computed({\n get(): number | undefined {\n return model.value?.[0]\n },\n set(v: number | undefined) {\n // 输入过程只更新单侧,交叉约束放到 change(失焦)时处理\n const cur = model.value ?? [undefined, undefined]\n model.value = [v, cur[1]]\n }\n})\n\nconst endModel = computed({\n get(): number | undefined {\n return model.value?.[1]\n },\n set(v: number | undefined) {\n const cur = model.value ?? [undefined, undefined]\n model.value = [cur[0], v]\n }\n})\n\nfunction formatNumberPart(num: number): string {\n const { currency, precision, minPrecision, maxPrecision, multiple } = props\n\n const displayValue = multiple ? $n.div(num, multiple) : num\n\n return currency\n ? n(displayValue).currency('CNY', { precision, minPrecision, maxPrecision })\n : n(displayValue).fixed(precision ?? { minPrecision, maxPrecision })\n}\n\nconst readonlyText = computed(() => {\n const [s, e] = model.value ?? [undefined, undefined]\n if (s === undefined && e === undefined) return ''\n const p = props.prefix ?? ''\n const sfx = props.suffix ?? ''\n const sep = props.separator ?? '~'\n const a = s === undefined ? '—' : formatNumberPart(s)\n const b = e === undefined ? '—' : formatNumberPart(e)\n return `${p}${a} ${sep} ${b}${sfx}`\n})\n\nfunction handleStartChange(): void {\n const [start, end] = model.value ?? [undefined, undefined]\n // 失焦时只校正刚改的一侧:start > end 时把 start 压回 end\n let next: NumberRangeTuple = [start, end]\n if (start !== undefined && end !== undefined && start > end) {\n next = [end, end]\n model.value = next\n }\n emit('change', next)\n}\n\nfunction handleEndChange(): void {\n const [start, end] = model.value ?? [undefined, undefined]\n // 失焦时只校正刚改的一侧:end < start 时把 end 抬回 start\n let next: NumberRangeTuple = [start, end]\n if (start !== undefined && end !== undefined && end < start) {\n next = [start, start]\n model.value = next\n }\n emit('change', next)\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"number-range-input.js","names":["$attrs"],"sources":["../../../src/components/number-range-input/number-range-input.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"className\">\n <u-number-input\n v-model=\"startModel\"\n :placeholder=\"startPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"handleStartChange\"\n />\n <span :class=\"cls.e('separator')\">{{ separator }}</span>\n <u-number-input\n v-model=\"endModel\"\n :placeholder=\"endPlaceholder\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n :size=\"size\"\n v-bind=\"numberInputBind\"\n @change=\"handleEndChange\"\n />\n </div>\n\n <template v-else>\n {{ readonlyText || FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n, $n, o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, getCurrentInstance, nextTick, onMounted, watch } from 'vue'\n\nimport type { NumberRangeInputEmits, NumberRangeInputProps, NumberRangeTuple } from '../../types'\nimport { UNumberInput } from '../number-input'\n\ndefineOptions({ name: 'UNumberRangeInput', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<NumberRangeInputProps>(), {\n startPlaceholder: '请输入',\n endPlaceholder: '请输入',\n separator: '~',\n clearable: true,\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<NumberRangeInputEmits>()\n\nconst inst = getCurrentInstance()\n\nfunction splitBound(): boolean {\n const p = inst?.vnode.props\n if (!p) return false\n return 'start' in p || 'onUpdate:start' in p || 'end' in p || 'onUpdate:end' in p\n}\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst cls = bem('number-range-input')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value)]\n})\n\nconst model = defineModel<NumberRangeTuple>({ default: () => [undefined, undefined] })\n\nconst startRef = defineModel<number | undefined>('start')\nconst endRef = defineModel<number | undefined>('end')\n\nlet syncGuard = false\n\nfunction normalizeFromSplit(s: number | undefined, e: number | undefined): NumberRangeTuple {\n // 外部 split 写入无法区分哪一侧后改,统一将越界的 end 抬到 start\n if (s !== undefined && e !== undefined && s > e) return [s, s]\n return [s, e]\n}\n\nwatch(\n model,\n (t) => {\n if (syncGuard) return\n syncGuard = true\n const tuple = t ?? [undefined, undefined]\n if (startRef.value !== tuple[0]) startRef.value = tuple[0]\n if (endRef.value !== tuple[1]) endRef.value = tuple[1]\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nwatch(\n [startRef, endRef],\n () => {\n if (!splitBound() || syncGuard) return\n syncGuard = true\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n const cur = model.value ?? [undefined, undefined]\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n model.value = normalized\n }\n nextTick(() => {\n syncGuard = false\n })\n },\n { deep: true }\n)\n\nonMounted(() => {\n if (!splitBound()) return\n const cur = model.value ?? [undefined, undefined]\n const hasModel = cur[0] !== undefined || cur[1] !== undefined\n if (hasModel) return\n const normalized = normalizeFromSplit(startRef.value, endRef.value)\n if (cur[0] !== normalized[0] || cur[1] !== normalized[1]) {\n syncGuard = true\n model.value = normalized\n nextTick(() => {\n syncGuard = false\n })\n }\n})\n\nconst numberInputBind = computed(() => {\n return o(props).pick([\n 'clearable',\n 'prefix',\n 'suffix',\n 'step',\n 'min',\n 'max',\n 'currency',\n 'precision',\n 'minPrecision',\n 'maxPrecision',\n 'multiple'\n ])\n})\n\nconst startModel = computed({\n get(): number | undefined {\n return model.value?.[0]\n },\n set(v: number | undefined) {\n // 输入过程只更新单侧,交叉约束放到 change(失焦)时处理\n const cur = model.value ?? [undefined, undefined]\n model.value = [v, cur[1]]\n }\n})\n\nconst endModel = computed({\n get(): number | undefined {\n return model.value?.[1]\n },\n set(v: number | undefined) {\n const cur = model.value ?? [undefined, undefined]\n model.value = [cur[0], v]\n }\n})\n\nfunction formatNumberPart(num: number): string {\n const { currency, precision, minPrecision, maxPrecision, multiple } = props\n\n const displayValue = multiple ? $n.div(num, multiple) : num\n\n return currency\n ? n(displayValue).currency('CNY', { precision, minPrecision, maxPrecision })\n : n(displayValue).fixed(precision ?? { minPrecision, maxPrecision })\n}\n\nconst readonlyText = computed(() => {\n const [s, e] = model.value ?? [undefined, undefined]\n if (s === undefined && e === undefined) return ''\n const p = props.prefix ?? ''\n const sfx = props.suffix ?? ''\n const sep = props.separator ?? '~'\n const a = s === undefined ? '—' : formatNumberPart(s)\n const b = e === undefined ? '—' : formatNumberPart(e)\n return `${p}${a} ${sep} ${b}${sfx}`\n})\n\nfunction handleStartChange(): void {\n const [start, end] = model.value ?? [undefined, undefined]\n // 失焦时只校正刚改的一侧:start > end 时把 start 压回 end\n let next: NumberRangeTuple = [start, end]\n if (start !== undefined && end !== undefined && start > end) {\n next = [end, end]\n model.value = next\n }\n emit('change', next)\n}\n\nfunction handleEndChange(): void {\n const [start, end] = model.value ?? [undefined, undefined]\n // 失焦时只校正刚改的一侧:end < start 时把 end 抬回 start\n let next: NumberRangeTuple = [start, end]\n if (start !== undefined && end !== undefined && end < start) {\n next = [start, start]\n model.value = next\n }\n emit('change', next)\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"paginator.js","names":[],"sources":["../../../src/components/paginator/paginator.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, cls.m(size)]\" ref=\"paginatorRef\">\n <div>共 {{ total }} 条</div>\n\n <u-select\n :class=\"cls.e('size-select')\"\n v-model=\"pageSize\"\n size=\"small\"\n :options=\"sizeOptions\"\n :clearable=\"false\"\n @change=\"handleChangePageSize\"\n />\n\n <ul :class=\"[cls.e('pages')]\" v-if=\"!simple\">\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', preDisabled)]\"\n @click=\"handleJumpToFirst\"\n @mouseenter=\"hovered.first = true\"\n @mouseleave=\"hovered.first = false\"\n v-ripple=\"!preDisabled\"\n >\n <span v-if=\"hovered.first\">1</span>\n <UIcon v-else><DArrowLeft /></UIcon>\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', pageNumber === 1)]\"\n @click=\"handleJumpToPrev\"\n v-ripple=\"!preDisabled\"\n >\n <UIcon><ArrowLeft /></UIcon>\n </li>\n\n <li\n v-for=\"num in pageNumbers\"\n :key=\"num\"\n :class=\"[cls.e('btn'), bem.is('active', pageNumber === num)]\"\n @click=\"handleChangePageNumber(num)\"\n v-ripple\n >\n {{ num }}\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToNext\"\n v-ripple=\"!nextDisabled\"\n >\n <UIcon><ArrowRight /></UIcon>\n </li>\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToLast\"\n @mouseenter=\"hovered.last = true\"\n @mouseleave=\"hovered.last = false\"\n v-ripple=\"!nextDisabled\"\n >\n <span v-if=\"hovered.last\">{{ totalPages }}</span>\n <UIcon v-else><DArrowRight /></UIcon>\n </li>\n </ul>\n\n <div :class=\"cls.e('jumper')\">\n <span>前往</span>\n <u-number-input\n :class=\"cls.e('page-input')\"\n size=\"small\"\n :min=\"1\"\n :max=\"totalPages\"\n :precision=\"0\"\n :model-value=\"pageNumber\"\n :clearable=\"false\"\n @keyup.enter=\"handleKeyEnter\"\n @change=\"pageNumber = $event!\"\n />\n <span>/ {{ totalPages }}</span>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { useConfig, useFallbackProps } from '@veltra/compositions'\nimport { vRipple } from '@veltra/directives'\nimport { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, reactive, shallowRef } from 'vue'\n\nimport type { PaginatorProps, PaginatorEmits, _PaginatorExposed, ComponentSize } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNumberInput } from '../number-input'\nimport { USelect } from '../select'\n\ndefineOptions({ name: 'UPaginator' })\n\nconst { config } = useConfig()\n\nconst props = withDefaults(defineProps<PaginatorProps>(), { total: 0 })\n\nconst emit = defineEmits<PaginatorEmits>()\n\nconst cls = bem('paginator')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst pageNumber = defineModel<number>('pageNumber', { default: 1 })\n\nconst pageSize = defineModel<number>('pageSize', { default: 10 })\n\nfunction emitPageSize(value: number) {\n emit('change:pageSize', value)\n}\n\nfunction emitPageNumber(value: number) {\n emit('change:pageNumber', value)\n}\n\nconst handleChangePageSize = (size?: Record<string, any>) => {\n emitPageSize(size?.value)\n pageNumber.value = 1\n}\n\nfunction handleChangePageNumber(num: number) {\n if (props.pageNumber === num) return\n pageNumber.value = num\n emitPageNumber(pageNumber.value)\n}\n\nconst currentSize = computed(() => {\n return props.pageSize ?? config.paginator.pageSize\n})\n\n/** 完整页码 */\nconst totalPages = computed(() => {\n return Math.ceil(props.total / currentSize.value)\n})\n\nconst sizeOptions = computed(() => {\n return (props.pageSizeOptions ?? config.paginator.pageSizeOptions).map((value) => {\n return { label: `${value}条`, value }\n })\n})\n\n/** 做多显示5个页码 */\nconst pageNumbers = computed(() => {\n const startPageNum = n(pageNumber.value - 2).range(1, Math.max(totalPages.value - 4, 1))\n\n return Array.from({ length: Math.min(totalPages.value, 5) }).map(\n (_, index) => startPageNum + index\n )\n})\n\nconst preDisabled = computed(() => {\n return pageNumber.value <= 1\n})\nconst nextDisabled = computed(() => {\n return pageNumber.value >= totalPages.value\n})\n\nfunction handleJumpToFirst() {\n if (preDisabled.value) return\n pageNumber.value = 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToLast() {\n if (nextDisabled.value) return\n pageNumber.value = totalPages.value\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToPrev() {\n if (preDisabled.value) return\n pageNumber.value = pageNumber.value - 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToNext() {\n if (nextDisabled.value) return\n\n pageNumber.value = pageNumber.value + 1\n emitPageNumber(pageNumber.value)\n}\n\nfunction handleKeyEnter(e: KeyboardEvent) {\n const target = e.target as HTMLInputElement\n const val = +target.value\n if (!isNaN(val) && val > 0 && val <= totalPages.value) {\n pageNumber.value = val\n emitPageNumber(pageNumber.value)\n }\n}\n\n/** 鼠标停留位置 */\nconst hovered = reactive({ first: false, last: false })\n\nconst paginatorRef = shallowRef<HTMLElement>()\n\ndefineExpose<_PaginatorExposed>({ el: paginatorRef })\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"paginator.js","names":[],"sources":["../../../src/components/paginator/paginator.vue"],"sourcesContent":["<template>\n <div :class=\"[cls.b, cls.m(size)]\" ref=\"paginatorRef\">\n <div>共 {{ total }} 条</div>\n\n <u-select\n :class=\"cls.e('size-select')\"\n v-model=\"pageSize\"\n size=\"small\"\n :options=\"sizeOptions\"\n :clearable=\"false\"\n @change=\"handleChangePageSize\"\n />\n\n <ul :class=\"[cls.e('pages')]\" v-if=\"!simple\">\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', preDisabled)]\"\n @click=\"handleJumpToFirst\"\n @mouseenter=\"hovered.first = true\"\n @mouseleave=\"hovered.first = false\"\n v-ripple=\"!preDisabled\"\n >\n <span v-if=\"hovered.first\">1</span>\n <UIcon v-else><DArrowLeft /></UIcon>\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', pageNumber === 1)]\"\n @click=\"handleJumpToPrev\"\n v-ripple=\"!preDisabled\"\n >\n <UIcon><ArrowLeft /></UIcon>\n </li>\n\n <li\n v-for=\"num in pageNumbers\"\n :key=\"num\"\n :class=\"[cls.e('btn'), bem.is('active', pageNumber === num)]\"\n @click=\"handleChangePageNumber(num)\"\n v-ripple\n >\n {{ num }}\n </li>\n\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToNext\"\n v-ripple=\"!nextDisabled\"\n >\n <UIcon><ArrowRight /></UIcon>\n </li>\n <li\n :class=\"[cls.e('btn'), bem.is('disabled', nextDisabled)]\"\n @click=\"handleJumpToLast\"\n @mouseenter=\"hovered.last = true\"\n @mouseleave=\"hovered.last = false\"\n v-ripple=\"!nextDisabled\"\n >\n <span v-if=\"hovered.last\">{{ totalPages }}</span>\n <UIcon v-else><DArrowRight /></UIcon>\n </li>\n </ul>\n\n <div :class=\"cls.e('jumper')\">\n <span>前往</span>\n <u-number-input\n :class=\"cls.e('page-input')\"\n size=\"small\"\n :min=\"1\"\n :max=\"totalPages\"\n :precision=\"0\"\n :model-value=\"pageNumber\"\n :clearable=\"false\"\n @keyup.enter=\"handleKeyEnter\"\n @change=\"pageNumber = $event!\"\n />\n <span>/ {{ totalPages }}</span>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { useConfig, useFallbackProps } from '@veltra/compositions'\nimport { vRipple } from '@veltra/directives'\nimport { ArrowLeft, ArrowRight, DArrowLeft, DArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, reactive, shallowRef } from 'vue'\n\nimport type { PaginatorProps, PaginatorEmits, _PaginatorExposed, ComponentSize } from '../../types'\nimport { UIcon } from '../icon'\nimport { UNumberInput } from '../number-input'\nimport { USelect } from '../select'\n\ndefineOptions({ name: 'UPaginator' })\n\nconst { config } = useConfig()\n\nconst props = withDefaults(defineProps<PaginatorProps>(), { total: 0 })\n\nconst emit = defineEmits<PaginatorEmits>()\n\nconst cls = bem('paginator')\n\nconst { size } = useFallbackProps([props], { size: 'default' as ComponentSize })\n\nconst pageNumber = defineModel<number>('pageNumber', { default: 1 })\n\nconst pageSize = defineModel<number>('pageSize', { default: 10 })\n\nfunction emitPageSize(value: number) {\n emit('change:pageSize', value)\n}\n\nfunction emitPageNumber(value: number) {\n emit('change:pageNumber', value)\n}\n\nconst handleChangePageSize = (size?: Record<string, any>) => {\n emitPageSize(size?.value)\n pageNumber.value = 1\n}\n\nfunction handleChangePageNumber(num: number) {\n if (props.pageNumber === num) return\n pageNumber.value = num\n emitPageNumber(pageNumber.value)\n}\n\nconst currentSize = computed(() => {\n return props.pageSize ?? config.paginator.pageSize\n})\n\n/** 完整页码 */\nconst totalPages = computed(() => {\n return Math.ceil(props.total / currentSize.value)\n})\n\nconst sizeOptions = computed(() => {\n return (props.pageSizeOptions ?? config.paginator.pageSizeOptions).map((value) => {\n return { label: `${value}条`, value }\n })\n})\n\n/** 做多显示5个页码 */\nconst pageNumbers = computed(() => {\n const startPageNum = n(pageNumber.value - 2).range(1, Math.max(totalPages.value - 4, 1))\n\n return Array.from({ length: Math.min(totalPages.value, 5) }).map(\n (_, index) => startPageNum + index\n )\n})\n\nconst preDisabled = computed(() => {\n return pageNumber.value <= 1\n})\nconst nextDisabled = computed(() => {\n return pageNumber.value >= totalPages.value\n})\n\nfunction handleJumpToFirst() {\n if (preDisabled.value) return\n pageNumber.value = 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToLast() {\n if (nextDisabled.value) return\n pageNumber.value = totalPages.value\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToPrev() {\n if (preDisabled.value) return\n pageNumber.value = pageNumber.value - 1\n emitPageNumber(pageNumber.value)\n}\nfunction handleJumpToNext() {\n if (nextDisabled.value) return\n\n pageNumber.value = pageNumber.value + 1\n emitPageNumber(pageNumber.value)\n}\n\nfunction handleKeyEnter(e: KeyboardEvent) {\n const target = e.target as HTMLInputElement\n const val = +target.value\n if (!isNaN(val) && val > 0 && val <= totalPages.value) {\n pageNumber.value = val\n emitPageNumber(pageNumber.value)\n }\n}\n\n/** 鼠标停留位置 */\nconst hovered = reactive({ first: false, last: false })\n\nconst paginatorRef = shallowRef<HTMLElement>()\n\ndefineExpose<_PaginatorExposed>({ el: paginatorRef })\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-alpha.js","names":[],"sources":["../../../src/components/palette/palette-alpha.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('alpha')\" ref=\"alphaRef\">\n <div :class=\"cls.e('alpha-bg')\" :style=\"{ background: alphaSliderBG }\"></div>\n\n <span :class=\"cls.e('alpha-thumb')\" @click.stop :style=\"alphaThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, shallowRef, onMounted, watch } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'UPaletteAlpha' })\n\nconst { cls, updateAlpha, hueRGB, alpha, userAction, isUserActive } = inject(PaletteDIKey)!\n\nconst alphaRef = shallowRef<HTMLElement>()\n\nconst alphaThumbTransformX = shallowRef(0)\n\nconst alphaThumbStyle = computed(() => {\n return { transform: `translateX(${alphaThumbTransformX.value}px)` }\n})\n\nlet alphaWidth = 0\nconst rangeX = [0, 0] as [number, number]\n\nfunction getAlphaWidth() {\n alphaWidth = alphaRef.value?.offsetWidth ?? 0\n rangeX[1] = alphaWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n alphaThumbTransformX.value = offsetX\n updateAlpha(alphaWidth > 0 ? offsetX / alphaWidth : 0)\n})\n\nconst alphaDragger = useDrag({\n target: alphaRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getAlphaWidth()\n\n alphaDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nconst alphaSliderBG = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0), rgba(${r}, ${g}, ${b}, 1))`\n})\n\nfunction init(): void {\n getAlphaWidth()\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * alpha.value : 0\n}\n\nonMounted(() => {\n init()\n})\n\nwatch(\n alpha,\n (newAlphaValue) => {\n if (isUserActive()) return\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * newAlphaValue : 0\n },\n { flush: 'post' }\n)\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAgBA,MAAM,EAAE,KAAK,aAAa,QAAQ,OAAO,YAAY,iBAAiB,OAAO,YAAY;EAEzF,MAAM,WAAW,WAAwB;EAEzC,MAAM,uBAAuB,WAAW,CAAC;EAEzC,MAAM,kBAAkB,eAAe;GACrC,OAAO,EAAE,WAAW,cAAc,qBAAqB,MAAM,KAAK;EACpE,CAAC;EAED,IAAI,aAAa;EACjB,MAAM,SAAS,CAAC,GAAG,CAAC;EAEpB,SAAS,gBAAgB;GACvB,aAAa,SAAS,OAAO,eAAe;GAC5C,OAAO,KAAK;EACd;EAEA,MAAM,gBAAgB,YAAY,YAAoB;GACpD,qBAAqB,QAAQ;GAC7B,YAAY,aAAa,IAAI,UAAU,aAAa,CAAC;EACvD,CAAC;EAED,MAAM,eAAe,QAAQ;GAC3B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,OAAO;GACvB;GACA,YAAY,GAAG;IACb,cAAc;IAEd,aAAa,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;IAE1C,cAAc,EAAE,OAAO;GACzB;EACF,CAAC;EAED,MAAM,gBAAgB,eAAe;GACnC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,kCAAkC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;EACpF,CAAC;EAED,SAAS,OAAa;GACpB,cAAc;GACd,qBAAqB,QAAQ,aAAa,IAAI,aAAa,MAAM,QAAQ;EAC3E;EAEA,gBAAgB;GACd,KAAK;EACP,CAAC;EAED,MACE,QACC,kBAAkB;GACjB,IAAI,aAAa,GAAG;GACpB,qBAAqB,QAAQ,aAAa,IAAI,aAAa,gBAAgB;EAC7E,GACA,EAAE,OAAO,OAAO,CAClB;EAEA,SAAa,EAAE,KAAK,CAAC;;uBA5EnB,mBAIM,OAAA;IAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;aAAe;IAAJ,KAAI;OAC/B,mBAA6E,OAAA;IAAvE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,UAAA,CAAA;IAAe,OAAK,eAAA,EAAA,YAAgB,cAAA,MAAa,CAAA;gBAEnE,mBAAgF,QAAA;IAAzE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;IAAkB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;IAAE,OAAK,eAAE,gBAAA,KAAe"}
1
+ {"version":3,"file":"palette-alpha.js","names":[],"sources":["../../../src/components/palette/palette-alpha.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('alpha')\" ref=\"alphaRef\">\n <div :class=\"cls.e('alpha-bg')\" :style=\"{ background: alphaSliderBG }\"></div>\n\n <span :class=\"cls.e('alpha-thumb')\" @click.stop :style=\"alphaThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, shallowRef, onMounted, watch } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'UPaletteAlpha' })\n\nconst { cls, updateAlpha, hueRGB, alpha, userAction, isUserActive } = inject(PaletteDIKey)!\n\nconst alphaRef = shallowRef<HTMLElement>()\n\nconst alphaThumbTransformX = shallowRef(0)\n\nconst alphaThumbStyle = computed(() => {\n return { transform: `translateX(${alphaThumbTransformX.value}px)` }\n})\n\nlet alphaWidth = 0\nconst rangeX = [0, 0] as [number, number]\n\nfunction getAlphaWidth() {\n alphaWidth = alphaRef.value?.offsetWidth ?? 0\n rangeX[1] = alphaWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n alphaThumbTransformX.value = offsetX\n updateAlpha(alphaWidth > 0 ? offsetX / alphaWidth : 0)\n})\n\nconst alphaDragger = useDrag({\n target: alphaRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getAlphaWidth()\n\n alphaDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nconst alphaSliderBG = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0), rgba(${r}, ${g}, ${b}, 1))`\n})\n\nfunction init(): void {\n getAlphaWidth()\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * alpha.value : 0\n}\n\nonMounted(() => {\n init()\n})\n\nwatch(\n alpha,\n (newAlphaValue) => {\n if (isUserActive()) return\n alphaThumbTransformX.value = alphaWidth > 0 ? alphaWidth * newAlphaValue : 0\n },\n { flush: 'post' }\n)\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAgBA,MAAM,EAAE,KAAK,aAAa,QAAQ,OAAO,YAAY,iBAAiB,OAAO,YAAY;EAEzF,MAAM,WAAW,WAAwB;EAEzC,MAAM,uBAAuB,WAAW,CAAC;EAEzC,MAAM,kBAAkB,eAAe;GACrC,OAAO,EAAE,WAAW,cAAc,qBAAqB,MAAM,KAAK;EACpE,CAAC;EAED,IAAI,aAAa;EACjB,MAAM,SAAS,CAAC,GAAG,CAAC;EAEpB,SAAS,gBAAgB;GACvB,aAAa,SAAS,OAAO,eAAe;GAC5C,OAAO,KAAK;EACd;EAEA,MAAM,gBAAgB,YAAY,YAAoB;GACpD,qBAAqB,QAAQ;GAC7B,YAAY,aAAa,IAAI,UAAU,aAAa,CAAC;EACvD,CAAC;EAED,MAAM,eAAe,QAAQ;GAC3B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,OAAO;GACvB;GACA,YAAY,GAAG;IACb,cAAc;IAEd,aAAa,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;IAE1C,cAAc,EAAE,OAAO;GACzB;EACF,CAAC;EAED,MAAM,gBAAgB,eAAe;GACnC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,kCAAkC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;EACpF,CAAC;EAED,SAAS,OAAa;GACpB,cAAc;GACd,qBAAqB,QAAQ,aAAa,IAAI,aAAa,MAAM,QAAQ;EAC3E;EAEA,gBAAgB;GACd,KAAK;EACP,CAAC;EAED,MACE,QACC,kBAAkB;GACjB,IAAI,aAAa,GAAG;GACpB,qBAAqB,QAAQ,aAAa,IAAI,aAAa,gBAAgB;EAC7E,GACA,EAAE,OAAO,OAAO,CAClB;EAEA,SAAa,EAAE,KAAK,CAAC;;GA5EnB,OAAA,UAAA,GAAA,mBAIM,OAAA;IAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;IAAe,SAAA;IAAJ,KAAI;GAC/B,GAAA,CAAA,mBAA6E,OAAA;IAAvE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,UAAA,CAAA;IAAe,OAAK,eAAA,EAAA,YAAgB,cAAA,MAAa,CAAA;GAEnE,GAAA,MAAA,CAAA,GAAA,mBAAgF,QAAA;IAAzE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;IAAkB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;IAAE,OAAK,eAAE,gBAAA,KAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-color-switch.js","names":[],"sources":["../../../src/components/palette/palette-color-switch.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('color-switch')\">\n <div :class=\"cls.e('color-type')\">HEX(A)</div>\n\n <u-input\n :class=\"cls.e('color-hexa')\"\n :clearable=\"false\"\n :model-value=\"color\"\n @change=\"handleUpdateColor\"\n :pattern=\"pattern\"\n />\n\n <u-button text type=\"primary\" :class=\"cls.e('clear-btn')\" @click=\"emit('clear')\">\n 清除\n </u-button>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject } from 'vue'\n\nimport { UButton } from '../button'\nimport { UInput } from '../input'\nimport { PaletteDIKey } from './di'\n\ndefineProps<{ color?: string }>()\n\nconst emit = defineEmits(['clear', 'update:color'])\n\nconst { cls } = inject(PaletteDIKey)!\n\nconst pattern = /^#([0-9a-fA-F]{3,4}){1,2}$/\n\nconst handleUpdateColor = (value: string) => {\n emit('update:color', value)\n}\n</script>\n"],"mappings":";;;;;;;;;;EA2BA,MAAM,OAAO;EAEb,MAAM,EAAE,QAAQ,OAAO,YAAY;EAEnC,MAAM,UAAU;EAEhB,MAAM,qBAAqB,UAAkB;GAC3C,KAAK,gBAAgB,KAAK;EAC5B;;uBAlCE,mBAcM,OAAA,EAdA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,cAAA,CAAA,EAAA,GAAA;IAChB,mBAA8C,OAAA,EAAxC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA,EAAA,GAAgB,UAAM,CAAA;IAExC,YAME,MAAA,aAAA,GAAA;KALC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA;KACZ,WAAW;KACX,eAAa,QAAA;KACb,UAAQ;KACC;;IAGZ,YAEW,MAAA,WAAA,GAAA;KAFD,MAAA;KAAK,MAAK;KAAW,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,WAAA,CAAA;KAAgB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA;;4BAEtE,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFiF,QAEjF,EAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"palette-color-switch.js","names":[],"sources":["../../../src/components/palette/palette-color-switch.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('color-switch')\">\n <div :class=\"cls.e('color-type')\">HEX(A)</div>\n\n <u-input\n :class=\"cls.e('color-hexa')\"\n :clearable=\"false\"\n :model-value=\"color\"\n @change=\"handleUpdateColor\"\n :pattern=\"pattern\"\n />\n\n <u-button text type=\"primary\" :class=\"cls.e('clear-btn')\" @click=\"emit('clear')\">\n 清除\n </u-button>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { inject } from 'vue'\n\nimport { UButton } from '../button'\nimport { UInput } from '../input'\nimport { PaletteDIKey } from './di'\n\ndefineProps<{ color?: string }>()\n\nconst emit = defineEmits(['clear', 'update:color'])\n\nconst { cls } = inject(PaletteDIKey)!\n\nconst pattern = /^#([0-9a-fA-F]{3,4}){1,2}$/\n\nconst handleUpdateColor = (value: string) => {\n emit('update:color', value)\n}\n</script>\n"],"mappings":";;;;;;;;;;EA2BA,MAAM,OAAO;EAEb,MAAM,EAAE,QAAQ,OAAO,YAAY;EAEnC,MAAM,UAAU;EAEhB,MAAM,qBAAqB,UAAkB;GAC3C,KAAK,gBAAgB,KAAK;EAC5B;;GAlCE,OAAA,UAAA,GAAA,mBAcM,OAAA,EAdA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,cAAA,CAAA,EAAA,GAAA;IAChB,mBAA8C,OAAA,EAAxC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA,EAAA,GAAgB,UAAM,CAAA;IAExC,YAME,MAAA,aAAA,GAAA;KALC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA;KACZ,WAAW;KACX,eAAa,QAAA;KACb,UAAQ;KACC;;IAGZ,YAEW,MAAA,WAAA,GAAA;KAFD,MAAA;KAAK,MAAK;KAAW,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,WAAA,CAAA;KAAgB,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,OAAA;;KAEtE,SAAA,cAAA,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAFiF,QAEjF,EAAA,CAAA,EAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-hue.js","names":[],"sources":["../../../src/components/palette/palette-hue.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('hue')\" ref=\"hueRef\">\n <span :class=\"cls.e('hue-thumb')\" @click.stop :style=\"hueThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { inject, onMounted } from 'vue'\nimport { shallowRef, computed } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'UPaletteHue' })\n\nconst { cls, updateHue, HSV, userAction } = inject(PaletteDIKey)!\n\nconst hueRef = shallowRef<HTMLElement>()\n\nconst transformX = shallowRef(0)\nlet sliderWidth = 0\n\nconst hueThumbStyle = computed(() => {\n return { transform: `translateX(${transformX.value}px)` }\n})\n\nconst rangeX = [0, 0] as [number, number]\n\nfunction getSliderWidth() {\n sliderWidth = hueRef.value?.offsetWidth ?? 0\n rangeX[1] = sliderWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n transformX.value = offsetX\n updateHue(Math.round((offsetX / sliderWidth) * 360))\n})\n\nconst sliderDragger = useDrag({\n target: hueRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getSliderWidth()\n\n sliderDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nfunction init(): void {\n getSliderWidth()\n transformX.value = (sliderWidth * HSV.h) / 360\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAeA,MAAM,EAAE,KAAK,WAAW,KAAK,eAAe,OAAO,YAAY;EAE/D,MAAM,SAAS,WAAwB;EAEvC,MAAM,aAAa,WAAW,CAAC;EAC/B,IAAI,cAAc;EAElB,MAAM,gBAAgB,eAAe;GACnC,OAAO,EAAE,WAAW,cAAc,WAAW,MAAM,KAAK;EAC1D,CAAC;EAED,MAAM,SAAS,CAAC,GAAG,CAAC;EAEpB,SAAS,iBAAiB;GACxB,cAAc,OAAO,OAAO,eAAe;GAC3C,OAAO,KAAK;EACd;EAEA,MAAM,gBAAgB,YAAY,YAAoB;GACpD,WAAW,QAAQ;GACnB,UAAU,KAAK,MAAO,UAAU,cAAe,GAAG,CAAC;EACrD,CAAC;EAED,MAAM,gBAAgB,QAAQ;GAC5B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,OAAO;GACvB;GACA,YAAY,GAAG;IACb,eAAe;IAEf,cAAc,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;IAE3C,cAAc,EAAE,OAAO;GACzB;EACF,CAAC;EAED,SAAS,OAAa;GACpB,eAAe;GACf,WAAW,QAAS,cAAc,IAAI,IAAK;EAC7C;EAEA,gBAAgB;GACd,KAAK;EACP,CAAC;EAED,SAAa,EAAE,KAAK,CAAC;;uBA7DnB,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,KAAA,CAAA;aAAa;IAAJ,KAAI;OAC7B,mBAA4E,QAAA;IAArE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,WAAA,CAAA;IAAgB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;IAAE,OAAK,eAAE,cAAA,KAAa"}
1
+ {"version":3,"file":"palette-hue.js","names":[],"sources":["../../../src/components/palette/palette-hue.vue"],"sourcesContent":["<template>\n <div :class=\"cls.e('hue')\" ref=\"hueRef\">\n <span :class=\"cls.e('hue-thumb')\" @click.stop :style=\"hueThumbStyle\"></span>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { inject, onMounted } from 'vue'\nimport { shallowRef, computed } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'UPaletteHue' })\n\nconst { cls, updateHue, HSV, userAction } = inject(PaletteDIKey)!\n\nconst hueRef = shallowRef<HTMLElement>()\n\nconst transformX = shallowRef(0)\nlet sliderWidth = 0\n\nconst hueThumbStyle = computed(() => {\n return { transform: `translateX(${transformX.value}px)` }\n})\n\nconst rangeX = [0, 0] as [number, number]\n\nfunction getSliderWidth() {\n sliderWidth = hueRef.value?.offsetWidth ?? 0\n rangeX[1] = sliderWidth\n}\n\nconst updateOffsetX = userAction((offsetX: number) => {\n transformX.value = offsetX\n updateHue(Math.round((offsetX / sliderWidth) * 360))\n})\n\nconst sliderDragger = useDrag({\n target: hueRef,\n rangeX,\n onDrag({ offsetX }) {\n updateOffsetX(offsetX)\n },\n onDragStart(e) {\n getSliderWidth()\n\n sliderDragger.update({ offsetX: e.offsetX })\n\n updateOffsetX(e.offsetX)\n }\n})\n\nfunction init(): void {\n getSliderWidth()\n transformX.value = (sliderWidth * HSV.h) / 360\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAeA,MAAM,EAAE,KAAK,WAAW,KAAK,eAAe,OAAO,YAAY;EAE/D,MAAM,SAAS,WAAwB;EAEvC,MAAM,aAAa,WAAW,CAAC;EAC/B,IAAI,cAAc;EAElB,MAAM,gBAAgB,eAAe;GACnC,OAAO,EAAE,WAAW,cAAc,WAAW,MAAM,KAAK;EAC1D,CAAC;EAED,MAAM,SAAS,CAAC,GAAG,CAAC;EAEpB,SAAS,iBAAiB;GACxB,cAAc,OAAO,OAAO,eAAe;GAC3C,OAAO,KAAK;EACd;EAEA,MAAM,gBAAgB,YAAY,YAAoB;GACpD,WAAW,QAAQ;GACnB,UAAU,KAAK,MAAO,UAAU,cAAe,GAAG,CAAC;EACrD,CAAC;EAED,MAAM,gBAAgB,QAAQ;GAC5B,QAAQ;GACR;GACA,OAAO,EAAE,WAAW;IAClB,cAAc,OAAO;GACvB;GACA,YAAY,GAAG;IACb,eAAe;IAEf,cAAc,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;IAE3C,cAAc,EAAE,OAAO;GACzB;EACF,CAAC;EAED,SAAS,OAAa;GACpB,eAAe;GACf,WAAW,QAAS,cAAc,IAAI,IAAK;EAC7C;EAEA,gBAAgB;GACd,KAAK;EACP,CAAC;EAED,SAAa,EAAE,KAAK,CAAC;;GA7DnB,OAAA,UAAA,GAAA,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,KAAA,CAAA;IAAa,SAAA;IAAJ,KAAI;GAC7B,GAAA,CAAA,mBAA4E,QAAA;IAArE,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,WAAA,CAAA;IAAgB,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;IAAE,OAAK,eAAE,cAAA,KAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette-sv.js","names":[],"sources":["../../../src/components/palette/palette-sv.vue"],"sourcesContent":["<template>\n <!-- 调色画布 -->\n <div :class=\"cls.e('sv')\" ref=\"svRef\">\n <div :class=\"cls.e('sv-s')\" :style=\"{ backgroundImage: canvasBackground }\"></div>\n <div :class=\"cls.e('sv-v')\">{{}}</div>\n\n <div\n :class=\"cls.e('sv-thumb')\"\n ref=\"svThumbRef\"\n @click.stop\n @mousedown.stop\n :style=\"svThumbStyle\"\n ></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, reactive, shallowRef, onMounted } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'UPaletteSV' })\n\nconst { cls, hueRGB, HSV, updateSV, userAction } = inject(PaletteDIKey)!\n\nconst svRef = shallowRef<HTMLDivElement>()\n\nconst canvasSize = { width: 0, height: 0 }\n\nconst rangeX = [0, 0] as [number, number]\nconst rangeY = [0, 0] as [number, number]\n\nconst getCanvasSize = () => {\n if (!svRef.value) return\n const { offsetHeight, offsetWidth } = svRef.value!\n\n canvasSize.width = offsetWidth\n rangeX[1] = offsetWidth\n\n canvasSize.height = offsetHeight\n rangeY[1] = offsetHeight\n}\n\nconst transform = reactive({ x: 0, y: 0 })\n\nconst svThumbStyle = computed(() => {\n return { transform: `translate(${transform.x}px, ${transform.y}px)` }\n})\n\nconst updateThumb = userAction((offsetX: number, offsetY: number) => {\n transform.x = offsetX\n transform.y = offsetY\n\n // 根据画布位置计算饱和度和亮度\n // 水平方向表示饱和度,从左到右饱和度逐渐增高\n // 垂直方向表示亮度,上亮下暗\n const s = Math.max(0, Math.min(1, offsetX / canvasSize.width))\n const v = Math.max(0, Math.min(1, 1 - offsetY / canvasSize.height))\n\n // 更新饱和度和亮度\n updateSV({ s, v })\n})\n\nconst svDragger = useDrag({\n target: svRef,\n rangeX,\n rangeY,\n\n onDrag({ offsetX, offsetY }) {\n updateThumb(offsetX, offsetY)\n },\n onDragStart(e) {\n getCanvasSize()\n\n const { offsetX, offsetY } = e\n\n updateThumb(offsetX, offsetY)\n\n svDragger.update({ offsetX, offsetY })\n }\n})\n\nconst canvasBackground = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgb(255, 255, 255), rgb(${r}, ${g}, ${b}))`\n})\n\nfunction init(): void {\n getCanvasSize()\n transform.x = canvasSize.width * HSV.s\n transform.y = canvasSize.height * (1 - HSV.v)\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAwBA,MAAM,EAAE,KAAK,QAAQ,KAAK,UAAU,eAAe,OAAO,YAAY;EAEtE,MAAM,QAAQ,WAA2B;EAEzC,MAAM,aAAa;GAAE,OAAO;GAAG,QAAQ;EAAE;EAEzC,MAAM,SAAS,CAAC,GAAG,CAAC;EACpB,MAAM,SAAS,CAAC,GAAG,CAAC;EAEpB,MAAM,sBAAsB;GAC1B,IAAI,CAAC,MAAM,OAAO;GAClB,MAAM,EAAE,cAAc,gBAAgB,MAAM;GAE5C,WAAW,QAAQ;GACnB,OAAO,KAAK;GAEZ,WAAW,SAAS;GACpB,OAAO,KAAK;EACd;EAEA,MAAM,YAAY,SAAS;GAAE,GAAG;GAAG,GAAG;EAAE,CAAC;EAEzC,MAAM,eAAe,eAAe;GAClC,OAAO,EAAE,WAAW,aAAa,UAAU,EAAE,MAAM,UAAU,EAAE,KAAK;EACtE,CAAC;EAED,MAAM,cAAc,YAAY,SAAiB,YAAoB;GACnE,UAAU,IAAI;GACd,UAAU,IAAI;GAKd,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,WAAW,KAAK,CAAC;GAC7D,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,UAAU,WAAW,MAAM,CAAC;GAGlE,SAAS;IAAE;IAAG;GAAE,CAAC;EACnB,CAAC;EAED,MAAM,YAAY,QAAQ;GACxB,QAAQ;GACR;GACA;GAEA,OAAO,EAAE,SAAS,WAAW;IAC3B,YAAY,SAAS,OAAO;GAC9B;GACA,YAAY,GAAG;IACb,cAAc;IAEd,MAAM,EAAE,SAAS,YAAY;IAE7B,YAAY,SAAS,OAAO;IAE5B,UAAU,OAAO;KAAE;KAAS;IAAQ,CAAC;GACvC;EACF,CAAC;EAED,MAAM,mBAAmB,eAAe;GACtC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,qDAAqD,EAAE,IAAI,EAAE,IAAI,EAAE;EAC5E,CAAC;EAED,SAAS,OAAa;GACpB,cAAc;GACd,UAAU,IAAI,WAAW,QAAQ,IAAI;GACrC,UAAU,IAAI,WAAW,UAAU,IAAI,IAAI;EAC7C;EAEA,gBAAgB;GACd,KAAK;EACP,CAAC;EAED,SAAa,EAAE,KAAK,CAAC;;2DAjGnB,mBAAA,QAAA,GACA,mBAWM,OAAA;IAXA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,IAAA,CAAA;aAAY;IAAJ,KAAI;;IAC5B,mBAAiF,OAAA;KAA3E,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA;KAAW,OAAK,eAAA,EAAA,iBAAqB,iBAAA,MAAgB,CAAA;;IACvE,mBAAsC,OAAA,EAAhC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,gBAAA,GAAA,CAAA;IAElB,mBAMO,OAAA;KALJ,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,UAAA,CAAA;KACb,KAAI;KACH,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;KACV,aAAS,OAAA,OAAA,OAAA,KAAA,oBAAV,CAAA,GAAe,CAAA,MAAA,CAAA;KACd,OAAK,eAAE,aAAA,KAAY"}
1
+ {"version":3,"file":"palette-sv.js","names":[],"sources":["../../../src/components/palette/palette-sv.vue"],"sourcesContent":["<template>\n <!-- 调色画布 -->\n <div :class=\"cls.e('sv')\" ref=\"svRef\">\n <div :class=\"cls.e('sv-s')\" :style=\"{ backgroundImage: canvasBackground }\"></div>\n <div :class=\"cls.e('sv-v')\">{{}}</div>\n\n <div\n :class=\"cls.e('sv-thumb')\"\n ref=\"svThumbRef\"\n @click.stop\n @mousedown.stop\n :style=\"svThumbStyle\"\n ></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useDrag } from '@veltra/compositions'\nimport { computed, inject, reactive, shallowRef, onMounted } from 'vue'\n\nimport { PaletteDIKey } from './di'\n\ndefineOptions({ name: 'UPaletteSV' })\n\nconst { cls, hueRGB, HSV, updateSV, userAction } = inject(PaletteDIKey)!\n\nconst svRef = shallowRef<HTMLDivElement>()\n\nconst canvasSize = { width: 0, height: 0 }\n\nconst rangeX = [0, 0] as [number, number]\nconst rangeY = [0, 0] as [number, number]\n\nconst getCanvasSize = () => {\n if (!svRef.value) return\n const { offsetHeight, offsetWidth } = svRef.value!\n\n canvasSize.width = offsetWidth\n rangeX[1] = offsetWidth\n\n canvasSize.height = offsetHeight\n rangeY[1] = offsetHeight\n}\n\nconst transform = reactive({ x: 0, y: 0 })\n\nconst svThumbStyle = computed(() => {\n return { transform: `translate(${transform.x}px, ${transform.y}px)` }\n})\n\nconst updateThumb = userAction((offsetX: number, offsetY: number) => {\n transform.x = offsetX\n transform.y = offsetY\n\n // 根据画布位置计算饱和度和亮度\n // 水平方向表示饱和度,从左到右饱和度逐渐增高\n // 垂直方向表示亮度,上亮下暗\n const s = Math.max(0, Math.min(1, offsetX / canvasSize.width))\n const v = Math.max(0, Math.min(1, 1 - offsetY / canvasSize.height))\n\n // 更新饱和度和亮度\n updateSV({ s, v })\n})\n\nconst svDragger = useDrag({\n target: svRef,\n rangeX,\n rangeY,\n\n onDrag({ offsetX, offsetY }) {\n updateThumb(offsetX, offsetY)\n },\n onDragStart(e) {\n getCanvasSize()\n\n const { offsetX, offsetY } = e\n\n updateThumb(offsetX, offsetY)\n\n svDragger.update({ offsetX, offsetY })\n }\n})\n\nconst canvasBackground = computed(() => {\n const { r, g, b } = hueRGB.value\n return `linear-gradient(to right, rgb(255, 255, 255), rgb(${r}, ${g}, ${b}))`\n})\n\nfunction init(): void {\n getCanvasSize()\n transform.x = canvasSize.width * HSV.s\n transform.y = canvasSize.height * (1 - HSV.v)\n}\n\nonMounted(() => {\n init()\n})\n\ndefineExpose({ init })\n</script>\n"],"mappings":";;;;;;;;EAwBA,MAAM,EAAE,KAAK,QAAQ,KAAK,UAAU,eAAe,OAAO,YAAY;EAEtE,MAAM,QAAQ,WAA2B;EAEzC,MAAM,aAAa;GAAE,OAAO;GAAG,QAAQ;EAAE;EAEzC,MAAM,SAAS,CAAC,GAAG,CAAC;EACpB,MAAM,SAAS,CAAC,GAAG,CAAC;EAEpB,MAAM,sBAAsB;GAC1B,IAAI,CAAC,MAAM,OAAO;GAClB,MAAM,EAAE,cAAc,gBAAgB,MAAM;GAE5C,WAAW,QAAQ;GACnB,OAAO,KAAK;GAEZ,WAAW,SAAS;GACpB,OAAO,KAAK;EACd;EAEA,MAAM,YAAY,SAAS;GAAE,GAAG;GAAG,GAAG;EAAE,CAAC;EAEzC,MAAM,eAAe,eAAe;GAClC,OAAO,EAAE,WAAW,aAAa,UAAU,EAAE,MAAM,UAAU,EAAE,KAAK;EACtE,CAAC;EAED,MAAM,cAAc,YAAY,SAAiB,YAAoB;GACnE,UAAU,IAAI;GACd,UAAU,IAAI;GAKd,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,WAAW,KAAK,CAAC;GAC7D,MAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,UAAU,WAAW,MAAM,CAAC;GAGlE,SAAS;IAAE;IAAG;GAAE,CAAC;EACnB,CAAC;EAED,MAAM,YAAY,QAAQ;GACxB,QAAQ;GACR;GACA;GAEA,OAAO,EAAE,SAAS,WAAW;IAC3B,YAAY,SAAS,OAAO;GAC9B;GACA,YAAY,GAAG;IACb,cAAc;IAEd,MAAM,EAAE,SAAS,YAAY;IAE7B,YAAY,SAAS,OAAO;IAE5B,UAAU,OAAO;KAAE;KAAS;IAAQ,CAAC;GACvC;EACF,CAAC;EAED,MAAM,mBAAmB,eAAe;GACtC,MAAM,EAAE,GAAG,GAAG,MAAM,OAAO;GAC3B,OAAO,qDAAqD,EAAE,IAAI,EAAE,IAAI,EAAE;EAC5E,CAAC;EAED,SAAS,OAAa;GACpB,cAAc;GACd,UAAU,IAAI,WAAW,QAAQ,IAAI;GACrC,UAAU,IAAI,WAAW,UAAU,IAAI,IAAI;EAC7C;EAEA,gBAAgB;GACd,KAAK;EACP,CAAC;EAED,SAAa,EAAE,KAAK,CAAC;;GAjGnB,OAAA,UAAA,GAAA,mBAAA,UAAA,MAAA,CAAA,mBAAA,QAAA,GACA,mBAWM,OAAA;IAXA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,IAAA,CAAA;IAAY,SAAA;IAAJ,KAAI;;IAC5B,mBAAiF,OAAA;KAA3E,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA;KAAW,OAAK,eAAA,EAAA,iBAAqB,iBAAA,MAAgB,CAAA;;IACvE,mBAAsC,OAAA,EAAhC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,gBAAA,GAAA,CAAA;IAElB,mBAMO,OAAA;KALJ,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,UAAA,CAAA;KACb,KAAI;KACH,SAAK,OAAA,OAAA,OAAA,KAAA,oBAAN,CAAA,GAAW,CAAA,MAAA,CAAA;KACV,aAAS,OAAA,OAAA,OAAA,KAAA,oBAAV,CAAA,GAAe,CAAA,MAAA,CAAA;KACd,OAAK,eAAE,aAAA,KAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"palette.js","names":[],"sources":["../../../src/components/palette/palette.vue"],"sourcesContent":["<template>\n <u-tip\n trigger=\"click\"\n :class=\"cls.e('panel')\"\n v-model:visible=\"visible\"\n :disabled=\"disabled || readonly\"\n >\n <span :class=\"className\" :style=\"{ backgroundColor: color }\"> </span>\n\n <template #content>\n <!-- 饱和度和亮度 -->\n <PaletteSV ref=\"palette-sv\" />\n\n <!-- 色相 -->\n <PaletteHue ref=\"palette-hue\" />\n\n <!-- 透明度 -->\n <PaletteAlpha ref=\"palette-alpha\" />\n\n <!-- 颜色切换 -->\n <PaletteColorSwitch v-model:color=\"color\" @clear=\"handleClear\" />\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { PaletteProps } from '../../types'\nimport { UTip } from '../tip'\nimport { HSV2RGB, RGB2HEX, HEX2RGBA, RGB2HSV } from './color-transform'\nimport { PaletteDIKey } from './di'\nimport PaletteAlpha from './palette-alpha.vue'\nimport PaletteColorSwitch from './palette-color-switch.vue'\nimport PaletteHue from './palette-hue.vue'\nimport PaletteSV from './palette-sv.vue'\nimport { useHSV } from './use-hsv'\n\ndefineOptions({ name: 'UPalette' })\n\nconst props = withDefaults(defineProps<PaletteProps>(), {\n disabled: undefined,\n readonly: undefined\n})\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst cls = bem('palette')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('no-color', !color.value)]\n})\n\nconst { HSV, alpha, ...rest } = useHSV()\n\nconst color = defineModel<string>()\nconst RGB = computed(() => HSV2RGB(HSV))\nconst { userAction, isUserActive } = useUserAction()\n\nconst visible = shallowRef(false)\n\n/** 清除时跳过一次内部状态到 color 的同步,防止 updateAlpha 把已清空的 color 覆盖回来 */\nlet skipColorUpdate = false\n\nconst handleClear = userAction(() => {\n if (alpha.value !== 1) {\n skipColorUpdate = true\n }\n color.value = ''\n rest.updateAlpha(1)\n visible.value = false\n})\n\nwatch([alpha, RGB], ([alpha, RGB]) => {\n if (skipColorUpdate) {\n skipColorUpdate = false\n return\n }\n color.value = `#${RGB2HEX(RGB, alpha)}`\n})\n\nconst paletteSVRef = useTemplateRef('palette-sv')\nconst paletteHueRef = useTemplateRef('palette-hue')\nconst paletteAlphaRef = useTemplateRef('palette-alpha')\n\nwatch(\n color,\n (color) => {\n if (!color) return\n if (isUserActive()) return\n\n const { RGB, alpha } = HEX2RGBA(color)\n const hsv = RGB2HSV(RGB)\n rest.updateHue(hsv.h)\n rest.updateSV({ s: hsv.s, v: hsv.v })\n rest.updateAlpha(alpha)\n\n paletteSVRef.value?.init()\n paletteHueRef.value?.init()\n paletteAlphaRef.value?.init()\n },\n { immediate: true }\n)\n\nprovide(PaletteDIKey, { cls, HSV, RGB, alpha, userAction, isUserActive, ...rest })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAKd,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;EAElF,MAAM,MAAM,IAAI,SAAS;EAEzB,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,KAAK;IAAG,IAAI,GAAG,YAAY,CAAC,MAAM,KAAK;GAAC;EACpE,CAAC;EAED,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS,OAAO;EAEvC,MAAM,QAAQ,SAAmB,SAAA,YAAC;EAClC,MAAM,MAAM,eAAe,QAAQ,GAAG,CAAC;EACvC,MAAM,EAAE,YAAY,iBAAiB,cAAc;EAEnD,MAAM,UAAU,WAAW,KAAK;;EAGhC,IAAI,kBAAkB;EAEtB,MAAM,cAAc,iBAAiB;GACnC,IAAI,MAAM,UAAU,GAClB,kBAAkB;GAEpB,MAAM,QAAQ;GACd,KAAK,YAAY,CAAC;GAClB,QAAQ,QAAQ;EAClB,CAAC;EAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,SAAS;GACpC,IAAI,iBAAiB;IACnB,kBAAkB;IAClB;GACF;GACA,MAAM,QAAQ,IAAI,QAAQ,KAAK,KAAK;EACtC,CAAC;EAED,MAAM,eAAe,eAAe,YAAY;EAChD,MAAM,gBAAgB,eAAe,aAAa;EAClD,MAAM,kBAAkB,eAAe,eAAe;EAEtD,MACE,QACC,UAAU;GACT,IAAI,CAAC,OAAO;GACZ,IAAI,aAAa,GAAG;GAEpB,MAAM,EAAE,KAAK,UAAU,SAAS,KAAK;GACrC,MAAM,MAAM,QAAQ,GAAG;GACvB,KAAK,UAAU,IAAI,CAAC;GACpB,KAAK,SAAS;IAAE,GAAG,IAAI;IAAG,GAAG,IAAI;GAAE,CAAC;GACpC,KAAK,YAAY,KAAK;GAEtB,aAAa,OAAO,KAAK;GACzB,cAAc,OAAO,KAAK;GAC1B,gBAAgB,OAAO,KAAK;EAC9B,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,QAAQ,cAAc;GAAE;GAAK;GAAK;GAAK;GAAO;GAAY;GAAc,GAAG;EAAK,CAAC;;uBA5G/E,YAqBQ,MAAA,WAAA,GAAA;IApBN,SAAQ;IACP,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;IACL,SAAS,QAAA;8DAAA,QAAO,QAAA;IACvB,UAAU,MAAA,QAAA,KAAY,MAAA,QAAA;;IAIZ,SAAO,cACD;KAAf,mBAAA,UAAA;KACA,YAA8B,aAAA,EAAnB,KAAI,aAAY,GAAA,MAAA,GAAA;KAE3B,mBAAA,MAAA;KACA,YAAgC,aAAA,EAApB,KAAI,cAAa,GAAA,MAAA,GAAA;KAE7B,mBAAA,OAAA;KACA,YAAoC,aAAA,EAAtB,KAAI,gBAAe,GAAA,MAAA,GAAA;KAEjC,mBAAA,QAAA;KACA,YAAiE,aAAA;MAArC,OAAO,MAAA;8DAAA,MAAK,QAAA;MAAG,SAAO,MAAA,WAAA;;;2BAbiB,CAArE,mBAAqE,QAAA;KAA9D,OAAK,eAAE,UAAA,KAAS;KAAG,OAAK,eAAA,EAAA,iBAAqB,MAAA,MAAK,CAAA"}
1
+ {"version":3,"file":"palette.js","names":[],"sources":["../../../src/components/palette/palette.vue"],"sourcesContent":["<template>\n <u-tip\n trigger=\"click\"\n :class=\"cls.e('panel')\"\n v-model:visible=\"visible\"\n :disabled=\"disabled || readonly\"\n >\n <span :class=\"className\" :style=\"{ backgroundColor: color }\"> </span>\n\n <template #content>\n <!-- 饱和度和亮度 -->\n <PaletteSV ref=\"palette-sv\" />\n\n <!-- 色相 -->\n <PaletteHue ref=\"palette-hue\" />\n\n <!-- 透明度 -->\n <PaletteAlpha ref=\"palette-alpha\" />\n\n <!-- 颜色切换 -->\n <PaletteColorSwitch v-model:color=\"color\" @clear=\"handleClear\" />\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, useTemplateRef, watch } from 'vue'\n\nimport type { PaletteProps } from '../../types'\nimport { UTip } from '../tip'\nimport { HSV2RGB, RGB2HEX, HEX2RGBA, RGB2HSV } from './color-transform'\nimport { PaletteDIKey } from './di'\nimport PaletteAlpha from './palette-alpha.vue'\nimport PaletteColorSwitch from './palette-color-switch.vue'\nimport PaletteHue from './palette-hue.vue'\nimport PaletteSV from './palette-sv.vue'\nimport { useHSV } from './use-hsv'\n\ndefineOptions({ name: 'UPalette' })\n\nconst props = withDefaults(defineProps<PaletteProps>(), {\n disabled: undefined,\n readonly: undefined\n})\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])\n\nconst cls = bem('palette')\n\nconst className = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('no-color', !color.value)]\n})\n\nconst { HSV, alpha, ...rest } = useHSV()\n\nconst color = defineModel<string>()\nconst RGB = computed(() => HSV2RGB(HSV))\nconst { userAction, isUserActive } = useUserAction()\n\nconst visible = shallowRef(false)\n\n/** 清除时跳过一次内部状态到 color 的同步,防止 updateAlpha 把已清空的 color 覆盖回来 */\nlet skipColorUpdate = false\n\nconst handleClear = userAction(() => {\n if (alpha.value !== 1) {\n skipColorUpdate = true\n }\n color.value = ''\n rest.updateAlpha(1)\n visible.value = false\n})\n\nwatch([alpha, RGB], ([alpha, RGB]) => {\n if (skipColorUpdate) {\n skipColorUpdate = false\n return\n }\n color.value = `#${RGB2HEX(RGB, alpha)}`\n})\n\nconst paletteSVRef = useTemplateRef('palette-sv')\nconst paletteHueRef = useTemplateRef('palette-hue')\nconst paletteAlphaRef = useTemplateRef('palette-alpha')\n\nwatch(\n color,\n (color) => {\n if (!color) return\n if (isUserActive()) return\n\n const { RGB, alpha } = HEX2RGBA(color)\n const hsv = RGB2HSV(RGB)\n rest.updateHue(hsv.h)\n rest.updateSV({ s: hsv.s, v: hsv.v })\n rest.updateAlpha(alpha)\n\n paletteSVRef.value?.init()\n paletteHueRef.value?.init()\n paletteAlphaRef.value?.init()\n },\n { immediate: true }\n)\n\nprovide(PaletteDIKey, { cls, HSV, RGB, alpha, userAction, isUserActive, ...rest })\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CA,MAAM,QAAQ;EAKd,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;EAElF,MAAM,MAAM,IAAI,SAAS;EAEzB,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,KAAK;IAAG,IAAI,GAAG,YAAY,CAAC,MAAM,KAAK;GAAC;EACpE,CAAC;EAED,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS,OAAO;EAEvC,MAAM,QAAQ,SAAmB,SAAA,YAAC;EAClC,MAAM,MAAM,eAAe,QAAQ,GAAG,CAAC;EACvC,MAAM,EAAE,YAAY,iBAAiB,cAAc;EAEnD,MAAM,UAAU,WAAW,KAAK;;EAGhC,IAAI,kBAAkB;EAEtB,MAAM,cAAc,iBAAiB;GACnC,IAAI,MAAM,UAAU,GAClB,kBAAkB;GAEpB,MAAM,QAAQ;GACd,KAAK,YAAY,CAAC;GAClB,QAAQ,QAAQ;EAClB,CAAC;EAED,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,SAAS;GACpC,IAAI,iBAAiB;IACnB,kBAAkB;IAClB;GACF;GACA,MAAM,QAAQ,IAAI,QAAQ,KAAK,KAAK;EACtC,CAAC;EAED,MAAM,eAAe,eAAe,YAAY;EAChD,MAAM,gBAAgB,eAAe,aAAa;EAClD,MAAM,kBAAkB,eAAe,eAAe;EAEtD,MACE,QACC,UAAU;GACT,IAAI,CAAC,OAAO;GACZ,IAAI,aAAa,GAAG;GAEpB,MAAM,EAAE,KAAK,UAAU,SAAS,KAAK;GACrC,MAAM,MAAM,QAAQ,GAAG;GACvB,KAAK,UAAU,IAAI,CAAC;GACpB,KAAK,SAAS;IAAE,GAAG,IAAI;IAAG,GAAG,IAAI;GAAE,CAAC;GACpC,KAAK,YAAY,KAAK;GAEtB,aAAa,OAAO,KAAK;GACzB,cAAc,OAAO,KAAK;GAC1B,gBAAgB,OAAO,KAAK;EAC9B,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,QAAQ,cAAc;GAAE;GAAK;GAAK;GAAK;GAAO;GAAY;GAAc,GAAG;EAAK,CAAC;;GA5G/E,OAAA,UAAA,GAAA,YAqBQ,MAAA,WAAA,GAAA;IApBN,SAAQ;IACP,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;IACL,SAAS,QAAA;IAAA,oBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,QAAO,QAAA;IACvB,UAAU,MAAA,QAAA,KAAY,MAAA,QAAA;;IAIZ,SAAO,cACD;KAAf,mBAAA,UAAA;KACA,YAA8B,aAAA,EAAnB,KAAI,aAAY,GAAA,MAAA,GAAA;KAE3B,mBAAA,MAAA;KACA,YAAgC,aAAA,EAApB,KAAI,cAAa,GAAA,MAAA,GAAA;KAE7B,mBAAA,OAAA;KACA,YAAoC,aAAA,EAAtB,KAAI,gBAAe,GAAA,MAAA,GAAA;KAEjC,mBAAA,QAAA;KACA,YAAiE,aAAA;MAArC,OAAO,MAAA;MAAA,kBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,MAAK,QAAA;MAAG,SAAO,MAAA,WAAA;;;IAbiB,SAAA,cAAA,CAArE,mBAAqE,QAAA;KAA9D,OAAK,eAAE,UAAA,KAAS;KAAG,OAAK,eAAA,EAAA,iBAAqB,MAAA,MAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"password-input.js","names":[],"sources":["../../../src/components/password-input/password-input.vue"],"sourcesContent":["<template>\n <u-input\n :class=\"cls.b\"\n :model-value=\"passwordText\"\n v-bind=\"inputProps\"\n :size=\"size\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :clearable=\"false\"\n @native:input=\"handleUpdatePwd\"\n @update:model-value=\"!$event && handleClear()\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <template #suffix>\n <span :class=\"cls.e('suffix')\">\n <UIcon v-if=\"showClear\" :class=\"cls.e('clear')\" title=\"清除\" @click.stop=\"handleClear\">\n <Close />\n </UIcon>\n <UIcon :class=\"cls.e('visibility-toggle')\" :size=\"18\" @click.stop=\"toggleVisible\">\n <Hide v-if=\"pwdVisible\" />\n <View v-else />\n </UIcon>\n </span>\n </template>\n\n <template #prefix v-if=\"slots.prefix\">\n <slot name=\"prefix\" />\n </template>\n </u-input>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { Close, Hide, View } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, nextTick, ref, shallowRef } from 'vue'\n\nimport type { PasswordInputProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\n\ndefineOptions({ name: 'UPasswordInput' })\n\nconst props = withDefaults(defineProps<PasswordInputProps>(), {\n clearable: false,\n disabled: undefined,\n readonly: undefined\n})\n\nconst slots = defineSlots<{ prefix?: () => any }>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst inputProps = computed(() => {\n return o(props).pick(['disabled', 'placeholder', 'size'])\n})\n\nconst cls = bem('password-input')\n\nconst model = defineModel<string>()\n\nconst hovered = ref(false)\n\nconst handleMouseEnter = (): void => {\n hovered.value = true\n}\n\nconst handleMouseLeave = (): void => {\n hovered.value = false\n}\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && !!model.value && hovered.value\n})\n\nconst passwordChar = '●'\n\nconst handleUpdatePwd = (e: Event): void => {\n const target = e.target as HTMLInputElement\n const val = target.value\n if (!val) {\n model.value = val\n return\n }\n\n // 字符从无到有\n if (!model.value) {\n model.value = val\n return\n }\n\n const pointIndex = target.selectionStart!\n let inputChar = pointIndex === 0 ? '' : val[pointIndex - 1]!\n if (inputChar === passwordChar) inputChar = ''\n\n // 光标右侧字符数量(当前字符长度减去光标位置)\n const rightLen = val.length - pointIndex\n // 光标左侧字符数量 (当光标前的字符是刚刚输入的,则为这个字符前的所有的字符,否则为光标前的所有赐福)\n const leftLen = inputChar === '' ? pointIndex : pointIndex - 1\n\n const leftVal = model.value.slice(0, leftLen)\n const rightVal = rightLen === 0 ? '' : model.value.slice(-rightLen)\n\n model.value = leftVal + inputChar + rightVal\n\n nextTick(() => {\n target.selectionStart = pointIndex\n target.selectionEnd = pointIndex\n })\n}\n\nconst handleClear = (): void => {\n model.value = ''\n}\n\nconst pwdVisible = shallowRef(false)\n\nconst passwordText = computed<string | undefined>(() => {\n if (pwdVisible.value) return model.value\n return model.value ? passwordChar.repeat(model.value.length) : ''\n})\n\nconst toggleVisible = () => {\n pwdVisible.value = !pwdVisible.value\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"password-input.js","names":[],"sources":["../../../src/components/password-input/password-input.vue"],"sourcesContent":["<template>\n <u-input\n :class=\"cls.b\"\n :model-value=\"passwordText\"\n v-bind=\"inputProps\"\n :size=\"size\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :clearable=\"false\"\n @native:input=\"handleUpdatePwd\"\n @update:model-value=\"!$event && handleClear()\"\n @mouseenter=\"handleMouseEnter\"\n @mouseleave=\"handleMouseLeave\"\n >\n <template #suffix>\n <span :class=\"cls.e('suffix')\">\n <UIcon v-if=\"showClear\" :class=\"cls.e('clear')\" title=\"清除\" @click.stop=\"handleClear\">\n <Close />\n </UIcon>\n <UIcon :class=\"cls.e('visibility-toggle')\" :size=\"18\" @click.stop=\"toggleVisible\">\n <Hide v-if=\"pwdVisible\" />\n <View v-else />\n </UIcon>\n </span>\n </template>\n\n <template #prefix v-if=\"slots.prefix\">\n <slot name=\"prefix\" />\n </template>\n </u-input>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o } from '@cat-kit/core'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { Close, Hide, View } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, nextTick, ref, shallowRef } from 'vue'\n\nimport type { PasswordInputProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\n\ndefineOptions({ name: 'UPasswordInput' })\n\nconst props = withDefaults(defineProps<PasswordInputProps>(), {\n clearable: false,\n disabled: undefined,\n readonly: undefined\n})\n\nconst slots = defineSlots<{ prefix?: () => any }>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst inputProps = computed(() => {\n return o(props).pick(['disabled', 'placeholder', 'size'])\n})\n\nconst cls = bem('password-input')\n\nconst model = defineModel<string>()\n\nconst hovered = ref(false)\n\nconst handleMouseEnter = (): void => {\n hovered.value = true\n}\n\nconst handleMouseLeave = (): void => {\n hovered.value = false\n}\n\nconst showClear = computed(() => {\n return props.clearable && !disabled.value && !!model.value && hovered.value\n})\n\nconst passwordChar = '●'\n\nconst handleUpdatePwd = (e: Event): void => {\n const target = e.target as HTMLInputElement\n const val = target.value\n if (!val) {\n model.value = val\n return\n }\n\n // 字符从无到有\n if (!model.value) {\n model.value = val\n return\n }\n\n const pointIndex = target.selectionStart!\n let inputChar = pointIndex === 0 ? '' : val[pointIndex - 1]!\n if (inputChar === passwordChar) inputChar = ''\n\n // 光标右侧字符数量(当前字符长度减去光标位置)\n const rightLen = val.length - pointIndex\n // 光标左侧字符数量 (当光标前的字符是刚刚输入的,则为这个字符前的所有的字符,否则为光标前的所有赐福)\n const leftLen = inputChar === '' ? pointIndex : pointIndex - 1\n\n const leftVal = model.value.slice(0, leftLen)\n const rightVal = rightLen === 0 ? '' : model.value.slice(-rightLen)\n\n model.value = leftVal + inputChar + rightVal\n\n nextTick(() => {\n target.selectionStart = pointIndex\n target.selectionEnd = pointIndex\n })\n}\n\nconst handleClear = (): void => {\n model.value = ''\n}\n\nconst pwdVisible = shallowRef(false)\n\nconst passwordText = computed<string | undefined>(() => {\n if (pwdVisible.value) return model.value\n return model.value ? passwordChar.repeat(model.value.length) : ''\n})\n\nconst toggleVisible = () => {\n pwdVisible.value = !pwdVisible.value\n}\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pop-confirm.js","names":[],"sources":["../../../src/components/pop-confirm/pop-confirm.vue"],"sourcesContent":["<template>\n <u-tip\n :class=\"cls.b\"\n :trigger=\"trigger\"\n :direction=\"direction\"\n :alignment=\"alignment\"\n :content-tag=\"contentTag\"\n v-model:visible=\"visible\"\n >\n <slot name=\"reference\" />\n\n <template #content>\n <div :class=\"[cls.m('main'), cls.m(size)]\">\n <u-icon :size=\"16\" :class=\"cls.m('icon')\" :style=\"{ color: iconColor }\">\n <component :is=\"icon\" />\n </u-icon>\n <span>\n {{ title }}\n </span>\n </div>\n <div :class=\"cls.m('action')\">\n <u-button size=\"small\" @click=\"cancel\" type=\"primary\" text>\n {{ cancelText }}\n </u-button>\n &nbsp;\n <u-button size=\"small\" type=\"primary\" @click=\"confirm\">\n {{ confirmText }}\n </u-button>\n </div>\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { QuestionFilled } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { ref } from 'vue'\n\nimport type { PopConfirmProps, PopConfirmEmits } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: 'UPopConfirm' })\n\nconst emit = defineEmits<PopConfirmEmits>()\n\nwithDefaults(defineProps<PopConfirmProps>(), {\n trigger: 'click',\n icon: QuestionFilled,\n direction: 'bottom',\n iconColor: '#ffc107',\n confirmText: '确认',\n cancelText: '取消'\n})\n\nconst cls = bem('pop-confirm')\n\nconst visible = ref(false)\n\nconst { formProps } = injectFormContext()\n\nconst { size } = useFormFallbackProps([formProps ?? {}], { size: 'default' })\n\nconst confirm = () => {\n emit('confirm')\n visible.value = false\n}\n\nconst cancel = () => {\n emit('cancel')\n visible.value = false\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EA+CA,MAAM,OAAO;EAWb,MAAM,MAAM,IAAI,aAAa;EAE7B,MAAM,UAAU,IAAI,KAAK;EAEzB,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,SAAS,qBAAqB,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,MAAM,UAAU,CAAC;EAE5E,MAAM,gBAAgB;GACpB,KAAK,SAAS;GACd,QAAQ,QAAQ;EAClB;EAEA,MAAM,eAAe;GACnB,KAAK,QAAQ;GACb,QAAQ,QAAQ;EAClB;;uBAzEE,YA6BQ,MAAA,WAAA,GAAA;IA5BL,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,CAAC;IACZ,SAAS,QAAA;IACT,WAAW,QAAA;IACX,WAAW,QAAA;IACX,eAAa,QAAA;IACN,SAAS,QAAA;8DAAA,QAAO,QAAA;;IAIb,SAAO,cAQV,CAPN,mBAOM,OAAA,EAPA,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,GAAU,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI,CAAA,CAAA,EAAA,GAAA,CACrC,YAES,MAAA,WAAA,GAAA;KAFA,MAAM;KAAK,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA;KAAW,OAAK,eAAA,EAAA,OAAW,QAAA,UAAS,CAAA;;4BAC1C,EAAA,UAAA,GAAxB,YAAwB,wBAAR,QAAA,IAAI,CAAA,EAAA,CAAA;;+BAEtB,mBAEO,QAAA,MAAA,gBADF,QAAA,KAAK,GAAA,CAAA,CAAA,GAAA,CAAA,GAGZ,mBAQM,OAAA,EARA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA,EAAA,GAAA;KAChB,YAEW,MAAA,WAAA,GAAA;MAFD,MAAK;MAAS,SAAO;MAAQ,MAAK;MAAU,MAAA;;6BACpC,CAAA,gBAAA,gBAAb,QAAA,UAAU,GAAA,CAAA,CAAA,CAAA;;;+CACJ,UAEX,EAAA;KAAA,YAEW,MAAA,WAAA,GAAA;MAFD,MAAK;MAAQ,MAAK;MAAW,SAAO;;6BAC3B,CAAA,gBAAA,gBAAd,QAAA,WAAW,GAAA,CAAA,CAAA,CAAA;;;;2BAjBK,CAAzB,WAAyB,KAAA,QAAA,WAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"pop-confirm.js","names":[],"sources":["../../../src/components/pop-confirm/pop-confirm.vue"],"sourcesContent":["<template>\n <u-tip\n :class=\"cls.b\"\n :trigger=\"trigger\"\n :direction=\"direction\"\n :alignment=\"alignment\"\n :content-tag=\"contentTag\"\n v-model:visible=\"visible\"\n >\n <slot name=\"reference\" />\n\n <template #content>\n <div :class=\"[cls.m('main'), cls.m(size)]\">\n <u-icon :size=\"16\" :class=\"cls.m('icon')\" :style=\"{ color: iconColor }\">\n <component :is=\"icon\" />\n </u-icon>\n <span>\n {{ title }}\n </span>\n </div>\n <div :class=\"cls.m('action')\">\n <u-button size=\"small\" @click=\"cancel\" type=\"primary\" text>\n {{ cancelText }}\n </u-button>\n &nbsp;\n <u-button size=\"small\" type=\"primary\" @click=\"confirm\">\n {{ confirmText }}\n </u-button>\n </div>\n </template>\n </u-tip>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { QuestionFilled } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { ref } from 'vue'\n\nimport type { PopConfirmProps, PopConfirmEmits } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { UTip } from '../tip'\n\ndefineOptions({ name: 'UPopConfirm' })\n\nconst emit = defineEmits<PopConfirmEmits>()\n\nwithDefaults(defineProps<PopConfirmProps>(), {\n trigger: 'click',\n icon: QuestionFilled,\n direction: 'bottom',\n iconColor: '#ffc107',\n confirmText: '确认',\n cancelText: '取消'\n})\n\nconst cls = bem('pop-confirm')\n\nconst visible = ref(false)\n\nconst { formProps } = injectFormContext()\n\nconst { size } = useFormFallbackProps([formProps ?? {}], { size: 'default' })\n\nconst confirm = () => {\n emit('confirm')\n visible.value = false\n}\n\nconst cancel = () => {\n emit('cancel')\n visible.value = false\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EA+CA,MAAM,OAAO;EAWb,MAAM,MAAM,IAAI,aAAa;EAE7B,MAAM,UAAU,IAAI,KAAK;EAEzB,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,SAAS,qBAAqB,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,MAAM,UAAU,CAAC;EAE5E,MAAM,gBAAgB;GACpB,KAAK,SAAS;GACd,QAAQ,QAAQ;EAClB;EAEA,MAAM,eAAe;GACnB,KAAK,QAAQ;GACb,QAAQ,QAAQ;EAClB;;GAzEE,OAAA,UAAA,GAAA,YA6BQ,MAAA,WAAA,GAAA;IA5BL,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,CAAC;IACZ,SAAS,QAAA;IACT,WAAW,QAAA;IACX,WAAW,QAAA;IACX,eAAa,QAAA;IACN,SAAS,QAAA;IAAA,oBAAA,OAAA,OAAA,OAAA,MAAA,WAAA,QAAO,QAAA;;IAIb,SAAO,cAQV,CAPN,mBAOM,OAAA,EAPA,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,GAAU,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI,CAAA,CAAA,EAAA,GACrC,CAAA,YAES,MAAA,WAAA,GAAA;KAFA,MAAM;KAAK,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA;KAAW,OAAK,eAAA,EAAA,OAAW,QAAA,UAAS,CAAA;;KAC1C,SAAA,cAAA,EAAA,UAAA,GAAxB,YAAwB,wBAAR,QAAA,IAAI,CAAA,EAAA,CAAA;;IAEtB,GAAA,GAAA,CAAA,SAAA,OAAA,CAAA,GAAA,mBAEO,QAAA,MAAA,gBADF,QAAA,KAAK,GAAA,CAAA,CAAA,GAAA,CAGZ,GAAA,mBAQM,OAAA,EARA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA,EAAA,GAAA;KAChB,YAEW,MAAA,WAAA,GAAA;MAFD,MAAK;MAAS,SAAO;MAAQ,MAAK;MAAU,MAAA;;MACpC,SAAA,cAAA,CAAA,gBAAb,gBAAA,QAAA,UAAU,GAAA,CAAA,CAAA,CAAA;;;KACJ,OAAA,OAAA,OAAA,KAAA,gBAAA,UAEX,EAAA;KAAA,YAEW,MAAA,WAAA,GAAA;MAFD,MAAK;MAAQ,MAAK;MAAW,SAAO;;MAC3B,SAAA,cAAA,CAAA,gBAAd,gBAAA,QAAA,WAAW,GAAA,CAAA,CAAA,CAAA;;;;IAjBK,SAAA,cAAA,CAAzB,WAAyB,KAAA,QAAA,WAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","names":[],"sources":["../../../src/components/progress/progress.vue"],"sourcesContent":["<template>\n <div :class=\"className\">\n <!-- 条形进度条 -->\n <div :class=\"cls.e('bar-wrap')\" v-if=\"!circle\">\n <div :class=\"cls.e('bar')\" :style=\"{ width: percentage + '%' }\">\n <slot v-bind=\"{ percentage, type }\">{{ percentage }}%</slot>\n </div>\n </div>\n\n <!-- 环形进度条 -->\n <div\n v-else\n :class=\"cls.e('circle')\"\n :style=\"{ height: withUnit(size, 'px'), width: withUnit(size, 'px') }\"\n >\n <svg viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" :r=\"r\" fill=\"none\" stroke=\"#f5f8fa\" stroke-width=\"8\" />\n <circle\n :class=\"cls.e('circle-ring')\"\n cx=\"50\"\n cy=\"50\"\n :r=\"r\"\n fill=\"none\"\n :stroke=\"stroke\"\n stroke-width=\"8\"\n :stroke-dasharray=\"dashArray\"\n :stroke-dashoffset=\"offset\"\n :stroke-linecap=\"percentage === 0 ? undefined : 'round'\"\n />\n </svg>\n\n <div :class=\"cls.e('circle-content')\">\n <slot v-bind=\"{ percentage, type }\"> {{ percentage }}% </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { ProgressProps, ColorType } from '../../types'\n\ndefineOptions({ name: 'UProgress' })\n\nconst props = withDefaults(defineProps<ProgressProps>(), { type: 'primary', circle: false })\n\ndefineSlots<{\n default: (props: {\n /** 进度百分比 */\n percentage: number\n /** 样式类型 */\n type: ColorType\n }) => any\n}>()\n\nconst cls = bem('progress')\n\nconst percentage = computed(() => {\n return n(props.percentage ?? 0).range(0, 100)\n})\n\nconst type = computed<ColorType>(() => {\n const { type } = props\n return typeof type === 'function' ? type(percentage.value) : type\n})\n\nconst className = computed(() => {\n return [cls.b, bem.is('circle', props.circle), cls.m(type.value)]\n})\n\n/** 描边 */\nconst stroke = computed(() => {\n return `var(--u-color-${type.value})`\n})\n\nconst r = 44\nconst c = 2 * Math.PI * r\nconst offset = c / 4\n\n/** 圆周 */\nconst dashArray = computed(() => {\n const dashLen = (c * percentage.value) / 100\n return `${dashLen}, ${c - dashLen}`\n})\n</script>\n"],"mappings":";;;;;;;;;;AA8EA,MAAM,IAAI;;;;;;;;;;;;;;;;;EA/BV,MAAM,QAAQ;EAWd,MAAM,MAAM,IAAI,UAAU;EAE1B,MAAM,aAAa,eAAe;GAChC,OAAO,EAAE,MAAM,cAAc,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG;EAC9C,CAAC;EAED,MAAM,OAAO,eAA0B;GACrC,MAAM,EAAE,SAAS;GACjB,OAAO,OAAO,SAAS,aAAa,KAAK,WAAW,KAAK,IAAI;EAC/D,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,GAAG,UAAU,MAAM,MAAM;IAAG,IAAI,EAAE,KAAK,KAAK;GAAC;EAClE,CAAC;;EAGD,MAAM,SAAS,eAAe;GAC5B,OAAO,iBAAiB,KAAK,MAAM;EACrC,CAAC;EAGD,MAAM,IAAI,IAAI,KAAK,KAAK;EACxB,MAAM,SAAS,IAAI;;EAGnB,MAAM,YAAY,eAAe;GAC/B,MAAM,UAAW,IAAI,WAAW,QAAS;GACzC,OAAO,GAAG,QAAQ,IAAI,IAAI;EAC5B,CAAC;;uBArFC,mBAkCM,OAAA,EAlCA,OAAK,eAAE,UAAA,KAAS,EAAA,GAAA,CACpB,mBAAA,SAAA,GAAA,CACuC,QAAA,UAAA,UAAA,GAAvC,mBAIM,OAAA;;IAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,UAAA,CAAA;OAChB,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,KAAA,CAAA;IAAU,OAAK,eAAA,EAAA,OAAW,WAAA,QAAU,IAAA,CAAA;OACpD,WAA4D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA5C,WAAA;IAAU,MAAE,KAAA;GAAI,CAAA,CAAA,SAA4B,CAAA,gBAAA,gBAArB,WAAA,KAAU,IAAG,KAAC,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,MAAA,UAAA,GAKzD,mBAwBM,UAAA,EAAA,KAAA,EAAA,GAAA,CAzBN,mBAAA,SAAA,GACA,mBAwBM,OAAA;IAtBH,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA;IACZ,OAAK,eAAA;KAAA,QAAY,MAAA,QAAA,CAAQ,CAAC,QAAA,MAAI,IAAA;KAAA,OAAgB,MAAA,QAAA,CAAQ,CAAC,QAAA,MAAI,IAAA;IAAA,CAAA;qBAE5D,mBAcM,OAdN,YAcM,CAbJ,mBAA+E,UAAA;IAAvE,IAAG;IAAK,IAAG;IAAS;IAAG,MAAK;IAAO,QAAO;IAAU,gBAAa;OACzE,mBAWE,UAAA;IAVC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;IACb,IAAG;IACH,IAAG;IACC;IACJ,MAAK;IACJ,QAAQ,OAAA;IACT,gBAAa;IACZ,oBAAkB,UAAA;IAClB,qBAAmB;IACnB,kBAAgB,WAAA,UAAU,IAAS,KAAA,IAAS;gCAIjD,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,gBAAA,CAAA,EAAA,GAAA,CAChB,WAA8D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA9C,WAAA;IAAU,MAAE,KAAA;GAAI,CAAA,CAAA,SAA8B,CAAA,gBAAA,gBAAtB,WAAA,KAAU,IAAG,MAAE,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,EAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"progress.js","names":[],"sources":["../../../src/components/progress/progress.vue"],"sourcesContent":["<template>\n <div :class=\"className\">\n <!-- 条形进度条 -->\n <div :class=\"cls.e('bar-wrap')\" v-if=\"!circle\">\n <div :class=\"cls.e('bar')\" :style=\"{ width: percentage + '%' }\">\n <slot v-bind=\"{ percentage, type }\">{{ percentage }}%</slot>\n </div>\n </div>\n\n <!-- 环形进度条 -->\n <div\n v-else\n :class=\"cls.e('circle')\"\n :style=\"{ height: withUnit(size, 'px'), width: withUnit(size, 'px') }\"\n >\n <svg viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" :r=\"r\" fill=\"none\" stroke=\"#f5f8fa\" stroke-width=\"8\" />\n <circle\n :class=\"cls.e('circle-ring')\"\n cx=\"50\"\n cy=\"50\"\n :r=\"r\"\n fill=\"none\"\n :stroke=\"stroke\"\n stroke-width=\"8\"\n :stroke-dasharray=\"dashArray\"\n :stroke-dashoffset=\"offset\"\n :stroke-linecap=\"percentage === 0 ? undefined : 'round'\"\n />\n </svg>\n\n <div :class=\"cls.e('circle-content')\">\n <slot v-bind=\"{ percentage, type }\"> {{ percentage }}% </slot>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { n } from '@cat-kit/core'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { ProgressProps, ColorType } from '../../types'\n\ndefineOptions({ name: 'UProgress' })\n\nconst props = withDefaults(defineProps<ProgressProps>(), { type: 'primary', circle: false })\n\ndefineSlots<{\n default: (props: {\n /** 进度百分比 */\n percentage: number\n /** 样式类型 */\n type: ColorType\n }) => any\n}>()\n\nconst cls = bem('progress')\n\nconst percentage = computed(() => {\n return n(props.percentage ?? 0).range(0, 100)\n})\n\nconst type = computed<ColorType>(() => {\n const { type } = props\n return typeof type === 'function' ? type(percentage.value) : type\n})\n\nconst className = computed(() => {\n return [cls.b, bem.is('circle', props.circle), cls.m(type.value)]\n})\n\n/** 描边 */\nconst stroke = computed(() => {\n return `var(--u-color-${type.value})`\n})\n\nconst r = 44\nconst c = 2 * Math.PI * r\nconst offset = c / 4\n\n/** 圆周 */\nconst dashArray = computed(() => {\n const dashLen = (c * percentage.value) / 100\n return `${dashLen}, ${c - dashLen}`\n})\n</script>\n"],"mappings":";;;;;;;;;;AA8EA,MAAM,IAAI;;;;;;;;;;;;;;;;;EA/BV,MAAM,QAAQ;EAWd,MAAM,MAAM,IAAI,UAAU;EAE1B,MAAM,aAAa,eAAe;GAChC,OAAO,EAAE,MAAM,cAAc,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG;EAC9C,CAAC;EAED,MAAM,OAAO,eAA0B;GACrC,MAAM,EAAE,SAAS;GACjB,OAAO,OAAO,SAAS,aAAa,KAAK,WAAW,KAAK,IAAI;EAC/D,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,GAAG,UAAU,MAAM,MAAM;IAAG,IAAI,EAAE,KAAK,KAAK;GAAC;EAClE,CAAC;;EAGD,MAAM,SAAS,eAAe;GAC5B,OAAO,iBAAiB,KAAK,MAAM;EACrC,CAAC;EAGD,MAAM,IAAI,IAAI,KAAK,KAAK;EACxB,MAAM,SAAS,IAAI;;EAGnB,MAAM,YAAY,eAAe;GAC/B,MAAM,UAAW,IAAI,WAAW,QAAS;GACzC,OAAO,GAAG,QAAQ,IAAI,IAAI;EAC5B,CAAC;;GArFC,OAAA,UAAA,GAAA,mBAkCM,OAAA,EAlCA,OAAK,eAAE,UAAA,KAAS,EAAA,GACpB,CAAA,mBAAA,SAAA,GAAA,CACuC,QAAA,UAAA,UAAA,GAAvC,mBAIM,OAAA;;IAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,UAAA,CAAA;GAChB,GAAA,CAAA,mBAEM,OAAA;IAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,KAAA,CAAA;IAAU,OAAK,eAAA,EAAA,OAAW,WAAA,QAAU,IAAA,CAAA;GACpD,GAAA,CAAA,WAA4D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA5C,WAAA;IAAU,MAAE,KAAA;GAAI,CAAA,CAAA,SAA4B,CAAA,gBAArB,gBAAA,WAAA,KAAU,IAAG,KAAC,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAKzD,MAAA,UAAA,GAAA,mBAwBM,UAAA,EAAA,KAAA,EAAA,GAAA,CAzBN,mBAAA,SAAA,GACA,mBAwBM,OAAA;IAtBH,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA;IACZ,OAAK,eAAA;KAAA,QAAY,MAAA,QAAA,CAAQ,CAAC,QAAA,MAAI,IAAA;KAAA,OAAgB,MAAA,QAAA,CAAQ,CAAC,QAAA,MAAI,IAAA;IAAA,CAAA;GAE5D,GAAA,EAAA,UAAA,GAAA,mBAcM,OAdN,YAcM,CAbJ,mBAA+E,UAAA;IAAvE,IAAG;IAAK,IAAG;IAAS;IAAG,MAAK;IAAO,QAAO;IAAU,gBAAa;GACzE,CAAA,GAAA,mBAWE,UAAA;IAVC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;IACb,IAAG;IACH,IAAG;IACC;IACJ,MAAK;IACJ,QAAQ,OAAA;IACT,gBAAa;IACZ,oBAAkB,UAAA;IAClB,qBAAmB;IACnB,kBAAgB,WAAA,UAAU,IAAS,KAAA,IAAS;GAIjD,GAAA,MAAA,IAAA,UAAA,CAAA,CAAA,IAAA,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,gBAAA,CAAA,EAAA,GAChB,CAAA,WAA8D,KAAA,QAAA,WAAA,eAAA,mBAAA;IAAA,YAA9C,WAAA;IAAU,MAAE,KAAA;GAAI,CAAA,CAAA,SAA8B,CAAA,gBAAtB,gBAAA,WAAA,KAAU,IAAG,MAAE,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,EAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -1 +1 @@
1
- {"version":3,"file":"progress-nodes.js","names":[],"sources":["../../../src/components/progress-nodes/progress-nodes.vue"],"sourcesContent":["<template>\n <div ref=\"container\" :class=\"className\" :style=\"containerStyle\" @scroll=\"checkScroll\">\n <ul :class=\"cls.e('list')\">\n <li\n v-for=\"(node, index) in nodes\"\n :key=\"node.key ?? index\"\n :class=\"[\n cls.e('item'),\n bem.is('checked', isChecked(node, index)),\n bem.is('active', isActive(node))\n ]\"\n @click=\"handleClick(node, index)\"\n >\n <div :class=\"cls.e('node')\">\n <!-- 虚线连接 -->\n <div v-if=\"index !== nodes.length - 1\" :class=\"cls.e('link')\"></div>\n\n <!-- 节点圆点 -->\n <span :class=\"cls.e('dot')\">\n <slot name=\"icon\" :node=\"node\" :index=\"index\" />\n </span>\n </div>\n\n <div :class=\"cls.e('label')\">\n <slot :node=\"node\" :index=\"index\">\n {{ getLabel(node) }}\n </slot>\n </div>\n </li>\n </ul>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o } from '@cat-kit/core'\nimport { useDrag, useResizeObserver } from '@veltra/compositions'\nimport { bem, fieldKey } from '@veltra/utils'\nimport { computed, shallowRef, toRefs, useTemplateRef, watch, nextTick } from 'vue'\n\nimport type { ProgressNodesProps, ProgressNodesEmits } from '../../types'\n\ndefineOptions({ name: 'UProgressNodes' })\n\nconst props = withDefaults(defineProps<ProgressNodesProps>(), {\n colorType: 'primary',\n labelKey: 'label',\n valueKey: 'value'\n})\n\nconst emit = defineEmits<ProgressNodesEmits>()\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { nodes } = toRefs(props)\n\nconst cls = bem('progress-nodes')\nconst containerRef = useTemplateRef('container')\nconst isDragging = shallowRef(false)\nconst isScrollable = shallowRef(false)\nconst showMaskStart = shallowRef(false)\nconst showMaskEnd = shallowRef(false)\n\nconst className = computed(() => [\n cls.b,\n cls.m(props.colorType),\n bem.is('scrollable', isScrollable.value),\n bem.is('dragging', isDragging.value),\n bem.is('mask-start', showMaskStart.value),\n bem.is('mask-end', showMaskEnd.value)\n])\n\nconst containerStyle = computed(() => {\n const style: Record<string, string> = {}\n const maxWidth = toCssSize(props.maxWidth)\n if (maxWidth) style.maxWidth = maxWidth\n return style\n})\n\nlet startScrollLeft = 0\n\nuseDrag({\n target: containerRef,\n onDragStart() {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n isDragging.value = true\n startScrollLeft = container.scrollLeft\n },\n onDrag({ x }) {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n container.scrollLeft = startScrollLeft - x\n },\n onDragEnd() {\n isDragging.value = false\n }\n})\n\nuseResizeObserver({ targets: containerRef, onResize: checkScroll })\n\nwatch(\n nodes,\n () => {\n nextTick(checkScroll)\n },\n { deep: true }\n)\n\nfunction checkScroll() {\n const container = containerRef.value\n if (!container) return\n\n const { scrollLeft, scrollWidth, clientWidth } = container\n isScrollable.value = scrollWidth > clientWidth + 1\n showMaskStart.value = scrollLeft > 0\n showMaskEnd.value = scrollLeft + clientWidth < scrollWidth - 1\n}\n\nfunction isChecked(node: Record<string, any>, index: number) {\n return props.check?.(node, index) ?? false\n}\n\nfunction isActive(node: Record<string, any>) {\n const value = o(node).get(valueKey.value)\n return props.modelValue === value\n}\n\nfunction getLabel(node: Record<string, any>) {\n return o(node).get(labelKey.value)\n}\n\nfunction handleClick(node: Record<string, any>, index: number) {\n const value = o(node).get(valueKey.value)\n emit('update:modelValue', value)\n emit('click', node, index)\n}\n\nfunction toCssSize(value?: number | string) {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"progress-nodes.js","names":[],"sources":["../../../src/components/progress-nodes/progress-nodes.vue"],"sourcesContent":["<template>\n <div ref=\"container\" :class=\"className\" :style=\"containerStyle\" @scroll=\"checkScroll\">\n <ul :class=\"cls.e('list')\">\n <li\n v-for=\"(node, index) in nodes\"\n :key=\"node.key ?? index\"\n :class=\"[\n cls.e('item'),\n bem.is('checked', isChecked(node, index)),\n bem.is('active', isActive(node))\n ]\"\n @click=\"handleClick(node, index)\"\n >\n <div :class=\"cls.e('node')\">\n <!-- 虚线连接 -->\n <div v-if=\"index !== nodes.length - 1\" :class=\"cls.e('link')\"></div>\n\n <!-- 节点圆点 -->\n <span :class=\"cls.e('dot')\">\n <slot name=\"icon\" :node=\"node\" :index=\"index\" />\n </span>\n </div>\n\n <div :class=\"cls.e('label')\">\n <slot :node=\"node\" :index=\"index\">\n {{ getLabel(node) }}\n </slot>\n </div>\n </li>\n </ul>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o } from '@cat-kit/core'\nimport { useDrag, useResizeObserver } from '@veltra/compositions'\nimport { bem, fieldKey } from '@veltra/utils'\nimport { computed, shallowRef, toRefs, useTemplateRef, watch, nextTick } from 'vue'\n\nimport type { ProgressNodesProps, ProgressNodesEmits } from '../../types'\n\ndefineOptions({ name: 'UProgressNodes' })\n\nconst props = withDefaults(defineProps<ProgressNodesProps>(), {\n colorType: 'primary',\n labelKey: 'label',\n valueKey: 'value'\n})\n\nconst emit = defineEmits<ProgressNodesEmits>()\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { nodes } = toRefs(props)\n\nconst cls = bem('progress-nodes')\nconst containerRef = useTemplateRef('container')\nconst isDragging = shallowRef(false)\nconst isScrollable = shallowRef(false)\nconst showMaskStart = shallowRef(false)\nconst showMaskEnd = shallowRef(false)\n\nconst className = computed(() => [\n cls.b,\n cls.m(props.colorType),\n bem.is('scrollable', isScrollable.value),\n bem.is('dragging', isDragging.value),\n bem.is('mask-start', showMaskStart.value),\n bem.is('mask-end', showMaskEnd.value)\n])\n\nconst containerStyle = computed(() => {\n const style: Record<string, string> = {}\n const maxWidth = toCssSize(props.maxWidth)\n if (maxWidth) style.maxWidth = maxWidth\n return style\n})\n\nlet startScrollLeft = 0\n\nuseDrag({\n target: containerRef,\n onDragStart() {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n isDragging.value = true\n startScrollLeft = container.scrollLeft\n },\n onDrag({ x }) {\n if (!isScrollable.value) return\n const container = containerRef.value\n if (!container) return\n container.scrollLeft = startScrollLeft - x\n },\n onDragEnd() {\n isDragging.value = false\n }\n})\n\nuseResizeObserver({ targets: containerRef, onResize: checkScroll })\n\nwatch(\n nodes,\n () => {\n nextTick(checkScroll)\n },\n { deep: true }\n)\n\nfunction checkScroll() {\n const container = containerRef.value\n if (!container) return\n\n const { scrollLeft, scrollWidth, clientWidth } = container\n isScrollable.value = scrollWidth > clientWidth + 1\n showMaskStart.value = scrollLeft > 0\n showMaskEnd.value = scrollLeft + clientWidth < scrollWidth - 1\n}\n\nfunction isChecked(node: Record<string, any>, index: number) {\n return props.check?.(node, index) ?? false\n}\n\nfunction isActive(node: Record<string, any>) {\n const value = o(node).get(valueKey.value)\n return props.modelValue === value\n}\n\nfunction getLabel(node: Record<string, any>) {\n return o(node).get(labelKey.value)\n}\n\nfunction handleClick(node: Record<string, any>, index: number) {\n const value = o(node).get(valueKey.value)\n emit('update:modelValue', value)\n emit('click', node, index)\n}\n\nfunction toCssSize(value?: number | string) {\n if (value === undefined) return undefined\n return typeof value === 'number' ? `${value}px` : value\n}\n</script>\n"],"mappings":"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"}