@robot-admin/naive-ui-components 0.13.2 → 0.13.6

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 (292) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +25 -5
  3. package/README_EN.md +17 -5
  4. package/dist/C_ActionBar.css +75 -63
  5. package/dist/C_ActionBar2.cjs +1 -1
  6. package/dist/C_ActionBar2.js +1 -1
  7. package/dist/C_AntV.css +249 -79
  8. package/dist/C_AntV2.cjs +3 -3
  9. package/dist/C_AntV2.js +2 -2
  10. package/dist/C_AudioPlayer.css +88 -76
  11. package/dist/C_AudioPlayer2.cjs +1 -1
  12. package/dist/C_AudioPlayer2.js +1 -1
  13. package/dist/C_AvatarGroup.css +32 -28
  14. package/dist/C_AvatarGroup2.cjs +1 -1
  15. package/dist/C_AvatarGroup2.js +1 -1
  16. package/dist/C_Breadcrumb.css +35 -17
  17. package/dist/C_Breadcrumb2.cjs +1 -1
  18. package/dist/C_Breadcrumb2.js +1 -1
  19. package/dist/C_Captcha.css +66 -53
  20. package/dist/C_Captcha2.cjs +1 -1
  21. package/dist/C_Captcha2.js +1 -1
  22. package/dist/C_Cascade.css +6 -2
  23. package/dist/C_Cascade2.cjs +1 -1
  24. package/dist/C_Cascade2.js +1 -1
  25. package/dist/C_Chat.css +40 -33
  26. package/dist/C_City.css +37 -32
  27. package/dist/C_City2.cjs +1 -1
  28. package/dist/C_City2.js +1 -1
  29. package/dist/C_Code.css +53 -40
  30. package/dist/C_Code2.cjs +1 -1
  31. package/dist/C_Code2.js +1 -1
  32. package/dist/C_CollapsePanel.css +68 -55
  33. package/dist/C_CollapsePanel2.cjs +1 -1
  34. package/dist/C_CollapsePanel2.js +1 -1
  35. package/dist/C_ContextMenu.css +68 -26
  36. package/dist/C_ContextMenu2.cjs +1 -1
  37. package/dist/C_ContextMenu2.js +1 -1
  38. package/dist/C_Cron.css +95 -68
  39. package/dist/C_Cron2.cjs +1 -1
  40. package/dist/C_Cron2.js +1 -1
  41. package/dist/C_Date.css +8 -1
  42. package/dist/C_Date2.cjs +1 -1
  43. package/dist/C_Date2.js +1 -1
  44. package/dist/C_Draggable.css +60 -51
  45. package/dist/C_Draggable2.cjs +1 -1
  46. package/dist/C_Draggable2.js +1 -1
  47. package/dist/C_Editor.css +23 -15
  48. package/dist/C_Editor2.cjs +1 -1
  49. package/dist/C_Editor2.js +1 -1
  50. package/dist/C_FilePreview.css +200 -90
  51. package/dist/C_FilePreview2.cjs +1 -1
  52. package/dist/C_FilePreview2.js +1 -1
  53. package/dist/C_Form.base.css +284 -224
  54. package/dist/C_Form.css +307 -239
  55. package/dist/C_Form2.cjs +1 -1
  56. package/dist/C_Form2.js +1 -1
  57. package/dist/C_FormModal.css +18 -8
  58. package/dist/C_FormModal2.cjs +1 -1
  59. package/dist/C_FormModal2.js +1 -1
  60. package/dist/C_FormSearch.css +58 -45
  61. package/dist/C_FormSearch2.cjs +1 -1
  62. package/dist/C_FormSearch2.js +1 -1
  63. package/dist/C_FormulaEditor.css +62 -37
  64. package/dist/C_FormulaEditor2.cjs +1 -1
  65. package/dist/C_FormulaEditor2.js +1 -1
  66. package/dist/C_FullCalendar.css +16 -3
  67. package/dist/C_FullCalendar2.cjs +1 -1
  68. package/dist/C_FullCalendar2.js +1 -1
  69. package/dist/C_GlobalSearch.css +121 -112
  70. package/dist/C_GlobalSearch2.cjs +1 -1
  71. package/dist/C_GlobalSearch2.js +1 -1
  72. package/dist/C_Guide.css +30 -18
  73. package/dist/C_Guide2.cjs +1 -1
  74. package/dist/C_Guide2.js +1 -1
  75. package/dist/C_Icon.css +24 -17
  76. package/dist/C_Icon2.cjs +1 -1
  77. package/dist/C_Icon2.js +1 -1
  78. package/dist/C_ImageCropper.css +39 -22
  79. package/dist/C_ImageCropper2.cjs +1 -1
  80. package/dist/C_ImageCropper2.js +1 -1
  81. package/dist/C_Language.css +30 -17
  82. package/dist/C_Language2.cjs +1 -1
  83. package/dist/C_Language2.js +1 -1
  84. package/dist/C_Loading.cjs +1 -0
  85. package/dist/C_Loading.css +119 -0
  86. package/dist/C_Loading.d.cts +2 -0
  87. package/dist/C_Loading.d.ts +2 -0
  88. package/dist/C_Loading.js +1 -0
  89. package/dist/C_Loading2.cjs +1 -0
  90. package/dist/C_Loading2.js +1 -0
  91. package/dist/C_Login.css +162 -137
  92. package/dist/C_Login.d.cts +1 -1
  93. package/dist/C_Login.d.ts +1 -1
  94. package/dist/C_Login2.cjs +1 -1
  95. package/dist/C_Login2.js +1 -1
  96. package/dist/C_Map.css +25 -4
  97. package/dist/C_Map2.cjs +1 -1
  98. package/dist/C_Map2.js +1 -1
  99. package/dist/C_Markdown.css +47 -42
  100. package/dist/C_Markdown.d.cts +1 -1
  101. package/dist/C_Markdown.d.ts +1 -1
  102. package/dist/C_Markdown2.cjs +1 -1
  103. package/dist/C_Markdown2.js +1 -1
  104. package/dist/C_Menu.css +7 -1
  105. package/dist/C_Menu.d.ts +1 -1
  106. package/dist/C_Menu2.cjs +1 -1
  107. package/dist/C_Menu2.js +1 -1
  108. package/dist/C_NotificationCenter.css +134 -90
  109. package/dist/C_NotificationCenter2.cjs +1 -1
  110. package/dist/C_NotificationCenter2.js +1 -1
  111. package/dist/C_OrgChart.css +10 -0
  112. package/dist/C_OrgChart.d.cts +1 -1
  113. package/dist/C_OrgChart.d.ts +1 -1
  114. package/dist/C_OrgChart2.cjs +1 -1
  115. package/dist/C_OrgChart2.js +1 -1
  116. package/dist/C_Progress.d.cts +1 -1
  117. package/dist/C_Progress.d.ts +1 -1
  118. package/dist/C_QRCode.css +12 -8
  119. package/dist/C_QRCode2.cjs +1 -1
  120. package/dist/C_QRCode2.js +1 -1
  121. package/dist/C_Signature.css +18 -14
  122. package/dist/C_Signature2.cjs +1 -1
  123. package/dist/C_Signature2.js +1 -1
  124. package/dist/C_Skeleton.css +5 -0
  125. package/dist/C_Skeleton.d.cts +1 -1
  126. package/dist/C_Skeleton.d.ts +1 -1
  127. package/dist/C_Skeleton2.cjs +1 -1
  128. package/dist/C_Skeleton2.js +1 -1
  129. package/dist/C_SplitPane.css +61 -39
  130. package/dist/C_SplitPane2.cjs +1 -1
  131. package/dist/C_SplitPane2.js +1 -1
  132. package/dist/C_Steps.css +42 -38
  133. package/dist/C_Steps.d.cts +1 -1
  134. package/dist/C_Steps.d.ts +1 -1
  135. package/dist/C_Steps2.cjs +1 -1
  136. package/dist/C_Steps2.js +1 -1
  137. package/dist/C_Table.base.css +585 -352
  138. package/dist/C_Table.cjs +1 -1
  139. package/dist/C_Table.css +608 -367
  140. package/dist/C_Table.d.ts +2 -2
  141. package/dist/C_Table.js +1 -1
  142. package/dist/C_TagsView.css +93 -55
  143. package/dist/C_TagsView.d.cts +1 -1
  144. package/dist/C_TagsView.d.ts +1 -1
  145. package/dist/C_TagsView2.cjs +1 -1
  146. package/dist/C_TagsView2.js +1 -1
  147. package/dist/C_Theme.css +24 -17
  148. package/dist/C_Theme.d.cts +1 -1
  149. package/dist/C_Theme.d.ts +1 -1
  150. package/dist/C_Timeline.css +47 -36
  151. package/dist/C_Timeline.d.cts +1 -1
  152. package/dist/C_Timeline.d.ts +1 -1
  153. package/dist/C_Transfer.css +86 -67
  154. package/dist/C_Transfer.d.cts +1 -1
  155. package/dist/C_Transfer.d.ts +1 -1
  156. package/dist/C_Transfer2.cjs +1 -1
  157. package/dist/C_Transfer2.js +1 -1
  158. package/dist/C_Tree.css +48 -33
  159. package/dist/C_Tree2.cjs +1 -1
  160. package/dist/C_Tree2.js +1 -1
  161. package/dist/C_Upload.css +104 -51
  162. package/dist/C_Upload2.cjs +1 -1
  163. package/dist/C_Upload2.js +1 -1
  164. package/dist/C_VideoPlayer.css +140 -69
  165. package/dist/C_VideoPlayer2.cjs +1 -1
  166. package/dist/C_VideoPlayer2.js +1 -1
  167. package/dist/C_VtableGantt.css +42 -19
  168. package/dist/C_VtableGantt.d.cts +1 -1
  169. package/dist/C_VtableGantt.d.ts +1 -1
  170. package/dist/C_VtableGantt2.cjs +1 -1
  171. package/dist/C_VtableGantt2.js +1 -1
  172. package/dist/C_WaterFall.css +32 -16
  173. package/dist/C_WaterFall2.cjs +1 -1
  174. package/dist/C_WaterFall2.js +1 -1
  175. package/dist/C_WorkFlow.css +332 -221
  176. package/dist/C_WorkFlow2.cjs +1 -1
  177. package/dist/C_WorkFlow2.js +1 -1
  178. package/dist/config.cjs +1 -1
  179. package/dist/config.js +1 -1
  180. package/dist/constants.d.cts +4 -4
  181. package/dist/constants.d.ts +4 -4
  182. package/dist/constants2.d.cts +4 -4
  183. package/dist/constants2.d.ts +4 -4
  184. package/dist/constants3.d.cts +3 -3
  185. package/dist/constants3.d.ts +3 -3
  186. package/dist/constants4.d.cts +6 -6
  187. package/dist/constants4.d.ts +6 -6
  188. package/dist/constants5.d.cts +2 -2
  189. package/dist/constants5.d.ts +2 -2
  190. package/dist/data.d.cts +8 -8
  191. package/dist/data.d.ts +8 -8
  192. package/dist/data2.cjs +1 -1
  193. package/dist/data2.js +1 -1
  194. package/dist/index.cjs +1 -1
  195. package/dist/index.d.cts +28 -27
  196. package/dist/index.d.ts +28 -27
  197. package/dist/index.js +1 -1
  198. package/dist/index.vue.d.cts +1 -1
  199. package/dist/index.vue.d.ts +1 -1
  200. package/dist/index10.vue.d.cts +5 -5
  201. package/dist/index10.vue.d.ts +3 -3
  202. package/dist/index11.vue.d.cts +3 -3
  203. package/dist/index11.vue.d.ts +2 -2
  204. package/dist/index12.vue.d.cts +2 -2
  205. package/dist/index13.vue.d.ts +1 -1
  206. package/dist/index14.vue.d.cts +1 -1
  207. package/dist/index14.vue.d.ts +11 -9
  208. package/dist/index15.vue.d.cts +11 -9
  209. package/dist/index15.vue.d.ts +3 -3
  210. package/dist/index16.vue.d.cts +3 -3
  211. package/dist/index16.vue.d.ts +13 -129
  212. package/dist/index17.vue.d.cts +13 -129
  213. package/dist/index17.vue.d.ts +129 -76
  214. package/dist/index18.vue.d.cts +129 -76
  215. package/dist/index18.vue.d.ts +75 -71
  216. package/dist/index19.vue.d.cts +75 -93
  217. package/dist/index19.vue.d.ts +68 -90
  218. package/dist/index2.vue.d.cts +2 -2
  219. package/dist/index2.vue.d.ts +2 -2
  220. package/dist/index20.vue.d.cts +87 -40
  221. package/dist/index20.vue.d.ts +87 -40
  222. package/dist/index21.vue.d.cts +40 -89
  223. package/dist/index21.vue.d.ts +40 -89
  224. package/dist/index22.vue.d.cts +95 -37
  225. package/dist/index22.vue.d.ts +95 -37
  226. package/dist/index23.vue.d.cts +34 -8
  227. package/dist/index23.vue.d.ts +34 -8
  228. package/dist/index24.vue.d.cts +12 -654
  229. package/dist/index24.vue.d.ts +12 -654
  230. package/dist/index25.vue.d.cts +650 -85
  231. package/dist/index25.vue.d.ts +650 -85
  232. package/dist/index26.vue.d.cts +85 -100
  233. package/dist/index26.vue.d.ts +85 -100
  234. package/dist/index27.vue.d.cts +92 -61
  235. package/dist/index27.vue.d.ts +92 -61
  236. package/dist/index28.vue.d.cts +80 -0
  237. package/dist/index28.vue.d.ts +80 -0
  238. package/dist/index3.vue.d.cts +5 -5
  239. package/dist/index3.vue.d.ts +5 -5
  240. package/dist/index5.vue.d.ts +2 -2
  241. package/dist/index6.vue.d.cts +2 -2
  242. package/dist/index6.vue.d.ts +1 -1
  243. package/dist/index7.vue.d.cts +1 -1
  244. package/dist/index7.vue.d.ts +2 -2
  245. package/dist/index8.vue.d.cts +2 -2
  246. package/dist/index8.vue.d.ts +3 -3
  247. package/dist/index9.vue.d.cts +3 -3
  248. package/dist/index9.vue.d.ts +5 -5
  249. package/dist/mapUtils.d.cts +2 -2
  250. package/dist/mapUtils.d.ts +2 -2
  251. package/dist/presets.d.cts +1 -1
  252. package/dist/presets.d.ts +1 -1
  253. package/dist/resolver.cjs +1 -1
  254. package/dist/resolver.d.cts +1 -1
  255. package/dist/resolver.d.ts +1 -1
  256. package/dist/resolver.js +1 -1
  257. package/dist/style.css +3205 -1982
  258. package/dist/useCollapsePanel.d.cts +2 -2
  259. package/dist/useCollapsePanel.d.ts +2 -2
  260. package/dist/useCropperCore.d.cts +8 -8
  261. package/dist/useCropperCore.d.ts +8 -8
  262. package/dist/useDraggableLayout.d.cts +5 -5
  263. package/dist/useDraggableLayout.d.ts +5 -5
  264. package/dist/useDynamicFormState.d.cts +2 -2
  265. package/dist/useDynamicFormState.d.ts +2 -2
  266. package/dist/useEdgeInteraction.d.cts +1 -1
  267. package/dist/useEdgeInteraction.d.ts +1 -1
  268. package/dist/useFullscreen.d.cts +2 -2
  269. package/dist/useFullscreen.d.ts +2 -2
  270. package/dist/useInfiniteScroll.d.cts +3 -3
  271. package/dist/useInfiniteScroll.d.ts +3 -3
  272. package/dist/useQRCode.d.cts +2 -2
  273. package/dist/useQRCode.d.ts +2 -2
  274. package/dist/useSearchState.d.cts +6 -6
  275. package/dist/useSearchState.d.ts +6 -6
  276. package/dist/useSignatureHistory.d.cts +6 -6
  277. package/dist/useSignatureHistory.d.ts +6 -6
  278. package/dist/useSplitResize.d.cts +4 -4
  279. package/dist/useSplitResize.d.ts +4 -4
  280. package/dist/useTableQuery.cjs +3 -3
  281. package/dist/useTableQuery.d.cts +3 -1
  282. package/dist/useTableQuery.d.ts +3 -1
  283. package/dist/useTableQuery.js +3 -3
  284. package/dist/useTimeSelection.d.cts +4 -4
  285. package/dist/useTimeSelection.d.ts +4 -4
  286. package/dist/useTreeOperations.d.cts +6 -6
  287. package/dist/useTreeOperations.d.ts +6 -6
  288. package/dist/useWorkflowValidation.d.cts +6 -6
  289. package/dist/useWorkflowValidation.d.ts +6 -6
  290. package/dist/verification.d.cts +2 -2
  291. package/dist/verification.d.ts +2 -2
  292. package/package.json +10 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @robot-admin/naive-ui-components
2
2
 
3
+ ## 0.13.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 新增 `C_Loading`:内置机器人数据扫描 SVG,随 Naive UI 主色变化,支持尺寸、文案和颜色配置,无在线图标、定时器或新增依赖。动画尊重系统减少动态效果设置,提供读屏状态说明。
8
+ - `C_Table` 默认使用新的加载态,并开放 `loading` 插槽;全量、按需及 base 样式入口均包含加载组件样式。加载过程继续保留已有表格内容,不改变请求或交互锁定逻辑。
9
+
10
+ ## 0.13.5
11
+
12
+ ### Patch Changes
13
+
14
+ - 发布构建同时校验第三方 CSS:将 Markdown 的通用动画类与关键帧、富文本编辑器的 no-scroll、地图的旧 VML 类限定在所属组件命名空间。兼容挂载在 body 的编辑器弹层;全量和按需样式共用同一隔离流程,宿主无需新增覆盖规则。供应商升级引入裸全局选择器时阻止发布。
15
+
16
+ ## 0.13.4
17
+
18
+ ### Patch Changes
19
+
20
+ - 移除 C_GlobalSearch 常驻导航按钮的背景模糊,保留渐变、边框和交互状态,修复 Chrome 高分屏窗口放大后正文区域被错误裁切的合成异常;搜索弹层仍保留独立的模糊效果,宿主无需添加样式覆盖或业务配置。
21
+
22
+ ## 0.13.3
23
+
24
+ ### Patch Changes
25
+
26
+ - 发布阶段生成组件自有的 scoped 工具类与图标样式,日期等组件不再依赖宿主 UnoCSS 扫描或额外 safelist;新增组件样式边界发布检查。隔离表格编辑标记、拖拽状态及引导触发器样式,聊天、时间线、穿梭框、菜单和音频组件使用通用主题变量及稳定的默认值。
27
+ - 修复 C_Icon 的真实加载与错误回退:处理不存在的图标、API 超时、来源切换竞态、UnoCSS 样式缺失及数字字符串尺寸,回退失败时始终保留内置离线 SVG;取消失效回调与定时器。C_AudioPlayer 在 KeepAlive 离开时暂停播放并取消待完成的播放状态更新。
28
+ - C_ContextMenu 获得、移动和恢复焦点时保留背景位置;区分打开前已完成的滚动通知、无关区域滚动和调用目标真正移动,避免菜单刚打开就消失。
29
+
3
30
  ## 0.13.2
4
31
 
5
32
  ### Patch Changes
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **基于 Naive UI 的 Vue 3 企业级组件库**
6
6
 
7
- 从 Robot Admin 中提炼的 53 个高质量业务组件,支持全量注册、按需导入(Tree-Shaking)和子路径独立导入。
7
+ 从 Robot Admin 中提炼的 54 个高质量业务组件,支持全量注册、按需导入(Tree-Shaking)和子路径独立导入。
8
8
 
9
9
  [![NPM Version](https://img.shields.io/npm/v/@robot-admin/naive-ui-components)](https://www.npmjs.com/package/@robot-admin/naive-ui-components)
10
10
  [![License](https://img.shields.io/npm/l/@robot-admin/naive-ui-components)](./LICENSE)
@@ -433,7 +433,18 @@ const config = defineTableConfig({
433
433
 
434
434
  `C_Login` 的“记住我”只保存用户名,不保存密码。短信验证码仅对格式正确的手机号触发事件;组件会立即开始本地倒计时,发送结果和服务端限流仍由宿主处理。`C_City` 在首次打开时才加载城市索引,字母跳转只作用于当前实例;默认触发器、字母和城市项均可用键盘操作。
435
435
 
436
- ### 📋 组件清单(53 个)
436
+ ### 表格加载态
437
+
438
+ `C_Table` 默认显示跟随主题主色的机器人 SVG 加载动画,保留已有数据,并遵循系统减少动态效果设置,无需页面配置。可通过 `loading` 插槽替换默认内容。独立的 `C_Loading` 支持 `size`(16–120,默认 48)、`label`(可选说明)和 `color`(可选颜色);原生 `NSpin` 使用时请关闭旋转,避免 SVG 整体转动:
439
+
440
+ ```vue
441
+ <NSpin :show="loading" :size="48" :rotate="false">
442
+ <template #icon><C_Loading /></template>
443
+ <section>页面内容</section>
444
+ </NSpin>
445
+ ```
446
+
447
+ ### 📋 组件清单(54 个)
437
448
 
438
449
  > 💡 所有组件均提供 **在线交互演示**,访问 [组件文档](https://www.tzagileteam.com/robot/components/preface) 可直接在页面中体验真实效果(通过 iframe 嵌入 Robot Admin 生产环境)。
439
450
 
@@ -442,6 +453,7 @@ const config = defineTableConfig({
442
453
  | 组件 | 说明 | 外部依赖 |
443
454
  | ---------------- | ----------------------- | ----------------------------- |
444
455
  | `C_Icon` | Iconify 图标封装 | `@iconify/vue` |
456
+ | `C_Loading` | 主题化 SVG 加载态 | - |
445
457
  | `C_Code` | 代码高亮显示 | `highlight.js` |
446
458
  | `C_Barcode` | 条形码生成器 | `@chenfengyuan/vue-barcode` |
447
459
  | `C_Captcha` | 拼图/ALTCHA 人机验证 | `vue3-puzzle-vcode`、`altcha` |
@@ -554,7 +566,7 @@ bun add vue naive-ui
554
566
 
555
567
  ```
556
568
  bun run build
557
- ├── 1. tsdown → 多入口打包(53 组件 ESM/CJS/DTS)
569
+ ├── 1. tsdown → 多入口打包(54 组件 ESM/CJS/DTS)
558
570
  ├── 2. sass CLI → 编译共享变量入口 → global-scss.css
559
571
  ├── 3. merge-css.js → 合并 Vue 编译后的 SFC CSS + 全局变量 → style.css
560
572
  ├── 4. gen-exports.js → 自动生成 package.json exports 映射
@@ -564,7 +576,7 @@ bun run build
564
576
 
565
577
  #### 技术要点
566
578
 
567
- - **构建引擎**:[tsdown](https://github.com/rolldown/tsdown)(基于 Rolldown),53 个独立入口并行编译
579
+ - **构建引擎**:[tsdown](https://github.com/rolldown/tsdown)(基于 Rolldown),54 个独立入口并行编译
568
580
  - **SCSS 处理**:自定义 `scssTransformPlugin` 在 Rolldown 管线内编译 SFC SCSS,独立 Sass CLI 仅编译共享变量入口
569
581
  - **CSS 合并**:构建后将 Vue 已完成 scoped 转换的 per-chunk CSS 与共享变量合并为单一 `style.css`,避免重复样式和原始 `:deep()` 选择器泄漏
570
582
  - **类型导出**:统一 `export *` barrel 模式,自动生成完整 `.d.ts`
@@ -579,7 +591,7 @@ bun run build
579
591
  ```
580
592
  dist/
581
593
  ├── index.js / index.cjs / index.d.ts # 主入口
582
- ├── C_Form.js / C_Form.cjs / C_Form.d.ts # 子路径入口(53 组件)
594
+ ├── C_Form.js / C_Form.cjs / C_Form.d.ts # 子路径入口(54 组件)
583
595
  ├── C_Form.base.css / C_Form.full.css # 基础/完整样式层级
584
596
  ├── C_Table.base.css / C_Table.full.css # 基础/完整样式层级
585
597
  ├── style.css # 合并后的全量样式
@@ -663,6 +675,14 @@ bun run release # 发布 Changesets 中待发布版本
663
675
 
664
676
  本仓库的 GitHub 变更日志生成器要求在执行 `bun run version` 时提供 `GITHUB_TOKEN`,不要将令牌写入仓库。Windows 下如果 `bun run release` 在 npm 的 `prepublishOnly` 重复验证阶段停滞,可先单独确认 `bun run verify` 成功,再在 PowerShell 中用 `$env:npm_config_ignore_scripts='true'; bun run release` 发布;该设置仅跳过已手动完成的重复生命周期验证,不应省略前一步。
665
677
 
678
+ ## 发布后的安全扫描记录(2026-10-06)
679
+
680
+ `0.13.5` 的 npm 产物与已验证产物内容一致。随后安全扫描更新了开发工具和解析依赖的锁文件,并将仓库 overrides 中的 `@xmldom/xmldom`、`fast-uri` 固定到 `0.8.15`、`3.1.8`;这部分仓库维护不覆盖已经发布的 npm 产物。
681
+
682
+ 当前扫描仍报告 [braces](https://github.com/advisories/GHSA-vfj7-8cjw-p6xm) 和 [sprintf-js](https://github.com/advisories/GHSA-hp3w-g68c-fv3c) 两项上游尚无发布修复版本的告警,`bun run check:audit` 仍非零退出。保留 CI 安全门禁和真实扫描结果;待上游发布修复后更新锁文件并复验。
683
+
684
+ 本机完整 `verify` 通过。同步后的 [GitHub CI](https://github.com/ChenyCHENYU/naive-ui-components/actions/runs/37463121552) 因账号 billing issue 未启动,不能将其写成远端验证通过;账号恢复后需重新运行。
685
+
666
686
  ## 📄 许可证
667
687
 
668
688
  MIT License
package/README_EN.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Enterprise-grade Vue 3 component library built on Naive UI**
6
6
 
7
- 53 production-ready business components extracted from Robot Admin, supporting global registration, on-demand imports (Tree-Shaking), and subpath imports.
7
+ 54 production-ready business components extracted from Robot Admin, supporting global registration, on-demand imports (Tree-Shaking), and subpath imports.
8
8
 
9
9
  [![NPM Version](https://img.shields.io/npm/v/@robot-admin/naive-ui-components)](https://www.npmjs.com/package/@robot-admin/naive-ui-components)
10
10
  [![License](https://img.shields.io/npm/l/@robot-admin/naive-ui-components)](./LICENSE)
@@ -374,7 +374,18 @@ With `require-server-verification`, a successful response must include a server
374
374
 
375
375
  `C_Login` remembers only the username, never the password. SMS events require a valid phone number; the local countdown starts immediately, while delivery results and server-side rate limits remain the host's responsibility. `C_City` loads its city index on first open and scopes letter navigation to its own instance; the default trigger, letters, and city items are keyboard-operable.
376
376
 
377
- ### 📋 Component List (53 Components)
377
+ ### Table loading
378
+
379
+ `C_Table` uses a robot SVG loading indicator in the theme's primary color by default, retains existing data, and respects reduced-motion preferences. No page configuration is required. Override the `loading` slot for custom content. The standalone `C_Loading` accepts `size` (16–120, default 48), optional `label`, and optional `color`. Disable rotation when using it with native `NSpin`:
380
+
381
+ ```vue
382
+ <NSpin :show="loading" :size="48" :rotate="false">
383
+ <template #icon><C_Loading /></template>
384
+ <section>Page content</section>
385
+ </NSpin>
386
+ ```
387
+
388
+ ### 📋 Component List (54 Components)
378
389
 
379
390
  > 💡 All components provide **interactive live demos**. Visit the [Component Docs](https://www.tzagileteam.com/robot/components/preface) to try them out in real-time (rendered via iframe from Robot Admin production).
380
391
 
@@ -383,6 +394,7 @@ With `require-server-verification`, a successful response must include a server
383
394
  | Component | Description | External Deps |
384
395
  | ---------------- | ------------------------- | ----------------------------- |
385
396
  | `C_Icon` | Iconify icon wrapper | `@iconify/vue` |
397
+ | `C_Loading` | Theme-aware SVG loading | - |
386
398
  | `C_Code` | Code highlighting | `highlight.js` |
387
399
  | `C_Barcode` | Barcode generator | `@chenfengyuan/vue-barcode` |
388
400
  | `C_Captcha` | Puzzle / ALTCHA captcha | `vue3-puzzle-vcode`, `altcha` |
@@ -495,7 +507,7 @@ Install optional peers per feature: `vue-router` for `C_Breadcrumb`/`C_TagsView`
495
507
 
496
508
  ```
497
509
  bun run build
498
- ├── 1. tsdown → Multi-entry bundling (53 components ESM/CJS/DTS)
510
+ ├── 1. tsdown → Multi-entry bundling (54 components ESM/CJS/DTS)
499
511
  ├── 2. sass CLI → Compile the shared-variable entry → global-scss.css
500
512
  ├── 3. merge-css.js → Merge Vue-compiled SFC CSS + global variables → style.css
501
513
  ├── 4. gen-exports.js → Auto-generate package.json exports map
@@ -505,7 +517,7 @@ bun run build
505
517
 
506
518
  #### Key Technical Details
507
519
 
508
- - **Build engine**: [tsdown](https://github.com/rolldown/tsdown) (Rolldown-based), 53 independent entries compiled in parallel
520
+ - **Build engine**: [tsdown](https://github.com/rolldown/tsdown) (Rolldown-based), 54 independent entries compiled in parallel
509
521
  - **SCSS processing**: Custom `scssTransformPlugin` compiles SFC SCSS within the Rolldown pipeline; standalone Sass CLI only compiles the shared-variable entry
510
522
  - **CSS merging**: Post-build merges Vue scoped-compiled per-chunk CSS with shared variables into a single `style.css`, avoiding duplicate styles and leaked raw `:deep()` selectors
511
523
  - **Type exports**: Unified `export *` barrel pattern with auto-generated `.d.ts`
@@ -520,7 +532,7 @@ bun run build
520
532
  ```
521
533
  dist/
522
534
  ├── index.js / index.cjs / index.d.ts # Main entry
523
- ├── C_Form.js / C_Form.cjs / C_Form.d.ts # Subpath entries (53 components)
535
+ ├── C_Form.js / C_Form.cjs / C_Form.d.ts # Subpath entries (54 components)
524
536
  ├── C_Form.base.css / C_Form.full.css # Base/full style tiers
525
537
  ├── C_Table.base.css / C_Table.full.css # Base/full style tiers
526
538
  ├── style.css # Merged full styles
@@ -1,54 +1,55 @@
1
- /* unplugin-vue-components disabled */.c-icon[data-v-711aedcd] {
1
+ /* unplugin-vue-components disabled */.c-icon[data-v-075758a0] {
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  justify-content: center;
5
+ position: relative;
6
+ flex-shrink: 0;
7
+ vertical-align: middle;
5
8
  user-select: none;
6
9
  transition: all 0.2s ease-in-out;
7
10
  }
8
- .c-icon--clickable[data-v-711aedcd] {
11
+ .c-icon--clickable[data-v-075758a0] {
9
12
  cursor: pointer;
10
13
  }
11
- .c-icon--clickable[data-v-711aedcd]:hover {
14
+ .c-icon--clickable[data-v-075758a0]:hover {
12
15
  opacity: 0.8;
13
16
  transform: scale(1.05);
14
17
  }
15
- .c-icon--clickable[data-v-711aedcd]:active {
18
+ .c-icon--clickable[data-v-075758a0]:active {
16
19
  transform: scale(0.95);
17
20
  }
18
- .c-icon--clickable[data-v-711aedcd]:focus-visible {
21
+ .c-icon--clickable[data-v-075758a0]:focus-visible {
19
22
  outline: 2px solid currentColor;
20
23
  outline-offset: 2px;
21
24
  border-radius: 4px;
22
25
  }
23
- .c-icon--loading[data-v-711aedcd] {
26
+ .c-icon--loading[data-v-075758a0] {
24
27
  opacity: 0.6;
25
28
  cursor: wait;
26
29
  }
27
- .c-icon--error[data-v-711aedcd] {
28
- opacity: 0.5;
29
- }
30
- .c-icon__loading[data-v-711aedcd] {
31
- position: relative;
30
+ .c-icon__loading[data-v-075758a0] {
31
+ position: absolute;
32
+ inset: 0;
32
33
  }
33
- .c-icon__spinner[data-v-711aedcd] {
34
+ .c-icon__spinner[data-v-075758a0] {
34
35
  width: 100%;
35
36
  height: 100%;
36
37
  border: 2px solid currentColor;
37
38
  border-radius: 50%;
38
39
  border-top-color: transparent;
39
- animation: spin-711aedcd 1s linear infinite;
40
+ animation: spin-075758a0 1s linear infinite;
40
41
  }
41
- .c-icon__error[data-v-711aedcd] {
42
+ .c-icon__error[data-v-075758a0] {
42
43
  font-size: 0.8em;
43
44
  opacity: 0.5;
44
45
  }
45
- .c-icon__rotatable[data-v-711aedcd] {
46
+ .c-icon__rotatable[data-v-075758a0] {
46
47
  transition: transform 0.3s ease-in-out;
47
48
  }
48
- .c-icon__flippable[data-v-711aedcd] {
49
+ .c-icon__flippable[data-v-075758a0] {
49
50
  transition: transform 0.3s ease-in-out;
50
51
  }
51
- @keyframes spin-711aedcd {
52
+ @keyframes spin-075758a0 {
52
53
  0% {
53
54
  transform: rotate(0deg);
54
55
  }
@@ -56,10 +57,16 @@
56
57
  transform: rotate(360deg);
57
58
  }
58
59
  }
60
+ /* unplugin-vue-components disabled */
61
+ /* layer: default */
62
+ .inline-flex[data-v-075758a0]{display:inline-flex;}
63
+ .transform[data-v-075758a0]{transform:translateX(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotateZ(var(--un-rotate-z)) skewX(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z));}
64
+ .px[data-v-075758a0]{padding-left:1rem;padding-right:1rem;}
65
+
59
66
 
60
67
  /* unplugin-vue-components disabled *//* 通用操作按钮组件样式 */
61
68
  /* ================= 主容器 ================= */
62
- .c-action-bar[data-v-3f0311cc] {
69
+ .c-action-bar[data-v-325a50d2] {
63
70
  display: flex;
64
71
  align-items: center;
65
72
  justify-content: space-between;
@@ -70,26 +77,26 @@
70
77
  border: 1px solid var(--c-border);
71
78
  transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
72
79
  }
73
- .c-action-bar.is-align-left[data-v-3f0311cc] {
80
+ .c-action-bar.is-align-left[data-v-325a50d2] {
74
81
  justify-content: flex-start;
75
82
  }
76
- .c-action-bar.is-align-center[data-v-3f0311cc] {
83
+ .c-action-bar.is-align-center[data-v-325a50d2] {
77
84
  justify-content: center;
78
85
  }
79
- .c-action-bar.is-align-right[data-v-3f0311cc] {
86
+ .c-action-bar.is-align-right[data-v-325a50d2] {
80
87
  justify-content: flex-end;
81
88
  }
82
- .c-action-bar.is-align-space-between[data-v-3f0311cc] {
89
+ .c-action-bar.is-align-space-between[data-v-325a50d2] {
83
90
  justify-content: space-between;
84
91
  }
85
- .c-action-bar.is-align-space-around[data-v-3f0311cc] {
92
+ .c-action-bar.is-align-space-around[data-v-325a50d2] {
86
93
  justify-content: space-around;
87
94
  }
88
- .c-action-bar.is-compact[data-v-3f0311cc] {
95
+ .c-action-bar.is-compact[data-v-325a50d2] {
89
96
  padding: 8px;
90
97
  margin-bottom: 8px;
91
98
  }
92
- .c-action-bar.is-inline[data-v-3f0311cc] {
99
+ .c-action-bar.is-inline[data-v-325a50d2] {
93
100
  padding: 0;
94
101
  margin-bottom: 0;
95
102
  background: transparent;
@@ -97,97 +104,97 @@
97
104
  border-radius: 0;
98
105
  box-shadow: none;
99
106
  }
100
- .c-action-bar.is-wrap[data-v-3f0311cc] {
107
+ .c-action-bar.is-wrap[data-v-325a50d2] {
101
108
  flex-wrap: wrap;
102
109
  gap: 8px;
103
110
  }
104
111
  @media (max-width: 768px) {
105
- .c-action-bar[data-v-3f0311cc] {
112
+ .c-action-bar[data-v-325a50d2] {
106
113
  flex-direction: column;
107
114
  gap: 12px;
108
115
  }
109
- .c-action-bar .actions-group[data-v-3f0311cc] {
116
+ .c-action-bar .actions-group[data-v-325a50d2] {
110
117
  width: 100%;
111
118
  justify-content: center;
112
119
  }
113
120
  }
114
121
 
115
122
  /* ================= 按钮组 ================= */
116
- .actions-group[data-v-3f0311cc] {
123
+ .actions-group[data-v-325a50d2] {
117
124
  display: flex;
118
125
  align-items: center;
119
126
  gap: 12px;
120
127
  flex-wrap: nowrap;
121
128
  }
122
- .actions-group.actions-left[data-v-3f0311cc] {
129
+ .actions-group.actions-left[data-v-325a50d2] {
123
130
  justify-content: flex-start;
124
131
  }
125
- .actions-group.actions-right[data-v-3f0311cc] {
132
+ .actions-group.actions-right[data-v-325a50d2] {
126
133
  justify-content: flex-end;
127
134
  }
128
- .c-action-bar.has-only-left.is-align-center .actions-group.actions-left[data-v-3f0311cc], .c-action-bar.has-only-right.is-align-center .actions-group.actions-right[data-v-3f0311cc] {
135
+ .c-action-bar.has-only-left.is-align-center .actions-group.actions-left[data-v-325a50d2], .c-action-bar.has-only-right.is-align-center .actions-group.actions-right[data-v-325a50d2] {
129
136
  width: 100%;
130
137
  justify-content: center;
131
138
  }
132
- .c-action-bar.has-only-left.is-align-space-between .actions-group.actions-left[data-v-3f0311cc], .c-action-bar.has-only-right.is-align-space-between .actions-group.actions-right[data-v-3f0311cc] {
139
+ .c-action-bar.has-only-left.is-align-space-between .actions-group.actions-left[data-v-325a50d2], .c-action-bar.has-only-right.is-align-space-between .actions-group.actions-right[data-v-325a50d2] {
133
140
  width: 100%;
134
141
  justify-content: space-between;
135
142
  }
136
- .c-action-bar.has-only-left.is-align-space-around .actions-group.actions-left[data-v-3f0311cc], .c-action-bar.has-only-right.is-align-space-around .actions-group.actions-right[data-v-3f0311cc] {
143
+ .c-action-bar.has-only-left.is-align-space-around .actions-group.actions-left[data-v-325a50d2], .c-action-bar.has-only-right.is-align-space-around .actions-group.actions-right[data-v-325a50d2] {
137
144
  width: 100%;
138
145
  justify-content: space-around;
139
146
  }
140
- .c-action-bar.has-only-left.is-align-right .actions-group.actions-left[data-v-3f0311cc] {
147
+ .c-action-bar.has-only-left.is-align-right .actions-group.actions-left[data-v-325a50d2] {
141
148
  width: 100%;
142
149
  justify-content: flex-end;
143
150
  }
144
- .c-action-bar.has-only-right.is-align-left .actions-group.actions-right[data-v-3f0311cc] {
151
+ .c-action-bar.has-only-right.is-align-left .actions-group.actions-right[data-v-325a50d2] {
145
152
  width: 100%;
146
153
  justify-content: flex-start;
147
154
  }
148
- .actions-group[data-v-3f0311cc] .n-button {
155
+ .actions-group[data-v-325a50d2] .n-button {
149
156
  transition: color 0.16s ease, background-color 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
150
157
  font-weight: 500;
151
158
  }
152
- .actions-group[data-v-3f0311cc] .n-button .n-icon {
159
+ .actions-group[data-v-325a50d2] .n-button .n-icon {
153
160
  transition: transform 0.3s ease;
154
161
  }
155
- .actions-group[data-v-3f0311cc] .n-button:hover:not(:disabled) {
162
+ .actions-group[data-v-325a50d2] .n-button:hover:not(:disabled) {
156
163
  transform: translateY(-1px);
157
164
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
158
165
  }
159
- .actions-group[data-v-3f0311cc] .n-button:hover:not(:disabled) .n-icon {
166
+ .actions-group[data-v-325a50d2] .n-button:hover:not(:disabled) .n-icon {
160
167
  transform: scale(1.1);
161
168
  }
162
- .actions-group[data-v-3f0311cc] .n-button:active:not(:disabled) {
169
+ .actions-group[data-v-325a50d2] .n-button:active:not(:disabled) {
163
170
  transform: translateY(0);
164
171
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
165
172
  }
166
- .actions-group[data-v-3f0311cc] .n-button:disabled {
173
+ .actions-group[data-v-325a50d2] .n-button:disabled {
167
174
  cursor: not-allowed;
168
175
  opacity: 0.5;
169
176
  }
170
- .actions-group[data-v-3f0311cc] .n-button.n-button--loading {
177
+ .actions-group[data-v-325a50d2] .n-button.n-button--loading {
171
178
  pointer-events: none;
172
179
  }
173
- .actions-group[data-v-3f0311cc] .n-button--primary-type:hover:not(:disabled) {
180
+ .actions-group[data-v-325a50d2] .n-button--primary-type:hover:not(:disabled) {
174
181
  box-shadow: 0 4px 12px rgba(24, 160, 88, 0.3);
175
182
  }
176
- .actions-group[data-v-3f0311cc] .n-button--info-type:hover:not(:disabled) {
183
+ .actions-group[data-v-325a50d2] .n-button--info-type:hover:not(:disabled) {
177
184
  box-shadow: 0 4px 12px rgba(42, 148, 125, 0.3);
178
185
  }
179
- .actions-group[data-v-3f0311cc] .n-button--success-type:hover:not(:disabled) {
186
+ .actions-group[data-v-325a50d2] .n-button--success-type:hover:not(:disabled) {
180
187
  box-shadow: 0 4px 12px rgba(99, 226, 183, 0.3);
181
188
  }
182
- .actions-group[data-v-3f0311cc] .n-button--warning-type:hover:not(:disabled) {
189
+ .actions-group[data-v-325a50d2] .n-button--warning-type:hover:not(:disabled) {
183
190
  box-shadow: 0 4px 12px rgba(240, 138, 0, 0.3);
184
191
  }
185
- .actions-group[data-v-3f0311cc] .n-button--error-type:hover:not(:disabled) {
192
+ .actions-group[data-v-325a50d2] .n-button--error-type:hover:not(:disabled) {
186
193
  box-shadow: 0 4px 12px rgba(208, 48, 80, 0.3);
187
194
  }
188
195
 
189
196
  /* ================= 中间插槽区域 ================= */
190
- .actions-center[data-v-3f0311cc] {
197
+ .actions-center[data-v-325a50d2] {
191
198
  display: flex;
192
199
  align-items: center;
193
200
  justify-content: center;
@@ -197,32 +204,32 @@
197
204
  }
198
205
 
199
206
  /* ================= 分隔线 ================= */
200
- .action-divider[data-v-3f0311cc] {
207
+ .action-divider[data-v-325a50d2] {
201
208
  margin: 0 8px !important;
202
209
  height: 20px;
203
210
  opacity: 0.3;
204
211
  transition: opacity 0.3s ease;
205
212
  }
206
- .action-divider[data-v-3f0311cc]:hover {
213
+ .action-divider[data-v-325a50d2]:hover {
207
214
  opacity: 0.6;
208
215
  }
209
216
 
210
217
  /* ================= 下拉菜单优化 ================= */
211
- [data-v-3f0311cc] .n-dropdown-option {
218
+ [data-v-325a50d2] .n-dropdown-option {
212
219
  transition: all 0.2s ease;
213
220
  }
214
- [data-v-3f0311cc] .n-dropdown-option:hover {
221
+ [data-v-325a50d2] .n-dropdown-option:hover {
215
222
  transform: translateX(4px);
216
223
  }
217
- [data-v-3f0311cc] .n-dropdown-option .n-icon {
224
+ [data-v-325a50d2] .n-dropdown-option .n-icon {
218
225
  transition: transform 0.2s ease;
219
226
  }
220
- [data-v-3f0311cc] .n-dropdown-option:hover .n-icon {
227
+ [data-v-325a50d2] .n-dropdown-option:hover .n-icon {
221
228
  transform: scale(1.15);
222
229
  }
223
230
 
224
231
  /* ================= 加载动画 ================= */
225
- @keyframes button-loading-3f0311cc {
232
+ @keyframes button-loading-325a50d2 {
226
233
  0% {
227
234
  opacity: 0.6;
228
235
  }
@@ -233,12 +240,12 @@
233
240
  opacity: 0.6;
234
241
  }
235
242
  }
236
- [data-v-3f0311cc] .n-button--loading {
237
- animation: button-loading-3f0311cc 1.5s ease-in-out infinite;
243
+ [data-v-325a50d2] .n-button--loading {
244
+ animation: button-loading-325a50d2 1.5s ease-in-out infinite;
238
245
  }
239
246
 
240
247
  /* ================= Tooltip 样式 ================= */
241
- [data-v-3f0311cc] .n-tooltip .n-tooltip__content {
248
+ [data-v-325a50d2] .n-tooltip .n-tooltip__content {
242
249
  font-size: 12px;
243
250
  padding: 6px 10px;
244
251
  border-radius: 4px;
@@ -247,16 +254,21 @@
247
254
  }
248
255
 
249
256
  /* ================= 暗黑模式适配 ================= */
250
- html.dark .c-action-bar[data-v-3f0311cc] {
257
+ html.dark .c-action-bar[data-v-325a50d2] {
251
258
  border-color: rgba(255, 255, 255, 0.09);
252
259
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
253
260
  }
254
- html.dark .actions-group[data-v-3f0311cc] .n-button:hover:not(:disabled) {
261
+ html.dark .actions-group[data-v-325a50d2] .n-button:hover:not(:disabled) {
255
262
  box-shadow: 0 4px 12px rgba(255, 255, 255, 0.1);
256
263
  }
257
- html.dark .action-divider[data-v-3f0311cc] {
264
+ html.dark .action-divider[data-v-325a50d2] {
258
265
  opacity: 0.15;
259
266
  }
260
- html.dark .action-divider[data-v-3f0311cc]:hover {
267
+ html.dark .action-divider[data-v-325a50d2]:hover {
261
268
  opacity: 0.4;
262
269
  }
270
+ /* unplugin-vue-components disabled */
271
+ /* layer: default */
272
+ .inline[data-v-325a50d2]{display:inline;}
273
+ .px[data-v-325a50d2]{padding-left:1rem;padding-right:1rem;}
274
+
@@ -1 +1 @@
1
- require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i=`mdi:gesture-tap-button`,a={align:`left`,size:`tiny`,gap:6,wrap:!1,showDivider:!1,dividerType:`vertical`,compact:!0,inline:!0},o={add:{label:`新增`,icon:`mdi:plus`,type:`primary`},create:{label:`新增`,icon:`mdi:plus`,type:`primary`},save:{label:`保存`,icon:`mdi:content-save-outline`,type:`primary`},confirm:{label:`确认`,icon:`mdi:check`,type:`primary`},cancel:{label:`取消`,icon:`mdi:close`},close:{label:`关闭`,icon:`mdi:close`},view:{label:`查看`,icon:`mdi:eye-outline`},edit:{label:`编辑`,icon:`mdi:pencil-outline`},delete:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},remove:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},refresh:{label:`刷新`,icon:`mdi:refresh`},import:{label:`导入`,icon:`mdi:file-import-outline`},export:{label:`导出`,icon:`mdi:file-export-outline`},print:{label:`打印`,icon:`mdi:printer-outline`},reset:{label:`重置`,icon:`mdi:restore`},columns:{label:`列设置`,icon:`mdi:view-column-outline`},fullscreen:{label:`全屏`,icon:`mdi:fullscreen`},settings:{label:`功能配置`,icon:`mdi:tune-variant`},more:{label:`更多`,icon:`mdi:dots-horizontal`}},s=e=>{let t=e.key?o[e.key]:void 0;return{...t,...e,label:e.label||t?.label||e.key||`操作`,icon:e.icon||t?.icon||i}},c=e=>typeof e==`function`?e():(0,n.unref)(e),l=e=>e,u={key:1,class:`actions-center`},d=(0,n.defineComponent)({name:`C_ActionBar`,__name:`index`,props:{actions:{default:()=>[]},leftActions:{default:()=>[]},rightActions:{default:()=>[]},config:{default:()=>({})}},emits:[`action-click`,`dropdown-click`],setup(t,{emit:i}){let o=t,l=i,d=(0,n.computed)(()=>({...a,...o.config})),f=(0,n.computed)(()=>{if(o.leftActions&&o.leftActions.length>0)return o.leftActions.filter(e=>m(e));if(o.actions.length>0){let e=o.rightActions&&o.rightActions.length>0,t=o.actions.some(e=>e.group===`right`);return!e&&!t?o.actions.filter(e=>m(e)):o.actions.filter(e=>e.group!==`right`&&m(e))}return[]}),p=(0,n.computed)(()=>o.rightActions&&o.rightActions.length>0?o.rightActions.filter(e=>m(e)):o.actions.filter(e=>e.group===`right`&&m(e))),m=e=>e.show===void 0?!0:c(e.show)??!0,h=(0,n.shallowReactive)(new Set),g=e=>c(e.disabled)||h.has(e),_=e=>c(e.loading)||h.has(e),v=async e=>{if(!(e.dropdown&&e.dropdown.length>0)&&!(g(e)||_(e))&&(l(`action-click`,e),e.onClick)){e.autoLoading!==!1&&h.add(e);try{await e.onClick()}finally{h.delete(e)}}},y=async(e,t)=>{l(`dropdown-click`,e,t),e.onClick&&await e.onClick()},b=(0,n.defineComponent)({name:`ActionButton`,props:{action:{type:Object,required:!0}},emits:[`click`,`dropdown-select`],setup(t,{emit:i}){let a=(0,n.computed)(()=>t.action),o=(0,n.computed)(()=>s(a.value)),l=(0,n.computed)(()=>o.value.size||d.value.size),u=(0,n.computed)(()=>({tiny:14,small:15,medium:16,large:18})[l.value]),f=(0,n.computed)(()=>o.value.dropdown?o.value.dropdown.filter(e=>e.show===void 0?!0:c(e.show)).map(t=>{let{icon:r}=t;return{key:t.key,label:t.label,icon:r?()=>(0,n.h)(e.t,{name:r,size:14,"aria-hidden":!0}):void 0,disabled:c(t.disabled)}}):[]),p=e=>{let t=o.value.dropdown?.find(t=>t.key===e);t&&i(`dropdown-select`,t)},m=t=>{let{icon:i}=o.value,s=(0,n.h)(r.NButton,{type:o.value.type||`default`,size:l.value,loading:_(a.value),disabled:g(a.value),...t,...o.value.buttonProps},{default:()=>o.value.label,icon:i?()=>(0,n.h)(e.t,{name:i,size:u.value,"aria-hidden":!0}):void 0});return o.value.directives&&o.value.directives.length>0?(0,n.withDirectives)(s,o.value.directives):s},h=()=>{let e=m({onClick:()=>i(`click`)});return o.value.tooltip?(0,n.h)(r.NTooltip,{placement:`top`},{trigger:()=>e,default:()=>o.value.tooltip}):e},v=()=>{let e=m();return(0,n.h)(r.NDropdown,{options:f.value,onSelect:p},{default:()=>e})};return()=>o.value.dropdown&&o.value.dropdown.length>0?v():h()}});return(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`c-action-bar`,{"is-compact":d.value.compact,"is-inline":d.value.inline,"is-wrap":d.value.wrap,[`is-align-${d.value.align}`]:!0,"has-only-left":f.value.length>0&&p.value.length===0&&!e.$slots.center,"has-only-right":p.value.length>0&&f.value.length===0&&!e.$slots.center}])},[f.value.length>0?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`actions-group actions-left`,style:(0,n.normalizeStyle)({gap:`${d.value.gap}px`})},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(f.value,(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:e.key||`left-${t}`},[(0,n.createVNode)((0,n.unref)(b),{action:e,onClick:t=>v(e),onDropdownSelect:t=>y(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),d.value.showDivider&&t<f.value.length-1&&d.value.dividerType===`vertical`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NDivider),{key:0,vertical:``,class:`action-divider`})):(0,n.createCommentVNode)(`v-if`,!0)],64))),128))],4)):(0,n.createCommentVNode)(`v-if`,!0),e.$slots.center?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[(0,n.renderSlot)(e.$slots,`center`,{},void 0,!0)])):(0,n.createCommentVNode)(`v-if`,!0),p.value.length>0?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:2,class:`actions-group actions-right`,style:(0,n.normalizeStyle)({gap:`${d.value.gap}px`})},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(p.value,(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:e.key||`right-${t}`},[(0,n.createVNode)((0,n.unref)(b),{action:e,onClick:t=>v(e),onDropdownSelect:t=>y(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),d.value.showDivider&&t<p.value.length-1&&d.value.dividerType===`vertical`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NDivider),{key:0,vertical:``,class:`action-divider`})):(0,n.createCommentVNode)(`v-if`,!0)],64))),128))],4)):(0,n.createCommentVNode)(`v-if`,!0)],2))}});var f=t.t(d,[[`__scopeId`,`data-v-3f0311cc`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
1
+ require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i=`mdi:gesture-tap-button`,a={align:`left`,size:`tiny`,gap:6,wrap:!1,showDivider:!1,dividerType:`vertical`,compact:!0,inline:!0},o={add:{label:`新增`,icon:`mdi:plus`,type:`primary`},create:{label:`新增`,icon:`mdi:plus`,type:`primary`},save:{label:`保存`,icon:`mdi:content-save-outline`,type:`primary`},confirm:{label:`确认`,icon:`mdi:check`,type:`primary`},cancel:{label:`取消`,icon:`mdi:close`},close:{label:`关闭`,icon:`mdi:close`},view:{label:`查看`,icon:`mdi:eye-outline`},edit:{label:`编辑`,icon:`mdi:pencil-outline`},delete:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},remove:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},refresh:{label:`刷新`,icon:`mdi:refresh`},import:{label:`导入`,icon:`mdi:file-import-outline`},export:{label:`导出`,icon:`mdi:file-export-outline`},print:{label:`打印`,icon:`mdi:printer-outline`},reset:{label:`重置`,icon:`mdi:restore`},columns:{label:`列设置`,icon:`mdi:view-column-outline`},fullscreen:{label:`全屏`,icon:`mdi:fullscreen`},settings:{label:`功能配置`,icon:`mdi:tune-variant`},more:{label:`更多`,icon:`mdi:dots-horizontal`}},s=e=>{let t=e.key?o[e.key]:void 0;return{...t,...e,label:e.label||t?.label||e.key||`操作`,icon:e.icon||t?.icon||i}},c=e=>typeof e==`function`?e():(0,n.unref)(e),l=e=>e,u={key:1,class:`actions-center`},d=(0,n.defineComponent)({name:`C_ActionBar`,__name:`index`,props:{actions:{default:()=>[]},leftActions:{default:()=>[]},rightActions:{default:()=>[]},config:{default:()=>({})}},emits:[`action-click`,`dropdown-click`],setup(t,{emit:i}){let o=t,l=i,d=(0,n.computed)(()=>({...a,...o.config})),f=(0,n.computed)(()=>{if(o.leftActions&&o.leftActions.length>0)return o.leftActions.filter(e=>m(e));if(o.actions.length>0){let e=o.rightActions&&o.rightActions.length>0,t=o.actions.some(e=>e.group===`right`);return!e&&!t?o.actions.filter(e=>m(e)):o.actions.filter(e=>e.group!==`right`&&m(e))}return[]}),p=(0,n.computed)(()=>o.rightActions&&o.rightActions.length>0?o.rightActions.filter(e=>m(e)):o.actions.filter(e=>e.group===`right`&&m(e))),m=e=>e.show===void 0?!0:c(e.show)??!0,h=(0,n.shallowReactive)(new Set),g=e=>c(e.disabled)||h.has(e),_=e=>c(e.loading)||h.has(e),v=async e=>{if(!(e.dropdown&&e.dropdown.length>0)&&!(g(e)||_(e))&&(l(`action-click`,e),e.onClick)){e.autoLoading!==!1&&h.add(e);try{await e.onClick()}finally{h.delete(e)}}},y=async(e,t)=>{l(`dropdown-click`,e,t),e.onClick&&await e.onClick()},b=(0,n.defineComponent)({name:`ActionButton`,props:{action:{type:Object,required:!0}},emits:[`click`,`dropdown-select`],setup(t,{emit:i}){let a=(0,n.computed)(()=>t.action),o=(0,n.computed)(()=>s(a.value)),l=(0,n.computed)(()=>o.value.size||d.value.size),u=(0,n.computed)(()=>({tiny:14,small:15,medium:16,large:18})[l.value]),f=(0,n.computed)(()=>o.value.dropdown?o.value.dropdown.filter(e=>e.show===void 0?!0:c(e.show)).map(t=>{let{icon:r}=t;return{key:t.key,label:t.label,icon:r?()=>(0,n.h)(e.t,{name:r,size:14,"aria-hidden":!0}):void 0,disabled:c(t.disabled)}}):[]),p=e=>{let t=o.value.dropdown?.find(t=>t.key===e);t&&i(`dropdown-select`,t)},m=t=>{let{icon:i}=o.value,s=(0,n.h)(r.NButton,{type:o.value.type||`default`,size:l.value,loading:_(a.value),disabled:g(a.value),...t,...o.value.buttonProps},{default:()=>o.value.label,icon:i?()=>(0,n.h)(e.t,{name:i,size:u.value,"aria-hidden":!0}):void 0});return o.value.directives&&o.value.directives.length>0?(0,n.withDirectives)(s,o.value.directives):s},h=()=>{let e=m({onClick:()=>i(`click`)});return o.value.tooltip?(0,n.h)(r.NTooltip,{placement:`top`},{trigger:()=>e,default:()=>o.value.tooltip}):e},v=()=>{let e=m();return(0,n.h)(r.NDropdown,{options:f.value,onSelect:p},{default:()=>e})};return()=>o.value.dropdown&&o.value.dropdown.length>0?v():h()}});return(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)([`c-action-bar`,{"is-compact":d.value.compact,"is-inline":d.value.inline,"is-wrap":d.value.wrap,[`is-align-${d.value.align}`]:!0,"has-only-left":f.value.length>0&&p.value.length===0&&!e.$slots.center,"has-only-right":p.value.length>0&&f.value.length===0&&!e.$slots.center}])},[f.value.length>0?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:0,class:`actions-group actions-left`,style:(0,n.normalizeStyle)({gap:`${d.value.gap}px`})},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(f.value,(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:e.key||`left-${t}`},[(0,n.createVNode)((0,n.unref)(b),{action:e,onClick:t=>v(e),onDropdownSelect:t=>y(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),d.value.showDivider&&t<f.value.length-1&&d.value.dividerType===`vertical`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NDivider),{key:0,vertical:``,class:`action-divider`})):(0,n.createCommentVNode)(`v-if`,!0)],64))),128))],4)):(0,n.createCommentVNode)(`v-if`,!0),e.$slots.center?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[(0,n.renderSlot)(e.$slots,`center`,{},void 0,!0)])):(0,n.createCommentVNode)(`v-if`,!0),p.value.length>0?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{key:2,class:`actions-group actions-right`,style:(0,n.normalizeStyle)({gap:`${d.value.gap}px`})},[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)(p.value,(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,{key:e.key||`right-${t}`},[(0,n.createVNode)((0,n.unref)(b),{action:e,onClick:t=>v(e),onDropdownSelect:t=>y(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),d.value.showDivider&&t<p.value.length-1&&d.value.dividerType===`vertical`?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NDivider),{key:0,vertical:``,class:`action-divider`})):(0,n.createCommentVNode)(`v-if`,!0)],64))),128))],4)):(0,n.createCommentVNode)(`v-if`,!0)],2))}});var f=t.t(d,[[`__scopeId`,`data-v-325a50d2`]]);Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return f}});
@@ -1 +1 @@
1
- import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,computed as r,createBlock as i,createCommentVNode as a,createElementBlock as o,createVNode as s,defineComponent as c,h as l,normalizeClass as u,normalizeStyle as d,openBlock as f,renderList as p,renderSlot as m,shallowReactive as h,unref as g,withDirectives as _}from"vue";import{NButton as v,NDivider as y,NDropdown as b,NTooltip as x}from"naive-ui";const S=`mdi:gesture-tap-button`,C={align:`left`,size:`tiny`,gap:6,wrap:!1,showDivider:!1,dividerType:`vertical`,compact:!0,inline:!0},w={add:{label:`新增`,icon:`mdi:plus`,type:`primary`},create:{label:`新增`,icon:`mdi:plus`,type:`primary`},save:{label:`保存`,icon:`mdi:content-save-outline`,type:`primary`},confirm:{label:`确认`,icon:`mdi:check`,type:`primary`},cancel:{label:`取消`,icon:`mdi:close`},close:{label:`关闭`,icon:`mdi:close`},view:{label:`查看`,icon:`mdi:eye-outline`},edit:{label:`编辑`,icon:`mdi:pencil-outline`},delete:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},remove:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},refresh:{label:`刷新`,icon:`mdi:refresh`},import:{label:`导入`,icon:`mdi:file-import-outline`},export:{label:`导出`,icon:`mdi:file-export-outline`},print:{label:`打印`,icon:`mdi:printer-outline`},reset:{label:`重置`,icon:`mdi:restore`},columns:{label:`列设置`,icon:`mdi:view-column-outline`},fullscreen:{label:`全屏`,icon:`mdi:fullscreen`},settings:{label:`功能配置`,icon:`mdi:tune-variant`},more:{label:`更多`,icon:`mdi:dots-horizontal`}},T=e=>{let t=e.key?w[e.key]:void 0;return{...t,...e,label:e.label||t?.label||e.key||`操作`,icon:e.icon||t?.icon||S}},E=e=>typeof e==`function`?e():g(e),D=e=>e,O={key:1,class:`actions-center`};var k=t(c({name:`C_ActionBar`,__name:`index`,props:{actions:{default:()=>[]},leftActions:{default:()=>[]},rightActions:{default:()=>[]},config:{default:()=>({})}},emits:[`action-click`,`dropdown-click`],setup(t,{emit:S}){let w=t,D=S,k=r(()=>({...C,...w.config})),A=r(()=>{if(w.leftActions&&w.leftActions.length>0)return w.leftActions.filter(e=>M(e));if(w.actions.length>0){let e=w.rightActions&&w.rightActions.length>0,t=w.actions.some(e=>e.group===`right`);return!e&&!t?w.actions.filter(e=>M(e)):w.actions.filter(e=>e.group!==`right`&&M(e))}return[]}),j=r(()=>w.rightActions&&w.rightActions.length>0?w.rightActions.filter(e=>M(e)):w.actions.filter(e=>e.group===`right`&&M(e))),M=e=>e.show===void 0?!0:E(e.show)??!0,N=h(new Set),P=e=>E(e.disabled)||N.has(e),F=e=>E(e.loading)||N.has(e),I=async e=>{if(!(e.dropdown&&e.dropdown.length>0)&&!(P(e)||F(e))&&(D(`action-click`,e),e.onClick)){e.autoLoading!==!1&&N.add(e);try{await e.onClick()}finally{N.delete(e)}}},L=async(e,t)=>{D(`dropdown-click`,e,t),e.onClick&&await e.onClick()},R=c({name:`ActionButton`,props:{action:{type:Object,required:!0}},emits:[`click`,`dropdown-select`],setup(t,{emit:n}){let i=r(()=>t.action),a=r(()=>T(i.value)),o=r(()=>a.value.size||k.value.size),s=r(()=>({tiny:14,small:15,medium:16,large:18})[o.value]),c=r(()=>a.value.dropdown?a.value.dropdown.filter(e=>e.show===void 0?!0:E(e.show)).map(t=>{let{icon:n}=t;return{key:t.key,label:t.label,icon:n?()=>l(e,{name:n,size:14,"aria-hidden":!0}):void 0,disabled:E(t.disabled)}}):[]),u=e=>{let t=a.value.dropdown?.find(t=>t.key===e);t&&n(`dropdown-select`,t)},d=t=>{let{icon:n}=a.value,r=l(v,{type:a.value.type||`default`,size:o.value,loading:F(i.value),disabled:P(i.value),...t,...a.value.buttonProps},{default:()=>a.value.label,icon:n?()=>l(e,{name:n,size:s.value,"aria-hidden":!0}):void 0});return a.value.directives&&a.value.directives.length>0?_(r,a.value.directives):r},f=()=>{let e=d({onClick:()=>n(`click`)});return a.value.tooltip?l(x,{placement:`top`},{trigger:()=>e,default:()=>a.value.tooltip}):e},p=()=>{let e=d();return l(b,{options:c.value,onSelect:u},{default:()=>e})};return()=>a.value.dropdown&&a.value.dropdown.length>0?p():f()}});return(e,t)=>(f(),o(`div`,{class:u([`c-action-bar`,{"is-compact":k.value.compact,"is-inline":k.value.inline,"is-wrap":k.value.wrap,[`is-align-${k.value.align}`]:!0,"has-only-left":A.value.length>0&&j.value.length===0&&!e.$slots.center,"has-only-right":j.value.length>0&&A.value.length===0&&!e.$slots.center}])},[A.value.length>0?(f(),o(`div`,{key:0,class:`actions-group actions-left`,style:d({gap:`${k.value.gap}px`})},[(f(!0),o(n,null,p(A.value,(e,t)=>(f(),o(n,{key:e.key||`left-${t}`},[s(g(R),{action:e,onClick:t=>I(e),onDropdownSelect:t=>L(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),k.value.showDivider&&t<A.value.length-1&&k.value.dividerType===`vertical`?(f(),i(g(y),{key:0,vertical:``,class:`action-divider`})):a(`v-if`,!0)],64))),128))],4)):a(`v-if`,!0),e.$slots.center?(f(),o(`div`,O,[m(e.$slots,`center`,{},void 0,!0)])):a(`v-if`,!0),j.value.length>0?(f(),o(`div`,{key:2,class:`actions-group actions-right`,style:d({gap:`${k.value.gap}px`})},[(f(!0),o(n,null,p(j.value,(e,t)=>(f(),o(n,{key:e.key||`right-${t}`},[s(g(R),{action:e,onClick:t=>I(e),onDropdownSelect:t=>L(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),k.value.showDivider&&t<j.value.length-1&&k.value.dividerType===`vertical`?(f(),i(g(y),{key:0,vertical:``,class:`action-divider`})):a(`v-if`,!0)],64))),128))],4)):a(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-3f0311cc`]]);export{D as a,S as i,C as n,T as o,w as r,k as t};
1
+ import{t as e}from"./C_Icon2.js";import{t}from"./export-helper.js";import{Fragment as n,computed as r,createBlock as i,createCommentVNode as a,createElementBlock as o,createVNode as s,defineComponent as c,h as l,normalizeClass as u,normalizeStyle as d,openBlock as f,renderList as p,renderSlot as m,shallowReactive as h,unref as g,withDirectives as _}from"vue";import{NButton as v,NDivider as y,NDropdown as b,NTooltip as x}from"naive-ui";const S=`mdi:gesture-tap-button`,C={align:`left`,size:`tiny`,gap:6,wrap:!1,showDivider:!1,dividerType:`vertical`,compact:!0,inline:!0},w={add:{label:`新增`,icon:`mdi:plus`,type:`primary`},create:{label:`新增`,icon:`mdi:plus`,type:`primary`},save:{label:`保存`,icon:`mdi:content-save-outline`,type:`primary`},confirm:{label:`确认`,icon:`mdi:check`,type:`primary`},cancel:{label:`取消`,icon:`mdi:close`},close:{label:`关闭`,icon:`mdi:close`},view:{label:`查看`,icon:`mdi:eye-outline`},edit:{label:`编辑`,icon:`mdi:pencil-outline`},delete:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},remove:{label:`删除`,icon:`mdi:delete-outline`,type:`error`},refresh:{label:`刷新`,icon:`mdi:refresh`},import:{label:`导入`,icon:`mdi:file-import-outline`},export:{label:`导出`,icon:`mdi:file-export-outline`},print:{label:`打印`,icon:`mdi:printer-outline`},reset:{label:`重置`,icon:`mdi:restore`},columns:{label:`列设置`,icon:`mdi:view-column-outline`},fullscreen:{label:`全屏`,icon:`mdi:fullscreen`},settings:{label:`功能配置`,icon:`mdi:tune-variant`},more:{label:`更多`,icon:`mdi:dots-horizontal`}},T=e=>{let t=e.key?w[e.key]:void 0;return{...t,...e,label:e.label||t?.label||e.key||`操作`,icon:e.icon||t?.icon||S}},E=e=>typeof e==`function`?e():g(e),D=e=>e,O={key:1,class:`actions-center`};var k=t(c({name:`C_ActionBar`,__name:`index`,props:{actions:{default:()=>[]},leftActions:{default:()=>[]},rightActions:{default:()=>[]},config:{default:()=>({})}},emits:[`action-click`,`dropdown-click`],setup(t,{emit:S}){let w=t,D=S,k=r(()=>({...C,...w.config})),A=r(()=>{if(w.leftActions&&w.leftActions.length>0)return w.leftActions.filter(e=>M(e));if(w.actions.length>0){let e=w.rightActions&&w.rightActions.length>0,t=w.actions.some(e=>e.group===`right`);return!e&&!t?w.actions.filter(e=>M(e)):w.actions.filter(e=>e.group!==`right`&&M(e))}return[]}),j=r(()=>w.rightActions&&w.rightActions.length>0?w.rightActions.filter(e=>M(e)):w.actions.filter(e=>e.group===`right`&&M(e))),M=e=>e.show===void 0?!0:E(e.show)??!0,N=h(new Set),P=e=>E(e.disabled)||N.has(e),F=e=>E(e.loading)||N.has(e),I=async e=>{if(!(e.dropdown&&e.dropdown.length>0)&&!(P(e)||F(e))&&(D(`action-click`,e),e.onClick)){e.autoLoading!==!1&&N.add(e);try{await e.onClick()}finally{N.delete(e)}}},L=async(e,t)=>{D(`dropdown-click`,e,t),e.onClick&&await e.onClick()},R=c({name:`ActionButton`,props:{action:{type:Object,required:!0}},emits:[`click`,`dropdown-select`],setup(t,{emit:n}){let i=r(()=>t.action),a=r(()=>T(i.value)),o=r(()=>a.value.size||k.value.size),s=r(()=>({tiny:14,small:15,medium:16,large:18})[o.value]),c=r(()=>a.value.dropdown?a.value.dropdown.filter(e=>e.show===void 0?!0:E(e.show)).map(t=>{let{icon:n}=t;return{key:t.key,label:t.label,icon:n?()=>l(e,{name:n,size:14,"aria-hidden":!0}):void 0,disabled:E(t.disabled)}}):[]),u=e=>{let t=a.value.dropdown?.find(t=>t.key===e);t&&n(`dropdown-select`,t)},d=t=>{let{icon:n}=a.value,r=l(v,{type:a.value.type||`default`,size:o.value,loading:F(i.value),disabled:P(i.value),...t,...a.value.buttonProps},{default:()=>a.value.label,icon:n?()=>l(e,{name:n,size:s.value,"aria-hidden":!0}):void 0});return a.value.directives&&a.value.directives.length>0?_(r,a.value.directives):r},f=()=>{let e=d({onClick:()=>n(`click`)});return a.value.tooltip?l(x,{placement:`top`},{trigger:()=>e,default:()=>a.value.tooltip}):e},p=()=>{let e=d();return l(b,{options:c.value,onSelect:u},{default:()=>e})};return()=>a.value.dropdown&&a.value.dropdown.length>0?p():f()}});return(e,t)=>(f(),o(`div`,{class:u([`c-action-bar`,{"is-compact":k.value.compact,"is-inline":k.value.inline,"is-wrap":k.value.wrap,[`is-align-${k.value.align}`]:!0,"has-only-left":A.value.length>0&&j.value.length===0&&!e.$slots.center,"has-only-right":j.value.length>0&&A.value.length===0&&!e.$slots.center}])},[A.value.length>0?(f(),o(`div`,{key:0,class:`actions-group actions-left`,style:d({gap:`${k.value.gap}px`})},[(f(!0),o(n,null,p(A.value,(e,t)=>(f(),o(n,{key:e.key||`left-${t}`},[s(g(R),{action:e,onClick:t=>I(e),onDropdownSelect:t=>L(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),k.value.showDivider&&t<A.value.length-1&&k.value.dividerType===`vertical`?(f(),i(g(y),{key:0,vertical:``,class:`action-divider`})):a(`v-if`,!0)],64))),128))],4)):a(`v-if`,!0),e.$slots.center?(f(),o(`div`,O,[m(e.$slots,`center`,{},void 0,!0)])):a(`v-if`,!0),j.value.length>0?(f(),o(`div`,{key:2,class:`actions-group actions-right`,style:d({gap:`${k.value.gap}px`})},[(f(!0),o(n,null,p(j.value,(e,t)=>(f(),o(n,{key:e.key||`right-${t}`},[s(g(R),{action:e,onClick:t=>I(e),onDropdownSelect:t=>L(t,e)},null,8,[`action`,`onClick`,`onDropdownSelect`]),k.value.showDivider&&t<j.value.length-1&&k.value.dividerType===`vertical`?(f(),i(g(y),{key:0,vertical:``,class:`action-divider`})):a(`v-if`,!0)],64))),128))],4)):a(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-325a50d2`]]);export{D as a,S as i,C as n,T as o,w as r,k as t};