cmat 0.0.87 → 0.0.88

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 (228) hide show
  1. package/fesm2022/cmat-components-adapter.mjs +9 -9
  2. package/fesm2022/cmat-components-adapter.mjs.map +1 -1
  3. package/fesm2022/cmat-components-breadcrumb.mjs +98 -80
  4. package/fesm2022/cmat-components-breadcrumb.mjs.map +1 -1
  5. package/fesm2022/cmat-components-card.mjs +26 -34
  6. package/fesm2022/cmat-components-card.mjs.map +1 -1
  7. package/fesm2022/cmat-components-carousel.mjs +467 -556
  8. package/fesm2022/cmat-components-carousel.mjs.map +1 -1
  9. package/fesm2022/cmat-components-cascade.mjs +270 -259
  10. package/fesm2022/cmat-components-cascade.mjs.map +1 -1
  11. package/fesm2022/cmat-components-chip-input.mjs +200 -116
  12. package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
  13. package/fesm2022/cmat-components-code-editor.mjs +85 -38
  14. package/fesm2022/cmat-components-code-editor.mjs.map +1 -1
  15. package/fesm2022/cmat-components-color-picker.mjs +841 -0
  16. package/fesm2022/cmat-components-color-picker.mjs.map +1 -0
  17. package/fesm2022/cmat-components-custom-formly.mjs +1395 -838
  18. package/fesm2022/cmat-components-custom-formly.mjs.map +1 -1
  19. package/fesm2022/cmat-components-data-picker.mjs +996 -0
  20. package/fesm2022/cmat-components-data-picker.mjs.map +1 -0
  21. package/fesm2022/cmat-components-date-range.mjs +310 -264
  22. package/fesm2022/cmat-components-date-range.mjs.map +1 -1
  23. package/fesm2022/cmat-components-date-time-display.mjs +16 -20
  24. package/fesm2022/cmat-components-date-time-display.mjs.map +1 -1
  25. package/fesm2022/cmat-components-drawer.mjs +120 -137
  26. package/fesm2022/cmat-components-drawer.mjs.map +1 -1
  27. package/fesm2022/cmat-components-empty-state.mjs +17 -24
  28. package/fesm2022/cmat-components-empty-state.mjs.map +1 -1
  29. package/fesm2022/cmat-components-file-preview.mjs +18 -24
  30. package/fesm2022/cmat-components-file-preview.mjs.map +1 -1
  31. package/fesm2022/cmat-components-filter-toolbar.mjs +30 -39
  32. package/fesm2022/cmat-components-filter-toolbar.mjs.map +1 -1
  33. package/fesm2022/cmat-components-form-actions.mjs +12 -12
  34. package/fesm2022/cmat-components-form-actions.mjs.map +1 -1
  35. package/fesm2022/cmat-components-fullscreen.mjs +10 -10
  36. package/fesm2022/cmat-components-fullscreen.mjs.map +1 -1
  37. package/fesm2022/cmat-components-highlight.mjs +48 -41
  38. package/fesm2022/cmat-components-highlight.mjs.map +1 -1
  39. package/fesm2022/cmat-components-image-viewer.mjs +104 -107
  40. package/fesm2022/cmat-components-image-viewer.mjs.map +1 -1
  41. package/fesm2022/cmat-components-inline-loading.mjs +12 -15
  42. package/fesm2022/cmat-components-inline-loading.mjs.map +1 -1
  43. package/fesm2022/cmat-components-json-editor.mjs +118 -75
  44. package/fesm2022/cmat-components-json-editor.mjs.map +1 -1
  45. package/fesm2022/cmat-components-knob-input.mjs +196 -178
  46. package/fesm2022/cmat-components-knob-input.mjs.map +1 -1
  47. package/fesm2022/cmat-components-masonry.mjs +26 -41
  48. package/fesm2022/cmat-components-masonry.mjs.map +1 -1
  49. package/fesm2022/cmat-components-material-color-picker.mjs +81 -80
  50. package/fesm2022/cmat-components-material-color-picker.mjs.map +1 -1
  51. package/fesm2022/cmat-components-material-datetimepicker.mjs +1212 -1287
  52. package/fesm2022/cmat-components-material-datetimepicker.mjs.map +1 -1
  53. package/fesm2022/cmat-components-navigation.mjs +467 -450
  54. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  55. package/fesm2022/cmat-components-opt-input.mjs +143 -132
  56. package/fesm2022/cmat-components-opt-input.mjs.map +1 -1
  57. package/fesm2022/cmat-components-org-chart.mjs +68 -83
  58. package/fesm2022/cmat-components-org-chart.mjs.map +1 -1
  59. package/fesm2022/cmat-components-page-header.mjs +18 -24
  60. package/fesm2022/cmat-components-page-header.mjs.map +1 -1
  61. package/fesm2022/cmat-components-pagination.mjs +220 -136
  62. package/fesm2022/cmat-components-pagination.mjs.map +1 -1
  63. package/fesm2022/cmat-components-password-strength.mjs +262 -215
  64. package/fesm2022/cmat-components-password-strength.mjs.map +1 -1
  65. package/fesm2022/cmat-components-popover.mjs +227 -195
  66. package/fesm2022/cmat-components-popover.mjs.map +1 -1
  67. package/fesm2022/cmat-components-progress-bar.mjs +15 -34
  68. package/fesm2022/cmat-components-progress-bar.mjs.map +1 -1
  69. package/fesm2022/cmat-components-qrcode.mjs +95 -88
  70. package/fesm2022/cmat-components-qrcode.mjs.map +1 -1
  71. package/fesm2022/cmat-components-rating.mjs +70 -67
  72. package/fesm2022/cmat-components-rating.mjs.map +1 -1
  73. package/fesm2022/cmat-components-rich-text-editor.mjs +23 -26
  74. package/fesm2022/cmat-components-rich-text-editor.mjs.map +1 -1
  75. package/fesm2022/cmat-components-select-search.mjs +190 -159
  76. package/fesm2022/cmat-components-select-search.mjs.map +1 -1
  77. package/fesm2022/cmat-components-select-table.mjs +276 -213
  78. package/fesm2022/cmat-components-select-table.mjs.map +1 -1
  79. package/fesm2022/cmat-components-select-tree.mjs +178 -128
  80. package/fesm2022/cmat-components-select-tree.mjs.map +1 -1
  81. package/fesm2022/cmat-components-skeleton.mjs +44 -28
  82. package/fesm2022/cmat-components-skeleton.mjs.map +1 -1
  83. package/fesm2022/cmat-components-speed-dial.mjs +107 -163
  84. package/fesm2022/cmat-components-speed-dial.mjs.map +1 -1
  85. package/fesm2022/cmat-components-status-tag.mjs +29 -36
  86. package/fesm2022/cmat-components-status-tag.mjs.map +1 -1
  87. package/fesm2022/cmat-components-table-toolbar.mjs +14 -18
  88. package/fesm2022/cmat-components-table-toolbar.mjs.map +1 -1
  89. package/fesm2022/cmat-components-timeline.mjs +111 -118
  90. package/fesm2022/cmat-components-timeline.mjs.map +1 -1
  91. package/fesm2022/cmat-components-toast.mjs +65 -66
  92. package/fesm2022/cmat-components-toast.mjs.map +1 -1
  93. package/fesm2022/cmat-components-transfer-picker.mjs +130 -160
  94. package/fesm2022/cmat-components-transfer-picker.mjs.map +1 -1
  95. package/fesm2022/cmat-components-treetable.mjs +32 -39
  96. package/fesm2022/cmat-components-treetable.mjs.map +1 -1
  97. package/fesm2022/cmat-components-upload.mjs +186 -176
  98. package/fesm2022/cmat-components-upload.mjs.map +1 -1
  99. package/fesm2022/cmat-directives-animate-on-scroll.mjs +25 -28
  100. package/fesm2022/cmat-directives-animate-on-scroll.mjs.map +1 -1
  101. package/fesm2022/cmat-directives-arrow-cursor.mjs +85 -92
  102. package/fesm2022/cmat-directives-arrow-cursor.mjs.map +1 -1
  103. package/fesm2022/cmat-directives-autofocus.mjs +3 -3
  104. package/fesm2022/cmat-directives-autofocus.mjs.map +1 -1
  105. package/fesm2022/cmat-directives-data-exporter.mjs +49 -50
  106. package/fesm2022/cmat-directives-data-exporter.mjs.map +1 -1
  107. package/fesm2022/cmat-directives-debounce.mjs +16 -19
  108. package/fesm2022/cmat-directives-debounce.mjs.map +1 -1
  109. package/fesm2022/cmat-directives-digit-only.mjs +60 -69
  110. package/fesm2022/cmat-directives-digit-only.mjs.map +1 -1
  111. package/fesm2022/cmat-directives-equal-validator.mjs +3 -3
  112. package/fesm2022/cmat-directives-equal-validator.mjs.map +1 -1
  113. package/fesm2022/cmat-directives-seamless-auto-scroll.mjs +31 -30
  114. package/fesm2022/cmat-directives-seamless-auto-scroll.mjs.map +1 -1
  115. package/fesm2022/cmat-lib-mock-api.mjs +6 -6
  116. package/fesm2022/cmat-lib-mock-api.mjs.map +1 -1
  117. package/fesm2022/cmat-pipes-bytes.mjs +3 -3
  118. package/fesm2022/cmat-pipes-bytes.mjs.map +1 -1
  119. package/fesm2022/cmat-pipes-date-format.mjs +3 -3
  120. package/fesm2022/cmat-pipes-date-format.mjs.map +1 -1
  121. package/fesm2022/cmat-pipes-find-by-key.mjs +3 -3
  122. package/fesm2022/cmat-pipes-find-by-key.mjs.map +1 -1
  123. package/fesm2022/cmat-pipes-group-by.mjs +3 -3
  124. package/fesm2022/cmat-pipes-group-by.mjs.map +1 -1
  125. package/fesm2022/cmat-pipes-keys.mjs +3 -3
  126. package/fesm2022/cmat-pipes-keys.mjs.map +1 -1
  127. package/fesm2022/cmat-pipes-secure.mjs +7 -13
  128. package/fesm2022/cmat-pipes-secure.mjs.map +1 -1
  129. package/fesm2022/cmat-pipes-uppercase.mjs +3 -3
  130. package/fesm2022/cmat-pipes-uppercase.mjs.map +1 -1
  131. package/fesm2022/cmat-services-alert.mjs +26 -27
  132. package/fesm2022/cmat-services-alert.mjs.map +1 -1
  133. package/fesm2022/cmat-services-config.mjs +14 -23
  134. package/fesm2022/cmat-services-config.mjs.map +1 -1
  135. package/fesm2022/cmat-services-confirmation.mjs +8 -8
  136. package/fesm2022/cmat-services-confirmation.mjs.map +1 -1
  137. package/fesm2022/cmat-services-data.mjs +6 -10
  138. package/fesm2022/cmat-services-data.mjs.map +1 -1
  139. package/fesm2022/cmat-services-export-as.mjs +3 -3
  140. package/fesm2022/cmat-services-export-as.mjs.map +1 -1
  141. package/fesm2022/cmat-services-loading.mjs +30 -47
  142. package/fesm2022/cmat-services-loading.mjs.map +1 -1
  143. package/fesm2022/cmat-services-local-storage.mjs +3 -3
  144. package/fesm2022/cmat-services-local-storage.mjs.map +1 -1
  145. package/fesm2022/cmat-services-media-watcher.mjs +43 -34
  146. package/fesm2022/cmat-services-media-watcher.mjs.map +1 -1
  147. package/fesm2022/cmat-services-platform.mjs +3 -3
  148. package/fesm2022/cmat-services-platform.mjs.map +1 -1
  149. package/fesm2022/cmat-services-splash-screen.mjs +3 -3
  150. package/fesm2022/cmat-services-splash-screen.mjs.map +1 -1
  151. package/fesm2022/cmat-services-title.mjs +3 -3
  152. package/fesm2022/cmat-services-title.mjs.map +1 -1
  153. package/fesm2022/cmat-services-translation.mjs +11 -11
  154. package/fesm2022/cmat-services-translation.mjs.map +1 -1
  155. package/fesm2022/cmat-services-utils.mjs +3 -3
  156. package/fesm2022/cmat-services-utils.mjs.map +1 -1
  157. package/fesm2022/cmat.mjs +9228 -7507
  158. package/fesm2022/cmat.mjs.map +1 -1
  159. package/icons/material-icons/heroicons-outline.svg +3 -0
  160. package/icons/material-icons/heroicons-solid.svg +3 -0
  161. package/package.json +10 -1
  162. package/styles/components/bundle.scss +21 -0
  163. package/styles/overrides/angular-material.scss +22 -1
  164. package/tailwind/plugins/theming.js +183 -183
  165. package/types/cmat-components-breadcrumb.d.ts +40 -37
  166. package/types/cmat-components-card.d.ts +11 -13
  167. package/types/cmat-components-carousel.d.ts +87 -113
  168. package/types/cmat-components-cascade.d.ts +84 -65
  169. package/types/cmat-components-chip-input.d.ts +29 -24
  170. package/types/cmat-components-code-editor.d.ts +28 -12
  171. package/types/cmat-components-color-picker.d.ts +236 -0
  172. package/types/cmat-components-custom-formly.d.ts +316 -184
  173. package/types/cmat-components-data-picker.d.ts +372 -0
  174. package/types/cmat-components-date-range.d.ts +31 -36
  175. package/types/cmat-components-date-time-display.d.ts +8 -8
  176. package/types/cmat-components-drawer.d.ts +30 -32
  177. package/types/cmat-components-empty-state.d.ts +9 -10
  178. package/types/cmat-components-file-preview.d.ts +9 -9
  179. package/types/cmat-components-filter-toolbar.d.ts +15 -15
  180. package/types/cmat-components-form-actions.d.ts +5 -5
  181. package/types/cmat-components-fullscreen.d.ts +5 -5
  182. package/types/cmat-components-highlight.d.ts +13 -14
  183. package/types/cmat-components-image-viewer.d.ts +29 -33
  184. package/types/cmat-components-inline-loading.d.ts +6 -6
  185. package/types/cmat-components-json-editor.d.ts +15 -17
  186. package/types/cmat-components-knob-input.d.ts +58 -55
  187. package/types/cmat-components-masonry.d.ts +9 -12
  188. package/types/cmat-components-material-color-picker.d.ts +16 -21
  189. package/types/cmat-components-material-datetimepicker.d.ts +174 -216
  190. package/types/cmat-components-navigation.d.ts +34 -39
  191. package/types/cmat-components-opt-input.d.ts +35 -33
  192. package/types/cmat-components-org-chart.d.ts +8 -9
  193. package/types/cmat-components-page-header.d.ts +9 -9
  194. package/types/cmat-components-pagination.d.ts +36 -40
  195. package/types/cmat-components-password-strength.d.ts +58 -64
  196. package/types/cmat-components-popover.d.ts +22 -32
  197. package/types/cmat-components-progress-bar.d.ts +7 -10
  198. package/types/cmat-components-qrcode.d.ts +22 -22
  199. package/types/cmat-components-rating.d.ts +17 -19
  200. package/types/cmat-components-rich-text-editor.d.ts +11 -12
  201. package/types/cmat-components-select-search.d.ts +48 -36
  202. package/types/cmat-components-select-table.d.ts +38 -34
  203. package/types/cmat-components-select-tree.d.ts +17 -15
  204. package/types/cmat-components-skeleton.d.ts +27 -10
  205. package/types/cmat-components-speed-dial.d.ts +24 -33
  206. package/types/cmat-components-status-tag.d.ts +19 -9
  207. package/types/cmat-components-table-toolbar.d.ts +7 -7
  208. package/types/cmat-components-timeline.d.ts +33 -34
  209. package/types/cmat-components-toast.d.ts +26 -30
  210. package/types/cmat-components-transfer-picker.d.ts +51 -56
  211. package/types/cmat-components-treetable.d.ts +12 -13
  212. package/types/cmat-components-upload.d.ts +33 -38
  213. package/types/cmat-components-x6-angular-shape.d.ts +1 -1
  214. package/types/cmat-directives-animate-on-scroll.d.ts +7 -7
  215. package/types/cmat-directives-arrow-cursor.d.ts +18 -20
  216. package/types/cmat-directives-data-exporter.d.ts +10 -10
  217. package/types/cmat-directives-debounce.d.ts +5 -5
  218. package/types/cmat-directives-digit-only.d.ts +13 -13
  219. package/types/cmat-directives-seamless-auto-scroll.d.ts +7 -7
  220. package/types/cmat-pipes-secure.d.ts +1 -3
  221. package/types/cmat-services-alert.d.ts +11 -12
  222. package/types/cmat-services-config.d.ts +2 -7
  223. package/types/cmat-services-confirmation.d.ts +2 -2
  224. package/types/cmat-services-data.d.ts +0 -1
  225. package/types/cmat-services-loading.d.ts +14 -22
  226. package/types/cmat-services-media-watcher.d.ts +5 -5
  227. package/types/cmat-services-translation.d.ts +4 -5
  228. package/types/cmat.d.ts +2167 -1746
@@ -1,57 +1,95 @@
1
1
  import { DOCUMENT } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { EventEmitter, inject, ViewChild, Output, Input, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { viewChild, output, input, signal, inject, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
4
4
  import { createAjvValidator, parseJSONPath, createMultiSelection, isJSONContent, isKeySelection, stringifyJSONPath, isMultiSelection, createJSONEditor } from 'vanilla-jsoneditor';
5
5
 
6
6
  class CmatJsonEditorComponent {
7
7
  constructor() {
8
- this.options = {};
9
- this.contentChanged = new EventEmitter();
10
- this.pathChanged = new EventEmitter();
8
+ this.jsonEditorContainer = viewChild('jsonEditorContainer', /* @ts-ignore */
9
+ ...(ngDevMode ? [{ debugName: "jsonEditorContainer" }] : /* istanbul ignore next */ []));
10
+ this.contentChanged = output();
11
+ this.pathChanged = output();
12
+ this.options = input({}, /* @ts-ignore */
13
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
14
+ this.data = input(/* @ts-ignore */
15
+ ...(ngDevMode ? [undefined, { debugName: "data" }] : /* istanbul ignore next */ []));
11
16
  this.id = 'cmatjsoneditor-' + crypto.randomUUID().slice(0, 8);
12
- this.content = {
17
+ this._content = {
13
18
  text: undefined,
14
- json: {}
19
+ json: {},
15
20
  };
16
- this._destroyed = false;
21
+ this._editorSignal = signal(undefined, /* @ts-ignore */
22
+ ...(ngDevMode ? [{ debugName: "_editorSignal" }] : /* istanbul ignore next */ []));
17
23
  this._document = inject(DOCUMENT);
18
- }
19
- set jsonEditorContainer(value) {
20
- this._jsonEditorContainer = value;
21
- this._initializeEditor();
22
- }
23
- ngOnInit() {
24
- this._initializeEditor();
25
- }
26
- ngOnChanges(changes) {
27
- if (changes.data) {
28
- this.content = {
29
- text: undefined,
30
- json: this.data
31
- };
32
- if (this._editor) {
33
- void this._editor.update(this.content);
24
+ this._destroyed = false;
25
+ effect(() => {
26
+ if (this._destroyed)
27
+ return;
28
+ const container = this.jsonEditorContainer();
29
+ const data = this.data();
30
+ const options = this.options();
31
+ if (container && !this._editorSignal()) {
32
+ this._initializeEditor(container.nativeElement, options, data);
34
33
  }
35
- }
36
- if (changes.options) {
37
- if (this._editor) {
38
- void this._editor?.updateProps(this.options);
34
+ else if (this._editorSignal()) {
35
+ // 如果编辑器已存在,处理数据或选项的变更
36
+ // 注意:effect 会在任何依赖的信号变化时运行,包括 data 和 options
37
+ // 我们需要区分是初始化还是更新
38
+ // 更新内容 (data 变化)
39
+ // 为了避免在初始化时重复设置,我们可以在 _initializeEditor 中设置初始内容
40
+ // 这里只处理后续的 data 变化
41
+ // 由于 effect 无法直接知道是哪个信号触发的,我们可能需要更细致的逻辑
42
+ // 或者简单地每次 data 变化都调用 update
43
+ // 更好的方式:分别监听 data 和 options 的变化
39
44
  }
40
- }
45
+ });
46
+ effect(() => {
47
+ const data = this.data();
48
+ const editor = this._editorSignal();
49
+ if (editor && !this._destroyed) {
50
+ console.log('[JSON Editor] Data changed, updating editor:', data);
51
+ const newContent = {
52
+ text: undefined,
53
+ json: data,
54
+ };
55
+ void editor.set(newContent);
56
+ this._content = newContent;
57
+ console.log('[JSON Editor] Editor set completed');
58
+ }
59
+ });
60
+ effect(() => {
61
+ const options = this.options();
62
+ const editor = this._editorSignal();
63
+ if (editor && !this._destroyed) {
64
+ void editor.updateProps(options);
65
+ }
66
+ });
41
67
  }
42
68
  ngOnDestroy() {
43
69
  this._destroyed = true;
44
- void this._editor?.destroy();
70
+ const editor = this._editorSignal();
71
+ if (editor) {
72
+ void editor.destroy();
73
+ this._editorSignal.set(undefined);
74
+ }
45
75
  }
46
76
  setSchema(schema) {
47
- const validator = createAjvValidator({ schema: schema });
48
- void this._editor?.updateProps({ validator: validator });
77
+ const editor = this._editorSignal();
78
+ if (!editor)
79
+ return;
80
+ const validator = createAjvValidator({
81
+ schema: schema,
82
+ });
83
+ void editor.updateProps({ validator: validator });
49
84
  }
50
85
  setSelectionToPath(pathString) {
86
+ const editor = this._editorSignal();
87
+ if (!editor)
88
+ return;
51
89
  const path = parseJSONPath(pathString);
52
90
  const selection = createMultiSelection(path, path);
53
91
  try {
54
- void this._editor?.select(selection);
92
+ void editor.select(selection);
55
93
  }
56
94
  catch (error) {
57
95
  console.warn('Set selection to path not possible:', pathString, error);
@@ -59,26 +97,32 @@ class CmatJsonEditorComponent {
59
97
  this.pathChanged.emit(pathString);
60
98
  }
61
99
  get() {
62
- if (this._editor) {
63
- const content = this._editor.get();
64
- if (isJSONContent(content)) {
65
- const j = content.json;
66
- return j;
100
+ const editor = this._editorSignal();
101
+ if (!editor)
102
+ return undefined;
103
+ const content = editor.get();
104
+ if (isJSONContent(content)) {
105
+ return content.json;
106
+ }
107
+ else {
108
+ const textContent = content;
109
+ const t = String(textContent.text ?? '');
110
+ try {
111
+ return JSON.parse(t);
67
112
  }
68
- else {
69
- const textContent = content;
70
- const t = String(textContent.text ?? '');
71
- const j = JSON.parse(t);
72
- return j;
113
+ catch {
114
+ return undefined;
73
115
  }
74
116
  }
75
- return undefined;
76
117
  }
77
118
  set(json) {
119
+ const editor = this._editorSignal();
120
+ if (!editor)
121
+ return;
78
122
  const value = {
79
123
  json: json,
80
124
  };
81
- void this._editor?.set(value);
125
+ void editor.set(value);
82
126
  }
83
127
  _onSelect(selection) {
84
128
  if (isKeySelection(selection)) {
@@ -88,29 +132,38 @@ class CmatJsonEditorComponent {
88
132
  this.pathChanged.emit(stringifyJSONPath(selection.anchorPath));
89
133
  }
90
134
  }
91
- _initializeEditor() {
92
- if (this._destroyed || this._editor || !this._jsonEditorContainer?.nativeElement) {
135
+ _initializeEditor(target, options, initialData) {
136
+ if (this._destroyed || this._editorSignal()) {
93
137
  return;
94
138
  }
95
- this._editor = createJSONEditor({
96
- target: this._jsonEditorContainer.nativeElement,
139
+ this._content = {
140
+ text: undefined,
141
+ json: initialData,
142
+ };
143
+ const editor = createJSONEditor({
144
+ target: target,
97
145
  props: {
98
- ...this.options,
99
- content: this.content,
146
+ ...options,
147
+ content: this._content,
100
148
  onChange: (updatedContent, _previousContent, { contentErrors }) => {
101
149
  if (contentErrors) {
102
150
  console.error('JSON Editor content errors:', contentErrors);
103
151
  }
104
- this.content = updatedContent;
152
+ this._content = updatedContent;
105
153
  this.contentChanged.emit(updatedContent);
106
154
  },
107
155
  onSelect: this._onSelect.bind(this),
108
- onRenderMenu(items,
156
+ onRenderMenu: (items,
109
157
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
110
- context) {
111
- items.splice(items.findIndex((i) => i['text'] === 'table'), 1);
112
- items.splice(items.findIndex((i) => i['className'] === 'jse-sort'), 1);
113
- items.splice(items.findIndex((i) => i['className'] === 'jse-transform'), 1);
158
+ context) => {
159
+ const itemsToRemove = ['table', 'jse-sort', 'jse-transform'];
160
+ for (let i = items.length - 1; i >= 0; i--) {
161
+ const item = items[i];
162
+ if (itemsToRemove.includes(item['text'] ?? '') ||
163
+ itemsToRemove.includes(item['className'] ?? '')) {
164
+ items.splice(i, 1);
165
+ }
166
+ }
114
167
  items.forEach((item) => {
115
168
  const button = item;
116
169
  switch (button['title']) {
@@ -131,10 +184,10 @@ class CmatJsonEditorComponent {
131
184
  button.title = '切换到树模式(当前模式:树)';
132
185
  break;
133
186
  case 'Format JSON: add proper indentation and new lines (Ctrl+I)':
134
- button.title = 'JSON格式化:添加适当的缩进和换行 (Ctrl+I)';
187
+ button.title = 'JSON格式化:添加适当的缩进和换行 (Ctrl+I)';
135
188
  break;
136
189
  case 'Compact JSON: remove all white spacing and new lines (Ctrl+Shift+I)':
137
- button.title = '压缩 JSON:删除所有空白间距和换行 (Ctrl+Shift+I)';
190
+ button.title = '压缩 JSON:删除所有空白间距和换行 (Ctrl+Shift+I)';
138
191
  break;
139
192
  case 'Search (Ctrl+F)':
140
193
  button.title = '搜索 (Ctrl+F)';
@@ -152,7 +205,7 @@ class CmatJsonEditorComponent {
152
205
  button.title = '全部折叠';
153
206
  break;
154
207
  case 'Open context menu (Click here, right click on the selection, or use the context menu button or Ctrl+Q)':
155
- button.title = '打开上下文菜单(单击此处、右键选择,或使用上下文菜单按钮,或 Ctrl+Q';
208
+ button.title = '打开上下文菜单(单击此处、右键选择,或使用上下文菜单按钮,或 Ctrl+Q))';
156
209
  break;
157
210
  }
158
211
  });
@@ -160,25 +213,15 @@ class CmatJsonEditorComponent {
160
213
  },
161
214
  },
162
215
  });
216
+ this._editorSignal.set(editor);
163
217
  }
164
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: CmatJsonEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
165
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: CmatJsonEditorComponent, isStandalone: true, selector: "cmat-json-editor", inputs: { options: "options", data: "data" }, outputs: { contentChanged: "contentChanged", pathChanged: "pathChanged" }, viewQueries: [{ propertyName: "jsonEditorContainer", first: true, predicate: ["jsonEditorContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@defer (on viewport) {\r\n <div #jsonEditorContainer class=\"cmat-jsoneditor\" [id]=\"id\"></div>\r\n} @placeholder {\r\n <div class=\"flex min-h-64 items-center justify-center rounded-2xl border border-dashed border-default bg-card px-4 py-6 text-sm text-secondary shadow-sm\">\r\n JSON \u7F16\u8F91\u5668\u52A0\u8F7D\u4E2D...\r\n </div>\r\n}\r\n", styles: [".cmat-jsoneditor .jse-main.svelte-sxaskb{min-height:24rem}.cmat-jsoneditor{--jse-background-color: rgba(var(--cmat-bg-card-rgb), 1);--jse-text-color: var(--cmat-text-default);--jse-key-color: var(--cmat-text-default);--jse-delimiter-color: var(--cmat-text-hint);--jse-hover-background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
218
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatJsonEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
219
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: CmatJsonEditorComponent, isStandalone: true, selector: "cmat-json-editor", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { contentChanged: "contentChanged", pathChanged: "pathChanged" }, viewQueries: [{ propertyName: "jsonEditorContainer", first: true, predicate: ["jsonEditorContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "@defer (on viewport) {\r\n <div #jsonEditorContainer class=\"cmat-jsoneditor\" [id]=\"id\"></div>\r\n} @placeholder {\r\n <div class=\"flex min-h-64 items-center justify-center rounded-2xl border border-dashed border-default bg-card px-4 py-6 text-sm text-secondary shadow-sm\">\r\n JSON \u7F16\u8F91\u5668\u52A0\u8F7D\u4E2D...\r\n </div>\r\n}", styles: [".cmat-jsoneditor .jse-main.svelte-sxaskb{min-height:24rem}.cmat-jsoneditor{--jse-background-color: rgba(var(--cmat-bg-card-rgb), 1);--jse-text-color: var(--cmat-text-default);--jse-key-color: var(--cmat-text-default);--jse-delimiter-color: var(--cmat-text-hint);--jse-hover-background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
166
220
  }
167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: CmatJsonEditorComponent, decorators: [{
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CmatJsonEditorComponent, decorators: [{
168
222
  type: Component,
169
- args: [{ selector: 'cmat-json-editor', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [], template: "@defer (on viewport) {\r\n <div #jsonEditorContainer class=\"cmat-jsoneditor\" [id]=\"id\"></div>\r\n} @placeholder {\r\n <div class=\"flex min-h-64 items-center justify-center rounded-2xl border border-dashed border-default bg-card px-4 py-6 text-sm text-secondary shadow-sm\">\r\n JSON \u7F16\u8F91\u5668\u52A0\u8F7D\u4E2D...\r\n </div>\r\n}\r\n", styles: [".cmat-jsoneditor .jse-main.svelte-sxaskb{min-height:24rem}.cmat-jsoneditor{--jse-background-color: rgba(var(--cmat-bg-card-rgb), 1);--jse-text-color: var(--cmat-text-default);--jse-key-color: var(--cmat-text-default);--jse-delimiter-color: var(--cmat-text-hint);--jse-hover-background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}\n"] }]
170
- }], propDecorators: { options: [{
171
- type: Input
172
- }], data: [{
173
- type: Input
174
- }], contentChanged: [{
175
- type: Output
176
- }], pathChanged: [{
177
- type: Output
178
- }], jsonEditorContainer: [{
179
- type: ViewChild,
180
- args: ['jsonEditorContainer']
181
- }] } });
223
+ args: [{ selector: 'cmat-json-editor', preserveWhitespaces: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [], template: "@defer (on viewport) {\r\n <div #jsonEditorContainer class=\"cmat-jsoneditor\" [id]=\"id\"></div>\r\n} @placeholder {\r\n <div class=\"flex min-h-64 items-center justify-center rounded-2xl border border-dashed border-default bg-card px-4 py-6 text-sm text-secondary shadow-sm\">\r\n JSON \u7F16\u8F91\u5668\u52A0\u8F7D\u4E2D...\r\n </div>\r\n}", styles: [".cmat-jsoneditor .jse-main.svelte-sxaskb{min-height:24rem}.cmat-jsoneditor{--jse-background-color: rgba(var(--cmat-bg-card-rgb), 1);--jse-text-color: var(--cmat-text-default);--jse-key-color: var(--cmat-text-default);--jse-delimiter-color: var(--cmat-text-hint);--jse-hover-background-color:var(--mat-option-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}\n"] }]
224
+ }], ctorParameters: () => [], propDecorators: { jsonEditorContainer: [{ type: i0.ViewChild, args: ['jsonEditorContainer', { isSignal: true }] }], contentChanged: [{ type: i0.Output, args: ["contentChanged"] }], pathChanged: [{ type: i0.Output, args: ["pathChanged"] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } });
182
225
 
183
226
  /**
184
227
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"cmat-components-json-editor.mjs","sources":["../../../projects/cmat/components/json-editor/json-editor.component.ts","../../../projects/cmat/components/json-editor/json-editor.component.html","../../../projects/cmat/components/json-editor/cmat-components-json-editor.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n stringifyJSONPath,\r\n Content,\r\n MenuItem,\r\n createAjvValidator,\r\n JSONEditorPropsOptional,\r\n parseJSONPath,\r\n JSONEditorSelection,\r\n isKeySelection,\r\n isJSONContent,\r\n JSONContent,\r\n isMultiSelection,\r\n createMultiSelection,\r\n MenuButton,\r\n createJSONEditor,\r\n JsonEditor,\r\n} from 'vanilla-jsoneditor';\r\n\r\n@Component({\r\n selector: 'cmat-json-editor',\r\n templateUrl: './json-editor.component.html',\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./json-editor.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: []\r\n})\r\nexport class CmatJsonEditorComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() options: JSONEditorPropsOptional = {};\r\n @Input() data: unknown;\r\n\r\n @Output() contentChanged: EventEmitter<Content> = new EventEmitter<Content>();\r\n @Output() pathChanged: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n\r\n public id = 'cmatjsoneditor-' + crypto.randomUUID().slice(0, 8);\r\n content: Content = {\r\n text: undefined,\r\n json: {}\r\n };\r\n\r\n private _editor?: JsonEditor;\r\n private _jsonEditorContainer?: ElementRef<HTMLElement>;\r\n private _destroyed = false;\r\n private readonly _document = inject(DOCUMENT);\r\n\r\n @ViewChild('jsonEditorContainer')\r\n set jsonEditorContainer(value: ElementRef<HTMLElement> | undefined) {\r\n this._jsonEditorContainer = value;\r\n this._initializeEditor();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._initializeEditor();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.data) {\r\n this.content = {\r\n text: undefined,\r\n json: this.data\r\n };\r\n\r\n if (this._editor) {\r\n void this._editor.update(this.content);\r\n }\r\n\r\n }\r\n\r\n if (changes.options) {\r\n if (this._editor) {\r\n void this._editor?.updateProps(this.options);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyed = true;\r\n void this._editor?.destroy();\r\n }\r\n\r\n setSchema(schema: unknown): void {\r\n const validator = createAjvValidator({ schema: schema as import('vanilla-jsoneditor').JSONSchema });\r\n void this._editor?.updateProps({ validator: validator });\r\n }\r\n\r\n setSelectionToPath(pathString: string): void {\r\n const path = parseJSONPath(pathString);\r\n const selection = createMultiSelection(path, path);\r\n\r\n try {\r\n void this._editor?.select(selection);\r\n } catch (error) {\r\n console.warn('Set selection to path not possible:', pathString, error);\r\n }\r\n this.pathChanged.emit(pathString);\r\n }\r\n\r\n get(): JSON | undefined {\r\n if (this._editor) {\r\n const content: Content = this._editor.get();\r\n if (isJSONContent(content)) {\r\n const j = content.json as JSON;\r\n return j;\r\n } else {\r\n const textContent = content as { text?: string };\r\n const t = String(textContent.text ?? '');\r\n const j = JSON.parse(t) as JSON;\r\n return j;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n set(json: unknown): void {\r\n const value: JSONContent = {\r\n json: json,\r\n };\r\n\r\n void this._editor?.set(value);\r\n }\r\n\r\n private _onSelect(selection: JSONEditorSelection | undefined): void {\r\n if (isKeySelection(selection)) {\r\n this.pathChanged.emit(stringifyJSONPath(selection.path));\r\n } else if (isMultiSelection(selection)) {\r\n this.pathChanged.emit(stringifyJSONPath(selection.anchorPath));\r\n }\r\n }\r\n\r\n private _initializeEditor(): void {\r\n if (this._destroyed || this._editor || !this._jsonEditorContainer?.nativeElement) {\r\n return;\r\n }\r\n\r\n this._editor = createJSONEditor({\r\n target: this._jsonEditorContainer.nativeElement,\r\n props: {\r\n ...this.options,\r\n content: this.content,\r\n onChange: (\r\n updatedContent: Content,\r\n _previousContent: Content,\r\n { contentErrors }: { contentErrors?: unknown }\r\n ): void => {\r\n if (contentErrors) {\r\n console.error('JSON Editor content errors:', contentErrors);\r\n }\r\n this.content = updatedContent;\r\n this.contentChanged.emit(updatedContent);\r\n },\r\n onSelect: this._onSelect.bind(this),\r\n onRenderMenu(\r\n items: MenuItem[],\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n context: { mode: 'tree' | 'text' | 'table'; modal: boolean }\r\n ): MenuItem[] | undefined {\r\n items.splice(\r\n items.findIndex((i): boolean => (i as MenuButton)['text'] === 'table'),\r\n 1\r\n );\r\n items.splice(\r\n items.findIndex((i): boolean => (i as MenuButton)['className'] === 'jse-sort'),\r\n 1\r\n );\r\n items.splice(\r\n items.findIndex((i): boolean => (i as MenuButton)['className'] === 'jse-transform'),\r\n 1\r\n );\r\n\r\n items.forEach((item): void => {\r\n const button = item as MenuButton;\r\n switch (button['title']) {\r\n case 'Switch to text mode (current mode: text)':\r\n button.text = '文本';\r\n button.title = '切换到文本模式(当前模式:文本)';\r\n break;\r\n case 'Switch to tree mode (current mode: text)':\r\n button.text = '树';\r\n button.title = '切换到树模式(当前模式:文本)';\r\n break;\r\n case 'Switch to text mode (current mode: tree)':\r\n button.text = '文本';\r\n button.title = '切换到文本模式(当前模式:树)';\r\n break;\r\n case 'Switch to tree mode (current mode: tree)':\r\n button.text = '树';\r\n button.title = '切换到树模式(当前模式:树)';\r\n break;\r\n case 'Format JSON: add proper indentation and new lines (Ctrl+I)':\r\n button.title = 'JSON格式化:添加适当的缩进和换行 (Ctrl+I)';\r\n break;\r\n case 'Compact JSON: remove all white spacing and new lines (Ctrl+Shift+I)':\r\n button.title = '压缩 JSON:删除所有空白间距和换行 (Ctrl+Shift+I)';\r\n break;\r\n case 'Search (Ctrl+F)':\r\n button.title = '搜索 (Ctrl+F)';\r\n break;\r\n case 'Undo (Ctrl+Z)':\r\n button.title = '撤销 (Ctrl+Z)';\r\n break;\r\n case 'Redo (Ctrl+Shift+Z)':\r\n button.title = '重做 (Ctrl+Shift+Z)';\r\n break;\r\n case 'Expand all':\r\n button.title = '全部展开';\r\n break;\r\n case 'Collapse all':\r\n button.title = '全部折叠';\r\n break;\r\n case 'Open context menu (Click here, right click on the selection, or use the context menu button or Ctrl+Q)':\r\n button.title = '打开上下文菜单(单击此处、右键选择,或使用上下文菜单按钮,或 Ctrl+Q)';\r\n break;\r\n }\r\n });\r\n return items;\r\n },\r\n },\r\n });\r\n }\r\n}\r\n","@defer (on viewport) {\r\n <div #jsonEditorContainer class=\"cmat-jsoneditor\" [id]=\"id\"></div>\r\n} @placeholder {\r\n <div class=\"flex min-h-64 items-center justify-center rounded-2xl border border-dashed border-default bg-card px-4 py-6 text-sm text-secondary shadow-sm\">\r\n JSON 编辑器加载中...\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cmat-components-json-editor.mjs","sources":["../../../projects/cmat/components/json-editor/json-editor.component.ts","../../../projects/cmat/components/json-editor/json-editor.component.html","../../../projects/cmat/components/json-editor/cmat-components-json-editor.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n ViewEncapsulation,\r\n inject,\r\n input,\r\n output,\r\n viewChild,\r\n effect,\r\n OnDestroy,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n stringifyJSONPath,\r\n Content,\r\n MenuItem,\r\n createAjvValidator,\r\n JSONEditorPropsOptional,\r\n parseJSONPath,\r\n JSONEditorSelection,\r\n isKeySelection,\r\n isJSONContent,\r\n JSONContent,\r\n isMultiSelection,\r\n createMultiSelection,\r\n MenuButton,\r\n createJSONEditor,\r\n JsonEditor,\r\n} from 'vanilla-jsoneditor';\r\n\r\n@Component({\r\n selector: 'cmat-json-editor',\r\n templateUrl: './json-editor.component.html',\r\n preserveWhitespaces: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: ['./json-editor.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [],\r\n})\r\nexport class CmatJsonEditorComponent implements OnDestroy {\r\n readonly jsonEditorContainer = viewChild<ElementRef<HTMLElement>>('jsonEditorContainer');\r\n\r\n readonly contentChanged = output<Content>();\r\n readonly pathChanged = output<string>();\r\n\r\n readonly options = input<JSONEditorPropsOptional>({});\r\n readonly data = input<unknown>();\r\n\r\n public id = 'cmatjsoneditor-' + crypto.randomUUID().slice(0, 8);\r\n\r\n private _content: Content = {\r\n text: undefined,\r\n json: {},\r\n };\r\n\r\n private readonly _editorSignal = signal<JsonEditor | undefined>(undefined);\r\n\r\n\r\n private readonly _document = inject(DOCUMENT);\r\n private _destroyed = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this._destroyed) return;\r\n\r\n const container = this.jsonEditorContainer();\r\n const data = this.data();\r\n const options = this.options();\r\n\r\n if (container && !this._editorSignal()) {\r\n this._initializeEditor(container.nativeElement, options, data);\r\n } else if (this._editorSignal()) {\r\n // 如果编辑器已存在,处理数据或选项的变更\r\n // 注意:effect 会在任何依赖的信号变化时运行,包括 data 和 options\r\n // 我们需要区分是初始化还是更新\r\n\r\n // 更新内容 (data 变化)\r\n // 为了避免在初始化时重复设置,我们可以在 _initializeEditor 中设置初始内容\r\n // 这里只处理后续的 data 变化\r\n // 由于 effect 无法直接知道是哪个信号触发的,我们可能需要更细致的逻辑\r\n // 或者简单地每次 data 变化都调用 update\r\n\r\n // 更好的方式:分别监听 data 和 options 的变化\r\n }\r\n });\r\n\r\n\r\n effect(() => {\r\n const data = this.data();\r\n const editor = this._editorSignal();\r\n\r\n if (editor && !this._destroyed) {\r\n console.log('[JSON Editor] Data changed, updating editor:', data);\r\n const newContent: Content = {\r\n text: undefined,\r\n json: data,\r\n };\r\n\r\n void editor.set(newContent);\r\n this._content = newContent;\r\n console.log('[JSON Editor] Editor set completed');\r\n }\r\n });\r\n\r\n effect(() => {\r\n const options = this.options();\r\n const editor = this._editorSignal();\r\n\r\n if (editor && !this._destroyed) {\r\n void editor.updateProps(options);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyed = true;\r\n const editor = this._editorSignal();\r\n if (editor) {\r\n void editor.destroy();\r\n this._editorSignal.set(undefined);\r\n }\r\n }\r\n\r\n setSchema(schema: unknown): void {\r\n const editor = this._editorSignal();\r\n if (!editor) return;\r\n\r\n const validator = createAjvValidator({\r\n schema: schema as import('vanilla-jsoneditor').JSONSchema,\r\n });\r\n void editor.updateProps({ validator: validator });\r\n }\r\n\r\n setSelectionToPath(pathString: string): void {\r\n const editor = this._editorSignal();\r\n if (!editor) return;\r\n\r\n const path = parseJSONPath(pathString);\r\n const selection = createMultiSelection(path, path);\r\n\r\n try {\r\n void editor.select(selection);\r\n } catch (error) {\r\n console.warn('Set selection to path not possible:', pathString, error);\r\n }\r\n this.pathChanged.emit(pathString);\r\n }\r\n\r\n get(): JSON | undefined {\r\n const editor = this._editorSignal();\r\n if (!editor) return undefined;\r\n\r\n const content: Content = editor.get();\r\n if (isJSONContent(content)) {\r\n return content.json as JSON;\r\n } else {\r\n const textContent = content as { text?: string };\r\n const t = String(textContent.text ?? '');\r\n try {\r\n return JSON.parse(t) as JSON;\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n set(json: unknown): void {\r\n const editor = this._editorSignal();\r\n if (!editor) return;\r\n\r\n const value: JSONContent = {\r\n json: json,\r\n };\r\n void editor.set(value);\r\n }\r\n\r\n private _onSelect(selection: JSONEditorSelection | undefined): void {\r\n if (isKeySelection(selection)) {\r\n this.pathChanged.emit(stringifyJSONPath(selection.path));\r\n } else if (isMultiSelection(selection)) {\r\n this.pathChanged.emit(stringifyJSONPath(selection.anchorPath));\r\n }\r\n }\r\n\r\n private _initializeEditor(target: HTMLElement, options: JSONEditorPropsOptional, initialData: unknown): void {\r\n if (this._destroyed || this._editorSignal()) {\r\n return;\r\n }\r\n\r\n this._content = {\r\n text: undefined,\r\n json: initialData,\r\n };\r\n\r\n const editor = createJSONEditor({\r\n target: target,\r\n props: {\r\n ...options,\r\n content: this._content,\r\n onChange: (\r\n updatedContent: Content,\r\n _previousContent: Content,\r\n { contentErrors }: { contentErrors?: unknown },\r\n ): void => {\r\n if (contentErrors) {\r\n console.error('JSON Editor content errors:', contentErrors);\r\n }\r\n this._content = updatedContent;\r\n this.contentChanged.emit(updatedContent);\r\n },\r\n onSelect: this._onSelect.bind(this),\r\n onRenderMenu: (\r\n items: MenuItem[],\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n context: { mode: 'tree' | 'text' | 'table'; modal: boolean },\r\n ): MenuItem[] | undefined => {\r\n const itemsToRemove = ['table', 'jse-sort', 'jse-transform'];\r\n for (let i = items.length - 1; i >= 0; i--) {\r\n const item = items[i] as MenuButton;\r\n if (\r\n itemsToRemove.includes(item['text'] ?? '') ||\r\n itemsToRemove.includes(item['className'] ?? '')\r\n ) {\r\n items.splice(i, 1);\r\n }\r\n }\r\n\r\n items.forEach((item): void => {\r\n const button = item as MenuButton;\r\n switch (button['title']) {\r\n case 'Switch to text mode (current mode: text)':\r\n button.text = '文本';\r\n button.title = '切换到文本模式(当前模式:文本)';\r\n break;\r\n case 'Switch to tree mode (current mode: text)':\r\n button.text = '树';\r\n button.title = '切换到树模式(当前模式:文本)';\r\n break;\r\n case 'Switch to text mode (current mode: tree)':\r\n button.text = '文本';\r\n button.title = '切换到文本模式(当前模式:树)';\r\n break;\r\n case 'Switch to tree mode (current mode: tree)':\r\n button.text = '树';\r\n button.title = '切换到树模式(当前模式:树)';\r\n break;\r\n case 'Format JSON: add proper indentation and new lines (Ctrl+I)':\r\n button.title = 'JSON格式化:添加适当的缩进和换行 (Ctrl+I)';\r\n break;\r\n case 'Compact JSON: remove all white spacing and new lines (Ctrl+Shift+I)':\r\n button.title = '压缩 JSON:删除所有空白间距和换行 (Ctrl+Shift+I)';\r\n break;\r\n case 'Search (Ctrl+F)':\r\n button.title = '搜索 (Ctrl+F)';\r\n break;\r\n case 'Undo (Ctrl+Z)':\r\n button.title = '撤销 (Ctrl+Z)';\r\n break;\r\n case 'Redo (Ctrl+Shift+Z)':\r\n button.title = '重做 (Ctrl+Shift+Z)';\r\n break;\r\n case 'Expand all':\r\n button.title = '全部展开';\r\n break;\r\n case 'Collapse all':\r\n button.title = '全部折叠';\r\n break;\r\n case 'Open context menu (Click here, right click on the selection, or use the context menu button or Ctrl+Q)':\r\n button.title = '打开上下文菜单(单击此处、右键选择,或使用上下文菜单按钮,或 Ctrl+Q))';\r\n break;\r\n }\r\n });\r\n return items;\r\n },\r\n },\r\n });\r\n\r\n this._editorSignal.set(editor);\r\n }\r\n}","@defer (on viewport) {\r\n <div #jsonEditorContainer class=\"cmat-jsoneditor\" [id]=\"id\"></div>\r\n} @placeholder {\r\n <div class=\"flex min-h-64 items-center justify-center rounded-2xl border border-dashed border-default bg-card px-4 py-6 text-sm text-secondary shadow-sm\">\r\n JSON 编辑器加载中...\r\n </div>\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}