@veltra/desktop 1.3.10 → 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 (451) 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 +34 -11
  41. package/dist/components/collapse/collapse-item.js.map +1 -1
  42. package/dist/components/collapse/collapse.js.map +1 -1
  43. package/dist/components/collapse/style.d.ts +1 -1
  44. package/dist/components/collapse/style2.css +29 -51
  45. package/dist/components/condition-editor/components/condition-group.js.map +1 -1
  46. package/dist/components/condition-editor/components/condition-row.js.map +1 -1
  47. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  48. package/dist/components/condition-editor/index.d.ts +2 -2
  49. package/dist/components/contextmenu/contextmenu-item.js +13 -6
  50. package/dist/components/contextmenu/contextmenu-item.js.map +1 -1
  51. package/dist/components/contextmenu/contextmenu-panel.js +12 -6
  52. package/dist/components/contextmenu/contextmenu-panel.js.map +1 -1
  53. package/dist/components/contextmenu/contextmenu-sub.js.map +1 -1
  54. package/dist/components/contextmenu/contextmenu.js.map +1 -1
  55. package/dist/components/contextmenu/di.d.ts +15 -0
  56. package/dist/components/contextmenu/index.d.ts +3 -2
  57. package/dist/components/contextmenu/style2.css +13 -0
  58. package/dist/components/date-panel/date-panel.js.map +1 -1
  59. package/dist/components/date-panel/headers/day.js.map +1 -1
  60. package/dist/components/date-panel/headers/month.js.map +1 -1
  61. package/dist/components/date-panel/headers/year.js.map +1 -1
  62. package/dist/components/date-panel/panels/day.js.map +1 -1
  63. package/dist/components/date-panel/panels/month.js.map +1 -1
  64. package/dist/components/date-panel/panels/year.js.map +1 -1
  65. package/dist/components/date-panel/style.d.ts +1 -1
  66. package/dist/components/date-picker/date-picker.js.map +1 -1
  67. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  68. package/dist/components/dialog/dialog.js.map +1 -1
  69. package/dist/components/drawer/drawer.js.map +1 -1
  70. package/dist/components/dropdown/dropdown.js.map +1 -1
  71. package/dist/components/dual-nav/dual-nav-app.js.map +1 -1
  72. package/dist/components/dual-nav/dual-nav.js.map +1 -1
  73. package/dist/components/empty/empty.js.map +1 -1
  74. package/dist/components/empty/style.d.ts +1 -1
  75. package/dist/components/expression-editor/components/path-preview.js.map +1 -1
  76. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  77. package/dist/components/expression-editor/core/editor.js.map +1 -1
  78. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  79. package/dist/components/expression-editor/style.d.ts +1 -1
  80. package/dist/components/file-picker/file-picker.js.map +1 -1
  81. package/dist/components/file-picker/style.d.ts +1 -1
  82. package/dist/components/file-viewer/file-viewer.js.map +1 -1
  83. package/dist/components/file-viewer/helper.js +1 -38
  84. package/dist/components/file-viewer/helper.js.map +1 -1
  85. package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
  86. package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
  87. package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
  88. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  89. package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
  90. package/dist/components/file-viewer/previewers/sheet-previewer.js +68 -37
  91. package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
  92. package/dist/components/file-viewer/previewers/text-previewer.js +2 -2
  93. package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -1
  94. package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
  95. package/dist/components/file-viewer/style.d.ts +1 -1
  96. package/dist/components/float-button/float-button.js.map +1 -1
  97. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/components/form/style.d.ts +1 -1
  99. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  100. package/dist/components/form-item/style.d.ts +1 -1
  101. package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
  102. package/dist/components/gantt-chart/style.d.ts +1 -1
  103. package/dist/components/grid/grid-item.js.map +1 -1
  104. package/dist/components/grid/grid.js +3 -2
  105. package/dist/components/grid/grid.js.map +1 -1
  106. package/dist/components/grid/style.d.ts +1 -1
  107. package/dist/components/grid-input/grid-input.js.map +1 -1
  108. package/dist/components/grid-input/style.d.ts +1 -1
  109. package/dist/components/group-input/group-input.js.map +1 -1
  110. package/dist/components/group-nav/group-nav-item.js.map +1 -1
  111. package/dist/components/group-nav/group-nav.js.map +1 -1
  112. package/dist/components/group-nav/style.d.ts +1 -1
  113. package/dist/components/icon/icon.js.map +1 -1
  114. package/dist/components/icon/style.d.ts +1 -1
  115. package/dist/components/index.d.ts +91 -156
  116. package/dist/components/index.js +4 -1
  117. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/components/kbd/kbd.js.map +1 -1
  119. package/dist/components/kbd/style.d.ts +1 -1
  120. package/dist/components/layout/layout-resizer.js.map +1 -1
  121. package/dist/components/layout/layout.js.map +1 -1
  122. package/dist/components/layout/style.d.ts +1 -1
  123. package/dist/components/list/list-item.js.map +1 -1
  124. package/dist/components/list/list.js.map +1 -1
  125. package/dist/components/loading/directive.js +2 -1
  126. package/dist/components/loading/directive.js.map +1 -1
  127. package/dist/components/loading/index.d.ts +2 -2
  128. package/dist/components/loading/loading.js.map +1 -1
  129. package/dist/components/message/index.d.ts +2 -2
  130. package/dist/components/message/message-box.js.map +1 -1
  131. package/dist/components/message/message.js.map +1 -1
  132. package/dist/components/message/style.d.ts +1 -1
  133. package/dist/components/message-confirm/index.d.ts +2 -2
  134. package/dist/components/message-confirm/message-confirm-box.js.map +1 -1
  135. package/dist/components/message-confirm/message-confirm.js.map +1 -1
  136. package/dist/components/message-confirm/style.d.ts +1 -1
  137. package/dist/components/message-confirm/style2.css +18 -0
  138. package/dist/components/multi-select/multi-select-option.js.map +1 -1
  139. package/dist/components/multi-select/multi-select.js +6 -3
  140. package/dist/components/multi-select/multi-select.js.map +1 -1
  141. package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
  142. package/dist/components/nav/nav-icon.js.map +1 -1
  143. package/dist/components/nav/nav-item-collapsed.js.map +1 -1
  144. package/dist/components/nav/nav-item.js +4 -2
  145. package/dist/components/nav/nav-item.js.map +1 -1
  146. package/dist/components/nav/nav-sub-collapsed.js.map +1 -1
  147. package/dist/components/nav/nav-sub.js.map +1 -1
  148. package/dist/components/nav/nav.js.map +1 -1
  149. package/dist/components/nav/style.d.ts +1 -1
  150. package/dist/components/node-render/style.d.ts +1 -1
  151. package/dist/components/notification/index.d.ts +2 -2
  152. package/dist/components/notification/notification-box.js +2 -2
  153. package/dist/components/notification/notification-box.js.map +1 -1
  154. package/dist/components/notification/notification.js.map +1 -1
  155. package/dist/components/notification/style.d.ts +1 -1
  156. package/dist/components/number/number.js.map +1 -1
  157. package/dist/components/number/style.d.ts +1 -1
  158. package/dist/components/number-input/number-input.js +2 -1
  159. package/dist/components/number-input/number-input.js.map +1 -1
  160. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  161. package/dist/components/paginator/paginator.js.map +1 -1
  162. package/dist/components/palette/palette-alpha.js.map +1 -1
  163. package/dist/components/palette/palette-color-switch.js.map +1 -1
  164. package/dist/components/palette/palette-hue.js.map +1 -1
  165. package/dist/components/palette/palette-sv.js.map +1 -1
  166. package/dist/components/palette/palette.js.map +1 -1
  167. package/dist/components/password-input/password-input.js.map +1 -1
  168. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  169. package/dist/components/progress/progress.js.map +1 -1
  170. package/dist/components/progress/style.d.ts +1 -1
  171. package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
  172. package/dist/components/progress-nodes/style.d.ts +1 -1
  173. package/dist/components/radio/radio.js.map +1 -1
  174. package/dist/components/radio-group/radio-group.js.map +1 -1
  175. package/dist/components/rich-text-editor/rich-text-editor.js +2 -1
  176. package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
  177. package/dist/components/rich-text-editor/style.d.ts +1 -1
  178. package/dist/components/rich-text-editor/toolbar.js +3 -4
  179. package/dist/components/rich-text-editor/toolbar.js.map +1 -1
  180. package/dist/components/scroll/scroll-bar.js.map +1 -1
  181. package/dist/components/scroll/scroll.js.map +1 -1
  182. package/dist/components/scroll/style.d.ts +1 -1
  183. package/dist/components/select/select.js.map +1 -1
  184. package/dist/components/slider/slider-thumb.js.map +1 -1
  185. package/dist/components/slider/slider.js.map +1 -1
  186. package/dist/components/slider/style.d.ts +1 -1
  187. package/dist/components/steps/steps.js.map +1 -1
  188. package/dist/components/steps/style.d.ts +1 -1
  189. package/dist/components/steps/style2.css +14 -14
  190. package/dist/components/switch/style.d.ts +1 -1
  191. package/dist/components/switch/switch.js.map +1 -1
  192. package/dist/components/table/index.d.ts +2 -2
  193. package/dist/components/table/node/col.d.ts +1 -49
  194. package/dist/components/table/table-body.js.map +1 -1
  195. package/dist/components/table/table-cell.js.map +1 -1
  196. package/dist/components/table/table-foot.js.map +1 -1
  197. package/dist/components/table/table-row.js +2 -1
  198. package/dist/components/table/table-row.js.map +1 -1
  199. package/dist/components/table/table.js.map +1 -1
  200. package/dist/components/table/use-check.js +2 -1
  201. package/dist/components/table/use-check.js.map +1 -1
  202. package/dist/components/table/use-columns.d.ts +1 -1
  203. package/dist/components/table/use-rows.js +2 -1
  204. package/dist/components/table/use-rows.js.map +1 -1
  205. package/dist/components/table-editor/table-editor.js.map +1 -1
  206. package/dist/components/tabs/tabs-horizontal.js +2 -1
  207. package/dist/components/tabs/tabs-horizontal.js.map +1 -1
  208. package/dist/components/tabs/tabs-vertical.js.map +1 -1
  209. package/dist/components/tabs/tabs.js.map +1 -1
  210. package/dist/components/tabs/use-tabs-bar.js +10 -25
  211. package/dist/components/tabs/use-tabs-bar.js.map +1 -1
  212. package/dist/components/tag/style.d.ts +1 -1
  213. package/dist/components/tag/tag.js.map +1 -1
  214. package/dist/components/text/style.d.ts +1 -1
  215. package/dist/components/text/text.js.map +1 -1
  216. package/dist/components/textarea/textarea.js.map +1 -1
  217. package/dist/components/theme/theme.js +3 -2
  218. package/dist/components/theme/theme.js.map +1 -1
  219. package/dist/components/tip/style.d.ts +1 -1
  220. package/dist/components/tip/tip.js.map +1 -1
  221. package/dist/components/tree/tree-node.js.map +1 -1
  222. package/dist/components/tree/tree.js.map +1 -1
  223. package/dist/components/tree-select/tree-select.js.map +1 -1
  224. package/dist/components/watermark/style.d.ts +1 -1
  225. package/dist/components/watermark/watermark.js.map +1 -1
  226. package/dist/index.d.ts +93 -97
  227. package/dist/index.js +2 -1
  228. package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js +2 -2
  229. package/dist/node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js.map +1 -1
  230. package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js +3 -3
  231. package/dist/node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js.map +1 -1
  232. package/dist/node_modules/.bun/@codemirror_lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js.map +1 -1
  233. package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js +5 -4
  234. package/dist/node_modules/.bun/@codemirror_lang-html@6.4.11/node_modules/@codemirror/lang-html/dist/index.js.map +1 -1
  235. package/dist/node_modules/.bun/@codemirror_lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js +2 -2
  236. 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
  237. package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.2/node_modules/@codemirror/lang-markdown/dist/index.js.map +1 -0
  238. package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js +2 -1
  239. package/dist/node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js.map +1 -1
  240. package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js +2 -2
  241. package/dist/node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js.map +1 -1
  242. package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js +4 -3
  243. package/dist/node_modules/.bun/@codemirror_lint@6.9.7/node_modules/@codemirror/lint/dist/index.js.map +1 -1
  244. package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js +2 -2
  245. package/dist/node_modules/.bun/@codemirror_search@6.7.1/node_modules/@codemirror/search/dist/index.js.map +1 -1
  246. package/dist/node_modules/.bun/{@codemirror_state@6.7.0 → @codemirror_state@6.7.1}/node_modules/@codemirror/state/dist/index.js +13 -3
  247. package/dist/node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js.map +1 -0
  248. package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js +1 -1
  249. package/dist/node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js.map +1 -1
  250. package/dist/node_modules/.bun/{@codemirror_view@6.43.4 → @codemirror_view@6.43.8}/node_modules/@codemirror/view/dist/index.js +86 -64
  251. package/dist/node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js.map +1 -0
  252. package/dist/node_modules/.bun/@lezer_common@1.5.2/node_modules/@lezer/common/dist/index.js.map +1 -1
  253. package/dist/node_modules/.bun/@lezer_css@1.3.4/node_modules/@lezer/css/dist/index.js.map +1 -1
  254. package/dist/node_modules/.bun/@lezer_highlight@1.2.3/node_modules/@lezer/highlight/dist/index.js.map +1 -1
  255. package/dist/node_modules/.bun/@lezer_html@1.3.13/node_modules/@lezer/html/dist/index.js.map +1 -1
  256. package/dist/node_modules/.bun/@lezer_javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js.map +1 -1
  257. package/dist/node_modules/.bun/@lezer_lr@1.4.10/node_modules/@lezer/lr/dist/index.js.map +1 -1
  258. package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js +1 -1
  259. package/dist/node_modules/.bun/@lezer_markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js.map +1 -1
  260. package/dist/node_modules/.bun/@marijn_find-cluster-break@1.0.2/node_modules/@marijn/find-cluster-break/src/index.js.map +1 -1
  261. package/dist/node_modules/.bun/style-mod@4.1.3/node_modules/style-mod/src/style-mod.js.map +1 -1
  262. package/dist/types/collapse.d.ts +23 -4
  263. package/dist/types/contextmenu.d.ts +10 -4
  264. package/dist/types/index.d.ts +2 -8
  265. package/package.json +34 -30
  266. package/src/components/batch-edit/__test__/batch-edit.test.ts +199 -0
  267. package/src/components/batch-edit/batch-edit-form.vue +8 -8
  268. package/src/components/batch-edit/batch-edit.vue +2 -1
  269. package/src/components/batch-edit/di.ts +2 -0
  270. package/src/components/batch-edit/use-edit-state.ts +19 -12
  271. package/src/components/collapse/__test__/collapse.test.ts +178 -1
  272. package/src/components/collapse/collapse-item.vue +40 -12
  273. package/src/components/collapse/style.scss +26 -62
  274. package/src/components/contextmenu/__test__/contextmenu.test.ts +165 -0
  275. package/src/components/contextmenu/contextmenu-item.vue +7 -4
  276. package/src/components/contextmenu/contextmenu-panel.vue +7 -4
  277. package/src/components/contextmenu/index.ts +1 -0
  278. package/src/components/contextmenu/style.scss +16 -0
  279. package/src/components/file-viewer/helper.ts +0 -53
  280. package/src/components/file-viewer/previewers/sheet-previewer.vue +91 -46
  281. package/src/components/message-confirm/style.scss +19 -0
  282. package/src/components/notification/style.scss +16 -4
  283. package/src/components/radio-group/style.scss +1 -1
  284. package/src/components/slider/style.scss +1 -1
  285. package/src/components/steps/style.scss +2 -2
  286. package/src/components/tabs/use-tabs-bar.ts +15 -20
  287. package/src/types/collapse.ts +25 -3
  288. package/src/types/contextmenu.ts +10 -4
  289. package/dist/components/action/action-group.vue.d.ts +0 -25
  290. package/dist/components/action/action.vue.d.ts +0 -33
  291. package/dist/components/action/index.d.ts +0 -3
  292. package/dist/components/auto-complete/auto-complete.vue.d.ts +0 -41
  293. package/dist/components/auto-complete/index.d.ts +0 -2
  294. package/dist/components/badge/badge.vue.d.ts +0 -20
  295. package/dist/components/badge/index.d.ts +0 -2
  296. package/dist/components/batch-edit/batch-edit.vue.d.ts +0 -45
  297. package/dist/components/breadcrumb/breadcrumb.vue.d.ts +0 -24
  298. package/dist/components/breadcrumb/index.d.ts +0 -2
  299. package/dist/components/button/button-group.vue.d.ts +0 -19
  300. package/dist/components/button/button.vue.d.ts +0 -27
  301. package/dist/components/button/index.d.ts +0 -3
  302. package/dist/components/calendar/calendar.vue.d.ts +0 -17
  303. package/dist/components/calendar/index.d.ts +0 -2
  304. package/dist/components/card/card-action.vue.d.ts +0 -18
  305. package/dist/components/card/card-content.vue.d.ts +0 -18
  306. package/dist/components/card/card-cover.vue.d.ts +0 -8
  307. package/dist/components/card/card-header.vue.d.ts +0 -16
  308. package/dist/components/card/card.vue.d.ts +0 -18
  309. package/dist/components/card/index.d.ts +0 -6
  310. package/dist/components/cascade/cascade.vue.d.ts +0 -31
  311. package/dist/components/cascade/index.d.ts +0 -2
  312. package/dist/components/check-tag/check-tag.vue.d.ts +0 -22
  313. package/dist/components/check-tag/index.d.ts +0 -2
  314. package/dist/components/checkbox/checkbox-button.vue.d.ts +0 -35
  315. package/dist/components/checkbox/checkbox.vue.d.ts +0 -34
  316. package/dist/components/checkbox/index.d.ts +0 -3
  317. package/dist/components/checkbox-group/checkbox-group.vue.d.ts +0 -24
  318. package/dist/components/checkbox-group/index.d.ts +0 -2
  319. package/dist/components/code-editor/code-editor.vue.d.ts +0 -30
  320. package/dist/components/code-editor/index.d.ts +0 -2
  321. package/dist/components/collapse/collapse-item.vue.d.ts +0 -24
  322. package/dist/components/collapse/collapse.vue.d.ts +0 -27
  323. package/dist/components/collapse/index.d.ts +0 -3
  324. package/dist/components/condition-editor/condition-editor.vue.d.ts +0 -15
  325. package/dist/components/contextmenu/contextmenu.vue.d.ts +0 -14
  326. package/dist/components/date-panel/date-panel.vue.d.ts +0 -17
  327. package/dist/components/date-panel/index.d.ts +0 -2
  328. package/dist/components/date-picker/date-picker.vue.d.ts +0 -18
  329. package/dist/components/date-picker/index.d.ts +0 -2
  330. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +0 -18
  331. package/dist/components/date-range-picker/index.d.ts +0 -2
  332. package/dist/components/dialog/dialog.vue.d.ts +0 -43
  333. package/dist/components/dialog/index.d.ts +0 -2
  334. package/dist/components/drawer/drawer.vue.d.ts +0 -36
  335. package/dist/components/drawer/index.d.ts +0 -2
  336. package/dist/components/dropdown/dropdown.vue.d.ts +0 -30
  337. package/dist/components/dropdown/index.d.ts +0 -2
  338. package/dist/components/dual-nav/dual-nav.vue.d.ts +0 -15
  339. package/dist/components/dual-nav/index.d.ts +0 -2
  340. package/dist/components/empty/empty.vue.d.ts +0 -11
  341. package/dist/components/empty/index.d.ts +0 -2
  342. package/dist/components/expression-editor/expression-editor.vue.d.ts +0 -16
  343. package/dist/components/expression-editor/index.d.ts +0 -2
  344. package/dist/components/file-picker/file-picker.vue.d.ts +0 -27
  345. package/dist/components/file-picker/index.d.ts +0 -2
  346. package/dist/components/file-viewer/file-viewer.vue.d.ts +0 -40
  347. package/dist/components/file-viewer/index.d.ts +0 -2
  348. package/dist/components/file-viewer/sheet-parser.js +0 -46
  349. package/dist/components/file-viewer/sheet-parser.js.map +0 -1
  350. package/dist/components/float-button/float-button.vue.d.ts +0 -12
  351. package/dist/components/float-button/index.d.ts +0 -2
  352. package/dist/components/form/form.vue.d.ts +0 -23
  353. package/dist/components/form/index.d.ts +0 -2
  354. package/dist/components/form-item/form-item.vue.d.ts +0 -21
  355. package/dist/components/form-item/index.d.ts +0 -2
  356. package/dist/components/gantt-chart/gantt-chart.vue.d.ts +0 -8
  357. package/dist/components/gantt-chart/index.d.ts +0 -2
  358. package/dist/components/grid/grid-item.vue.d.ts +0 -20
  359. package/dist/components/grid/grid.vue.d.ts +0 -27
  360. package/dist/components/grid/index.d.ts +0 -3
  361. package/dist/components/grid-input/grid-input.vue.d.ts +0 -19
  362. package/dist/components/grid-input/index.d.ts +0 -2
  363. package/dist/components/group-input/group-input.vue.d.ts +0 -26
  364. package/dist/components/group-input/index.d.ts +0 -2
  365. package/dist/components/group-nav/group-nav.vue.d.ts +0 -12
  366. package/dist/components/group-nav/index.d.ts +0 -2
  367. package/dist/components/icon/icon.vue.d.ts +0 -18
  368. package/dist/components/icon/index.d.ts +0 -2
  369. package/dist/components/input/index.d.ts +0 -2
  370. package/dist/components/input/input.vue.d.ts +0 -50
  371. package/dist/components/kbd/kbd.vue.d.ts +0 -16
  372. package/dist/components/layout/index.d.ts +0 -2
  373. package/dist/components/layout/layout.vue.d.ts +0 -20
  374. package/dist/components/list/index.d.ts +0 -3
  375. package/dist/components/list/list-item.vue.d.ts +0 -16
  376. package/dist/components/list/list.vue.d.ts +0 -21
  377. package/dist/components/loading/loading.vue.d.ts +0 -11
  378. package/dist/components/message/message.vue.d.ts +0 -16
  379. package/dist/components/message-confirm/message-confirm.vue.d.ts +0 -19
  380. package/dist/components/multi-select/index.d.ts +0 -2
  381. package/dist/components/multi-select/multi-select.vue.d.ts +0 -48
  382. package/dist/components/multi-tree-select/index.d.ts +0 -2
  383. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +0 -44
  384. package/dist/components/nav/index.d.ts +0 -4
  385. package/dist/components/nav/nav-item.vue.d.ts +0 -12
  386. package/dist/components/nav/nav-sub.vue.d.ts +0 -13
  387. package/dist/components/nav/nav.vue.d.ts +0 -19
  388. package/dist/components/notification/notification.vue.d.ts +0 -18
  389. package/dist/components/number/index.d.ts +0 -2
  390. package/dist/components/number/number.vue.d.ts +0 -11
  391. package/dist/components/number-input/index.d.ts +0 -2
  392. package/dist/components/number-input/number-input.vue.d.ts +0 -39
  393. package/dist/components/number-range-input/index.d.ts +0 -2
  394. package/dist/components/number-range-input/number-range-input.vue.d.ts +0 -36
  395. package/dist/components/paginator/index.d.ts +0 -2
  396. package/dist/components/paginator/paginator.vue.d.ts +0 -29
  397. package/dist/components/palette/index.d.ts +0 -2
  398. package/dist/components/palette/palette.vue.d.ts +0 -20
  399. package/dist/components/password-input/index.d.ts +0 -2
  400. package/dist/components/password-input/password-input.vue.d.ts +0 -30
  401. package/dist/components/pop-confirm/index.d.ts +0 -2
  402. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +0 -33
  403. package/dist/components/progress/index.d.ts +0 -2
  404. package/dist/components/progress/progress.vue.d.ts +0 -25
  405. package/dist/components/progress-nodes/index.d.ts +0 -2
  406. package/dist/components/progress-nodes/progress-nodes.vue.d.ts +0 -36
  407. package/dist/components/radio/index.d.ts +0 -2
  408. package/dist/components/radio/radio.vue.d.ts +0 -31
  409. package/dist/components/radio-group/index.d.ts +0 -2
  410. package/dist/components/radio-group/radio-group.vue.d.ts +0 -26
  411. package/dist/components/rich-text-editor/index.d.ts +0 -2
  412. package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +0 -23
  413. package/dist/components/scroll/index.d.ts +0 -2
  414. package/dist/components/scroll/scroll.vue.d.ts +0 -28
  415. package/dist/components/select/index.d.ts +0 -2
  416. package/dist/components/select/select.vue.d.ts +0 -38
  417. package/dist/components/slider/index.d.ts +0 -2
  418. package/dist/components/slider/slider.vue.d.ts +0 -21
  419. package/dist/components/steps/index.d.ts +0 -2
  420. package/dist/components/steps/steps.vue.d.ts +0 -29
  421. package/dist/components/switch/index.d.ts +0 -2
  422. package/dist/components/switch/switch.vue.d.ts +0 -24
  423. package/dist/components/table/node/row.d.ts +0 -49
  424. package/dist/components/table/table.vue.d.ts +0 -54
  425. package/dist/components/table-editor/index.d.ts +0 -2
  426. package/dist/components/table-editor/table-editor.vue.d.ts +0 -12
  427. package/dist/components/tabs/index.d.ts +0 -4
  428. package/dist/components/tabs/tabs-horizontal.vue.d.ts +0 -40
  429. package/dist/components/tabs/tabs-vertical.vue.d.ts +0 -39
  430. package/dist/components/tabs/tabs.vue.d.ts +0 -36
  431. package/dist/components/tag/index.d.ts +0 -2
  432. package/dist/components/tag/tag.vue.d.ts +0 -22
  433. package/dist/components/text/index.d.ts +0 -2
  434. package/dist/components/text/text.vue.d.ts +0 -10
  435. package/dist/components/textarea/index.d.ts +0 -2
  436. package/dist/components/textarea/textarea.vue.d.ts +0 -34
  437. package/dist/components/theme/index.d.ts +0 -2
  438. package/dist/components/theme/theme.vue.d.ts +0 -8
  439. package/dist/components/tip/index.d.ts +0 -2
  440. package/dist/components/tip/tip.vue.d.ts +0 -31
  441. package/dist/components/tree/di.d.ts +0 -12
  442. package/dist/components/tree/index.d.ts +0 -2
  443. package/dist/components/tree/tree.vue.d.ts +0 -40
  444. package/dist/components/tree-select/index.d.ts +0 -2
  445. package/dist/components/tree-select/tree-select.vue.d.ts +0 -48
  446. package/dist/components/watermark/index.d.ts +0 -2
  447. package/dist/components/watermark/watermark.vue.d.ts +0 -21
  448. package/dist/node_modules/.bun/@codemirror_lang-markdown@6.5.1/node_modules/@codemirror/lang-markdown/dist/index.js.map +0 -1
  449. package/dist/node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js.map +0 -1
  450. package/dist/node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js.map +0 -1
  451. package/src/components/file-viewer/sheet-parser.ts +0 -52
@@ -1 +1 @@
1
- {"version":3,"file":"card-header.js","names":[],"sources":["../../../src/components/card/card-header.vue"],"sourcesContent":["<template>\n <div :class=\"classList\">\n <slot> </slot>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\n\nimport { CardDIKey } from './di'\n\ndefineOptions({ name: 'UCardHeader' })\n\nconst injected = inject(CardDIKey)\nconst { cls } = injected || {}\n\nconst classList = computed(() => {\n const ret: string[] = []\n if (cls) {\n ret.push(cls.e('header'))\n }\n\n return ret\n})\n\nif (!injected) {\n console.warn('CardHeader组件仅能在Card组件中使用')\n}\n</script>\n"],"mappings":";;;;;;;EAaA,MAAM,WAAW,OAAO,SAAS;EACjC,MAAM,EAAE,QAAQ,YAAY,CAAC;EAE7B,MAAM,YAAY,eAAe;GAC/B,MAAM,MAAgB,CAAC;GACvB,IAAI,KACF,IAAI,KAAK,IAAI,EAAE,QAAQ,CAAC;GAG1B,OAAO;EACT,CAAC;EAED,IAAI,CAAC,UACH,QAAQ,KAAK,0BAA0B;;uBAzBvC,mBAEM,OAAA,EAFA,OAAK,eAAE,UAAA,KAAS,EAAA,GAAA,CACpB,WAAc,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"card-header.js","names":[],"sources":["../../../src/components/card/card-header.vue"],"sourcesContent":["<template>\n <div :class=\"classList\">\n <slot> </slot>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject } from 'vue'\n\nimport { CardDIKey } from './di'\n\ndefineOptions({ name: 'UCardHeader' })\n\nconst injected = inject(CardDIKey)\nconst { cls } = injected || {}\n\nconst classList = computed(() => {\n const ret: string[] = []\n if (cls) {\n ret.push(cls.e('header'))\n }\n\n return ret\n})\n\nif (!injected) {\n console.warn('CardHeader组件仅能在Card组件中使用')\n}\n</script>\n"],"mappings":";;;;;;;EAaA,MAAM,WAAW,OAAO,SAAS;EACjC,MAAM,EAAE,QAAQ,YAAY,CAAC;EAE7B,MAAM,YAAY,eAAe;GAC/B,MAAM,MAAgB,CAAC;GACvB,IAAI,KACF,IAAI,KAAK,IAAI,EAAE,QAAQ,CAAC;GAG1B,OAAO;EACT,CAAC;EAED,IAAI,CAAC,UACH,QAAQ,KAAK,0BAA0B;;GAzBvC,OAAA,UAAA,GAAA,mBAEM,OAAA,EAFA,OAAK,eAAE,UAAA,KAAS,EAAA,GACpB,CAAA,WAAc,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","names":[],"sources":["../../../src/components/card/card.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" :style=\"styles\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed, provide } from 'vue'\n\nimport type { CardProps } from '../../types'\nimport { CardDIKey } from './di'\n\ndefineOptions({ name: 'UCard' })\n\nconst props = defineProps<CardProps>()\n\nconst cls = bem('card')\n\nconst { size } = useFormFallbackProps([props], { size: 'default' })\n\nconst classList = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('integrate', props.integrate)]\n})\n\nconst styles = computed(() => {\n return { width: withUnit(props.width, 'px') }\n})\n\nprovide(CardDIKey, { cls, cardProps: props })\n</script>\n"],"mappings":";;;;;;;;;;;;;;EAgBA,MAAM,QAAQ;EAEd,MAAM,MAAM,IAAI,MAAM;EAEtB,MAAM,EAAE,SAAS,qBAAqB,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;EAElE,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,KAAK;IAAG,IAAI,GAAG,aAAa,MAAM,SAAS;GAAC;EACxE,CAAC;EAED,MAAM,SAAS,eAAe;GAC5B,OAAO,EAAE,OAAO,SAAS,MAAM,OAAO,IAAI,EAAE;EAC9C,CAAC;EAED,QAAQ,WAAW;GAAE;GAAK,WAAW;EAAM,CAAC;;uBA7B1C,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,KAAS;IAAG,OAAK,eAAE,OAAA,KAAM;OACpC,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"card.js","names":[],"sources":["../../../src/components/card/card.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" :style=\"styles\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, withUnit } from '@veltra/utils'\nimport { computed, provide } from 'vue'\n\nimport type { CardProps } from '../../types'\nimport { CardDIKey } from './di'\n\ndefineOptions({ name: 'UCard' })\n\nconst props = defineProps<CardProps>()\n\nconst cls = bem('card')\n\nconst { size } = useFormFallbackProps([props], { size: 'default' })\n\nconst classList = computed(() => {\n return [cls.b, cls.m(size.value), bem.is('integrate', props.integrate)]\n})\n\nconst styles = computed(() => {\n return { width: withUnit(props.width, 'px') }\n})\n\nprovide(CardDIKey, { cls, cardProps: props })\n</script>\n"],"mappings":";;;;;;;;;;;;;;EAgBA,MAAM,QAAQ;EAEd,MAAM,MAAM,IAAI,MAAM;EAEtB,MAAM,EAAE,SAAS,qBAAqB,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;EAElE,MAAM,YAAY,eAAe;GAC/B,OAAO;IAAC,IAAI;IAAG,IAAI,EAAE,KAAK,KAAK;IAAG,IAAI,GAAG,aAAa,MAAM,SAAS;GAAC;EACxE,CAAC;EAED,MAAM,SAAS,eAAe;GAC5B,OAAO,EAAE,OAAO,SAAS,MAAM,OAAO,IAAI,EAAE;EAC9C,CAAC;EAED,QAAQ,WAAW;GAAE;GAAK,WAAW;EAAM,CAAC;;GA7B1C,OAAA,UAAA,GAAA,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,KAAS;IAAG,OAAK,eAAE,OAAA,KAAM;GACpC,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -1 +1 @@
1
- {"version":3,"file":"cascade-panel-item.js","names":[],"sources":["../../../src/components/cascade/cascade-panel-item.vue"],"sourcesContent":["<template>\n <u-scroll\n tag=\"ul\"\n :class=\"panelCls.b\"\n ref=\"scroll-container\"\n :content-class=\"panelCls.e('content')\"\n >\n <li\n v-for=\"(node, index) of data\"\n :key=\"node.value ?? index\"\n ref=\"itemRefs\"\n :class=\"getItemCls(node)\"\n @click=\"emit('click', panelIndex, node)\"\n >\n <u-checkbox\n v-if=\"cascadeProps.multiple\"\n :class=\"panelCls.e('option-checkbox')\"\n :model-value=\"checkedSet.has(node)\"\n @update:model-value=\"emit('check', node, $event)\"\n />\n\n <span :class=\"panelCls.e('option-label')\">\n {{ node.label }}\n </span>\n\n <u-icon :class=\"panelCls.e('option-expand')\" v-if=\"node.children?.length\">\n <ArrowRight />\n </u-icon>\n </li>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem, scrollIntoContainerView } from '@veltra/utils'\nimport { inject, onMounted, shallowRef, useTemplateRef } from 'vue'\n\nimport type { CascadeNode } from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { CascadeDIKey } from './di'\n\ndefineOptions({ name: 'UCascadePanelItem' })\n\nconst props = defineProps<{ data: CascadeNode[]; value?: string; panelIndex: number }>()\n\nconst emit = defineEmits<{\n (e: 'click', panelIndex: number, item: CascadeNode): void\n (e: 'check', item: CascadeNode, checked: boolean): void\n}>()\n\nconst { cls, cascadeProps, checkedSet } = inject(CascadeDIKey)!\n\nconst panelCls = cls.create('panel-item')\n\nconst optionCls = panelCls.e('option')\n\nfunction getItemCls(item: CascadeNode) {\n const selected = props.value === item.value\n return [\n optionCls,\n bem.is('active', selected),\n bem.is('selected', selected && !cascadeProps.multiple)\n ]\n}\n\nconst itemRefs = shallowRef<HTMLElement[]>([])\nconst scrollContainerRef = useTemplateRef('scroll-container')\n\nonMounted(() => {\n const activeItem = itemRefs.value.find((el) => el.classList.contains(bem.is('active')))\n if (activeItem) {\n setTimeout(() => {\n scrollIntoContainerView(activeItem, scrollContainerRef.value?.containerRef ?? null)\n })\n }\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EA6CA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAKb,MAAM,EAAE,KAAK,cAAc,eAAe,OAAO,YAAY;EAE7D,MAAM,WAAW,IAAI,OAAO,YAAY;EAExC,MAAM,YAAY,SAAS,EAAE,QAAQ;EAErC,SAAS,WAAW,MAAmB;GACrC,MAAM,WAAW,MAAM,UAAU,KAAK;GACtC,OAAO;IACL;IACA,IAAI,GAAG,UAAU,QAAQ;IACzB,IAAI,GAAG,YAAY,YAAY,CAAC,aAAa,QAAQ;GACvD;EACF;EAEA,MAAM,WAAW,WAA0B,CAAC,CAAC;EAC7C,MAAM,qBAAqB,eAAe,kBAAkB;EAE5D,gBAAgB;GACd,MAAM,aAAa,SAAS,MAAM,MAAM,OAAO,GAAG,UAAU,SAAS,IAAI,GAAG,QAAQ,CAAC,CAAC;GACtF,IAAI,YACF,iBAAiB;IACf,wBAAwB,YAAY,mBAAmB,OAAO,gBAAgB,IAAI;GACpF,CAAC;EAEL,CAAC;;uBA5EC,YA4BW,MAAA,WAAA,GAAA;IA3BT,KAAI;IACH,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,CAAC;IAClB,KAAI;IACH,iBAAe,MAAA,QAAA,CAAQ,CAAC,EAAC,SAAA;;2BAGK,EAAA,UAAA,IAAA,GAD/B,mBAqBK,UAAA,MAAA,WApBqB,QAAA,OAAhB,MAAM,UAAK;yBADrB,mBAqBK,MAAA;MAnBF,KAAK,KAAK,SAAS;;eAChB;MAAJ,KAAI;MACH,OAAK,eAAE,WAAW,IAAI,CAAA;MACtB,UAAK,WAAE,KAAI,SAAU,QAAA,YAAY,IAAI;;MAG9B,MAAA,YAAA,CAAY,CAAC,YAAA,UAAA,GADrB,YAKE,MAAA,WAAA,GAAA;;OAHC,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,EAAC,iBAAA,CAAA;OACjB,eAAa,MAAA,UAAA,CAAU,CAAC,IAAI,IAAI;OAChC,wBAAkB,WAAE,KAAI,SAAU,MAAM,MAAM;;;;;;MAGjD,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,EAAC,cAAA,CAAA,EAAA,GAAA,gBACnB,KAAK,KAAK,GAAA,CAAA;MAGoC,KAAK,UAAU,UAAA,UAAA,GAAlE,YAES,MAAA,WAAA,GAAA;;OAFA,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,EAAC,eAAA,CAAA;;8BACV,CAAd,YAAc,MAAA,UAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"cascade-panel-item.js","names":[],"sources":["../../../src/components/cascade/cascade-panel-item.vue"],"sourcesContent":["<template>\n <u-scroll\n tag=\"ul\"\n :class=\"panelCls.b\"\n ref=\"scroll-container\"\n :content-class=\"panelCls.e('content')\"\n >\n <li\n v-for=\"(node, index) of data\"\n :key=\"node.value ?? index\"\n ref=\"itemRefs\"\n :class=\"getItemCls(node)\"\n @click=\"emit('click', panelIndex, node)\"\n >\n <u-checkbox\n v-if=\"cascadeProps.multiple\"\n :class=\"panelCls.e('option-checkbox')\"\n :model-value=\"checkedSet.has(node)\"\n @update:model-value=\"emit('check', node, $event)\"\n />\n\n <span :class=\"panelCls.e('option-label')\">\n {{ node.label }}\n </span>\n\n <u-icon :class=\"panelCls.e('option-expand')\" v-if=\"node.children?.length\">\n <ArrowRight />\n </u-icon>\n </li>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem, scrollIntoContainerView } from '@veltra/utils'\nimport { inject, onMounted, shallowRef, useTemplateRef } from 'vue'\n\nimport type { CascadeNode } from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UIcon } from '../icon'\nimport { UScroll } from '../scroll'\nimport { CascadeDIKey } from './di'\n\ndefineOptions({ name: 'UCascadePanelItem' })\n\nconst props = defineProps<{ data: CascadeNode[]; value?: string; panelIndex: number }>()\n\nconst emit = defineEmits<{\n (e: 'click', panelIndex: number, item: CascadeNode): void\n (e: 'check', item: CascadeNode, checked: boolean): void\n}>()\n\nconst { cls, cascadeProps, checkedSet } = inject(CascadeDIKey)!\n\nconst panelCls = cls.create('panel-item')\n\nconst optionCls = panelCls.e('option')\n\nfunction getItemCls(item: CascadeNode) {\n const selected = props.value === item.value\n return [\n optionCls,\n bem.is('active', selected),\n bem.is('selected', selected && !cascadeProps.multiple)\n ]\n}\n\nconst itemRefs = shallowRef<HTMLElement[]>([])\nconst scrollContainerRef = useTemplateRef('scroll-container')\n\nonMounted(() => {\n const activeItem = itemRefs.value.find((el) => el.classList.contains(bem.is('active')))\n if (activeItem) {\n setTimeout(() => {\n scrollIntoContainerView(activeItem, scrollContainerRef.value?.containerRef ?? null)\n })\n }\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EA6CA,MAAM,QAAQ;EAEd,MAAM,OAAO;EAKb,MAAM,EAAE,KAAK,cAAc,eAAe,OAAO,YAAY;EAE7D,MAAM,WAAW,IAAI,OAAO,YAAY;EAExC,MAAM,YAAY,SAAS,EAAE,QAAQ;EAErC,SAAS,WAAW,MAAmB;GACrC,MAAM,WAAW,MAAM,UAAU,KAAK;GACtC,OAAO;IACL;IACA,IAAI,GAAG,UAAU,QAAQ;IACzB,IAAI,GAAG,YAAY,YAAY,CAAC,aAAa,QAAQ;GACvD;EACF;EAEA,MAAM,WAAW,WAA0B,CAAC,CAAC;EAC7C,MAAM,qBAAqB,eAAe,kBAAkB;EAE5D,gBAAgB;GACd,MAAM,aAAa,SAAS,MAAM,MAAM,OAAO,GAAG,UAAU,SAAS,IAAI,GAAG,QAAQ,CAAC,CAAC;GACtF,IAAI,YACF,iBAAiB;IACf,wBAAwB,YAAY,mBAAmB,OAAO,gBAAgB,IAAI;GACpF,CAAC;EAEL,CAAC;;GA5EC,OAAA,UAAA,GAAA,YA4BW,MAAA,WAAA,GAAA;IA3BT,KAAI;IACH,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,CAAC;IAClB,KAAI;IACH,iBAAe,MAAA,QAAA,CAAQ,CAAC,EAAC,SAAA;;IAGK,SAAA,cAAA,EAAA,UAAA,IAAA,GAD/B,mBAqBK,UAAA,MAAA,WApBqB,QAAA,OAAhB,MAAM,UAAK;KADrB,OAAA,UAAA,GAAA,mBAqBK,MAAA;MAnBF,KAAK,KAAK,SAAS;;MAChB,SAAA;MAAJ,KAAI;MACH,OAAK,eAAE,WAAW,IAAI,CAAA;MACtB,UAAK,WAAE,KAAI,SAAU,QAAA,YAAY,IAAI;;MAG9B,MAAA,YAAA,CAAY,CAAC,YAAA,UAAA,GADrB,YAKE,MAAA,WAAA,GAAA;;OAHC,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,EAAC,iBAAA,CAAA;OACjB,eAAa,MAAA,UAAA,CAAU,CAAC,IAAI,IAAI;OAChC,wBAAkB,WAAE,KAAI,SAAU,MAAM,MAAM;;;;;;MAGjD,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,EAAC,cAAA,CAAA,EAAA,GACnB,gBAAA,KAAK,KAAK,GAAA,CAAA;MAGoC,KAAK,UAAU,UAAA,UAAA,GAAlE,YAES,MAAA,WAAA,GAAA;;OAFA,OAAK,eAAE,MAAA,QAAA,CAAQ,CAAC,EAAC,eAAA,CAAA;;OACV,SAAA,cAAA,CAAd,YAAc,MAAA,UAAA,CAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"cascade.js","names":["$attrs"],"sources":["../../../src/components/cascade/cascade.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"[\n cls.b,\n bem.is('disabled', disabled),\n bem.is('multiple', multiple),\n cls.m(size),\n bem.is('focus', multiple && dropdownVisible)\n ]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size)]\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :disabled=\"disabled\"\n width=\"auto\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n @update:visible=\"handleDropdownVisible\"\n >\n <template #trigger>\n <!-- 单选展示 -->\n <u-input\n v-if=\"!multiple\"\n :size=\"size\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :clearable=\"clearable\"\n native-readonly\n :model-value=\"displayedValue\"\n @clear=\"handleClear\"\n >\n <template #suffix>\n <u-icon :class=\"cls.e('arrow')\"><ArrowDown /></u-icon>\n </template>\n </u-input>\n\n <!-- 多选展示 -->\n <template v-if=\"multiple\">\n <span :class=\"cls.e('placeholder')\" v-show=\"!modelValue?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"modelValue?.length\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"tag of tags\"\n :key=\"tag.value\"\n :closable=\"!disabled\"\n @close=\"handleCloseTag(tag)\"\n >\n {{ tag.label }}\n </u-tag>\n <u-tag v-if=\"restTag\"> {{ restTag }}+ </u-tag>\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && modelValue?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n </template>\n\n <template #content>\n <!-- 过滤 -->\n <div v-if=\"filterable\" :class=\"cls.e('panel-filter')\">\n <u-input placeholder=\"输入关键字进行过滤\" v-model=\"qs\" :size=\"size\" clearable>\n <template #suffix>\n <u-icon><Search /></u-icon>\n </template>\n </u-input>\n </div>\n\n <div :class=\"cls.e('content')\" v-if=\"panelItemList.length\">\n <UCascadePanelItem\n v-for=\"({ nodes, key }, index) of panelItemList\"\n :data=\"nodes\"\n :key=\"key\"\n :panel-index=\"index\"\n :value=\"selectedNodeKeys[index]\"\n @click=\"handleClick\"\n @check=\"handleCheck\"\n />\n </div>\n\n <div :class=\"cls.e('empty')\" v-else>\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <!-- 只读 -->\n <template v-else>\n <div :class=\"[cls.m(size)]\" v-if=\"multiple\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of tags\" :key=\"tag.value\">\n {{ tag.label }}\n </u-tag>\n </div>\n </div>\n <template v-else>\n {{ displayedValue || FORM_EMPTY_CONTENT }}\n </template>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Forest, o } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { ArrowDown, Close, Search } from '@veltra/icons/normal'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, triggerRef, watch } from 'vue'\n\nimport type { CascadeProps, CascadeEmits, DropdownExposed } from '../../types'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\nimport { UTag } from '../tag'\nimport UCascadePanelItem from './cascade-panel-item.vue'\nimport { CascadeDIKey } from './di'\nimport { CascadeNode } from './node'\nimport { useCheck } from './use-check'\nimport { useDataMap } from './use-data-map'\nimport { useSelect } from './use-select'\n\ndefineOptions({ name: 'UCascade', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CascadeProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n separator: '/',\n clearable: true,\n disabled: undefined,\n readonly: undefined,\n childrenKey: 'children',\n filterable: false,\n data: () => [],\n visibilityLimit: 3,\n showFullPath: true\n})\n\nconst emit = defineEmits<CascadeEmits>()\n\nconst cls = bem('cascade')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst forest = computed(() => {\n return new Forest<Record<string, unknown>, any>({\n data: (props.data ?? []) as Record<string, unknown>[],\n childrenKey: props.childrenKey,\n createNode: (data, index, depth, _forest, parent) => {\n if (!data) {\n return new CascadeNode({ data, index, depth, value: '', label: '', parent })\n }\n\n return new CascadeNode({\n data,\n index,\n depth,\n value: o(data).get(valueKey.value) ?? '',\n label: o(data).get(labelKey.value) ?? '',\n parent\n })\n }\n })\n})\n\nconst { dataMap } = useDataMap({ props, forest })\n\nconst { userAction, isUserActive } = useUserAction()\n\nconst {\n displayedValue,\n selectItem,\n updateSingleValue,\n panelItemList,\n getPanelItemList,\n createPanelItem,\n selectedNodeKeys\n} = useSelect({ props, emit, dataMap, forest, isUserActive, dropdownRef })\n\nconst { hovered, tags, restTag, updateMultipleValue, handleCloseTag, checkItem, checkedSet } =\n useCheck({ props, forest, getPanelItemList, emit, dataMap, isUserActive, disabled, readonly })\n\nconst commitSingleSelect = userAction((item: CascadeNode) => {\n if (!props.strict) {\n updateSingleValue()\n } else if (!item.children?.length) {\n updateSingleValue()\n }\n})\n\nfunction handleClick(panelIndex: number, item: CascadeNode) {\n selectItem(panelIndex, item)\n\n if (!props.multiple) {\n commitSingleSelect(item)\n }\n}\n\nconst handleCheck = userAction((item: CascadeNode, checked: boolean) => {\n checkItem(item, checked)\n})\n\nfunction handleClear() {\n if (props.multiple) {\n checkedSet.value.clear()\n triggerRef(checkedSet)\n updateMultipleValue()\n } else {\n selectedNodeKeys.value = []\n updateSingleValue()\n }\n\n emit('clear')\n}\n\n// 过滤\nconst qs = shallowRef<string>('')\n\nconst dropdownVisible = shallowRef(false)\n\nconst handleDropdownVisible = (visible: boolean) => {\n dropdownVisible.value = visible\n if (!visible) qs.value = ''\n}\n\nwatch([qs, forest], ([qs, forest]) => {\n const { filterable } = props\n if (!filterable || !qs) {\n forest.dfs((node) => {\n node.visible = true\n })\n getPanelItemList(forest.roots)\n return\n }\n\n const cache = new Set<CascadeNode>()\n\n forest.dfs((node) => {\n if (node.label?.toLowerCase().includes(qs.toLowerCase())) {\n node.visible = true\n let parent = node.parent\n while (parent && !cache.has(parent)) {\n parent.visible = true\n cache.add(parent)\n parent = parent.parent\n }\n } else {\n node.visible = false\n }\n })\n\n panelItemList.value = [createPanelItem(forest.roots)]\n})\n\nprovide(CascadeDIKey, { cls, size, disabled, readonly, cascadeProps: props, checkedSet })\n</script>\n"],"mappings":"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"}
1
+ {"version":3,"file":"cascade.js","names":["$attrs"],"sources":["../../../src/components/cascade/cascade.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n v-bind=\"$attrs\"\n :class=\"[\n cls.b,\n bem.is('disabled', disabled),\n bem.is('multiple', multiple),\n cls.m(size),\n bem.is('focus', multiple && dropdownVisible)\n ]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size)]\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :disabled=\"disabled\"\n width=\"auto\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n @update:visible=\"handleDropdownVisible\"\n >\n <template #trigger>\n <!-- 单选展示 -->\n <u-input\n v-if=\"!multiple\"\n :size=\"size\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :clearable=\"clearable\"\n native-readonly\n :model-value=\"displayedValue\"\n @clear=\"handleClear\"\n >\n <template #suffix>\n <u-icon :class=\"cls.e('arrow')\"><ArrowDown /></u-icon>\n </template>\n </u-input>\n\n <!-- 多选展示 -->\n <template v-if=\"multiple\">\n <span :class=\"cls.e('placeholder')\" v-show=\"!modelValue?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"modelValue?.length\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"tag of tags\"\n :key=\"tag.value\"\n :closable=\"!disabled\"\n @close=\"handleCloseTag(tag)\"\n >\n {{ tag.label }}\n </u-tag>\n <u-tag v-if=\"restTag\"> {{ restTag }}+ </u-tag>\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && modelValue?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n </template>\n\n <template #content>\n <!-- 过滤 -->\n <div v-if=\"filterable\" :class=\"cls.e('panel-filter')\">\n <u-input placeholder=\"输入关键字进行过滤\" v-model=\"qs\" :size=\"size\" clearable>\n <template #suffix>\n <u-icon><Search /></u-icon>\n </template>\n </u-input>\n </div>\n\n <div :class=\"cls.e('content')\" v-if=\"panelItemList.length\">\n <UCascadePanelItem\n v-for=\"({ nodes, key }, index) of panelItemList\"\n :data=\"nodes\"\n :key=\"key\"\n :panel-index=\"index\"\n :value=\"selectedNodeKeys[index]\"\n @click=\"handleClick\"\n @check=\"handleCheck\"\n />\n </div>\n\n <div :class=\"cls.e('empty')\" v-else>\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <!-- 只读 -->\n <template v-else>\n <div :class=\"[cls.m(size)]\" v-if=\"multiple\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of tags\" :key=\"tag.value\">\n {{ tag.label }}\n </u-tag>\n </div>\n </div>\n <template v-else>\n {{ displayedValue || FORM_EMPTY_CONTENT }}\n </template>\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Forest, o } from '@cat-kit/core'\nimport { useFormFallbackProps, useUserAction } from '@veltra/compositions'\nimport { ArrowDown, Close, Search } from '@veltra/icons/normal'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, provide, shallowRef, triggerRef, watch } from 'vue'\n\nimport type { CascadeProps, CascadeEmits, DropdownExposed } from '../../types'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\nimport { UTag } from '../tag'\nimport UCascadePanelItem from './cascade-panel-item.vue'\nimport { CascadeDIKey } from './di'\nimport { CascadeNode } from './node'\nimport { useCheck } from './use-check'\nimport { useDataMap } from './use-data-map'\nimport { useSelect } from './use-select'\n\ndefineOptions({ name: 'UCascade', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CascadeProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n separator: '/',\n clearable: true,\n disabled: undefined,\n readonly: undefined,\n childrenKey: 'children',\n filterable: false,\n data: () => [],\n visibilityLimit: 3,\n showFullPath: true\n})\n\nconst emit = defineEmits<CascadeEmits>()\n\nconst cls = bem('cascade')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nconst forest = computed(() => {\n return new Forest<Record<string, unknown>, any>({\n data: (props.data ?? []) as Record<string, unknown>[],\n childrenKey: props.childrenKey,\n createNode: (data, index, depth, _forest, parent) => {\n if (!data) {\n return new CascadeNode({ data, index, depth, value: '', label: '', parent })\n }\n\n return new CascadeNode({\n data,\n index,\n depth,\n value: o(data).get(valueKey.value) ?? '',\n label: o(data).get(labelKey.value) ?? '',\n parent\n })\n }\n })\n})\n\nconst { dataMap } = useDataMap({ props, forest })\n\nconst { userAction, isUserActive } = useUserAction()\n\nconst {\n displayedValue,\n selectItem,\n updateSingleValue,\n panelItemList,\n getPanelItemList,\n createPanelItem,\n selectedNodeKeys\n} = useSelect({ props, emit, dataMap, forest, isUserActive, dropdownRef })\n\nconst { hovered, tags, restTag, updateMultipleValue, handleCloseTag, checkItem, checkedSet } =\n useCheck({ props, forest, getPanelItemList, emit, dataMap, isUserActive, disabled, readonly })\n\nconst commitSingleSelect = userAction((item: CascadeNode) => {\n if (!props.strict) {\n updateSingleValue()\n } else if (!item.children?.length) {\n updateSingleValue()\n }\n})\n\nfunction handleClick(panelIndex: number, item: CascadeNode) {\n selectItem(panelIndex, item)\n\n if (!props.multiple) {\n commitSingleSelect(item)\n }\n}\n\nconst handleCheck = userAction((item: CascadeNode, checked: boolean) => {\n checkItem(item, checked)\n})\n\nfunction handleClear() {\n if (props.multiple) {\n checkedSet.value.clear()\n triggerRef(checkedSet)\n updateMultipleValue()\n } else {\n selectedNodeKeys.value = []\n updateSingleValue()\n }\n\n emit('clear')\n}\n\n// 过滤\nconst qs = shallowRef<string>('')\n\nconst dropdownVisible = shallowRef(false)\n\nconst handleDropdownVisible = (visible: boolean) => {\n dropdownVisible.value = visible\n if (!visible) qs.value = ''\n}\n\nwatch([qs, forest], ([qs, forest]) => {\n const { filterable } = props\n if (!filterable || !qs) {\n forest.dfs((node) => {\n node.visible = true\n })\n getPanelItemList(forest.roots)\n return\n }\n\n const cache = new Set<CascadeNode>()\n\n forest.dfs((node) => {\n if (node.label?.toLowerCase().includes(qs.toLowerCase())) {\n node.visible = true\n let parent = node.parent\n while (parent && !cache.has(parent)) {\n parent.visible = true\n cache.add(parent)\n parent = parent.parent\n }\n } else {\n node.visible = false\n }\n })\n\n panelItemList.value = [createPanelItem(forest.roots)]\n})\n\nprovide(CascadeDIKey, { cls, size, disabled, readonly, cascadeProps: props, checkedSet })\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"check-tag.js","names":[],"sources":["../../../src/components/check-tag/check-tag.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" @click=\"handleChange\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckTagEmits, CheckTagProps } from '../../types'\n\ndefineOptions({ name: 'UCheckTag' })\n\nconst cls = bem('check-tag')\n\nconst props = withDefaults(defineProps<CheckTagProps>(), {})\n\nconst emits = defineEmits<CheckTagEmits>()\n\nconst classList = computed(() => {\n return [cls.b, bem.is('checked', props.checked)]\n})\n\nconst handleChange = () => {\n emits('update:modelValue', props.checked)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;EAcA,MAAM,MAAM,IAAI,WAAW;EAE3B,MAAM,QAAQ;EAEd,MAAM,QAAQ;EAEd,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,WAAW,MAAM,OAAO,CAAC;EACjD,CAAC;EAED,MAAM,qBAAqB;GACzB,MAAM,qBAAqB,MAAM,OAAO;EAC1C;;uBAzBE,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,KAAS;IAAG,SAAO;OAC9B,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"check-tag.js","names":[],"sources":["../../../src/components/check-tag/check-tag.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" @click=\"handleChange\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { bem } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckTagEmits, CheckTagProps } from '../../types'\n\ndefineOptions({ name: 'UCheckTag' })\n\nconst cls = bem('check-tag')\n\nconst props = withDefaults(defineProps<CheckTagProps>(), {})\n\nconst emits = defineEmits<CheckTagEmits>()\n\nconst classList = computed(() => {\n return [cls.b, bem.is('checked', props.checked)]\n})\n\nconst handleChange = () => {\n emits('update:modelValue', props.checked)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;EAcA,MAAM,MAAM,IAAI,WAAW;EAE3B,MAAM,QAAQ;EAEd,MAAM,QAAQ;EAEd,MAAM,YAAY,eAAe;GAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,WAAW,MAAM,OAAO,CAAC;EACjD,CAAC;EAED,MAAM,qBAAqB;GACzB,MAAM,qBAAqB,MAAM,OAAO;EAC1C;;GAzBE,OAAA,UAAA,GAAA,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,KAAS;IAAG,SAAO;GAC9B,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- export { };
1
+ export {}
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-button.js","names":["$attrs"],"sources":["../../../src/components/checkbox/checkbox-button.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"className\" @click=\"handleInput\">\n <slot />\n </div>\n\n <u-tag v-else-if=\"checked !== undefined\" :type=\"checked ? 'success' : 'danger'\">\n {{ checked ? '是' : '否' }}\n </u-tag>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckboxButtonProps, CheckboxButtonEmits } from '../../types'\nimport { UTag } from '../tag'\n\ndefineOptions({ name: 'UCheckboxButton', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CheckboxButtonProps>(), {\n disabled: undefined,\n readonly: undefined,\n type: 'primary',\n round: false\n})\n\nconst emit = defineEmits<CheckboxButtonEmits>()\n\nconst slot = defineSlots<{ default(): any }>()\n\nconst cls = bem('checkbox-button')\n\nconst checked = defineModel<boolean>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is(props.type),\n bem.is('round', props.round),\n bem.is('disabled', disabled.value),\n bem.is('checked', checked.value)\n ]\n})\n\nconst handleInput = () => {\n checked.value = !checked.value\n emit('change', !!checked.value)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEA,SAAA;EAEb,MAAM,MAAM,IAAI,iBAAiB;EAEjC,MAAM,UAAU,SAAoB,SAAA,YAAC;EAErC,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,KAAK;IAChB,IAAI,GAAG,MAAM,IAAI;IACjB,IAAI,GAAG,SAAS,MAAM,KAAK;IAC3B,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,WAAW,QAAQ,KAAK;GACjC;EACF,CAAC;EAED,MAAM,oBAAoB;GACxB,QAAQ,QAAQ,CAAC,QAAQ;GACzB,KAAK,UAAU,CAAC,CAAC,QAAQ,KAAK;EAChC;;WA7Dc,MAAA,QAAA,KAAA,UAAA,GAAZ,mBAEM,OAFN,WAEM,EAAA,KAAA,EAAA,GAFwBA,KAAAA,QAAM;IAAG,OAAO,UAAA;IAAY,SAAO;QAC/D,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,EAAA,KAGQ,QAAA,UAAY,KAAA,KAAA,UAAA,GAA9B,YAEQ,MAAA,WAAA,GAAA;;IAFkC,MAAM,QAAA,QAAO,YAAA;;2BAC5B,CAAA,gBAAA,gBAAtB,QAAA,QAAO,MAAA,GAAA,GAAA,CAAA,CAAA,CAAA;;oCAGZ,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAA,gBADN,MAAA,kBAAA,CAAkB,GAAA,CAAA,CAAA,GAAA,EAAA"}
1
+ {"version":3,"file":"checkbox-button.js","names":["$attrs"],"sources":["../../../src/components/checkbox/checkbox-button.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"className\" @click=\"handleInput\">\n <slot />\n </div>\n\n <u-tag v-else-if=\"checked !== undefined\" :type=\"checked ? 'success' : 'danger'\">\n {{ checked ? '是' : '否' }}\n </u-tag>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckboxButtonProps, CheckboxButtonEmits } from '../../types'\nimport { UTag } from '../tag'\n\ndefineOptions({ name: 'UCheckboxButton', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CheckboxButtonProps>(), {\n disabled: undefined,\n readonly: undefined,\n type: 'primary',\n round: false\n})\n\nconst emit = defineEmits<CheckboxButtonEmits>()\n\nconst slot = defineSlots<{ default(): any }>()\n\nconst cls = bem('checkbox-button')\n\nconst checked = defineModel<boolean>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is(props.type),\n bem.is('round', props.round),\n bem.is('disabled', disabled.value),\n bem.is('checked', checked.value)\n ]\n})\n\nconst handleInput = () => {\n checked.value = !checked.value\n emit('change', !!checked.value)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEA,SAAA;EAEb,MAAM,MAAM,IAAI,iBAAiB;EAEjC,MAAM,UAAU,SAAoB,SAAA,YAAC;EAErC,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,KAAK;IAChB,IAAI,GAAG,MAAM,IAAI;IACjB,IAAI,GAAG,SAAS,MAAM,KAAK;IAC3B,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,WAAW,QAAQ,KAAK;GACjC;EACF,CAAC;EAED,MAAM,oBAAoB;GACxB,QAAQ,QAAQ,CAAC,QAAQ;GACzB,KAAK,UAAU,CAAC,CAAC,QAAQ,KAAK;EAChC;;GA7Dc,OAAA,CAAA,MAAA,QAAA,KAAA,UAAA,GAAZ,mBAEM,OAFN,WAEM,EAAA,KAAA,EAAA,GAFwBA,KAAAA,QAAM;IAAG,OAAO,UAAA;IAAY,SAAO;GAC/D,CAAA,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,EAGQ,KAAA,QAAA,UAAY,KAAA,KAAA,UAAA,GAA9B,YAEQ,MAAA,WAAA,GAAA;;IAFkC,MAAM,QAAA,QAAO,YAAA;;IAC5B,SAAA,cAAA,CAAA,gBAAtB,gBAAA,QAAA,QAAO,MAAA,GAAA,GAAA,CAAA,CAAA,CAAA;;GAGZ,GAAA,GAAA,CAAA,MAAA,CAAA,MAAA,UAAA,GAAA,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBADN,gBAAA,MAAA,kBAAA,CAAkB,GAAA,CAAA,CAAA,GAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","names":["$slots"],"sources":["../../../src/components/checkbox/checkbox.vue"],"sourcesContent":["<template>\n <label :class=\"className\">\n <input\n type=\"checkbox\"\n :class=\"cls.e('native')\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n @click=\"handleInput\"\n />\n\n <span :class=\"cls.e('wrap')\">\n <transition name=\"zoom-in\" mode=\"out-in\">\n <svg viewBox=\"0 0 64 64\" v-if=\"checked\" fill=\"currentColor\">\n <path\n d=\"M50.42,16.76L22.34,39.45l-8.1-11.46c-1.12-1.58-3.3-1.96-4.88-0.84c-1.58,1.12-1.95,3.3-0.84,4.88l10.26,14.51 c0.56,0.79,1.42,1.31,2.38,1.45c0.16,0.02,0.32,0.03,0.48,0.03c0.8,0,1.57-0.27,2.2-0.78l30.99-25.03c1.5-1.21,1.74-3.42,0.52-4.92 C54.13,15.78,51.93,15.55,50.42,16.76z\"\n ></path>\n </svg>\n <span v-else-if=\"indeterminate\" :class=\"cls.m('indeterminate')\"></span>\n </transition>\n </span>\n\n <span :class=\"cls.e('label')\" v-if=\"$slots.default\"><slot /> </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckboxProps, CheckboxEmits } from '../../types'\n\ndefineOptions({ name: 'UCheckbox' })\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<CheckboxEmits>()\nconst cls = bem('checkbox')\n\nconst checked = defineModel<boolean>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('readonly', readonly.value),\n bem.is('checked', checked.value || props.indeterminate)\n ]\n})\n\nconst handleInput = (e: MouseEvent) => {\n if (readonly.value) return\n const target = e.target as HTMLInputElement\n checked.value = target.checked\n emit('change', target.checked, e)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,QAAQ;EAKd,MAAM,OAAO;EACb,MAAM,MAAM,IAAI,UAAU;EAE1B,MAAM,UAAU,SAAoB,SAAA,YAAC;EAErC,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,KAAK;IAChB,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,WAAW,QAAQ,SAAS,MAAM,aAAa;GACxD;EACF,CAAC;EAED,MAAM,eAAe,MAAkB;GACrC,IAAI,SAAS,OAAO;GACpB,MAAM,SAAS,EAAE;GACjB,QAAQ,QAAQ,OAAO;GACvB,KAAK,UAAU,OAAO,SAAS,CAAC;EAClC;;uBAlEE,mBAqBQ,SAAA,EArBA,OAAK,eAAE,UAAA,KAAS,EAAA,GAAA;IACtB,mBAME,SAAA;KALA,MAAK;KACJ,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA;KACZ,SAAS,QAAA;KACT,UAAU,MAAA,QAAA;KACV,SAAO;;IAGV,mBASO,QAAA,EATA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,CACjB,YAOa,YAAA;KAPD,MAAK;KAAU,MAAK;;4BAKxB,CAJyB,QAAA,SAAA,UAAA,GAA/B,mBAIM,OAJN,YAIM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAHJ,mBAEQ,QAAA,EADN,GAAE,qRAAoR,GAAA,MAAA,EAAA,CAAA,EAAA,CAAA,KAGzQ,QAAA,iBAAA,UAAA,GAAjB,mBAAuE,QAAA;;MAAtC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,eAAA,CAAA;;;;IAIbA,KAAAA,OAAO,WAAA,UAAA,GAA3C,mBAAoE,QAAA;;KAA7D,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;QAAiC,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA"}
1
+ {"version":3,"file":"checkbox.js","names":["$slots"],"sources":["../../../src/components/checkbox/checkbox.vue"],"sourcesContent":["<template>\n <label :class=\"className\">\n <input\n type=\"checkbox\"\n :class=\"cls.e('native')\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n @click=\"handleInput\"\n />\n\n <span :class=\"cls.e('wrap')\">\n <transition name=\"zoom-in\" mode=\"out-in\">\n <svg viewBox=\"0 0 64 64\" v-if=\"checked\" fill=\"currentColor\">\n <path\n d=\"M50.42,16.76L22.34,39.45l-8.1-11.46c-1.12-1.58-3.3-1.96-4.88-0.84c-1.58,1.12-1.95,3.3-0.84,4.88l10.26,14.51 c0.56,0.79,1.42,1.31,2.38,1.45c0.16,0.02,0.32,0.03,0.48,0.03c0.8,0,1.57-0.27,2.2-0.78l30.99-25.03c1.5-1.21,1.74-3.42,0.52-4.92 C54.13,15.78,51.93,15.55,50.42,16.76z\"\n ></path>\n </svg>\n <span v-else-if=\"indeterminate\" :class=\"cls.m('indeterminate')\"></span>\n </transition>\n </span>\n\n <span :class=\"cls.e('label')\" v-if=\"$slots.default\"><slot /> </span>\n </label>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckboxProps, CheckboxEmits } from '../../types'\n\ndefineOptions({ name: 'UCheckbox' })\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n disabled: undefined,\n readonly: undefined\n})\n\nconst emit = defineEmits<CheckboxEmits>()\nconst cls = bem('checkbox')\n\nconst checked = defineModel<boolean>()\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst className = computed(() => {\n return [\n cls.b,\n cls.m(size.value),\n bem.is('disabled', disabled.value),\n bem.is('readonly', readonly.value),\n bem.is('checked', checked.value || props.indeterminate)\n ]\n})\n\nconst handleInput = (e: MouseEvent) => {\n if (readonly.value) return\n const target = e.target as HTMLInputElement\n checked.value = target.checked\n emit('change', target.checked, e)\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCA,MAAM,QAAQ;EAKd,MAAM,OAAO;EACb,MAAM,MAAM,IAAI,UAAU;EAE1B,MAAM,UAAU,SAAoB,SAAA,YAAC;EAErC,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,eAAe;GAC/B,OAAO;IACL,IAAI;IACJ,IAAI,EAAE,KAAK,KAAK;IAChB,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,YAAY,SAAS,KAAK;IACjC,IAAI,GAAG,WAAW,QAAQ,SAAS,MAAM,aAAa;GACxD;EACF,CAAC;EAED,MAAM,eAAe,MAAkB;GACrC,IAAI,SAAS,OAAO;GACpB,MAAM,SAAS,EAAE;GACjB,QAAQ,QAAQ,OAAO;GACvB,KAAK,UAAU,OAAO,SAAS,CAAC;EAClC;;GAlEE,OAAA,UAAA,GAAA,mBAqBQ,SAAA,EArBA,OAAK,eAAE,UAAA,KAAS,EAAA,GAAA;IACtB,mBAME,SAAA;KALA,MAAK;KACJ,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,QAAA,CAAA;KACZ,SAAS,QAAA;KACT,UAAU,MAAA,QAAA;KACV,SAAO;;IAGV,mBASO,QAAA,EATA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GACjB,CAAA,YAOa,YAAA;KAPD,MAAK;KAAU,MAAK;;KAKxB,SAAA,cAAA,CAJyB,QAAA,SAAA,UAAA,GAA/B,mBAIM,OAJN,YAIM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAHJ,mBAEQ,QAAA,EADN,GAAE,qRAAoR,GAAA,MAAA,EAAA,CAAA,EAAA,CAAA,KAGzQ,QAAA,iBAAA,UAAA,GAAjB,mBAAuE,QAAA;;MAAtC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,eAAA,CAAA;;;;IAIbA,KAAAA,OAAO,WAAA,UAAA,GAA3C,mBAAoE,QAAA;;KAA7D,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA;IAAiC,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-group.js","names":["$attrs"],"sources":["../../../src/components/checkbox-group/checkbox-group.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"[cls.b, cls.m(size), bem.is('block', block)]\">\n <u-checkbox\n v-for=\"item of items\"\n :key=\"item[valueKey]\"\n :model-value=\"getCheckStatus(item)\"\n @update:model-value=\"handleUpdate($event, item)\"\n :disabled=\"disabled\"\n :size=\"size\"\n >\n {{ item[labelKey] }}\n </u-checkbox>\n </div>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of model\" :key=\"tag\">\n {{ getLabel(tag) }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckboxGroupProps, CheckboxGroupEmits } from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UTag } from '../tag'\n\ndefineOptions({ name: 'UCheckboxGroup', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CheckboxGroupProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n disabled: undefined,\n readonly: undefined\n})\n\ndefineEmits<CheckboxGroupEmits>()\n\nconst model = defineModel<any[]>()\n\nconst cls = bem('checkbox-group')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\n/**\n * 获取checkbox的选中状态\n * @param item - 模型对象\n * @returns 模型值是否存在于model.value中\n */\nconst getCheckStatus = (item: Record<string, string | number>): boolean => {\n const value = item[valueKey.value]\n if (!value || !model.value) return false\n return model.value.includes(value)\n}\n\n/**\n * 处理更新操作\n * @param checked - 指示是否选中\n * @param item - 更新的项\n */\nconst handleUpdate = (checked: boolean, item: Record<string, string | number>) => {\n const value = item[valueKey.value]\n if (!value) return\n if (checked) {\n model.value = [...(model.value ?? []), value]\n } else {\n model.value = model.value?.filter((v) => v !== value)\n }\n}\n\nconst getLabel = (value: string | number) => {\n const { items } = props\n const item = items.find((item) => item[valueKey.value] === value)\n return item?.[labelKey.value]\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCA,MAAM,QAAQ;EASd,MAAM,QAAQ,SAAkB,SAAA,YAAC;EAEjC,MAAM,MAAM,IAAI,gBAAgB;EAEhC,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EACjE,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EAEjE,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;;;;;;EAOD,MAAM,kBAAkB,SAAmD;GACzE,MAAM,QAAQ,KAAK,SAAS;GAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,OAAO;GACnC,OAAO,MAAM,MAAM,SAAS,KAAK;EACnC;;;;;;EAOA,MAAM,gBAAgB,SAAkB,SAA0C;GAChF,MAAM,QAAQ,KAAK,SAAS;GAC5B,IAAI,CAAC,OAAO;GACZ,IAAI,SACF,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,KAAK;QAE5C,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,MAAM,KAAK;EAExD;EAEA,MAAM,YAAY,UAA2B;GAC3C,MAAM,EAAE,UAAU;GAElB,OADa,MAAM,MAAM,SAAS,KAAK,SAAS,WAAW,KACpD,CAAA,GAAO,SAAS;EACzB;;WA5Fc,MAAA,QAAA,KAAA,UAAA,GAAZ,mBAWM,OAXN,WAWM,EAAA,KAAA,EAAA,GAXwBA,KAAAA,QAAM,EAAG,OAAK;IAAG,MAAA,GAAA,CAAG,CAAC;IAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;IAAG,MAAA,GAAA,CAAG,CAAC,GAAE,SAAU,QAAA,KAAK;GAAA,EAAA,CAAA,GAAA,EAAA,UAAA,IAAA,GACtF,mBASa,UAAA,MAAA,WARI,QAAA,QAAR,SAAI;wBADb,YASa,MAAA,WAAA,GAAA;KAPV,KAAK,KAAK,SAAA;KACV,eAAa,eAAe,IAAI;KAChC,wBAAkB,WAAE,aAAa,QAAQ,IAAI;KAC7C,UAAU,MAAA,QAAA;KACV,MAAM,MAAA,IAAA;;4BAEa,CAAA,gBAAA,gBAAjB,KAAK,SAAA,MAAQ,GAAA,CAAA,CAAA,CAAA;;;;;;;;sBAIJ,MAAA,OAAO,UAAA,UAAA,GAAvB,mBAMM,OAAA;;IAN0B,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI,GAAG,MAAA,GAAA,CAAG,CAAC,EAAC,eAAA,CAAA,CAAA;OACxD,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,EAAA,UAAA,IAAA,GAChB,mBAEQ,UAAA,MAAA,WAFa,MAAA,QAAP,QAAG;wBAAjB,YAEQ,MAAA,WAAA,GAAA,EAFqB,KAAK,IAAG,GAAA;4BAChB,CAAA,gBAAA,gBAAhB,SAAS,GAAG,CAAA,GAAA,CAAA,CAAA,CAAA;;;wCAKrB,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBAAA,gBADN,MAAA,kBAAA,CAAkB,GAAA,CAAA,CAAA,GAAA,EAAA"}
1
+ {"version":3,"file":"checkbox-group.js","names":["$attrs"],"sources":["../../../src/components/checkbox-group/checkbox-group.vue"],"sourcesContent":["<template>\n <div v-if=\"!readonly\" v-bind=\"$attrs\" :class=\"[cls.b, cls.m(size), bem.is('block', block)]\">\n <u-checkbox\n v-for=\"item of items\"\n :key=\"item[valueKey]\"\n :model-value=\"getCheckStatus(item)\"\n @update:model-value=\"handleUpdate($event, item)\"\n :disabled=\"disabled\"\n :size=\"size\"\n >\n {{ item[labelKey] }}\n </u-checkbox>\n </div>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"tag of model\" :key=\"tag\">\n {{ getLabel(tag) }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, fieldKey, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed } from 'vue'\n\nimport type { CheckboxGroupProps, CheckboxGroupEmits } from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UTag } from '../tag'\n\ndefineOptions({ name: 'UCheckboxGroup', inheritAttrs: false })\n\nconst props = withDefaults(defineProps<CheckboxGroupProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n disabled: undefined,\n readonly: undefined\n})\n\ndefineEmits<CheckboxGroupEmits>()\n\nconst model = defineModel<any[]>()\n\nconst cls = bem('checkbox-group')\n\nconst labelKey = computed(() => fieldKey(props.labelKey, 'label'))\nconst valueKey = computed(() => fieldKey(props.valueKey, 'value'))\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\n/**\n * 获取checkbox的选中状态\n * @param item - 模型对象\n * @returns 模型值是否存在于model.value中\n */\nconst getCheckStatus = (item: Record<string, string | number>): boolean => {\n const value = item[valueKey.value]\n if (!value || !model.value) return false\n return model.value.includes(value)\n}\n\n/**\n * 处理更新操作\n * @param checked - 指示是否选中\n * @param item - 更新的项\n */\nconst handleUpdate = (checked: boolean, item: Record<string, string | number>) => {\n const value = item[valueKey.value]\n if (!value) return\n if (checked) {\n model.value = [...(model.value ?? []), value]\n } else {\n model.value = model.value?.filter((v) => v !== value)\n }\n}\n\nconst getLabel = (value: string | number) => {\n const { items } = props\n const item = items.find((item) => item[valueKey.value] === value)\n return item?.[labelKey.value]\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCA,MAAM,QAAQ;EASd,MAAM,QAAQ,SAAkB,SAAA,YAAC;EAEjC,MAAM,MAAM,IAAI,gBAAgB;EAEhC,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EACjE,MAAM,WAAW,eAAe,SAAS,MAAM,UAAU,OAAO,CAAC;EAEjE,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,MAAM,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAClF,MAAM;GACN,UAAU;GACV,UAAU;EACZ,CAAC;;;;;;EAOD,MAAM,kBAAkB,SAAmD;GACzE,MAAM,QAAQ,KAAK,SAAS;GAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,OAAO;GACnC,OAAO,MAAM,MAAM,SAAS,KAAK;EACnC;;;;;;EAOA,MAAM,gBAAgB,SAAkB,SAA0C;GAChF,MAAM,QAAQ,KAAK,SAAS;GAC5B,IAAI,CAAC,OAAO;GACZ,IAAI,SACF,MAAM,QAAQ,CAAC,GAAI,MAAM,SAAS,CAAC,GAAI,KAAK;QAE5C,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,MAAM,KAAK;EAExD;EAEA,MAAM,YAAY,UAA2B;GAC3C,MAAM,EAAE,UAAU;GAElB,OADa,MAAM,MAAM,SAAS,KAAK,SAAS,WAAW,KACpD,CAAA,GAAO,SAAS;EACzB;;GA5Fc,OAAA,CAAA,MAAA,QAAA,KAAA,UAAA,GAAZ,mBAWM,OAXN,WAWM,EAAA,KAAA,EAAA,GAXwBA,KAAAA,QAAM,EAAG,OAAK;IAAG,MAAA,GAAA,CAAG,CAAC;IAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI;IAAG,MAAA,GAAA,CAAG,CAAC,GAAE,SAAU,QAAA,KAAK;GAAA,EAAA,CAAA,GACtF,EAAA,UAAA,IAAA,GAAA,mBASa,UAAA,MAAA,WARI,QAAA,QAAR,SAAI;IADb,OAAA,UAAA,GAAA,YASa,MAAA,WAAA,GAAA;KAPV,KAAK,KAAK,SAAA;KACV,eAAa,eAAe,IAAI;KAChC,wBAAkB,WAAE,aAAa,QAAQ,IAAI;KAC7C,UAAU,MAAA,QAAA;KACV,MAAM,MAAA,IAAA;;KAEa,SAAA,cAAA,CAAA,gBAAjB,gBAAA,KAAK,SAAA,MAAQ,GAAA,CAAA,CAAA,CAAA;;;;;;;;GAIJ,CAAA,GAAA,GAAA,EAAA,GAAA,EAAA,KAAA,MAAA,OAAO,UAAA,UAAA,GAAvB,mBAMM,OAAA;;IAN0B,OAAK,eAAA,CAAG,MAAA,GAAA,CAAG,CAAC,EAAE,MAAA,IAAA,CAAI,GAAG,MAAA,GAAA,CAAG,CAAC,EAAC,eAAA,CAAA,CAAA;GACxD,GAAA,CAAA,mBAIM,OAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAChB,EAAA,UAAA,IAAA,GAAA,mBAEQ,UAAA,MAAA,WAFa,MAAA,QAAP,QAAG;IAAjB,OAAA,UAAA,GAAA,YAEQ,MAAA,WAAA,GAAA,EAFqB,KAAK,IAAG,GAAA;KAChB,SAAA,cAAA,CAAA,gBAAhB,gBAAA,SAAS,GAAG,CAAA,GAAA,CAAA,CAAA,CAAA;;;GAKrB,CAAA,GAAA,GAAA,EAAA,GAAA,CAAA,CAAA,GAAA,CAAA,MAAA,UAAA,GAAA,mBAEW,UAAA,EAAA,KAAA,EAAA,GAAA,CAAA,gBADN,gBAAA,MAAA,kBAAA,CAAkB,GAAA,CAAA,CAAA,GAAA,EAAA"}
@@ -1,5 +1,5 @@
1
- import { EditorState } from "../../node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js";
2
- import { crosshairCursor, drawSelection, dropCursor, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, keymap, lineNumbers, rectangularSelection } from "../../node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js";
1
+ import { EditorState } from "../../node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js";
2
+ import { crosshairCursor, drawSelection, dropCursor, highlightActiveLine, highlightActiveLineGutter, highlightSpecialChars, keymap, lineNumbers, rectangularSelection } from "../../node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js";
3
3
  import { bracketMatching, defaultHighlightStyle, foldGutter, foldKeymap, indentOnInput, syntaxHighlighting } from "../../node_modules/.bun/@codemirror_language@6.12.4/node_modules/@codemirror/language/dist/index.js";
4
4
  import { autocompletion, closeBrackets, closeBracketsKeymap, completionKeymap } from "../../node_modules/.bun/@codemirror_autocomplete@6.20.3/node_modules/@codemirror/autocomplete/dist/index.js";
5
5
  import { defaultKeymap, history, historyKeymap, indentWithTab } from "../../node_modules/.bun/@codemirror_commands@6.10.4/node_modules/@codemirror/commands/dist/index.js";
@@ -1,7 +1,7 @@
1
1
  import _sfc_main$1 from "../scroll/scroll.js";
2
2
  import _sfc_main$2 from "../select/select.js";
3
- import { Compartment, EditorState } from "../../node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js";
4
- import { EditorView, tooltips } from "../../node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js";
3
+ import { Compartment, EditorState } from "../../node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js";
4
+ import { EditorView, tooltips } from "../../node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js";
5
5
  import { oneDark } from "../../node_modules/.bun/@codemirror_theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js";
6
6
  import { basicSetup } from "./basic-setup.js";
7
7
  import { loadLanguage } from "./lang-loaders.js";
@@ -1 +1 @@
1
- {"version":3,"file":"code-editor.js","names":[],"sources":["../../../src/components/code-editor/code-editor.vue"],"sourcesContent":["<template>\n <u-scroll :class=\"className\" :style=\"rootStyle\" @keyup.enter.stop>\n <div ref=\"container\"></div>\n\n <u-select\n v-if=\"showLangSelect\"\n :class=\"cls.e('lang-select')\"\n v-model=\"lang\"\n size=\"small\"\n :options=\"langOptions\"\n :clearable=\"false\"\n :disabled=\"disabled\"\n />\n <span v-else-if=\"langLabel\" :class=\"cls.e('lang-label')\">{{ langLabel }}</span>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Compartment, EditorState, type Extension, type Text } from '@codemirror/state'\nimport { oneDark } from '@codemirror/theme-one-dark'\nimport { EditorView, tooltips } from '@codemirror/view'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, injectFormContext, zIndex } from '@veltra/utils'\nimport {\n computed,\n onBeforeUnmount,\n shallowRef,\n useTemplateRef,\n watch,\n type CSSProperties\n} from 'vue'\n\nimport type { CodeEditorEmits, CodeEditorLang, CodeEditorProps } from '../../types'\nimport { UScroll } from '../scroll'\nimport { USelect } from '../select'\nimport { basicSetup } from './basic-setup'\nimport { loadLanguage } from './lang-loaders'\nimport {\n buildFullDoc,\n extractBodyFromText,\n getShellRanges,\n mapSelectionToBody,\n shellExtension,\n textEqualsShellDoc,\n type ShellConfig\n} from './shell-extension'\n\ndefineOptions({ name: 'UCodeEditor' })\n\nconst props = withDefaults(defineProps<CodeEditorProps>(), {\n disabled: undefined,\n readonly: undefined,\n dark: false,\n defaultLines: 8\n})\n\nconst emit = defineEmits<CodeEditorEmits>()\n\nconst model = defineModel<string>()\nconst lang = defineModel<CodeEditorLang>('lang')\n\nconst cls = bem('code-editor')\n\nconst { formProps } = injectFormContext()\n\nconst { disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n disabled: false,\n readonly: false\n})\n\nconst className = computed<string[]>(() => [\n cls.b,\n bem.is('disabled', disabled.value),\n bem.is('readonly', readonly.value),\n bem.is('dark', props.dark)\n])\n\nconst rootStyle = computed<CSSProperties>(() => ({\n '--u-code-editor-default-lines': Math.max(1, props.defaultLines)\n}))\n\nconst langs = computed(() => props.langs ?? [])\n\nconst showLangSelect = computed(() => langs.value.length > 1)\n\nconst langOptions = computed(() =>\n langs.value.map((value) => ({ label: value.toUpperCase(), value }))\n)\n\n/** 实际生效的语言:优先 lang model,否则回落 langs[0] */\nconst activeLang = computed<CodeEditorLang | undefined>(() => lang.value ?? langs.value[0])\n\n/** 仅一种语言时,在选择器位置展示名称 */\nconst langLabel = computed(() =>\n langs.value.length === 1 && activeLang.value ? activeLang.value.toUpperCase() : undefined\n)\n\nconst shellConfig = computed<ShellConfig>(() => ({\n prefix: props.prefix ?? '',\n suffix: props.suffix ?? ''\n}))\n\nconst containerRef = useTemplateRef('container')\nconst editor = shallowRef<EditorView | null>(null)\n\nconst themeCompartment = new Compartment()\nconst editableCompartment = new Compartment()\nconst readOnlyCompartment = new Compartment()\nconst langCompartment = new Compartment()\nconst shellCompartment = new Compartment()\n\n/** 聚焦时的正文快照,用于失焦时判断是否触发 change */\nlet focusSnapshot = ''\n\n/**\n * 编辑器最近一次写出的正文引用。\n * 用于短路 model → doc 同步,避免每次按键对整篇文档做 O(n) 相等比较。\n */\nlet lastEditorBody: string | undefined\n\n/** 上一帧是否处于 IME composition,用于在 composition 结束时补一次 model 同步 */\nlet wasComposing = false\n\n/** 将编辑器正文写回 v-model(跳过与上次相同的值,避免多余更新) */\nfunction writeModelFromDoc(doc: Text) {\n const nextBody = extractBodyFromText(doc, shellConfig.value)\n if (nextBody === lastEditorBody && nextBody === model.value) return\n lastEditorBody = nextBody\n model.value = nextBody\n}\n\nfunction buildExtensions(): Extension[] {\n return [\n basicSetup,\n tooltips({ parent: document.body }),\n EditorView.theme({ '.cm-tooltip': { zIndex: zIndex() } }),\n themeCompartment.of(props.dark ? oneDark : []),\n editableCompartment.of(EditorView.editable.of(!disabled.value)),\n readOnlyCompartment.of(EditorState.readOnly.of(readonly.value)),\n langCompartment.of([]),\n shellCompartment.of(shellExtension(shellConfig.value)),\n EditorView.updateListener.of((update) => {\n const composing = update.view.composing\n\n // IME 进行中不写回,避免中间态触发父级重渲染;结束后再统一同步\n if (update.docChanged && !composing) {\n writeModelFromDoc(update.state.doc)\n } else if (wasComposing && !composing) {\n writeModelFromDoc(update.state.doc)\n }\n wasComposing = composing\n\n if (!update.focusChanged) return\n if (update.view.hasFocus) {\n focusSnapshot = extractBodyFromText(update.state.doc, shellConfig.value)\n return\n }\n const current = extractBodyFromText(update.state.doc, shellConfig.value)\n if (current !== focusSnapshot) {\n emit('change', current)\n }\n })\n ]\n}\n\nlet editorToken = 0\nlet langToken = 0\n\nasync function applyLanguage() {\n const view = editor.value\n if (!view) return\n const myToken = ++langToken\n const language = activeLang.value\n\n if (!language) {\n if (myToken !== langToken || editor.value !== view) return\n view.dispatch({ effects: langCompartment.reconfigure([]) })\n return\n }\n\n const ext = await loadLanguage(language)\n if (myToken !== langToken || editor.value !== view) return\n view.dispatch({ effects: langCompartment.reconfigure(ext) })\n}\n\nfunction destroyEditor() {\n ++editorToken\n ++langToken\n editor.value?.destroy()\n editor.value = null\n lastEditorBody = undefined\n wasComposing = false\n}\n\nfunction createEditor() {\n destroyEditor()\n const myToken = ++editorToken\n const parent = containerRef.value\n if (!parent) return\n\n const config = shellConfig.value\n const body = model.value ?? ''\n const doc = buildFullDoc(body, config)\n const { bodyStart } = getShellRanges(doc.length, config)\n lastEditorBody = body\n\n const view = new EditorView({\n doc,\n selection: { anchor: bodyStart, head: bodyStart },\n extensions: buildExtensions(),\n parent\n })\n\n if (myToken !== editorToken) {\n view.destroy()\n return\n }\n\n editor.value = view\n applyLanguage()\n}\n\n/**\n * 将 model 正文同步为完整文档;可选同时 reconfigure shell,\n * 避免 prefix/suffix 变更时「先改扩展、后改文档」导致选区越界。\n */\nfunction syncDocFromModel(\n view: EditorView,\n body: string,\n config: ShellConfig,\n options?: { reconfigureShell?: boolean; prevShell?: ShellConfig }\n) {\n const current = view.state.doc\n const docChanged = !textEqualsShellDoc(current, body, config)\n const reconfigureShell = options?.reconfigureShell ?? false\n\n if (!docChanged && !reconfigureShell) return\n\n const nextDoc = buildFullDoc(body, config)\n const prevShell = options?.prevShell ?? config\n const prevRanges = getShellRanges(current.length, prevShell)\n const nextRanges = getShellRanges(nextDoc.length, config)\n const selection = mapSelectionToBody(view.state.selection, prevRanges, nextRanges, nextDoc.length)\n\n view.dispatch({\n ...(docChanged\n ? {\n changes: { from: 0, to: current.length, insert: nextDoc },\n selection,\n // 仅外壳变更时滚入视口;外部 model 回写不应打断用户滚动位置\n ...(reconfigureShell ? { scrollIntoView: true } : {})\n }\n : { selection }),\n ...(reconfigureShell ? { effects: shellCompartment.reconfigure(shellExtension(config)) } : {}),\n // 绕过 shell 的 change/transactionFilter,避免全量替换被拦截或选区被错误钳制\n filter: false\n })\n}\n\nwatch(\n containerRef,\n (el) => {\n if (el) createEditor()\n else destroyEditor()\n },\n { immediate: true, flush: 'post' }\n)\n\nwatch(activeLang, applyLanguage)\n\n/** langs 变化时,若当前 lang 未设或不在列表中则纠正为 langs[0] */\nwatch(\n langs,\n (list) => {\n if (!list.length) return\n if (!lang.value || !list.includes(lang.value)) {\n lang.value = list[0]\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.dark,\n (dark) => {\n editor.value?.dispatch({ effects: themeCompartment.reconfigure(dark ? oneDark : []) })\n }\n)\n\nwatch(disabled, (v) => {\n editor.value?.dispatch({ effects: editableCompartment.reconfigure(EditorView.editable.of(!v)) })\n})\n\nwatch(readonly, (v) => {\n editor.value?.dispatch({ effects: readOnlyCompartment.reconfigure(EditorState.readOnly.of(v)) })\n})\n\nwatch(\n [model, editor, shellConfig],\n ([v, e], [, , prevShell]) => {\n if (!e) return\n // IME 组字中不接受外部回写,避免打断输入\n if (e.composing) return\n const config = shellConfig.value\n const shellChanged =\n !prevShell || prevShell.prefix !== config.prefix || prevShell.suffix !== config.suffix\n // 编辑器自身写出的 model 无需回写文档\n if (!shellChanged && v === lastEditorBody) return\n const body = v ?? ''\n syncDocFromModel(e, body, config, {\n reconfigureShell: shellChanged,\n prevShell: prevShell ?? config\n })\n lastEditorBody = body\n },\n { immediate: true }\n)\n\nonBeforeUnmount(destroyEditor)\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDA,MAAM,QAAQ;EAOd,MAAM,OAAO;EAEb,MAAM,QAAQ,SAAmB,SAAA,YAAC;EAClC,MAAM,OAAO,SAA2B,SAAC,MAAM;EAE/C,MAAM,MAAM,IAAI,aAAa;EAE7B,MAAM,EAAE,cAAc,kBAAkB;EAExC,MAAM,EAAE,UAAU,aAAa,qBAAqB,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG;GAC5E,UAAU;GACV,UAAU;EACZ,CAAC;EAED,MAAM,YAAY,eAAyB;GACzC,IAAI;GACJ,IAAI,GAAG,YAAY,SAAS,KAAK;GACjC,IAAI,GAAG,YAAY,SAAS,KAAK;GACjC,IAAI,GAAG,QAAQ,MAAM,IAAI;EAC3B,CAAC;EAED,MAAM,YAAY,gBAA+B,EAC/C,iCAAiC,KAAK,IAAI,GAAG,MAAM,YAAY,EACjE,EAAE;EAEF,MAAM,QAAQ,eAAe,MAAM,SAAS,CAAC,CAAC;EAE9C,MAAM,iBAAiB,eAAe,MAAM,MAAM,SAAS,CAAC;EAE5D,MAAM,cAAc,eAClB,MAAM,MAAM,KAAK,WAAW;GAAE,OAAO,MAAM,YAAY;GAAG;EAAM,EAAE,CACpE;;EAGA,MAAM,aAAa,eAA2C,KAAK,SAAS,MAAM,MAAM,EAAE;;EAG1F,MAAM,YAAY,eAChB,MAAM,MAAM,WAAW,KAAK,WAAW,QAAQ,WAAW,MAAM,YAAY,IAAI,KAAA,CAClF;EAEA,MAAM,cAAc,gBAA6B;GAC/C,QAAQ,MAAM,UAAU;GACxB,QAAQ,MAAM,UAAU;EAC1B,EAAE;EAEF,MAAM,eAAe,eAAe,WAAW;EAC/C,MAAM,SAAS,WAA8B,IAAI;EAEjD,MAAM,mBAAmB,IAAI,YAAY;EACzC,MAAM,sBAAsB,IAAI,YAAY;EAC5C,MAAM,sBAAsB,IAAI,YAAY;EAC5C,MAAM,kBAAkB,IAAI,YAAY;EACxC,MAAM,mBAAmB,IAAI,YAAY;;EAGzC,IAAI,gBAAgB;;;;;EAMpB,IAAI;;EAGJ,IAAI,eAAe;;EAGnB,SAAS,kBAAkB,KAAW;GACpC,MAAM,WAAW,oBAAoB,KAAK,YAAY,KAAK;GAC3D,IAAI,aAAa,kBAAkB,aAAa,MAAM,OAAO;GAC7D,iBAAiB;GACjB,MAAM,QAAQ;EAChB;EAEA,SAAS,kBAA+B;GACtC,OAAO;IACL;IACA,SAAS,EAAE,QAAQ,SAAS,KAAK,CAAC;IAClC,WAAW,MAAM,EAAE,eAAe,EAAE,QAAQ,OAAO,EAAE,EAAE,CAAC;IACxD,iBAAiB,GAAG,MAAM,OAAO,UAAU,CAAC,CAAC;IAC7C,oBAAoB,GAAG,WAAW,SAAS,GAAG,CAAC,SAAS,KAAK,CAAC;IAC9D,oBAAoB,GAAG,YAAY,SAAS,GAAG,SAAS,KAAK,CAAC;IAC9D,gBAAgB,GAAG,CAAC,CAAC;IACrB,iBAAiB,GAAG,eAAe,YAAY,KAAK,CAAC;IACrD,WAAW,eAAe,IAAI,WAAW;KACvC,MAAM,YAAY,OAAO,KAAK;KAG9B,IAAI,OAAO,cAAc,CAAC,WACxB,kBAAkB,OAAO,MAAM,GAAG;UAC7B,IAAI,gBAAgB,CAAC,WAC1B,kBAAkB,OAAO,MAAM,GAAG;KAEpC,eAAe;KAEf,IAAI,CAAC,OAAO,cAAc;KAC1B,IAAI,OAAO,KAAK,UAAU;MACxB,gBAAgB,oBAAoB,OAAO,MAAM,KAAK,YAAY,KAAK;MACvE;KACF;KACA,MAAM,UAAU,oBAAoB,OAAO,MAAM,KAAK,YAAY,KAAK;KACvE,IAAI,YAAY,eACd,KAAK,UAAU,OAAO;IAE1B,CAAC;GACH;EACF;EAEA,IAAI,cAAc;EAClB,IAAI,YAAY;EAEhB,eAAe,gBAAgB;GAC7B,MAAM,OAAO,OAAO;GACpB,IAAI,CAAC,MAAM;GACX,MAAM,UAAU,EAAE;GAClB,MAAM,WAAW,WAAW;GAE5B,IAAI,CAAC,UAAU;IACb,IAAI,YAAY,aAAa,OAAO,UAAU,MAAM;IACpD,KAAK,SAAS,EAAE,SAAS,gBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC;IAC1D;GACF;GAEA,MAAM,MAAM,MAAM,aAAa,QAAQ;GACvC,IAAI,YAAY,aAAa,OAAO,UAAU,MAAM;GACpD,KAAK,SAAS,EAAE,SAAS,gBAAgB,YAAY,GAAG,EAAE,CAAC;EAC7D;EAEA,SAAS,gBAAgB;GACvB,EAAE;GACF,EAAE;GACF,OAAO,OAAO,QAAQ;GACtB,OAAO,QAAQ;GACf,iBAAiB,KAAA;GACjB,eAAe;EACjB;EAEA,SAAS,eAAe;GACtB,cAAc;GACd,MAAM,UAAU,EAAE;GAClB,MAAM,SAAS,aAAa;GAC5B,IAAI,CAAC,QAAQ;GAEb,MAAM,SAAS,YAAY;GAC3B,MAAM,OAAO,MAAM,SAAS;GAC5B,MAAM,MAAM,aAAa,MAAM,MAAM;GACrC,MAAM,EAAE,cAAc,eAAe,IAAI,QAAQ,MAAM;GACvD,iBAAiB;GAEjB,MAAM,OAAO,IAAI,WAAW;IAC1B;IACA,WAAW;KAAE,QAAQ;KAAW,MAAM;IAAU;IAChD,YAAY,gBAAgB;IAC5B;GACF,CAAC;GAED,IAAI,YAAY,aAAa;IAC3B,KAAK,QAAQ;IACb;GACF;GAEA,OAAO,QAAQ;GACf,cAAc;EAChB;;;;;EAMA,SAAS,iBACP,MACA,MACA,QACA,SACA;GACA,MAAM,UAAU,KAAK,MAAM;GAC3B,MAAM,aAAa,CAAC,mBAAmB,SAAS,MAAM,MAAM;GAC5D,MAAM,mBAAmB,SAAS,oBAAoB;GAEtD,IAAI,CAAC,cAAc,CAAC,kBAAkB;GAEtC,MAAM,UAAU,aAAa,MAAM,MAAM;GACzC,MAAM,YAAY,SAAS,aAAa;GACxC,MAAM,aAAa,eAAe,QAAQ,QAAQ,SAAS;GAC3D,MAAM,aAAa,eAAe,QAAQ,QAAQ,MAAM;GACxD,MAAM,YAAY,mBAAmB,KAAK,MAAM,WAAW,YAAY,YAAY,QAAQ,MAAM;GAEjG,KAAK,SAAS;IACZ,GAAI,aACA;KACE,SAAS;MAAE,MAAM;MAAG,IAAI,QAAQ;MAAQ,QAAQ;KAAQ;KACxD;KAEA,GAAI,mBAAmB,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,IACA,EAAE,UAAU;IAChB,GAAI,mBAAmB,EAAE,SAAS,iBAAiB,YAAY,eAAe,MAAM,CAAC,EAAE,IAAI,CAAC;IAE5F,QAAQ;GACV,CAAC;EACH;EAEA,MACE,eACC,OAAO;GACN,IAAI,IAAI,aAAa;QAChB,cAAc;EACrB,GACA;GAAE,WAAW;GAAM,OAAO;EAAO,CACnC;EAEA,MAAM,YAAY,aAAa;;EAG/B,MACE,QACC,SAAS;GACR,IAAI,CAAC,KAAK,QAAQ;GAClB,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,SAAS,KAAK,KAAK,GAC1C,KAAK,QAAQ,KAAK;EAEtB,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,YACQ,MAAM,OACX,SAAS;GACR,OAAO,OAAO,SAAS,EAAE,SAAS,iBAAiB,YAAY,OAAO,UAAU,CAAC,CAAC,EAAE,CAAC;EACvF,CACF;EAEA,MAAM,WAAW,MAAM;GACrB,OAAO,OAAO,SAAS,EAAE,SAAS,oBAAoB,YAAY,WAAW,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;EACjG,CAAC;EAED,MAAM,WAAW,MAAM;GACrB,OAAO,OAAO,SAAS,EAAE,SAAS,oBAAoB,YAAY,YAAY,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;EACjG,CAAC;EAED,MACE;GAAC;GAAO;GAAQ;EAAW,IAC1B,CAAC,GAAG,IAAI,KAAK,eAAe;GAC3B,IAAI,CAAC,GAAG;GAER,IAAI,EAAE,WAAW;GACjB,MAAM,SAAS,YAAY;GAC3B,MAAM,eACJ,CAAC,aAAa,UAAU,WAAW,OAAO,UAAU,UAAU,WAAW,OAAO;GAElF,IAAI,CAAC,gBAAgB,MAAM,gBAAgB;GAC3C,MAAM,OAAO,KAAK;GAClB,iBAAiB,GAAG,MAAM,QAAQ;IAChC,kBAAkB;IAClB,WAAW,aAAa;GAC1B,CAAC;GACD,iBAAiB;EACnB,GACA,EAAE,WAAW,KAAK,CACpB;EAEA,gBAAgB,aAAa;;uBA7T3B,YAaW,MAAA,WAAA,GAAA;IAbA,OAAK,eAAE,UAAA,KAAS;IAAG,OAAK,eAAE,UAAA,KAAS;IAAG,SAAK,OAAA,OAAA,OAAA,KAAA,SAAA,oBAAN,CAAA,GAAiB,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA;;2BACpC,CAA3B,mBAA2B,OAA3B,YAA2B,MAAA,GAAA,GAGnB,eAAA,SAAA,UAAA,GADR,YAQE,MAAA,WAAA,GAAA;;KANC,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,aAAA,CAAA;iBACJ,KAAA;kEAAA,KAAI,QAAA;KACb,MAAK;KACJ,SAAS,YAAA;KACT,WAAW;KACX,UAAU,MAAA,QAAA;;;;;;UAEI,UAAA,SAAA,UAAA,GAAjB,mBAA+E,QAAA;;KAAlD,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,YAAA,CAAA;uBAAmB,UAAA,KAAS,GAAA,CAAA,KAAA,mBAAA,QAAA,IAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"code-editor.js","names":[],"sources":["../../../src/components/code-editor/code-editor.vue"],"sourcesContent":["<template>\n <u-scroll :class=\"className\" :style=\"rootStyle\" @keyup.enter.stop>\n <div ref=\"container\"></div>\n\n <u-select\n v-if=\"showLangSelect\"\n :class=\"cls.e('lang-select')\"\n v-model=\"lang\"\n size=\"small\"\n :options=\"langOptions\"\n :clearable=\"false\"\n :disabled=\"disabled\"\n />\n <span v-else-if=\"langLabel\" :class=\"cls.e('lang-label')\">{{ langLabel }}</span>\n </u-scroll>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Compartment, EditorState, type Extension, type Text } from '@codemirror/state'\nimport { oneDark } from '@codemirror/theme-one-dark'\nimport { EditorView, tooltips } from '@codemirror/view'\nimport { useFormFallbackProps } from '@veltra/compositions'\nimport { bem, injectFormContext, zIndex } from '@veltra/utils'\nimport {\n computed,\n onBeforeUnmount,\n shallowRef,\n useTemplateRef,\n watch,\n type CSSProperties\n} from 'vue'\n\nimport type { CodeEditorEmits, CodeEditorLang, CodeEditorProps } from '../../types'\nimport { UScroll } from '../scroll'\nimport { USelect } from '../select'\nimport { basicSetup } from './basic-setup'\nimport { loadLanguage } from './lang-loaders'\nimport {\n buildFullDoc,\n extractBodyFromText,\n getShellRanges,\n mapSelectionToBody,\n shellExtension,\n textEqualsShellDoc,\n type ShellConfig\n} from './shell-extension'\n\ndefineOptions({ name: 'UCodeEditor' })\n\nconst props = withDefaults(defineProps<CodeEditorProps>(), {\n disabled: undefined,\n readonly: undefined,\n dark: false,\n defaultLines: 8\n})\n\nconst emit = defineEmits<CodeEditorEmits>()\n\nconst model = defineModel<string>()\nconst lang = defineModel<CodeEditorLang>('lang')\n\nconst cls = bem('code-editor')\n\nconst { formProps } = injectFormContext()\n\nconst { disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n disabled: false,\n readonly: false\n})\n\nconst className = computed<string[]>(() => [\n cls.b,\n bem.is('disabled', disabled.value),\n bem.is('readonly', readonly.value),\n bem.is('dark', props.dark)\n])\n\nconst rootStyle = computed<CSSProperties>(() => ({\n '--u-code-editor-default-lines': Math.max(1, props.defaultLines)\n}))\n\nconst langs = computed(() => props.langs ?? [])\n\nconst showLangSelect = computed(() => langs.value.length > 1)\n\nconst langOptions = computed(() =>\n langs.value.map((value) => ({ label: value.toUpperCase(), value }))\n)\n\n/** 实际生效的语言:优先 lang model,否则回落 langs[0] */\nconst activeLang = computed<CodeEditorLang | undefined>(() => lang.value ?? langs.value[0])\n\n/** 仅一种语言时,在选择器位置展示名称 */\nconst langLabel = computed(() =>\n langs.value.length === 1 && activeLang.value ? activeLang.value.toUpperCase() : undefined\n)\n\nconst shellConfig = computed<ShellConfig>(() => ({\n prefix: props.prefix ?? '',\n suffix: props.suffix ?? ''\n}))\n\nconst containerRef = useTemplateRef('container')\nconst editor = shallowRef<EditorView | null>(null)\n\nconst themeCompartment = new Compartment()\nconst editableCompartment = new Compartment()\nconst readOnlyCompartment = new Compartment()\nconst langCompartment = new Compartment()\nconst shellCompartment = new Compartment()\n\n/** 聚焦时的正文快照,用于失焦时判断是否触发 change */\nlet focusSnapshot = ''\n\n/**\n * 编辑器最近一次写出的正文引用。\n * 用于短路 model → doc 同步,避免每次按键对整篇文档做 O(n) 相等比较。\n */\nlet lastEditorBody: string | undefined\n\n/** 上一帧是否处于 IME composition,用于在 composition 结束时补一次 model 同步 */\nlet wasComposing = false\n\n/** 将编辑器正文写回 v-model(跳过与上次相同的值,避免多余更新) */\nfunction writeModelFromDoc(doc: Text) {\n const nextBody = extractBodyFromText(doc, shellConfig.value)\n if (nextBody === lastEditorBody && nextBody === model.value) return\n lastEditorBody = nextBody\n model.value = nextBody\n}\n\nfunction buildExtensions(): Extension[] {\n return [\n basicSetup,\n tooltips({ parent: document.body }),\n EditorView.theme({ '.cm-tooltip': { zIndex: zIndex() } }),\n themeCompartment.of(props.dark ? oneDark : []),\n editableCompartment.of(EditorView.editable.of(!disabled.value)),\n readOnlyCompartment.of(EditorState.readOnly.of(readonly.value)),\n langCompartment.of([]),\n shellCompartment.of(shellExtension(shellConfig.value)),\n EditorView.updateListener.of((update) => {\n const composing = update.view.composing\n\n // IME 进行中不写回,避免中间态触发父级重渲染;结束后再统一同步\n if (update.docChanged && !composing) {\n writeModelFromDoc(update.state.doc)\n } else if (wasComposing && !composing) {\n writeModelFromDoc(update.state.doc)\n }\n wasComposing = composing\n\n if (!update.focusChanged) return\n if (update.view.hasFocus) {\n focusSnapshot = extractBodyFromText(update.state.doc, shellConfig.value)\n return\n }\n const current = extractBodyFromText(update.state.doc, shellConfig.value)\n if (current !== focusSnapshot) {\n emit('change', current)\n }\n })\n ]\n}\n\nlet editorToken = 0\nlet langToken = 0\n\nasync function applyLanguage() {\n const view = editor.value\n if (!view) return\n const myToken = ++langToken\n const language = activeLang.value\n\n if (!language) {\n if (myToken !== langToken || editor.value !== view) return\n view.dispatch({ effects: langCompartment.reconfigure([]) })\n return\n }\n\n const ext = await loadLanguage(language)\n if (myToken !== langToken || editor.value !== view) return\n view.dispatch({ effects: langCompartment.reconfigure(ext) })\n}\n\nfunction destroyEditor() {\n ++editorToken\n ++langToken\n editor.value?.destroy()\n editor.value = null\n lastEditorBody = undefined\n wasComposing = false\n}\n\nfunction createEditor() {\n destroyEditor()\n const myToken = ++editorToken\n const parent = containerRef.value\n if (!parent) return\n\n const config = shellConfig.value\n const body = model.value ?? ''\n const doc = buildFullDoc(body, config)\n const { bodyStart } = getShellRanges(doc.length, config)\n lastEditorBody = body\n\n const view = new EditorView({\n doc,\n selection: { anchor: bodyStart, head: bodyStart },\n extensions: buildExtensions(),\n parent\n })\n\n if (myToken !== editorToken) {\n view.destroy()\n return\n }\n\n editor.value = view\n applyLanguage()\n}\n\n/**\n * 将 model 正文同步为完整文档;可选同时 reconfigure shell,\n * 避免 prefix/suffix 变更时「先改扩展、后改文档」导致选区越界。\n */\nfunction syncDocFromModel(\n view: EditorView,\n body: string,\n config: ShellConfig,\n options?: { reconfigureShell?: boolean; prevShell?: ShellConfig }\n) {\n const current = view.state.doc\n const docChanged = !textEqualsShellDoc(current, body, config)\n const reconfigureShell = options?.reconfigureShell ?? false\n\n if (!docChanged && !reconfigureShell) return\n\n const nextDoc = buildFullDoc(body, config)\n const prevShell = options?.prevShell ?? config\n const prevRanges = getShellRanges(current.length, prevShell)\n const nextRanges = getShellRanges(nextDoc.length, config)\n const selection = mapSelectionToBody(view.state.selection, prevRanges, nextRanges, nextDoc.length)\n\n view.dispatch({\n ...(docChanged\n ? {\n changes: { from: 0, to: current.length, insert: nextDoc },\n selection,\n // 仅外壳变更时滚入视口;外部 model 回写不应打断用户滚动位置\n ...(reconfigureShell ? { scrollIntoView: true } : {})\n }\n : { selection }),\n ...(reconfigureShell ? { effects: shellCompartment.reconfigure(shellExtension(config)) } : {}),\n // 绕过 shell 的 change/transactionFilter,避免全量替换被拦截或选区被错误钳制\n filter: false\n })\n}\n\nwatch(\n containerRef,\n (el) => {\n if (el) createEditor()\n else destroyEditor()\n },\n { immediate: true, flush: 'post' }\n)\n\nwatch(activeLang, applyLanguage)\n\n/** langs 变化时,若当前 lang 未设或不在列表中则纠正为 langs[0] */\nwatch(\n langs,\n (list) => {\n if (!list.length) return\n if (!lang.value || !list.includes(lang.value)) {\n lang.value = list[0]\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.dark,\n (dark) => {\n editor.value?.dispatch({ effects: themeCompartment.reconfigure(dark ? oneDark : []) })\n }\n)\n\nwatch(disabled, (v) => {\n editor.value?.dispatch({ effects: editableCompartment.reconfigure(EditorView.editable.of(!v)) })\n})\n\nwatch(readonly, (v) => {\n editor.value?.dispatch({ effects: readOnlyCompartment.reconfigure(EditorState.readOnly.of(v)) })\n})\n\nwatch(\n [model, editor, shellConfig],\n ([v, e], [, , prevShell]) => {\n if (!e) return\n // IME 组字中不接受外部回写,避免打断输入\n if (e.composing) return\n const config = shellConfig.value\n const shellChanged =\n !prevShell || prevShell.prefix !== config.prefix || prevShell.suffix !== config.suffix\n // 编辑器自身写出的 model 无需回写文档\n if (!shellChanged && v === lastEditorBody) return\n const body = v ?? ''\n syncDocFromModel(e, body, config, {\n reconfigureShell: shellChanged,\n prevShell: prevShell ?? config\n })\n lastEditorBody = body\n },\n { immediate: true }\n)\n\nonBeforeUnmount(destroyEditor)\n</script>\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ const LANG_LOADERS = {
5
5
  sql: () => import("../../node_modules/.bun/@codemirror_lang-sql@6.10.0/node_modules/@codemirror/lang-sql/dist/index.js").then((m) => m.sql()),
6
6
  java: () => import("../../node_modules/.bun/@codemirror_lang-java@6.0.2/node_modules/@codemirror/lang-java/dist/index.js").then((m) => m.java()),
7
7
  json: () => import("../../node_modules/.bun/@codemirror_lang-json@6.0.2/node_modules/@codemirror/lang-json/dist/index.js").then((m) => m.json()),
8
- markdown: () => import("../../node_modules/.bun/@codemirror_lang-markdown@6.5.1/node_modules/@codemirror/lang-markdown/dist/index.js").then((m) => m.markdown()),
8
+ markdown: () => import("../../node_modules/.bun/@codemirror_lang-markdown@6.5.2/node_modules/@codemirror/lang-markdown/dist/index.js").then((m) => m.markdown()),
9
9
  spel: () => import("./langs/spel/index.js").then((m) => m.spel()),
10
10
  bash: () => import("./langs/bash/index.js").then((m) => m.bash()),
11
11
  powershell: () => import("./langs/powershell/index.js").then((m) => m.powershell())
@@ -1,5 +1,5 @@
1
- import { EditorSelection, EditorState, RangeSetBuilder, StateField } from "../../node_modules/.bun/@codemirror_state@6.7.0/node_modules/@codemirror/state/dist/index.js";
2
- import { Decoration, EditorView } from "../../node_modules/.bun/@codemirror_view@6.43.4/node_modules/@codemirror/view/dist/index.js";
1
+ import { EditorSelection, EditorState, RangeSetBuilder, StateField } from "../../node_modules/.bun/@codemirror_state@6.7.1/node_modules/@codemirror/state/dist/index.js";
2
+ import { Decoration, EditorView } from "../../node_modules/.bun/@codemirror_view@6.43.8/node_modules/@codemirror/view/dist/index.js";
3
3
  //#region src/components/code-editor/shell-extension.ts
4
4
  /**
5
5
  * 判断 Text 文档是否与外壳对齐。
@@ -1,8 +1,9 @@
1
1
  import _sfc_main$1 from "../icon/icon.js";
2
2
  import { CollapseDIKey } from "./di.js";
3
3
  import { computed, createBlock, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, resolveDynamicComponent, toDisplayString, unref, watch, withCtx, withKeys, withModifiers } from "vue";
4
- import { bem } from "@veltra/utils";
5
- import { ArrowRight } from "@veltra/icons/normal";
4
+ import { useModel as useModel$1 } from "@veltra/compositions";
5
+ import { ExpandTransition, bem } from "@veltra/utils";
6
+ import { ArrowDown } from "@veltra/icons/normal";
6
7
  //#region src/components/collapse/collapse-item.vue
7
8
  const _hoisted_1 = [
8
9
  "aria-expanded",
@@ -16,15 +17,30 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
16
17
  __name: "collapse-item",
17
18
  props: {
18
19
  value: {},
20
+ modelValue: {
21
+ type: Boolean,
22
+ default: false
23
+ },
19
24
  title: {},
20
- disabled: { type: Boolean }
25
+ disabled: { type: Boolean },
26
+ expandIcon: {}
21
27
  },
22
- setup(__props) {
28
+ emits: ["update:modelValue", "change"],
29
+ setup(__props, { emit: __emit }) {
23
30
  const props = __props;
24
- const context = inject(CollapseDIKey);
31
+ const emit = __emit;
32
+ const context = inject(CollapseDIKey, void 0);
25
33
  const cls = context?.cls ?? bem("collapse");
26
- const isActive = computed(() => !!context?.activeValues.value.includes(props.value));
27
- const iconComponent = computed(() => context?.expandIcon.value ?? ArrowRight);
34
+ const standaloneModel = useModel$1({
35
+ props,
36
+ emit,
37
+ defaultValue: false
38
+ });
39
+ const isActive = computed(() => {
40
+ if (context) return props.value !== void 0 && context.activeValues.value.includes(props.value);
41
+ return !!standaloneModel.value;
42
+ });
43
+ const iconComponent = computed(() => context?.expandIcon.value ?? props.expandIcon ?? ArrowDown);
28
44
  const classList = computed(() => [
29
45
  cls.e("item"),
30
46
  bem.is("active", isActive.value),
@@ -35,14 +51,21 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
35
51
  bem.is("disabled", props.disabled),
36
52
  bem.is("active", isActive.value)
37
53
  ]);
54
+ const expandTransition = context?.expandTransition ?? new ExpandTransition({ transition: "height 0.24s cubic-bezier(0.4, 0, 0.2, 1)" });
38
55
  const handleClick = () => {
39
56
  if (props.disabled) return;
40
- context?.toggle(props.value);
57
+ if (context) {
58
+ if (props.value === void 0) return;
59
+ context.toggle(props.value);
60
+ return;
61
+ }
62
+ const next = !standaloneModel.value;
63
+ standaloneModel.value = next;
64
+ emit("change", next);
41
65
  };
42
66
  const wrapperEl = ref();
43
- const { expandTransition } = context;
44
67
  onMounted(() => {
45
- context?.register(props.value);
68
+ if (context && props.value !== void 0) context.register(props.value);
46
69
  if (!wrapperEl.value) return;
47
70
  expandTransition.setExpanded(wrapperEl.value, isActive.value);
48
71
  });
@@ -51,7 +74,7 @@ const _sfc_main = /*@__PURE__*/ defineComponent({
51
74
  active ? expandTransition.expand(wrapperEl.value) : expandTransition.collapse(wrapperEl.value);
52
75
  });
53
76
  onBeforeUnmount(() => {
54
- context?.unregister(props.value);
77
+ if (context && props.value !== void 0) context.unregister(props.value);
55
78
  if (!wrapperEl.value) return;
56
79
  expandTransition.cancel(wrapperEl.value);
57
80
  });
@@ -1 +1 @@
1
- {"version":3,"file":"collapse-item.js","names":[],"sources":["../../../src/components/collapse/collapse-item.vue"],"sourcesContent":["<template>\n <div :class=\"classList\">\n <div\n :class=\"headerClassList\"\n role=\"button\"\n :aria-expanded=\"isActive\"\n :aria-disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"handleClick\"\n @keydown.enter.prevent=\"handleClick\"\n @keydown.space.prevent=\"handleClick\"\n >\n <span :class=\"cls.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </span>\n\n <span :class=\"cls.e('icon')\">\n <slot name=\"icon\" :is-active=\"isActive\">\n <UIcon><component :is=\"iconComponent\" /></UIcon>\n </slot>\n </span>\n </div>\n <div ref=\"wrapperEl\" :class=\"cls.e('content-wrapper')\" :aria-hidden=\"!isActive\">\n <div :class=\"cls.e('content')\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ArrowRight } from '@veltra/icons/normal'\nimport { bem } from '@veltra/utils'\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport type { CollapseItemProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({ name: 'UCollapseItem' })\n\nconst props = defineProps<CollapseItemProps>()\n\nconst context = inject(CollapseDIKey)!\n\nconst cls = context?.cls ?? bem('collapse')\n\nconst isActive = computed(() => !!context?.activeValues.value.includes(props.value))\n\nconst iconComponent = computed(() => context?.expandIcon.value ?? ArrowRight)\n\nconst classList = computed(() => [\n cls.e('item'),\n bem.is('active', isActive.value),\n bem.is('disabled', props.disabled)\n])\n\nconst headerClassList = computed(() => [\n cls.e('header'),\n bem.is('disabled', props.disabled),\n bem.is('active', isActive.value)\n])\n\nconst handleClick = () => {\n if (props.disabled) return\n context?.toggle(props.value)\n}\n\nconst wrapperEl = ref<HTMLElement>()\n\nconst { expandTransition } = context\n\nonMounted(() => {\n context?.register(props.value)\n if (!wrapperEl.value) return\n expandTransition.setExpanded(wrapperEl.value, isActive.value)\n})\n\nwatch(isActive, (active) => {\n if (!wrapperEl.value) return\n active ? expandTransition.expand(wrapperEl.value) : expandTransition.collapse(wrapperEl.value)\n})\n\nonBeforeUnmount(() => {\n context?.unregister(props.value)\n if (!wrapperEl.value) return\n expandTransition.cancel(wrapperEl.value)\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAyCA,MAAM,QAAQ;EAEd,MAAM,UAAU,OAAO,aAAa;EAEpC,MAAM,MAAM,SAAS,OAAO,IAAI,UAAU;EAE1C,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,aAAa,MAAM,SAAS,MAAM,KAAK,CAAC;EAEnF,MAAM,gBAAgB,eAAe,SAAS,WAAW,SAAS,UAAU;EAE5E,MAAM,YAAY,eAAe;GAC/B,IAAI,EAAE,MAAM;GACZ,IAAI,GAAG,UAAU,SAAS,KAAK;GAC/B,IAAI,GAAG,YAAY,MAAM,QAAQ;EACnC,CAAC;EAED,MAAM,kBAAkB,eAAe;GACrC,IAAI,EAAE,QAAQ;GACd,IAAI,GAAG,YAAY,MAAM,QAAQ;GACjC,IAAI,GAAG,UAAU,SAAS,KAAK;EACjC,CAAC;EAED,MAAM,oBAAoB;GACxB,IAAI,MAAM,UAAU;GACpB,SAAS,OAAO,MAAM,KAAK;EAC7B;EAEA,MAAM,YAAY,IAAiB;EAEnC,MAAM,EAAE,qBAAqB;EAE7B,gBAAgB;GACd,SAAS,SAAS,MAAM,KAAK;GAC7B,IAAI,CAAC,UAAU,OAAO;GACtB,iBAAiB,YAAY,UAAU,OAAO,SAAS,KAAK;EAC9D,CAAC;EAED,MAAM,WAAW,WAAW;GAC1B,IAAI,CAAC,UAAU,OAAO;GACtB,SAAS,iBAAiB,OAAO,UAAU,KAAK,IAAI,iBAAiB,SAAS,UAAU,KAAK;EAC/F,CAAC;EAED,sBAAsB;GACpB,SAAS,WAAW,MAAM,KAAK;GAC/B,IAAI,CAAC,UAAU,OAAO;GACtB,iBAAiB,OAAO,UAAU,KAAK;EACzC,CAAC;;uBAtFC,mBA0BM,OAAA,EA1BA,OAAK,eAAE,UAAA,KAAS,EAAA,GAAA,CACpB,mBAmBM,OAAA;IAlBH,OAAK,eAAE,gBAAA,KAAe;IACvB,MAAK;IACJ,iBAAe,SAAA;IACf,iBAAe,QAAA;IACf,UAAU,QAAA,WAAQ,KAAA;IAClB,SAAO;IACP,WAAO,CAAA,SAAA,cAAgB,aAAW,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA,GAAA,SAAA,cACX,aAAW,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA;OAEnC,mBAEO,QAAA,EAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,OAAA,CAAA,EAAA,GAAA,CACjB,WAAqC,KAAA,QAAA,SAAA,CAAA,SAAA,CAAA,gBAAA,gBAAf,QAAA,KAAK,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAG7B,mBAIO,QAAA,EAJA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,CACjB,WAEO,KAAA,QAAA,QAAA,EAFY,UAAW,SAAA,MAAQ,SAE/B,CADL,YAAgD,MAAA,WAAA,GAAA,MAAA;2BAAR,EAAA,UAAA,GAAjC,YAAiC,wBAAjB,cAAA,KAAa,CAAA,EAAA,CAAA;;gCAI1C,mBAIM,OAAA;aAJG;IAAJ,KAAI;IAAa,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,iBAAA,CAAA;IAAsB,eAAW,CAAG,SAAA;OACpE,mBAEM,OAAA,EAFA,OAAK,eAAE,MAAA,GAAA,CAAG,CAAC,EAAC,SAAA,CAAA,EAAA,GAAA,CAChB,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,UAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"collapse-item.js","names":[],"sources":["../../../src/components/collapse/collapse-item.vue"],"sourcesContent":["<template>\n <div :class=\"classList\">\n <div\n :class=\"headerClassList\"\n role=\"button\"\n :aria-expanded=\"isActive\"\n :aria-disabled=\"disabled\"\n :tabindex=\"disabled ? -1 : 0\"\n @click=\"handleClick\"\n @keydown.enter.prevent=\"handleClick\"\n @keydown.space.prevent=\"handleClick\"\n >\n <span :class=\"cls.e('title')\">\n <slot name=\"title\">{{ title }}</slot>\n </span>\n\n <span :class=\"cls.e('icon')\">\n <slot name=\"icon\" :is-active=\"isActive\">\n <UIcon><component :is=\"iconComponent\" /></UIcon>\n </slot>\n </span>\n </div>\n <div ref=\"wrapperEl\" :class=\"cls.e('content-wrapper')\" :aria-hidden=\"!isActive\">\n <div :class=\"cls.e('content')\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useModel } from '@veltra/compositions'\nimport { ArrowDown } from '@veltra/icons/normal'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, inject, onBeforeUnmount, onMounted, ref, watch } from 'vue'\n\nimport type { CollapseItemEmits, CollapseItemProps } from '../../types'\nimport { UIcon } from '../icon'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({ name: 'UCollapseItem' })\n\nconst props = withDefaults(defineProps<CollapseItemProps>(), { modelValue: false })\nconst emit = defineEmits<CollapseItemEmits>()\n\nconst context = inject(CollapseDIKey, undefined)\n\nconst cls = context?.cls ?? bem('collapse')\n\nconst standaloneModel = useModel<CollapseItemProps, 'modelValue'>({\n props,\n emit,\n defaultValue: false\n})\n\nconst isActive = computed(() => {\n if (context) {\n return props.value !== undefined && context.activeValues.value.includes(props.value)\n }\n return !!standaloneModel.value\n})\n\nconst iconComponent = computed(() => context?.expandIcon.value ?? props.expandIcon ?? ArrowDown)\n\nconst classList = computed(() => [\n cls.e('item'),\n bem.is('active', isActive.value),\n bem.is('disabled', props.disabled)\n])\n\nconst headerClassList = computed(() => [\n cls.e('header'),\n bem.is('disabled', props.disabled),\n bem.is('active', isActive.value)\n])\n\nconst expandTransition =\n context?.expandTransition ??\n new ExpandTransition({ transition: 'height 0.24s cubic-bezier(0.4, 0, 0.2, 1)' })\n\nconst handleClick = () => {\n if (props.disabled) return\n\n if (context) {\n if (props.value === undefined) return\n context.toggle(props.value)\n return\n }\n\n const next = !standaloneModel.value\n standaloneModel.value = next\n emit('change', next)\n}\n\nconst wrapperEl = ref<HTMLElement>()\n\nonMounted(() => {\n if (context && props.value !== undefined) {\n context.register(props.value)\n }\n if (!wrapperEl.value) return\n expandTransition.setExpanded(wrapperEl.value, isActive.value)\n})\n\nwatch(isActive, (active) => {\n if (!wrapperEl.value) return\n active ? expandTransition.expand(wrapperEl.value) : expandTransition.collapse(wrapperEl.value)\n})\n\nonBeforeUnmount(() => {\n if (context && props.value !== undefined) {\n context.unregister(props.value)\n }\n if (!wrapperEl.value) return\n expandTransition.cancel(wrapperEl.value)\n})\n</script>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"collapse.js","names":[],"sources":["../../../src/components/collapse/collapse.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" role=\"region\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useModel } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, ref } from 'vue'\n\nimport type { CollapseEmits, CollapseModelValue, CollapseProps, CollapseValue } from '../../types'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({ name: 'UCollapse' })\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n accordion: false,\n defaultCollapseAll: false\n})\nconst emit = defineEmits<CollapseEmits>()\n\nconst cls = bem('collapse')\n\nconst expandTransition = new ExpandTransition({\n transition: 'height 0.24s cubic-bezier(0.4, 0, 0.2, 1)'\n})\n\nconst { size } = useFormFallbackProps([props], { size: 'default' })\n\nconst expandIcon = computed(() => props.expandIcon)\n\nconst classList = computed(() => [cls.b, cls.m(size.value)])\n\nconst modelValue = useModel<CollapseProps, 'modelValue'>({ props, emit, propName: 'modelValue' })\n\nconst activeValues = computed<CollapseValue[]>(() => {\n const v = modelValue.value\n if (v === undefined || v === null) return []\n return Array.isArray(v) ? v : [v]\n})\n\nconst update = (next: CollapseModelValue) => {\n modelValue.value = next\n emit('change', next)\n}\n\nconst toggle = (value: CollapseValue) => {\n if (props.accordion) {\n update(activeValues.value[0] === value ? [] : value)\n return\n }\n\n const values = activeValues.value.slice()\n const index = values.indexOf(value)\n if (index > -1) values.splice(index, 1)\n else values.push(value)\n update(values)\n}\n\n// 收集子组件已注册的 values\nconst registeredValues = ref<CollapseValue[]>([])\n\n// 初始捕获 modelValue 是否具有有效初值\nconst hasInitialValue =\n modelValue.value !== undefined &&\n modelValue.value !== null &&\n (!Array.isArray(modelValue.value) || modelValue.value.length > 0)\n\nconst register = (value: CollapseValue) => {\n if (!registeredValues.value.includes(value)) {\n registeredValues.value.push(value)\n\n // 若默认展开全部(defaultCollapseAll 为 false)且外部未指定初始值,则自动展开该子项\n if (!props.defaultCollapseAll && !hasInitialValue) {\n if (props.accordion) {\n if (registeredValues.value.length === 1) {\n update(value)\n }\n } else {\n const current = Array.isArray(modelValue.value)\n ? modelValue.value\n : modelValue.value !== undefined && modelValue.value !== null\n ? [modelValue.value]\n : []\n if (!current.includes(value)) {\n update([...current, value])\n }\n }\n }\n }\n}\n\nconst unregister = (value: CollapseValue) => {\n const idx = registeredValues.value.indexOf(value)\n if (idx > -1) {\n registeredValues.value.splice(idx, 1)\n }\n}\n\nprovide(CollapseDIKey, {\n cls,\n size,\n expandIcon,\n activeValues,\n toggle,\n expandTransition,\n register,\n unregister\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,QAAQ;EAId,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,UAAU;EAE1B,MAAM,mBAAmB,IAAI,iBAAiB,EAC5C,YAAY,4CACd,CAAC;EAED,MAAM,EAAE,SAAS,qBAAqB,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;EAElE,MAAM,aAAa,eAAe,MAAM,UAAU;EAElD,MAAM,YAAY,eAAe,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC;EAE3D,MAAM,aAAa,WAAsC;GAAE;GAAO;GAAM,UAAU;EAAa,CAAC;EAEhG,MAAM,eAAe,eAAgC;GACnD,MAAM,IAAI,WAAW;GACrB,IAAI,MAAM,KAAA,KAAa,MAAM,MAAM,OAAO,CAAC;GAC3C,OAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;EAClC,CAAC;EAED,MAAM,UAAU,SAA6B;GAC3C,WAAW,QAAQ;GACnB,KAAK,UAAU,IAAI;EACrB;EAEA,MAAM,UAAU,UAAyB;GACvC,IAAI,MAAM,WAAW;IACnB,OAAO,aAAa,MAAM,OAAO,QAAQ,CAAC,IAAI,KAAK;IACnD;GACF;GAEA,MAAM,SAAS,aAAa,MAAM,MAAM;GACxC,MAAM,QAAQ,OAAO,QAAQ,KAAK;GAClC,IAAI,QAAQ,IAAI,OAAO,OAAO,OAAO,CAAC;QACjC,OAAO,KAAK,KAAK;GACtB,OAAO,MAAM;EACf;EAGA,MAAM,mBAAmB,IAAqB,CAAC,CAAC;EAGhD,MAAM,kBACJ,WAAW,UAAU,KAAA,KACrB,WAAW,UAAU,SACpB,CAAC,MAAM,QAAQ,WAAW,KAAK,KAAK,WAAW,MAAM,SAAS;EAEjE,MAAM,YAAY,UAAyB;GACzC,IAAI,CAAC,iBAAiB,MAAM,SAAS,KAAK,GAAG;IAC3C,iBAAiB,MAAM,KAAK,KAAK;IAGjC,IAAI,CAAC,MAAM,sBAAsB,CAAC,iBAChC,IAAI,MAAM;SACJ,iBAAiB,MAAM,WAAW,GACpC,OAAO,KAAK;IAAA,OAET;KACL,MAAM,UAAU,MAAM,QAAQ,WAAW,KAAK,IAC1C,WAAW,QACX,WAAW,UAAU,KAAA,KAAa,WAAW,UAAU,OACrD,CAAC,WAAW,KAAK,IACjB,CAAC;KACP,IAAI,CAAC,QAAQ,SAAS,KAAK,GACzB,OAAO,CAAC,GAAG,SAAS,KAAK,CAAC;IAE9B;GAEJ;EACF;EAEA,MAAM,cAAc,UAAyB;GAC3C,MAAM,MAAM,iBAAiB,MAAM,QAAQ,KAAK;GAChD,IAAI,MAAM,IACR,iBAAiB,MAAM,OAAO,KAAK,CAAC;EAExC;EAEA,QAAQ,eAAe;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;;uBA5GC,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,KAAS;IAAE,MAAK;OAC3B,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"collapse.js","names":[],"sources":["../../../src/components/collapse/collapse.vue"],"sourcesContent":["<template>\n <div :class=\"classList\" role=\"region\">\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { useFormFallbackProps, useModel } from '@veltra/compositions'\nimport { bem, ExpandTransition } from '@veltra/utils'\nimport { computed, provide, ref } from 'vue'\n\nimport type { CollapseEmits, CollapseModelValue, CollapseProps, CollapseValue } from '../../types'\nimport { CollapseDIKey } from './di'\n\ndefineOptions({ name: 'UCollapse' })\n\nconst props = withDefaults(defineProps<CollapseProps>(), {\n accordion: false,\n defaultCollapseAll: false\n})\nconst emit = defineEmits<CollapseEmits>()\n\nconst cls = bem('collapse')\n\nconst expandTransition = new ExpandTransition({\n transition: 'height 0.24s cubic-bezier(0.4, 0, 0.2, 1)'\n})\n\nconst { size } = useFormFallbackProps([props], { size: 'default' })\n\nconst expandIcon = computed(() => props.expandIcon)\n\nconst classList = computed(() => [cls.b, cls.m(size.value)])\n\nconst modelValue = useModel<CollapseProps, 'modelValue'>({ props, emit, propName: 'modelValue' })\n\nconst activeValues = computed<CollapseValue[]>(() => {\n const v = modelValue.value\n if (v === undefined || v === null) return []\n return Array.isArray(v) ? v : [v]\n})\n\nconst update = (next: CollapseModelValue) => {\n modelValue.value = next\n emit('change', next)\n}\n\nconst toggle = (value: CollapseValue) => {\n if (props.accordion) {\n update(activeValues.value[0] === value ? [] : value)\n return\n }\n\n const values = activeValues.value.slice()\n const index = values.indexOf(value)\n if (index > -1) values.splice(index, 1)\n else values.push(value)\n update(values)\n}\n\n// 收集子组件已注册的 values\nconst registeredValues = ref<CollapseValue[]>([])\n\n// 初始捕获 modelValue 是否具有有效初值\nconst hasInitialValue =\n modelValue.value !== undefined &&\n modelValue.value !== null &&\n (!Array.isArray(modelValue.value) || modelValue.value.length > 0)\n\nconst register = (value: CollapseValue) => {\n if (!registeredValues.value.includes(value)) {\n registeredValues.value.push(value)\n\n // 若默认展开全部(defaultCollapseAll 为 false)且外部未指定初始值,则自动展开该子项\n if (!props.defaultCollapseAll && !hasInitialValue) {\n if (props.accordion) {\n if (registeredValues.value.length === 1) {\n update(value)\n }\n } else {\n const current = Array.isArray(modelValue.value)\n ? modelValue.value\n : modelValue.value !== undefined && modelValue.value !== null\n ? [modelValue.value]\n : []\n if (!current.includes(value)) {\n update([...current, value])\n }\n }\n }\n }\n}\n\nconst unregister = (value: CollapseValue) => {\n const idx = registeredValues.value.indexOf(value)\n if (idx > -1) {\n registeredValues.value.splice(idx, 1)\n }\n}\n\nprovide(CollapseDIKey, {\n cls,\n size,\n expandIcon,\n activeValues,\n toggle,\n expandTransition,\n register,\n unregister\n})\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,QAAQ;EAId,MAAM,OAAO;EAEb,MAAM,MAAM,IAAI,UAAU;EAE1B,MAAM,mBAAmB,IAAI,iBAAiB,EAC5C,YAAY,4CACd,CAAC;EAED,MAAM,EAAE,SAAS,qBAAqB,CAAC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;EAElE,MAAM,aAAa,eAAe,MAAM,UAAU;EAElD,MAAM,YAAY,eAAe,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC;EAE3D,MAAM,aAAa,WAAsC;GAAE;GAAO;GAAM,UAAU;EAAa,CAAC;EAEhG,MAAM,eAAe,eAAgC;GACnD,MAAM,IAAI,WAAW;GACrB,IAAI,MAAM,KAAA,KAAa,MAAM,MAAM,OAAO,CAAC;GAC3C,OAAO,MAAM,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;EAClC,CAAC;EAED,MAAM,UAAU,SAA6B;GAC3C,WAAW,QAAQ;GACnB,KAAK,UAAU,IAAI;EACrB;EAEA,MAAM,UAAU,UAAyB;GACvC,IAAI,MAAM,WAAW;IACnB,OAAO,aAAa,MAAM,OAAO,QAAQ,CAAC,IAAI,KAAK;IACnD;GACF;GAEA,MAAM,SAAS,aAAa,MAAM,MAAM;GACxC,MAAM,QAAQ,OAAO,QAAQ,KAAK;GAClC,IAAI,QAAQ,IAAI,OAAO,OAAO,OAAO,CAAC;QACjC,OAAO,KAAK,KAAK;GACtB,OAAO,MAAM;EACf;EAGA,MAAM,mBAAmB,IAAqB,CAAC,CAAC;EAGhD,MAAM,kBACJ,WAAW,UAAU,KAAA,KACrB,WAAW,UAAU,SACpB,CAAC,MAAM,QAAQ,WAAW,KAAK,KAAK,WAAW,MAAM,SAAS;EAEjE,MAAM,YAAY,UAAyB;GACzC,IAAI,CAAC,iBAAiB,MAAM,SAAS,KAAK,GAAG;IAC3C,iBAAiB,MAAM,KAAK,KAAK;IAGjC,IAAI,CAAC,MAAM,sBAAsB,CAAC,iBAChC,IAAI,MAAM,WACJ;SAAA,iBAAiB,MAAM,WAAW,GACpC,OAAO,KAAK;IAAA,OAET;KACL,MAAM,UAAU,MAAM,QAAQ,WAAW,KAAK,IAC1C,WAAW,QACX,WAAW,UAAU,KAAA,KAAa,WAAW,UAAU,OACrD,CAAC,WAAW,KAAK,IACjB,CAAC;KACP,IAAI,CAAC,QAAQ,SAAS,KAAK,GACzB,OAAO,CAAC,GAAG,SAAS,KAAK,CAAC;IAE9B;GAEJ;EACF;EAEA,MAAM,cAAc,UAAyB;GAC3C,MAAM,MAAM,iBAAiB,MAAM,QAAQ,KAAK;GAChD,IAAI,MAAM,IACR,iBAAiB,MAAM,OAAO,KAAK,CAAC;EAExC;EAEA,QAAQ,eAAe;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;;GA5GC,OAAA,UAAA,GAAA,mBAEM,OAAA;IAFA,OAAK,eAAE,UAAA,KAAS;IAAE,MAAK;GAC3B,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,CAAA"}
@@ -1 +1 @@
1
- export { };
1
+ export {}