@robot-admin/naive-ui-components 0.6.8 → 0.6.11

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 (177) hide show
  1. package/README.md +277 -261
  2. package/dist/C_AudioPlayer-DKRIGhi7.css.map +1 -0
  3. package/dist/C_AudioPlayer-DlB6eNsa.css.map +1 -0
  4. package/dist/C_AudioPlayer.cjs +1 -0
  5. package/dist/C_AudioPlayer.css +283 -0
  6. package/dist/C_AudioPlayer.d.cts +2 -0
  7. package/dist/C_AudioPlayer.d.ts +2 -0
  8. package/dist/C_AudioPlayer.js +1 -0
  9. package/dist/C_AudioPlayer.js.map +1 -0
  10. package/dist/C_AudioPlayer2.js +2 -0
  11. package/dist/C_AudioPlayer2.js.map +1 -0
  12. package/dist/C_AvatarGroup-D02zci-i.css.map +1 -0
  13. package/dist/C_AvatarGroup-DatHaUlY.css.map +1 -0
  14. package/dist/C_AvatarGroup.cjs +1 -0
  15. package/dist/C_AvatarGroup.css +107 -0
  16. package/dist/C_AvatarGroup.d.cts +2 -0
  17. package/dist/C_AvatarGroup.d.ts +2 -0
  18. package/dist/C_AvatarGroup.js +1 -0
  19. package/dist/C_AvatarGroup.js.map +1 -0
  20. package/dist/C_AvatarGroup2.js +2 -0
  21. package/dist/C_AvatarGroup2.js.map +1 -0
  22. package/dist/C_Barcode.d.cts +1 -1
  23. package/dist/C_Barcode.d.ts +1 -1
  24. package/dist/{C_Breadcrumb-B5PGpP5m.css.map → C_Breadcrumb-BiH0d9AI.css.map} +1 -1
  25. package/dist/{C_Breadcrumb-Cay7qluL.css.map → C_Breadcrumb-Bqqrl8nX.css.map} +1 -1
  26. package/dist/C_Breadcrumb.css +8 -2
  27. package/dist/C_Breadcrumb.d.cts +1 -1
  28. package/dist/C_Breadcrumb.d.ts +1 -1
  29. package/dist/C_Breadcrumb.js.map +1 -1
  30. package/dist/C_Breadcrumb2.js.map +1 -1
  31. package/dist/C_Captcha.d.cts +1 -1
  32. package/dist/C_Captcha.d.ts +1 -1
  33. package/dist/C_Cascade.d.cts +1 -1
  34. package/dist/C_Cascade.d.ts +1 -1
  35. package/dist/C_Chat-CcjZdAwu.css.map +1 -0
  36. package/dist/C_Chat-Diq7tyWU.css.map +1 -0
  37. package/dist/C_Chat.cjs +1 -0
  38. package/dist/C_Chat.css +395 -0
  39. package/dist/C_Chat.d.cts +2 -0
  40. package/dist/C_Chat.d.ts +2 -0
  41. package/dist/C_Chat.js +1 -0
  42. package/dist/C_Chat.js.map +1 -0
  43. package/dist/C_Chat2.js +2 -0
  44. package/dist/C_Chat2.js.map +1 -0
  45. package/dist/C_City.d.cts +1 -1
  46. package/dist/C_City.d.ts +1 -1
  47. package/dist/C_Code.d.cts +1 -1
  48. package/dist/C_Code.d.ts +1 -1
  49. package/dist/C_ContextMenu-B3Cgz_wJ.css.map +1 -0
  50. package/dist/C_ContextMenu-u1LixF3_.css.map +1 -0
  51. package/dist/C_ContextMenu.cjs +1 -0
  52. package/dist/C_ContextMenu.css +115 -0
  53. package/dist/C_ContextMenu.d.cts +2 -0
  54. package/dist/C_ContextMenu.d.ts +2 -0
  55. package/dist/C_ContextMenu.js +1 -0
  56. package/dist/C_ContextMenu.js.map +1 -0
  57. package/dist/C_ContextMenu2.js +2 -0
  58. package/dist/C_ContextMenu2.js.map +1 -0
  59. package/dist/C_Date.d.cts +1 -1
  60. package/dist/C_Date.d.ts +1 -1
  61. package/dist/C_Editor.d.cts +1 -1
  62. package/dist/C_Editor.d.ts +1 -1
  63. package/dist/C_Guide.d.cts +1 -1
  64. package/dist/C_Guide.d.ts +1 -1
  65. package/dist/C_Icon.d.cts +1 -1
  66. package/dist/C_Icon.d.ts +1 -1
  67. package/dist/C_Icon.js.map +1 -1
  68. package/dist/C_Icon2.js +1 -1
  69. package/dist/C_Icon2.js.map +1 -1
  70. package/dist/C_Language.d.cts +1 -1
  71. package/dist/C_Language.d.ts +1 -1
  72. package/dist/C_Language.js.map +1 -1
  73. package/dist/C_Language2.js +1 -1
  74. package/dist/C_Language2.js.map +1 -1
  75. package/dist/C_Login-BkdnkBKX.css.map +1 -0
  76. package/dist/C_Login-VkMM6OJ2.css.map +1 -0
  77. package/dist/C_Login.cjs +1 -0
  78. package/dist/C_Login.css +515 -0
  79. package/dist/C_Login.d.cts +2 -0
  80. package/dist/C_Login.d.ts +2 -0
  81. package/dist/C_Login.js +1 -0
  82. package/dist/C_Login.js.map +1 -0
  83. package/dist/C_Login2.js +2 -0
  84. package/dist/C_Login2.js.map +1 -0
  85. package/dist/C_Markdown.d.cts +1 -1
  86. package/dist/C_Markdown.d.ts +1 -1
  87. package/dist/C_Menu.d.cts +1 -1
  88. package/dist/C_Menu.d.ts +1 -1
  89. package/dist/C_Progress.d.cts +1 -1
  90. package/dist/C_Progress.d.ts +1 -1
  91. package/dist/C_Steps.d.cts +1 -1
  92. package/dist/C_Steps.d.ts +1 -1
  93. package/dist/C_TagsView.d.cts +1 -1
  94. package/dist/C_TagsView.d.ts +1 -1
  95. package/dist/C_Theme.d.cts +1 -1
  96. package/dist/C_Theme.d.ts +1 -1
  97. package/dist/C_Timeline-BIvw3f41.css.map +1 -0
  98. package/dist/C_Timeline-VsDfCv4Q.css.map +1 -0
  99. package/dist/C_Timeline.cjs +1 -0
  100. package/dist/C_Timeline.css +271 -0
  101. package/dist/C_Timeline.d.cts +2 -0
  102. package/dist/C_Timeline.d.ts +2 -0
  103. package/dist/C_Timeline.js +1 -0
  104. package/dist/C_Timeline.js.map +1 -0
  105. package/dist/C_Timeline2.js +2 -0
  106. package/dist/C_Timeline2.js.map +1 -0
  107. package/dist/C_Transfer-BOB6OBqS.css.map +1 -0
  108. package/dist/C_Transfer-Dpq7ezWC.css.map +1 -0
  109. package/dist/C_Transfer.cjs +1 -0
  110. package/dist/C_Transfer.css +193 -0
  111. package/dist/C_Transfer.d.cts +2 -0
  112. package/dist/C_Transfer.d.ts +2 -0
  113. package/dist/C_Transfer.js +1 -0
  114. package/dist/C_Transfer.js.map +1 -0
  115. package/dist/C_Transfer2.js +2 -0
  116. package/dist/C_Transfer2.js.map +1 -0
  117. package/dist/C_VtableGantt.d.cts +1 -1
  118. package/dist/C_VtableGantt.d.ts +1 -1
  119. package/dist/constants.d.ts +2 -2
  120. package/dist/constants2.d.ts +2 -2
  121. package/dist/constants4.d.ts +3 -3
  122. package/dist/constants5.d.ts +2 -2
  123. package/dist/data.d.ts +1 -1
  124. package/dist/index.cjs +1 -1
  125. package/dist/index.cjs.map +1 -1
  126. package/dist/index.d.cts +48 -41
  127. package/dist/index.d.ts +48 -41
  128. package/dist/index.js +1 -1
  129. package/dist/index.js.map +1 -1
  130. package/dist/index.vue.d.ts +1 -1
  131. package/dist/index10.vue.d.ts +41 -23
  132. package/dist/index11.vue.d.ts +80 -63
  133. package/dist/index12.vue.d.ts +48 -20
  134. package/dist/index13.vue.d.ts +23 -63
  135. package/dist/index14.vue.d.ts +21 -58
  136. package/dist/index15.vue.d.ts +65 -48
  137. package/dist/index16.vue.d.ts +16 -21
  138. package/dist/index17.vue.d.ts +106 -77
  139. package/dist/index18.vue.d.ts +74 -11
  140. package/dist/index19.vue.d.ts +58 -653
  141. package/dist/index2.vue.d.ts +75 -30
  142. package/dist/index20.vue.d.ts +55 -0
  143. package/dist/index21.vue.d.ts +33 -0
  144. package/dist/index22.vue.d.ts +88 -0
  145. package/dist/index23.vue.d.ts +18 -0
  146. package/dist/index24.vue.d.ts +112 -0
  147. package/dist/index25.vue.d.ts +81 -0
  148. package/dist/index26.vue.d.ts +662 -0
  149. package/dist/index3.vue.d.ts +77 -19
  150. package/dist/index4.vue.d.ts +29 -36
  151. package/dist/index5.vue.d.ts +19 -20
  152. package/dist/index6.vue.d.ts +36 -26
  153. package/dist/index7.vue.d.ts +23 -40
  154. package/dist/index8.vue.d.ts +117 -45
  155. package/dist/index9.vue.d.ts +19 -25
  156. package/dist/resolver.cjs +1 -1
  157. package/dist/resolver.cjs.map +1 -1
  158. package/dist/resolver.d.cts +1 -1
  159. package/dist/resolver.d.ts +1 -1
  160. package/dist/resolver.js +1 -1
  161. package/dist/resolver.js.map +1 -1
  162. package/dist/style.css +1920 -21
  163. package/dist/useCollapsePanel.d.ts +1 -1
  164. package/dist/useCropperCore.d.ts +4 -4
  165. package/dist/useDraggableLayout.d.ts +8 -8
  166. package/dist/useDynamicFormState.d.ts +10 -10
  167. package/dist/useEdgeInteraction.d.ts +1 -1
  168. package/dist/useInfiniteScroll.d.ts +2 -2
  169. package/dist/useModalEdit.d.ts +2 -2
  170. package/dist/useQRCode.d.ts +4 -4
  171. package/dist/useSearchState.d.ts +2 -2
  172. package/dist/useSignatureHistory.d.ts +1 -1
  173. package/dist/useSplitResize.d.ts +5 -5
  174. package/dist/useTimeSelection.d.ts +2 -2
  175. package/dist/useTreeOperations.d.ts +6 -6
  176. package/dist/useWorkflowValidation.d.ts +1 -1
  177. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_Timeline-VsDfCv4Q.css","names":[],"sources":["../src/components/C_Timeline/index.vue?vue&type=style&index=0&scoped=1ab24038&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled */.c-timeline[data-v-1ab24038] {\n --tl-bg: transparent;\n --tl-text-primary: var(--app-text-primary);\n --tl-text-secondary: var(--text-color-2);\n --tl-text-time: var(--text-color-3);\n --tl-line-color: color-mix(in srgb, var(--primary-color) 20%, var(--border-color));\n --tl-line-width: 3px;\n --tl-dot-size-sm: 10px;\n --tl-dot-size-md: 14px;\n --tl-dot-size-lg: 18px;\n --tl-dot-default: var(--text-color-3);\n --tl-dot-success: #18a058;\n --tl-dot-warning: #f0a020;\n --tl-dot-error: #d03050;\n --tl-dot-info: #2080f0;\n --tl-icon-size: 32px;\n --tl-icon-bg: var(--card-color);\n --tl-content-bg: var(--card-color);\n --tl-content-radius: 10px;\n --tl-content-padding: 14px 18px;\n --tl-tag-radius: 6px;\n --tl-gap: 32px;\n --tl-rail-left: 38px;\n --tl-horizontal-item-width: 220px;\n position: relative;\n background: var(--tl-bg);\n}\n.c-timeline.is-vertical[data-v-1ab24038] {\n display: flex;\n flex-direction: column;\n gap: var(--tl-gap);\n padding-left: var(--tl-rail-left);\n}\n.c-timeline__item[data-v-1ab24038] {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.c-timeline.is-vertical .c-timeline__item[data-v-1ab24038]::before {\n content: \"\";\n position: absolute;\n left: calc(-1 * var(--tl-rail-left) + 15px);\n top: 28px;\n bottom: calc(-1 * var(--tl-gap));\n width: var(--tl-line-width);\n border-radius: 2px;\n background: var(--tl-line-color);\n}\n.c-timeline.is-vertical .c-timeline__item[data-v-1ab24038]:last-child::before {\n display: none;\n}\n.c-timeline.is-vertical.is-line-dashed .c-timeline__item[data-v-1ab24038]::before {\n width: 0;\n background: none;\n border-left: var(--tl-line-width) dashed var(--tl-line-color);\n}\n.c-timeline.is-vertical.is-line-dotted .c-timeline__item[data-v-1ab24038]::before {\n width: 0;\n background: none;\n border-left: var(--tl-line-width) dotted var(--tl-line-color);\n}\n.c-timeline__dot[data-v-1ab24038] {\n position: absolute;\n left: calc(-1 * var(--tl-rail-left));\n top: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n z-index: 1;\n}\n.c-timeline__dot.is-dot[data-v-1ab24038] {\n width: var(--tl-dot-size-md);\n height: var(--tl-dot-size-md);\n background: var(--tl-dot-default);\n border: 3px solid var(--card-color);\n box-shadow: 0 0 0 2px var(--tl-dot-default);\n transform: translateX(calc(16px - 50%));\n}\n.c-timeline__dot.is-icon[data-v-1ab24038] {\n width: var(--tl-icon-size);\n height: var(--tl-icon-size);\n background: var(--tl-icon-bg);\n border: 2px solid var(--tl-line-color);\n box-shadow: 0 0 0 3px var(--card-color), 0 2px 8px rgba(0, 0, 0, 0.1);\n transform: translateX(calc(16px - 50%));\n font-size: 16px;\n}\n.c-timeline.is-small .c-timeline__dot.is-dot[data-v-1ab24038] {\n width: var(--tl-dot-size-sm);\n height: var(--tl-dot-size-sm);\n border-width: 2px;\n}\n.c-timeline.is-large .c-timeline__dot.is-dot[data-v-1ab24038] {\n width: var(--tl-dot-size-lg);\n height: var(--tl-dot-size-lg);\n border-width: 3px;\n}\n.c-timeline.is-small .c-timeline__dot.is-icon[data-v-1ab24038] {\n width: 24px;\n height: 24px;\n font-size: 12px;\n}\n.c-timeline.is-large .c-timeline__dot.is-icon[data-v-1ab24038] {\n width: 40px;\n height: 40px;\n font-size: 20px;\n}\n.c-timeline__header[data-v-1ab24038] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.c-timeline__title[data-v-1ab24038] {\n font-size: 15px;\n font-weight: 600;\n color: var(--tl-text-primary);\n line-height: 1.5;\n}\n.c-timeline__time[data-v-1ab24038] {\n display: inline-flex;\n align-items: center;\n padding: 1px 8px;\n font-size: 12px;\n color: var(--tl-text-time);\n white-space: nowrap;\n background: color-mix(in srgb, var(--border-color) 40%, transparent);\n border-radius: 4px;\n line-height: 1.6;\n}\n.c-timeline__tags[data-v-1ab24038] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n.c-timeline__tag[data-v-1ab24038] {\n display: inline-flex;\n align-items: center;\n padding: 2px 10px;\n font-size: 11px;\n font-weight: 500;\n border-radius: var(--tl-tag-radius);\n background: color-mix(in srgb, var(--primary-color) 10%, var(--card-color));\n color: var(--primary-color);\n border: 1px solid color-mix(in srgb, var(--primary-color) 20%, transparent);\n}\n.c-timeline__content[data-v-1ab24038] {\n padding: var(--tl-content-padding);\n background: var(--tl-content-bg);\n border-radius: var(--tl-content-radius);\n border: 1px solid var(--border-color);\n font-size: 13px;\n color: var(--tl-text-secondary);\n line-height: 1.7;\n}\n.c-timeline__collapse-trigger[data-v-1ab24038] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-top: 4px;\n font-size: 12px;\n color: var(--primary-color);\n cursor: pointer;\n user-select: none;\n transition: opacity 0.2s;\n}\n.c-timeline__collapse-trigger[data-v-1ab24038]:hover {\n opacity: 0.75;\n}\n.c-timeline__collapse-trigger .collapse-arrow[data-v-1ab24038] {\n transition: transform 0.25s;\n}\n.c-timeline__collapse-trigger.is-expanded .collapse-arrow[data-v-1ab24038] {\n transform: rotate(180deg);\n}\n.c-timeline__detail[data-v-1ab24038] {\n overflow: hidden;\n transition: max-height 0.3s ease, opacity 0.3s ease;\n}\n.c-timeline__detail.is-collapsed[data-v-1ab24038] {\n max-height: 0;\n opacity: 0;\n}\n.c-timeline__detail.is-expanded[data-v-1ab24038] {\n max-height: 600px;\n opacity: 1;\n}\n.c-timeline__pending[data-v-1ab24038] {\n position: relative;\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 13px;\n color: var(--tl-text-time);\n padding-top: 4px;\n padding-left: 4px;\n}\n.c-timeline__pending .pending-dot[data-v-1ab24038] {\n width: 10px;\n height: 10px;\n border-radius: 50%;\n background: var(--tl-dot-info);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--tl-dot-info) 20%, transparent);\n animation: tl-pulse-1ab24038 1.4s infinite;\n}\n.c-timeline.is-horizontal[data-v-1ab24038] {\n display: flex;\n overflow-x: auto;\n padding-bottom: 16px;\n padding-top: 40px;\n gap: 0;\n}\n.c-timeline.is-horizontal[data-v-1ab24038]::-webkit-scrollbar {\n height: 4px;\n}\n.c-timeline.is-horizontal[data-v-1ab24038]::-webkit-scrollbar-thumb {\n background: var(--border-color);\n border-radius: 2px;\n}\n.c-timeline.is-horizontal .c-timeline__item[data-v-1ab24038] {\n flex: 0 0 var(--tl-horizontal-item-width);\n position: relative;\n padding-top: 36px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.c-timeline.is-horizontal .c-timeline__item[data-v-1ab24038]::before {\n content: \"\";\n position: absolute;\n top: 14px;\n left: 24px;\n right: 0;\n height: var(--tl-line-width);\n border-radius: 2px;\n background: var(--tl-line-color);\n}\n.c-timeline.is-horizontal .c-timeline__item[data-v-1ab24038]:last-child::before {\n display: none;\n}\n.c-timeline.is-horizontal.is-line-dashed .c-timeline__item[data-v-1ab24038]::before {\n height: 0;\n background: none;\n border-top: var(--tl-line-width) dashed var(--tl-line-color);\n}\n.c-timeline.is-horizontal.is-line-dotted .c-timeline__item[data-v-1ab24038]::before {\n height: 0;\n background: none;\n border-top: var(--tl-line-width) dotted var(--tl-line-color);\n}\n.c-timeline.is-horizontal .c-timeline__dot[data-v-1ab24038] {\n left: 6px;\n top: 0;\n transform: none;\n}\n.c-timeline.is-horizontal .c-timeline__time[data-v-1ab24038] {\n margin-top: 2px;\n}\n@keyframes tl-pulse-1ab24038 {\n0%, 100% {\n opacity: 0.4;\n transform: scale(1);\n}\n50% {\n opacity: 1;\n transform: scale(1.15);\n}\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./C_Icon.js`);const e=require(`./C_Timeline.js`);exports.C_Timeline=e.t,exports.DEFAULT_TIMELINE_PROPS=e.n,exports.STATUS_COLOR_MAP=e.r;
@@ -0,0 +1,271 @@
1
+ /* unplugin-vue-components disabled */.c-timeline[data-v-1ab24038] {
2
+ --tl-bg: transparent;
3
+ --tl-text-primary: var(--app-text-primary);
4
+ --tl-text-secondary: var(--text-color-2);
5
+ --tl-text-time: var(--text-color-3);
6
+ --tl-line-color: color-mix(in srgb, var(--primary-color) 20%, var(--border-color));
7
+ --tl-line-width: 3px;
8
+ --tl-dot-size-sm: 10px;
9
+ --tl-dot-size-md: 14px;
10
+ --tl-dot-size-lg: 18px;
11
+ --tl-dot-default: var(--text-color-3);
12
+ --tl-dot-success: #18a058;
13
+ --tl-dot-warning: #f0a020;
14
+ --tl-dot-error: #d03050;
15
+ --tl-dot-info: #2080f0;
16
+ --tl-icon-size: 32px;
17
+ --tl-icon-bg: var(--card-color);
18
+ --tl-content-bg: var(--card-color);
19
+ --tl-content-radius: 10px;
20
+ --tl-content-padding: 14px 18px;
21
+ --tl-tag-radius: 6px;
22
+ --tl-gap: 32px;
23
+ --tl-rail-left: 38px;
24
+ --tl-horizontal-item-width: 220px;
25
+ position: relative;
26
+ background: var(--tl-bg);
27
+ }
28
+ .c-timeline.is-vertical[data-v-1ab24038] {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: var(--tl-gap);
32
+ padding-left: var(--tl-rail-left);
33
+ }
34
+ .c-timeline__item[data-v-1ab24038] {
35
+ position: relative;
36
+ display: flex;
37
+ flex-direction: column;
38
+ gap: 8px;
39
+ }
40
+ .c-timeline.is-vertical .c-timeline__item[data-v-1ab24038]::before {
41
+ content: "";
42
+ position: absolute;
43
+ left: calc(-1 * var(--tl-rail-left) + 15px);
44
+ top: 28px;
45
+ bottom: calc(-1 * var(--tl-gap));
46
+ width: var(--tl-line-width);
47
+ border-radius: 2px;
48
+ background: var(--tl-line-color);
49
+ }
50
+ .c-timeline.is-vertical .c-timeline__item[data-v-1ab24038]:last-child::before {
51
+ display: none;
52
+ }
53
+ .c-timeline.is-vertical.is-line-dashed .c-timeline__item[data-v-1ab24038]::before {
54
+ width: 0;
55
+ background: none;
56
+ border-left: var(--tl-line-width) dashed var(--tl-line-color);
57
+ }
58
+ .c-timeline.is-vertical.is-line-dotted .c-timeline__item[data-v-1ab24038]::before {
59
+ width: 0;
60
+ background: none;
61
+ border-left: var(--tl-line-width) dotted var(--tl-line-color);
62
+ }
63
+ .c-timeline__dot[data-v-1ab24038] {
64
+ position: absolute;
65
+ left: calc(-1 * var(--tl-rail-left));
66
+ top: 0;
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: center;
70
+ border-radius: 50%;
71
+ z-index: 1;
72
+ }
73
+ .c-timeline__dot.is-dot[data-v-1ab24038] {
74
+ width: var(--tl-dot-size-md);
75
+ height: var(--tl-dot-size-md);
76
+ background: var(--tl-dot-default);
77
+ border: 3px solid var(--card-color);
78
+ box-shadow: 0 0 0 2px var(--tl-dot-default);
79
+ transform: translateX(calc(16px - 50%));
80
+ }
81
+ .c-timeline__dot.is-icon[data-v-1ab24038] {
82
+ width: var(--tl-icon-size);
83
+ height: var(--tl-icon-size);
84
+ background: var(--tl-icon-bg);
85
+ border: 2px solid var(--tl-line-color);
86
+ box-shadow: 0 0 0 3px var(--card-color), 0 2px 8px rgba(0, 0, 0, 0.1);
87
+ transform: translateX(calc(16px - 50%));
88
+ font-size: 16px;
89
+ }
90
+ .c-timeline.is-small .c-timeline__dot.is-dot[data-v-1ab24038] {
91
+ width: var(--tl-dot-size-sm);
92
+ height: var(--tl-dot-size-sm);
93
+ border-width: 2px;
94
+ }
95
+ .c-timeline.is-large .c-timeline__dot.is-dot[data-v-1ab24038] {
96
+ width: var(--tl-dot-size-lg);
97
+ height: var(--tl-dot-size-lg);
98
+ border-width: 3px;
99
+ }
100
+ .c-timeline.is-small .c-timeline__dot.is-icon[data-v-1ab24038] {
101
+ width: 24px;
102
+ height: 24px;
103
+ font-size: 12px;
104
+ }
105
+ .c-timeline.is-large .c-timeline__dot.is-icon[data-v-1ab24038] {
106
+ width: 40px;
107
+ height: 40px;
108
+ font-size: 20px;
109
+ }
110
+ .c-timeline__header[data-v-1ab24038] {
111
+ display: flex;
112
+ align-items: center;
113
+ gap: 12px;
114
+ }
115
+ .c-timeline__title[data-v-1ab24038] {
116
+ font-size: 15px;
117
+ font-weight: 600;
118
+ color: var(--tl-text-primary);
119
+ line-height: 1.5;
120
+ }
121
+ .c-timeline__time[data-v-1ab24038] {
122
+ display: inline-flex;
123
+ align-items: center;
124
+ padding: 1px 8px;
125
+ font-size: 12px;
126
+ color: var(--tl-text-time);
127
+ white-space: nowrap;
128
+ background: color-mix(in srgb, var(--border-color) 40%, transparent);
129
+ border-radius: 4px;
130
+ line-height: 1.6;
131
+ }
132
+ .c-timeline__tags[data-v-1ab24038] {
133
+ display: flex;
134
+ gap: 6px;
135
+ flex-wrap: wrap;
136
+ }
137
+ .c-timeline__tag[data-v-1ab24038] {
138
+ display: inline-flex;
139
+ align-items: center;
140
+ padding: 2px 10px;
141
+ font-size: 11px;
142
+ font-weight: 500;
143
+ border-radius: var(--tl-tag-radius);
144
+ background: color-mix(in srgb, var(--primary-color) 10%, var(--card-color));
145
+ color: var(--primary-color);
146
+ border: 1px solid color-mix(in srgb, var(--primary-color) 20%, transparent);
147
+ }
148
+ .c-timeline__content[data-v-1ab24038] {
149
+ padding: var(--tl-content-padding);
150
+ background: var(--tl-content-bg);
151
+ border-radius: var(--tl-content-radius);
152
+ border: 1px solid var(--border-color);
153
+ font-size: 13px;
154
+ color: var(--tl-text-secondary);
155
+ line-height: 1.7;
156
+ }
157
+ .c-timeline__collapse-trigger[data-v-1ab24038] {
158
+ display: inline-flex;
159
+ align-items: center;
160
+ gap: 4px;
161
+ margin-top: 4px;
162
+ font-size: 12px;
163
+ color: var(--primary-color);
164
+ cursor: pointer;
165
+ user-select: none;
166
+ transition: opacity 0.2s;
167
+ }
168
+ .c-timeline__collapse-trigger[data-v-1ab24038]:hover {
169
+ opacity: 0.75;
170
+ }
171
+ .c-timeline__collapse-trigger .collapse-arrow[data-v-1ab24038] {
172
+ transition: transform 0.25s;
173
+ }
174
+ .c-timeline__collapse-trigger.is-expanded .collapse-arrow[data-v-1ab24038] {
175
+ transform: rotate(180deg);
176
+ }
177
+ .c-timeline__detail[data-v-1ab24038] {
178
+ overflow: hidden;
179
+ transition: max-height 0.3s ease, opacity 0.3s ease;
180
+ }
181
+ .c-timeline__detail.is-collapsed[data-v-1ab24038] {
182
+ max-height: 0;
183
+ opacity: 0;
184
+ }
185
+ .c-timeline__detail.is-expanded[data-v-1ab24038] {
186
+ max-height: 600px;
187
+ opacity: 1;
188
+ }
189
+ .c-timeline__pending[data-v-1ab24038] {
190
+ position: relative;
191
+ display: flex;
192
+ align-items: center;
193
+ gap: 10px;
194
+ font-size: 13px;
195
+ color: var(--tl-text-time);
196
+ padding-top: 4px;
197
+ padding-left: 4px;
198
+ }
199
+ .c-timeline__pending .pending-dot[data-v-1ab24038] {
200
+ width: 10px;
201
+ height: 10px;
202
+ border-radius: 50%;
203
+ background: var(--tl-dot-info);
204
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--tl-dot-info) 20%, transparent);
205
+ animation: tl-pulse-1ab24038 1.4s infinite;
206
+ }
207
+ .c-timeline.is-horizontal[data-v-1ab24038] {
208
+ display: flex;
209
+ overflow-x: auto;
210
+ padding-bottom: 16px;
211
+ padding-top: 40px;
212
+ gap: 0;
213
+ }
214
+ .c-timeline.is-horizontal[data-v-1ab24038]::-webkit-scrollbar {
215
+ height: 4px;
216
+ }
217
+ .c-timeline.is-horizontal[data-v-1ab24038]::-webkit-scrollbar-thumb {
218
+ background: var(--border-color);
219
+ border-radius: 2px;
220
+ }
221
+ .c-timeline.is-horizontal .c-timeline__item[data-v-1ab24038] {
222
+ flex: 0 0 var(--tl-horizontal-item-width);
223
+ position: relative;
224
+ padding-top: 36px;
225
+ display: flex;
226
+ flex-direction: column;
227
+ gap: 8px;
228
+ }
229
+ .c-timeline.is-horizontal .c-timeline__item[data-v-1ab24038]::before {
230
+ content: "";
231
+ position: absolute;
232
+ top: 14px;
233
+ left: 24px;
234
+ right: 0;
235
+ height: var(--tl-line-width);
236
+ border-radius: 2px;
237
+ background: var(--tl-line-color);
238
+ }
239
+ .c-timeline.is-horizontal .c-timeline__item[data-v-1ab24038]:last-child::before {
240
+ display: none;
241
+ }
242
+ .c-timeline.is-horizontal.is-line-dashed .c-timeline__item[data-v-1ab24038]::before {
243
+ height: 0;
244
+ background: none;
245
+ border-top: var(--tl-line-width) dashed var(--tl-line-color);
246
+ }
247
+ .c-timeline.is-horizontal.is-line-dotted .c-timeline__item[data-v-1ab24038]::before {
248
+ height: 0;
249
+ background: none;
250
+ border-top: var(--tl-line-width) dotted var(--tl-line-color);
251
+ }
252
+ .c-timeline.is-horizontal .c-timeline__dot[data-v-1ab24038] {
253
+ left: 6px;
254
+ top: 0;
255
+ transform: none;
256
+ }
257
+ .c-timeline.is-horizontal .c-timeline__time[data-v-1ab24038] {
258
+ margin-top: 2px;
259
+ }
260
+ @keyframes tl-pulse-1ab24038 {
261
+ 0%, 100% {
262
+ opacity: 0.4;
263
+ transform: scale(1);
264
+ }
265
+ 50% {
266
+ opacity: 1;
267
+ transform: scale(1.15);
268
+ }
269
+ }
270
+
271
+ /*# sourceMappingURL=C_Timeline-BIvw3f41.css.map*/
@@ -0,0 +1,2 @@
1
+ import { a as TimelineProps, i as TimelineItem, n as DEFAULT_TIMELINE_PROPS, r as STATUS_COLOR_MAP, t as _default } from "./index24.vue.js";
2
+ export { _default as C_Timeline, DEFAULT_TIMELINE_PROPS, STATUS_COLOR_MAP, type TimelineItem, type TimelineProps };
@@ -0,0 +1,2 @@
1
+ import { a as TimelineProps, i as TimelineItem, n as DEFAULT_TIMELINE_PROPS, r as STATUS_COLOR_MAP, t as _default } from "./index24.vue.js";
2
+ export { _default as C_Timeline, DEFAULT_TIMELINE_PROPS, STATUS_COLOR_MAP, type TimelineItem, type TimelineProps };
@@ -0,0 +1 @@
1
+ import"./C_Icon2.js";import{n as e,r as t,t as n}from"./C_Timeline2.js";export{n as C_Timeline,e as DEFAULT_TIMELINE_PROPS,t as STATUS_COLOR_MAP};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_Timeline.js","names":[],"sources":["../src/components/C_Timeline/types.ts","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue"],"sourcesContent":["/**\n * @Description: 时间线组件类型定义\n */\n\n/** 单条时间线节点 */\nexport interface TimelineItem {\n /** 唯一标识 */\n id: string | number\n /** 标题 */\n title: string\n /** 描述内容(支持 HTML 字符串) */\n content?: string\n /** 时间标签 */\n time?: string\n /** 节点颜色(CSS 颜色值) */\n color?: string\n /** 节点图标(Iconify 图标名) */\n icon?: string\n /** 节点状态 */\n status?: 'default' | 'success' | 'warning' | 'error' | 'info'\n /** 是否可展开/折叠详情 */\n collapsible?: boolean\n /** 初始是否展开 */\n defaultExpanded?: boolean\n /** 附加标签组 */\n tags?: Array<{ text: string; type?: string }>\n /** 自定义额外数据 */\n extra?: Record<string, unknown>\n}\n\n/** 组件 Props */\nexport interface TimelineProps {\n /** 时间线数据 */\n items: TimelineItem[]\n /** 布局方向 */\n mode?: 'vertical' | 'horizontal'\n /** 垂直模式下时间标签位置 */\n labelPlacement?: 'left' | 'right' | 'alternate'\n /** 是否显示尾部加载更多指示 */\n pending?: boolean\n /** 加载更多文案 */\n pendingText?: string\n /** 是否反转排列(最新在前) */\n reverse?: boolean\n /** 节点大小 */\n size?: 'small' | 'medium' | 'large'\n /** 连接线样式 */\n lineType?: 'solid' | 'dashed' | 'dotted'\n /** 是否显示时间标签 */\n showTime?: boolean\n}\n\n/** 默认 Props */\nexport const DEFAULT_TIMELINE_PROPS = {\n mode: 'vertical' as const,\n labelPlacement: 'right' as const,\n pending: false,\n pendingText: '加载中...',\n reverse: false,\n size: 'medium' as const,\n lineType: 'solid' as const,\n showTime: true,\n}\n\n/** 状态 → 颜色映射 */\nexport const STATUS_COLOR_MAP: Record<string, string> = {\n default: '',\n success: '#18a058',\n warning: '#f0a020',\n error: '#d03050',\n info: '#2080f0',\n}\n","/* unplugin-vue-components disabled */<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <template\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n >\n <div\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 节点圆点 / 图标 -->\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n\n <!-- 标题行 -->\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >\n {{ item.time }}\n </span>\n </div>\n\n <!-- 标签组 -->\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >\n {{ tag.text }}\n </span>\n </div>\n\n <!-- 内容区 -->\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <!-- 折叠触发器 -->\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </template>\n\n <!-- Pending 加载提示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","/* unplugin-vue-components disabled */<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <template\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n >\n <div\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 节点圆点 / 图标 -->\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n\n <!-- 标题行 -->\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >\n {{ item.time }}\n </span>\n </div>\n\n <!-- 标签组 -->\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >\n {{ tag.text }}\n </span>\n </div>\n\n <!-- 内容区 -->\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <!-- 折叠触发器 -->\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </template>\n\n <!-- Pending 加载提示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <template\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n >\n <div\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 节点圆点 / 图标 -->\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n\n <!-- 标题行 -->\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >\n {{ item.time }}\n </span>\n </div>\n\n <!-- 标签组 -->\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >\n {{ tag.text }}\n </span>\n </div>\n\n <!-- 内容区 -->\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <!-- 折叠触发器 -->\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </template>\n\n <!-- Pending 加载提示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
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,createElementVNode as s,createTextVNode as c,createVNode as l,defineComponent as u,normalizeClass as d,normalizeStyle as f,openBlock as p,ref as m,renderList as h,renderSlot as g,toDisplayString as _,watch as v}from"vue";const y={mode:`vertical`,labelPlacement:`right`,pending:!1,pendingText:`加载中...`,reverse:!1,size:`medium`,lineType:`solid`,showTime:!0},b={default:``,success:`#18a058`,warning:`#f0a020`,error:`#d03050`,info:`#2080f0`},x=[`onClick`],S={class:`c-timeline__title`},C={key:0,class:`c-timeline__time`},w={key:0,class:`c-timeline__tags`},T=[`innerHTML`],E=[`onClick`],D={key:0,class:`c-timeline__pending`};var O=t(u({name:`C_Timeline`,__name:`index`,props:{items:{default:()=>[]},mode:{default:y.mode},labelPlacement:{default:y.labelPlacement},pending:{type:Boolean,default:y.pending},pendingText:{default:y.pendingText},reverse:{type:Boolean,default:y.reverse},size:{default:y.size},lineType:{default:y.lineType},showTime:{type:Boolean,default:y.showTime}},emits:[`item-click`,`expand`],setup(t,{expose:u,emit:y}){let O=t,k=y,A=m({});v(()=>O.items,e=>{e.forEach(e=>{e.collapsible&&!(e.id in A.value)&&(A.value[e.id]=e.defaultExpanded??!1)})},{immediate:!0});let j=e=>{let t=!A.value[e.id];A.value[e.id]=t,k(`expand`,e,t)},M=r(()=>O.reverse?[...O.items].reverse():O.items),N=r(()=>[`c-timeline`,`is-${O.mode}`,`is-${O.size}`,`is-line-${O.lineType}`,`is-label-${O.labelPlacement}`]),P=e=>{let t=e.color||b[e.status||`default`]||void 0;return e.icon?{color:t,borderColor:t||void 0}:{background:t||void 0,boxShadow:t?`0 0 0 2px ${t}`:void 0}};return u({expandAll:()=>{O.items.forEach(e=>{e.collapsible&&(A.value[e.id]=!0)})},collapseAll:()=>{O.items.forEach(e=>{e.collapsible&&(A.value[e.id]=!1)})}}),(t,r)=>(p(),o(`div`,{class:d(N.value),role:`list`},[(p(!0),o(n,null,h(M.value,(r,u)=>(p(),o(`div`,{key:r.id,class:`c-timeline__item`,role:`listitem`},[a(` 节点圆点 / 图标 `),s(`span`,{class:d([`c-timeline__dot`,r.icon?`is-icon`:`is-dot`]),style:f(P(r))},[g(t.$slots,`dot`,{item:r,index:u},()=>[r.icon?(p(),i(e,{key:0,name:r.icon},null,8,[`name`])):a(`v-if`,!0)],!0)],6),a(` 标题行 `),s(`div`,{class:`c-timeline__header`,onClick:e=>k(`item-click`,r,u)},[g(t.$slots,`title`,{item:r,index:u},()=>[s(`span`,S,_(r.title),1)],!0),O.showTime&&r.time?(p(),o(`span`,C,_(r.time),1)):a(`v-if`,!0)],8,x),a(` 标签组 `),r.tags?.length?(p(),o(`div`,w,[(p(!0),o(n,null,h(r.tags,e=>(p(),o(`span`,{key:e.text,class:`c-timeline__tag`},_(e.text),1))),128))])):a(`v-if`,!0),a(` 内容区 `),r.content&&(!r.collapsible||A.value[r.id])?(p(),o(`div`,{key:1,class:d([`c-timeline__detail`,r.collapsible?A.value[r.id]?`is-expanded`:`is-collapsed`:`is-expanded`])},[s(`div`,{class:`c-timeline__content`,innerHTML:r.content},null,8,T)],2)):a(`v-if`,!0),a(` 折叠触发器 `),r.collapsible?(p(),o(`span`,{key:2,class:d([`c-timeline__collapse-trigger`,{"is-expanded":A.value[r.id]}]),onClick:e=>j(r)},[c(_(A.value[r.id]?`收起`:`展开详情`)+` `,1),l(e,{name:`mdi:chevron-down`,class:`collapse-arrow`})],10,E)):a(`v-if`,!0)]))),128)),a(` Pending 加载提示 `),O.pending?(p(),o(`div`,D,[r[0]||=s(`span`,{class:`pending-dot`},null,-1),s(`span`,null,_(O.pendingText),1)])):a(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-1ab24038`]]);export{y as n,b as r,O as t};
2
+ //# sourceMappingURL=C_Timeline2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_Timeline2.js","names":[],"sources":["../src/components/C_Timeline/types.ts","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue","../src/components/C_Timeline/index.vue"],"sourcesContent":["/**\n * @Description: 时间线组件类型定义\n */\n\n/** 单条时间线节点 */\nexport interface TimelineItem {\n /** 唯一标识 */\n id: string | number\n /** 标题 */\n title: string\n /** 描述内容(支持 HTML 字符串) */\n content?: string\n /** 时间标签 */\n time?: string\n /** 节点颜色(CSS 颜色值) */\n color?: string\n /** 节点图标(Iconify 图标名) */\n icon?: string\n /** 节点状态 */\n status?: 'default' | 'success' | 'warning' | 'error' | 'info'\n /** 是否可展开/折叠详情 */\n collapsible?: boolean\n /** 初始是否展开 */\n defaultExpanded?: boolean\n /** 附加标签组 */\n tags?: Array<{ text: string; type?: string }>\n /** 自定义额外数据 */\n extra?: Record<string, unknown>\n}\n\n/** 组件 Props */\nexport interface TimelineProps {\n /** 时间线数据 */\n items: TimelineItem[]\n /** 布局方向 */\n mode?: 'vertical' | 'horizontal'\n /** 垂直模式下时间标签位置 */\n labelPlacement?: 'left' | 'right' | 'alternate'\n /** 是否显示尾部加载更多指示 */\n pending?: boolean\n /** 加载更多文案 */\n pendingText?: string\n /** 是否反转排列(最新在前) */\n reverse?: boolean\n /** 节点大小 */\n size?: 'small' | 'medium' | 'large'\n /** 连接线样式 */\n lineType?: 'solid' | 'dashed' | 'dotted'\n /** 是否显示时间标签 */\n showTime?: boolean\n}\n\n/** 默认 Props */\nexport const DEFAULT_TIMELINE_PROPS = {\n mode: 'vertical' as const,\n labelPlacement: 'right' as const,\n pending: false,\n pendingText: '加载中...',\n reverse: false,\n size: 'medium' as const,\n lineType: 'solid' as const,\n showTime: true,\n}\n\n/** 状态 → 颜色映射 */\nexport const STATUS_COLOR_MAP: Record<string, string> = {\n default: '',\n success: '#18a058',\n warning: '#f0a020',\n error: '#d03050',\n info: '#2080f0',\n}\n","/* unplugin-vue-components disabled */<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <template\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n >\n <div\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 节点圆点 / 图标 -->\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n\n <!-- 标题行 -->\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >\n {{ item.time }}\n </span>\n </div>\n\n <!-- 标签组 -->\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >\n {{ tag.text }}\n </span>\n </div>\n\n <!-- 内容区 -->\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <!-- 折叠触发器 -->\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </template>\n\n <!-- Pending 加载提示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","/* unplugin-vue-components disabled */<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <template\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n >\n <div\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 节点圆点 / 图标 -->\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n\n <!-- 标题行 -->\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >\n {{ item.time }}\n </span>\n </div>\n\n <!-- 标签组 -->\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >\n {{ tag.text }}\n </span>\n </div>\n\n <!-- 内容区 -->\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <!-- 折叠触发器 -->\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </template>\n\n <!-- Pending 加载提示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n","<!--\n * @Description: 时间线组件 — 支持垂直/水平布局、自定义节点、可折叠详情\n-->\n<template>\n <div\n :class=\"rootClasses\"\n role=\"list\"\n >\n <template\n v-for=\"(item, idx) in displayItems\"\n :key=\"item.id\"\n >\n <div\n class=\"c-timeline__item\"\n role=\"listitem\"\n >\n <!-- 节点圆点 / 图标 -->\n <span\n :class=\"['c-timeline__dot', item.icon ? 'is-icon' : 'is-dot']\"\n :style=\"dotStyle(item)\"\n >\n <slot\n name=\"dot\"\n :item=\"item\"\n :index=\"idx\"\n >\n <C_Icon\n v-if=\"item.icon\"\n :name=\"item.icon\"\n />\n </slot>\n </span>\n\n <!-- 标题行 -->\n <div\n class=\"c-timeline__header\"\n @click=\"emit('item-click', item, idx)\"\n >\n <slot\n name=\"title\"\n :item=\"item\"\n :index=\"idx\"\n >\n <span class=\"c-timeline__title\">{{ item.title }}</span>\n </slot>\n <span\n v-if=\"props.showTime && item.time\"\n class=\"c-timeline__time\"\n >\n {{ item.time }}\n </span>\n </div>\n\n <!-- 标签组 -->\n <div\n v-if=\"item.tags?.length\"\n class=\"c-timeline__tags\"\n >\n <span\n v-for=\"tag in item.tags\"\n :key=\"tag.text\"\n class=\"c-timeline__tag\"\n >\n {{ tag.text }}\n </span>\n </div>\n\n <!-- 内容区 -->\n <div\n v-if=\"item.content && (!item.collapsible || expandedMap[item.id])\"\n :class=\"[\n 'c-timeline__detail',\n item.collapsible\n ? expandedMap[item.id]\n ? 'is-expanded'\n : 'is-collapsed'\n : 'is-expanded',\n ]\"\n >\n <div\n class=\"c-timeline__content\"\n v-html=\"item.content\"\n />\n </div>\n\n <!-- 折叠触发器 -->\n <span\n v-if=\"item.collapsible\"\n :class=\"[\n 'c-timeline__collapse-trigger',\n { 'is-expanded': expandedMap[item.id] },\n ]\"\n @click=\"toggleExpand(item)\"\n >\n {{ expandedMap[item.id] ? '收起' : '展开详情' }}\n <C_Icon\n name=\"mdi:chevron-down\"\n class=\"collapse-arrow\"\n />\n </span>\n </div>\n </template>\n\n <!-- Pending 加载提示 -->\n <div\n v-if=\"props.pending\"\n class=\"c-timeline__pending\"\n >\n <span class=\"pending-dot\" />\n <span>{{ props.pendingText }}</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\n import { computed, ref, watch } from 'vue'\n import C_Icon from '../C_Icon/index.vue'\n import {\n DEFAULT_TIMELINE_PROPS,\n STATUS_COLOR_MAP,\n type TimelineProps,\n type TimelineItem,\n } from './types'\n\n defineOptions({ name: 'C_Timeline' })\n\n const props = withDefaults(defineProps<TimelineProps>(), {\n items: () => [],\n mode: DEFAULT_TIMELINE_PROPS.mode,\n labelPlacement: DEFAULT_TIMELINE_PROPS.labelPlacement,\n pending: DEFAULT_TIMELINE_PROPS.pending,\n pendingText: DEFAULT_TIMELINE_PROPS.pendingText,\n reverse: DEFAULT_TIMELINE_PROPS.reverse,\n size: DEFAULT_TIMELINE_PROPS.size,\n lineType: DEFAULT_TIMELINE_PROPS.lineType,\n showTime: DEFAULT_TIMELINE_PROPS.showTime,\n })\n\n const emit = defineEmits<{\n (e: 'item-click', item: TimelineItem, index: number): void\n (e: 'expand', item: TimelineItem, expanded: boolean): void\n }>()\n\n // ===== 展开状态 =====\n const expandedMap = ref<Record<string | number, boolean>>({})\n\n // 初始化展开状态\n watch(\n () => props.items,\n items => {\n items.forEach(item => {\n if (item.collapsible && !(item.id in expandedMap.value)) {\n expandedMap.value[item.id] = item.defaultExpanded ?? false\n }\n })\n },\n { immediate: true }\n )\n\n const toggleExpand = (item: TimelineItem) => {\n const next = !expandedMap.value[item.id]\n expandedMap.value[item.id] = next\n emit('expand', item, next)\n }\n\n // ===== 排列顺序 =====\n const displayItems = computed(() =>\n props.reverse ? [...props.items].reverse() : props.items\n )\n\n // ===== 根类 =====\n const rootClasses = computed(() => [\n 'c-timeline',\n `is-${props.mode}`,\n `is-${props.size}`,\n `is-line-${props.lineType}`,\n `is-label-${props.labelPlacement}`,\n ])\n\n // ===== 节点颜色 =====\n const dotStyle = (item: TimelineItem) => {\n const color =\n item.color || STATUS_COLOR_MAP[item.status || 'default'] || undefined\n if (item.icon) {\n return { color, borderColor: color || undefined }\n }\n return {\n background: color || undefined,\n boxShadow: color ? `0 0 0 2px ${color}` : undefined,\n }\n }\n\n // ===== 暴露 =====\n defineExpose({\n /** 展开全部 */\n expandAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = true\n })\n },\n /** 折叠全部 */\n collapseAll: () => {\n props.items.forEach(item => {\n if (item.collapsible) expandedMap.value[item.id] = false\n })\n },\n })\n</script>\n\n<style scoped lang=\"scss\">\n @use './index.scss';\n</style>\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_Transfer-BOB6OBqS.css","names":[],"sources":["../src/components/C_Transfer/index.vue?vue&type=style&index=0&scoped=6de1c97f&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled *//**\n * C_Transfer — 穿梭框组件样式\n * 变量说明:\n * --tf-border : 面板边框色\n * --tf-header-bg : 标题栏背景\n * --tf-item-hover : 列表行悬停色\n * --tf-accent : 操作按钮主色\n * --tf-height : 面板高度\n */\n.c-transfer[data-v-6de1c97f] {\n --tf-border: var(--border-color);\n --tf-header-bg: color-mix(in srgb, var(--primary-color) 6%, var(--card-color));\n --tf-item-hover: color-mix(in srgb, var(--primary-color) 8%, var(--card-color));\n --tf-accent: var(--primary-color);\n --tf-height: 380px;\n display: flex;\n align-items: stretch;\n gap: 16px;\n user-select: none;\n /* ======================== Panel ======================== */\n /* ---- Header ---- */\n /* ---- Filter ---- */\n /* ---- List ---- */\n /* ---- Empty ---- */\n /* ======================== Actions ======================== */\n /* ======================== Sizes ======================== */\n /* ======================== Group divider ======================== */\n}\n.c-transfer__panel[data-v-6de1c97f] {\n flex: 1;\n display: flex;\n flex-direction: column;\n border: 1px solid var(--tf-border);\n border-radius: 8px;\n overflow: hidden;\n background: var(--card-color);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);\n transition: box-shadow 0.2s;\n}\n.c-transfer__panel[data-v-6de1c97f]:hover {\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.07);\n}\n.c-transfer__header[data-v-6de1c97f] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--tf-header-bg);\n border-bottom: 1px solid var(--tf-border);\n font-weight: 600;\n font-size: 13px;\n color: var(--text-color-1);\n}\n.c-transfer__count[data-v-6de1c97f] {\n font-weight: 400;\n font-size: 12px;\n color: var(--text-color-3);\n}\n.c-transfer__filter[data-v-6de1c97f] {\n padding: 8px 10px;\n border-bottom: 1px solid var(--tf-border);\n}\n.c-transfer__filter .n-input[data-v-6de1c97f] {\n --n-border: 1px solid var(--tf-border);\n --n-border-focus: 1px solid var(--tf-accent);\n}\n.c-transfer__list[data-v-6de1c97f] {\n flex: 1;\n overflow-y: auto;\n padding: 4px 0;\n min-height: 0;\n max-height: var(--tf-height);\n}\n.c-transfer__item[data-v-6de1c97f] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.15s;\n font-size: 13px;\n color: var(--text-color-1);\n}\n.c-transfer__item[data-v-6de1c97f]:hover {\n background: var(--tf-item-hover);\n}\n.c-transfer__item.is-disabled[data-v-6de1c97f] {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.c-transfer__item.is-disabled[data-v-6de1c97f]:hover {\n background: transparent;\n}\n.c-transfer__item.is-checked[data-v-6de1c97f] {\n color: var(--tf-accent);\n font-weight: 500;\n}\n.c-transfer__item-icon[data-v-6de1c97f] {\n font-size: 16px;\n flex-shrink: 0;\n color: var(--text-color-3);\n}\n.c-transfer__item-label[data-v-6de1c97f] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.c-transfer__item-desc[data-v-6de1c97f] {\n font-size: 11px;\n color: var(--text-color-3);\n margin-top: 2px;\n}\n.c-transfer__empty[data-v-6de1c97f] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: var(--text-color-3);\n font-size: 13px;\n padding: 32px 0;\n}\n.c-transfer__actions[data-v-6de1c97f] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 10px;\n}\n.c-transfer__btn[data-v-6de1c97f] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n border: 1px solid var(--tf-border);\n background: var(--card-color);\n color: var(--tf-accent);\n font-size: 18px;\n cursor: pointer;\n transition: background 0.2s, color 0.2s, box-shadow 0.2s;\n}\n.c-transfer__btn[data-v-6de1c97f]:hover:not(.is-disabled) {\n background: var(--tf-accent);\n color: #fff;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--tf-accent) 30%, transparent);\n}\n.c-transfer__btn.is-disabled[data-v-6de1c97f] {\n opacity: 0.35;\n cursor: not-allowed;\n}\n.c-transfer.is-small[data-v-6de1c97f] {\n --tf-height: 280px;\n}\n.c-transfer.is-small .c-transfer__header[data-v-6de1c97f] {\n padding: 8px 12px;\n font-size: 12px;\n}\n.c-transfer.is-small .c-transfer__item[data-v-6de1c97f] {\n padding: 5px 12px;\n font-size: 12px;\n}\n.c-transfer.is-small .c-transfer__btn[data-v-6de1c97f] {\n width: 30px;\n height: 30px;\n font-size: 15px;\n}\n.c-transfer.is-large[data-v-6de1c97f] {\n --tf-height: 480px;\n}\n.c-transfer.is-large .c-transfer__header[data-v-6de1c97f] {\n padding: 12px 16px;\n font-size: 14px;\n}\n.c-transfer.is-large .c-transfer__item[data-v-6de1c97f] {\n padding: 9px 16px;\n font-size: 14px;\n}\n.c-transfer.is-large .c-transfer__btn[data-v-6de1c97f] {\n width: 42px;\n height: 42px;\n font-size: 20px;\n}\n.c-transfer__group[data-v-6de1c97f] {\n padding: 6px 14px 4px;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-color-3);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"C_Transfer-Dpq7ezWC.css","names":[],"sources":["../src/components/C_Transfer/index.vue?vue&type=style&index=0&scoped=6de1c97f&lang.scss"],"sourcesContent":["/* unplugin-vue-components disabled *//**\n * C_Transfer — 穿梭框组件样式\n * 变量说明:\n * --tf-border : 面板边框色\n * --tf-header-bg : 标题栏背景\n * --tf-item-hover : 列表行悬停色\n * --tf-accent : 操作按钮主色\n * --tf-height : 面板高度\n */\n.c-transfer[data-v-6de1c97f] {\n --tf-border: var(--border-color);\n --tf-header-bg: color-mix(in srgb, var(--primary-color) 6%, var(--card-color));\n --tf-item-hover: color-mix(in srgb, var(--primary-color) 8%, var(--card-color));\n --tf-accent: var(--primary-color);\n --tf-height: 380px;\n display: flex;\n align-items: stretch;\n gap: 16px;\n user-select: none;\n /* ======================== Panel ======================== */\n /* ---- Header ---- */\n /* ---- Filter ---- */\n /* ---- List ---- */\n /* ---- Empty ---- */\n /* ======================== Actions ======================== */\n /* ======================== Sizes ======================== */\n /* ======================== Group divider ======================== */\n}\n.c-transfer__panel[data-v-6de1c97f] {\n flex: 1;\n display: flex;\n flex-direction: column;\n border: 1px solid var(--tf-border);\n border-radius: 8px;\n overflow: hidden;\n background: var(--card-color);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);\n transition: box-shadow 0.2s;\n}\n.c-transfer__panel[data-v-6de1c97f]:hover {\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.07);\n}\n.c-transfer__header[data-v-6de1c97f] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--tf-header-bg);\n border-bottom: 1px solid var(--tf-border);\n font-weight: 600;\n font-size: 13px;\n color: var(--text-color-1);\n}\n.c-transfer__count[data-v-6de1c97f] {\n font-weight: 400;\n font-size: 12px;\n color: var(--text-color-3);\n}\n.c-transfer__filter[data-v-6de1c97f] {\n padding: 8px 10px;\n border-bottom: 1px solid var(--tf-border);\n}\n.c-transfer__filter .n-input[data-v-6de1c97f] {\n --n-border: 1px solid var(--tf-border);\n --n-border-focus: 1px solid var(--tf-accent);\n}\n.c-transfer__list[data-v-6de1c97f] {\n flex: 1;\n overflow-y: auto;\n padding: 4px 0;\n min-height: 0;\n max-height: var(--tf-height);\n}\n.c-transfer__item[data-v-6de1c97f] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.15s;\n font-size: 13px;\n color: var(--text-color-1);\n}\n.c-transfer__item[data-v-6de1c97f]:hover {\n background: var(--tf-item-hover);\n}\n.c-transfer__item.is-disabled[data-v-6de1c97f] {\n opacity: 0.45;\n cursor: not-allowed;\n}\n.c-transfer__item.is-disabled[data-v-6de1c97f]:hover {\n background: transparent;\n}\n.c-transfer__item.is-checked[data-v-6de1c97f] {\n color: var(--tf-accent);\n font-weight: 500;\n}\n.c-transfer__item-icon[data-v-6de1c97f] {\n font-size: 16px;\n flex-shrink: 0;\n color: var(--text-color-3);\n}\n.c-transfer__item-label[data-v-6de1c97f] {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.c-transfer__item-desc[data-v-6de1c97f] {\n font-size: 11px;\n color: var(--text-color-3);\n margin-top: 2px;\n}\n.c-transfer__empty[data-v-6de1c97f] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n color: var(--text-color-3);\n font-size: 13px;\n padding: 32px 0;\n}\n.c-transfer__actions[data-v-6de1c97f] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n gap: 10px;\n}\n.c-transfer__btn[data-v-6de1c97f] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border-radius: 8px;\n border: 1px solid var(--tf-border);\n background: var(--card-color);\n color: var(--tf-accent);\n font-size: 18px;\n cursor: pointer;\n transition: background 0.2s, color 0.2s, box-shadow 0.2s;\n}\n.c-transfer__btn[data-v-6de1c97f]:hover:not(.is-disabled) {\n background: var(--tf-accent);\n color: #fff;\n box-shadow: 0 2px 8px color-mix(in srgb, var(--tf-accent) 30%, transparent);\n}\n.c-transfer__btn.is-disabled[data-v-6de1c97f] {\n opacity: 0.35;\n cursor: not-allowed;\n}\n.c-transfer.is-small[data-v-6de1c97f] {\n --tf-height: 280px;\n}\n.c-transfer.is-small .c-transfer__header[data-v-6de1c97f] {\n padding: 8px 12px;\n font-size: 12px;\n}\n.c-transfer.is-small .c-transfer__item[data-v-6de1c97f] {\n padding: 5px 12px;\n font-size: 12px;\n}\n.c-transfer.is-small .c-transfer__btn[data-v-6de1c97f] {\n width: 30px;\n height: 30px;\n font-size: 15px;\n}\n.c-transfer.is-large[data-v-6de1c97f] {\n --tf-height: 480px;\n}\n.c-transfer.is-large .c-transfer__header[data-v-6de1c97f] {\n padding: 12px 16px;\n font-size: 14px;\n}\n.c-transfer.is-large .c-transfer__item[data-v-6de1c97f] {\n padding: 9px 16px;\n font-size: 14px;\n}\n.c-transfer.is-large .c-transfer__btn[data-v-6de1c97f] {\n width: 42px;\n height: 42px;\n font-size: 20px;\n}\n.c-transfer__group[data-v-6de1c97f] {\n padding: 6px 14px 4px;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-color-3);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./C_Icon.js`);const e=require(`./C_Transfer.js`);exports.C_Transfer=e.t,exports.DEFAULT_TRANSFER_PROPS=e.n;