@hkyhy/marsun-components-core 0.1.98 → 0.1.100

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 (234) hide show
  1. package/README.md +5 -4
  2. package/dist/components/Disposition/AlertDispositionPanel/LevelLegend.d.ts +13 -0
  3. package/dist/components/Disposition/AlertDispositionPanel/LevelLegend.js +36 -0
  4. package/dist/components/Disposition/AlertDispositionPanel/LevelLegend.js.map +1 -0
  5. package/dist/components/Disposition/AlertDispositionPanel/index.d.ts +21 -0
  6. package/dist/components/Disposition/AlertDispositionPanel/index.js +80 -0
  7. package/dist/components/Disposition/AlertDispositionPanel/index.js.map +1 -0
  8. package/dist/components/Disposition/AlertDispositionPanel/levelLegend.module.scss.js +10 -0
  9. package/dist/components/Disposition/AlertDispositionPanel/levelLegend.module.scss.js.map +1 -0
  10. package/dist/components/Disposition/AlertDispositionPanel/style.module.scss.js +11 -0
  11. package/dist/components/Disposition/AlertDispositionPanel/types.d.ts +51 -0
  12. package/dist/components/Disposition/AlertDispositionPanel/types.js +26 -0
  13. package/dist/components/Disposition/AlertDispositionPanel/types.js.map +1 -0
  14. package/dist/components/Disposition/DispositionBar/index.js.map +1 -0
  15. package/dist/components/Disposition/DispositionBar/style.module.scss.js.map +1 -0
  16. package/dist/components/Disposition/index.d.ts +4 -0
  17. package/dist/components/Editor/RichTextEditor/RichTextEditor.js +36 -45
  18. package/dist/components/Editor/RichTextEditor/RichTextEditor.js.map +1 -1
  19. package/dist/components/Editor/msgVarTokenPlugin.js +14 -19
  20. package/dist/components/Editor/msgVarTokenPlugin.js.map +1 -1
  21. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js +193 -145
  22. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/MessageTemplateAdmin.js.map +1 -1
  23. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.d.ts +18 -0
  24. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js +315 -0
  25. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/PushRulesPanel/index.js.map +1 -0
  26. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.d.ts +14 -0
  27. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js +183 -0
  28. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/VariablesPanel/index.js.map +1 -0
  29. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/index.d.ts +1 -1
  30. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.d.ts +26 -0
  31. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js +5 -3
  32. package/dist/components/Tools/MessageCenter/MessageTemplateAdmin/types.js.map +1 -1
  33. package/dist/components/Tools/MessageCenter/index.d.ts +1 -1
  34. package/dist/components/Tools/MessageCenter/utils/adminGuards.d.ts +14 -0
  35. package/dist/components/Tools/MessageCenter/utils/adminGuards.js +12 -0
  36. package/dist/components/Tools/MessageCenter/utils/adminGuards.js.map +1 -0
  37. package/dist/components/index.d.ts +2 -2
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.js +715 -707
  40. package/dist/index.js.map +1 -1
  41. package/dist/marsun-components-core.css +1 -1
  42. package/dist/styles/global.css +1 -1
  43. package/package.json +4 -3
  44. package/dist/components/DispositionBar/index.js.map +0 -1
  45. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js +0 -301
  46. package/dist/node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js.map +0 -1
  47. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js +0 -1256
  48. package/dist/node_modules/@ckeditor/ckeditor5-clipboard/dist/index.js.map +0 -1
  49. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js +0 -2107
  50. package/dist/node_modules/@ckeditor/ckeditor5-core/dist/index.js.map +0 -1
  51. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js +0 -259
  52. package/dist/node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js.map +0 -1
  53. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js +0 -23990
  54. package/dist/node_modules/@ckeditor/ckeditor5-engine/dist/index.js.map +0 -1
  55. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js +0 -249
  56. package/dist/node_modules/@ckeditor/ckeditor5-enter/dist/index.js.map +0 -1
  57. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js +0 -47
  58. package/dist/node_modules/@ckeditor/ckeditor5-essentials/dist/index.js.map +0 -1
  59. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js +0 -100
  60. package/dist/node_modules/@ckeditor/ckeditor5-font/dist/index.js.map +0 -1
  61. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js +0 -31
  62. package/dist/node_modules/@ckeditor/ckeditor5-icons/dist/index.js.map +0 -1
  63. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js +0 -194
  64. package/dist/node_modules/@ckeditor/ckeditor5-integrations-common/dist/index.js.map +0 -1
  65. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js +0 -2042
  66. package/dist/node_modules/@ckeditor/ckeditor5-list/dist/index.js.map +0 -1
  67. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js +0 -9
  68. package/dist/node_modules/@ckeditor/ckeditor5-mention/dist/index.js.map +0 -1
  69. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js +0 -167
  70. package/dist/node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js.map +0 -1
  71. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js +0 -471
  72. package/dist/node_modules/@ckeditor/ckeditor5-react/dist/index.js.map +0 -1
  73. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js +0 -139
  74. package/dist/node_modules/@ckeditor/ckeditor5-select-all/dist/index.js.map +0 -1
  75. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js +0 -755
  76. package/dist/node_modules/@ckeditor/ckeditor5-typing/dist/index.js.map +0 -1
  77. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js +0 -7838
  78. package/dist/node_modules/@ckeditor/ckeditor5-ui/dist/index.js.map +0 -1
  79. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js +0 -422
  80. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/conversions.js.map +0 -1
  81. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js +0 -33
  82. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/index.js.map +0 -1
  83. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js +0 -47
  84. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert/route.js.map +0 -1
  85. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js +0 -156
  86. package/dist/node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name/index.js.map +0 -1
  87. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js +0 -313
  88. package/dist/node_modules/@ckeditor/ckeditor5-undo/dist/index.js.map +0 -1
  89. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js +0 -2942
  90. package/dist/node_modules/@ckeditor/ckeditor5-utils/dist/index.js.map +0 -1
  91. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js +0 -892
  92. package/dist/node_modules/@ckeditor/ckeditor5-watchdog/dist/index.js.map +0 -1
  93. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js +0 -1047
  94. package/dist/node_modules/@ckeditor/ckeditor5-widget/dist/index.js.map +0 -1
  95. package/dist/node_modules/color-parse/node_modules/color-name/index.js +0 -153
  96. package/dist/node_modules/color-parse/node_modules/color-name/index.js.map +0 -1
  97. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js +0 -7
  98. package/dist/node_modules/es-toolkit/dist/_internal/globalThis.js.map +0 -1
  99. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js +0 -7
  100. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeProperty.js.map +0 -1
  101. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js +0 -7
  102. package/dist/node_modules/es-toolkit/dist/_internal/isUnsafeToWriteProperty.js.map +0 -1
  103. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js +0 -9
  104. package/dist/node_modules/es-toolkit/dist/compat/_internal/assignValue.js.map +0 -1
  105. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js +0 -7
  106. package/dist/node_modules/es-toolkit/dist/compat/_internal/getSymbols.js.map +0 -1
  107. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js +0 -7
  108. package/dist/node_modules/es-toolkit/dist/compat/_internal/getTag.js.map +0 -1
  109. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js +0 -16
  110. package/dist/node_modules/es-toolkit/dist/compat/_internal/isDeepKey.js.map +0 -1
  111. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js +0 -15
  112. package/dist/node_modules/es-toolkit/dist/compat/_internal/isIndex.js.map +0 -1
  113. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js +0 -9
  114. package/dist/node_modules/es-toolkit/dist/compat/_internal/isKey.js.map +0 -1
  115. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js +0 -8
  116. package/dist/node_modules/es-toolkit/dist/compat/_internal/isPrototype.js.map +0 -1
  117. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js +0 -30
  118. package/dist/node_modules/es-toolkit/dist/compat/_internal/tags.js.map +0 -1
  119. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js +0 -8
  120. package/dist/node_modules/es-toolkit/dist/compat/_internal/toKey.js.map +0 -1
  121. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js +0 -17
  122. package/dist/node_modules/es-toolkit/dist/compat/function/debounce.js.map +0 -1
  123. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js +0 -13
  124. package/dist/node_modules/es-toolkit/dist/compat/function/throttle.js.map +0 -1
  125. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js +0 -17
  126. package/dist/node_modules/es-toolkit/dist/compat/object/assignIn.js.map +0 -1
  127. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js +0 -102
  128. package/dist/node_modules/es-toolkit/dist/compat/object/clone.js.map +0 -1
  129. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js +0 -8
  130. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeep.js.map +0 -1
  131. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js +0 -33
  132. package/dist/node_modules/es-toolkit/dist/compat/object/cloneDeepWith.js.map +0 -1
  133. package/dist/node_modules/es-toolkit/dist/compat/object/get.js +0 -39
  134. package/dist/node_modules/es-toolkit/dist/compat/object/get.js.map +0 -1
  135. package/dist/node_modules/es-toolkit/dist/compat/object/has.js +0 -21
  136. package/dist/node_modules/es-toolkit/dist/compat/object/has.js.map +0 -1
  137. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js +0 -33
  138. package/dist/node_modules/es-toolkit/dist/compat/object/keysIn.js.map +0 -1
  139. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js +0 -10
  140. package/dist/node_modules/es-toolkit/dist/compat/object/mapValues.js.map +0 -1
  141. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js +0 -9
  142. package/dist/node_modules/es-toolkit/dist/compat/object/merge.js.map +0 -1
  143. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js +0 -53
  144. package/dist/node_modules/es-toolkit/dist/compat/object/mergeWith.js.map +0 -1
  145. package/dist/node_modules/es-toolkit/dist/compat/object/property.js +0 -10
  146. package/dist/node_modules/es-toolkit/dist/compat/object/property.js.map +0 -1
  147. package/dist/node_modules/es-toolkit/dist/compat/object/set.js +0 -9
  148. package/dist/node_modules/es-toolkit/dist/compat/object/set.js.map +0 -1
  149. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js +0 -31
  150. package/dist/node_modules/es-toolkit/dist/compat/object/updateWith.js.map +0 -1
  151. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js +0 -8
  152. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArguments.js.map +0 -1
  153. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js +0 -7
  154. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArray.js.map +0 -1
  155. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js +0 -8
  156. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLike.js.map +0 -1
  157. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js +0 -9
  158. package/dist/node_modules/es-toolkit/dist/compat/predicate/isArrayLikeObject.js.map +0 -1
  159. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js +0 -9
  160. package/dist/node_modules/es-toolkit/dist/compat/predicate/isElement.js.map +0 -1
  161. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js +0 -15
  162. package/dist/node_modules/es-toolkit/dist/compat/predicate/isEqualWith.js.map +0 -1
  163. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js +0 -7
  164. package/dist/node_modules/es-toolkit/dist/compat/predicate/isFunction.js.map +0 -1
  165. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js +0 -9
  166. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatch.js.map +0 -1
  167. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js +0 -81
  168. package/dist/node_modules/es-toolkit/dist/compat/predicate/isMatchWith.js.map +0 -1
  169. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js +0 -7
  170. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObject.js.map +0 -1
  171. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js +0 -7
  172. package/dist/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.js.map +0 -1
  173. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js +0 -16
  174. package/dist/node_modules/es-toolkit/dist/compat/predicate/isPlainObject.js.map +0 -1
  175. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js +0 -7
  176. package/dist/node_modules/es-toolkit/dist/compat/predicate/isString.js.map +0 -1
  177. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js +0 -7
  178. package/dist/node_modules/es-toolkit/dist/compat/predicate/isSymbol.js.map +0 -1
  179. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js +0 -8
  180. package/dist/node_modules/es-toolkit/dist/compat/predicate/isTypedArray.js.map +0 -1
  181. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js +0 -9
  182. package/dist/node_modules/es-toolkit/dist/compat/predicate/matches.js.map +0 -1
  183. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js +0 -23
  184. package/dist/node_modules/es-toolkit/dist/compat/predicate/matchesProperty.js.map +0 -1
  185. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js +0 -7
  186. package/dist/node_modules/es-toolkit/dist/compat/util/eq.js.map +0 -1
  187. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js +0 -19
  188. package/dist/node_modules/es-toolkit/dist/compat/util/iteratee.js.map +0 -1
  189. package/dist/node_modules/es-toolkit/dist/compat/util/times.js +0 -11
  190. package/dist/node_modules/es-toolkit/dist/compat/util/times.js.map +0 -1
  191. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js +0 -8
  192. package/dist/node_modules/es-toolkit/dist/compat/util/toFinite.js.map +0 -1
  193. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js +0 -9
  194. package/dist/node_modules/es-toolkit/dist/compat/util/toInteger.js.map +0 -1
  195. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js +0 -8
  196. package/dist/node_modules/es-toolkit/dist/compat/util/toNumber.js.map +0 -1
  197. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js +0 -37
  198. package/dist/node_modules/es-toolkit/dist/compat/util/toPath.js.map +0 -1
  199. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js +0 -15
  200. package/dist/node_modules/es-toolkit/dist/compat/util/toString.js.map +0 -1
  201. package/dist/node_modules/es-toolkit/dist/function/after.js +0 -11
  202. package/dist/node_modules/es-toolkit/dist/function/after.js.map +0 -1
  203. package/dist/node_modules/es-toolkit/dist/function/debounce.js +0 -30
  204. package/dist/node_modules/es-toolkit/dist/function/debounce.js.map +0 -1
  205. package/dist/node_modules/es-toolkit/dist/function/identity.js +0 -7
  206. package/dist/node_modules/es-toolkit/dist/function/identity.js.map +0 -1
  207. package/dist/node_modules/es-toolkit/dist/function/noop.js +0 -6
  208. package/dist/node_modules/es-toolkit/dist/function/noop.js.map +0 -1
  209. package/dist/node_modules/es-toolkit/dist/object/clone.js +0 -27
  210. package/dist/node_modules/es-toolkit/dist/object/clone.js.map +0 -1
  211. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js +0 -8
  212. package/dist/node_modules/es-toolkit/dist/object/cloneDeep.js.map +0 -1
  213. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js +0 -121
  214. package/dist/node_modules/es-toolkit/dist/object/cloneDeepWith.js.map +0 -1
  215. package/dist/node_modules/es-toolkit/dist/object/mapValues.js +0 -12
  216. package/dist/node_modules/es-toolkit/dist/object/mapValues.js.map +0 -1
  217. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js +0 -8
  218. package/dist/node_modules/es-toolkit/dist/predicate/isBuffer.js.map +0 -1
  219. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js +0 -9
  220. package/dist/node_modules/es-toolkit/dist/predicate/isEqual.js.map +0 -1
  221. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js +0 -110
  222. package/dist/node_modules/es-toolkit/dist/predicate/isEqualWith.js.map +0 -1
  223. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js +0 -7
  224. package/dist/node_modules/es-toolkit/dist/predicate/isLength.js.map +0 -1
  225. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js +0 -9
  226. package/dist/node_modules/es-toolkit/dist/predicate/isPlainObject.js.map +0 -1
  227. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js +0 -7
  228. package/dist/node_modules/es-toolkit/dist/predicate/isPrimitive.js.map +0 -1
  229. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js +0 -7
  230. package/dist/node_modules/es-toolkit/dist/predicate/isTypedArray.js.map +0 -1
  231. /package/dist/components/{DispositionBar → Disposition/AlertDispositionPanel}/style.module.scss.js.map +0 -0
  232. /package/dist/components/{DispositionBar → Disposition/DispositionBar}/index.d.ts +0 -0
  233. /package/dist/components/{DispositionBar → Disposition/DispositionBar}/index.js +0 -0
  234. /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,13 @@
1
+ import { default as React } from 'react';
2
+ import { DispositionAlertLevelCatalog } from './types';
3
+ export type DispositionAlertLevelLegendProps = {
4
+ catalog: DispositionAlertLevelCatalog;
5
+ className?: string;
6
+ /** 图例标题,默认「等级」 */
7
+ title?: string;
8
+ };
9
+ /**
10
+ * 等级图例:完全由 catalog 驱动,不内置任何产品级数/文案。
11
+ */
12
+ declare const DispositionAlertLevelLegend: React.FC<DispositionAlertLevelLegendProps>;
13
+ export default DispositionAlertLevelLegend;
@@ -0,0 +1,36 @@
1
+ import { jsxs as n, jsx as i } from "react/jsx-runtime";
2
+ import t from "classnames";
3
+ import e from "./levelLegend.module.scss.js";
4
+ const p = ({
5
+ catalog: l,
6
+ className: r,
7
+ title: a = "等级"
8
+ }) => l.length ? /* @__PURE__ */ n(
9
+ "div",
10
+ {
11
+ className: t(
12
+ "marsun-disposition-alert-level-legend",
13
+ e["marsun-disposition-alert-level-legend"],
14
+ r
15
+ ),
16
+ "aria-label": a,
17
+ children: [
18
+ /* @__PURE__ */ i("span", { className: e["marsun-disposition-alert-level-legend-title"], children: a }),
19
+ l.map((s) => /* @__PURE__ */ n("span", { className: e["marsun-disposition-alert-level-legend-item"], children: [
20
+ /* @__PURE__ */ i(
21
+ "span",
22
+ {
23
+ className: e["marsun-disposition-alert-level-legend-dot"],
24
+ style: { background: s.tone },
25
+ "aria-hidden": !0
26
+ }
27
+ ),
28
+ s.label
29
+ ] }, s.key))
30
+ ]
31
+ }
32
+ ) : null;
33
+ export {
34
+ p as default
35
+ };
36
+ //# sourceMappingURL=LevelLegend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LevelLegend.js","sources":["../../../../src/components/Disposition/AlertDispositionPanel/LevelLegend.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React from 'react';\nimport type { DispositionAlertLevelCatalog } from './types';\nimport styles from './levelLegend.module.scss';\n\nexport type DispositionAlertLevelLegendProps = {\n catalog: DispositionAlertLevelCatalog;\n className?: string;\n /** 图例标题,默认「等级」 */\n title?: string;\n};\n\n/**\n * 等级图例:完全由 catalog 驱动,不内置任何产品级数/文案。\n */\nconst DispositionAlertLevelLegend: React.FC<DispositionAlertLevelLegendProps> = ({\n catalog,\n className,\n title = '等级',\n}) => {\n if (!catalog.length) return null;\n\n return (\n <div\n className={classNames(\n 'marsun-disposition-alert-level-legend',\n styles['marsun-disposition-alert-level-legend'],\n className,\n )}\n aria-label={title}\n >\n <span className={styles['marsun-disposition-alert-level-legend-title']}>{title}</span>\n {catalog.map((lv) => (\n <span key={lv.key} className={styles['marsun-disposition-alert-level-legend-item']}>\n <span\n className={styles['marsun-disposition-alert-level-legend-dot']}\n style={{ background: lv.tone }}\n aria-hidden\n />\n {lv.label}\n </span>\n ))}\n </div>\n );\n};\n\nexport default DispositionAlertLevelLegend;\n"],"names":["DispositionAlertLevelLegend","catalog","className","title","jsxs","classNames","styles","jsx","lv"],"mappings":";;;AAeA,MAAMA,IAA0E,CAAC;AAAA,EAC/E,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC,IAAQ;AACV,MACOF,EAAQ,SAGX,gBAAAG;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAC,EAAO,uCAAuC;AAAA,MAC9CJ;AAAA,IAAA;AAAA,IAEF,cAAYC;AAAA,IAEZ,UAAA;AAAA,MAAA,gBAAAI,EAAC,QAAA,EAAK,WAAWD,EAAO,6CAA6C,GAAI,UAAAH,GAAM;AAAA,MAC9EF,EAAQ,IAAI,CAACO,wBACX,QAAA,EAAkB,WAAWF,EAAO,4CAA4C,GAC/E,UAAA;AAAA,QAAA,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWD,EAAO,2CAA2C;AAAA,YAC7D,OAAO,EAAE,YAAYE,EAAG,KAAA;AAAA,YACxB,eAAW;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZA,EAAG;AAAA,MAAA,EAAA,GANKA,EAAG,GAOd,CACD;AAAA,IAAA;AAAA,EAAA;AAAA,IArBuB;"}
@@ -0,0 +1,21 @@
1
+ import { default as React, ReactNode } from 'react';
2
+ import { DispositionAlertContext } from './types';
3
+ export type { DispositionAlertContext, DispositionAlertKind, DispositionAlertLevelSpec, DispositionAlertLevelCatalog, } from './types';
4
+ export { formatDispositionTriggerText, getDispositionAlertLevel, buildDispositionAlertContext, } from './types';
5
+ export { default as DispositionAlertLevelLegend } from './LevelLegend';
6
+ export type { DispositionAlertLevelLegendProps } from './LevelLegend';
7
+ export type AlertDispositionPanelProps = {
8
+ open: boolean;
9
+ context: DispositionAlertContext | null;
10
+ children: ReactNode;
11
+ className?: string;
12
+ /** 手动收起(换机台仍由业务 hook resetKey 清空) */
13
+ onCollapse?: () => void;
14
+ };
15
+ /**
16
+ * 详情处置展开壳:触发上下文条 + 分域 DispositionBar(children)。
17
+ * 收起 → null;扁平布局,禁双层 card。不绑业务 API / EP / reveal 状态。
18
+ * 等级展示靠 label + 可选 tone 色标,与圆点/方点等形状解耦。
19
+ */
20
+ declare const AlertDispositionPanel: React.FC<AlertDispositionPanelProps>;
21
+ export default AlertDispositionPanel;
@@ -0,0 +1,80 @@
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { Tag as d, Button as p } from "antd";
3
+ import t from "classnames";
4
+ import { formatDispositionTriggerText as m } from "./types.js";
5
+ import { buildDispositionAlertContext as A, getDispositionAlertLevel as T } from "./types.js";
6
+ import s from "./style.module.scss.js";
7
+ const N = ({
8
+ open: a,
9
+ context: i,
10
+ children: l,
11
+ className: n,
12
+ onCollapse: o
13
+ }) => !a || !i ? null : /* @__PURE__ */ r(
14
+ "div",
15
+ {
16
+ className: t(
17
+ "marsun-alert-disposition-panel",
18
+ s["marsun-alert-disposition-panel"],
19
+ n
20
+ ),
21
+ "data-testid": "alert-disposition-panel",
22
+ children: [
23
+ /* @__PURE__ */ r(
24
+ "div",
25
+ {
26
+ className: t(
27
+ "marsun-alert-disposition-trigger-row",
28
+ s["marsun-alert-disposition-trigger-row"]
29
+ ),
30
+ children: [
31
+ /* @__PURE__ */ r(
32
+ "div",
33
+ {
34
+ className: t(
35
+ "marsun-alert-disposition-trigger",
36
+ s["marsun-alert-disposition-trigger"]
37
+ ),
38
+ "data-testid": "alert-disposition-trigger",
39
+ children: [
40
+ i.tone ? /* @__PURE__ */ e(
41
+ d,
42
+ {
43
+ color: i.tone,
44
+ className: s["marsun-alert-disposition-tone"],
45
+ "data-testid": "alert-disposition-tone",
46
+ children: i.label
47
+ }
48
+ ) : null,
49
+ /* @__PURE__ */ e("span", { children: m(i) })
50
+ ]
51
+ }
52
+ ),
53
+ o ? /* @__PURE__ */ e(
54
+ p,
55
+ {
56
+ type: "link",
57
+ size: "small",
58
+ className: t(
59
+ "marsun-alert-disposition-collapse",
60
+ s["marsun-alert-disposition-collapse"]
61
+ ),
62
+ onClick: o,
63
+ "data-testid": "alert-disposition-collapse",
64
+ children: "收起"
65
+ }
66
+ ) : null
67
+ ]
68
+ }
69
+ ),
70
+ l
71
+ ]
72
+ }
73
+ );
74
+ export {
75
+ A as buildDispositionAlertContext,
76
+ N as default,
77
+ m as formatDispositionTriggerText,
78
+ T as getDispositionAlertLevel
79
+ };
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Disposition/AlertDispositionPanel/index.tsx"],"sourcesContent":["import { Button, Tag } from 'antd';\nimport classNames from 'classnames';\nimport React, { type ReactNode } from 'react';\nimport { formatDispositionTriggerText, type DispositionAlertContext } from './types';\nimport styles from './style.module.scss';\n\nexport type {\n DispositionAlertContext,\n DispositionAlertKind,\n DispositionAlertLevelSpec,\n DispositionAlertLevelCatalog,\n} from './types';\nexport {\n formatDispositionTriggerText,\n getDispositionAlertLevel,\n buildDispositionAlertContext,\n} from './types';\nexport { default as DispositionAlertLevelLegend } from './LevelLegend';\nexport type { DispositionAlertLevelLegendProps } from './LevelLegend';\n\nexport type AlertDispositionPanelProps = {\n open: boolean;\n context: DispositionAlertContext | null;\n children: ReactNode;\n className?: string;\n /** 手动收起(换机台仍由业务 hook resetKey 清空) */\n onCollapse?: () => void;\n};\n\n/**\n * 详情处置展开壳:触发上下文条 + 分域 DispositionBar(children)。\n * 收起 → null;扁平布局,禁双层 card。不绑业务 API / EP / reveal 状态。\n * 等级展示靠 label + 可选 tone 色标,与圆点/方点等形状解耦。\n */\nconst AlertDispositionPanel: React.FC<AlertDispositionPanelProps> = ({\n open,\n context,\n children,\n className,\n onCollapse,\n}) => {\n if (!open || !context) return null;\n\n return (\n <div\n className={classNames(\n 'marsun-alert-disposition-panel',\n styles['marsun-alert-disposition-panel'],\n className,\n )}\n data-testid=\"alert-disposition-panel\"\n >\n <div\n className={classNames(\n 'marsun-alert-disposition-trigger-row',\n styles['marsun-alert-disposition-trigger-row'],\n )}\n >\n <div\n className={classNames(\n 'marsun-alert-disposition-trigger',\n styles['marsun-alert-disposition-trigger'],\n )}\n data-testid=\"alert-disposition-trigger\"\n >\n {context.tone ? (\n <Tag\n color={context.tone}\n className={styles['marsun-alert-disposition-tone']}\n data-testid=\"alert-disposition-tone\"\n >\n {context.label}\n </Tag>\n ) : null}\n <span>{formatDispositionTriggerText(context)}</span>\n </div>\n {onCollapse ? (\n <Button\n type=\"link\"\n size=\"small\"\n className={classNames(\n 'marsun-alert-disposition-collapse',\n styles['marsun-alert-disposition-collapse'],\n )}\n onClick={onCollapse}\n data-testid=\"alert-disposition-collapse\"\n >\n 收起\n </Button>\n ) : null}\n </div>\n {children}\n </div>\n );\n};\n\nexport default AlertDispositionPanel;\n"],"names":["AlertDispositionPanel","open","context","children","className","onCollapse","jsxs","classNames","styles","jsx","Tag","formatDispositionTriggerText","Button"],"mappings":";;;;;;AAkCA,MAAMA,IAA8D,CAAC;AAAA,EACnE,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AACF,MACM,CAACJ,KAAQ,CAACC,IAAgB,OAG5B,gBAAAI;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAC,EAAO,gCAAgC;AAAA,MACvCJ;AAAA,IAAA;AAAA,IAEF,eAAY;AAAA,IAEZ,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACAC,EAAO,sCAAsC;AAAA,UAAA;AAAA,UAG/C,UAAA;AAAA,YAAA,gBAAAF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWC;AAAA,kBACT;AAAA,kBACAC,EAAO,kCAAkC;AAAA,gBAAA;AAAA,gBAE3C,eAAY;AAAA,gBAEX,UAAA;AAAA,kBAAAN,EAAQ,OACP,gBAAAO;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAOR,EAAQ;AAAA,sBACf,WAAWM,EAAO,+BAA+B;AAAA,sBACjD,eAAY;AAAA,sBAEX,UAAAN,EAAQ;AAAA,oBAAA;AAAA,kBAAA,IAET;AAAA,kBACJ,gBAAAO,EAAC,QAAA,EAAM,UAAAE,EAA6BT,CAAO,EAAA,CAAE;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAE9CG,IACC,gBAAAI;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,WAAWL;AAAA,kBACT;AAAA,kBACAC,EAAO,mCAAmC;AAAA,gBAAA;AAAA,gBAE5C,SAASH;AAAA,gBACT,eAAY;AAAA,gBACb,UAAA;AAAA,cAAA;AAAA,YAAA,IAGC;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAELF;AAAA,IAAA;AAAA,EAAA;AAAA;"}
@@ -0,0 +1,10 @@
1
+ const e = {
2
+ "marsun-disposition-alert-level-legend": "_marsun-disposition-alert-level-legend_3bog0_1",
3
+ "marsun-disposition-alert-level-legend-title": "_marsun-disposition-alert-level-legend-title_3bog0_11",
4
+ "marsun-disposition-alert-level-legend-item": "_marsun-disposition-alert-level-legend-item_3bog0_15",
5
+ "marsun-disposition-alert-level-legend-dot": "_marsun-disposition-alert-level-legend-dot_3bog0_21"
6
+ };
7
+ export {
8
+ e as default
9
+ };
10
+ //# sourceMappingURL=levelLegend.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levelLegend.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,11 @@
1
+ const i = {
2
+ "marsun-alert-disposition-panel": "_marsun-alert-disposition-panel_1qi78_1",
3
+ "marsun-alert-disposition-trigger-row": "_marsun-alert-disposition-trigger-row_1qi78_10",
4
+ "marsun-alert-disposition-trigger": "_marsun-alert-disposition-trigger_1qi78_10",
5
+ "marsun-alert-disposition-tone": "_marsun-alert-disposition-tone_1qi78_29",
6
+ "marsun-alert-disposition-collapse": "_marsun-alert-disposition-collapse_1qi78_35"
7
+ };
8
+ export {
9
+ i as default
10
+ };
11
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1,51 @@
1
+ /** 详情处置展开时的触发上下文(仅展示;写仍机台 grain) */
2
+ /**
3
+ * 等级粗粒度键。常用 info|warn|alarm|critical|overdue;
4
+ * 项目可自定任意 string(与契约 alertLevel / 配置中心 key 对齐)。
5
+ */
6
+ export type DispositionAlertKind = string;
7
+ export type DispositionAlertContext = {
8
+ /** 等级键(常等于 catalog.key) */
9
+ kind: DispositionAlertKind;
10
+ /** 展示文案:取 catalog.label / 接口已有字段,禁 FE 平行码表 */
11
+ label: string;
12
+ date?: string;
13
+ detail?: string;
14
+ /**
15
+ * 可选色标(展示用):来自 catalog.tone / 业务配置。
16
+ * 不同等级 → 不同颜色;与圆点/方点等形状解耦。
17
+ */
18
+ tone?: string;
19
+ };
20
+ /**
21
+ * 项目注入的「预警等级展示」规格。
22
+ * SSOT 在业务配置/契约;core 不写死任何产品的级数/文案/阈值。
23
+ */
24
+ export type DispositionAlertLevelSpec = {
25
+ /** 等级键(与契约 alertLevel / 业务码对齐) */
26
+ key: string;
27
+ /** 展示名 */
28
+ label: string;
29
+ /** 色标 hex / antd 色名 */
30
+ tone: string;
31
+ /** 写入 context.kind;缺省 = key */
32
+ kind?: DispositionAlertKind;
33
+ /** 图点大小(可选;仅可视化) */
34
+ pointSize?: number;
35
+ /** 图点形状(可选;默认 point;形状≠等级语义) */
36
+ shape?: string;
37
+ };
38
+ /** 等级目录:由项目/租户配置注入 */
39
+ export type DispositionAlertLevelCatalog = readonly DispositionAlertLevelSpec[];
40
+ /** 组装「触发:」条可见文案 */
41
+ export declare function formatDispositionTriggerText(ctx: DispositionAlertContext): string;
42
+ /** 按 key 查等级规格(大小写不敏感) */
43
+ export declare function getDispositionAlertLevel(catalog: DispositionAlertLevelCatalog, key: string | null | undefined): DispositionAlertLevelSpec | undefined;
44
+ /**
45
+ * 从 catalog 组装触发上下文。
46
+ * key 不在目录内 → null(调用方勿用硬编码中文兜底冒充等级)。
47
+ */
48
+ export declare function buildDispositionAlertContext(catalog: DispositionAlertLevelCatalog, key: string, extras?: {
49
+ date?: string;
50
+ detail?: string;
51
+ }): DispositionAlertContext | null;
@@ -0,0 +1,26 @@
1
+ function l(t) {
2
+ var i, n;
3
+ return `触发:${[t.label.trim(), (i = t.date) == null ? void 0 : i.trim(), (n = t.detail) == null ? void 0 : n.trim()].filter(Boolean).join(" · ")}`;
4
+ }
5
+ function r(t, e) {
6
+ const i = (e || "").trim();
7
+ if (!i) return;
8
+ const n = i.toLowerCase();
9
+ return t.find((o) => o.key === i) || t.find((o) => o.key.toLowerCase() === n);
10
+ }
11
+ function d(t, e, i) {
12
+ const n = r(t, e);
13
+ return n ? {
14
+ kind: n.kind ?? n.key,
15
+ label: n.label,
16
+ tone: n.tone,
17
+ date: i == null ? void 0 : i.date,
18
+ detail: i == null ? void 0 : i.detail
19
+ } : null;
20
+ }
21
+ export {
22
+ d as buildDispositionAlertContext,
23
+ l as formatDispositionTriggerText,
24
+ r as getDispositionAlertLevel
25
+ };
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../../src/components/Disposition/AlertDispositionPanel/types.ts"],"sourcesContent":["/** 详情处置展开时的触发上下文(仅展示;写仍机台 grain) */\n\n/**\n * 等级粗粒度键。常用 info|warn|alarm|critical|overdue;\n * 项目可自定任意 string(与契约 alertLevel / 配置中心 key 对齐)。\n */\nexport type DispositionAlertKind = string;\n\nexport type DispositionAlertContext = {\n /** 等级键(常等于 catalog.key) */\n kind: DispositionAlertKind;\n /** 展示文案:取 catalog.label / 接口已有字段,禁 FE 平行码表 */\n label: string;\n date?: string;\n detail?: string;\n /**\n * 可选色标(展示用):来自 catalog.tone / 业务配置。\n * 不同等级 → 不同颜色;与圆点/方点等形状解耦。\n */\n tone?: string;\n};\n\n/**\n * 项目注入的「预警等级展示」规格。\n * SSOT 在业务配置/契约;core 不写死任何产品的级数/文案/阈值。\n */\nexport type DispositionAlertLevelSpec = {\n /** 等级键(与契约 alertLevel / 业务码对齐) */\n key: string;\n /** 展示名 */\n label: string;\n /** 色标 hex / antd 色名 */\n tone: string;\n /** 写入 context.kind;缺省 = key */\n kind?: DispositionAlertKind;\n /** 图点大小(可选;仅可视化) */\n pointSize?: number;\n /** 图点形状(可选;默认 point;形状≠等级语义) */\n shape?: string;\n};\n\n/** 等级目录:由项目/租户配置注入 */\nexport type DispositionAlertLevelCatalog = readonly DispositionAlertLevelSpec[];\n\n/** 组装「触发:」条可见文案 */\nexport function formatDispositionTriggerText(ctx: DispositionAlertContext): string {\n const parts = [ctx.label.trim(), ctx.date?.trim(), ctx.detail?.trim()].filter(Boolean);\n return `触发:${parts.join(' · ')}`;\n}\n\n/** 按 key 查等级规格(大小写不敏感) */\nexport function getDispositionAlertLevel(\n catalog: DispositionAlertLevelCatalog,\n key: string | null | undefined,\n): DispositionAlertLevelSpec | undefined {\n const raw = (key || '').trim();\n if (!raw) return undefined;\n const lower = raw.toLowerCase();\n return catalog.find((s) => s.key === raw) || catalog.find((s) => s.key.toLowerCase() === lower);\n}\n\n/**\n * 从 catalog 组装触发上下文。\n * key 不在目录内 → null(调用方勿用硬编码中文兜底冒充等级)。\n */\nexport function buildDispositionAlertContext(\n catalog: DispositionAlertLevelCatalog,\n key: string,\n extras?: { date?: string; detail?: string },\n): DispositionAlertContext | null {\n const spec = getDispositionAlertLevel(catalog, key);\n if (!spec) return null;\n return {\n kind: spec.kind ?? spec.key,\n label: spec.label,\n tone: spec.tone,\n date: extras?.date,\n detail: extras?.detail,\n };\n}\n"],"names":["formatDispositionTriggerText","ctx","_a","_b","getDispositionAlertLevel","catalog","key","raw","lower","s","buildDispositionAlertContext","extras","spec"],"mappings":"AA6CO,SAASA,EAA6BC,GAAsC;AAA5E,MAAAC,GAAAC;AAEL,SAAO,MADO,CAACF,EAAI,MAAM,KAAA,IAAQC,IAAAD,EAAI,SAAJ,gBAAAC,EAAU,SAAQC,IAAAF,EAAI,WAAJ,gBAAAE,EAAY,MAAM,EAAE,OAAO,OAAO,EAClE,KAAK,KAAK,CAAC;AAChC;AAGO,SAASC,EACdC,GACAC,GACuC;AACvC,QAAMC,KAAOD,KAAO,IAAI,KAAA;AACxB,MAAI,CAACC,EAAK;AACV,QAAMC,IAAQD,EAAI,YAAA;AAClB,SAAOF,EAAQ,KAAK,CAACI,MAAMA,EAAE,QAAQF,CAAG,KAAKF,EAAQ,KAAK,CAACI,MAAMA,EAAE,IAAI,YAAA,MAAkBD,CAAK;AAChG;AAMO,SAASE,EACdL,GACAC,GACAK,GACgC;AAChC,QAAMC,IAAOR,EAAyBC,GAASC,CAAG;AAClD,SAAKM,IACE;AAAA,IACL,MAAMA,EAAK,QAAQA,EAAK;AAAA,IACxB,OAAOA,EAAK;AAAA,IACZ,MAAMA,EAAK;AAAA,IACX,MAAMD,KAAA,gBAAAA,EAAQ;AAAA,IACd,QAAQA,KAAA,gBAAAA,EAAQ;AAAA,EAAA,IANA;AAQpB;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Disposition/DispositionBar/index.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React from 'react';\nimport styles from './style.module.scss';\n\nexport type DispositionBarProps = {\n /** 左侧文案,默认「处置状态」 */\n label?: string;\n /** 状态徽章内容(string 或自定义节点) */\n statusBadge: React.ReactNode;\n /** 右侧操作区;由调用方注入业务钮 */\n actions?: React.ReactNode;\n /** true → 仅显示状态区,不渲染 actions */\n statusLoading?: boolean;\n className?: string;\n};\n\n/**\n * 处置条布局壳:左状态 + 右操作。不绑业务 API / EP。\n */\nconst DispositionBar: React.FC<DispositionBarProps> = ({\n label = '处置状态',\n statusBadge,\n actions,\n statusLoading,\n className,\n}) => {\n const badgeNode =\n typeof statusBadge === 'string' || typeof statusBadge === 'number' ? (\n <span className={styles['marsun-disposition-badge']}>{statusBadge}</span>\n ) : (\n statusBadge\n );\n\n return (\n <div\n className={classNames('marsun-disposition-bar', styles['marsun-disposition-bar'], className)}\n role=\"group\"\n aria-label={label}\n >\n <div className={classNames('marsun-disposition-status', styles['marsun-disposition-status'])}>\n <span className={styles['marsun-disposition-label']}>{label}</span>\n {badgeNode}\n </div>\n {!statusLoading && actions ? (\n <div\n className={classNames('marsun-disposition-actions', styles['marsun-disposition-actions'])}\n >\n {actions}\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default DispositionBar;\n"],"names":["DispositionBar","label","statusBadge","actions","statusLoading","className","badgeNode","jsx","styles","jsxs","classNames"],"mappings":";;;AAmBA,MAAMA,IAAgD,CAAC;AAAA,EACrD,OAAAC,IAAQ;AAAA,EACR,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AACF,MAAM;AACJ,QAAMC,IACJ,OAAOJ,KAAgB,YAAY,OAAOA,KAAgB,WACxD,gBAAAK,EAAC,QAAA,EAAK,WAAWC,EAAO,0BAA0B,GAAI,aAAY,IAElEN;AAGJ,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAW,0BAA0BF,EAAO,wBAAwB,GAAGH,CAAS;AAAA,MAC3F,MAAK;AAAA,MACL,cAAYJ;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAAQ,EAAC,SAAI,WAAWC,EAAW,6BAA6BF,EAAO,2BAA2B,CAAC,GACzF,UAAA;AAAA,UAAA,gBAAAD,EAAC,QAAA,EAAK,WAAWC,EAAO,0BAA0B,GAAI,UAAAP,GAAM;AAAA,UAC3DK;AAAA,QAAA,GACH;AAAA,QACC,CAACF,KAAiBD,IACjB,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWG,EAAW,8BAA8BF,EAAO,4BAA4B,CAAC;AAAA,YAEvF,UAAAL;AAAA,UAAA;AAAA,QAAA,IAED;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,4 @@
1
+ export { default as DispositionBar } from './DispositionBar';
2
+ export type { DispositionBarProps } from './DispositionBar';
3
+ export { default as AlertDispositionPanel, DispositionAlertLevelLegend, formatDispositionTriggerText, getDispositionAlertLevel, buildDispositionAlertContext, } from './AlertDispositionPanel';
4
+ export type { AlertDispositionPanelProps, DispositionAlertContext, DispositionAlertKind, DispositionAlertLevelSpec, DispositionAlertLevelCatalog, DispositionAlertLevelLegendProps, } from './AlertDispositionPanel';
@@ -1,85 +1,76 @@
1
- import { jsxs as K, jsx as m } from "react/jsx-runtime";
2
- import { useRef as i, useMemo as N } from "react";
3
- import "../../../node_modules/@ckeditor/ckeditor5-utils/dist/index.js";
4
- import "../../../node_modules/@ckeditor/ckeditor5-engine/dist/index.js";
5
- import { Bold as x, Italic as R } from "../../../node_modules/@ckeditor/ckeditor5-basic-styles/dist/index.js";
6
- import { Widget as T } from "../../../node_modules/@ckeditor/ckeditor5-widget/dist/index.js";
7
- import { Undo as $ } from "../../../node_modules/@ckeditor/ckeditor5-undo/dist/index.js";
8
- import { ClassicEditor as W } from "../../../node_modules/@ckeditor/ckeditor5-editor-classic/dist/index.js";
9
- import { Essentials as k } from "../../../node_modules/@ckeditor/ckeditor5-essentials/dist/index.js";
10
- import { Paragraph as v } from "../../../node_modules/@ckeditor/ckeditor5-paragraph/dist/index.js";
11
- import { List as P } from "../../../node_modules/@ckeditor/ckeditor5-list/dist/index.js";
12
- import "../../../node_modules/@ckeditor/ckeditor5-mention/dist/index.js";
13
- import { CKEditor as b } from "../../../node_modules/@ckeditor/ckeditor5-react/dist/index.js";
1
+ import { jsxs as K, jsx as c } from "react/jsx-runtime";
2
+ import { useRef as e, useMemo as N } from "react";
3
+ import { Essentials as x, Paragraph as R, Bold as $, Italic as k, List as v, Undo as P, Widget as T, ClassicEditor as W } from "ckeditor5";
4
+ import { CKEditor as b } from "@ckeditor/ckeditor5-react";
14
5
  /* empty css */
15
6
  import { wrapVarTokensForDisplay as q } from "../variableMention.js";
16
7
  import { MsgVarWidget as w, insertMsgVar as B } from "../msgVarTokenPlugin.js";
17
8
  import { VariablePicker as F } from "../VariablePicker.js";
18
- import t from "./style.module.scss.js";
19
- const or = ({
20
- value: n = "",
21
- onChange: d,
22
- disabled: a = !1,
23
- readOnly: l = !1,
24
- placeholder: f,
9
+ import r from "./style.module.scss.js";
10
+ const Q = ({
11
+ value: d = "",
12
+ onChange: a,
13
+ disabled: l = !1,
14
+ readOnly: u = !1,
15
+ placeholder: m,
25
16
  minHeight: E = 140,
26
- className: p,
17
+ className: f,
27
18
  enableVariableMention: o = !1,
28
19
  variables: L,
29
20
  catalogError: C
30
21
  }) => {
31
- const u = i(null), g = i(null), e = i(d);
32
- e.current = d;
33
- const c = i(!1), D = i(
34
- o ? q(n || "") : n || ""
22
+ const p = e(null), g = e(null), s = e(a);
23
+ s.current = a;
24
+ const n = e(!1), D = e(
25
+ o ? q(d || "") : d || ""
35
26
  ), j = N(() => ({
36
27
  licenseKey: "GPL",
37
28
  toolbar: ["undo", "redo", "|", "bold", "italic", "|", "bulletedList", "numberedList"],
38
- placeholder: f,
39
- plugins: o ? [k, v, x, R, P, $, T, w] : [k, v, x, R, P, $]
40
- }), [o, f]), h = a || l;
29
+ placeholder: m,
30
+ plugins: o ? [x, R, $, k, v, P, T, w] : [x, R, $, k, v, P]
31
+ }), [o, m]), h = l || u;
41
32
  return /* @__PURE__ */ K(
42
33
  "div",
43
34
  {
44
- ref: u,
45
- className: p ? `${t.root} ${t["rich-text-editor"]} ${p}` : `${t.root} ${t["rich-text-editor"]}`,
35
+ ref: p,
36
+ className: f ? `${r.root} ${r["rich-text-editor"]} ${f}` : `${r.root} ${r["rich-text-editor"]}`,
46
37
  style: { "--rte-min-height": `${E}px` },
47
- "data-disabled": a ? "1" : "0",
48
- "data-readonly": l ? "1" : "0",
38
+ "data-disabled": l ? "1" : "0",
39
+ "data-readonly": u ? "1" : "0",
49
40
  "data-var-mention": o ? "1" : "0",
50
41
  children: [
51
- o ? /* @__PURE__ */ m("div", { className: t["var-toolbar"], children: /* @__PURE__ */ m(
42
+ o ? /* @__PURE__ */ c("div", { className: r["var-toolbar"], children: /* @__PURE__ */ c(
52
43
  F,
53
44
  {
54
45
  variables: L,
55
46
  catalogError: C,
56
47
  disabled: h,
57
- getPopupContainer: () => u.current || document.body,
58
- onPick: (r) => {
59
- const s = g.current;
60
- s && B(s, r);
48
+ getPopupContainer: () => p.current || document.body,
49
+ onPick: (t) => {
50
+ const i = g.current;
51
+ i && B(i, t);
61
52
  }
62
53
  }
63
54
  ) }) : null,
64
- /* @__PURE__ */ m("div", { className: t["editor-host"], children: /* @__PURE__ */ m(
55
+ /* @__PURE__ */ c("div", { className: r["editor-host"], children: /* @__PURE__ */ c(
65
56
  b,
66
57
  {
67
58
  editor: W,
68
59
  config: j,
69
60
  disabled: h,
70
- onReady: (r) => {
71
- g.current = r, c.current = !0;
61
+ onReady: (t) => {
62
+ g.current = t, n.current = !0;
72
63
  try {
73
- r.setData(D.current);
64
+ t.setData(D.current);
74
65
  } finally {
75
66
  queueMicrotask(() => {
76
- c.current = !1;
67
+ n.current = !1;
77
68
  });
78
69
  }
79
70
  },
80
- onChange: (r, s) => {
71
+ onChange: (t, i) => {
81
72
  var y;
82
- c.current || (y = e.current) == null || y.call(e, s.getData());
73
+ n.current || (y = s.current) == null || y.call(s, i.getData());
83
74
  }
84
75
  }
85
76
  ) })
@@ -88,6 +79,6 @@ const or = ({
88
79
  );
89
80
  };
90
81
  export {
91
- or as RichTextEditor
82
+ Q as RichTextEditor
92
83
  };
93
84
  //# sourceMappingURL=RichTextEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditor.js","sources":["../../../../src/components/Editor/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport {\n Bold,\n ClassicEditor,\n Essentials,\n Italic,\n List,\n Paragraph,\n Undo,\n Widget,\n type Editor,\n} from 'ckeditor5';\nimport { CKEditor } from '@ckeditor/ckeditor5-react';\nimport 'ckeditor5/ckeditor5.css';\nimport { wrapVarTokensForDisplay, type VariableMentionItem } from '../variableMention';\nimport { MsgVarWidget, insertMsgVar } from '../msgVarTokenPlugin';\nimport { VariablePicker } from '../VariablePicker';\nimport styles from './style.module.scss';\n\nexport type RichTextEditorProps = {\n value?: string;\n onChange?: (html: string) => void;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n minHeight?: number;\n className?: string;\n /**\n * 开启变量色块 +「插入变量」按钮(catalog 注入;禁 FE DEFAULT_VARS)。\n * 无 `/` 触发;色块为原子 widget。\n */\n enableVariableMention?: boolean;\n variables?: VariableMentionItem[];\n /** catalog 失败短文案(按钮 disabled 提示) */\n catalogError?: string;\n};\n\n/**\n * CKEditor 5 + Coze/Dify 风「插入变量」按钮;正文 msgVar 原子色块。\n */\nexport const RichTextEditor: React.FC<RichTextEditorProps> = ({\n value = '',\n onChange,\n disabled = false,\n readOnly = false,\n placeholder,\n minHeight = 140,\n className,\n enableVariableMention = false,\n variables,\n catalogError,\n}) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<Editor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const suppressChangeRef = useRef(false);\n\n const initialHtmlRef = useRef(\n enableVariableMention ? wrapVarTokensForDisplay(value || '') : value || '',\n );\n\n const config = useMemo(() => {\n const plugins = enableVariableMention\n ? [Essentials, Paragraph, Bold, Italic, List, Undo, Widget, MsgVarWidget]\n : [Essentials, Paragraph, Bold, Italic, List, Undo];\n return {\n licenseKey: 'GPL' as const,\n toolbar: ['undo', 'redo', '|', 'bold', 'italic', '|', 'bulletedList', 'numberedList'],\n placeholder,\n plugins,\n };\n }, [enableVariableMention, placeholder]);\n\n const locked = disabled || readOnly;\n\n return (\n <div\n ref={rootRef}\n className={\n className\n ? `${styles.root} ${styles['rich-text-editor']} ${className}`\n : `${styles.root} ${styles['rich-text-editor']}`\n }\n style={{ ['--rte-min-height' as string]: `${minHeight}px` }}\n data-disabled={disabled ? '1' : '0'}\n data-readonly={readOnly ? '1' : '0'}\n data-var-mention={enableVariableMention ? '1' : '0'}\n >\n {enableVariableMention ? (\n <div className={styles['var-toolbar']}>\n <VariablePicker\n variables={variables}\n catalogError={catalogError}\n disabled={locked}\n getPopupContainer={() => rootRef.current || document.body}\n onPick={(key) => {\n const editor = editorRef.current;\n if (!editor) return;\n insertMsgVar(editor, key);\n }}\n />\n </div>\n ) : null}\n <div className={styles['editor-host']}>\n <CKEditor\n editor={ClassicEditor}\n config={config}\n disabled={locked}\n onReady={(editor) => {\n editorRef.current = editor;\n suppressChangeRef.current = true;\n try {\n editor.setData(initialHtmlRef.current);\n } finally {\n queueMicrotask(() => {\n suppressChangeRef.current = false;\n });\n }\n }}\n onChange={(_evt, editor) => {\n if (suppressChangeRef.current) return;\n onChangeRef.current?.(editor.getData());\n }}\n />\n </div>\n </div>\n );\n};\n\nexport default RichTextEditor;\n"],"names":["RichTextEditor","value","onChange","disabled","readOnly","placeholder","minHeight","className","enableVariableMention","variables","catalogError","rootRef","useRef","editorRef","onChangeRef","suppressChangeRef","initialHtmlRef","wrapVarTokensForDisplay","config","useMemo","Essentials","Paragraph","Bold","Italic","List","Undo","Widget","MsgVarWidget","locked","jsxs","styles","jsx","VariablePicker","key","editor","insertMsgVar","CKEditor","ClassicEditor","_evt","_a"],"mappings":";;;;;;;;;;;;;;;;;;AAwCO,MAAMA,KAAgD,CAAC;AAAA,EAC5D,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,UAAAC,IAAW;AAAA,EACX,aAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,uBAAAC,IAAwB;AAAA,EACxB,WAAAC;AAAA,EACA,cAAAC;AACF,MAAM;AACJ,QAAMC,IAAUC,EAAuB,IAAI,GACrCC,IAAYD,EAAsB,IAAI,GACtCE,IAAcF,EAAOV,CAAQ;AACnC,EAAAY,EAAY,UAAUZ;AACtB,QAAMa,IAAoBH,EAAO,EAAK,GAEhCI,IAAiBJ;AAAA,IACrBJ,IAAwBS,EAAwBhB,KAAS,EAAE,IAAIA,KAAS;AAAA,EAAA,GAGpEiB,IAASC,EAAQ,OAId;AAAA,IACL,YAAY;AAAA,IACZ,SAAS,CAAC,QAAQ,QAAQ,KAAK,QAAQ,UAAU,KAAK,gBAAgB,cAAc;AAAA,IACpF,aAAAd;AAAA,IACA,SAPcG,IACZ,CAACY,GAAYC,GAAWC,GAAMC,GAAQC,GAAMC,GAAMC,GAAQC,CAAY,IACtE,CAACP,GAAYC,GAAWC,GAAMC,GAAQC,GAAMC,CAAI;AAAA,EAKlD,IAED,CAACjB,GAAuBH,CAAW,CAAC,GAEjCuB,IAASzB,KAAYC;AAE3B,SACE,gBAAAyB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKlB;AAAA,MACL,WACEJ,IACI,GAAGuB,EAAO,IAAI,IAAIA,EAAO,kBAAkB,CAAC,IAAIvB,CAAS,KACzD,GAAGuB,EAAO,IAAI,IAAIA,EAAO,kBAAkB,CAAC;AAAA,MAElD,OAAO,EAAG,oBAA+B,GAAGxB,CAAS,KAAA;AAAA,MACrD,iBAAeH,IAAW,MAAM;AAAA,MAChC,iBAAeC,IAAW,MAAM;AAAA,MAChC,oBAAkBI,IAAwB,MAAM;AAAA,MAE/C,UAAA;AAAA,QAAAA,IACC,gBAAAuB,EAAC,OAAA,EAAI,WAAWD,EAAO,aAAa,GAClC,UAAA,gBAAAC;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,WAAAvB;AAAA,YACA,cAAAC;AAAA,YACA,UAAUkB;AAAA,YACV,mBAAmB,MAAMjB,EAAQ,WAAW,SAAS;AAAA,YACrD,QAAQ,CAACsB,MAAQ;AACf,oBAAMC,IAASrB,EAAU;AACzB,cAAKqB,KACLC,EAAaD,GAAQD,CAAG;AAAA,YAC1B;AAAA,UAAA;AAAA,QAAA,GAEJ,IACE;AAAA,QACJ,gBAAAF,EAAC,OAAA,EAAI,WAAWD,EAAO,aAAa,GAClC,UAAA,gBAAAC;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,QAAQC;AAAA,YACR,QAAAnB;AAAA,YACA,UAAUU;AAAA,YACV,SAAS,CAACM,MAAW;AACnB,cAAArB,EAAU,UAAUqB,GACpBnB,EAAkB,UAAU;AAC5B,kBAAI;AACF,gBAAAmB,EAAO,QAAQlB,EAAe,OAAO;AAAA,cACvC,UAAA;AACE,+BAAe,MAAM;AACnB,kBAAAD,EAAkB,UAAU;AAAA,gBAC9B,CAAC;AAAA,cACH;AAAA,YACF;AAAA,YACA,UAAU,CAACuB,GAAMJ,MAAW;;AAC1B,cAAInB,EAAkB,YACtBwB,IAAAzB,EAAY,YAAZ,QAAAyB,EAAA,KAAAzB,GAAsBoB,EAAO;YAC/B;AAAA,UAAA;AAAA,QAAA,EACF,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"RichTextEditor.js","sources":["../../../../src/components/Editor/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport {\n Bold,\n ClassicEditor,\n Essentials,\n Italic,\n List,\n Paragraph,\n Undo,\n Widget,\n type Editor,\n} from 'ckeditor5';\nimport { CKEditor } from '@ckeditor/ckeditor5-react';\nimport 'ckeditor5/ckeditor5.css';\nimport { wrapVarTokensForDisplay, type VariableMentionItem } from '../variableMention';\nimport { MsgVarWidget, insertMsgVar } from '../msgVarTokenPlugin';\nimport { VariablePicker } from '../VariablePicker';\nimport styles from './style.module.scss';\n\nexport type RichTextEditorProps = {\n value?: string;\n onChange?: (html: string) => void;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n minHeight?: number;\n className?: string;\n /**\n * 开启变量色块 +「插入变量」按钮(catalog 注入;禁 FE DEFAULT_VARS)。\n * 无 `/` 触发;色块为原子 widget。\n */\n enableVariableMention?: boolean;\n variables?: VariableMentionItem[];\n /** catalog 失败短文案(按钮 disabled 提示) */\n catalogError?: string;\n};\n\n/**\n * CKEditor 5 + Coze/Dify 风「插入变量」按钮;正文 msgVar 原子色块。\n */\nexport const RichTextEditor: React.FC<RichTextEditorProps> = ({\n value = '',\n onChange,\n disabled = false,\n readOnly = false,\n placeholder,\n minHeight = 140,\n className,\n enableVariableMention = false,\n variables,\n catalogError,\n}) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<Editor | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const suppressChangeRef = useRef(false);\n\n const initialHtmlRef = useRef(\n enableVariableMention ? wrapVarTokensForDisplay(value || '') : value || '',\n );\n\n const config = useMemo(() => {\n const plugins = enableVariableMention\n ? [Essentials, Paragraph, Bold, Italic, List, Undo, Widget, MsgVarWidget]\n : [Essentials, Paragraph, Bold, Italic, List, Undo];\n return {\n licenseKey: 'GPL' as const,\n toolbar: ['undo', 'redo', '|', 'bold', 'italic', '|', 'bulletedList', 'numberedList'],\n placeholder,\n plugins,\n };\n }, [enableVariableMention, placeholder]);\n\n const locked = disabled || readOnly;\n\n return (\n <div\n ref={rootRef}\n className={\n className\n ? `${styles.root} ${styles['rich-text-editor']} ${className}`\n : `${styles.root} ${styles['rich-text-editor']}`\n }\n style={{ ['--rte-min-height' as string]: `${minHeight}px` }}\n data-disabled={disabled ? '1' : '0'}\n data-readonly={readOnly ? '1' : '0'}\n data-var-mention={enableVariableMention ? '1' : '0'}\n >\n {enableVariableMention ? (\n <div className={styles['var-toolbar']}>\n <VariablePicker\n variables={variables}\n catalogError={catalogError}\n disabled={locked}\n getPopupContainer={() => rootRef.current || document.body}\n onPick={(key) => {\n const editor = editorRef.current;\n if (!editor) return;\n insertMsgVar(editor, key);\n }}\n />\n </div>\n ) : null}\n <div className={styles['editor-host']}>\n <CKEditor\n editor={ClassicEditor}\n config={config}\n disabled={locked}\n onReady={(editor) => {\n editorRef.current = editor;\n suppressChangeRef.current = true;\n try {\n editor.setData(initialHtmlRef.current);\n } finally {\n queueMicrotask(() => {\n suppressChangeRef.current = false;\n });\n }\n }}\n onChange={(_evt, editor) => {\n if (suppressChangeRef.current) return;\n onChangeRef.current?.(editor.getData());\n }}\n />\n </div>\n </div>\n );\n};\n\nexport default RichTextEditor;\n"],"names":["RichTextEditor","value","onChange","disabled","readOnly","placeholder","minHeight","className","enableVariableMention","variables","catalogError","rootRef","useRef","editorRef","onChangeRef","suppressChangeRef","initialHtmlRef","wrapVarTokensForDisplay","config","useMemo","Essentials","Paragraph","Bold","Italic","List","Undo","Widget","MsgVarWidget","locked","jsxs","styles","jsx","VariablePicker","key","editor","insertMsgVar","CKEditor","ClassicEditor","_evt","_a"],"mappings":";;;;;;;;;AAwCO,MAAMA,IAAgD,CAAC;AAAA,EAC5D,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,UAAAC,IAAW;AAAA,EACX,aAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,uBAAAC,IAAwB;AAAA,EACxB,WAAAC;AAAA,EACA,cAAAC;AACF,MAAM;AACJ,QAAMC,IAAUC,EAAuB,IAAI,GACrCC,IAAYD,EAAsB,IAAI,GACtCE,IAAcF,EAAOV,CAAQ;AACnC,EAAAY,EAAY,UAAUZ;AACtB,QAAMa,IAAoBH,EAAO,EAAK,GAEhCI,IAAiBJ;AAAA,IACrBJ,IAAwBS,EAAwBhB,KAAS,EAAE,IAAIA,KAAS;AAAA,EAAA,GAGpEiB,IAASC,EAAQ,OAId;AAAA,IACL,YAAY;AAAA,IACZ,SAAS,CAAC,QAAQ,QAAQ,KAAK,QAAQ,UAAU,KAAK,gBAAgB,cAAc;AAAA,IACpF,aAAAd;AAAA,IACA,SAPcG,IACZ,CAACY,GAAYC,GAAWC,GAAMC,GAAQC,GAAMC,GAAMC,GAAQC,CAAY,IACtE,CAACP,GAAYC,GAAWC,GAAMC,GAAQC,GAAMC,CAAI;AAAA,EAKlD,IAED,CAACjB,GAAuBH,CAAW,CAAC,GAEjCuB,IAASzB,KAAYC;AAE3B,SACE,gBAAAyB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKlB;AAAA,MACL,WACEJ,IACI,GAAGuB,EAAO,IAAI,IAAIA,EAAO,kBAAkB,CAAC,IAAIvB,CAAS,KACzD,GAAGuB,EAAO,IAAI,IAAIA,EAAO,kBAAkB,CAAC;AAAA,MAElD,OAAO,EAAG,oBAA+B,GAAGxB,CAAS,KAAA;AAAA,MACrD,iBAAeH,IAAW,MAAM;AAAA,MAChC,iBAAeC,IAAW,MAAM;AAAA,MAChC,oBAAkBI,IAAwB,MAAM;AAAA,MAE/C,UAAA;AAAA,QAAAA,IACC,gBAAAuB,EAAC,OAAA,EAAI,WAAWD,EAAO,aAAa,GAClC,UAAA,gBAAAC;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,WAAAvB;AAAA,YACA,cAAAC;AAAA,YACA,UAAUkB;AAAA,YACV,mBAAmB,MAAMjB,EAAQ,WAAW,SAAS;AAAA,YACrD,QAAQ,CAACsB,MAAQ;AACf,oBAAMC,IAASrB,EAAU;AACzB,cAAKqB,KACLC,EAAaD,GAAQD,CAAG;AAAA,YAC1B;AAAA,UAAA;AAAA,QAAA,GAEJ,IACE;AAAA,QACJ,gBAAAF,EAAC,OAAA,EAAI,WAAWD,EAAO,aAAa,GAClC,UAAA,gBAAAC;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,QAAQC;AAAA,YACR,QAAAnB;AAAA,YACA,UAAUU;AAAA,YACV,SAAS,CAACM,MAAW;AACnB,cAAArB,EAAU,UAAUqB,GACpBnB,EAAkB,UAAU;AAC5B,kBAAI;AACF,gBAAAmB,EAAO,QAAQlB,EAAe,OAAO;AAAA,cACvC,UAAA;AACE,+BAAe,MAAM;AACnB,kBAAAD,EAAkB,UAAU;AAAA,gBAC9B,CAAC;AAAA,cACH;AAAA,YACF;AAAA,YACA,UAAU,CAACuB,GAAMJ,MAAW;;AAC1B,cAAInB,EAAkB,YACtBwB,IAAAzB,EAAY,YAAZ,QAAAyB,EAAA,KAAAzB,GAAsBoB,EAAO;YAC/B;AAAA,UAAA;AAAA,QAAA,EACF,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,33 +1,28 @@
1
- var m = (e) => {
1
+ var c = (e) => {
2
2
  throw TypeError(e);
3
3
  };
4
- var f = (e, n, t) => n.has(e) || m("Cannot " + t);
5
- var c = (e, n, t) => n.has(e) ? m("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(e) : n.set(e, t);
4
+ var f = (e, n, t) => n.has(e) || c("Cannot " + t);
5
+ var m = (e, n, t) => n.has(e) ? c("Cannot add the same private member more than once") : n instanceof WeakSet ? n.add(e) : n.set(e, t);
6
6
  var a = (e, n, t) => (f(e, n, "access private method"), t);
7
- import { Plugin as h } from "../../node_modules/@ckeditor/ckeditor5-core/dist/index.js";
8
- import "../../node_modules/@ckeditor/ckeditor5-utils/dist/index.js";
9
- import "../../node_modules/@ckeditor/ckeditor5-engine/dist/index.js";
10
- import { Widget as p, viewToModelPositionOutsideModelElement as v, toWidget as V } from "../../node_modules/@ckeditor/ckeditor5-widget/dist/index.js";
11
- import "../../node_modules/@ckeditor/ckeditor5-list/dist/index.js";
12
- import "../../node_modules/@ckeditor/ckeditor5-mention/dist/index.js";
13
- import { toVarToken as k } from "./variableMention.js";
7
+ import { Plugin as h, Widget as v, viewToModelPositionOutsideModelElement as V, toWidget as k } from "ckeditor5";
8
+ import { toVarToken as p } from "./variableMention.js";
14
9
  var s, g, d;
15
- class P extends h {
10
+ class E extends h {
16
11
  constructor() {
17
12
  super(...arguments);
18
- c(this, s);
13
+ m(this, s);
19
14
  }
20
15
  static get pluginName() {
21
16
  return "MsgVarWidget";
22
17
  }
23
18
  static get requires() {
24
- return [p];
19
+ return [v];
25
20
  }
26
21
  init() {
27
22
  const t = this.editor;
28
23
  a(this, s, g).call(this), a(this, s, d).call(this), t.editing.mapper.on(
29
24
  "viewToModelPosition",
30
- v(
25
+ V(
31
26
  t.model,
32
27
  (r) => r.hasClass("msg-var-token")
33
28
  )
@@ -45,7 +40,7 @@ s = new WeakSet(), g = function() {
45
40
  model: "msgVar",
46
41
  view: (r, { writer: o }) => {
47
42
  const i = String(r.getAttribute("key") || ""), u = l(o, i);
48
- return V(u, o, { label: `变量 ${i}` });
43
+ return k(u, o, { label: `变量 ${i}` });
49
44
  }
50
45
  }), t.for("dataDowncast").elementToElement({
51
46
  model: "msgVar",
@@ -69,7 +64,7 @@ function l(e, n) {
69
64
  class: "msg-var-token",
70
65
  "data-var": n
71
66
  });
72
- return e.insert(e.createPositionAt(t, 0), e.createText(k(n))), t;
67
+ return e.insert(e.createPositionAt(t, 0), e.createText(p(n))), t;
73
68
  }
74
69
  function w(e) {
75
70
  const n = String(e.getAttribute("data-var") || "").trim();
@@ -80,7 +75,7 @@ function w(e) {
80
75
  const r = t.match(/^\{\{(\w+)\}\}$/);
81
76
  return (r == null ? void 0 : r[1]) ?? "";
82
77
  }
83
- function S(e, n) {
78
+ function M(e, n) {
84
79
  const t = String(n || "").trim();
85
80
  t && (e.model.change((r) => {
86
81
  const o = r.createElement("msgVar", { key: t });
@@ -88,7 +83,7 @@ function S(e, n) {
88
83
  }), e.editing.view.focus());
89
84
  }
90
85
  export {
91
- P as MsgVarWidget,
92
- S as insertMsgVar
86
+ E as MsgVarWidget,
87
+ M as insertMsgVar
93
88
  };
94
89
  //# sourceMappingURL=msgVarTokenPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"msgVarTokenPlugin.js","sources":["../../../src/components/Editor/msgVarTokenPlugin.ts"],"sourcesContent":["import {\n Plugin,\n Widget,\n toWidget,\n viewToModelPositionOutsideModelElement,\n type Editor,\n type ViewDowncastWriter,\n type ViewElement,\n} from 'ckeditor5';\nimport { toVarToken } from './variableMention';\n\n/**\n * 正文变量原子色块:isObject inline widget。\n * 不可改内部字符;Backspace/Delete 整颗删(对齐 Coze/Dify chip)。\n */\nexport class MsgVarWidget extends Plugin {\n public static get pluginName() {\n return 'MsgVarWidget' as const;\n }\n\n public static get requires() {\n return [Widget] as const;\n }\n\n public init(): void {\n const editor = this.editor;\n this.#defineSchema();\n this.#defineConverters();\n\n editor.editing.mapper.on(\n 'viewToModelPosition',\n viewToModelPositionOutsideModelElement(editor.model, (viewElement) =>\n viewElement.hasClass('msg-var-token'),\n ),\n );\n }\n\n #defineSchema(): void {\n const schema = this.editor.model.schema;\n schema.register('msgVar', {\n inheritAllFrom: '$inlineObject',\n allowAttributes: ['key'],\n });\n }\n\n #defineConverters(): void {\n const conversion = this.editor.conversion;\n\n conversion.for('editingDowncast').elementToElement({\n model: 'msgVar',\n view: (modelItem, { writer }) => {\n const key = String(modelItem.getAttribute('key') || '');\n const widgetElement = createMsgVarView(writer, key);\n return toWidget(widgetElement, writer, { label: `变量 ${key}` });\n },\n });\n\n conversion.for('dataDowncast').elementToElement({\n model: 'msgVar',\n view: (modelItem, { writer }) => {\n const key = String(modelItem.getAttribute('key') || '');\n return createMsgVarView(writer, key);\n },\n });\n\n conversion.for('upcast').elementToElement({\n view: {\n name: 'span',\n classes: ['msg-var-token'],\n },\n model: (viewElement, { writer }) => {\n const key = resolveKeyFromView(viewElement);\n if (!key) return null;\n return writer.createElement('msgVar', { key });\n },\n });\n }\n}\n\nfunction createMsgVarView(writer: ViewDowncastWriter, key: string): ViewElement {\n const span = writer.createContainerElement('span', {\n class: 'msg-var-token',\n 'data-var': key,\n });\n writer.insert(writer.createPositionAt(span, 0), writer.createText(toVarToken(key)));\n return span;\n}\n\nfunction resolveKeyFromView(viewElement: ViewElement): string {\n const fromAttr = String(viewElement.getAttribute('data-var') || '').trim();\n if (fromAttr) return fromAttr;\n let text = '';\n for (const child of viewElement.getChildren()) {\n if (child.is('$text') || child.is('$textProxy')) {\n text += child.data;\n }\n }\n const m = text.match(/^\\{\\{(\\w+)\\}\\}$/);\n return m?.[1] ?? '';\n}\n\n/** 在选区插入原子变量色块,并焦点回编辑器 */\nexport function insertMsgVar(editor: Editor, key: string): void {\n const k = String(key || '').trim();\n if (!k) return;\n editor.model.change((writer) => {\n const el = writer.createElement('msgVar', { key: k });\n editor.model.insertContent(el);\n });\n editor.editing.view.focus();\n}\n"],"names":["MsgVarWidget","Plugin","__privateAdd","_MsgVarWidget_instances","Widget","editor","__privateMethod","defineSchema_fn","defineConverters_fn","viewToModelPositionOutsideModelElement","viewElement","conversion","modelItem","writer","key","widgetElement","createMsgVarView","toWidget","resolveKeyFromView","span","toVarToken","fromAttr","text","child","m","insertMsgVar","k","el"],"mappings":"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"}
1
+ {"version":3,"file":"msgVarTokenPlugin.js","sources":["../../../src/components/Editor/msgVarTokenPlugin.ts"],"sourcesContent":["import {\n Plugin,\n Widget,\n toWidget,\n viewToModelPositionOutsideModelElement,\n type Editor,\n type ViewDowncastWriter,\n type ViewElement,\n} from 'ckeditor5';\nimport { toVarToken } from './variableMention';\n\n/**\n * 正文变量原子色块:isObject inline widget。\n * 不可改内部字符;Backspace/Delete 整颗删(对齐 Coze/Dify chip)。\n */\nexport class MsgVarWidget extends Plugin {\n public static get pluginName() {\n return 'MsgVarWidget' as const;\n }\n\n public static get requires() {\n return [Widget] as const;\n }\n\n public init(): void {\n const editor = this.editor;\n this.#defineSchema();\n this.#defineConverters();\n\n editor.editing.mapper.on(\n 'viewToModelPosition',\n viewToModelPositionOutsideModelElement(editor.model, (viewElement) =>\n viewElement.hasClass('msg-var-token'),\n ),\n );\n }\n\n #defineSchema(): void {\n const schema = this.editor.model.schema;\n schema.register('msgVar', {\n inheritAllFrom: '$inlineObject',\n allowAttributes: ['key'],\n });\n }\n\n #defineConverters(): void {\n const conversion = this.editor.conversion;\n\n conversion.for('editingDowncast').elementToElement({\n model: 'msgVar',\n view: (modelItem, { writer }) => {\n const key = String(modelItem.getAttribute('key') || '');\n const widgetElement = createMsgVarView(writer, key);\n return toWidget(widgetElement, writer, { label: `变量 ${key}` });\n },\n });\n\n conversion.for('dataDowncast').elementToElement({\n model: 'msgVar',\n view: (modelItem, { writer }) => {\n const key = String(modelItem.getAttribute('key') || '');\n return createMsgVarView(writer, key);\n },\n });\n\n conversion.for('upcast').elementToElement({\n view: {\n name: 'span',\n classes: ['msg-var-token'],\n },\n model: (viewElement, { writer }) => {\n const key = resolveKeyFromView(viewElement);\n if (!key) return null;\n return writer.createElement('msgVar', { key });\n },\n });\n }\n}\n\nfunction createMsgVarView(writer: ViewDowncastWriter, key: string): ViewElement {\n const span = writer.createContainerElement('span', {\n class: 'msg-var-token',\n 'data-var': key,\n });\n writer.insert(writer.createPositionAt(span, 0), writer.createText(toVarToken(key)));\n return span;\n}\n\nfunction resolveKeyFromView(viewElement: ViewElement): string {\n const fromAttr = String(viewElement.getAttribute('data-var') || '').trim();\n if (fromAttr) return fromAttr;\n let text = '';\n for (const child of viewElement.getChildren()) {\n if (child.is('$text') || child.is('$textProxy')) {\n text += child.data;\n }\n }\n const m = text.match(/^\\{\\{(\\w+)\\}\\}$/);\n return m?.[1] ?? '';\n}\n\n/** 在选区插入原子变量色块,并焦点回编辑器 */\nexport function insertMsgVar(editor: Editor, key: string): void {\n const k = String(key || '').trim();\n if (!k) return;\n editor.model.change((writer) => {\n const el = writer.createElement('msgVar', { key: k });\n editor.model.insertContent(el);\n });\n editor.editing.view.focus();\n}\n"],"names":["MsgVarWidget","Plugin","__privateAdd","_MsgVarWidget_instances","Widget","editor","__privateMethod","defineSchema_fn","defineConverters_fn","viewToModelPositionOutsideModelElement","viewElement","conversion","modelItem","writer","key","widgetElement","createMsgVarView","toWidget","resolveKeyFromView","span","toVarToken","fromAttr","text","child","m","insertMsgVar","k","el"],"mappings":"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"}