@hkyhy/marsun-components-core 0.1.89 → 0.1.99

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 (299) hide show
  1. package/README.md +5 -4
  2. package/dist/components/Audit/AuditLogList.d.ts +27 -0
  3. package/dist/components/Audit/AuditLogList.js +272 -0
  4. package/dist/components/Audit/AuditLogList.js.map +1 -0
  5. package/dist/components/Audit/formatAuditCurl.d.ts +27 -0
  6. package/dist/components/Audit/formatAuditCurl.js +115 -0
  7. package/dist/components/Audit/formatAuditCurl.js.map +1 -0
  8. package/dist/components/Audit/formatAuditJson.d.ts +15 -0
  9. package/dist/components/Audit/formatAuditJson.js +135 -0
  10. package/dist/components/Audit/formatAuditJson.js.map +1 -0
  11. package/dist/components/Audit/index.d.ts +3 -0
  12. package/dist/components/Audit/style.module.scss.js +30 -0
  13. package/dist/components/Audit/style.module.scss.js.map +1 -0
  14. package/dist/components/Audit/types.d.ts +39 -0
  15. package/dist/components/Disposition/AlertDispositionPanel/LevelLegend.d.ts +13 -0
  16. package/dist/components/Disposition/AlertDispositionPanel/LevelLegend.js +36 -0
  17. package/dist/components/Disposition/AlertDispositionPanel/LevelLegend.js.map +1 -0
  18. package/dist/components/Disposition/AlertDispositionPanel/index.d.ts +21 -0
  19. package/dist/components/Disposition/AlertDispositionPanel/index.js +80 -0
  20. package/dist/components/Disposition/AlertDispositionPanel/index.js.map +1 -0
  21. package/dist/components/Disposition/AlertDispositionPanel/levelLegend.module.scss.js +10 -0
  22. package/dist/components/Disposition/AlertDispositionPanel/levelLegend.module.scss.js.map +1 -0
  23. package/dist/components/Disposition/AlertDispositionPanel/style.module.scss.js +11 -0
  24. package/dist/components/Disposition/AlertDispositionPanel/types.d.ts +51 -0
  25. package/dist/components/Disposition/AlertDispositionPanel/types.js +26 -0
  26. package/dist/components/Disposition/AlertDispositionPanel/types.js.map +1 -0
  27. package/dist/components/Disposition/DispositionBar/index.js.map +1 -0
  28. package/dist/components/Disposition/DispositionBar/style.module.scss.js.map +1 -0
  29. package/dist/components/Disposition/index.d.ts +4 -0
  30. package/dist/components/Editor/RichTextEditor/RichTextEditor.d.ts +24 -0
  31. package/dist/components/Editor/RichTextEditor/RichTextEditor.js +93 -0
  32. package/dist/components/Editor/RichTextEditor/RichTextEditor.js.map +1 -0
  33. package/dist/components/Editor/RichTextEditor/index.d.ts +2 -0
  34. package/dist/components/Editor/RichTextEditor/style.module.scss.js +11 -0
  35. package/dist/components/Editor/RichTextEditor/style.module.scss.js.map +1 -0
  36. package/dist/components/Editor/VariablePicker.d.ts +19 -0
  37. package/dist/components/Editor/VariablePicker.js +55 -0
  38. package/dist/components/Editor/VariablePicker.js.map +1 -0
  39. package/dist/components/Editor/index.d.ts +7 -0
  40. package/dist/components/Editor/index.js +21 -0
  41. package/dist/components/Editor/index.js.map +1 -0
  42. package/dist/components/Editor/msgVarTokenPlugin.d.ts +13 -0
  43. package/dist/components/Editor/msgVarTokenPlugin.js +94 -0
  44. package/dist/components/Editor/msgVarTokenPlugin.js.map +1 -0
  45. package/dist/components/Editor/variableMention.d.ts +37 -0
  46. package/dist/components/Editor/variableMention.js +64 -0
  47. package/dist/components/Editor/variableMention.js.map +1 -0
  48. package/dist/components/FormInfo/RichTextField/index.d.ts +21 -0
  49. package/dist/components/FormInfo/RichTextField/index.js +82 -0
  50. package/dist/components/FormInfo/RichTextField/index.js.map +1 -0
  51. package/dist/components/FormInfo/RichTextField/style.module.scss.js +9 -0
  52. package/dist/components/FormInfo/RichTextField/style.module.scss.js.map +1 -0
  53. package/dist/components/FormInfo/VariableMentionInput/index.d.ts +17 -0
  54. package/dist/components/FormInfo/VariableMentionInput/index.js +73 -0
  55. package/dist/components/FormInfo/VariableMentionInput/index.js.map +1 -0
  56. package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js +11 -0
  57. package/dist/components/FormInfo/VariableMentionInput/style.module.scss.js.map +1 -0
  58. package/dist/components/FormInfo/fields.d.ts +5 -0
  59. package/dist/components/FormInfo/fields.js +32 -23
  60. package/dist/components/FormInfo/fields.js.map +1 -1
  61. package/dist/components/FormInfo/index.d.ts +4 -0
  62. package/dist/components/StateBar/StateBar.d.ts +19 -6
  63. package/dist/components/StateBar/StateBar.js +87 -50
  64. package/dist/components/StateBar/StateBar.js.map +1 -1
  65. package/dist/components/StateBar/style.module.scss.js +13 -10
  66. package/dist/components/StateBar/style.module.scss.js.map +1 -1
  67. package/dist/components/Tools/Inbox/InboxBell/InboxBell.d.ts +45 -0
  68. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +156 -0
  69. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -0
  70. package/dist/components/Tools/Inbox/InboxBell/index.d.ts +2 -0
  71. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +30 -0
  72. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -0
  73. package/dist/components/Tools/Inbox/index.d.ts +2 -0
  74. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.d.ts +8 -0
  75. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js +56 -0
  76. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/List/columns.js.map +1 -0
  77. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.d.ts +8 -0
  78. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js +216 -0
  79. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js.map +1 -0
  80. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.d.ts +26 -0
  81. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js +190 -0
  82. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/Modal/TemplateFormModal.js.map +1 -0
  83. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/index.d.ts +3 -0
  84. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js +12 -0
  85. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/style.module.scss.js.map +1 -0
  86. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.d.ts +76 -0
  87. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js +26 -0
  88. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js.map +1 -0
  89. package/dist/components/Tools/MessageCenter/index.d.ts +3 -0
  90. package/dist/components/Tools/MessageCenter/utils/templateCode.d.ts +8 -0
  91. package/dist/components/Tools/MessageCenter/utils/templateCode.js +25 -0
  92. package/dist/components/Tools/MessageCenter/utils/templateCode.js.map +1 -0
  93. package/dist/components/Tools/index.d.ts +5 -0
  94. package/dist/components/index.d.ts +5 -2
  95. package/dist/editor.d.ts +5 -0
  96. package/dist/editor.js +21 -0
  97. package/dist/editor.js.map +1 -0
  98. package/dist/form-info.js +33 -29
  99. package/dist/form-info.js.map +1 -1
  100. package/dist/index.d.ts +7 -2
  101. package/dist/index.js +799 -759
  102. package/dist/index.js.map +1 -1
  103. package/dist/marsun-components-core.css +4 -1
  104. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js +301 -0
  105. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js.map +1 -0
  106. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js +1256 -0
  107. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js.map +1 -0
  108. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js +2107 -0
  109. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js.map +1 -0
  110. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js +259 -0
  111. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js.map +1 -0
  112. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js +23990 -0
  113. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js.map +1 -0
  114. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js +249 -0
  115. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js.map +1 -0
  116. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js +47 -0
  117. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js.map +1 -0
  118. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js +100 -0
  119. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js.map +1 -0
  120. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js +31 -0
  121. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js.map +1 -0
  122. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js +194 -0
  123. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js.map +1 -0
  124. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js +2042 -0
  125. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js.map +1 -0
  126. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js +9 -0
  127. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js.map +1 -0
  128. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js +167 -0
  129. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js.map +1 -0
  130. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js +471 -0
  131. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js.map +1 -0
  132. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js +139 -0
  133. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js.map +1 -0
  134. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js +755 -0
  135. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js.map +1 -0
  136. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js +7838 -0
  137. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js.map +1 -0
  138. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js +422 -0
  139. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js.map +1 -0
  140. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js +33 -0
  141. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js.map +1 -0
  142. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js +47 -0
  143. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js.map +1 -0
  144. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js +156 -0
  145. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js.map +1 -0
  146. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js +313 -0
  147. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js.map +1 -0
  148. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js +2942 -0
  149. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js.map +1 -0
  150. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js +892 -0
  151. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js.map +1 -0
  152. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js +1047 -0
  153. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js.map +1 -0
  154. package/dist/node_modules/color-parse/node_modules/color-name/index.js +153 -0
  155. package/dist/node_modules/color-parse/node_modules/color-name/index.js.map +1 -0
  156. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js +7 -0
  157. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js.map +1 -0
  158. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js +7 -0
  159. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js.map +1 -0
  160. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js +7 -0
  161. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js.map +1 -0
  162. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js +9 -0
  163. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js.map +1 -0
  164. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js +7 -0
  165. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js.map +1 -0
  166. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js +7 -0
  167. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js.map +1 -0
  168. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js +16 -0
  169. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js.map +1 -0
  170. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js +15 -0
  171. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js.map +1 -0
  172. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js +9 -0
  173. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js.map +1 -0
  174. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js +8 -0
  175. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js.map +1 -0
  176. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js +30 -0
  177. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js.map +1 -0
  178. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js +8 -0
  179. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js.map +1 -0
  180. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js +17 -0
  181. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js.map +1 -0
  182. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js +13 -0
  183. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js.map +1 -0
  184. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js +17 -0
  185. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js.map +1 -0
  186. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js +102 -0
  187. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js.map +1 -0
  188. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +8 -0
  189. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js.map +1 -0
  190. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js +33 -0
  191. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js.map +1 -0
  192. package/dist/node_modules/es-toolkit/dist/compat/object/get.js +39 -0
  193. package/dist/node_modules/es-toolkit/dist/compat/object/get.js.map +1 -0
  194. package/dist/node_modules/es-toolkit/dist/compat/object/has.js +21 -0
  195. package/dist/node_modules/es-toolkit/dist/compat/object/has.js.map +1 -0
  196. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js +33 -0
  197. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js.map +1 -0
  198. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js +10 -0
  199. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js.map +1 -0
  200. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js +9 -0
  201. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js.map +1 -0
  202. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js +53 -0
  203. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js.map +1 -0
  204. package/dist/node_modules/es-toolkit/dist/compat/object/property.js +10 -0
  205. package/dist/node_modules/es-toolkit/dist/compat/object/property.js.map +1 -0
  206. package/dist/node_modules/es-toolkit/dist/compat/object/set.js +9 -0
  207. package/dist/node_modules/es-toolkit/dist/compat/object/set.js.map +1 -0
  208. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js +31 -0
  209. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js.map +1 -0
  210. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js +8 -0
  211. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js.map +1 -0
  212. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js +7 -0
  213. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js.map +1 -0
  214. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js +8 -0
  215. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js.map +1 -0
  216. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js +9 -0
  217. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js.map +1 -0
  218. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js +9 -0
  219. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js.map +1 -0
  220. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js +15 -0
  221. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js.map +1 -0
  222. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js +7 -0
  223. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js.map +1 -0
  224. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js +9 -0
  225. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js.map +1 -0
  226. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js +81 -0
  227. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js.map +1 -0
  228. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js +7 -0
  229. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js.map +1 -0
  230. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js +7 -0
  231. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js.map +1 -0
  232. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js +16 -0
  233. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js.map +1 -0
  234. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js +7 -0
  235. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js.map +1 -0
  236. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js +7 -0
  237. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js.map +1 -0
  238. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js +8 -0
  239. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js.map +1 -0
  240. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js +9 -0
  241. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js.map +1 -0
  242. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +23 -0
  243. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js.map +1 -0
  244. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js +7 -0
  245. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js.map +1 -0
  246. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js +19 -0
  247. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js.map +1 -0
  248. package/dist/node_modules/es-toolkit/dist/compat/util/times.js +11 -0
  249. package/dist/node_modules/es-toolkit/dist/compat/util/times.js.map +1 -0
  250. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js +8 -0
  251. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js.map +1 -0
  252. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js +9 -0
  253. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js.map +1 -0
  254. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js +8 -0
  255. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js.map +1 -0
  256. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js +37 -0
  257. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js.map +1 -0
  258. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js +15 -0
  259. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js.map +1 -0
  260. package/dist/node_modules/es-toolkit/dist/function/after.js +11 -0
  261. package/dist/node_modules/es-toolkit/dist/function/after.js.map +1 -0
  262. package/dist/node_modules/es-toolkit/dist/function/debounce.js +30 -0
  263. package/dist/node_modules/es-toolkit/dist/function/debounce.js.map +1 -0
  264. package/dist/node_modules/es-toolkit/dist/function/identity.js +7 -0
  265. package/dist/node_modules/es-toolkit/dist/function/identity.js.map +1 -0
  266. package/dist/node_modules/es-toolkit/dist/function/noop.js +6 -0
  267. package/dist/node_modules/es-toolkit/dist/function/noop.js.map +1 -0
  268. package/dist/node_modules/es-toolkit/dist/object/clone.js +27 -0
  269. package/dist/node_modules/es-toolkit/dist/object/clone.js.map +1 -0
  270. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js +8 -0
  271. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js.map +1 -0
  272. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js +121 -0
  273. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js.map +1 -0
  274. package/dist/node_modules/es-toolkit/dist/object/mapValues.js +12 -0
  275. package/dist/node_modules/es-toolkit/dist/object/mapValues.js.map +1 -0
  276. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js +8 -0
  277. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js.map +1 -0
  278. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js +9 -0
  279. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js.map +1 -0
  280. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js +110 -0
  281. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js.map +1 -0
  282. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js +7 -0
  283. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js.map +1 -0
  284. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js +9 -0
  285. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js.map +1 -0
  286. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js +7 -0
  287. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js.map +1 -0
  288. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js +7 -0
  289. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js.map +1 -0
  290. package/dist/styles/global.css +4 -1
  291. package/dist/utils/copyText.d.ts +4 -0
  292. package/dist/utils/copyText.js +21 -0
  293. package/dist/utils/copyText.js.map +1 -0
  294. package/package.json +9 -1
  295. package/dist/components/DispositionBar/index.js.map +0 -1
  296. /package/dist/components/{DispositionBar → Disposition/AlertDispositionPanel}/style.module.scss.js.map +0 -0
  297. /package/dist/components/{DispositionBar → Disposition/DispositionBar}/index.d.ts +0 -0
  298. /package/dist/components/{DispositionBar → Disposition/DispositionBar}/index.js +0 -0
  299. /package/dist/components/{DispositionBar → Disposition/DispositionBar}/style.module.scss.js +0 -0
package/README.md CHANGED
@@ -125,12 +125,13 @@ npm run typecheck
125
125
  包名为 **`@hkyhy/marsun-components-core`**(npm scope 与 GitHub 发布账号 `hkyhy` 对齐)。
126
126
 
127
127
  1. 在 GitHub 仓库 **Settings → Secrets → Actions** 配置 `HKYHY_PACKAGE_PUBLISH`(npm Automation Token,对 `@hkyhy` 有 publish 权限)
128
- 2. **发版**:先将 `package.json` version 升到待发布号,再提交并 push 首行形如 `chore(release): vX.Y.Z …` 的 commit;`release.yml` 校验版本 → 打 tag → `npm publish`(仅该消息前缀触发,feat push 不发版)
129
- 3. 示例:
128
+ 2. **顺号**:日常 `package.json` = npm latest;本地 `npm pack` **不要**每次 bump。发版前 `node scripts/version-check.mjs --apply`(= npm+1;**0.1.98 之后下一版为 0.1.99**)
129
+ 3. **发版**:再提交并 push 首行形如 `chore(release): vX.Y.Z …` 的 commit;`release.yml` 校验版本 → 打 tag → `npm publish`(仅该消息前缀触发,feat push 不发版)
130
130
 
131
131
  ```bash
132
- # version 已为 0.1.53 时
133
- git push origin main # 含 chore(release): v0.1.53 …
132
+ # 当前 npm latest=0.1.98 时
133
+ node scripts/version-check.mjs --apply # → 0.1.99
134
+ # 再 commit chore(release): v0.1.99 … 并 push main
134
135
  ```
135
136
 
136
137
  也可在 Actions 中手动运行 **Publish npm**,填写已有 tag 重新发布。
@@ -0,0 +1,27 @@
1
+ import { default as React } from 'react';
2
+ import { AuditEventDetail, AuditEventListItem, AuditStep } from './types';
3
+ export type AuditLogListMode = 'app' | 'platform';
4
+ export type AuditLogListProps = {
5
+ mode?: AuditLogListMode;
6
+ dataSource: AuditEventListItem[];
7
+ loading?: boolean;
8
+ /** 点击行(进详情页) */
9
+ onRowClick?: (row: AuditEventListItem) => void;
10
+ filterSlot?: React.ReactNode;
11
+ pagination?: false | object;
12
+ className?: string;
13
+ };
14
+ export declare const AuditStepContent: React.FC<{
15
+ step: AuditStep;
16
+ }>;
17
+ /** 审计事件详情:InfoPage + CommonDescriptions + Flow */
18
+ export declare const AuditEventDetailView: React.FC<{
19
+ detail: AuditEventDetail | null;
20
+ loading?: boolean;
21
+ emptyDescription?: string;
22
+ className?: string;
23
+ /** 当前登录 token(不含 Bearer 前缀亦可);复制 curl 用,不落库 */
24
+ getAuthToken?: () => string | null | undefined;
25
+ }>;
26
+ export declare const AuditLogList: React.FC<AuditLogListProps>;
27
+ export default AuditLogList;
@@ -0,0 +1,272 @@
1
+ import { jsx as e, jsxs as i, Fragment as f } from "react/jsx-runtime";
2
+ import { copyText as E } from "../../utils/copyText.js";
3
+ import { Typography as s, Empty as g, Button as j, message as T, Space as R } from "antd";
4
+ import I from "classnames";
5
+ import k from "dayjs";
6
+ import { useMemo as D } from "react";
7
+ import { formatAuditJson as F, isTruncatedAuditText as B } from "./formatAuditJson.js";
8
+ import { buildAuditReplayCurl as H, readBrowserReplaySession as O } from "./formatAuditCurl.js";
9
+ import l from "./style.module.scss.js";
10
+ import y, { SEMANTIC_COLORS as u } from "../Tag/SemanticTag.js";
11
+ import N from "../InfoPage/InfoPage/index.js";
12
+ import P from "../Descriptions/CommonDescriptions.js";
13
+ import U from "../InfoPage/Flow/index.js";
14
+ import Y from "../Table/Table.js";
15
+ import w from "../VirtualScrollbar/VirtualScrollbar/index.js";
16
+ function A(t) {
17
+ const r = k(t);
18
+ return r.isValid() ? r.format("YYYY-MM-DD HH:mm:ss") : t;
19
+ }
20
+ function L(t) {
21
+ return t === "success" ? "成功" : t === "fail" || t === "error" ? "失败" : t;
22
+ }
23
+ function v(t) {
24
+ return t === "success" ? u.SUCCESS : t === "fail" || t === "error" ? u.DANGER : u.DEFAULT;
25
+ }
26
+ function q(t) {
27
+ return t.stepType === "ERROR" || t.status === "error" ? "error" : t.status === "process" || t.status === "processing" ? "process" : t.status === "wait" ? "wait" : "finish";
28
+ }
29
+ function M(t) {
30
+ return t === "TRACE" ? "请求线路" : t === "SYSTEM" ? "系统" : t === "OPERATION" || !t ? "业务操作" : t;
31
+ }
32
+ function z(t) {
33
+ return t >= 500 ? u.DANGER : t >= 400 ? u.WARNING : t >= 200 && t < 300 ? u.SUCCESS : u.DEFAULT;
34
+ }
35
+ function G(t) {
36
+ if (!t || typeof t != "object" || Array.isArray(t)) return null;
37
+ const r = t.httpStatus;
38
+ if (typeof r == "number" && Number.isFinite(r)) return r;
39
+ if (r != null && String(r).trim() !== "") {
40
+ const o = Number(r);
41
+ return Number.isFinite(o) ? o : null;
42
+ }
43
+ return null;
44
+ }
45
+ const S = ({
46
+ value: t,
47
+ maxHeight: r = 360
48
+ }) => {
49
+ const o = F(t), a = B(t) || o.includes("…[truncated]");
50
+ return /* @__PURE__ */ i("div", { className: l.jsonWrap, children: [
51
+ a ? /* @__PURE__ */ e("div", { className: l.truncateHint, children: "内容已截断(采集侧 body 上限),以下为可读展开" }) : null,
52
+ /* @__PURE__ */ e(w, { className: l.jsonScroll, style: { maxHeight: r }, children: /* @__PURE__ */ e("pre", { className: l.jsonBlock, children: o }) })
53
+ ] });
54
+ };
55
+ function C(t, r) {
56
+ if (r == null) return null;
57
+ if (t === "output" && typeof r == "object" && !Array.isArray(r) && r !== null && ("httpStatus" in r || "body" in r)) {
58
+ const o = r, a = { ...o };
59
+ delete a.httpStatus, delete a.body;
60
+ const m = Object.keys(a).length > 0;
61
+ return /* @__PURE__ */ i(f, { children: [
62
+ o.body !== void 0 ? /* @__PURE__ */ i(f, { children: [
63
+ /* @__PURE__ */ e("div", { className: l.blockLabel, children: "响应体" }),
64
+ /* @__PURE__ */ e(S, { value: o.body, maxHeight: 420 })
65
+ ] }) : null,
66
+ m ? /* @__PURE__ */ i(f, { children: [
67
+ /* @__PURE__ */ e("div", { className: l.blockLabel, children: "其它" }),
68
+ /* @__PURE__ */ e(S, { value: a })
69
+ ] }) : null
70
+ ] });
71
+ }
72
+ return /* @__PURE__ */ i(f, { children: [
73
+ /* @__PURE__ */ e("div", { className: l.blockLabel, children: t }),
74
+ /* @__PURE__ */ e(S, { value: r })
75
+ ] });
76
+ }
77
+ const V = ({ step: t }) => {
78
+ var o;
79
+ const r = G(t.output);
80
+ return /* @__PURE__ */ i("div", { className: l.stepBody, children: [
81
+ /* @__PURE__ */ i("div", { className: l.stepMeta, children: [
82
+ t.stepType ? /* @__PURE__ */ e(y, { color: u.DEFAULT, children: t.stepType }) : null,
83
+ r != null ? /* @__PURE__ */ i(y, { color: z(r), children: [
84
+ "HTTP ",
85
+ r
86
+ ] }) : null,
87
+ t.occurredAt ? /* @__PURE__ */ e(s.Text, { type: "secondary", children: A(t.occurredAt) }) : null,
88
+ typeof t.durationMs == "number" ? /* @__PURE__ */ i(s.Text, { type: "secondary", children: [
89
+ t.durationMs,
90
+ " ms"
91
+ ] }) : null
92
+ ] }),
93
+ t.sqlText ? /* @__PURE__ */ i(f, { children: [
94
+ /* @__PURE__ */ e("div", { className: l.blockLabel, children: "SQL" }),
95
+ /* @__PURE__ */ e(w, { className: l.jsonScroll, style: { maxHeight: 200 }, children: /* @__PURE__ */ e("pre", { className: l.jsonBlock, children: t.sqlText }) })
96
+ ] }) : null,
97
+ (o = t.tables) != null && o.length ? /* @__PURE__ */ i(s.Text, { type: "secondary", children: [
98
+ "表:",
99
+ t.tables.join(", ")
100
+ ] }) : null,
101
+ t.errorMessage ? /* @__PURE__ */ e(s.Text, { type: "danger", children: t.errorMessage }) : null,
102
+ t.errorCode ? /* @__PURE__ */ i(s.Text, { type: "secondary", children: [
103
+ "错误码:",
104
+ t.errorCode
105
+ ] }) : null,
106
+ t.input != null ? C("请求体", t.input) : null,
107
+ t.output != null ? C("output", t.output) : null
108
+ ] });
109
+ }, st = ({ detail: t, loading: r, emptyDescription: o = "暂无明细", className: a, getAuthToken: m }) => {
110
+ var d, n, h;
111
+ if (r)
112
+ return /* @__PURE__ */ e(s.Text, { type: "secondary", children: "加载中…" });
113
+ if (!t)
114
+ return /* @__PURE__ */ e(g, { description: o });
115
+ const p = t.steps || [], b = t.actionLabel || t.action, x = [
116
+ {
117
+ label: "操作人",
118
+ value: (d = t.actorName) != null && d.trim() ? t.actorName : "—"
119
+ },
120
+ { label: "时间", value: A(t.createdAt) },
121
+ {
122
+ label: "方法",
123
+ value: (n = t.httpMethod) != null && n.trim() ? t.httpMethod : "—"
124
+ },
125
+ {
126
+ label: "状态",
127
+ value: /* @__PURE__ */ e(y, { color: v(t.status), children: L(t.status) })
128
+ },
129
+ {
130
+ label: "类别",
131
+ value: t.category ? M(t.category) : "—"
132
+ },
133
+ {
134
+ label: "耗时",
135
+ value: typeof t.durationMs == "number" ? `${t.durationMs} ms` : "—"
136
+ },
137
+ {
138
+ label: "路径",
139
+ value: (h = t.path) != null && h.trim() ? /* @__PURE__ */ e(s.Text, { code: !0, copyable: { text: t.path }, children: t.path }) : "—",
140
+ span: 2
141
+ },
142
+ {
143
+ label: "traceId",
144
+ value: t.traceId ? /* @__PURE__ */ e(s.Text, { copyable: { text: t.traceId }, children: t.traceId }) : "—",
145
+ span: 1
146
+ },
147
+ ...t.actionLabel ? [{ label: "动作码", value: /* @__PURE__ */ e(s.Text, { code: !0, children: t.action }) }] : []
148
+ ];
149
+ return /* @__PURE__ */ i(N, { className: I(l.detail, a), children: [
150
+ /* @__PURE__ */ e(
151
+ N.Part,
152
+ {
153
+ title: /* @__PURE__ */ i(R, { size: 8, wrap: !0, children: [
154
+ /* @__PURE__ */ e("span", { children: b }),
155
+ t.actionLabel ? /* @__PURE__ */ e(s.Text, { type: "secondary", className: l.actionCode, children: t.action }) : null
156
+ ] }),
157
+ subtitle: "事件摘要",
158
+ extra: t.path || t.requestCurl ? /* @__PURE__ */ e(
159
+ j,
160
+ {
161
+ size: "small",
162
+ type: "primary",
163
+ onClick: async () => {
164
+ try {
165
+ const c = H(t, O(m));
166
+ await E(c) ? T.success("已复制 curl") : T.error("复制失败");
167
+ } catch (c) {
168
+ T.error(c instanceof Error ? c.message : "无法生成 curl");
169
+ }
170
+ },
171
+ children: "复制 curl"
172
+ }
173
+ ) : void 0,
174
+ children: /* @__PURE__ */ e(P, { content: x, column: 3, bordered: !0, size: "small" })
175
+ }
176
+ ),
177
+ /* @__PURE__ */ e(N.Part, { title: "执行流程", subtitle: "请求 → 响应步骤", children: p.length === 0 ? /* @__PURE__ */ e(g, { description: "无流程步骤" }) : /* @__PURE__ */ e("div", { className: l.flowWrap, children: /* @__PURE__ */ e(
178
+ U,
179
+ {
180
+ dataSource: p.map((c) => ({
181
+ title: c.title || c.stepType,
182
+ description: void 0,
183
+ status: q(c),
184
+ content: /* @__PURE__ */ e(V, { step: c })
185
+ }))
186
+ }
187
+ ) }) })
188
+ ] });
189
+ }, ct = ({
190
+ mode: t = "app",
191
+ dataSource: r,
192
+ loading: o,
193
+ onRowClick: a,
194
+ filterSlot: m,
195
+ pagination: p,
196
+ className: b
197
+ }) => {
198
+ const x = D(() => {
199
+ const d = [
200
+ {
201
+ title: "时间",
202
+ dataIndex: "createdAt",
203
+ width: 180,
204
+ render: (n) => A(n)
205
+ },
206
+ {
207
+ title: "类别",
208
+ dataIndex: "category",
209
+ width: 96,
210
+ render: (n) => M(n)
211
+ },
212
+ {
213
+ title: "方法",
214
+ dataIndex: "httpMethod",
215
+ width: 72,
216
+ render: (n) => n && String(n).trim() ? n : "—"
217
+ },
218
+ {
219
+ title: "操作人",
220
+ dataIndex: "actorName",
221
+ width: 100,
222
+ ellipsis: !0,
223
+ render: (n) => n && String(n).trim() ? n : "—"
224
+ },
225
+ {
226
+ title: "动作",
227
+ dataIndex: "action",
228
+ width: 160,
229
+ ellipsis: !0,
230
+ render: (n, h) => h.actionLabel || h.action
231
+ },
232
+ { title: "摘要", dataIndex: "summary", ellipsis: !0 },
233
+ {
234
+ title: "状态",
235
+ dataIndex: "status",
236
+ width: 90,
237
+ render: (n) => /* @__PURE__ */ e(y, { color: v(n), children: L(n) })
238
+ },
239
+ { title: "耗时ms", dataIndex: "durationMs", width: 80 },
240
+ { title: "路径", dataIndex: "path", ellipsis: !0 }
241
+ ];
242
+ return t === "platform" && d.splice(2, 0, {
243
+ title: "系统",
244
+ dataIndex: "systemAppId",
245
+ width: 140,
246
+ ellipsis: !0
247
+ }), d;
248
+ }, [t]);
249
+ return /* @__PURE__ */ i("div", { className: I(l.wrap, b), children: [
250
+ m ? /* @__PURE__ */ e("div", { className: l.filter, children: m }) : null,
251
+ /* @__PURE__ */ e(
252
+ Y,
253
+ {
254
+ rowKey: "id",
255
+ loading: o,
256
+ columns: x,
257
+ dataSource: r,
258
+ pagination: p === void 0 ? !1 : p,
259
+ onRow: a ? (d) => ({
260
+ onClick: () => a(d),
261
+ style: { cursor: "pointer" }
262
+ }) : void 0
263
+ }
264
+ )
265
+ ] });
266
+ };
267
+ export {
268
+ st as AuditEventDetailView,
269
+ ct as AuditLogList,
270
+ V as AuditStepContent
271
+ };
272
+ //# sourceMappingURL=AuditLogList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLogList.js","sources":["../../../src/components/Audit/AuditLogList.tsx"],"sourcesContent":["import { CommonDescriptions } from '@/components/Descriptions';\nimport InfoPage, { Flow } from '@/components/InfoPage';\nimport { Table } from '@/components/Table';\nimport { SEMANTIC_COLORS, SemanticTag } from '@/components/Tag';\nimport { VirtualScrollbar } from '@/components/VirtualScrollbar';\nimport { copyText } from '@/utils/copyText';\nimport { Button, Empty, Space, Typography, message } from 'antd';\nimport type { ColumnsType } from 'antd/es/table';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport React, { useMemo } from 'react';\nimport { formatAuditJson, isTruncatedAuditText } from './formatAuditJson';\nimport { buildAuditReplayCurl, readBrowserReplaySession } from './formatAuditCurl';\nimport styles from './style.module.scss';\nimport type { AuditEventDetail, AuditEventListItem, AuditStep } from './types';\n\nexport type AuditLogListMode = 'app' | 'platform';\n\nexport type AuditLogListProps = {\n mode?: AuditLogListMode;\n dataSource: AuditEventListItem[];\n loading?: boolean;\n /** 点击行(进详情页) */\n onRowClick?: (row: AuditEventListItem) => void;\n filterSlot?: React.ReactNode;\n pagination?: false | object;\n className?: string;\n};\n\nfunction formatCreatedAt(iso: string): string {\n const d = dayjs(iso);\n return d.isValid() ? d.format('YYYY-MM-DD HH:mm:ss') : iso;\n}\n\nfunction statusLabel(status: string): string {\n if (status === 'success') return '成功';\n if (status === 'fail' || status === 'error') return '失败';\n return status;\n}\n\nfunction statusColor(status: string): string {\n if (status === 'success') return SEMANTIC_COLORS.SUCCESS;\n if (status === 'fail' || status === 'error') return SEMANTIC_COLORS.DANGER;\n return SEMANTIC_COLORS.DEFAULT;\n}\n\nfunction stepFlowStatus(s: AuditStep): string {\n if (s.stepType === 'ERROR' || s.status === 'error') return 'error';\n if (s.status === 'process' || s.status === 'processing') return 'process';\n if (s.status === 'wait') return 'wait';\n return 'finish';\n}\n\nfunction categoryLabel(c?: string | null): string {\n if (c === 'TRACE') return '请求线路';\n if (c === 'SYSTEM') return '系统';\n if (c === 'OPERATION' || !c) return '业务操作';\n return c;\n}\n\nfunction httpStatusColor(code: number): string {\n if (code >= 500) return SEMANTIC_COLORS.DANGER;\n if (code >= 400) return SEMANTIC_COLORS.WARNING;\n if (code >= 200 && code < 300) return SEMANTIC_COLORS.SUCCESS;\n return SEMANTIC_COLORS.DEFAULT;\n}\n\nfunction parseHttpStatus(output: unknown): number | null {\n if (!output || typeof output !== 'object' || Array.isArray(output)) return null;\n const v = (output as { httpStatus?: unknown }).httpStatus;\n if (typeof v === 'number' && Number.isFinite(v)) return v;\n if (v != null && String(v).trim() !== '') {\n const n = Number(v);\n return Number.isFinite(n) ? n : null;\n }\n return null;\n}\n\nconst JsonBlock: React.FC<{ value: unknown; maxHeight?: number }> = ({\n value,\n maxHeight = 360,\n}) => {\n const text = formatAuditJson(value);\n const truncated = isTruncatedAuditText(value) || text.includes('…[truncated]');\n return (\n <div className={styles.jsonWrap}>\n {truncated ? (\n <div className={styles.truncateHint}>内容已截断(采集侧 body 上限),以下为可读展开</div>\n ) : null}\n <VirtualScrollbar className={styles.jsonScroll} style={{ maxHeight }}>\n <pre className={styles.jsonBlock}>{text}</pre>\n </VirtualScrollbar>\n </div>\n );\n};\n\nfunction renderBody(label: string, value: unknown): React.ReactNode {\n if (value == null) return null;\n if (\n label === 'output' &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n value !== null &&\n ('httpStatus' in (value as object) || 'body' in (value as object))\n ) {\n const out = value as { body?: unknown; [k: string]: unknown };\n const rest = { ...out };\n delete rest.httpStatus;\n delete rest.body;\n const hasRest = Object.keys(rest).length > 0;\n return (\n <>\n {out.body !== undefined ? (\n <>\n <div className={styles.blockLabel}>响应体</div>\n <JsonBlock value={out.body} maxHeight={420} />\n </>\n ) : null}\n {hasRest ? (\n <>\n <div className={styles.blockLabel}>其它</div>\n <JsonBlock value={rest} />\n </>\n ) : null}\n </>\n );\n }\n return (\n <>\n <div className={styles.blockLabel}>{label}</div>\n <JsonBlock value={value} />\n </>\n );\n}\n\nexport const AuditStepContent: React.FC<{ step: AuditStep }> = ({ step }) => {\n const httpStatus = parseHttpStatus(step.output);\n return (\n <div className={styles.stepBody}>\n <div className={styles.stepMeta}>\n {step.stepType ? (\n <SemanticTag color={SEMANTIC_COLORS.DEFAULT}>{step.stepType}</SemanticTag>\n ) : null}\n {httpStatus != null ? (\n <SemanticTag color={httpStatusColor(httpStatus)}>HTTP {httpStatus}</SemanticTag>\n ) : null}\n {step.occurredAt ? (\n <Typography.Text type=\"secondary\">{formatCreatedAt(step.occurredAt)}</Typography.Text>\n ) : null}\n {typeof step.durationMs === 'number' ? (\n <Typography.Text type=\"secondary\">{step.durationMs} ms</Typography.Text>\n ) : null}\n </div>\n {step.sqlText ? (\n <>\n <div className={styles.blockLabel}>SQL</div>\n <VirtualScrollbar className={styles.jsonScroll} style={{ maxHeight: 200 }}>\n <pre className={styles.jsonBlock}>{step.sqlText}</pre>\n </VirtualScrollbar>\n </>\n ) : null}\n {step.tables?.length ? (\n <Typography.Text type=\"secondary\">表:{step.tables.join(', ')}</Typography.Text>\n ) : null}\n {step.errorMessage ? (\n <Typography.Text type=\"danger\">{step.errorMessage}</Typography.Text>\n ) : null}\n {step.errorCode ? (\n <Typography.Text type=\"secondary\">错误码:{step.errorCode}</Typography.Text>\n ) : null}\n {step.input != null ? renderBody('请求体', step.input) : null}\n {step.output != null ? renderBody('output', step.output) : null}\n </div>\n );\n};\n\n/** 审计事件详情:InfoPage + CommonDescriptions + Flow */\nexport const AuditEventDetailView: React.FC<{\n detail: AuditEventDetail | null;\n loading?: boolean;\n emptyDescription?: string;\n className?: string;\n /** 当前登录 token(不含 Bearer 前缀亦可);复制 curl 用,不落库 */\n getAuthToken?: () => string | null | undefined;\n}> = ({ detail, loading, emptyDescription = '暂无明细', className, getAuthToken }) => {\n if (loading) {\n return <Typography.Text type=\"secondary\">加载中…</Typography.Text>;\n }\n if (!detail) {\n return <Empty description={emptyDescription} />;\n }\n const steps = detail.steps || [];\n const title = detail.actionLabel || detail.action;\n\n const descContent = [\n {\n label: '操作人',\n value: detail.actorName?.trim() ? detail.actorName : '—',\n },\n { label: '时间', value: formatCreatedAt(detail.createdAt) },\n {\n label: '方法',\n value: detail.httpMethod?.trim() ? detail.httpMethod : '—',\n },\n {\n label: '状态',\n value: (\n <SemanticTag color={statusColor(detail.status)}>{statusLabel(detail.status)}</SemanticTag>\n ),\n },\n {\n label: '类别',\n value: detail.category ? categoryLabel(detail.category) : '—',\n },\n {\n label: '耗时',\n value: typeof detail.durationMs === 'number' ? `${detail.durationMs} ms` : '—',\n },\n {\n label: '路径',\n value: detail.path?.trim() ? (\n <Typography.Text code copyable={{ text: detail.path }}>\n {detail.path}\n </Typography.Text>\n ) : (\n '—'\n ),\n span: 2,\n },\n {\n label: 'traceId',\n value: detail.traceId ? (\n <Typography.Text copyable={{ text: detail.traceId }}>{detail.traceId}</Typography.Text>\n ) : (\n '—'\n ),\n span: 1,\n },\n ...(detail.actionLabel\n ? [{ label: '动作码', value: <Typography.Text code>{detail.action}</Typography.Text> }]\n : []),\n ];\n\n return (\n <InfoPage className={classNames(styles.detail, className)}>\n <InfoPage.Part\n title={\n <Space size={8} wrap>\n <span>{title}</span>\n {detail.actionLabel ? (\n <Typography.Text type=\"secondary\" className={styles.actionCode}>\n {detail.action}\n </Typography.Text>\n ) : null}\n </Space>\n }\n subtitle=\"事件摘要\"\n extra={\n detail.path || detail.requestCurl ? (\n <Button\n size=\"small\"\n type=\"primary\"\n onClick={async () => {\n try {\n const text = buildAuditReplayCurl(detail, readBrowserReplaySession(getAuthToken));\n const ok = await copyText(text);\n if (ok) message.success('已复制 curl');\n else message.error('复制失败');\n } catch (e) {\n message.error(e instanceof Error ? e.message : '无法生成 curl');\n }\n }}\n >\n 复制 curl\n </Button>\n ) : undefined\n }\n >\n <CommonDescriptions content={descContent} column={3} bordered size=\"small\" />\n </InfoPage.Part>\n\n <InfoPage.Part title=\"执行流程\" subtitle=\"请求 → 响应步骤\">\n {steps.length === 0 ? (\n <Empty description=\"无流程步骤\" />\n ) : (\n <div className={styles.flowWrap}>\n <Flow\n dataSource={steps.map((s) => ({\n title: s.title || s.stepType,\n description: undefined,\n status: stepFlowStatus(s),\n content: <AuditStepContent step={s} />,\n }))}\n />\n </div>\n )}\n </InfoPage.Part>\n </InfoPage>\n );\n};\n\nexport const AuditLogList: React.FC<AuditLogListProps> = ({\n mode = 'app',\n dataSource,\n loading,\n onRowClick,\n filterSlot,\n pagination,\n className,\n}) => {\n const columns: ColumnsType<AuditEventListItem> = useMemo(() => {\n const cols: ColumnsType<AuditEventListItem> = [\n {\n title: '时间',\n dataIndex: 'createdAt',\n width: 180,\n render: (v: string) => formatCreatedAt(v),\n },\n {\n title: '类别',\n dataIndex: 'category',\n width: 96,\n render: (v: string | undefined) => categoryLabel(v),\n },\n {\n title: '方法',\n dataIndex: 'httpMethod',\n width: 72,\n render: (v: string | null | undefined) => (v && String(v).trim() ? v : '—'),\n },\n {\n title: '操作人',\n dataIndex: 'actorName',\n width: 100,\n ellipsis: true,\n render: (v: string | null | undefined) => (v && String(v).trim() ? v : '—'),\n },\n {\n title: '动作',\n dataIndex: 'action',\n width: 160,\n ellipsis: true,\n render: (_: unknown, row) => row.actionLabel || row.action,\n },\n { title: '摘要', dataIndex: 'summary', ellipsis: true },\n {\n title: '状态',\n dataIndex: 'status',\n width: 90,\n render: (v: string) => <SemanticTag color={statusColor(v)}>{statusLabel(v)}</SemanticTag>,\n },\n { title: '耗时ms', dataIndex: 'durationMs', width: 80 },\n { title: '路径', dataIndex: 'path', ellipsis: true },\n ];\n if (mode === 'platform') {\n cols.splice(2, 0, {\n title: '系统',\n dataIndex: 'systemAppId',\n width: 140,\n ellipsis: true,\n });\n }\n return cols;\n }, [mode]);\n\n return (\n <div className={classNames(styles.wrap, className)}>\n {filterSlot ? <div className={styles.filter}>{filterSlot}</div> : null}\n <Table<AuditEventListItem>\n rowKey=\"id\"\n loading={loading}\n columns={columns}\n dataSource={dataSource}\n pagination={pagination === undefined ? false : pagination}\n onRow={\n onRowClick\n ? (record) => ({\n onClick: () => onRowClick(record),\n style: { cursor: 'pointer' },\n })\n : undefined\n }\n />\n </div>\n );\n};\n\nexport default AuditLogList;\n"],"names":["formatCreatedAt","iso","d","dayjs","statusLabel","status","statusColor","SEMANTIC_COLORS","stepFlowStatus","s","categoryLabel","c","httpStatusColor","code","parseHttpStatus","output","v","n","JsonBlock","value","maxHeight","text","formatAuditJson","truncated","isTruncatedAuditText","jsxs","styles","jsx","VirtualScrollbar","renderBody","label","out","rest","hasRest","Fragment","AuditStepContent","step","httpStatus","SemanticTag","Typography","_a","AuditEventDetailView","detail","loading","emptyDescription","className","getAuthToken","Empty","steps","title","descContent","_b","_c","InfoPage","classNames","Space","Button","buildAuditReplayCurl","readBrowserReplaySession","copyText","message","e","CommonDescriptions","Flow","AuditLogList","mode","dataSource","onRowClick","filterSlot","pagination","columns","useMemo","cols","_","row","Table","record"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 浏览器「Copy as cURL」风格:用当前页 origin + 当前登录态拼可执行命令。
3
+ * 库内 requestCurl 仍脱敏,复制时不回读落库 token。
4
+ */
5
+ export type AuditReplayDetail = {
6
+ httpMethod?: string | null;
7
+ path?: string | null;
8
+ requestCurl?: string | null;
9
+ steps?: Array<{
10
+ stepType?: string;
11
+ input?: unknown;
12
+ }>;
13
+ };
14
+ export type AuditReplaySession = {
15
+ origin: string;
16
+ authorization?: string | null;
17
+ cookie?: string | null;
18
+ userAgent?: string | null;
19
+ acceptLanguage?: string | null;
20
+ referer?: string | null;
21
+ };
22
+ export declare function resolveReplayPath(detail: AuditReplayDetail): string | undefined;
23
+ export declare function resolveReplayMethod(detail: AuditReplayDetail): string;
24
+ export declare function resolveReplayBody(detail: AuditReplayDetail): string | undefined;
25
+ /** Chrome Copy as cURL(bash)形态;可直接粘贴。 */
26
+ export declare function buildAuditReplayCurl(detail: AuditReplayDetail, session: AuditReplaySession): string;
27
+ export declare function readBrowserReplaySession(getToken?: () => string | null | undefined): AuditReplaySession;
@@ -0,0 +1,115 @@
1
+ function a(r) {
2
+ return `'${r.replace(/'/g, "'\\''")}'`;
3
+ }
4
+ function $(r) {
5
+ if (r != null) {
6
+ if (typeof r == "string")
7
+ return r.trim() || void 0;
8
+ try {
9
+ return JSON.stringify(r);
10
+ } catch {
11
+ return;
12
+ }
13
+ }
14
+ }
15
+ function S(r) {
16
+ const t = r.match(/https?:\/\/[^/\s']+(\/[^'\s]*)/);
17
+ if (t != null && t[1])
18
+ try {
19
+ return new URL(t[0]).pathname + new URL(t[0]).search;
20
+ } catch {
21
+ return t[1];
22
+ }
23
+ const e = r.match(/'(?:https?:\/\/[^']+)?(\/[^']*)'/);
24
+ return e == null ? void 0 : e[1];
25
+ }
26
+ function A(r) {
27
+ const t = r.match(/curl\s+(?:-X|--request)\s+(\w+)/i);
28
+ return t == null ? void 0 : t[1];
29
+ }
30
+ function L(r) {
31
+ const t = r.match(/--data(?:-raw)?\s+'((?:\\'|[^'])*)'/);
32
+ if (t != null && t[1])
33
+ return t[1].replace(/'\\''/g, "'");
34
+ }
35
+ function R(r) {
36
+ var e;
37
+ const t = (e = r.path) == null ? void 0 : e.trim();
38
+ if (t) {
39
+ if (t.startsWith("http://") || t.startsWith("https://"))
40
+ try {
41
+ const o = new URL(t);
42
+ return o.pathname + o.search;
43
+ } catch {
44
+ return t;
45
+ }
46
+ return t.startsWith("/") ? t : `/${t}`;
47
+ }
48
+ if (r.requestCurl) return S(r.requestCurl);
49
+ }
50
+ function q(r) {
51
+ var e;
52
+ const t = (e = r.httpMethod) == null ? void 0 : e.trim();
53
+ if (t) return t.toUpperCase();
54
+ if (r.requestCurl) {
55
+ const o = A(r.requestCurl);
56
+ if (o) return o.toUpperCase();
57
+ }
58
+ return "GET";
59
+ }
60
+ function U(r) {
61
+ const t = (r.steps || []).find((o) => String(o.stepType).toUpperCase() === "REQUEST"), e = $(t == null ? void 0 : t.input);
62
+ if (e) return e;
63
+ if (r.requestCurl) return L(r.requestCurl);
64
+ }
65
+ function i(r, t) {
66
+ return ` -H ${a(`${r}: ${t}`)} \\`;
67
+ }
68
+ function z(r, t) {
69
+ var l, f, g, d, m;
70
+ const e = R(r);
71
+ if (!e)
72
+ throw new Error("无请求路径,无法生成 curl");
73
+ const o = t.origin.replace(/\/$/, ""), C = `${o}${e}`, s = q(r), h = s === "GET" || s === "HEAD" ? void 0 : U(r), y = ((l = t.acceptLanguage) == null ? void 0 : l.trim()) || "zh-CN,zh;q=0.9", w = ((f = t.userAgent) == null ? void 0 : f.trim()) || "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36", v = ((g = t.referer) == null ? void 0 : g.trim()) || `${o}/`, n = [
74
+ `curl --url ${a(C)} \\`,
75
+ ` -X ${s} \\`,
76
+ i("Accept", "application/json, text/plain, */*"),
77
+ i("Accept-Language", y)
78
+ ], c = (d = t.authorization) == null ? void 0 : d.trim();
79
+ if (c) {
80
+ const u = c.toLowerCase().startsWith("bearer ") ? c : `Bearer ${c}`;
81
+ n.push(i("Authorization", u));
82
+ }
83
+ n.push(i("Connection", "keep-alive")), h && n.push(i("Content-Type", "application/json"));
84
+ const p = (m = t.cookie) == null ? void 0 : m.trim();
85
+ if (p && n.push(` -b ${a(p)} \\`), n.push(i("Origin", o)), n.push(i("Referer", v)), n.push(i("Sec-Fetch-Dest", "empty")), n.push(i("Sec-Fetch-Mode", "cors")), n.push(i("Sec-Fetch-Site", "same-origin")), n.push(i("User-Agent", w)), h)
86
+ n.push(` --data-raw ${a(h)}`);
87
+ else {
88
+ const u = n.length ? n[n.length - 1] : void 0;
89
+ typeof u == "string" && u.endsWith(" \\") && (n[n.length - 1] = u.slice(0, -2));
90
+ }
91
+ return n.join(`
92
+ `);
93
+ }
94
+ function M(r) {
95
+ var e;
96
+ if (typeof window > "u")
97
+ return { origin: "" };
98
+ const t = (e = r == null ? void 0 : r()) == null ? void 0 : e.trim();
99
+ return {
100
+ origin: window.location.origin,
101
+ authorization: t ? t.toLowerCase().startsWith("bearer ") ? t : `Bearer ${t}` : null,
102
+ cookie: document.cookie || null,
103
+ userAgent: navigator.userAgent || null,
104
+ acceptLanguage: navigator.language ? `${navigator.language},zh;q=0.9` : null,
105
+ referer: window.location.href
106
+ };
107
+ }
108
+ export {
109
+ z as buildAuditReplayCurl,
110
+ M as readBrowserReplaySession,
111
+ U as resolveReplayBody,
112
+ q as resolveReplayMethod,
113
+ R as resolveReplayPath
114
+ };
115
+ //# sourceMappingURL=formatAuditCurl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatAuditCurl.js","sources":["../../../src/components/Audit/formatAuditCurl.ts"],"sourcesContent":["/**\n * 浏览器「Copy as cURL」风格:用当前页 origin + 当前登录态拼可执行命令。\n * 库内 requestCurl 仍脱敏,复制时不回读落库 token。\n */\n\nexport type AuditReplayDetail = {\n httpMethod?: string | null;\n path?: string | null;\n requestCurl?: string | null;\n steps?: Array<{ stepType?: string; input?: unknown }>;\n};\n\nexport type AuditReplaySession = {\n origin: string;\n authorization?: string | null;\n cookie?: string | null;\n userAgent?: string | null;\n acceptLanguage?: string | null;\n referer?: string | null;\n};\n\nfunction shellSingleQuote(s: string): string {\n return `'${s.replace(/'/g, `'\\\\''`)}'`;\n}\n\nfunction compactJsonBody(input: unknown): string | undefined {\n if (input == null) return undefined;\n if (typeof input === 'string') {\n const t = input.trim();\n return t || undefined;\n }\n try {\n return JSON.stringify(input);\n } catch {\n return undefined;\n }\n}\n\nfunction pathFromStoredCurl(curl: string): string | undefined {\n const abs = curl.match(/https?:\\/\\/[^/\\s']+(\\/[^'\\s]*)/);\n if (abs?.[1]) {\n try {\n return new URL(abs[0]).pathname + new URL(abs[0]).search;\n } catch {\n return abs[1];\n }\n }\n const rel = curl.match(/'(?:https?:\\/\\/[^']+)?(\\/[^']*)'/);\n return rel?.[1];\n}\n\nfunction methodFromStoredCurl(curl: string): string | undefined {\n const m = curl.match(/curl\\s+(?:-X|--request)\\s+(\\w+)/i);\n return m?.[1];\n}\n\nfunction bodyFromStoredCurl(curl: string): string | undefined {\n const m = curl.match(/--data(?:-raw)?\\s+'((?:\\\\'|[^'])*)'/);\n if (!m?.[1]) return undefined;\n return m[1].replace(/'\\\\''/g, \"'\");\n}\n\nexport function resolveReplayPath(detail: AuditReplayDetail): string | undefined {\n const p = detail.path?.trim();\n if (p) {\n if (p.startsWith('http://') || p.startsWith('https://')) {\n try {\n const u = new URL(p);\n return u.pathname + u.search;\n } catch {\n return p;\n }\n }\n return p.startsWith('/') ? p : `/${p}`;\n }\n if (detail.requestCurl) return pathFromStoredCurl(detail.requestCurl);\n return undefined;\n}\n\nexport function resolveReplayMethod(detail: AuditReplayDetail): string {\n const m = detail.httpMethod?.trim();\n if (m) return m.toUpperCase();\n if (detail.requestCurl) {\n const fromCurl = methodFromStoredCurl(detail.requestCurl);\n if (fromCurl) return fromCurl.toUpperCase();\n }\n return 'GET';\n}\n\nexport function resolveReplayBody(detail: AuditReplayDetail): string | undefined {\n const req = (detail.steps || []).find((s) => String(s.stepType).toUpperCase() === 'REQUEST');\n const fromStep = compactJsonBody(req?.input);\n if (fromStep) return fromStep;\n if (detail.requestCurl) return bodyFromStoredCurl(detail.requestCurl);\n return undefined;\n}\n\nfunction headerLine(name: string, value: string): string {\n return ` -H ${shellSingleQuote(`${name}: ${value}`)} \\\\`;\n}\n\n/** Chrome Copy as cURL(bash)形态;可直接粘贴。 */\nexport function buildAuditReplayCurl(\n detail: AuditReplayDetail,\n session: AuditReplaySession,\n): string {\n const path = resolveReplayPath(detail);\n if (!path) {\n throw new Error('无请求路径,无法生成 curl');\n }\n const origin = session.origin.replace(/\\/$/, '');\n const url = `${origin}${path}`;\n const method = resolveReplayMethod(detail);\n const body = method === 'GET' || method === 'HEAD' ? undefined : resolveReplayBody(detail);\n const lang = session.acceptLanguage?.trim() || 'zh-CN,zh;q=0.9';\n const ua =\n session.userAgent?.trim() ||\n 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36';\n const referer = session.referer?.trim() || `${origin}/`;\n const lines: string[] = [\n `curl --url ${shellSingleQuote(url)} \\\\`,\n ` -X ${method} \\\\`,\n headerLine('Accept', 'application/json, text/plain, */*'),\n headerLine('Accept-Language', lang),\n ];\n const auth = session.authorization?.trim();\n if (auth) {\n const value = auth.toLowerCase().startsWith('bearer ') ? auth : `Bearer ${auth}`;\n lines.push(headerLine('Authorization', value));\n }\n lines.push(headerLine('Connection', 'keep-alive'));\n if (body) {\n lines.push(headerLine('Content-Type', 'application/json'));\n }\n const cookie = session.cookie?.trim();\n if (cookie) {\n lines.push(` -b ${shellSingleQuote(cookie)} \\\\`);\n }\n lines.push(headerLine('Origin', origin));\n lines.push(headerLine('Referer', referer));\n lines.push(headerLine('Sec-Fetch-Dest', 'empty'));\n lines.push(headerLine('Sec-Fetch-Mode', 'cors'));\n lines.push(headerLine('Sec-Fetch-Site', 'same-origin'));\n lines.push(headerLine('User-Agent', ua));\n if (body) {\n lines.push(` --data-raw ${shellSingleQuote(body)}`);\n } else {\n const last = lines.length ? lines[lines.length - 1] : undefined;\n if (typeof last === 'string' && last.endsWith(' \\\\')) {\n lines[lines.length - 1] = last.slice(0, -2);\n }\n }\n return lines.join('\\n');\n}\n\nexport function readBrowserReplaySession(\n getToken?: () => string | null | undefined,\n): AuditReplaySession {\n if (typeof window === 'undefined') {\n return { origin: '' };\n }\n const token = getToken?.()?.trim();\n return {\n origin: window.location.origin,\n authorization: token\n ? token.toLowerCase().startsWith('bearer ')\n ? token\n : `Bearer ${token}`\n : null,\n cookie: document.cookie || null,\n userAgent: navigator.userAgent || null,\n acceptLanguage: navigator.language ? `${navigator.language},zh;q=0.9` : null,\n referer: window.location.href,\n };\n}\n"],"names":["shellSingleQuote","s","compactJsonBody","input","pathFromStoredCurl","curl","abs","rel","methodFromStoredCurl","m","bodyFromStoredCurl","resolveReplayPath","detail","_a","p","u","resolveReplayMethod","fromCurl","resolveReplayBody","req","fromStep","headerLine","name","value","buildAuditReplayCurl","session","_b","_c","_d","_e","path","origin","url","method","body","lang","ua","referer","lines","auth","cookie","last","readBrowserReplaySession","getToken","token"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 审计步骤里常见「body 为 JSON 字符串」或双层转义;展示前递归解包再 pretty-print。
3
+ * 截断串(…[truncated])尽量修复括号后再格式化;**禁止**对纯字符串再 JSON.stringify(会多包一层引号/转义)。
4
+ */
5
+ export declare function isTruncatedAuditText(value: unknown): boolean;
6
+ export declare function unwrapAuditJson(value: unknown, depth?: number): unknown;
7
+ /** 尽量闭合截断 JSON 的括号/引号,便于 parse */
8
+ export declare function repairTruncatedJson(raw: string): string;
9
+ /** 无法 parse 时的轻量缩进(不包外层引号) */
10
+ export declare function indentJsonLike(s: string): string;
11
+ export declare function formatAuditJson(value: unknown): string;
12
+ /**
13
+ * 复制到 bash:修复历史粘连 header,Authorization 占位(禁止落真实 token)。
14
+ */
15
+ export declare function sanitizeAuditCurl(raw: string): string;