@solidxai/core-ui 0.1.9-beta.2 → 0.1.9-beta.20

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 (577) hide show
  1. package/dist/adapters/auth/handleLogout.d.ts +1 -1
  2. package/dist/adapters/auth/handleLogout.d.ts.map +1 -1
  3. package/dist/adapters/auth/handleLogout.js +20 -32
  4. package/dist/adapters/auth/handleLogout.js.map +1 -1
  5. package/dist/adapters/auth/handleLogout.ts +7 -14
  6. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  7. package/dist/components/auth/AuthLayout.js +2 -1
  8. package/dist/components/auth/AuthLayout.js.map +1 -1
  9. package/dist/components/auth/AuthLayout.tsx +2 -0
  10. package/dist/components/auth/ForgotPasswordThankYou.js +1 -1
  11. package/dist/components/auth/ForgotPasswordThankYou.js.map +1 -1
  12. package/dist/components/auth/ForgotPasswordThankYou.tsx +2 -2
  13. package/dist/components/auth/SolidForgotPassword.js +1 -1
  14. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  15. package/dist/components/auth/SolidForgotPassword.tsx +2 -2
  16. package/dist/components/auth/SolidInitialLoginOtp.js +8 -8
  17. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  18. package/dist/components/auth/SolidInitialLoginOtp.tsx +1 -1
  19. package/dist/components/auth/SolidInitiateRegisterOtp.js +8 -8
  20. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  21. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +1 -1
  22. package/dist/components/auth/SolidLogin.js +9 -10
  23. package/dist/components/auth/SolidLogin.js.map +1 -1
  24. package/dist/components/auth/SolidLogin.tsx +3 -3
  25. package/dist/components/auth/SolidRegister.js +10 -10
  26. package/dist/components/auth/SolidRegister.js.map +1 -1
  27. package/dist/components/auth/SolidRegister.tsx +3 -3
  28. package/dist/components/common/GeneralSettings.js +1 -1
  29. package/dist/components/common/GeneralSettings.js.map +1 -1
  30. package/dist/components/common/GeneralSettings.tsx +1 -1
  31. package/dist/components/common/SettingsComponent.d.ts.map +1 -1
  32. package/dist/components/common/SettingsComponent.js +4 -1
  33. package/dist/components/common/SettingsComponent.js.map +1 -1
  34. package/dist/components/common/SettingsComponent.module.css +95 -2
  35. package/dist/components/common/SettingsComponent.tsx +4 -1
  36. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  37. package/dist/components/common/SocialMediaLogin.js +2 -2
  38. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  39. package/dist/components/common/SocialMediaLogin.tsx +8 -4
  40. package/dist/components/common/SolidExport.d.ts.map +1 -1
  41. package/dist/components/common/SolidExport.js +1 -1
  42. package/dist/components/common/SolidExport.js.map +1 -1
  43. package/dist/components/common/SolidExport.tsx +2 -0
  44. package/dist/components/common/SolidFaviconProvider.d.ts +3 -0
  45. package/dist/components/common/SolidFaviconProvider.d.ts.map +1 -0
  46. package/dist/components/common/SolidFaviconProvider.js +102 -0
  47. package/dist/components/common/SolidFaviconProvider.js.map +1 -0
  48. package/dist/components/common/SolidFaviconProvider.tsx +55 -0
  49. package/dist/components/core/card/SolidCardView.js +1 -1
  50. package/dist/components/core/card/SolidCardView.js.map +1 -1
  51. package/dist/components/core/card/SolidCardView.tsx +1 -1
  52. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  53. package/dist/components/core/chatter/SolidChatter.js +24 -11
  54. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  55. package/dist/components/core/chatter/SolidChatter.tsx +20 -6
  56. package/dist/components/core/chatter/SolidChatterHeader.d.ts.map +1 -1
  57. package/dist/components/core/chatter/SolidChatterHeader.js +1 -1
  58. package/dist/components/core/chatter/SolidChatterHeader.js.map +1 -1
  59. package/dist/components/core/chatter/SolidChatterHeader.tsx +4 -0
  60. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +1 -0
  61. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
  62. package/dist/components/core/chatter/SolidChatterMessageBox.js +150 -11
  63. package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
  64. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +252 -11
  65. package/dist/components/core/chatter/SolidMessageComposer.d.ts.map +1 -1
  66. package/dist/components/core/chatter/SolidMessageComposer.js +3 -2
  67. package/dist/components/core/chatter/SolidMessageComposer.js.map +1 -1
  68. package/dist/components/core/chatter/SolidMessageComposer.tsx +4 -2
  69. package/dist/components/core/chatter/chatter.module.css +1 -1
  70. package/dist/components/core/common/FilterComponent.d.ts.map +1 -1
  71. package/dist/components/core/common/FilterComponent.js +5 -3
  72. package/dist/components/core/common/FilterComponent.js.map +1 -1
  73. package/dist/components/core/common/FilterComponent.tsx +6 -2
  74. package/dist/components/core/common/GroupingComponent.d.ts.map +1 -1
  75. package/dist/components/core/common/GroupingComponent.js +2 -2
  76. package/dist/components/core/common/GroupingComponent.js.map +1 -1
  77. package/dist/components/core/common/GroupingComponent.tsx +2 -0
  78. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.d.ts.map +1 -1
  79. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js +1 -10
  80. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js.map +1 -1
  81. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +1 -8
  82. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  83. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +6 -11
  84. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  85. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +5 -31
  86. package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +1 -1
  87. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.d.ts.map +1 -1
  88. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js +2 -0
  89. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js.map +1 -1
  90. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.tsx +2 -0
  91. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  92. package/dist/components/core/common/SolidGlobalSearchElement.js +137 -57
  93. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  94. package/dist/components/core/common/SolidGlobalSearchElement.tsx +92 -11
  95. package/dist/components/core/common/SolidSaveCustomFilterForm.d.ts.map +1 -1
  96. package/dist/components/core/common/SolidSaveCustomFilterForm.js +1 -1
  97. package/dist/components/core/common/SolidSaveCustomFilterForm.js.map +1 -1
  98. package/dist/components/core/common/SolidSaveCustomFilterForm.tsx +0 -1
  99. package/dist/components/core/dashboard/mappers/echartsOptionMapper.d.ts +4 -0
  100. package/dist/components/core/dashboard/mappers/echartsOptionMapper.d.ts.map +1 -0
  101. package/dist/components/core/dashboard/mappers/echartsOptionMapper.js +79 -0
  102. package/dist/components/core/dashboard/mappers/echartsOptionMapper.js.map +1 -0
  103. package/dist/components/core/dashboard/mappers/echartsOptionMapper.ts +81 -0
  104. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.d.ts +3 -0
  105. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.d.ts.map +1 -0
  106. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.js +17 -0
  107. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.js.map +1 -0
  108. package/dist/components/core/dashboard/widgets/DefaultDashboardBarChartWidget.tsx +6 -0
  109. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.d.ts +3 -0
  110. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.d.ts.map +1 -0
  111. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.js +41 -0
  112. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.js.map +1 -0
  113. package/dist/components/core/dashboard/widgets/DefaultDashboardChartWidget.tsx +56 -0
  114. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.d.ts +3 -0
  115. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.d.ts.map +1 -0
  116. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.js +14 -0
  117. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.js.map +1 -0
  118. package/dist/components/core/dashboard/widgets/DefaultDashboardKpiWidget.tsx +19 -0
  119. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.d.ts +3 -0
  120. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.d.ts.map +1 -0
  121. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.js +17 -0
  122. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.js.map +1 -0
  123. package/dist/components/core/dashboard/widgets/DefaultDashboardLineChartWidget.tsx +6 -0
  124. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.d.ts +3 -0
  125. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.d.ts.map +1 -0
  126. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.js +17 -0
  127. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.js.map +1 -0
  128. package/dist/components/core/dashboard/widgets/DefaultDashboardPieChartWidget.tsx +6 -0
  129. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.d.ts +3 -0
  130. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.d.ts.map +1 -0
  131. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.js +12 -0
  132. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.js.map +1 -0
  133. package/dist/components/core/dashboard/widgets/DefaultDashboardTableWidget.tsx +39 -0
  134. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.d.ts +3 -0
  135. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.d.ts.map +1 -0
  136. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.js +7 -0
  137. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.js.map +1 -0
  138. package/dist/components/core/dashboard/widgets/DefaultDashboardUnknownWidget.tsx +9 -0
  139. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.d.ts +3 -0
  140. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.d.ts.map +1 -0
  141. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.js +203 -0
  142. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.js.map +1 -0
  143. package/dist/components/core/dashboard/widgets/QueueSlaHeatmapWidget.tsx +251 -0
  144. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts +16 -0
  145. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.d.ts.map +1 -0
  146. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js +31 -0
  147. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.js.map +1 -0
  148. package/dist/components/core/extension/solid-core/metadata/MetadataExplorerFormWidget.tsx +43 -0
  149. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.d.ts +3 -0
  150. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.d.ts.map +1 -0
  151. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.js +141 -0
  152. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.js.map +1 -0
  153. package/dist/components/core/extension/solid-core/moduleMetadata/list/ClearModulePackageRuntimeHeaderAction.tsx +205 -0
  154. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.d.ts +4 -0
  155. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.d.ts.map +1 -0
  156. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.js +112 -0
  157. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.js.map +1 -0
  158. package/dist/components/core/extension/solid-core/moduleMetadata/list/ExportModulePackageRowAction.tsx +146 -0
  159. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.d.ts +11 -0
  160. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.d.ts.map +1 -0
  161. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.js +22 -0
  162. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.js.map +1 -0
  163. package/dist/components/core/extension/solid-core/moduleMetadata/list/ModuleImportListHeaderAction.tsx +36 -0
  164. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.d.ts +3 -0
  165. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.d.ts.map +1 -0
  166. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.js +133 -0
  167. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.js.map +1 -0
  168. package/dist/components/core/extension/solid-core/moduleMetadata/list/moduleMetadataListOnLoad.ts +76 -0
  169. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +1 -1
  170. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
  171. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +1 -1
  172. package/dist/components/core/filter/fields/SolidBooleanField.d.ts.map +1 -1
  173. package/dist/components/core/filter/fields/SolidBooleanField.js +1 -1
  174. package/dist/components/core/filter/fields/SolidBooleanField.js.map +1 -1
  175. package/dist/components/core/filter/fields/SolidBooleanField.tsx +3 -2
  176. package/dist/components/core/filter/fields/SolidDateField.d.ts.map +1 -1
  177. package/dist/components/core/filter/fields/SolidDateField.js +1 -1
  178. package/dist/components/core/filter/fields/SolidDateField.js.map +1 -1
  179. package/dist/components/core/filter/fields/SolidDateField.tsx +2 -1
  180. package/dist/components/core/filter/fields/SolidDatetimeField.d.ts.map +1 -1
  181. package/dist/components/core/filter/fields/SolidDatetimeField.js +1 -1
  182. package/dist/components/core/filter/fields/SolidDatetimeField.js.map +1 -1
  183. package/dist/components/core/filter/fields/SolidDatetimeField.tsx +3 -2
  184. package/dist/components/core/filter/fields/SolidExternalIdField.d.ts.map +1 -1
  185. package/dist/components/core/filter/fields/SolidExternalIdField.js +1 -1
  186. package/dist/components/core/filter/fields/SolidExternalIdField.js.map +1 -1
  187. package/dist/components/core/filter/fields/SolidExternalIdField.tsx +2 -1
  188. package/dist/components/core/filter/fields/SolidIdField.d.ts.map +1 -1
  189. package/dist/components/core/filter/fields/SolidIdField.js +1 -1
  190. package/dist/components/core/filter/fields/SolidIdField.js.map +1 -1
  191. package/dist/components/core/filter/fields/SolidIdField.tsx +1 -0
  192. package/dist/components/core/filter/fields/SolidIntField.d.ts.map +1 -1
  193. package/dist/components/core/filter/fields/SolidIntField.js +1 -1
  194. package/dist/components/core/filter/fields/SolidIntField.js.map +1 -1
  195. package/dist/components/core/filter/fields/SolidIntField.tsx +2 -1
  196. package/dist/components/core/filter/fields/SolidMediaMultipleField.d.ts.map +1 -1
  197. package/dist/components/core/filter/fields/SolidMediaMultipleField.js +1 -1
  198. package/dist/components/core/filter/fields/SolidMediaMultipleField.js.map +1 -1
  199. package/dist/components/core/filter/fields/SolidMediaMultipleField.tsx +2 -1
  200. package/dist/components/core/filter/fields/SolidMediaSingleField.d.ts.map +1 -1
  201. package/dist/components/core/filter/fields/SolidMediaSingleField.js +1 -1
  202. package/dist/components/core/filter/fields/SolidMediaSingleField.js.map +1 -1
  203. package/dist/components/core/filter/fields/SolidMediaSingleField.tsx +2 -1
  204. package/dist/components/core/filter/fields/SolidSelectionDynamicField.d.ts.map +1 -1
  205. package/dist/components/core/filter/fields/SolidSelectionDynamicField.js +1 -1
  206. package/dist/components/core/filter/fields/SolidSelectionDynamicField.js.map +1 -1
  207. package/dist/components/core/filter/fields/SolidSelectionDynamicField.tsx +3 -2
  208. package/dist/components/core/filter/fields/SolidSelectionStaticField.d.ts.map +1 -1
  209. package/dist/components/core/filter/fields/SolidSelectionStaticField.js +1 -1
  210. package/dist/components/core/filter/fields/SolidSelectionStaticField.js.map +1 -1
  211. package/dist/components/core/filter/fields/SolidSelectionStaticField.tsx +3 -2
  212. package/dist/components/core/filter/fields/SolidShortTextField.d.ts.map +1 -1
  213. package/dist/components/core/filter/fields/SolidShortTextField.js +1 -1
  214. package/dist/components/core/filter/fields/SolidShortTextField.js.map +1 -1
  215. package/dist/components/core/filter/fields/SolidShortTextField.tsx +2 -1
  216. package/dist/components/core/filter/fields/SolidTimeField.d.ts.map +1 -1
  217. package/dist/components/core/filter/fields/SolidTimeField.js +1 -1
  218. package/dist/components/core/filter/fields/SolidTimeField.js.map +1 -1
  219. package/dist/components/core/filter/fields/SolidTimeField.tsx +3 -2
  220. package/dist/components/core/filter/fields/SolidUuidField.d.ts.map +1 -1
  221. package/dist/components/core/filter/fields/SolidUuidField.js +1 -1
  222. package/dist/components/core/filter/fields/SolidUuidField.js.map +1 -1
  223. package/dist/components/core/filter/fields/SolidUuidField.tsx +2 -1
  224. package/dist/components/core/filter/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  225. package/dist/components/core/filter/fields/relations/SolidRelationManyToManyField.js +1 -1
  226. package/dist/components/core/filter/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  227. package/dist/components/core/filter/fields/relations/SolidRelationManyToManyField.tsx +3 -2
  228. package/dist/components/core/filter/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  229. package/dist/components/core/filter/fields/relations/SolidRelationManyToOneField.js +1 -1
  230. package/dist/components/core/filter/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  231. package/dist/components/core/filter/fields/relations/SolidRelationManyToOneField.tsx +3 -2
  232. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -1
  233. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js +1 -1
  234. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.js.map +1 -1
  235. package/dist/components/core/filter/fields/relations/SolidRelationOneToManyField.tsx +3 -2
  236. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  237. package/dist/components/core/form/SolidFormActionHeader.js +1 -0
  238. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  239. package/dist/components/core/form/SolidFormActionHeader.tsx +2 -1
  240. package/dist/components/core/form/SolidFormFooter.d.ts.map +1 -1
  241. package/dist/components/core/form/SolidFormFooter.js +16 -9
  242. package/dist/components/core/form/SolidFormFooter.js.map +1 -1
  243. package/dist/components/core/form/SolidFormFooter.tsx +16 -8
  244. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  245. package/dist/components/core/form/SolidFormView.js +12 -7
  246. package/dist/components/core/form/SolidFormView.js.map +1 -1
  247. package/dist/components/core/form/SolidFormView.tsx +11 -5
  248. package/dist/components/core/form/SolidFormViewContextMenuHeaderButton.d.ts.map +1 -1
  249. package/dist/components/core/form/SolidFormViewContextMenuHeaderButton.js +12 -3
  250. package/dist/components/core/form/SolidFormViewContextMenuHeaderButton.js.map +1 -1
  251. package/dist/components/core/form/SolidFormViewContextMenuHeaderButton.tsx +21 -16
  252. package/dist/components/core/form/SolidFormViewNormalHeaderButton.d.ts.map +1 -1
  253. package/dist/components/core/form/SolidFormViewNormalHeaderButton.js +15 -5
  254. package/dist/components/core/form/SolidFormViewNormalHeaderButton.js.map +1 -1
  255. package/dist/components/core/form/SolidFormViewNormalHeaderButton.tsx +21 -9
  256. package/dist/components/core/form/field-quality-check-fixes.md +201 -0
  257. package/dist/components/core/form/fields/SolidBooleanField.d.ts.map +1 -1
  258. package/dist/components/core/form/fields/SolidBooleanField.js +10 -1
  259. package/dist/components/core/form/fields/SolidBooleanField.js.map +1 -1
  260. package/dist/components/core/form/fields/SolidBooleanField.tsx +13 -1
  261. package/dist/components/core/form/fields/SolidDecimalField.d.ts.map +1 -1
  262. package/dist/components/core/form/fields/SolidDecimalField.js +7 -1
  263. package/dist/components/core/form/fields/SolidDecimalField.js.map +1 -1
  264. package/dist/components/core/form/fields/SolidDecimalField.tsx +10 -1
  265. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  266. package/dist/components/core/form/fields/SolidIntegerField.js +14 -2
  267. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  268. package/dist/components/core/form/fields/SolidIntegerField.tsx +20 -2
  269. package/dist/components/core/form/fields/SolidJsonField.d.ts.map +1 -1
  270. package/dist/components/core/form/fields/SolidJsonField.js +9 -1
  271. package/dist/components/core/form/fields/SolidJsonField.js.map +1 -1
  272. package/dist/components/core/form/fields/SolidJsonField.tsx +12 -1
  273. package/dist/components/core/form/fields/SolidLongTextField.d.ts +0 -1
  274. package/dist/components/core/form/fields/SolidLongTextField.d.ts.map +1 -1
  275. package/dist/components/core/form/fields/SolidLongTextField.js +16 -48
  276. package/dist/components/core/form/fields/SolidLongTextField.js.map +1 -1
  277. package/dist/components/core/form/fields/SolidLongTextField.tsx +22 -88
  278. package/dist/components/core/form/fields/SolidMediaMultipleField.d.ts.map +1 -1
  279. package/dist/components/core/form/fields/SolidMediaMultipleField.js +15 -2
  280. package/dist/components/core/form/fields/SolidMediaMultipleField.js.map +1 -1
  281. package/dist/components/core/form/fields/SolidMediaMultipleField.tsx +20 -4
  282. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  283. package/dist/components/core/form/fields/SolidMediaSingleField.js +21 -3
  284. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  285. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +30 -3
  286. package/dist/components/core/form/fields/SolidPasswordField.d.ts.map +1 -1
  287. package/dist/components/core/form/fields/SolidPasswordField.js +2 -1
  288. package/dist/components/core/form/fields/SolidPasswordField.js.map +1 -1
  289. package/dist/components/core/form/fields/SolidPasswordField.tsx +13 -1
  290. package/dist/components/core/form/fields/SolidRichTextField.d.ts.map +1 -1
  291. package/dist/components/core/form/fields/SolidRichTextField.js +9 -1
  292. package/dist/components/core/form/fields/SolidRichTextField.js.map +1 -1
  293. package/dist/components/core/form/fields/SolidRichTextField.tsx +12 -1
  294. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts +12 -0
  295. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.d.ts.map +1 -0
  296. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js +168 -0
  297. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.js.map +1 -0
  298. package/dist/components/core/form/fields/relations/RolesGroupedByModuleWidget.tsx +241 -0
  299. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  300. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +17 -15
  301. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  302. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +10 -2
  303. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  304. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +14 -14
  305. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  306. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +19 -9
  307. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.d.ts.map +1 -1
  308. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js +9 -7
  309. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.js.map +1 -1
  310. package/dist/components/core/form/fields/relations/SolidRelationOneToManyField.tsx +8 -2
  311. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js +1 -1
  312. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js.map +1 -1
  313. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.tsx +1 -1
  314. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.d.ts.map +1 -1
  315. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js +14 -3
  316. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.js.map +1 -1
  317. package/dist/components/core/form/fields/widgets/SolidIconEditWidget.tsx +20 -3
  318. package/dist/components/core/kanban/SolidKanbanView.js +1 -1
  319. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  320. package/dist/components/core/kanban/SolidKanbanView.tsx +1 -1
  321. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  322. package/dist/components/core/list/SolidDataTable.js +2 -1
  323. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  324. package/dist/components/core/list/SolidDataTable.tsx +8 -9
  325. package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -1
  326. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +3 -0
  327. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -1
  328. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +2 -0
  329. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  330. package/dist/components/core/list/SolidListView.js +180 -101
  331. package/dist/components/core/list/SolidListView.js.map +1 -1
  332. package/dist/components/core/list/SolidListView.tsx +119 -33
  333. package/dist/components/core/list/SolidListViewColumn.d.ts +3 -1
  334. package/dist/components/core/list/SolidListViewColumn.d.ts.map +1 -1
  335. package/dist/components/core/list/SolidListViewColumn.js +27 -2
  336. package/dist/components/core/list/SolidListViewColumn.js.map +1 -1
  337. package/dist/components/core/list/SolidListViewColumn.tsx +16 -3
  338. package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
  339. package/dist/components/core/list/SolidListViewConfigure.js +11 -10
  340. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  341. package/dist/components/core/list/SolidListViewConfigure.tsx +4 -2
  342. package/dist/components/core/list/SolidListViewHeaderButton.d.ts.map +1 -1
  343. package/dist/components/core/list/SolidListViewHeaderButton.js +9 -3
  344. package/dist/components/core/list/SolidListViewHeaderButton.js.map +1 -1
  345. package/dist/components/core/list/SolidListViewHeaderButton.tsx +12 -7
  346. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
  347. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +19 -7
  348. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
  349. package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +19 -6
  350. package/dist/components/core/list/SolidListViewRowActionMenuItem.d.ts.map +1 -1
  351. package/dist/components/core/list/SolidListViewRowActionMenuItem.js +14 -5
  352. package/dist/components/core/list/SolidListViewRowActionMenuItem.js.map +1 -1
  353. package/dist/components/core/list/SolidListViewRowActionMenuItem.tsx +17 -6
  354. package/dist/components/core/list/SolidListViewRowActionsMenu.d.ts.map +1 -1
  355. package/dist/components/core/list/SolidListViewRowActionsMenu.js +7 -1
  356. package/dist/components/core/list/SolidListViewRowActionsMenu.js.map +1 -1
  357. package/dist/components/core/list/SolidListViewRowActionsMenu.tsx +5 -1
  358. package/dist/components/core/list/columns/SolidBooleanColumn.d.ts.map +1 -1
  359. package/dist/components/core/list/columns/SolidBooleanColumn.js +4 -6
  360. package/dist/components/core/list/columns/SolidBooleanColumn.js.map +1 -1
  361. package/dist/components/core/list/columns/SolidBooleanColumn.tsx +1 -3
  362. package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
  363. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +4 -3
  364. package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
  365. package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +4 -3
  366. package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
  367. package/dist/components/core/list/columns/SolidMediaSingleColumn.js +3 -2
  368. package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
  369. package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +3 -2
  370. package/dist/components/core/list/columns/SolidRelationColumn.d.ts +1 -1
  371. package/dist/components/core/list/columns/SolidRelationColumn.d.ts.map +1 -1
  372. package/dist/components/core/list/columns/SolidRelationColumn.js +2 -2
  373. package/dist/components/core/list/columns/SolidRelationColumn.js.map +1 -1
  374. package/dist/components/core/list/columns/SolidRelationColumn.tsx +2 -2
  375. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts +2 -2
  376. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.d.ts.map +1 -1
  377. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +9 -4
  378. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  379. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +14 -4
  380. package/dist/components/core/list/field-quality-check-fixes.md +178 -0
  381. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.d.ts +3 -0
  382. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.d.ts.map +1 -0
  383. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.js +39 -0
  384. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.js.map +1 -0
  385. package/dist/components/core/list/widgets/SolidUserBlockedStatusListWidget.tsx +50 -0
  386. package/dist/components/core/model/CreateModel.css +48 -0
  387. package/dist/components/core/model/CreateModel.d.ts +1 -0
  388. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  389. package/dist/components/core/model/CreateModel.js +80 -128
  390. package/dist/components/core/model/CreateModel.js.map +1 -1
  391. package/dist/components/core/model/CreateModel.tsx +102 -226
  392. package/dist/components/core/model/FieldMetaData.d.ts +1 -1
  393. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  394. package/dist/components/core/model/FieldMetaData.js +6 -22
  395. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  396. package/dist/components/core/model/FieldMetaData.tsx +16 -49
  397. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  398. package/dist/components/core/model/FieldMetaDataForm.js +196 -222
  399. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  400. package/dist/components/core/model/FieldMetaDataForm.tsx +1 -73
  401. package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
  402. package/dist/components/core/model/ModelMetaData.js +12 -24
  403. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  404. package/dist/components/core/model/ModelMetaData.tsx +15 -21
  405. package/dist/components/core/module/CreateModule.css +44 -0
  406. package/dist/components/core/module/CreateModule.d.ts +1 -0
  407. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  408. package/dist/components/core/module/CreateModule.js +40 -43
  409. package/dist/components/core/module/CreateModule.js.map +1 -1
  410. package/dist/components/core/module/CreateModule.tsx +243 -247
  411. package/dist/components/core/module/ModuleListViewData.d.ts.map +1 -1
  412. package/dist/components/core/module/ModuleListViewData.js +47 -7
  413. package/dist/components/core/module/ModuleListViewData.js.map +1 -1
  414. package/dist/components/core/module/ModuleListViewData.tsx +58 -0
  415. package/dist/components/core/module/ModuleMetadataExplorer.css +638 -0
  416. package/dist/components/core/module/ModuleMetadataExplorer.d.ts +15 -0
  417. package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -0
  418. package/dist/components/core/module/ModuleMetadataExplorer.js +666 -0
  419. package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -0
  420. package/dist/components/core/module/ModuleMetadataExplorer.tsx +1000 -0
  421. package/dist/components/core/module/ModulePackageDialog.css +540 -0
  422. package/dist/components/core/module/ModulePackageDialog.d.ts +16 -0
  423. package/dist/components/core/module/ModulePackageDialog.d.ts.map +1 -0
  424. package/dist/components/core/module/ModulePackageDialog.js +625 -0
  425. package/dist/components/core/module/ModulePackageDialog.js.map +1 -0
  426. package/dist/components/core/module/ModulePackageDialog.tsx +906 -0
  427. package/dist/components/core/tree/SolidTreeView.js +2 -2
  428. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  429. package/dist/components/core/tree/SolidTreeView.tsx +3 -3
  430. package/dist/components/core/users/CreateUser.css +27 -2
  431. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  432. package/dist/components/core/users/CreateUser.js +52 -24
  433. package/dist/components/core/users/CreateUser.js.map +1 -1
  434. package/dist/components/core/users/CreateUser.tsx +47 -34
  435. package/dist/components/layout/AdminHeaderActions.d.ts +7 -0
  436. package/dist/components/layout/AdminHeaderActions.d.ts.map +1 -0
  437. package/dist/components/layout/AdminHeaderActions.js +77 -0
  438. package/dist/components/layout/AdminHeaderActions.js.map +1 -0
  439. package/dist/components/layout/AdminHeaderActions.tsx +155 -0
  440. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -1
  441. package/dist/components/layout/AdminTopHeader.js +8 -17
  442. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  443. package/dist/components/layout/AdminTopHeader.tsx +9 -64
  444. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  445. package/dist/components/layout/AppSidebar.js +2 -1
  446. package/dist/components/layout/AppSidebar.js.map +1 -1
  447. package/dist/components/layout/AppSidebar.tsx +2 -0
  448. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  449. package/dist/components/layout/user-profile-menu.js +57 -33
  450. package/dist/components/layout/user-profile-menu.js.map +1 -1
  451. package/dist/components/layout/user-profile-menu.tsx +11 -59
  452. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts +2 -1
  453. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -1
  454. package/dist/components/shad-cn-ui/SolidAutocomplete.js +60 -6
  455. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -1
  456. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +81 -22
  457. package/dist/components/shad-cn-ui/SolidButton.d.ts.map +1 -1
  458. package/dist/components/shad-cn-ui/SolidButton.js +10 -2
  459. package/dist/components/shad-cn-ui/SolidButton.js.map +1 -1
  460. package/dist/components/shad-cn-ui/SolidButton.tsx +10 -2
  461. package/dist/components/shad-cn-ui/SolidDatePicker.d.ts +1 -1
  462. package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
  463. package/dist/components/shad-cn-ui/SolidDatePicker.js +2 -2
  464. package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
  465. package/dist/components/shad-cn-ui/SolidDatePicker.tsx +4 -0
  466. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  467. package/dist/components/shad-cn-ui/SolidDialog.js +38 -4
  468. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  469. package/dist/components/shad-cn-ui/SolidDialog.tsx +47 -3
  470. package/dist/components/shad-cn-ui/SolidIcon.d.ts +2 -1
  471. package/dist/components/shad-cn-ui/SolidIcon.d.ts.map +1 -1
  472. package/dist/components/shad-cn-ui/SolidIcon.js +1 -0
  473. package/dist/components/shad-cn-ui/SolidIcon.js.map +1 -1
  474. package/dist/components/shad-cn-ui/SolidIcon.tsx +1 -0
  475. package/dist/components/shad-cn-ui/SolidPasswordInput.d.ts.map +1 -1
  476. package/dist/components/shad-cn-ui/SolidPasswordInput.js +1 -1
  477. package/dist/components/shad-cn-ui/SolidPasswordInput.js.map +1 -1
  478. package/dist/components/shad-cn-ui/SolidPasswordInput.tsx +1 -0
  479. package/dist/components/shad-cn-ui/SolidSelect.d.ts +2 -1
  480. package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +1 -1
  481. package/dist/components/shad-cn-ui/SolidSelect.js +51 -1
  482. package/dist/components/shad-cn-ui/SolidSelect.js.map +1 -1
  483. package/dist/components/shad-cn-ui/SolidSelect.tsx +95 -0
  484. package/dist/helpers/buttonEnvironment.d.ts +5 -0
  485. package/dist/helpers/buttonEnvironment.d.ts.map +1 -0
  486. package/dist/helpers/buttonEnvironment.js +30 -0
  487. package/dist/helpers/buttonEnvironment.js.map +1 -0
  488. package/dist/helpers/buttonEnvironment.ts +35 -0
  489. package/dist/helpers/buttonPresentation.d.ts +24 -0
  490. package/dist/helpers/buttonPresentation.d.ts.map +1 -0
  491. package/dist/helpers/buttonPresentation.js +28 -0
  492. package/dist/helpers/buttonPresentation.js.map +1 -0
  493. package/dist/helpers/buttonPresentation.ts +53 -0
  494. package/dist/helpers/fileTypeIcon.d.ts +12 -0
  495. package/dist/helpers/fileTypeIcon.d.ts.map +1 -0
  496. package/dist/helpers/fileTypeIcon.js +37 -0
  497. package/dist/helpers/fileTypeIcon.js.map +1 -0
  498. package/dist/helpers/fileTypeIcon.tsx +65 -0
  499. package/dist/helpers/registry.d.ts.map +1 -1
  500. package/dist/helpers/registry.js +28 -10
  501. package/dist/helpers/registry.js.map +1 -1
  502. package/dist/helpers/registry.ts +31 -13
  503. package/dist/helpers/waitForBackendAvailability.d.ts +7 -0
  504. package/dist/helpers/waitForBackendAvailability.d.ts.map +1 -0
  505. package/dist/helpers/waitForBackendAvailability.js +86 -0
  506. package/dist/helpers/waitForBackendAvailability.js.map +1 -0
  507. package/dist/helpers/waitForBackendAvailability.ts +37 -0
  508. package/dist/index.d.ts +10 -9
  509. package/dist/index.d.ts.map +1 -1
  510. package/dist/index.js +7 -8
  511. package/dist/index.js.map +1 -1
  512. package/dist/index.ts +34 -13
  513. package/dist/redux/api/dashboardRuntimeApi.d.ts +34 -0
  514. package/dist/redux/api/dashboardRuntimeApi.d.ts.map +1 -0
  515. package/dist/redux/api/dashboardRuntimeApi.js +79 -0
  516. package/dist/redux/api/dashboardRuntimeApi.js.map +1 -0
  517. package/dist/redux/api/dashboardRuntimeApi.ts +75 -0
  518. package/dist/redux/api/moduleApi.d.ts +26 -1
  519. package/dist/redux/api/moduleApi.d.ts.map +1 -1
  520. package/dist/redux/api/moduleApi.js +237 -1
  521. package/dist/redux/api/moduleApi.js.map +1 -1
  522. package/dist/redux/api/moduleApi.ts +181 -1
  523. package/dist/redux/api/solidChatterMessageApi.d.ts +2 -1
  524. package/dist/redux/api/solidChatterMessageApi.d.ts.map +1 -1
  525. package/dist/redux/api/solidChatterMessageApi.js +11 -1
  526. package/dist/redux/api/solidChatterMessageApi.js.map +1 -1
  527. package/dist/redux/api/solidChatterMessageApi.ts +10 -1
  528. package/dist/redux/store/defaultStoreConfig.d.ts +57 -9
  529. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  530. package/dist/redux/store/defaultStoreConfig.js +2 -6
  531. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  532. package/dist/redux/store/defaultStoreConfig.ts +2 -6
  533. package/dist/redux/store/solidEntityApiPool.d.ts +1 -0
  534. package/dist/redux/store/solidEntityApiPool.d.ts.map +1 -1
  535. package/dist/redux/store/solidEntityApiPool.js +4 -0
  536. package/dist/redux/store/solidEntityApiPool.js.map +1 -1
  537. package/dist/redux/store/solidEntityApiPool.ts +4 -0
  538. package/dist/resources/globals.css +163 -19
  539. package/dist/resources/shadcn-base.css +408 -183
  540. package/dist/resources/solid-responsive.css +235 -50
  541. package/dist/routes/AppEventListener.d.ts.map +1 -1
  542. package/dist/routes/AppEventListener.js +58 -8
  543. package/dist/routes/AppEventListener.js.map +1 -1
  544. package/dist/routes/AppEventListener.tsx +69 -8
  545. package/dist/routes/SolidRouteMetadataBoundary.d.ts +5 -0
  546. package/dist/routes/SolidRouteMetadataBoundary.d.ts.map +1 -0
  547. package/dist/routes/SolidRouteMetadataBoundary.js +72 -0
  548. package/dist/routes/SolidRouteMetadataBoundary.js.map +1 -0
  549. package/dist/routes/SolidRouteMetadataBoundary.tsx +77 -0
  550. package/dist/routes/pages/admin/core/DashboardPage.d.ts +1 -0
  551. package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
  552. package/dist/routes/pages/admin/core/DashboardPage.js +860 -5
  553. package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
  554. package/dist/routes/pages/admin/core/DashboardPage.module.css +219 -0
  555. package/dist/routes/pages/admin/core/DashboardPage.tsx +1025 -7
  556. package/dist/routes/solidRoutes.d.ts.map +1 -1
  557. package/dist/routes/solidRoutes.js +48 -27
  558. package/dist/routes/solidRoutes.js.map +1 -1
  559. package/dist/routes/solidRoutes.tsx +48 -27
  560. package/dist/routes/types.d.ts +8 -1
  561. package/dist/routes/types.d.ts.map +1 -1
  562. package/dist/routes/types.js.map +1 -1
  563. package/dist/routes/types.ts +9 -1
  564. package/dist/types/dashboard.d.ts +16 -0
  565. package/dist/types/dashboard.d.ts.map +1 -0
  566. package/dist/types/dashboard.js +2 -0
  567. package/dist/types/dashboard.js.map +1 -0
  568. package/dist/types/dashboard.ts +23 -0
  569. package/dist/types/extension-registry.d.ts +1 -0
  570. package/dist/types/extension-registry.d.ts.map +1 -1
  571. package/dist/types/extension-registry.js +1 -0
  572. package/dist/types/extension-registry.js.map +1 -1
  573. package/dist/types/extension-registry.ts +1 -0
  574. package/dist/types/index.d.ts +3 -0
  575. package/dist/types/jsoneditor.d.ts +4 -0
  576. package/dist/types/solid-core.d.ts +1 -0
  577. package/package.json +4 -1
@@ -1,14 +1,1032 @@
1
- import SolidDashboard from '../../../../components/core/dashboard/SolidDashboard'
2
- import { useParams, useSearchParams } from "react-router-dom";
1
+ import { useEffect, useMemo, useRef, useState } from "react";
2
+ import { useParams } from "react-router-dom";
3
+ import { AlertTriangle, Filter, RefreshCw, Save } from "lucide-react";
4
+ import { GridStack, type GridStackNode } from "gridstack";
5
+ import "gridstack/dist/gridstack.min.css";
6
+ import { getExtensionComponent } from "../../../../helpers/registry";
7
+ import {
8
+ SolidAutocomplete,
9
+ SolidButton,
10
+ SolidDatePicker,
11
+ SolidDialog,
12
+ SolidDialogBody,
13
+ SolidDialogFooter,
14
+ SolidSelect,
15
+ SolidSpinner,
16
+ } from "../../../../components/shad-cn-ui";
17
+ import { resolveChartType } from "../../../../components/core/dashboard/mappers/echartsOptionMapper";
18
+ import {
19
+ useGetDashboardDataMutation,
20
+ useGetDashboardDefinitionQuery,
21
+ useGetDashboardLayoutQuery,
22
+ useLazyGetDashboardVariableOptionsQuery,
23
+ useSaveDashboardLayoutMutation,
24
+ } from "../../../../redux/api/dashboardRuntimeApi";
25
+ import type { DashboardGridLayoutItem, DashboardWidgetComponentProps } from "../../../../types/dashboard";
26
+ import styles from "./DashboardPage.module.css";
27
+
28
+ type Option = {
29
+ label: string;
30
+ value: string;
31
+ };
32
+
33
+ type DateRangeValue = {
34
+ start: Date | null;
35
+ end: Date | null;
36
+ preset?: string;
37
+ };
38
+
39
+ type DashboardVariableValue = string | string[] | DateRangeValue | null | undefined;
40
+
41
+ const normalizeType = (value: unknown): string => `${value ?? ""}`.toLowerCase();
42
+
43
+ const isDateRangeVariable = (variable: any): boolean => {
44
+ const type = normalizeType(variable?.type);
45
+ return type === "date" || type === "daterange" || type === "date_range";
46
+ };
47
+
48
+ const isDynamicVariable = (variable: any): boolean => {
49
+ const type = normalizeType(variable?.type);
50
+ return type === "selectiondynamic" || type === "dynamicselect" || type === "selectdynamic";
51
+ };
52
+
53
+ const isStaticVariable = (variable: any): boolean => {
54
+ const type = normalizeType(variable?.type);
55
+ return type === "selectionstatic" || type === "select" || type === "multiselect";
56
+ };
57
+
58
+ const isMultiValueVariable = (variable: any): boolean => {
59
+ const type = normalizeType(variable?.type);
60
+ return type === "multiselect" || !!variable?.multiple || !!variable?.allowMultiple || !!variable?.isMultiSelect;
61
+ };
62
+
63
+ const toOptions = (options: any[]): Option[] =>
64
+ (options ?? [])
65
+ .map((entry: any) => {
66
+ if (typeof entry === "string") {
67
+ const [value, label] = entry.split(":");
68
+ return { value, label: label ?? value };
69
+ }
70
+ return {
71
+ value: `${entry?.value ?? entry?.id ?? ""}`,
72
+ label: `${entry?.label ?? entry?.name ?? entry?.displayName ?? entry?.value ?? entry?.id ?? ""}`,
73
+ };
74
+ })
75
+ .filter((entry) => !!entry.value);
76
+
77
+ const toIso = (value: Date | null | undefined): string | null => {
78
+ if (!value || Number.isNaN(value.getTime())) return null;
79
+ return value.toISOString();
80
+ };
81
+
82
+ const extractWidgetName = (widgetData: any): string =>
83
+ widgetData?.meta?.widgetName ?? widgetData?.widgetName ?? widgetData?.id ?? "";
84
+
85
+ const sortLayoutItems = (items: DashboardGridLayoutItem[]): DashboardGridLayoutItem[] =>
86
+ [...(items ?? [])].sort((a, b) => {
87
+ const byY = (a?.y ?? 0) - (b?.y ?? 0);
88
+ if (byY !== 0) return byY;
89
+ return (a?.x ?? 0) - (b?.x ?? 0);
90
+ });
91
+
92
+ const MOBILE_DASHBOARD_BREAKPOINT = 960;
93
+ const TABLET_DASHBOARD_BREAKPOINT = 1280;
94
+
95
+ const getResponsiveDashboardColumns = (viewportWidth: number, baseColumns: number): number => {
96
+ const safeBaseColumns = Math.max(1, baseColumns || 1);
97
+ if (viewportWidth < MOBILE_DASHBOARD_BREAKPOINT) return 1;
98
+ if (viewportWidth < TABLET_DASHBOARD_BREAKPOINT) return Math.min(6, safeBaseColumns);
99
+ return safeBaseColumns;
100
+ };
101
+
102
+ const compactLayoutItemsForColumns = (items: DashboardGridLayoutItem[],sourceColumns: number,targetColumns: number): DashboardGridLayoutItem[] => {
103
+ const normalizedSourceColumns = Math.max(1, sourceColumns || 1);
104
+ const normalizedTargetColumns = Math.max(1, targetColumns || 1);
105
+
106
+ if (normalizedTargetColumns >= normalizedSourceColumns) {
107
+ return sortLayoutItems(items);
108
+ }
109
+
110
+ const sortedItems = sortLayoutItems(items);
111
+ const compactedItems: DashboardGridLayoutItem[] = [];
112
+ let cursorX = 0;
113
+ let cursorY = 0;
114
+ let rowHeight = 0;
115
+
116
+ sortedItems.forEach((item) => {
117
+ const widthRatio = normalizedSourceColumns > 0 ? (item.w ?? 1) / normalizedSourceColumns : 1;
118
+ const sourceHeight = Math.max(1, item.h ?? 1);
119
+ const nextWidth =
120
+ normalizedTargetColumns === 1
121
+ ? 1
122
+ : Math.max(
123
+ 1,
124
+ Math.min(
125
+ normalizedTargetColumns,
126
+ item.w >= normalizedSourceColumns ? normalizedTargetColumns : Math.round(widthRatio * normalizedTargetColumns)
127
+ )
128
+ );
129
+ const nextHeight = normalizedTargetColumns === 1 && sourceHeight <= 2 ? 1 : sourceHeight;
130
+
131
+ if (cursorX > 0 && cursorX + nextWidth > normalizedTargetColumns) {
132
+ cursorY += Math.max(rowHeight, 1);
133
+ cursorX = 0;
134
+ rowHeight = 0;
135
+ }
136
+
137
+ const scaledMinWidth =
138
+ item.minW !== undefined
139
+ ? Math.max(
140
+ 1,
141
+ Math.min(
142
+ nextWidth,
143
+ Math.round((Math.max(item.minW, 1) / normalizedSourceColumns) * normalizedTargetColumns) || 1
144
+ )
145
+ )
146
+ : undefined;
147
+ const scaledMinHeight =
148
+ item.minH !== undefined
149
+ ? Math.max(1, Math.min(nextHeight, Math.max(item.minH, 1)))
150
+ : undefined;
151
+
152
+ const normalizedItem: DashboardGridLayoutItem = {
153
+ ...item,
154
+ x: cursorX,
155
+ y: cursorY,
156
+ w: nextWidth,
157
+ h: nextHeight,
158
+ minW: scaledMinWidth,
159
+ minH: scaledMinHeight,
160
+ };
161
+
162
+ compactedItems.push(normalizedItem);
163
+ cursorX += nextWidth;
164
+ rowHeight = Math.max(rowHeight, nextHeight);
165
+
166
+ if (cursorX >= normalizedTargetColumns) {
167
+ cursorY += Math.max(rowHeight, 1);
168
+ cursorX = 0;
169
+ rowHeight = 0;
170
+ }
171
+ });
172
+
173
+ return compactedItems;
174
+ };
175
+
176
+ const toLayoutItems = (items: any[]): DashboardGridLayoutItem[] =>
177
+ (items ?? [])
178
+ .filter((item) => !!(item?.widgetId ?? item?.id))
179
+ .map((item) => ({
180
+ widgetId: item?.widgetId ?? item?.id,
181
+ x: Number(item?.x ?? 0),
182
+ y: Number(item?.y ?? 0),
183
+ w: Number(item?.w ?? 4),
184
+ h: Number(item?.h ?? 3),
185
+ minW: item?.minW !== undefined ? Number(item?.minW) : undefined,
186
+ minH: item?.minH !== undefined ? Number(item?.minH) : undefined,
187
+ }));
188
+
189
+ const getAllLayoutItemsFromGrid = (grid: GridStack | null): DashboardGridLayoutItem[] => {
190
+ if (!grid) return [];
191
+ const snapshot = grid.save(false, false, (node: any, widget: any) => {
192
+ if (!widget.id) {
193
+ widget.id =
194
+ node?.id ??
195
+ node?.el?.getAttribute?.("gs-id") ??
196
+ node?.el?.getAttribute?.("id") ??
197
+ "";
198
+ }
199
+ });
200
+ const widgets = Array.isArray(snapshot) ? snapshot : [];
201
+ const fromSave = toLayoutItems(
202
+ widgets.map((item: any) => ({
203
+ widgetId: item?.id ?? item?.widgetId,
204
+ x: item?.x,
205
+ y: item?.y,
206
+ w: item?.w ?? item?.width,
207
+ h: item?.h ?? item?.height,
208
+ minW: item?.minW,
209
+ minH: item?.minH,
210
+ }))
211
+ );
212
+
213
+ if (fromSave.length > 0) return fromSave;
214
+
215
+ const nodes = Array.isArray((grid as any)?.engine?.nodes) ? (grid as any).engine.nodes : [];
216
+ return toLayoutItems(
217
+ nodes.map((node: any) => ({
218
+ widgetId:
219
+ node?.id ??
220
+ node?.el?.getAttribute?.("gs-id") ??
221
+ node?.el?.getAttribute?.("id"),
222
+ x: node?.x,
223
+ y: node?.y,
224
+ w: node?.w ?? node?.width,
225
+ h: node?.h ?? node?.height,
226
+ minW: node?.minW,
227
+ minH: node?.minH,
228
+ }))
229
+ );
230
+ };
231
+
232
+ const resolveDefaultDashboardWidgetComponentName = (definition: any, runtime: any): string => {
233
+ const runtimeData = runtime?.data ?? runtime ?? {};
234
+ if (runtimeData?.value !== undefined) return "DefaultDashboardKpiWidget";
235
+ if (Array.isArray(runtimeData?.columns) && Array.isArray(runtimeData?.records)) return "DefaultDashboardTableWidget";
236
+
237
+ const chartType = resolveChartType(definition);
238
+ if (chartType === "line") return "DefaultDashboardLineChartWidget";
239
+ if (chartType === "bar") return "DefaultDashboardBarChartWidget";
240
+ if (chartType === "pie") return "DefaultDashboardPieChartWidget";
241
+ return "DefaultDashboardUnknownWidget";
242
+ };
243
+
244
+ const getPreferredWidgetComponentName = (definition: any, runtime: any): string => {
245
+ const explicit =
246
+ definition?.componentName ??
247
+ definition?.widgetComponentName ??
248
+ definition?.renderer?.componentName ??
249
+ definition?.ui?.componentName;
250
+ return explicit || resolveDefaultDashboardWidgetComponentName(definition, runtime);
251
+ };
252
+
253
+ const notifyDashboardChartsToResize = () => {
254
+ if (typeof window === "undefined") return;
255
+ window.requestAnimationFrame(() => {
256
+ window.dispatchEvent(new Event("resize"));
257
+ });
258
+ };
259
+
260
+ const resolvePresetRange = (preset: string | undefined): DateRangeValue => {
261
+ if (!preset) return { start: null, end: null };
262
+ const now = new Date();
263
+ const end = new Date(now);
264
+
265
+ if (preset === "today") {
266
+ const start = new Date(now);
267
+ start.setHours(0, 0, 0, 0);
268
+ return { start, end };
269
+ }
270
+
271
+ if (preset === "last_24_hours") {
272
+ const start = new Date(now);
273
+ start.setHours(start.getHours() - 24);
274
+ return { start, end };
275
+ }
276
+
277
+ if (preset === "last_7_days") {
278
+ const start = new Date(now);
279
+ start.setDate(start.getDate() - 7);
280
+ return { start, end };
281
+ }
282
+
283
+ if (preset === "last_30_days") {
284
+ const start = new Date(now);
285
+ start.setDate(start.getDate() - 30);
286
+ return { start, end };
287
+ }
288
+
289
+ return { start: null, end: null };
290
+ };
291
+
292
+ const parseDateValue = (value: any): Date | null => {
293
+ if (!value) return null;
294
+ const date = new Date(value);
295
+ return Number.isNaN(date.getTime()) ? null : date;
296
+ };
297
+
298
+ const getDatePresetOptions = (variable: any): Option[] => {
299
+ const metadataPresets = variable?.presetValues ?? variable?.presets ?? variable?.datePresets;
300
+ const builtIns: Option[] = [
301
+ { value: "today", label: "Today" },
302
+ { value: "last_24_hours", label: "Last 24 Hours" },
303
+ { value: "last_7_days", label: "Last 7 Days" },
304
+ { value: "last_30_days", label: "Last 30 Days" },
305
+ ];
306
+
307
+ const source = Array.isArray(metadataPresets) && metadataPresets.length ? metadataPresets : builtIns;
308
+ const normalized = source
309
+ .map((entry: any) => {
310
+ if (typeof entry === "string") {
311
+ const [value, label] = entry.split(":");
312
+ const cleaned = `${value ?? ""}`.trim();
313
+ if (!cleaned) return null;
314
+ return { value: cleaned, label: `${label ?? cleaned}` };
315
+ }
316
+ const value = `${entry?.value ?? entry?.id ?? ""}`.trim();
317
+ if (!value) return null;
318
+ const label = `${entry?.label ?? entry?.displayName ?? value}`;
319
+ return { value, label };
320
+ })
321
+ .filter(Boolean) as Option[];
322
+
323
+ if (!normalized.find((entry) => entry.value === "custom")) {
324
+ normalized.push({ value: "custom", label: "Custom" });
325
+ }
326
+ return normalized;
327
+ };
328
+
329
+ const buildDefaultFilterValues = (variables: any[]): Record<string, DashboardVariableValue> => {
330
+ const defaults: Record<string, DashboardVariableValue> = {};
331
+
332
+ variables.forEach((variable: any) => {
333
+ const name = variable?.name;
334
+ if (!name) return;
335
+
336
+ if (isDateRangeVariable(variable)) {
337
+ const presetRange = resolvePresetRange(variable?.defaultValue?.preset ?? variable?.defaultValuePreset);
338
+ const start = parseDateValue(variable?.defaultValue?.start ?? variable?.defaultValue?.from) ?? presetRange.start;
339
+ const end = parseDateValue(variable?.defaultValue?.end ?? variable?.defaultValue?.to) ?? presetRange.end;
340
+ const preset =
341
+ `${variable?.defaultValue?.preset ?? variable?.defaultValuePreset ?? ""}`.trim() ||
342
+ (start || end ? "custom" : "custom");
343
+ defaults[name] = { start, end, preset };
344
+ return;
345
+ }
346
+
347
+ if (isMultiValueVariable(variable)) {
348
+ const base = variable?.defaultValue;
349
+ defaults[name] = Array.isArray(base) ? base.map((entry: any) => `${entry}`) : [];
350
+ return;
351
+ }
352
+
353
+ if (variable?.defaultValue !== undefined && variable?.defaultValue !== null) {
354
+ defaults[name] = `${variable.defaultValue}`;
355
+ return;
356
+ }
357
+
358
+ defaults[name] = "";
359
+ });
360
+
361
+ return defaults;
362
+ };
363
+
364
+ const buildClearedFilterValues = (variables: any[]): Record<string, DashboardVariableValue> => {
365
+ const cleared: Record<string, DashboardVariableValue> = {};
366
+
367
+ variables.forEach((variable: any) => {
368
+ const name = variable?.name;
369
+ if (!name) return;
370
+
371
+ if (isDateRangeVariable(variable)) {
372
+ cleared[name] = { start: null, end: null, preset: "custom" };
373
+ return;
374
+ }
375
+
376
+ if (isMultiValueVariable(variable)) {
377
+ cleared[name] = [];
378
+ return;
379
+ }
380
+
381
+ cleared[name] = "";
382
+ });
383
+
384
+ return cleared;
385
+ };
386
+
387
+ const isFilterValueApplied = (variable: any, value: DashboardVariableValue): boolean => {
388
+ if (isDateRangeVariable(variable)) {
389
+ const range = value as DateRangeValue | undefined;
390
+ return !!range?.start || !!range?.end;
391
+ }
392
+
393
+ if (isMultiValueVariable(variable)) {
394
+ return Array.isArray(value) && value.length > 0;
395
+ }
396
+
397
+ return value !== undefined && value !== null && `${value}`.trim() !== "";
398
+ };
399
+
400
+ const isSameFilterValue = (variable: any, left: DashboardVariableValue, right: DashboardVariableValue): boolean => {
401
+ if (isDateRangeVariable(variable)) {
402
+ const leftRange = (left as DateRangeValue | undefined) ?? { start: null, end: null };
403
+ const rightRange = (right as DateRangeValue | undefined) ?? { start: null, end: null };
404
+ return toIso(leftRange.start) === toIso(rightRange.start) && toIso(leftRange.end) === toIso(rightRange.end);
405
+ }
406
+
407
+ if (isMultiValueVariable(variable)) {
408
+ const leftArr = Array.isArray(left) ? left.map((v) => `${v}`).sort() : [];
409
+ const rightArr = Array.isArray(right) ? right.map((v) => `${v}`).sort() : [];
410
+ if (leftArr.length !== rightArr.length) return false;
411
+ return leftArr.every((value, index) => value === rightArr[index]);
412
+ }
413
+
414
+ return `${left ?? ""}` === `${right ?? ""}`;
415
+ };
416
+
417
+ const getDashboardTitle = (definition: any, fallback: string) =>
418
+ definition?.displayName ?? definition?.title ?? definition?.name ?? fallback;
419
+
420
+ const getWidgetTitle = (widget: any, fallback: string) =>
421
+ widget?.displayName ?? widget?.title ?? widget?.name ?? fallback;
422
+
423
+ const isUnauthorizedWidgetRuntime = (runtime: any): boolean =>
424
+ !!(runtime?.meta?.unauthorized || runtime?.uiHints?.state === "unauthorized");
3
425
 
4
426
  export function DashboardPage() {
5
- const params = useParams();
427
+ const params = useParams();
428
+ const moduleName = params.moduleName ?? "";
429
+ const dashboardName = params.dashboardName ?? "";
430
+ const gridRef = useRef<HTMLDivElement | null>(null);
431
+ const gridInstanceRef = useRef<GridStack | null>(null);
432
+
433
+ const { data: definition, isLoading: definitionLoading } = useGetDashboardDefinitionQuery(
434
+ { moduleName, dashboardName },
435
+ { skip: !moduleName || !dashboardName }
436
+ );
437
+
438
+ const { data: layoutData } = useGetDashboardLayoutQuery(
439
+ { moduleName, dashboardName },
440
+ { skip: !moduleName || !dashboardName }
441
+ );
442
+
443
+ const [getDashboardData, { data: dashboardData, isLoading: dataLoading, error: dataError }] = useGetDashboardDataMutation();
444
+ const [saveDashboardLayout, { isLoading: saveLayoutLoading }] = useSaveDashboardLayoutMutation();
445
+ const [getVariableOptions] = useLazyGetDashboardVariableOptionsQuery();
446
+
447
+ const [appliedVariableValues, setAppliedVariableValues] = useState<Record<string, DashboardVariableValue>>({});
448
+ const [filterDraftValues, setFilterDraftValues] = useState<Record<string, DashboardVariableValue>>({});
449
+ const [dynamicOptions, setDynamicOptions] = useState<Record<string, Option[]>>({});
450
+ const [draftLayoutItems, setDraftLayoutItems] = useState<DashboardGridLayoutItem[] | null>(null);
451
+ const [isFilterDialogOpen, setIsFilterDialogOpen] = useState(false);
452
+ const [viewportWidth, setViewportWidth] = useState<number>(() =>
453
+ typeof window === "undefined" ? TABLET_DASHBOARD_BREAKPOINT : window.innerWidth
454
+ );
455
+ const bootstrappedRef = useRef(false);
456
+
457
+ const variables = useMemo(() => (Array.isArray(definition?.variables) ? definition.variables : []), [definition]);
458
+ const definitionWidgets = useMemo(() => (Array.isArray(definition?.widgets) ? definition.widgets : []), [definition]);
459
+ const effectiveLayoutItems = useMemo(() => toLayoutItems(layoutData?.effectiveLayout?.items ?? []), [layoutData]);
460
+ const gridColumns = Number(layoutData?.effectiveLayout?.columns ?? 12) || 12;
461
+ const activeGridColumns = useMemo(
462
+ () => getResponsiveDashboardColumns(viewportWidth, gridColumns),
463
+ [gridColumns, viewportWidth]
464
+ );
465
+ const isCompactLayout = activeGridColumns !== gridColumns;
466
+
467
+ const defaultFilterValues = useMemo(() => buildDefaultFilterValues(variables), [variables]);
468
+
469
+ useEffect(() => {
470
+ const handleViewportResize = () => {
471
+ setViewportWidth(window.innerWidth);
472
+ };
473
+
474
+ handleViewportResize();
475
+ window.addEventListener("resize", handleViewportResize);
476
+ return () => window.removeEventListener("resize", handleViewportResize);
477
+ }, []);
478
+
479
+ useEffect(() => {
480
+ if (!definition || bootstrappedRef.current) return;
481
+ setAppliedVariableValues(defaultFilterValues);
482
+ setFilterDraftValues(defaultFilterValues);
483
+ bootstrappedRef.current = true;
484
+ }, [definition, defaultFilterValues]);
485
+
486
+ useEffect(() => {
487
+ if (!isFilterDialogOpen) return;
488
+ setFilterDraftValues(appliedVariableValues);
489
+ }, [appliedVariableValues, isFilterDialogOpen]);
490
+
491
+ useEffect(() => {
492
+ if (!moduleName || !dashboardName || variables.length === 0) return;
493
+ const dynamicVariables = variables.filter((variable: any) => isDynamicVariable(variable));
494
+ dynamicVariables.forEach((variable: any) => {
495
+ const variableName = variable?.name;
496
+ if (!variableName) return;
497
+ void getVariableOptions({ moduleName, dashboardName, variableName, limit: 100 })
498
+ .unwrap()
499
+ .then((response) => {
500
+ setDynamicOptions((prev) => ({ ...prev, [variableName]: toOptions(Array.isArray(response) ? response : []) }));
501
+ })
502
+ .catch(() => {
503
+ setDynamicOptions((prev) => ({ ...prev, [variableName]: [] }));
504
+ });
505
+ });
506
+ }, [dashboardName, getVariableOptions, moduleName, variables]);
507
+
508
+ const handleDynamicOptionsSearch = async (variableName: string, query: string) => {
509
+ if (!moduleName || !dashboardName || !variableName) return;
510
+ try {
511
+ const response = await getVariableOptions({ moduleName, dashboardName, variableName, query, limit: 100 }).unwrap();
512
+ setDynamicOptions((prev) => ({ ...prev, [variableName]: toOptions(Array.isArray(response) ? response : []) }));
513
+ } catch {
514
+ setDynamicOptions((prev) => ({ ...prev, [variableName]: [] }));
515
+ }
516
+ };
517
+
518
+ useEffect(() => {
519
+ if (!bootstrappedRef.current || !moduleName || !dashboardName) return;
520
+ void handleRefresh(appliedVariableValues);
521
+ // eslint-disable-next-line react-hooks/exhaustive-deps
522
+ }, [moduleName, dashboardName, bootstrappedRef.current]);
523
+
524
+ const widgetDefinitionMap = useMemo(() => {
525
+ const map = new Map<string, any>();
526
+ definitionWidgets.forEach((widget: any) => {
527
+ if (widget?.id) map.set(widget.id, widget);
528
+ if (widget?.name) map.set(widget.name, widget);
529
+ });
530
+ return map;
531
+ }, [definitionWidgets]);
532
+
533
+ const widgetDataMap = useMemo(() => {
534
+ const map = new Map<string, any>();
535
+ const rows = Array.isArray(dashboardData?.widgets) ? dashboardData.widgets : [];
536
+ rows.forEach((row: any) => {
537
+ const name = extractWidgetName(row);
538
+ if (name) map.set(name, row);
539
+ });
540
+ return map;
541
+ }, [dashboardData]);
542
+
543
+ const orderedWidgets = useMemo(() => {
544
+ const layoutItems = sortLayoutItems(effectiveLayoutItems);
545
+ if (!layoutItems.length) return definitionWidgets;
546
+
547
+ const seen = new Set<string>();
548
+ const arranged: any[] = [];
549
+ layoutItems.forEach((item: DashboardGridLayoutItem) => {
550
+ const key = item?.widgetId;
551
+ const definitionWidget = widgetDefinitionMap.get(key);
552
+ if (!definitionWidget || seen.has(key)) return;
553
+ arranged.push(definitionWidget);
554
+ seen.add(key);
555
+ });
556
+
557
+ definitionWidgets.forEach((widget: any) => {
558
+ const key = widget?.id ?? widget?.name;
559
+ if (!key || seen.has(key)) return;
560
+ arranged.push(widget);
561
+ });
562
+
563
+ return arranged;
564
+ }, [definitionWidgets, effectiveLayoutItems, widgetDefinitionMap]);
565
+
566
+ const widgetLayoutMap = useMemo(() => {
567
+ const map = new Map<string, DashboardGridLayoutItem>();
568
+ effectiveLayoutItems.forEach((item) => map.set(item.widgetId, item));
569
+ return map;
570
+ }, [effectiveLayoutItems]);
571
+
572
+ const baseLayoutItems = useMemo(() => {
573
+ if (effectiveLayoutItems.length) return effectiveLayoutItems;
574
+ return orderedWidgets.map((widget: any, index: number) => ({
575
+ widgetId: widget?.id ?? widget?.name ?? `widget-${index}`,
576
+ x: 0,
577
+ y: index * 3,
578
+ w: 4,
579
+ h: 3,
580
+ }));
581
+ }, [effectiveLayoutItems, orderedWidgets]);
582
+
583
+ const renderedLayoutItems = useMemo(
584
+ () =>
585
+ compactLayoutItemsForColumns(
586
+ baseLayoutItems,
587
+ gridColumns,
588
+ activeGridColumns
589
+ ),
590
+ [activeGridColumns, baseLayoutItems, gridColumns]
591
+ );
592
+
593
+ const renderedWidgetLayoutMap = useMemo(() => {
594
+ const map = new Map<string, DashboardGridLayoutItem>();
595
+ renderedLayoutItems.forEach((item) => map.set(item.widgetId, item));
596
+ return map;
597
+ }, [renderedLayoutItems]);
598
+
599
+ const appliedFilterCount = useMemo(() => {
600
+ return variables.reduce((count: number, variable: any) => {
601
+ const name = variable?.name;
602
+ if (!name) return count;
603
+ const value = appliedVariableValues[name];
604
+ const defaultValue = defaultFilterValues[name];
605
+ if (!isFilterValueApplied(variable, value)) return count;
606
+ return isSameFilterValue(variable, value, defaultValue) ? count : count + 1;
607
+ }, 0);
608
+ }, [appliedVariableValues, defaultFilterValues, variables]);
609
+
610
+ useEffect(() => {
611
+ if (!gridRef.current || orderedWidgets.length === 0) return;
612
+
613
+ if (gridInstanceRef.current) {
614
+ gridInstanceRef.current.destroy(false);
615
+ gridInstanceRef.current = null;
616
+ }
617
+
618
+ const initialLayout: DashboardGridLayoutItem[] = renderedLayoutItems.length ? renderedLayoutItems : baseLayoutItems;
619
+
620
+ const gridWidgets = initialLayout.map((item: DashboardGridLayoutItem) => ({
621
+ id: item.widgetId,
622
+ x: item.x,
623
+ y: item.y,
624
+ w: item.w,
625
+ h: item.h,
626
+ minW: item.minW,
627
+ minH: item.minH,
628
+ }));
629
+
630
+ const instance = GridStack.init(
631
+ {
632
+ column: activeGridColumns,
633
+ cellHeight: activeGridColumns === 1 ? 90 : 92,
634
+ margin: activeGridColumns === 1 ? 10 : 8,
635
+ float: true,
636
+ disableDrag: isCompactLayout,
637
+ disableResize: isCompactLayout,
638
+ },
639
+ gridRef.current
640
+ );
641
+
642
+ // React renders the DOM; make sure Gridstack converts every item node to a widget,
643
+ // then explicitly apply layout from API to avoid attribute-parsing or timing issues.
644
+ instance.batchUpdate();
645
+ const domItems = Array.from(gridRef.current.querySelectorAll(".grid-stack-item")) as HTMLElement[];
646
+ domItems.forEach((itemEl) => {
647
+ if (!(itemEl as any).gridstackNode) {
648
+ instance.makeWidget(itemEl as any);
649
+ }
650
+ });
651
+ instance.column(activeGridColumns, "none");
652
+ instance.load(gridWidgets as any, false);
653
+ instance.batchUpdate(false);
654
+ notifyDashboardChartsToResize();
655
+ window.setTimeout(notifyDashboardChartsToResize, 60);
656
+
657
+ instance.on("change", (_event: Event, _items: GridStackNode[]) => {
658
+ const normalized = getAllLayoutItemsFromGrid(instance);
659
+ setDraftLayoutItems(normalized);
660
+ notifyDashboardChartsToResize();
661
+ });
662
+ instance.on("resizestop", () => notifyDashboardChartsToResize());
663
+ instance.on("dragstop", () => notifyDashboardChartsToResize());
664
+
665
+ gridInstanceRef.current = instance;
666
+ return () => {
667
+ instance.destroy(false);
668
+ if (gridInstanceRef.current === instance) gridInstanceRef.current = null;
669
+ };
670
+ }, [activeGridColumns, baseLayoutItems, isCompactLayout, orderedWidgets, renderedLayoutItems]);
671
+
672
+ const handleDraftVariableChange = (variableName: string, value: DashboardVariableValue) => {
673
+ setFilterDraftValues((prev) => ({ ...prev, [variableName]: value }));
674
+ };
675
+
676
+ const buildPayloadVariables = (values: Record<string, DashboardVariableValue>): Record<string, any> => {
677
+ const payload: Record<string, any> = {};
678
+ variables.forEach((variable: any) => {
679
+ const name = variable?.name;
680
+ if (!name) return;
681
+ const value = values[name];
682
+
683
+ if (isDateRangeVariable(variable)) {
684
+ const range = value as DateRangeValue | undefined;
685
+ const from = toIso(range?.start ?? null);
686
+ const to = toIso(range?.end ?? null);
687
+ if (!from && !to) return;
688
+ payload[name] = { from, to };
689
+ return;
690
+ }
691
+
692
+ if (isMultiValueVariable(variable)) {
693
+ const list = Array.isArray(value) ? value.filter(Boolean) : [];
694
+ if (!list.length) return;
695
+ payload[name] = list;
696
+ return;
697
+ }
698
+
699
+ if (value === undefined || value === null || value === "") return;
700
+ payload[name] = value;
701
+ });
702
+ return payload;
703
+ };
704
+
705
+ async function handleRefresh(values = appliedVariableValues) {
706
+ if (!moduleName || !dashboardName) return;
707
+ await getDashboardData({
708
+ moduleName,
709
+ dashboardName,
710
+ variables: buildPayloadVariables(values),
711
+ }).unwrap();
712
+ }
713
+
714
+ async function handleApplyFilters() {
715
+ const nextValues = { ...filterDraftValues };
716
+ setAppliedVariableValues(nextValues);
717
+ setIsFilterDialogOpen(false);
718
+ await handleRefresh(nextValues);
719
+ }
720
+
721
+ async function handleClearFilters() {
722
+ const clearedValues = buildClearedFilterValues(variables);
723
+ setFilterDraftValues(clearedValues);
724
+ setAppliedVariableValues(clearedValues);
725
+ setIsFilterDialogOpen(false);
726
+ await handleRefresh(clearedValues);
727
+ }
728
+
729
+ async function handleSaveLayout() {
730
+ if (!moduleName || !dashboardName) return;
731
+ if (isCompactLayout) return;
732
+ const liveGridLayout = getAllLayoutItemsFromGrid(gridInstanceRef.current);
733
+ const baseLayout = effectiveLayoutItems.length ? effectiveLayoutItems : [];
734
+ const items = liveGridLayout.length
735
+ ? liveGridLayout
736
+ : draftLayoutItems && draftLayoutItems.length
737
+ ? draftLayoutItems
738
+ : baseLayout;
739
+
740
+ await saveDashboardLayout({
741
+ moduleName,
742
+ dashboardName,
743
+ layout: {
744
+ engine: "gridstack",
745
+ columns: gridColumns,
746
+ items,
747
+ },
748
+ }).unwrap();
749
+
750
+ setDraftLayoutItems(null);
751
+ }
752
+
753
+ const renderVariable = (variable: any) => {
754
+ const variableName = variable?.name;
755
+ if (!variableName) return null;
756
+
757
+ const value = filterDraftValues[variableName];
758
+ const label = variable?.displayName ?? variable?.label ?? variableName;
759
+
760
+ if (isDateRangeVariable(variable)) {
761
+ const range = (value as DateRangeValue | undefined) ?? { start: null, end: null };
762
+ const presetOptions = getDatePresetOptions(variable);
763
+ const preset = range?.preset && presetOptions.some((entry) => entry.value === range.preset) ? range.preset : "custom";
764
+ return (
765
+ <div key={variableName} className={styles.filterField}>
766
+ <label className={styles.filterLabel}>{label}</label>
767
+ <SolidSelect
768
+ value={preset}
769
+ options={presetOptions}
770
+ optionLabel="label"
771
+ optionValue="value"
772
+ placeholder={`Select ${label} preset`}
773
+ onChange={(event) => {
774
+ const selectedPreset = `${event?.value ?? "custom"}`;
775
+ if (selectedPreset === "custom") {
776
+ handleDraftVariableChange(variableName, {
777
+ start: range.start ?? null,
778
+ end: range.end ?? null,
779
+ preset: "custom",
780
+ });
781
+ return;
782
+ }
783
+ const nextRange = resolvePresetRange(selectedPreset);
784
+ handleDraftVariableChange(variableName, {
785
+ start: nextRange.start ?? null,
786
+ end: nextRange.end ?? null,
787
+ preset: selectedPreset,
788
+ });
789
+ }}
790
+ />
791
+ {preset === "custom" ? (
792
+ <div className={styles.dateRange}>
793
+ <SolidDatePicker
794
+ selected={range.start ?? null}
795
+ inputClassName="w-full"
796
+ onChange={(next: Date | null) =>
797
+ handleDraftVariableChange(variableName, {
798
+ start: next ?? null,
799
+ end: range.end ?? null,
800
+ preset: "custom",
801
+ })
802
+ }
803
+ placeholderText="Start date"
804
+ dateFormat="yyyy-MM-dd"
805
+ />
806
+ <SolidDatePicker
807
+ selected={range.end ?? null}
808
+ inputClassName="w-full"
809
+ onChange={(next: Date | null) =>
810
+ handleDraftVariableChange(variableName, {
811
+ start: range.start ?? null,
812
+ end: next ?? null,
813
+ preset: "custom",
814
+ })
815
+ }
816
+ placeholderText="End date"
817
+ dateFormat="yyyy-MM-dd"
818
+ />
819
+ </div>
820
+ ) : null}
821
+ </div>
822
+ );
823
+ }
824
+
825
+ if (isMultiValueVariable(variable)) {
826
+ const baseOptions = isDynamicVariable(variable)
827
+ ? (dynamicOptions[variableName] ?? [])
828
+ : toOptions(variable?.selectionStaticValues ?? variable?.options ?? []);
829
+ const selectedValues = Array.isArray(value) ? value : [];
830
+ return (
831
+ <div key={variableName} className={styles.filterField}>
832
+ <label className={styles.filterLabel}>{label}</label>
833
+ <SolidAutocomplete
834
+ multiple
835
+ dropdown
836
+ field="label"
837
+ className="w-full"
838
+ inputClassName="w-full"
839
+ value={baseOptions.filter((option) => selectedValues.includes(option.value))}
840
+ suggestions={baseOptions}
841
+ completeMethod={() => Promise.resolve()}
842
+ placeholder={`Select ${label}`}
843
+ onChange={(event: { value: any }) => {
844
+ const selected = Array.isArray(event?.value)
845
+ ? event.value
846
+ .map((entry: any) => `${entry?.value ?? entry?.id ?? entry ?? ""}`)
847
+ .filter((entry: string) => !!entry)
848
+ : [];
849
+ handleDraftVariableChange(variableName, selected);
850
+ }}
851
+ />
852
+ </div>
853
+ );
854
+ }
855
+
856
+ if (isDynamicVariable(variable)) {
857
+ const options = dynamicOptions[variableName] ?? [];
858
+ const selectedValue = typeof value === "string" ? value : "";
859
+ const selectedOption = options.find((entry) => `${entry.value}` === selectedValue) ?? null;
860
+
861
+ return (
862
+ <div key={variableName} className={styles.filterField}>
863
+ <label className={styles.filterLabel}>{label}</label>
864
+ <SolidAutocomplete
865
+ dropdown
866
+ field="label"
867
+ className="w-full"
868
+ inputClassName="w-full"
869
+ value={selectedOption}
870
+ suggestions={options}
871
+ completeMethod={({ query }) => handleDynamicOptionsSearch(variableName, query)}
872
+ placeholder={`Select ${label}`}
873
+ onChange={(event: { value: any }) => {
874
+ const selected = event?.value;
875
+ const nextValue = selected?.value ?? selected?.id ?? "";
876
+ handleDraftVariableChange(variableName, nextValue ? `${nextValue}` : "");
877
+ }}
878
+ />
879
+ </div>
880
+ );
881
+ }
882
+
883
+ const options = isDynamicVariable(variable)
884
+ ? (dynamicOptions[variableName] ?? [])
885
+ : isStaticVariable(variable)
886
+ ? toOptions(variable?.selectionStaticValues ?? variable?.options ?? [])
887
+ : [];
6
888
 
7
- const dashboardName = params.dashboardName;
8
- const moduleName = params.moduleName as string;
9
889
  return (
10
- <div>
11
- <SolidDashboard moduleName={moduleName} dashboardName={dashboardName} />
890
+ <div key={variableName} className={styles.filterField}>
891
+ <label className={styles.filterLabel}>{label}</label>
892
+ <SolidSelect
893
+ value={typeof value === "string" ? value : ""}
894
+ options={options}
895
+ optionLabel="label"
896
+ optionValue="value"
897
+ placeholder={`Select ${label}`}
898
+ onChange={(event) => handleDraftVariableChange(variableName, event.value ? `${event.value}` : "")}
899
+ />
900
+ </div>
901
+ );
902
+ };
903
+
904
+ const renderWidgetBody = (widgetDefinition: any, runtime: any) => {
905
+ if (isUnauthorizedWidgetRuntime(runtime)) {
906
+ return (
907
+ <div className={styles.widgetUnauthorizedState}>
908
+ <AlertTriangle size={18} className={styles.widgetUnauthorizedIcon} />
909
+ <span className={styles.widgetUnauthorizedText}>
910
+ {runtime?.uiHints?.message ?? "Unauthorized"}
911
+ </span>
12
912
  </div>
913
+ );
914
+ }
915
+
916
+ const componentName = getPreferredWidgetComponentName(widgetDefinition, runtime);
917
+ const ExtensionWidget = getExtensionComponent(componentName);
918
+ if (!ExtensionWidget) {
919
+ const UnknownWidget = getExtensionComponent("DefaultDashboardUnknownWidget");
920
+ if (!UnknownWidget) return <pre>{JSON.stringify(runtime?.data ?? runtime ?? {}, null, 2)}</pre>;
921
+ return <UnknownWidget definition={widgetDefinition} runtime={runtime} variables={appliedVariableValues} />;
922
+ }
923
+ return (
924
+ <ExtensionWidget
925
+ {...({ definition: widgetDefinition, runtime, variables: appliedVariableValues } satisfies DashboardWidgetComponentProps)}
926
+ />
927
+ );
928
+ };
929
+
930
+ if (definitionLoading) {
931
+ return (
932
+ <div className={styles.page}>
933
+ <SolidSpinner />
934
+ </div>
13
935
  );
936
+ }
937
+
938
+ return (
939
+ <div className={styles.page}>
940
+ <div className={styles.header}>
941
+ <div className={styles.titleBlock}>
942
+ <h1 className={styles.title}>{getDashboardTitle(definition, dashboardName)}</h1>
943
+ <p className={styles.subtitle}>{definition?.description ?? `${moduleName} / ${dashboardName}`}</p>
944
+ </div>
945
+
946
+ <div className={styles.headerActions}>
947
+ <div className={styles.filterButtonWrap}>
948
+ <SolidButton
949
+ className={styles.iconButton}
950
+ leftIcon={<Filter size={16} />}
951
+ onClick={() => setIsFilterDialogOpen(true)}
952
+ tooltip="Filters"
953
+ aria-label="Filters"
954
+ />
955
+ {appliedFilterCount > 0 ? <span className={styles.filterCountBadge}>{appliedFilterCount}</span> : null}
956
+ </div>
957
+
958
+ <SolidButton
959
+ className={styles.iconButton}
960
+ leftIcon={<RefreshCw size={16} />}
961
+ onClick={() => void handleRefresh()}
962
+ disabled={dataLoading}
963
+ tooltip="Refresh"
964
+ aria-label="Refresh"
965
+ />
966
+
967
+ <SolidButton
968
+ className={styles.iconButton}
969
+ leftIcon={<Save size={16} />}
970
+ onClick={() => void handleSaveLayout()}
971
+ disabled={saveLayoutLoading || isCompactLayout}
972
+ tooltip="Save Layout"
973
+ aria-label="Save Layout"
974
+ />
975
+ </div>
976
+ </div>
977
+
978
+ <SolidDialog
979
+ open={isFilterDialogOpen}
980
+ onOpenChange={setIsFilterDialogOpen}
981
+ header="Dashboard Filters"
982
+ contentClassName={styles.filterDialogContent}
983
+ >
984
+ <SolidDialogBody>
985
+ <div className={styles.filterModalColumn}>{variables.map(renderVariable)}</div>
986
+ </SolidDialogBody>
987
+ <SolidDialogFooter className={styles.filterModalActions}>
988
+ <SolidButton variant="outline" onClick={() => void handleClearFilters()}>
989
+ Clear
990
+ </SolidButton>
991
+ <SolidButton onClick={() => void handleApplyFilters()}>
992
+ Apply
993
+ </SolidButton>
994
+ </SolidDialogFooter>
995
+ </SolidDialog>
996
+
997
+ {dataError ? <p className={styles.error}>Failed to load dashboard data.</p> : null}
998
+
999
+ <div
1000
+ ref={gridRef}
1001
+ className={`grid-stack ${styles.gridStack} ${isCompactLayout ? styles.gridStackCompact : ""}`}
1002
+ >
1003
+ {orderedWidgets.map((widget: any) => {
1004
+ const widgetName = widget?.id ?? widget?.name;
1005
+ const runtime = widgetDataMap.get(widgetName);
1006
+ const slot = renderedWidgetLayoutMap.get(widgetName) ?? widgetLayoutMap.get(widgetName);
1007
+
1008
+ return (
1009
+ <div
1010
+ key={widgetName}
1011
+ className="grid-stack-item"
1012
+ gs-id={widgetName}
1013
+ gs-x={slot?.x ?? 0}
1014
+ gs-y={slot?.y ?? 0}
1015
+ gs-w={slot?.w ?? 4}
1016
+ gs-h={slot?.h ?? 3}
1017
+ gs-min-w={slot?.minW ?? 2}
1018
+ gs-min-h={slot?.minH ?? 2}
1019
+ >
1020
+ <div className={`grid-stack-item-content ${styles.widgetCard}`}>
1021
+ <h3 className={styles.widgetTitle}>{getWidgetTitle(widget, widgetName)}</h3>
1022
+ <div className={styles.widgetBody}>
1023
+ {runtime ? renderWidgetBody(widget, runtime) : <p className={styles.muted}>No data</p>}
1024
+ </div>
1025
+ </div>
1026
+ </div>
1027
+ );
1028
+ })}
1029
+ </div>
1030
+ </div>
1031
+ );
14
1032
  }