@cratis/components 0.1.18 → 1.0.3

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 (294) hide show
  1. package/README.md +83 -0
  2. package/dist/cjs/CommandDialog/CommandDialog.js +14 -25
  3. package/dist/cjs/CommandDialog/CommandDialog.js.map +1 -1
  4. package/dist/cjs/CommandForm/fields/CheckboxField.js +2 -2
  5. package/dist/cjs/CommandForm/fields/CheckboxField.js.map +1 -1
  6. package/dist/cjs/CommandForm/fields/DropdownField.js +5 -5
  7. package/dist/cjs/CommandForm/fields/DropdownField.js.map +1 -1
  8. package/dist/cjs/CommandForm/fields/InputTextField.js +2 -2
  9. package/dist/cjs/CommandForm/fields/InputTextField.js.map +1 -1
  10. package/dist/cjs/CommandForm/fields/NumberField.js +2 -2
  11. package/dist/cjs/CommandForm/fields/NumberField.js.map +1 -1
  12. package/dist/cjs/CommandForm/fields/SliderField.js +5 -9
  13. package/dist/cjs/CommandForm/fields/SliderField.js.map +1 -1
  14. package/dist/cjs/CommandForm/fields/TextAreaField.js +2 -2
  15. package/dist/cjs/CommandForm/fields/TextAreaField.js.map +1 -1
  16. package/dist/cjs/CommandForm/index.js +35 -15
  17. package/dist/cjs/CommandForm/index.js.map +1 -1
  18. package/dist/cjs/Common/ErrorBoundary.js +26 -0
  19. package/dist/cjs/Common/ErrorBoundary.js.map +1 -0
  20. package/dist/cjs/Common/FormElement.js +10 -0
  21. package/dist/cjs/Common/FormElement.js.map +1 -0
  22. package/dist/cjs/Common/index.js +12 -0
  23. package/dist/cjs/Common/index.js.map +1 -0
  24. package/dist/cjs/DataTables/DataTableForObservableQuery.js +53 -1
  25. package/dist/cjs/DataTables/DataTableForObservableQuery.js.map +1 -1
  26. package/dist/cjs/DataTables/DataTableForQuery.js +19 -1
  27. package/dist/cjs/DataTables/DataTableForQuery.js.map +1 -1
  28. package/dist/cjs/Dialogs/BusyIndicatorDialog.js +2 -3
  29. package/dist/cjs/Dialogs/BusyIndicatorDialog.js.map +1 -1
  30. package/dist/cjs/Dialogs/ConfirmationDialog.js +4 -21
  31. package/dist/cjs/Dialogs/ConfirmationDialog.js.map +1 -1
  32. package/dist/cjs/Dialogs/Dialog.js +66 -0
  33. package/dist/cjs/Dialogs/Dialog.js.map +1 -0
  34. package/dist/cjs/Dialogs/index.js +4 -2
  35. package/dist/cjs/Dialogs/index.js.map +1 -1
  36. package/dist/cjs/ObjectContentEditor/ObjectContentEditor.js +156 -0
  37. package/dist/cjs/ObjectContentEditor/ObjectContentEditor.js.map +1 -0
  38. package/dist/cjs/ObjectContentEditor/index.js +8 -0
  39. package/dist/cjs/ObjectContentEditor/index.js.map +1 -0
  40. package/dist/cjs/ObjectNavigationalBar/ObjectNavigationalBar.js +45 -0
  41. package/dist/cjs/ObjectNavigationalBar/ObjectNavigationalBar.js.map +1 -0
  42. package/dist/cjs/ObjectNavigationalBar/index.js +8 -0
  43. package/dist/cjs/ObjectNavigationalBar/index.js.map +1 -0
  44. package/dist/cjs/PivotViewer/components/PivotCanvas.js.map +1 -1
  45. package/dist/cjs/PivotViewer/components/PivotViewerMain.js.map +1 -1
  46. package/dist/cjs/PivotViewer/components/pivot/groups.js +15 -15
  47. package/dist/cjs/PivotViewer/components/pivot/groups.js.map +1 -1
  48. package/dist/cjs/PivotViewer/components/pivot/sprites.js +2 -2
  49. package/dist/cjs/PivotViewer/components/pivot/sprites.js.map +1 -1
  50. package/dist/cjs/PivotViewer/types.js.map +1 -1
  51. package/dist/cjs/SchemaEditor/NameCell.js +38 -0
  52. package/dist/cjs/SchemaEditor/NameCell.js.map +1 -0
  53. package/dist/cjs/SchemaEditor/SchemaEditor.js +352 -0
  54. package/dist/cjs/SchemaEditor/SchemaEditor.js.map +1 -0
  55. package/dist/cjs/SchemaEditor/SchemaEditor.module.css +11 -0
  56. package/dist/cjs/SchemaEditor/TypeCell.js +102 -0
  57. package/dist/cjs/SchemaEditor/TypeCell.js.map +1 -0
  58. package/dist/cjs/SchemaEditor/index.js +10 -0
  59. package/dist/cjs/SchemaEditor/index.js.map +1 -0
  60. package/dist/cjs/TimeMachine/TimeMachine.js +0 -3
  61. package/dist/cjs/TimeMachine/TimeMachine.js.map +1 -1
  62. package/dist/cjs/index.js +20 -12
  63. package/dist/cjs/index.js.map +1 -1
  64. package/dist/cjs/package.json +3 -0
  65. package/dist/cjs/types/TypeFormat.js +20 -0
  66. package/dist/cjs/types/TypeFormat.js.map +1 -0
  67. package/dist/esm/CommandDialog/CommandDialog.d.ts +1 -1
  68. package/dist/esm/CommandDialog/CommandDialog.d.ts.map +1 -1
  69. package/dist/esm/CommandDialog/CommandDialog.js +15 -26
  70. package/dist/esm/CommandDialog/CommandDialog.js.map +1 -1
  71. package/dist/esm/CommandDialog/CommandDialog.stories.d.ts +1 -0
  72. package/dist/esm/CommandDialog/CommandDialog.stories.d.ts.map +1 -1
  73. package/dist/esm/CommandDialog/CommandDialog.stories.js +57 -3
  74. package/dist/esm/CommandDialog/CommandDialog.stories.js.map +1 -1
  75. package/dist/esm/CommandForm/fields/CheckboxField.d.ts +3 -2
  76. package/dist/esm/CommandForm/fields/CheckboxField.d.ts.map +1 -1
  77. package/dist/esm/CommandForm/fields/CheckboxField.js +1 -1
  78. package/dist/esm/CommandForm/fields/CheckboxField.js.map +1 -1
  79. package/dist/esm/CommandForm/fields/DropdownField.d.ts +7 -6
  80. package/dist/esm/CommandForm/fields/DropdownField.d.ts.map +1 -1
  81. package/dist/esm/CommandForm/fields/DropdownField.js +6 -6
  82. package/dist/esm/CommandForm/fields/DropdownField.js.map +1 -1
  83. package/dist/esm/CommandForm/fields/Fields.stories.d.ts +13 -0
  84. package/dist/esm/CommandForm/fields/Fields.stories.d.ts.map +1 -0
  85. package/dist/esm/CommandForm/fields/Fields.stories.js +137 -0
  86. package/dist/esm/CommandForm/fields/Fields.stories.js.map +1 -0
  87. package/dist/esm/CommandForm/fields/InputTextField.d.ts +3 -2
  88. package/dist/esm/CommandForm/fields/InputTextField.d.ts.map +1 -1
  89. package/dist/esm/CommandForm/fields/InputTextField.js +1 -1
  90. package/dist/esm/CommandForm/fields/InputTextField.js.map +1 -1
  91. package/dist/esm/CommandForm/fields/NumberField.d.ts +3 -2
  92. package/dist/esm/CommandForm/fields/NumberField.d.ts.map +1 -1
  93. package/dist/esm/CommandForm/fields/NumberField.js +1 -1
  94. package/dist/esm/CommandForm/fields/NumberField.js.map +1 -1
  95. package/dist/esm/CommandForm/fields/SliderField.d.ts +5 -4
  96. package/dist/esm/CommandForm/fields/SliderField.d.ts.map +1 -1
  97. package/dist/esm/CommandForm/fields/SliderField.js +5 -9
  98. package/dist/esm/CommandForm/fields/SliderField.js.map +1 -1
  99. package/dist/esm/CommandForm/fields/TextAreaField.d.ts +3 -2
  100. package/dist/esm/CommandForm/fields/TextAreaField.d.ts.map +1 -1
  101. package/dist/esm/CommandForm/fields/TextAreaField.js +1 -1
  102. package/dist/esm/CommandForm/fields/TextAreaField.js.map +1 -1
  103. package/dist/esm/CommandForm/fields/index.d.ts +2 -2
  104. package/dist/esm/CommandForm/fields/index.d.ts.map +1 -1
  105. package/dist/esm/CommandForm/fields/index.js +2 -2
  106. package/dist/esm/CommandForm/fields/index.js.map +1 -1
  107. package/dist/esm/CommandForm/index.d.ts +1 -5
  108. package/dist/esm/CommandForm/index.d.ts.map +1 -1
  109. package/dist/esm/CommandForm/index.js +3 -7
  110. package/dist/esm/CommandForm/index.js.map +1 -1
  111. package/dist/esm/Common/ErrorBoundary.d.ts +1 -1
  112. package/dist/esm/Common/ErrorBoundary.js +7 -4
  113. package/dist/esm/Common/ErrorBoundary.js.map +1 -1
  114. package/dist/esm/Common/ErrorBoundary.stories.d.ts +7 -7
  115. package/dist/esm/Common/ErrorBoundary.stories.d.ts.map +1 -1
  116. package/dist/esm/Common/ErrorBoundary.stories.js +21 -5
  117. package/dist/esm/Common/ErrorBoundary.stories.js.map +1 -1
  118. package/dist/esm/Common/FormElement.js +7 -4
  119. package/dist/esm/Common/FormElement.js.map +1 -1
  120. package/dist/esm/Common/FormElement.stories.d.ts +8 -7
  121. package/dist/esm/Common/FormElement.stories.d.ts.map +1 -1
  122. package/dist/esm/Common/FormElement.stories.js +25 -4
  123. package/dist/esm/Common/FormElement.stories.js.map +1 -1
  124. package/dist/esm/Common/Page.stories.d.ts +7 -7
  125. package/dist/esm/Common/Page.stories.d.ts.map +1 -1
  126. package/dist/esm/Common/Page.stories.js +20 -5
  127. package/dist/esm/Common/Page.stories.js.map +1 -1
  128. package/dist/esm/Common/index.js +4 -4
  129. package/dist/esm/Common/index.js.map +1 -1
  130. package/dist/esm/DataPage/DataPage.stories.d.ts +7 -7
  131. package/dist/esm/DataPage/DataPage.stories.d.ts.map +1 -1
  132. package/dist/esm/DataPage/DataPage.stories.js +33 -5
  133. package/dist/esm/DataPage/DataPage.stories.js.map +1 -1
  134. package/dist/esm/DataTables/DataTableForObservableQuery.d.ts +1 -0
  135. package/dist/esm/DataTables/DataTableForObservableQuery.d.ts.map +1 -1
  136. package/dist/esm/DataTables/DataTableForObservableQuery.js +55 -3
  137. package/dist/esm/DataTables/DataTableForObservableQuery.js.map +1 -1
  138. package/dist/esm/DataTables/DataTableForObservableQuery.stories.d.ts +7 -7
  139. package/dist/esm/DataTables/DataTableForObservableQuery.stories.d.ts.map +1 -1
  140. package/dist/esm/DataTables/DataTableForObservableQuery.stories.js +55 -5
  141. package/dist/esm/DataTables/DataTableForObservableQuery.stories.js.map +1 -1
  142. package/dist/esm/DataTables/DataTableForQuery.d.ts +1 -0
  143. package/dist/esm/DataTables/DataTableForQuery.d.ts.map +1 -1
  144. package/dist/esm/DataTables/DataTableForQuery.js +21 -3
  145. package/dist/esm/DataTables/DataTableForQuery.js.map +1 -1
  146. package/dist/esm/DataTables/DataTableForQuery.stories.d.ts +7 -7
  147. package/dist/esm/DataTables/DataTableForQuery.stories.d.ts.map +1 -1
  148. package/dist/esm/DataTables/DataTableForQuery.stories.js +31 -5
  149. package/dist/esm/DataTables/DataTableForQuery.stories.js.map +1 -1
  150. package/dist/esm/Dialogs/BusyIndicatorDialog.d.ts.map +1 -1
  151. package/dist/esm/Dialogs/BusyIndicatorDialog.js +3 -4
  152. package/dist/esm/Dialogs/BusyIndicatorDialog.js.map +1 -1
  153. package/dist/esm/Dialogs/ConfirmationDialog.d.ts.map +1 -1
  154. package/dist/esm/Dialogs/ConfirmationDialog.js +6 -23
  155. package/dist/esm/Dialogs/ConfirmationDialog.js.map +1 -1
  156. package/dist/esm/Dialogs/Dialog.d.ts +23 -0
  157. package/dist/esm/Dialogs/Dialog.d.ts.map +1 -0
  158. package/dist/esm/Dialogs/Dialog.js +64 -0
  159. package/dist/esm/Dialogs/Dialog.js.map +1 -0
  160. package/dist/esm/Dialogs/index.d.ts +2 -1
  161. package/dist/esm/Dialogs/index.d.ts.map +1 -1
  162. package/dist/esm/Dialogs/index.js +2 -1
  163. package/dist/esm/Dialogs/index.js.map +1 -1
  164. package/dist/esm/ObjectContentEditor/ObjectContentEditor.d.ts +8 -0
  165. package/dist/esm/ObjectContentEditor/ObjectContentEditor.d.ts.map +1 -0
  166. package/dist/esm/ObjectContentEditor/ObjectContentEditor.js +135 -0
  167. package/dist/esm/ObjectContentEditor/ObjectContentEditor.js.map +1 -0
  168. package/dist/esm/ObjectContentEditor/ObjectContentEditor.stories.d.ts +10 -0
  169. package/dist/esm/ObjectContentEditor/ObjectContentEditor.stories.d.ts.map +1 -0
  170. package/dist/esm/ObjectContentEditor/ObjectContentEditor.stories.js +144 -0
  171. package/dist/esm/ObjectContentEditor/ObjectContentEditor.stories.js.map +1 -0
  172. package/dist/esm/ObjectContentEditor/index.d.ts +2 -0
  173. package/dist/esm/ObjectContentEditor/index.d.ts.map +1 -0
  174. package/dist/esm/ObjectContentEditor/index.js +2 -0
  175. package/dist/esm/ObjectContentEditor/index.js.map +1 -0
  176. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.d.ts +6 -0
  177. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.d.ts.map +1 -0
  178. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.js +24 -0
  179. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.js.map +1 -0
  180. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.stories.d.ts +10 -0
  181. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.stories.d.ts.map +1 -0
  182. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.stories.js +46 -0
  183. package/dist/esm/ObjectNavigationalBar/ObjectNavigationalBar.stories.js.map +1 -0
  184. package/dist/esm/ObjectNavigationalBar/index.d.ts +2 -0
  185. package/dist/esm/ObjectNavigationalBar/index.d.ts.map +1 -0
  186. package/dist/esm/ObjectNavigationalBar/index.js +2 -0
  187. package/dist/esm/ObjectNavigationalBar/index.js.map +1 -0
  188. package/dist/esm/PivotViewer/components/PivotCanvas.d.ts +2 -2
  189. package/dist/esm/PivotViewer/components/PivotCanvas.d.ts.map +1 -1
  190. package/dist/esm/PivotViewer/components/PivotCanvas.js.map +1 -1
  191. package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts +2 -2
  192. package/dist/esm/PivotViewer/components/PivotViewerMain.d.ts.map +1 -1
  193. package/dist/esm/PivotViewer/components/PivotViewerMain.js.map +1 -1
  194. package/dist/esm/PivotViewer/components/pivot/groups.d.ts.map +1 -1
  195. package/dist/esm/PivotViewer/components/pivot/groups.js +2 -2
  196. package/dist/esm/PivotViewer/components/pivot/groups.js.map +1 -1
  197. package/dist/esm/PivotViewer/components/pivot/sprites.d.ts +4 -4
  198. package/dist/esm/PivotViewer/components/pivot/sprites.d.ts.map +1 -1
  199. package/dist/esm/PivotViewer/components/pivot/sprites.js +2 -2
  200. package/dist/esm/PivotViewer/components/pivot/sprites.js.map +1 -1
  201. package/dist/esm/PivotViewer/types.d.ts +2 -2
  202. package/dist/esm/PivotViewer/types.d.ts.map +1 -1
  203. package/dist/esm/PivotViewer/types.js.map +1 -1
  204. package/dist/esm/SchemaEditor/NameCell.d.ts +9 -0
  205. package/dist/esm/SchemaEditor/NameCell.d.ts.map +1 -0
  206. package/dist/esm/SchemaEditor/NameCell.js +17 -0
  207. package/dist/esm/SchemaEditor/NameCell.js.map +1 -0
  208. package/dist/esm/SchemaEditor/SchemaEditor.d.ts +17 -0
  209. package/dist/esm/SchemaEditor/SchemaEditor.d.ts.map +1 -0
  210. package/dist/esm/SchemaEditor/SchemaEditor.js +331 -0
  211. package/dist/esm/SchemaEditor/SchemaEditor.js.map +1 -0
  212. package/dist/esm/SchemaEditor/SchemaEditor.module.css +11 -0
  213. package/dist/esm/SchemaEditor/SchemaEditor.stories.d.ts +12 -0
  214. package/dist/esm/SchemaEditor/SchemaEditor.stories.d.ts.map +1 -0
  215. package/dist/esm/SchemaEditor/SchemaEditor.stories.js +158 -0
  216. package/dist/esm/SchemaEditor/SchemaEditor.stories.js.map +1 -0
  217. package/dist/esm/SchemaEditor/TypeCell.d.ts +14 -0
  218. package/dist/esm/SchemaEditor/TypeCell.d.ts.map +1 -0
  219. package/dist/esm/SchemaEditor/TypeCell.js +81 -0
  220. package/dist/esm/SchemaEditor/TypeCell.js.map +1 -0
  221. package/dist/esm/SchemaEditor/index.d.ts +4 -0
  222. package/dist/esm/SchemaEditor/index.d.ts.map +1 -0
  223. package/dist/esm/SchemaEditor/index.js +3 -0
  224. package/dist/esm/SchemaEditor/index.js.map +1 -0
  225. package/dist/esm/TimeMachine/EventsView.stories.d.ts +8 -7
  226. package/dist/esm/TimeMachine/EventsView.stories.d.ts.map +1 -1
  227. package/dist/esm/TimeMachine/EventsView.stories.js +80 -4
  228. package/dist/esm/TimeMachine/EventsView.stories.js.map +1 -1
  229. package/dist/esm/TimeMachine/Properties.stories.d.ts +9 -7
  230. package/dist/esm/TimeMachine/Properties.stories.d.ts.map +1 -1
  231. package/dist/esm/TimeMachine/Properties.stories.js +49 -4
  232. package/dist/esm/TimeMachine/Properties.stories.js.map +1 -1
  233. package/dist/esm/TimeMachine/ReadModelView.stories.d.ts +7 -7
  234. package/dist/esm/TimeMachine/ReadModelView.stories.d.ts.map +1 -1
  235. package/dist/esm/TimeMachine/ReadModelView.stories.js +79 -5
  236. package/dist/esm/TimeMachine/ReadModelView.stories.js.map +1 -1
  237. package/dist/esm/TimeMachine/TimeMachine.js +1 -1
  238. package/dist/esm/TimeMachine/TimeMachine.stories.d.ts +8 -7
  239. package/dist/esm/TimeMachine/TimeMachine.stories.d.ts.map +1 -1
  240. package/dist/esm/TimeMachine/TimeMachine.stories.js +113 -4
  241. package/dist/esm/TimeMachine/TimeMachine.stories.js.map +1 -1
  242. package/dist/esm/index.d.ts +7 -3
  243. package/dist/esm/index.d.ts.map +1 -1
  244. package/dist/esm/index.js +20 -12
  245. package/dist/esm/index.js.map +1 -1
  246. package/dist/esm/package.json +3 -0
  247. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  248. package/dist/esm/types/JsonSchema.d.ts +32 -0
  249. package/dist/esm/types/JsonSchema.d.ts.map +1 -0
  250. package/dist/esm/types/JsonSchema.js +2 -0
  251. package/dist/esm/types/JsonSchema.js.map +1 -0
  252. package/dist/esm/types/TypeFormat.d.ts +6 -0
  253. package/dist/esm/types/TypeFormat.d.ts.map +1 -0
  254. package/dist/esm/types/TypeFormat.js +18 -0
  255. package/dist/esm/types/TypeFormat.js.map +1 -0
  256. package/package.json +41 -78
  257. package/dist/cjs/CommandForm/CommandForm.js +0 -183
  258. package/dist/cjs/CommandForm/CommandForm.js.map +0 -1
  259. package/dist/cjs/CommandForm/CommandFormField.js +0 -11
  260. package/dist/cjs/CommandForm/CommandFormField.js.map +0 -1
  261. package/dist/cjs/CommandForm/CommandFormFields.js +0 -73
  262. package/dist/cjs/CommandForm/CommandFormFields.js.map +0 -1
  263. package/dist/cjs/CommandForm/ValidationMessage.js +0 -24
  264. package/dist/cjs/CommandForm/ValidationMessage.js.map +0 -1
  265. package/dist/cjs/CommandForm/asCommandFormField.js +0 -47
  266. package/dist/cjs/CommandForm/asCommandFormField.js.map +0 -1
  267. package/dist/esm/CommandForm/CommandForm.d.ts +0 -49
  268. package/dist/esm/CommandForm/CommandForm.d.ts.map +0 -1
  269. package/dist/esm/CommandForm/CommandForm.js +0 -178
  270. package/dist/esm/CommandForm/CommandForm.js.map +0 -1
  271. package/dist/esm/CommandForm/CommandForm.stories.d.ts +0 -8
  272. package/dist/esm/CommandForm/CommandForm.stories.d.ts.map +0 -1
  273. package/dist/esm/CommandForm/CommandForm.stories.js +0 -45
  274. package/dist/esm/CommandForm/CommandForm.stories.js.map +0 -1
  275. package/dist/esm/CommandForm/CommandFormField.d.ts +0 -18
  276. package/dist/esm/CommandForm/CommandFormField.d.ts.map +0 -1
  277. package/dist/esm/CommandForm/CommandFormField.js +0 -9
  278. package/dist/esm/CommandForm/CommandFormField.js.map +0 -1
  279. package/dist/esm/CommandForm/CommandFormFields.d.ts +0 -11
  280. package/dist/esm/CommandForm/CommandFormFields.d.ts.map +0 -1
  281. package/dist/esm/CommandForm/CommandFormFields.js +0 -71
  282. package/dist/esm/CommandForm/CommandFormFields.js.map +0 -1
  283. package/dist/esm/CommandForm/UserRegistrationCommand.d.ts +0 -63
  284. package/dist/esm/CommandForm/UserRegistrationCommand.d.ts.map +0 -1
  285. package/dist/esm/CommandForm/UserRegistrationCommand.js +0 -143
  286. package/dist/esm/CommandForm/UserRegistrationCommand.js.map +0 -1
  287. package/dist/esm/CommandForm/ValidationMessage.d.ts +0 -8
  288. package/dist/esm/CommandForm/ValidationMessage.d.ts.map +0 -1
  289. package/dist/esm/CommandForm/ValidationMessage.js +0 -22
  290. package/dist/esm/CommandForm/ValidationMessage.js.map +0 -1
  291. package/dist/esm/CommandForm/asCommandFormField.d.ts +0 -32
  292. package/dist/esm/CommandForm/asCommandFormField.d.ts.map +0 -1
  293. package/dist/esm/CommandForm/asCommandFormField.js +0 -45
  294. package/dist/esm/CommandForm/asCommandFormField.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sprites.d.ts","sourceRoot":"","sources":["../../../../../PivotViewer/components/pivot/sprites.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI1D,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,MAAM,EACnD,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,KAAK,EAAE,EACd,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,EACtE,UAAU,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,EACnC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,EACpF,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GACzD,UAAU,CAoLZ;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,QAS/C;AAED,wBAAgB,eAAe,SAa9B;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,MAAM,EACpD,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,KAAK,EACX,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,QA+FrF"}
1
+ {"version":3,"file":"sprites.d.ts","sourceRoot":"","sources":["../../../../../PivotViewer/components/pivot/sprites.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI1D,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,MAAM,EACnD,EAAE,EAAE,MAAM,GAAG,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,KAAK,EAAE,EACd,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,EACtE,UAAU,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,EACnC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACtF,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GACzD,UAAU,CAoLZ;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,QAS/C;AAED,wBAAgB,eAAe,SAa9B;AAGD,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,MAAM,EACpD,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,KAAK,EACX,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,QA+FvF"}
@@ -159,8 +159,8 @@ function updateCardContent(sprite, item, selectedId, cardWidth, cardHeight, card
159
159
  const colors = cardColors;
160
160
  const cardData = cardRenderer(item);
161
161
  const titleDisplay = cardData.title;
162
- const labelsText = cardData.labels.join('\n');
163
- const valuesText = cardData.values.join('\n');
162
+ const labelsText = (cardData.labels || []).join('\n');
163
+ const valuesText = (cardData.values || []).join('\n');
164
164
  const colorsChanged = sprite.lastCardColors !== colors;
165
165
  if (!sprite.titleText || sprite.titleText.destroyed)
166
166
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"sprites.js","sources":["../../../../../PivotViewer/components/pivot/sprites.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport * as PIXI from 'pixi.js';\nimport { CARD_GAP, CARD_PADDING, CARD_RADIUS } from './constants';\nimport type { CardSprite, CardColors } from './constants';\n\nconst spritePool: CardSprite[] = [];\n\nexport function createCardSprite<TItem extends object>(\n id: number | string,\n x: number,\n y: number,\n items: TItem[],\n onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void,\n onPanStart: (e: MouseEvent) => void,\n cardWidth: number,\n cardHeight: number,\n cardColors: CardColors,\n cardRenderer: (item: TItem) => { title: string; labels: string[]; values: string[] },\n resolveId: (item: TItem, index: number) => string | number,\n): CardSprite {\n if (spritePool.length > 0) {\n const sprite = spritePool.pop()!;\n if (sprite.container) {\n sprite.container.visible = true;\n sprite.container.alpha = 1;\n sprite.container.position.set(x, y);\n }\n sprite.itemId = id;\n sprite.targetX = x;\n sprite.targetY = y;\n sprite.currentX = x;\n sprite.currentY = y;\n\n // Reset animation state\n delete sprite.animationStartTime;\n delete sprite.animationDelay;\n delete sprite.startX;\n delete sprite.startY;\n\n // Reset cache\n sprite.lastSelectedId = null;\n sprite.lastCardColors = undefined;\n sprite.lastTitle = undefined;\n sprite.lastLabels = undefined;\n sprite.lastValues = undefined;\n\n // Recreate graphics if it was destroyed\n if (!sprite.graphics || sprite.graphics.destroyed) {\n sprite.graphics = new PIXI.Graphics();\n if (sprite.container) {\n sprite.container.addChildAt(sprite.graphics, 0);\n }\n }\n\n // Recreate text objects if they were destroyed\n const offsetX = CARD_GAP / 2;\n const offsetY = CARD_GAP / 2;\n \n if (!sprite.titleText || sprite.titleText.destroyed) {\n sprite.titleText = new PIXI.Text('', {\n fontSize: 13,\n fill: cardColors.text as string | number,\n fontWeight: '600',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n sprite.titleText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING);\n if (sprite.container) {\n sprite.container.addChild(sprite.titleText);\n }\n }\n\n if (!sprite.labelsText || sprite.labelsText.destroyed) {\n sprite.labelsText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.textSecondary as string | number,\n fontWeight: '400',\n lineHeight: 18,\n } as PIXI.TextStyle);\n sprite.labelsText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING + 40);\n if (sprite.container) {\n sprite.container.addChild(sprite.labelsText);\n }\n }\n\n if (!sprite.valuesText || sprite.valuesText.destroyed) {\n sprite.valuesText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.text as string | number,\n fontWeight: '500',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n sprite.valuesText.position.set(offsetX + CARD_PADDING + 65, offsetY + CARD_PADDING + 40);\n if (sprite.container) {\n sprite.container.addChild(sprite.valuesText);\n }\n }\n\n // Update event context\n if (sprite.container) {\n (sprite.container as unknown as { _eventContext: { items: TItem[]; onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void; id: number | string; cardRenderer: (item: TItem) => { title: string; labels: string[]; values: string[] }; resolveId: (item: TItem, index: number) => string | number } })._eventContext = { items, onCardClick, id, cardRenderer, resolveId };\n }\n\n return sprite;\n }\n\n const container = new PIXI.Container();\n container.eventMode = 'static';\n container.cursor = 'pointer';\n container.position.set(x, y);\n\n // Define hit area to match the visible card size (excluding gaps)\n // This ensures the entire card is clickable and avoids issues with text blocking hits\n container.hitArea = new PIXI.Rectangle(\n CARD_GAP / 2,\n CARD_GAP / 2,\n cardWidth - CARD_GAP,\n cardHeight - CARD_GAP\n );\n\n // Container configured for pointer interactions; hitArea matches visible card.\n\n // Store context for event handlers\n (container as unknown as { _eventContext: { items: TItem[]; onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void; id: number | string; cardRenderer: (item: TItem) => { title: string; labels: string[]; values: string[] }; resolveId: (item: TItem, index: number) => string | number } })._eventContext = { items, onCardClick, id, cardRenderer, resolveId };\n\n const graphics = new PIXI.Graphics();\n\n const actualWidth = cardWidth - CARD_GAP;\n const actualHeight = cardHeight - CARD_GAP;\n const offsetX = CARD_GAP / 2;\n const offsetY = CARD_GAP / 2;\n\n const gradient = new PIXI.FillGradient(0, offsetY, 0, offsetY + actualHeight);\n gradient.addColorStop(0, cardColors.mid);\n gradient.addColorStop(1, cardColors.base);\n\n graphics.roundRect(offsetX, offsetY, actualWidth, actualHeight, CARD_RADIUS);\n graphics.fill(gradient);\n\n container.addChild(graphics);\n\n const titleText = new PIXI.Text('', {\n fontSize: 13,\n fill: cardColors.text as string | number,\n fontWeight: '600',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n titleText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING);\n container.addChild(titleText);\n\n const labelsText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.textSecondary as string | number,\n fontWeight: '400',\n lineHeight: 18,\n } as PIXI.TextStyle);\n labelsText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING + 40);\n container.addChild(labelsText);\n\n const valuesText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.text as string | number,\n fontWeight: '500',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n valuesText.position.set(offsetX + CARD_PADDING + 65, offsetY + CARD_PADDING + 40);\n container.addChild(valuesText);\n\n container.on('click', (e: PIXI.FederatedPointerEvent) => {\n e.stopPropagation();\n const ctx = (container as unknown as { _eventContext: { items: TItem[]; onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void; id: number | string } })._eventContext;\n const itemsArray = ctx.items;\n const numericId = typeof ctx.id === 'number' ? ctx.id : Number(ctx.id);\n const item = itemsArray[numericId];\n if (item) {\n ctx.onCardClick(item, e.nativeEvent as MouseEvent, ctx.id);\n }\n });\n\n container.on('pointerdown', (e: PIXI.FederatedPointerEvent) => {\n e.stopPropagation();\n // onPanStart(e.nativeEvent as MouseEvent);\n });\n\n return {\n container,\n graphics,\n titleText,\n labelsText,\n valuesText,\n itemId: id,\n targetX: x,\n targetY: y,\n currentX: x,\n currentY: y,\n };\n}\n\nexport function destroySprite(sprite: CardSprite) {\n if (sprite.container && sprite.container.parent) {\n sprite.container.parent.removeChild(sprite.container);\n }\n // Reset visibility to ensure it doesn't ghost if something goes wrong\n if (sprite.container) {\n sprite.container.visible = false;\n }\n spritePool.push(sprite);\n}\n\nexport function clearSpritePool() {\n for (const sprite of spritePool) {\n try {\n sprite.graphics?.destroy();\n sprite.titleText?.destroy();\n sprite.labelsText?.destroy();\n sprite.valuesText?.destroy();\n sprite.container?.destroy();\n } catch (e) {\n void e;\n }\n }\n spritePool.length = 0;\n}\n\n// Updated: Text objects now recreated when recycling pooled sprites\nexport function updateCardContent<TItem extends object>(\n sprite: CardSprite,\n item: TItem,\n selectedId: string | number | null,\n cardWidth: number,\n cardHeight: number,\n cardColors: CardColors,\n cardRenderer: (item: TItem) => { title: string; labels: string[]; values: string[] },\n) {\n if (!item) return;\n\n // Selection rendering depends on sprite.itemId matching selectedId\n\n const colors = cardColors;\n const cardData = cardRenderer(item);\n const titleDisplay = cardData.title;\n const labelsText = cardData.labels.join('\\n');\n const valuesText = cardData.values.join('\\n');\n const colorsChanged = sprite.lastCardColors !== colors;\n\n // Ensure text objects exist before using them\n if (!sprite.titleText || sprite.titleText.destroyed) return;\n if (!sprite.labelsText || sprite.labelsText.destroyed) return;\n if (!sprite.valuesText || sprite.valuesText.destroyed) return;\n\n if (sprite.lastTitle !== titleDisplay) {\n sprite.titleText.text = titleDisplay;\n sprite.lastTitle = titleDisplay;\n }\n\n if (sprite.lastLabels !== labelsText) {\n sprite.labelsText.text = labelsText;\n sprite.lastLabels = labelsText;\n }\n\n if (colorsChanged && sprite.labelsText.style) {\n (sprite.labelsText.style as unknown as { fill: string | number }).fill = colors.textSecondary;\n }\n\n if (sprite.lastValues !== valuesText) {\n sprite.valuesText.text = valuesText;\n sprite.lastValues = valuesText;\n }\n\n if (colorsChanged && sprite.valuesText.style) {\n (sprite.valuesText.style as unknown as { fill: string | number }).fill = colors.text;\n }\n\n sprite.titleText.visible = true;\n sprite.labelsText.visible = true;\n sprite.valuesText.visible = true;\n\n const isSelected = sprite.itemId === selectedId;\n\n // Only redraw graphics if selection state or colors changed\n if (sprite.lastSelectedId === selectedId && !colorsChanged && sprite.graphics) {\n return;\n }\n\n sprite.lastSelectedId = selectedId;\n sprite.lastCardColors = cardColors;\n\n // Ensure graphics exists before attempting to use it\n if (!sprite.graphics || sprite.graphics.destroyed) {\n sprite.graphics = new PIXI.Graphics();\n if (sprite.container) {\n sprite.container.addChildAt(sprite.graphics, 0);\n }\n } else {\n sprite.graphics.clear();\n }\n\n const actualWidth = cardWidth - CARD_GAP;\n const actualHeight = cardHeight - CARD_GAP;\n const offsetX = CARD_GAP / 2;\n const offsetY = CARD_GAP / 2;\n\n const gradient = new PIXI.FillGradient(0, offsetY, 0, offsetY + actualHeight);\n if (isSelected) {\n gradient.addColorStop(0, colors.gradient);\n gradient.addColorStop(1, colors.mid);\n } else {\n gradient.addColorStop(0, colors.mid);\n gradient.addColorStop(1, colors.base);\n }\n\n sprite.graphics.roundRect(offsetX, offsetY, actualWidth, actualHeight, CARD_RADIUS);\n \n // Ensure graphics is still valid before filling\n if (sprite.graphics && !sprite.graphics.destroyed) {\n sprite.graphics.fill(gradient);\n }\n\n if (isSelected) {\n if (sprite.graphics && !sprite.graphics.destroyed) {\n sprite.graphics.stroke({ width: 2, color: colors.border });\n }\n } else {\n if (sprite.graphics && !sprite.graphics.destroyed) {\n sprite.graphics.stroke({ width: 1, color: colors.border, alpha: 0.35 });\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sprites.js","sources":["../../../../../PivotViewer/components/pivot/sprites.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport * as PIXI from 'pixi.js';\nimport { CARD_GAP, CARD_PADDING, CARD_RADIUS } from './constants';\nimport type { CardSprite, CardColors } from './constants';\n\nconst spritePool: CardSprite[] = [];\n\nexport function createCardSprite<TItem extends object>(\n id: number | string,\n x: number,\n y: number,\n items: TItem[],\n onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void,\n onPanStart: (e: MouseEvent) => void,\n cardWidth: number,\n cardHeight: number,\n cardColors: CardColors,\n cardRenderer: (item: TItem) => { title: string; labels?: string[]; values?: string[] },\n resolveId: (item: TItem, index: number) => string | number,\n): CardSprite {\n if (spritePool.length > 0) {\n const sprite = spritePool.pop()!;\n if (sprite.container) {\n sprite.container.visible = true;\n sprite.container.alpha = 1;\n sprite.container.position.set(x, y);\n }\n sprite.itemId = id;\n sprite.targetX = x;\n sprite.targetY = y;\n sprite.currentX = x;\n sprite.currentY = y;\n\n // Reset animation state\n delete sprite.animationStartTime;\n delete sprite.animationDelay;\n delete sprite.startX;\n delete sprite.startY;\n\n // Reset cache\n sprite.lastSelectedId = null;\n sprite.lastCardColors = undefined;\n sprite.lastTitle = undefined;\n sprite.lastLabels = undefined;\n sprite.lastValues = undefined;\n\n // Recreate graphics if it was destroyed\n if (!sprite.graphics || sprite.graphics.destroyed) {\n sprite.graphics = new PIXI.Graphics();\n if (sprite.container) {\n sprite.container.addChildAt(sprite.graphics, 0);\n }\n }\n\n // Recreate text objects if they were destroyed\n const offsetX = CARD_GAP / 2;\n const offsetY = CARD_GAP / 2;\n \n if (!sprite.titleText || sprite.titleText.destroyed) {\n sprite.titleText = new PIXI.Text('', {\n fontSize: 13,\n fill: cardColors.text as string | number,\n fontWeight: '600',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n sprite.titleText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING);\n if (sprite.container) {\n sprite.container.addChild(sprite.titleText);\n }\n }\n\n if (!sprite.labelsText || sprite.labelsText.destroyed) {\n sprite.labelsText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.textSecondary as string | number,\n fontWeight: '400',\n lineHeight: 18,\n } as PIXI.TextStyle);\n sprite.labelsText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING + 40);\n if (sprite.container) {\n sprite.container.addChild(sprite.labelsText);\n }\n }\n\n if (!sprite.valuesText || sprite.valuesText.destroyed) {\n sprite.valuesText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.text as string | number,\n fontWeight: '500',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n sprite.valuesText.position.set(offsetX + CARD_PADDING + 65, offsetY + CARD_PADDING + 40);\n if (sprite.container) {\n sprite.container.addChild(sprite.valuesText);\n }\n }\n\n // Update event context\n if (sprite.container) {\n (sprite.container as unknown as { _eventContext: { items: TItem[]; onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void; id: number | string; cardRenderer: (item: TItem) => { title: string; labels?: string[]; values?: string[] }; resolveId: (item: TItem, index: number) => string | number } })._eventContext = { items, onCardClick, id, cardRenderer, resolveId };\n }\n\n return sprite;\n }\n\n const container = new PIXI.Container();\n container.eventMode = 'static';\n container.cursor = 'pointer';\n container.position.set(x, y);\n\n // Define hit area to match the visible card size (excluding gaps)\n // This ensures the entire card is clickable and avoids issues with text blocking hits\n container.hitArea = new PIXI.Rectangle(\n CARD_GAP / 2,\n CARD_GAP / 2,\n cardWidth - CARD_GAP,\n cardHeight - CARD_GAP\n );\n\n // Container configured for pointer interactions; hitArea matches visible card.\n\n // Store context for event handlers\n (container as unknown as { _eventContext: { items: TItem[]; onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void; id: number | string; cardRenderer: (item: TItem) => { title: string; labels?: string[]; values?: string[] }; resolveId: (item: TItem, index: number) => string | number } })._eventContext = { items, onCardClick, id, cardRenderer, resolveId };\n\n const graphics = new PIXI.Graphics();\n\n const actualWidth = cardWidth - CARD_GAP;\n const actualHeight = cardHeight - CARD_GAP;\n const offsetX = CARD_GAP / 2;\n const offsetY = CARD_GAP / 2;\n\n const gradient = new PIXI.FillGradient(0, offsetY, 0, offsetY + actualHeight);\n gradient.addColorStop(0, cardColors.mid);\n gradient.addColorStop(1, cardColors.base);\n\n graphics.roundRect(offsetX, offsetY, actualWidth, actualHeight, CARD_RADIUS);\n graphics.fill(gradient);\n\n container.addChild(graphics);\n\n const titleText = new PIXI.Text('', {\n fontSize: 13,\n fill: cardColors.text as string | number,\n fontWeight: '600',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n titleText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING);\n container.addChild(titleText);\n\n const labelsText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.textSecondary as string | number,\n fontWeight: '400',\n lineHeight: 18,\n } as PIXI.TextStyle);\n labelsText.position.set(offsetX + CARD_PADDING, offsetY + CARD_PADDING + 40);\n container.addChild(labelsText);\n\n const valuesText = new PIXI.Text('', {\n fontSize: 11,\n fill: cardColors.text as string | number,\n fontWeight: '500',\n lineHeight: 18,\n wordWrap: false,\n } as PIXI.TextStyle);\n valuesText.position.set(offsetX + CARD_PADDING + 65, offsetY + CARD_PADDING + 40);\n container.addChild(valuesText);\n\n container.on('click', (e: PIXI.FederatedPointerEvent) => {\n e.stopPropagation();\n const ctx = (container as unknown as { _eventContext: { items: TItem[]; onCardClick: (item: TItem, e: MouseEvent, id: number | string) => void; id: number | string } })._eventContext;\n const itemsArray = ctx.items;\n const numericId = typeof ctx.id === 'number' ? ctx.id : Number(ctx.id);\n const item = itemsArray[numericId];\n if (item) {\n ctx.onCardClick(item, e.nativeEvent as MouseEvent, ctx.id);\n }\n });\n\n container.on('pointerdown', (e: PIXI.FederatedPointerEvent) => {\n e.stopPropagation();\n // onPanStart(e.nativeEvent as MouseEvent);\n });\n\n return {\n container,\n graphics,\n titleText,\n labelsText,\n valuesText,\n itemId: id,\n targetX: x,\n targetY: y,\n currentX: x,\n currentY: y,\n };\n}\n\nexport function destroySprite(sprite: CardSprite) {\n if (sprite.container && sprite.container.parent) {\n sprite.container.parent.removeChild(sprite.container);\n }\n // Reset visibility to ensure it doesn't ghost if something goes wrong\n if (sprite.container) {\n sprite.container.visible = false;\n }\n spritePool.push(sprite);\n}\n\nexport function clearSpritePool() {\n for (const sprite of spritePool) {\n try {\n sprite.graphics?.destroy();\n sprite.titleText?.destroy();\n sprite.labelsText?.destroy();\n sprite.valuesText?.destroy();\n sprite.container?.destroy();\n } catch (e) {\n void e;\n }\n }\n spritePool.length = 0;\n}\n\n// Updated: Text objects now recreated when recycling pooled sprites\nexport function updateCardContent<TItem extends object>(\n sprite: CardSprite,\n item: TItem,\n selectedId: string | number | null,\n cardWidth: number,\n cardHeight: number,\n cardColors: CardColors,\n cardRenderer: (item: TItem) => { title: string; labels?: string[]; values?: string[] },\n) {\n if (!item) return;\n\n // Selection rendering depends on sprite.itemId matching selectedId\n\n const colors = cardColors;\n const cardData = cardRenderer(item);\n const titleDisplay = cardData.title;\n const labelsText = (cardData.labels || []).join('\\n');\n const valuesText = (cardData.values || []).join('\\n');\n const colorsChanged = sprite.lastCardColors !== colors;\n\n // Ensure text objects exist before using them\n if (!sprite.titleText || sprite.titleText.destroyed) return;\n if (!sprite.labelsText || sprite.labelsText.destroyed) return;\n if (!sprite.valuesText || sprite.valuesText.destroyed) return;\n\n if (sprite.lastTitle !== titleDisplay) {\n sprite.titleText.text = titleDisplay;\n sprite.lastTitle = titleDisplay;\n }\n\n if (sprite.lastLabels !== labelsText) {\n sprite.labelsText.text = labelsText;\n sprite.lastLabels = labelsText;\n }\n\n if (colorsChanged && sprite.labelsText.style) {\n (sprite.labelsText.style as unknown as { fill: string | number }).fill = colors.textSecondary;\n }\n\n if (sprite.lastValues !== valuesText) {\n sprite.valuesText.text = valuesText;\n sprite.lastValues = valuesText;\n }\n\n if (colorsChanged && sprite.valuesText.style) {\n (sprite.valuesText.style as unknown as { fill: string | number }).fill = colors.text;\n }\n\n sprite.titleText.visible = true;\n sprite.labelsText.visible = true;\n sprite.valuesText.visible = true;\n\n const isSelected = sprite.itemId === selectedId;\n\n // Only redraw graphics if selection state or colors changed\n if (sprite.lastSelectedId === selectedId && !colorsChanged && sprite.graphics) {\n return;\n }\n\n sprite.lastSelectedId = selectedId;\n sprite.lastCardColors = cardColors;\n\n // Ensure graphics exists before attempting to use it\n if (!sprite.graphics || sprite.graphics.destroyed) {\n sprite.graphics = new PIXI.Graphics();\n if (sprite.container) {\n sprite.container.addChildAt(sprite.graphics, 0);\n }\n } else {\n sprite.graphics.clear();\n }\n\n const actualWidth = cardWidth - CARD_GAP;\n const actualHeight = cardHeight - CARD_GAP;\n const offsetX = CARD_GAP / 2;\n const offsetY = CARD_GAP / 2;\n\n const gradient = new PIXI.FillGradient(0, offsetY, 0, offsetY + actualHeight);\n if (isSelected) {\n gradient.addColorStop(0, colors.gradient);\n gradient.addColorStop(1, colors.mid);\n } else {\n gradient.addColorStop(0, colors.mid);\n gradient.addColorStop(1, colors.base);\n }\n\n sprite.graphics.roundRect(offsetX, offsetY, actualWidth, actualHeight, CARD_RADIUS);\n \n // Ensure graphics is still valid before filling\n if (sprite.graphics && !sprite.graphics.destroyed) {\n sprite.graphics.fill(gradient);\n }\n\n if (isSelected) {\n if (sprite.graphics && !sprite.graphics.destroyed) {\n sprite.graphics.stroke({ width: 2, color: colors.border });\n }\n } else {\n if (sprite.graphics && !sprite.graphics.destroyed) {\n sprite.graphics.stroke({ width: 1, color: colors.border, alpha: 0.35 });\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -40,8 +40,8 @@ export interface PivotViewerProps<TItem extends object> {
40
40
  defaultDimensionKey?: string;
41
41
  cardRenderer: (item: TItem) => {
42
42
  title: string;
43
- labels: string[];
44
- values: string[];
43
+ labels?: string[];
44
+ values?: string[];
45
45
  };
46
46
  detailRenderer?: (item: TItem, onClose: () => void) => ReactNode;
47
47
  getItemId?: (item: TItem, index: number) => string | number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../PivotViewer/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../PivotViewer/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../PivotViewer/types.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactNode } from 'react';\n\nexport type PivotPrimitive = string | number | boolean | Date | null | undefined;\n\n/**\n * Type-safe property accessor for accessing properties, including nested ones\n */\nexport type PropertyAccessor<TItem> = (item: TItem) => unknown;\n\n/**\n * Extract property path from a property accessor function\n * Supports nested properties like item => item.address.city\n */\nexport function getPropertyPath<TItem>(accessor: PropertyAccessor<TItem>): string {\n const fnStr = accessor.toString();\n // Match patterns like: item => item.prop or item => item.prop.nested or (item) => item.prop\n const match = fnStr.match(/(?:=>|return)\\s*[a-zA-Z_$][a-zA-Z0-9_$]*\\.([a-zA-Z_$][a-zA-Z0-9_$.]*)/);\n return match ? match[1] : '';\n}\n\n/**\n * Get the value from an item using a property path string\n * Supports nested properties like \"address.city\"\n */\nexport function getValueByPath<TItem>(item: TItem, path: string): unknown {\n const parts = path.split('.');\n let value: unknown = item;\n for (const part of parts) {\n if (value === null || value === undefined) {\n return undefined;\n }\n value = value[part];\n }\n return value;\n}\n\nexport interface PivotGroup<TItem extends object> {\n key: string;\n label: string;\n value: PivotPrimitive;\n items: TItem[];\n count?: number;\n}\n\nexport interface PivotDimension<TItem extends object> {\n key: string;\n label: string;\n getValue: (item: TItem) => PivotPrimitive;\n formatValue?: (value: PivotPrimitive) => string;\n sort?: (a: PivotGroup<TItem>, b: PivotGroup<TItem>) => number;\n}\n\nexport interface PivotFilterOption {\n key: string;\n label: string;\n value: PivotPrimitive;\n count: number;\n}\n\nexport interface PivotFilter<TItem extends object> {\n key: string;\n label: string;\n getValue: (item: TItem) => PivotPrimitive;\n multi?: boolean;\n options?: PivotFilterOption[];\n sort?: (a: PivotFilterOption, b: PivotFilterOption) => number;\n /** For numeric filters, enables range picker with histogram */\n type?: 'string' | 'number' | 'date';\n /** Number of buckets for the histogram in range filters */\n buckets?: number;\n}\n\nexport interface PivotViewerProps<TItem extends object> {\n data: TItem[];\n dimensions: PivotDimension<TItem>[];\n filters?: PivotFilter<TItem>[];\n defaultDimensionKey?: string;\n /** Renderer for card content; returns structured text data for display */\n cardRenderer: (item: TItem) => { title: string; labels: string[]; values: string[] };\n /** Optional renderer for the detail content area; the drawer shell (header/close/layout) stays component-owned */\n detailRenderer?: (item: TItem, onClose: () => void) => ReactNode;\n getItemId?: (item: TItem, index: number) => string | number;\n searchFields?: PropertyAccessor<TItem>[];\n className?: string;\n emptyContent?: ReactNode;\n isLoading?: boolean;\n /**\n * Optional color overrides mapped to PrimeReact-like CSS variables.\n * If omitted, values are taken from the global theme (PrimeReact defaults).\n */\n colors?: Partial<{\n primaryColor: string;\n primaryColorText: string;\n primary500: string;\n surfaceGround: string;\n surfaceCard: string;\n surfaceSection: string;\n surfaceOverlay: string;\n surfaceBorder: string;\n textColor: string;\n textColorSecondary: string;\n highlightBg: string;\n maskbg: string;\n focusRing: string;\n }>;\n}\n\nexport type FilterState = Record<string, Set<string>>;\n\nexport type RangeFilterState = Record<string, [number, number] | null>;\n"],"names":[],"mappings":"AAgBM,SAAU,eAAe,CAAQ,QAAiC,EAAA;AACpE,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE;IAEjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,uEAAuE,CAAC;AAClG,IAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;AAChC;AAMM,SAAU,cAAc,CAAQ,IAAW,EAAE,IAAY,EAAA;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,IAAI,KAAK,GAAY,IAAI;AACzB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACtB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,SAAS;QACpB;AACA,QAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB;AACA,IAAA,OAAO,KAAK;AAChB;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../PivotViewer/types.ts"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport type { ReactNode } from 'react';\n\nexport type PivotPrimitive = string | number | boolean | Date | null | undefined;\n\n/**\n * Type-safe property accessor for accessing properties, including nested ones\n */\nexport type PropertyAccessor<TItem> = (item: TItem) => unknown;\n\n/**\n * Extract property path from a property accessor function\n * Supports nested properties like item => item.address.city\n */\nexport function getPropertyPath<TItem>(accessor: PropertyAccessor<TItem>): string {\n const fnStr = accessor.toString();\n // Match patterns like: item => item.prop or item => item.prop.nested or (item) => item.prop\n const match = fnStr.match(/(?:=>|return)\\s*[a-zA-Z_$][a-zA-Z0-9_$]*\\.([a-zA-Z_$][a-zA-Z0-9_$.]*)/);\n return match ? match[1] : '';\n}\n\n/**\n * Get the value from an item using a property path string\n * Supports nested properties like \"address.city\"\n */\nexport function getValueByPath<TItem>(item: TItem, path: string): unknown {\n const parts = path.split('.');\n let value: unknown = item;\n for (const part of parts) {\n if (value === null || value === undefined) {\n return undefined;\n }\n value = value[part];\n }\n return value;\n}\n\nexport interface PivotGroup<TItem extends object> {\n key: string;\n label: string;\n value: PivotPrimitive;\n items: TItem[];\n count?: number;\n}\n\nexport interface PivotDimension<TItem extends object> {\n key: string;\n label: string;\n getValue: (item: TItem) => PivotPrimitive;\n formatValue?: (value: PivotPrimitive) => string;\n sort?: (a: PivotGroup<TItem>, b: PivotGroup<TItem>) => number;\n}\n\nexport interface PivotFilterOption {\n key: string;\n label: string;\n value: PivotPrimitive;\n count: number;\n}\n\nexport interface PivotFilter<TItem extends object> {\n key: string;\n label: string;\n getValue: (item: TItem) => PivotPrimitive;\n multi?: boolean;\n options?: PivotFilterOption[];\n sort?: (a: PivotFilterOption, b: PivotFilterOption) => number;\n /** For numeric filters, enables range picker with histogram */\n type?: 'string' | 'number' | 'date';\n /** Number of buckets for the histogram in range filters */\n buckets?: number;\n}\n\nexport interface PivotViewerProps<TItem extends object> {\n data: TItem[];\n dimensions: PivotDimension<TItem>[];\n filters?: PivotFilter<TItem>[];\n defaultDimensionKey?: string;\n /** Renderer for card content; returns structured text data for display */\n cardRenderer: (item: TItem) => { title: string; labels?: string[]; values?: string[] };\n /** Optional renderer for the detail content area; the drawer shell (header/close/layout) stays component-owned */\n detailRenderer?: (item: TItem, onClose: () => void) => ReactNode;\n getItemId?: (item: TItem, index: number) => string | number;\n searchFields?: PropertyAccessor<TItem>[];\n className?: string;\n emptyContent?: ReactNode;\n isLoading?: boolean;\n /**\n * Optional color overrides mapped to PrimeReact-like CSS variables.\n * If omitted, values are taken from the global theme (PrimeReact defaults).\n */\n colors?: Partial<{\n primaryColor: string;\n primaryColorText: string;\n primary500: string;\n surfaceGround: string;\n surfaceCard: string;\n surfaceSection: string;\n surfaceOverlay: string;\n surfaceBorder: string;\n textColor: string;\n textColorSecondary: string;\n highlightBg: string;\n maskbg: string;\n focusRing: string;\n }>;\n}\n\nexport type FilterState = Record<string, Set<string>>;\n\nexport type RangeFilterState = Record<string, [number, number] | null>;\n"],"names":[],"mappings":"AAgBM,SAAU,eAAe,CAAQ,QAAiC,EAAA;AACpE,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE;IAEjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,uEAAuE,CAAC;AAClG,IAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;AAChC;AAMM,SAAU,cAAc,CAAQ,IAAW,EAAE,IAAY,EAAA;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7B,IAAI,KAAK,GAAY,IAAI;AACzB,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACtB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACvC,YAAA,OAAO,SAAS;QACpB;AACA,QAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB;AACA,IAAA,OAAO,KAAK;AAChB;;;;"}
@@ -0,0 +1,9 @@
1
+ import { JsonSchemaProperty } from '../types/JsonSchema';
2
+ export interface NameCellProps {
3
+ rowData: JsonSchemaProperty;
4
+ isEditMode: boolean;
5
+ onUpdate: (oldName: string, field: keyof JsonSchemaProperty, value: unknown) => void;
6
+ validationError?: string;
7
+ }
8
+ export declare const NameCell: ({ rowData, isEditMode, onUpdate, validationError }: NameCellProps) => import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=NameCell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NameCell.d.ts","sourceRoot":"","sources":["../../../SchemaEditor/NameCell.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACrF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,QAAQ,GAAI,oDAAoD,aAAa,4CAqCzF,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { InputText } from 'primereact/inputtext';
3
+ import * as faIcons from 'react-icons/fa6';
4
+
5
+ const NameCell = ({ rowData, isEditMode, onUpdate, validationError }) => {
6
+ if (!isEditMode) {
7
+ const isNavigable = rowData.type === 'object' || (rowData.type === 'array' && rowData.items?.type === 'object');
8
+ const navigationTooltipText = rowData.type === 'object'
9
+ ? 'Click to navigate to object properties'
10
+ : 'Click to navigate to item definition';
11
+ return (jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [jsx("span", { className: isNavigable ? 'schema-navigation-tooltip' : undefined, "data-pr-tooltip": isNavigable ? navigationTooltipText : undefined, "data-pr-position": "top", children: rowData.name }), rowData.description && (jsx(faIcons.FaCircleInfo, { className: "schema-description-tooltip", style: { color: 'var(--text-color-secondary)', fontSize: '0.875rem' }, "data-pr-tooltip": rowData.description, "data-pr-position": "right" }))] }));
12
+ }
13
+ return (jsx(InputText, { value: rowData.name || '', onChange: (e) => onUpdate(rowData.name || '', 'name', e.target.value), className: `w-full ${validationError ? 'p-invalid' : ''}`, "data-pr-tooltip": validationError, "data-pr-position": "top" }));
14
+ };
15
+
16
+ export { NameCell };
17
+ //# sourceMappingURL=NameCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NameCell.js","sources":["../../../SchemaEditor/NameCell.tsx"],"sourcesContent":["// Copyright (c) Cratis. All rights reserved.\n// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n\nimport { InputText } from 'primereact/inputtext';\nimport * as faIcons from 'react-icons/fa6';\nimport { JsonSchemaProperty } from '../types/JsonSchema';\n\nexport interface NameCellProps {\n rowData: JsonSchemaProperty;\n isEditMode: boolean;\n onUpdate: (oldName: string, field: keyof JsonSchemaProperty, value: unknown) => void;\n validationError?: string;\n}\n\nexport const NameCell = ({ rowData, isEditMode, onUpdate, validationError }: NameCellProps) => {\n if (!isEditMode) {\n const isNavigable = rowData.type === 'object' || (rowData.type === 'array' && rowData.items?.type === 'object');\n const navigationTooltipText = rowData.type === 'object'\n ? 'Click to navigate to object properties'\n : 'Click to navigate to item definition';\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <span\n className={isNavigable ? 'schema-navigation-tooltip' : undefined}\n data-pr-tooltip={isNavigable ? navigationTooltipText : undefined}\n data-pr-position=\"top\"\n >\n {rowData.name}\n </span>\n {rowData.description && (\n <faIcons.FaCircleInfo\n className=\"schema-description-tooltip\"\n style={{ color: 'var(--text-color-secondary)', fontSize: '0.875rem' }}\n data-pr-tooltip={rowData.description}\n data-pr-position=\"right\"\n />\n )}\n </div>\n );\n }\n\n return (\n <InputText\n value={rowData.name || ''}\n onChange={(e) => onUpdate(rowData.name || '', 'name', e.target.value)}\n className={`w-full ${validationError ? 'p-invalid' : ''}`}\n data-pr-tooltip={validationError}\n data-pr-position=\"top\"\n />\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":";;;;AAcO,MAAM,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAiB,KAAI;IAC1F,IAAI,CAAC,UAAU,EAAE;QACb,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC;AAC/G,QAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,KAAK;AAC3C,cAAE;cACA,sCAAsC;AAE5C,QAAA,QACIA,IAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAA,QAAA,EAAA,CAChEC,GAAA,CAAA,MAAA,EAAA,EACI,SAAS,EAAE,WAAW,GAAG,2BAA2B,GAAG,SAAS,EAAA,iBAAA,EAC/C,WAAW,GAAG,qBAAqB,GAAG,SAAS,EAAA,kBAAA,EAC/C,KAAK,EAAA,QAAA,EAErB,OAAO,CAAC,IAAI,GACV,EACN,OAAO,CAAC,WAAW,KAChBA,GAAA,CAAC,OAAO,CAAC,YAAY,IACjB,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,EAAE,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAA,iBAAA,EACpD,OAAO,CAAC,WAAW,EAAA,kBAAA,EACnB,OAAO,GAC1B,CACL,CAAA,EAAA,CACC;IAEd;IAEA,QACIA,GAAA,CAAC,SAAS,EAAA,EACN,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,EACzB,QAAQ,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACrE,SAAS,EAAE,CAAA,OAAA,EAAU,eAAe,GAAG,WAAW,GAAG,EAAE,CAAA,CAAE,EAAA,iBAAA,EACxC,eAAe,EAAA,kBAAA,EACf,KAAK,EAAA,CACxB;AAEV;;;;"}
@@ -0,0 +1,17 @@
1
+ import { JsonSchema } from '../types/JsonSchema';
2
+ import { TypeFormat } from '../types/TypeFormat';
3
+ export interface SchemaEditorProps {
4
+ schema: JsonSchema;
5
+ eventTypeName?: string;
6
+ canEdit?: boolean;
7
+ canNotEditReason?: string;
8
+ onChange?: (schema: JsonSchema) => void;
9
+ onSave?: () => void;
10
+ onCancel?: () => void;
11
+ editMode?: boolean;
12
+ saveDisabled?: boolean;
13
+ cancelDisabled?: boolean;
14
+ typeFormats?: TypeFormat[];
15
+ }
16
+ export declare const SchemaEditor: ({ schema, eventTypeName, canEdit, canNotEditReason, onChange, onSave, onCancel, editMode, saveDisabled, cancelDisabled, typeFormats }: SchemaEditorProps) => import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=SchemaEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaEditor.d.ts","sourceRoot":"","sources":["../../../SchemaEditor/SchemaEditor.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAsC,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAwB,MAAM,qBAAqB,CAAC;AAIvE,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,GAAI,uIAY1B,iBAAiB,4CAsbnB,CAAC"}
@@ -0,0 +1,331 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useEffect, useCallback, useMemo } from 'react';
3
+ import { Button } from 'primereact/button';
4
+ import { DataTable } from 'primereact/datatable';
5
+ import { Column } from 'primereact/column';
6
+ import { Menubar } from 'primereact/menubar';
7
+ import { Tooltip } from 'primereact/tooltip';
8
+ import * as faIcons from 'react-icons/fa6';
9
+ import { NameCell } from './NameCell.js';
10
+ import { TypeCell } from './TypeCell.js';
11
+ import { DEFAULT_TYPE_FORMATS } from '../types/TypeFormat.js';
12
+ import css from './SchemaEditor.module.css';
13
+
14
+ const SchemaEditor = ({ schema, eventTypeName = '', canEdit = true, canNotEditReason, onChange, onSave, onCancel, editMode, saveDisabled = false, cancelDisabled = false, typeFormats = DEFAULT_TYPE_FORMATS }) => {
15
+ const [currentPath, setCurrentPath] = useState([]);
16
+ const [properties, setProperties] = useState([]);
17
+ const [currentSchema, setCurrentSchema] = useState(schema);
18
+ const [isEditMode, setIsEditMode] = useState(editMode ?? false);
19
+ const [initialSchema, setInitialSchema] = useState(schema);
20
+ const [validationErrors, setValidationErrors] = useState({});
21
+ useEffect(() => {
22
+ if (!isEditMode) {
23
+ setCurrentPath([]);
24
+ }
25
+ }, [isEditMode]);
26
+ const validatePropertyName = useCallback((name, propertyId, allProperties) => {
27
+ if (!name || name.trim() === '') {
28
+ return 'Property name cannot be empty';
29
+ }
30
+ const validIdentifierPattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
31
+ if (!validIdentifierPattern.test(name)) {
32
+ return 'Property name must start with a letter or underscore and contain only letters, numbers, and underscores';
33
+ }
34
+ const duplicates = allProperties.filter(p => p.name === name && p.id !== propertyId);
35
+ if (duplicates.length > 0) {
36
+ return 'Property name must be unique';
37
+ }
38
+ return undefined;
39
+ }, []);
40
+ const validateAllProperties = useCallback((properties) => {
41
+ const errors = {};
42
+ properties.forEach(prop => {
43
+ if (!prop.name)
44
+ return;
45
+ const error = validatePropertyName(prop.name, prop.id, properties);
46
+ if (error) {
47
+ errors[prop.id] = error;
48
+ }
49
+ });
50
+ setValidationErrors(errors);
51
+ return Object.keys(errors).length === 0;
52
+ }, [validatePropertyName]);
53
+ useEffect(() => {
54
+ setCurrentSchema(schema);
55
+ setInitialSchema(JSON.parse(JSON.stringify(schema)));
56
+ }, [schema]);
57
+ useEffect(() => {
58
+ loadPropertiesForCurrentPath();
59
+ }, [currentPath, currentSchema, isEditMode]);
60
+ const loadPropertiesForCurrentPath = () => {
61
+ let targetSchema = currentSchema;
62
+ for (const segment of currentPath) {
63
+ if (targetSchema.type === 'array' && segment === '$items') {
64
+ targetSchema = targetSchema.items || {};
65
+ }
66
+ else if (targetSchema.properties && targetSchema.properties[segment]) {
67
+ targetSchema = targetSchema.properties[segment];
68
+ }
69
+ else {
70
+ return;
71
+ }
72
+ }
73
+ const schemaProps = [];
74
+ if (targetSchema.properties) {
75
+ let idCounter = 0;
76
+ for (const [name, property] of Object.entries(targetSchema.properties)) {
77
+ schemaProps.push({
78
+ id: `prop-${currentPath.join('-')}-${idCounter++}`,
79
+ name,
80
+ type: property.type || 'string',
81
+ format: property.format,
82
+ description: property.description,
83
+ items: property.items,
84
+ properties: property.properties,
85
+ required: currentSchema.required?.includes(name) || false
86
+ });
87
+ }
88
+ }
89
+ setProperties(schemaProps);
90
+ if (isEditMode) {
91
+ validateAllProperties(schemaProps);
92
+ }
93
+ };
94
+ const updateSchemaAtPath = useCallback((path, updater) => {
95
+ const newSchema = JSON.parse(JSON.stringify(currentSchema));
96
+ if (path.length === 0) {
97
+ const updated = updater(newSchema);
98
+ setCurrentSchema(updated);
99
+ onChange?.(updated);
100
+ return;
101
+ }
102
+ let targetSchema = newSchema;
103
+ for (let i = 0; i < path.length - 1; i++) {
104
+ const segment = path[i];
105
+ if (targetSchema.type === 'array' && segment === '$items') {
106
+ if (!targetSchema.items) {
107
+ targetSchema.items = { type: 'object', properties: {} };
108
+ }
109
+ targetSchema = targetSchema.items;
110
+ }
111
+ else if (targetSchema.properties && targetSchema.properties[segment]) {
112
+ targetSchema = targetSchema.properties[segment];
113
+ }
114
+ }
115
+ const lastSegment = path[path.length - 1];
116
+ if (targetSchema.type === 'array' && lastSegment === '$items') {
117
+ targetSchema.items = updater(targetSchema.items || {});
118
+ }
119
+ else {
120
+ if (!targetSchema.properties) {
121
+ targetSchema.properties = {};
122
+ }
123
+ targetSchema.properties[lastSegment] = updater(targetSchema.properties[lastSegment] || {});
124
+ }
125
+ setCurrentSchema(newSchema);
126
+ onChange?.(newSchema);
127
+ }, [currentSchema, onChange]);
128
+ const addProperty = useCallback(() => {
129
+ updateSchemaAtPath(currentPath, (schema) => {
130
+ const newProps = { ...(schema.properties || {}) };
131
+ let newName = 'newProperty';
132
+ let counter = 1;
133
+ while (newProps[newName]) {
134
+ newName = `newProperty${counter++}`;
135
+ }
136
+ newProps[newName] = { type: 'string' };
137
+ return { ...schema, properties: newProps };
138
+ });
139
+ }, [currentPath, updateSchemaAtPath]);
140
+ const removeProperty = useCallback((propertyName) => {
141
+ updateSchemaAtPath(currentPath, (schema) => {
142
+ const newProps = { ...(schema.properties || {}) };
143
+ delete newProps[propertyName];
144
+ return { ...schema, properties: newProps };
145
+ });
146
+ }, [currentPath, updateSchemaAtPath]);
147
+ const updateProperty = useCallback((oldName, field, value, additionalUpdates) => {
148
+ updateSchemaAtPath(currentPath, (schema) => {
149
+ const newProps = { ...(schema.properties || {}) };
150
+ const prop = { ...(newProps[oldName] || {}) };
151
+ if (field === 'name') {
152
+ if (value !== oldName && !newProps[value]) {
153
+ newProps[value] = prop;
154
+ delete newProps[oldName];
155
+ }
156
+ }
157
+ else if (field === 'type') {
158
+ prop.type = value;
159
+ if (value === 'array') {
160
+ prop.items = { type: 'string' };
161
+ delete prop.format;
162
+ }
163
+ else if (value === 'object') {
164
+ prop.properties = {};
165
+ delete prop.format;
166
+ delete prop.items;
167
+ }
168
+ else {
169
+ delete prop.items;
170
+ delete prop.properties;
171
+ }
172
+ if (additionalUpdates) {
173
+ if ('format' in additionalUpdates) {
174
+ if (additionalUpdates.format) {
175
+ prop.format = additionalUpdates.format;
176
+ }
177
+ else {
178
+ delete prop.format;
179
+ }
180
+ }
181
+ }
182
+ newProps[oldName] = prop;
183
+ }
184
+ else if (field === 'format') {
185
+ if (value && value !== 'none') {
186
+ prop.format = value;
187
+ }
188
+ else {
189
+ delete prop.format;
190
+ }
191
+ newProps[oldName] = prop;
192
+ }
193
+ return { ...schema, properties: newProps };
194
+ });
195
+ }, [currentPath, updateSchemaAtPath]);
196
+ const updateArrayItemType = useCallback((propertyName, itemType) => {
197
+ updateSchemaAtPath(currentPath, (schema) => {
198
+ const newProps = { ...(schema.properties || {}) };
199
+ const prop = { ...(newProps[propertyName] || {}) };
200
+ if (itemType === 'object') {
201
+ prop.items = { type: 'object', properties: {} };
202
+ }
203
+ else if (itemType === 'array') {
204
+ prop.items = { type: 'array', items: { type: 'string' } };
205
+ }
206
+ else {
207
+ prop.items = { type: itemType };
208
+ }
209
+ newProps[propertyName] = prop;
210
+ return { ...schema, properties: newProps };
211
+ });
212
+ }, [currentPath, updateSchemaAtPath]);
213
+ const navigateToProperty = useCallback((propertyName) => {
214
+ setCurrentPath([...currentPath, propertyName]);
215
+ }, [currentPath]);
216
+ const navigateToArrayItems = useCallback((propertyName) => {
217
+ setCurrentPath([...currentPath, propertyName, '$items']);
218
+ }, [currentPath]);
219
+ const navigateBack = useCallback(() => {
220
+ if (currentPath.length > 0) {
221
+ setCurrentPath(currentPath.slice(0, -1));
222
+ }
223
+ }, [currentPath]);
224
+ const navigateToBreadcrumb = useCallback((index) => {
225
+ const items = getBreadcrumbItems();
226
+ setCurrentPath(items[index].path);
227
+ }, [currentPath, eventTypeName]);
228
+ const handleSave = useCallback(() => {
229
+ onSave?.();
230
+ setIsEditMode(false);
231
+ }, [onSave]);
232
+ const handleCancel = useCallback(() => {
233
+ setCurrentSchema(JSON.parse(JSON.stringify(initialSchema)));
234
+ onChange?.(JSON.parse(JSON.stringify(initialSchema)));
235
+ setIsEditMode(false);
236
+ onCancel?.();
237
+ }, [initialSchema, onChange, onCancel]);
238
+ const handleEdit = useCallback(() => {
239
+ setInitialSchema(JSON.parse(JSON.stringify(currentSchema)));
240
+ setIsEditMode(true);
241
+ }, [currentSchema]);
242
+ const getBreadcrumbItems = () => {
243
+ const items = [{ name: eventTypeName, path: [] }];
244
+ for (let i = 0; i < currentPath.length; i++) {
245
+ const segment = currentPath[i];
246
+ if (segment === '$items') {
247
+ items.push({
248
+ name: '[items]',
249
+ path: currentPath.slice(0, i + 1)
250
+ });
251
+ }
252
+ else {
253
+ items.push({
254
+ name: segment,
255
+ path: currentPath.slice(0, i + 1)
256
+ });
257
+ }
258
+ }
259
+ return items;
260
+ };
261
+ const getCurrentDescription = useCallback(() => {
262
+ let targetSchema = currentSchema;
263
+ for (const segment of currentPath) {
264
+ if (targetSchema.type === 'array' && segment === '$items') {
265
+ targetSchema = targetSchema.items || {};
266
+ }
267
+ else if (targetSchema.properties && targetSchema.properties[segment]) {
268
+ targetSchema = targetSchema.properties[segment];
269
+ }
270
+ else {
271
+ return undefined;
272
+ }
273
+ }
274
+ return targetSchema.description;
275
+ }, [currentSchema, currentPath]);
276
+ const hasValidationErrors = Object.keys(validationErrors).length > 0;
277
+ const menuItems = useMemo(() => [
278
+ ...(!isEditMode ? [{
279
+ label: 'Edit',
280
+ icon: jsx(faIcons.FaPencil, { className: 'mr-2' }),
281
+ command: canEdit ? handleEdit : undefined,
282
+ className: !canEdit ? 'edit-disabled-with-reason' : undefined,
283
+ template: !canEdit && canNotEditReason ? (item) => (jsxs("div", { className: "p-menuitem-link p-disabled", "data-pr-tooltip": canNotEditReason, "data-pr-position": "bottom", style: { cursor: 'not-allowed', opacity: 0.6 }, children: [item.icon, jsx("span", { className: "p-menuitem-text", children: item.label })] })) : undefined
284
+ }] : []),
285
+ ...(isEditMode ? [
286
+ ...(!saveDisabled ? [{
287
+ label: 'Save',
288
+ icon: jsx(faIcons.FaCheck, { className: 'mr-2' }),
289
+ command: hasValidationErrors ? undefined : handleSave,
290
+ disabled: hasValidationErrors
291
+ }] : []),
292
+ ...(!cancelDisabled ? [{
293
+ label: 'Cancel',
294
+ icon: jsx(faIcons.FaXmark, { className: 'mr-2' }),
295
+ command: handleCancel
296
+ }] : []),
297
+ {
298
+ label: 'Add Property',
299
+ icon: jsx(faIcons.FaPlus, { className: 'mr-2' }),
300
+ command: addProperty
301
+ }
302
+ ] : [])
303
+ ], [isEditMode, handleSave, handleCancel, handleEdit, addProperty, canEdit, canNotEditReason, hasValidationErrors, saveDisabled, cancelDisabled]);
304
+ const breadcrumbItems = getBreadcrumbItems();
305
+ const isAtRoot = currentPath.length === 0;
306
+ const currentDescription = getCurrentDescription();
307
+ return (jsxs("div", { className: "schema-editor", style: { display: 'flex', flexDirection: 'column', height: '100%' }, children: [jsxs("div", { className: "px-4 py-4", children: [jsx(Tooltip, { target: "[data-pr-tooltip]" }), jsx("div", { className: "schema-editor-menubar", children: jsx(Menubar, { "aria-label": "Actions", model: menuItems }) })] }), jsxs("div", { className: "px-4 py-2 border-bottom-1 surface-border", children: [jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [jsx(Button, { icon: jsx(faIcons.FaArrowLeft, {}), className: "p-button-text p-button-sm", onClick: navigateBack, disabled: isAtRoot, tooltip: "Navigate back", tooltipOptions: { position: 'top' } }), jsx("div", { style: { fontSize: '0.9rem', color: 'var(--text-color-secondary)', cursor: 'pointer' }, children: breadcrumbItems.map((item, index) => (jsxs("span", { children: [index > 0 && jsx("span", { className: "mx-2", children: ">" }), jsx("span", { onClick: () => navigateToBreadcrumb(index), style: { cursor: 'pointer', textDecoration: index < breadcrumbItems.length - 1 ? 'underline' : 'none' }, children: item.name })] }, index))) })] }), currentDescription && (jsxs("div", { style: { fontSize: '0.875rem', color: 'var(--text-color-secondary)', marginTop: '0.5rem', marginLeft: '2.5rem', fontStyle: 'italic', display: 'flex', alignItems: 'center', gap: '0.5rem' }, children: [jsx(faIcons.FaCircleInfo, {}), jsx("span", { children: currentDescription })] }))] }), jsxs("div", { style: { flex: 1, overflow: 'auto', padding: '1rem' }, children: [jsx(Tooltip, { target: ".schema-navigation-tooltip", mouseTrack: true, mouseTrackTop: 15 }, `nav-${eventTypeName}-${currentPath.join('/')}`), jsx(Tooltip, { target: ".schema-description-tooltip" }, `desc-${eventTypeName}-${currentPath.join('/')}`), jsxs(DataTable, { value: properties, dataKey: "id", emptyMessage: "No properties defined", rowClassName: (rowData) => {
308
+ if (!isEditMode && (rowData.type === 'object' || (rowData.type === 'array' && rowData.items?.type === 'object'))) {
309
+ return css.navigableRow;
310
+ }
311
+ return '';
312
+ }, onRowClick: (e) => {
313
+ if (!isEditMode) {
314
+ const rowData = e.data;
315
+ if (rowData.name) {
316
+ if (rowData.type === 'object') {
317
+ navigateToProperty(rowData.name);
318
+ }
319
+ else if (rowData.type === 'array' && rowData.items?.type === 'object') {
320
+ navigateToArrayItems(rowData.name);
321
+ }
322
+ }
323
+ }
324
+ }, pt: {
325
+ root: { style: { border: 'none' } },
326
+ tbody: { style: { borderTop: '1px solid var(--surface-border)' } }
327
+ }, children: [jsx(Column, { field: "name", header: "Property", body: (rowData) => (jsx(NameCell, { rowData: rowData, isEditMode: isEditMode, onUpdate: updateProperty, validationError: validationErrors[rowData.id] })), style: { width: '30%' } }), jsx(Column, { header: "Type", body: (rowData) => (jsx(TypeCell, { rowData: rowData, isEditMode: isEditMode, typeFormats: typeFormats, onUpdateProperty: updateProperty, onUpdateArrayItemType: updateArrayItemType, onNavigateToProperty: navigateToProperty, onNavigateToArrayItems: navigateToArrayItems, onRemoveProperty: removeProperty })), style: { width: '70%' } })] }, `${isEditMode}-${currentPath.join('/')}`)] })] }));
328
+ };
329
+
330
+ export { SchemaEditor };
331
+ //# sourceMappingURL=SchemaEditor.js.map