robobyte-front-builder 1.0.17 → 1.0.21

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 (516) hide show
  1. package/README.md +211 -0
  2. package/next.config.js +19 -48
  3. package/package.json +39 -85
  4. package/src/context/BuilderContext.jsx +134 -6
  5. package/src/context/SystemContext.js +2 -2
  6. package/src/hooks/useGlobalStore.js +36 -0
  7. package/src/hooks/useTimerEngine.js +54 -0
  8. package/src/lib/index.js +11 -3
  9. package/src/lib/layouts/BlankLayout.jsx +13 -0
  10. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +59 -1
  11. package/src/lib/themes/builderTheme.js +41 -0
  12. package/src/pages/_app.js +32 -134
  13. package/src/pages/api/ai.js +87 -0
  14. package/src/pages/builders/report/index.js +1 -0
  15. package/src/pages/builders/report/list/index.js +1 -0
  16. package/src/pages/builders/report/viewer/index.js +1 -0
  17. package/src/pages/index.js +88 -37
  18. package/src/pages/printBuilder/index.jsx +263 -0
  19. package/src/pages/printBuilder/layouts/index.jsx +298 -0
  20. package/src/pages/reportModule/reportBuilder/index.js +723 -563
  21. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +137 -71
  22. package/src/pages/reportModule/reportBuilder/reports/index.js +51 -13
  23. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +126 -0
  24. package/src/pages/viewBuilder/index.jsx +117 -32
  25. package/src/pages/viewBuilder/views/index.js +3 -3
  26. package/src/pages/viewer/[id]/index.js +2 -1
  27. package/src/services/DeleteService.js +31 -60
  28. package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
  29. package/src/services/Endpoints.js +2 -0
  30. package/src/services/GetService.js +33 -54
  31. package/src/services/PatchService.js +38 -65
  32. package/src/services/PostService.js +37 -63
  33. package/src/services/UpdateService.js +39 -65
  34. package/src/services/builderHelper/actionExecutor.js +141 -25
  35. package/src/services/builderHelper/builderHelper.js +92 -0
  36. package/src/services/builderHelper/colorSchema.js +95 -0
  37. package/src/services/builderHelper/iconResolver.js +50 -0
  38. package/src/services/builderHelper/jsExecutor.js +212 -46
  39. package/src/services/builderHelper/nodeFactory.js +32 -15
  40. package/src/services/builderHelper/numberFormat.js +123 -0
  41. package/src/services/builderHelper/resolveProps.js +73 -4
  42. package/src/services/builderHelper/thresholdEngine.js +77 -0
  43. package/src/services/builderHelper/tree.js +31 -0
  44. package/src/services/components/agGridAutoComplete.js +5 -9
  45. package/src/services/config.js +9 -1
  46. package/src/services/globalStore.js +80 -0
  47. package/src/services/helper/multiSelectEditor.js +5 -9
  48. package/src/services/helper/multiSelectEditorByBuilder.js +241 -0
  49. package/src/services/helper/reportSessionHelper.js +83 -0
  50. package/src/services/reportData/fetchReportData.js +69 -28
  51. package/src/services/routerRef.js +35 -0
  52. package/src/views/ConfirmDialog.js +2 -2
  53. package/src/views/builder/JSEditor.js +105 -107
  54. package/src/views/builder/inspector/Inspector.jsx +6 -9
  55. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  56. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  57. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  58. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  59. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  60. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  61. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  62. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  63. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  64. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  65. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  66. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  67. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  68. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  69. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  70. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  71. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  72. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  73. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  74. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  75. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  76. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  77. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  78. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  79. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  80. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  81. package/src/views/builder/inspector/definitions/index.js +106 -19
  82. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  83. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  84. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  85. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  86. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  87. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  88. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  89. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  90. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  91. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  92. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  93. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  94. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  95. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  96. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  97. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  98. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  99. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  100. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  101. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  102. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  103. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  104. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  105. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  106. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  107. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  108. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  109. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  110. package/src/views/builder/inspector/definitions/reportViewer/main.js +15 -1
  111. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  112. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  113. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  114. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  115. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  116. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  117. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  118. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  119. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  120. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  121. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  122. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  123. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  124. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  125. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  126. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  127. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  128. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  129. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  130. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  131. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  132. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  133. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  134. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  135. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  136. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  137. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  138. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  139. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  140. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  141. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  142. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  143. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +49 -0
  144. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  145. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +102 -0
  146. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  147. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  148. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  149. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  150. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  151. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  152. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  153. package/src/views/builder/sidebar/tabs/ViewTab.jsx +1 -1
  154. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  155. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  156. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  157. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  158. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  159. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  160. package/src/views/builder/viewer/Viewer.jsx +106 -8
  161. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +61 -4
  162. package/src/views/builder/viewer/ViewerToolbar.jsx +273 -59
  163. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  164. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  165. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  166. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  167. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  168. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  169. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  170. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  171. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  172. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  173. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  174. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  175. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  176. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  177. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  178. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  179. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  180. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  181. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  182. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  183. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  184. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  185. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  186. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  187. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  188. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  189. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  190. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  191. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  192. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  193. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  194. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  195. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  196. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  197. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  198. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  199. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  200. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  201. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  202. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  204. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  205. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  206. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  207. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +219 -5
  208. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  209. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  210. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  211. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  212. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  213. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  214. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  215. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  216. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  217. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  218. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  219. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  220. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  221. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  222. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  223. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  224. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  225. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  226. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  227. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  228. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  229. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  230. package/src/views/genericTable/ColumnConfiguratorDialog.js +771 -0
  231. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  232. package/src/views/genericTable/FormattingSettingsDialog.js +551 -0
  233. package/src/views/genericTable/ReportSettingsDialog.js +151 -0
  234. package/src/views/genericTable/SGrid.js +1061 -247
  235. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  236. package/src/views/genericTable/TAGGrid.js +83 -69
  237. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  238. package/src/views/genericTable/convertStringFunctions.js +336 -0
  239. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  240. package/src/views/genericTable/updateRefHelpers.js +424 -0
  241. package/src/views/printBuilder/PrintBuilderViewer.jsx +607 -0
  242. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  243. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +316 -0
  244. package/src/@core/components/auth/AclGuard.js +0 -55
  245. package/src/@core/components/auth/AuthGuard.js +0 -40
  246. package/src/@core/components/auth/GuestGuard.js +0 -30
  247. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  248. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  249. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  250. package/src/@core/components/customizer/index.jsx +0 -470
  251. package/src/@core/components/customizer/styles.module.css +0 -169
  252. package/src/@core/components/mui/Avatar.jsx +0 -41
  253. package/src/@core/components/mui/Badge.jsx +0 -20
  254. package/src/@core/components/mui/IconButton.jsx +0 -74
  255. package/src/@core/components/mui/TabList.jsx +0 -60
  256. package/src/@core/components/option-menu/index.jsx +0 -137
  257. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  258. package/src/@core/components/spinner/index.js +0 -26
  259. package/src/@core/components/window-wrapper/index.js +0 -27
  260. package/src/@core/contexts/settingsContext.jsx +0 -98
  261. package/src/@core/hooks/useBgColor.js +0 -63
  262. package/src/@core/hooks/useImageVariant.js +0 -27
  263. package/src/@core/hooks/useLayoutInit.js +0 -37
  264. package/src/@core/hooks/useObjectCookie.js +0 -18
  265. package/src/@core/hooks/useSettings.jsx +0 -15
  266. package/src/@core/layouts/BlankLayout.js +0 -37
  267. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  268. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  269. package/src/@core/layouts/Layout.js +0 -39
  270. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  271. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  272. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  273. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  274. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  275. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  276. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  277. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  278. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  279. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  280. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  281. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  282. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  283. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  284. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  285. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  286. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  287. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  288. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  289. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  290. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  291. package/src/@core/layouts/utils.js +0 -69
  292. package/src/@core/styles/Table.module.css +0 -93
  293. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  294. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  295. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  296. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  297. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  298. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  299. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  300. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  301. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  302. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  303. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  304. package/src/@core/styles/libs/recharts/index.js +0 -47
  305. package/src/@core/styles/stepper.js +0 -103
  306. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  307. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  308. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  309. package/src/@core/svg/ContentCompact.jsx +0 -17
  310. package/src/@core/svg/ContentWide.jsx +0 -17
  311. package/src/@core/svg/DirectionLtr.jsx +0 -93
  312. package/src/@core/svg/DirectionRtl.jsx +0 -93
  313. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  314. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  315. package/src/@core/svg/LayoutVertical.jsx +0 -59
  316. package/src/@core/svg/Logo.jsx +0 -76
  317. package/src/@core/svg/SkinBordered.jsx +0 -54
  318. package/src/@core/svg/SkinDefault.jsx +0 -59
  319. package/src/@core/tailwind/plugin.js +0 -78
  320. package/src/@core/theme/ThemeComponent.js +0 -63
  321. package/src/@core/theme/ThemeOptions.js +0 -71
  322. package/src/@core/theme/breakpoints/index.js +0 -11
  323. package/src/@core/theme/colorSchemes.js +0 -326
  324. package/src/@core/theme/customShadows.js +0 -11
  325. package/src/@core/theme/globalStyles.js +0 -81
  326. package/src/@core/theme/index.js +0 -42
  327. package/src/@core/theme/overrides/accordion.js +0 -51
  328. package/src/@core/theme/overrides/accordion.jsx +0 -85
  329. package/src/@core/theme/overrides/alerts.js +0 -110
  330. package/src/@core/theme/overrides/alerts.jsx +0 -180
  331. package/src/@core/theme/overrides/autocomplete.js +0 -14
  332. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  333. package/src/@core/theme/overrides/avatar.js +0 -38
  334. package/src/@core/theme/overrides/avatars.js +0 -27
  335. package/src/@core/theme/overrides/backdrop.js +0 -22
  336. package/src/@core/theme/overrides/badges.js +0 -16
  337. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  338. package/src/@core/theme/overrides/button-group.js +0 -84
  339. package/src/@core/theme/overrides/button.js +0 -93
  340. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  341. package/src/@core/theme/overrides/card.js +0 -83
  342. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  343. package/src/@core/theme/overrides/chip.js +0 -72
  344. package/src/@core/theme/overrides/dataGrid.js +0 -114
  345. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  346. package/src/@core/theme/overrides/dialog.js +0 -120
  347. package/src/@core/theme/overrides/divider.js +0 -13
  348. package/src/@core/theme/overrides/drawer.js +0 -20
  349. package/src/@core/theme/overrides/fab.js +0 -13
  350. package/src/@core/theme/overrides/form-control-label.js +0 -19
  351. package/src/@core/theme/overrides/icon-button.js +0 -145
  352. package/src/@core/theme/overrides/index.js +0 -103
  353. package/src/@core/theme/overrides/input.js +0 -72
  354. package/src/@core/theme/overrides/link.js +0 -9
  355. package/src/@core/theme/overrides/list.js +0 -44
  356. package/src/@core/theme/overrides/menu.js +0 -25
  357. package/src/@core/theme/overrides/pagination.js +0 -41
  358. package/src/@core/theme/overrides/paper.js +0 -9
  359. package/src/@core/theme/overrides/popover.js +0 -16
  360. package/src/@core/theme/overrides/progress.js +0 -38
  361. package/src/@core/theme/overrides/radio.jsx +0 -80
  362. package/src/@core/theme/overrides/rating.js +0 -16
  363. package/src/@core/theme/overrides/rating.jsx +0 -32
  364. package/src/@core/theme/overrides/select.js +0 -19
  365. package/src/@core/theme/overrides/select.jsx +0 -52
  366. package/src/@core/theme/overrides/slider.js +0 -97
  367. package/src/@core/theme/overrides/snackbar.js +0 -19
  368. package/src/@core/theme/overrides/switch.js +0 -73
  369. package/src/@core/theme/overrides/switches.js +0 -25
  370. package/src/@core/theme/overrides/table-pagination.js +0 -39
  371. package/src/@core/theme/overrides/table.js +0 -81
  372. package/src/@core/theme/overrides/tabs.js +0 -30
  373. package/src/@core/theme/overrides/timeline.js +0 -80
  374. package/src/@core/theme/overrides/toggle-button.js +0 -33
  375. package/src/@core/theme/overrides/toggleButton.js +0 -16
  376. package/src/@core/theme/overrides/tooltip.js +0 -21
  377. package/src/@core/theme/overrides/typography.js +0 -13
  378. package/src/@core/theme/palette/index.js +0 -107
  379. package/src/@core/theme/shadows/index.js +0 -61
  380. package/src/@core/theme/shadows.js +0 -12
  381. package/src/@core/theme/spacing/index.js +0 -3
  382. package/src/@core/theme/spacing.js +0 -5
  383. package/src/@core/theme/typography/index.js +0 -65
  384. package/src/@core/theme/typography.js +0 -84
  385. package/src/@core/utils/create-emotion-cache.js +0 -5
  386. package/src/@core/utils/hex-to-rgba.js +0 -11
  387. package/src/@core/utils/serverHelpers.js +0 -45
  388. package/src/@menu/components/RouterLink.jsx +0 -18
  389. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  390. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  391. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  392. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  393. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  394. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  395. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  396. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  397. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  398. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  399. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  400. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  401. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  402. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  403. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  404. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  405. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  406. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  407. package/src/@menu/defaultConfigs.js +0 -12
  408. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  409. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  410. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  411. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  412. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  413. package/src/@menu/horizontal-menu/index.jsx +0 -8
  414. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  415. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  416. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  417. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  418. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  419. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  420. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  421. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  422. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  423. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  424. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  425. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  426. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  427. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  428. package/src/@menu/styles/styles.module.css +0 -5
  429. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  430. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  431. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  432. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  433. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  434. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  435. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  436. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  437. package/src/@menu/svg/ChevronRight.jsx +0 -9
  438. package/src/@menu/svg/Close.jsx +0 -12
  439. package/src/@menu/svg/RadioCircle.jsx +0 -12
  440. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  441. package/src/@menu/utils/menuClasses.js +0 -44
  442. package/src/@menu/utils/menuUtils.jsx +0 -145
  443. package/src/@menu/vertical-menu/index.jsx +0 -11
  444. package/src/configs/acl.js +0 -115
  445. package/src/configs/auth.js +0 -5
  446. package/src/configs/aws-exports.js +0 -30
  447. package/src/configs/firebase.js +0 -25
  448. package/src/configs/i18n.js +0 -34
  449. package/src/configs/primaryColorConfig.js +0 -35
  450. package/src/configs/themeConfig.js +0 -44
  451. package/src/layouts/UserLayout.js +0 -94
  452. package/src/layouts/UserThemeOptions.js +0 -191
  453. package/src/layouts/components/Direction.js +0 -30
  454. package/src/layouts/components/HtmlTooltip.js +0 -15
  455. package/src/layouts/components/Translations.js +0 -11
  456. package/src/layouts/components/UserDropdown.js +0 -217
  457. package/src/layouts/components/UserIcon.js +0 -40
  458. package/src/layouts/components/acl/Can.js +0 -6
  459. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  460. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  461. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  462. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  463. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  464. package/src/layouts/components/mui/StepperComps.js +0 -55
  465. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  466. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  467. package/src/libs/ApexCharts.jsx +0 -5
  468. package/src/libs/ReactPlayer.jsx +0 -5
  469. package/src/libs/Recharts.jsx +0 -4
  470. package/src/libs/auth.js +0 -124
  471. package/src/libs/styles/AppFullCalendar.js +0 -505
  472. package/src/libs/styles/AppKeenSlider.js +0 -116
  473. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  474. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  475. package/src/libs/styles/AppReactDropzone.js +0 -76
  476. package/src/libs/styles/AppReactToastify.jsx +0 -108
  477. package/src/libs/styles/AppRecharts.js +0 -55
  478. package/src/libs/styles/inputOtp.module.css +0 -39
  479. package/src/libs/styles/tiptapEditor.css +0 -72
  480. package/src/navigation/horizontal/index.js +0 -246
  481. package/src/navigation/vertical/index.js +0 -253
  482. package/src/pages/401.js +0 -70
  483. package/src/pages/404.js +0 -67
  484. package/src/pages/500.js +0 -68
  485. package/src/pages/[slug].js +0 -115
  486. package/src/pages/_document.js +0 -72
  487. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  488. package/src/pages/api/navigation/save.js +0 -218
  489. package/src/pages/authModule/acl/index.js +0 -48
  490. package/src/pages/authModule/forgot-password/index.js +0 -228
  491. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  492. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  493. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  494. package/src/pages/authModule/privacy/index.js +0 -721
  495. package/src/pages/authModule/users/index.js +0 -210
  496. package/src/pages/login/index.js +0 -328
  497. package/src/pages/mainHome/index.js +0 -181
  498. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  499. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  500. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  501. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  502. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  503. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  504. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  505. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  506. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  507. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  508. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  509. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  510. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  511. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  512. package/src/views/pages/users/UserManageDialog.js +0 -283
  513. package/src/views/pages/users/UserViewPage.js +0 -199
  514. package/src/views/users/AddUserNameDialog.js +0 -162
  515. package/src/views/users/ContactManage.js +0 -449
  516. package/src/views/users/ResetPasswordDialog.js +0 -242
@@ -4,75 +4,49 @@ import { resolveURL, getAccessToken } from './config'
4
4
  import toast from 'react-hot-toast'
5
5
 
6
6
  export default async function PostService(endpoint, showToast, data, params) {
7
- const accessToken = getAccessToken()
8
7
 
9
8
 
10
- let response = { status: 'Error', message: '' }
11
- let result = null
12
- let currentParams = {
13
- ...params,
14
- ...(endpoint.DataType == DataTypes.Params ? { ...data } : {})
15
- }
16
- let currnetData = endpoint.DataType == DataTypes.Form || endpoint.DataType == DataTypes.Body ? data : {}
17
-
18
- if (!data) return
19
- const url = resolveURL(endpoint)
20
-
21
- const axiosConfig = {
22
- method: 'post',
23
- headers: {
24
- Authorization: `Bearer ${accessToken}`,
25
- 'Content-Type': endpoint.ContentType
26
- },
27
- params: {
28
- ...currentParams
29
- }
30
- }
31
-
32
9
  try {
33
- await Axios.post(url, currnetData, axiosConfig)
34
- .then(r => {
35
- result = r.data
36
- response = {
37
- status: 'Success',
38
- message: r.data.message ? r.data.message : 'تم الحفظ بنجاح'
39
- }
40
- })
41
- .catch(r => {
42
- if (r.response && r.response.status == 400) {
43
- response = {
44
- status: 'Error',
45
- message: typeof r.response.data == 'string' ? r.response.data : r.response.data.title
46
- // message: "حدث خطأ اثناء الحفظ",
47
- }
48
- } else if (r.response && (r.response.status == 401 || r.response.status == 403)) {
49
- response = {
50
- status: 'Error',
51
- message: 'غير مخول'
52
- }
53
- } else {
10
+ const accessToken = getAccessToken()
11
+ const url = resolveURL(endpoint)
54
12
 
55
- response = {
56
- status: 'Error',
57
- message: 'حدث خطأ في الاتصال مع الخادم'
58
- }
59
- }
60
- })
61
- } catch (error) {
62
- response = {
63
- status: 'Error',
64
- message: 'حدث خطأ في الخادم'
13
+ const currentParams = {
14
+ ...params,
15
+ ...(endpoint.DataType === DataTypes.Params ? { ...data } : {}),
65
16
  }
66
- } finally {
67
- if (response.status == 'Success') {
68
- if (showToast) {
69
- toast.success(response.message)
70
- }
71
- } else {
72
- toast.error(response.message)
73
- return false
17
+ const requestData =
18
+ endpoint.DataType === DataTypes.Form || endpoint.DataType === DataTypes.Body
19
+ ? data
20
+ : {}
21
+
22
+ const r = await Axios.post(url, requestData, {
23
+ headers: {
24
+ Authorization: `Bearer ${accessToken}`,
25
+ 'Content-Type': endpoint.ContentType,
26
+ },
27
+ params: currentParams,
28
+ })
29
+
30
+ if (showToast) {
31
+ toast.success(r.data?.message || 'تم الحفظ بنجاح')
74
32
  }
33
+ return r.data
34
+
35
+ } catch (err) {
36
+ console.log(err)
37
+ const message = resolveErrorMessage(err)
38
+ toast.error(message)
39
+ return null
75
40
  }
41
+ }
42
+
43
+ function resolveErrorMessage(err) {
44
+ const status = err?.response?.status
45
+ const data = err?.response?.data
76
46
 
77
- return result
47
+ if (status === 400) return typeof data === 'string' ? data : data?.title || 'طلب غير صحيح'
48
+ if (status === 401 || status === 403) return 'غير مخول'
49
+ if (status >= 500) return 'حدث خطأ في الخادم'
50
+ if (err?.message) return err.message
51
+ return 'حدث خطأ في الاتصال مع الخادم'
78
52
  }
@@ -4,76 +4,50 @@ import { resolveURL, getAccessToken } from './config'
4
4
  import toast from 'react-hot-toast'
5
5
 
6
6
  export default async function UpdateService(endpoint, showToast, data, params, urlExtra = '') {
7
- const accessToken = getAccessToken()
8
- let response = { status: 'Error', message: '' }
9
- let result = null
10
- let currentParams = {
11
- ...params,
12
- ...(endpoint.DataType == DataTypes.Params ? { ...data } : {})
13
- }
14
- let currnetData =
15
- endpoint.DataType == DataTypes.Form
16
- ? data
17
- : {
18
- ...(endpoint.DataType == DataTypes.Body ? { ...data } : {})
19
- }
20
- if (!data) return
21
- const url = resolveURL(endpoint) + urlExtra
22
-
23
- const axiosConfig = {
24
- method: 'put',
25
- headers: {
26
- Authorization: `Bearer ${accessToken}`,
27
- 'Content-Type': endpoint.ContentType
28
- },
29
- params: {
30
- ...currentParams
31
- }
32
- }
33
7
 
34
8
  try {
35
- await Axios.put(url, currnetData, axiosConfig)
36
- .then(r => {
37
- result = r.data
38
- response = {
39
- status: 'Success',
40
- message: r.data.message ? r.data.message : 'تم الحفظ بنجاح'
41
- }
42
- })
43
- .catch(r => {
44
-
45
- if (r.response && r.response.status == 400) {
46
- response = {
47
- status: 'Error',
48
- message: typeof r.response.data == 'string' ? r.response.data : r.response.data.title
49
- // message: "حدث خطأ اثناء الحفظ",
50
- }
51
- } else if (r.response && (r.response.status == 401 || r.response.status == 403)) {
52
- response = {
53
- status: 'Error',
54
- message: 'غير مخول'
55
- }
56
- } else {
9
+ const accessToken = getAccessToken()
10
+ const url = resolveURL(endpoint) + (urlExtra || '')
57
11
 
58
- response = {
59
- status: 'Error',
60
- message: 'حدث خطأ في الاتصال مع الخادم'
61
- }
62
- }
63
- })
64
- } catch (error) {
65
- response = {
66
- status: 'Error',
67
- message: 'حدث خطأ في الخادم'
12
+ const currentParams = {
13
+ ...params,
14
+ ...(endpoint.DataType === DataTypes.Params ? { ...data } : {}),
68
15
  }
69
- } finally {
16
+ const requestData =
17
+ endpoint.DataType === DataTypes.Form
18
+ ? data
19
+ : endpoint.DataType === DataTypes.Body
20
+ ? { ...data }
21
+ : {}
22
+
23
+ const r = await Axios.put(url, requestData, {
24
+ headers: {
25
+ Authorization: `Bearer ${accessToken}`,
26
+ 'Content-Type': endpoint.ContentType,
27
+ },
28
+ params: currentParams,
29
+ })
30
+
70
31
  if (showToast) {
71
- if (response.status == 'Success') {
72
- toast.success(response.message)
73
- } else {
74
- toast.error(response.message)
75
- }
32
+ toast.success(r.data?.message || 'تم الحفظ بنجاح')
76
33
  }
34
+ return r.data
35
+
36
+ } catch (err) {
37
+ console.log(err)
38
+ const message = resolveErrorMessage(err)
39
+ toast.error(message)
40
+ return null
77
41
  }
78
- return result
42
+ }
43
+
44
+ function resolveErrorMessage(err) {
45
+ const status = err?.response?.status
46
+ const data = err?.response?.data
47
+
48
+ if (status === 400) return typeof data === 'string' ? data : data?.title || 'طلب غير صحيح'
49
+ if (status === 401 || status === 403) return 'غير مخول'
50
+ if (status >= 500) return 'حدث خطأ في الخادم'
51
+ if (err?.message) return err.message
52
+ return 'حدث خطأ في الاتصال مع الخادم'
79
53
  }
@@ -1,10 +1,15 @@
1
1
  import { executeJSCode } from './jsExecutor'
2
2
 
3
3
  /**
4
- * Execute an action and set the result to the data object
5
- * @param {object} action - The action to execute
6
- * @param {object} context - The execution context (form, data)
7
- * @param {function} setData - Function to update the data object
4
+ * Execute an action and optionally set its result onto the data state.
5
+ *
6
+ * context shape:
7
+ * form, data, setData, dataRef, reportRefs
8
+ * (setData may also be provided as the legacy 3rd argument for backward compat)
9
+ *
10
+ * @param {object} action - The action to execute
11
+ * @param {object} context - Execution context
12
+ * @param {function} [setData] - Legacy: state setter; prefer context.setData
8
13
  */
9
14
  export async function executeAction(action, context, setData) {
10
15
  if (!action || !action.code) {
@@ -12,27 +17,47 @@ export async function executeAction(action, context, setData) {
12
17
  return
13
18
  }
14
19
 
20
+ // Resolve setData: prefer what's already in context, fall back to the explicit arg
21
+ const effectiveSetData = context.setData || setData || (() => {})
22
+
23
+ // Build the full context that jsExecutor expects
24
+ const fullContext = {
25
+ form: context.form ?? {},
26
+ data: context.data ?? {},
27
+ dataRef: context.dataRef ?? {},
28
+ reportRefs: context.reportRefs ?? {},
29
+ openDialog: context.openDialog ?? (() => {}),
30
+ closeDialog: context.closeDialog ?? (() => {}),
31
+ // Thread parent-page stores so Calculation can access `page.data` etc.
32
+ pageData: context.pageData,
33
+ pageSetData: context.pageSetData,
34
+ pageDataRef: context.pageDataRef,
35
+ pageReportRefs: context.pageReportRefs,
36
+ ...context,
37
+ setData: effectiveSetData,
38
+ }
39
+
15
40
  try {
16
- // Execute the action code using centralized executor
17
- const result = await executeJSCode(action.code, context)
41
+ const result = await executeJSCode(action.code, fullContext)
18
42
 
19
- // Parse target path and set the result
20
43
  if (action.targetPath) {
21
- setDataAtPath(setData, action.targetPath, result)
44
+ setDataAtPath(effectiveSetData, action.targetPath, result)
22
45
  }
46
+
47
+ return result
23
48
  } catch (e) {
24
49
  console.error(`Action execution error [${action.name}]:`, e)
25
50
  }
26
51
  }
27
52
 
28
53
  /**
29
- * Set value at a nested path in the data object
30
- * @param {function} setData - Function to update the data object
31
- * @param {string} path - Dot-notation path (e.g., 'data.d1' or 'd1')
32
- * @param {any} value - Value to set
54
+ * Set value at a nested path in the data object.
55
+ *
56
+ * @param {function} setData - State setter
57
+ * @param {string} path - Dot-notation path (e.g. 'data.d1' or 'd1')
58
+ * @param {any} value - Value to set
33
59
  */
34
60
  function setDataAtPath(setData, path, value) {
35
- // Remove 'data.' prefix if present
36
61
  const cleanPath = path.startsWith('data.') ? path.substring(5) : path
37
62
 
38
63
  setData(prev => {
@@ -40,34 +65,125 @@ function setDataAtPath(setData, path, value) {
40
65
  const keys = cleanPath.split('.')
41
66
  let current = newData
42
67
 
43
- // Navigate to the parent of the target key
44
68
  for (let i = 0; i < keys.length - 1; i++) {
45
- if (!current[keys[i]]) {
46
- current[keys[i]] = {}
47
- }
69
+ if (!current[keys[i]]) current[keys[i]] = {}
48
70
  current = current[keys[i]]
49
71
  }
50
72
 
51
- // Set the final value
52
73
  current[keys[keys.length - 1]] = value
53
-
54
74
  return newData
55
75
  })
56
76
  }
57
77
 
58
78
  /**
59
- * Execute all actions of a specific event type
60
- * @param {array} actions - All actions from schema
61
- * @param {string} eventType - Event type to filter (e.g., 'onLoad')
62
- * @param {object} context - Execution context (form, data)
63
- * @param {function} setData - Function to update the data object
79
+ * Execute all actions of a specific event type.
80
+ *
81
+ * @param {array} actions - All actions from schema
82
+ * @param {string} eventType - Event type to filter ('onLoad', 'onSubmit', …)
83
+ * @param {object} context - Execution context (see executeAction)
84
+ * @param {function} [setData] - Legacy 4th arg for backward compat
64
85
  */
65
86
  export async function executeActionsByEvent(actions, eventType, context, setData) {
66
87
  if (!actions || !Array.isArray(actions)) return
67
88
 
68
89
  const matchingActions = actions.filter(action => action.event === eventType)
69
90
 
91
+ let lastResult
70
92
  for (const action of matchingActions) {
71
- await executeAction(action, context, setData)
93
+ lastResult = await executeAction(action, context, setData)
94
+ }
95
+ return lastResult
96
+ }
97
+
98
+ /**
99
+ * Convenience helper for KPI / data-visualisation renderers.
100
+ *
101
+ * Reads `node.props.actions[eventName]` and executes the action,
102
+ * injecting `clickVars` into the Calculation's lexical scope so the
103
+ * user can reference them directly by name:
104
+ *
105
+ * async function Calculation(form, data, setData, ...) {
106
+ * // clickedItem, clickedValue, clickedLabel, clickedIndex, etc.
107
+ * setData(prev => ({ ...prev, selected: clickedItem }))
108
+ * openDialog('detail', { data: { row: clickedItem } })
109
+ * showToast('Clicked: ' + clickedLabel, 'info')
110
+ * }
111
+ *
112
+ * @param {object} node - Builder node (has node.props.actions)
113
+ * @param {object} viewerContext - Full viewerContext from the renderer
114
+ * @param {string} eventName - 'onDataClick' | 'onCellClick' | 'onItemClick' | etc.
115
+ * @param {object} [clickVars] - Click-specific variables to inject (clickedItem, clickedValue, …)
116
+ */
117
+ export async function runKpiAction(node, viewerContext, eventName, clickVars = {}) {
118
+ const action = node.props?.actions?.[eventName]
119
+ if (!action?.code) return
120
+
121
+ const {
122
+ form, data, setData, dataRef, reportRefs,
123
+ openDialog, closeDialog,
124
+ pageData, pageSetData, pageDataRef, pageReportRefs,
125
+ } = viewerContext ?? {}
126
+
127
+ const context = {
128
+ form: form ?? {},
129
+ data: data ?? {},
130
+ setData: setData ?? (() => {}),
131
+ dataRef: dataRef?.current ?? dataRef ?? {},
132
+ reportRefs: reportRefs ?? {},
133
+ openDialog: openDialog ?? (() => {}),
134
+ closeDialog: closeDialog ?? (() => {}),
135
+ pageData, pageSetData, pageDataRef, pageReportRefs,
136
+ extraVars: clickVars,
72
137
  }
138
+
139
+ return executeAction(action, context)
140
+ }
141
+
142
+ /**
143
+ * Convenience helper for field/input renderers.
144
+ *
145
+ * Reads the node's actions, builds the context from viewerContext, and fires
146
+ * all handlers registered for `eventName`.
147
+ *
148
+ * `newValue` is injected into the Calculation's lexical scope so action code
149
+ * can reference it directly without digging through form state:
150
+ *
151
+ * async function Calculation(form, data, setData, ...) {
152
+ * if (newValue === 'active') setData(prev => ({ ...prev, showExtra: true }))
153
+ * }
154
+ *
155
+ * @param {object} node - Builder node (has node.props.actions)
156
+ * @param {object} viewerContext - Full viewerContext from the renderer
157
+ * @param {string} eventName - 'onChange' | 'onBlur' | etc.
158
+ * @param {any} newValue - The new field value, available as `newValue` in action code
159
+ */
160
+ export async function runFieldAction(node, viewerContext, eventName, newValue) {
161
+ const propsActions = node.props?.actions ?? {}
162
+
163
+ const actions = Object.entries(propsActions)
164
+ .filter(([, v]) => v?.actionType === 'custom' && v?.code)
165
+ .map(([event, v]) => ({ event, code: v.code, name: event }))
166
+
167
+ if (!actions.length) return
168
+
169
+ const {
170
+ form, data, setData, dataRef, reportRefs,
171
+ openDialog, closeDialog,
172
+ pageData, pageSetData, pageDataRef, pageReportRefs,
173
+ } = viewerContext
174
+
175
+ const context = {
176
+ form,
177
+ data,
178
+ setData: setData ?? (() => {}),
179
+ dataRef: dataRef?.current ?? dataRef ?? {},
180
+ reportRefs: reportRefs ?? {},
181
+ openDialog: openDialog ?? (() => {}),
182
+ closeDialog: closeDialog ?? (() => {}),
183
+ pageData, pageSetData, pageDataRef, pageReportRefs,
184
+ // Inject newValue into the Calculation's lexical scope via extraVars
185
+ extraVars: { newValue },
186
+ }
187
+
188
+ return executeActionsByEvent(actions, eventName, context)
73
189
  }
@@ -61,6 +61,51 @@ function cloneNode(node) {
61
61
  return cloned
62
62
  }
63
63
 
64
+ // ── System clipboard helpers (cross-tab / cross-browser) ─────────────────────
65
+ //
66
+ // Nodes are serialised as: { "__rbfb": 1, "node": <schema node> }
67
+ // The sentinel lets us reject arbitrary text the user may have copied elsewhere.
68
+ //
69
+ // writeNodeToClipboard — async, silently swallows permission errors
70
+ // readNodeFromClipboard — async, returns node object or null
71
+ //
72
+ const RBFB_MARKER = '__rbfb'
73
+
74
+ /**
75
+ * Serialise a builder node and write it to the system clipboard.
76
+ * Safe to call fire-and-forget: never throws.
77
+ */
78
+ export function writeNodeToClipboard(node) {
79
+ if (!navigator?.clipboard?.writeText) return Promise.resolve()
80
+ return navigator.clipboard
81
+ .writeText(JSON.stringify({ [RBFB_MARKER]: 1, node }))
82
+ .catch(() => {}) // permission denied or insecure context — ignore silently
83
+ }
84
+
85
+ /**
86
+ * Read a builder node from the system clipboard.
87
+ * Returns the raw node object if the clipboard contains valid builder JSON,
88
+ * or null for any other content / permission denial.
89
+ */
90
+ export async function readNodeFromClipboard() {
91
+ if (!navigator?.clipboard?.readText) return null
92
+ try {
93
+ const text = await navigator.clipboard.readText()
94
+ const obj = JSON.parse(text)
95
+ if (obj && obj[RBFB_MARKER] === 1 && obj.node && typeof obj.node === 'object') {
96
+ return obj.node
97
+ }
98
+ } catch {} // SyntaxError, NotAllowedError, etc.
99
+ return null
100
+ }
101
+
102
+ // ── Container types — paste-as-child targets ───────────────────────────────
103
+ export const CONTAINER_TYPES = new Set([
104
+ 'container', 'card',
105
+ 'wizard', 'wizard-step', 'repeater',
106
+ 'widget', 'layout', 'layout-cell', 'dialog'
107
+ ])
108
+
64
109
  export function duplicateInTree(node, targetId) {
65
110
  if (!node.children) return node
66
111
 
@@ -82,6 +127,53 @@ export function duplicateInTree(node, targetId) {
82
127
  }
83
128
  }
84
129
 
130
+ // ── Insert newNode immediately after targetId in the tree ─────────────────
131
+ function insertAfterInTree(node, targetId, newNode) {
132
+ if (!node.children) return node
133
+
134
+ const idx = node.children.findIndex(c => c.id === targetId)
135
+ if (idx !== -1) {
136
+ const next = [...node.children]
137
+ next.splice(idx + 1, 0, newNode)
138
+ return { ...node, children: next }
139
+ }
140
+
141
+ return {
142
+ ...node,
143
+ children: node.children.map(child => insertAfterInTree(child, targetId, newNode))
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Paste a cloned copy of clipboardNode relative to targetId.
149
+ *
150
+ * - No targetId → append as last child of root
151
+ * - targetId is a container → append as last child of that container
152
+ * - targetId is a leaf → insert as next sibling
153
+ *
154
+ * @param {object} root - Schema root node
155
+ * @param {string|null} targetId - Currently selected node id (or null)
156
+ * @param {object} clipboardNode - The node that was copied
157
+ * @param {boolean} asChild - Force paste-as-child even if target is a leaf
158
+ * @returns {object} - New root node
159
+ */
160
+ export function pasteIntoTree(root, targetId, clipboardNode, asChild = false) {
161
+ const newNode = cloneNode(clipboardNode)
162
+
163
+ if (!targetId) {
164
+ // No selection — append to root's children
165
+ return { ...root, children: [...(root.children ?? []), newNode] }
166
+ }
167
+
168
+ if (asChild) {
169
+ // Target is a container — insert as last child
170
+ return insertIntoTree(root, targetId, newNode)
171
+ }
172
+
173
+ // Target is a leaf — insert as next sibling
174
+ return insertAfterInTree(root, targetId, newNode)
175
+ }
176
+
85
177
  function resolveValue(node, name, formData) {
86
178
  const expr = node.expressions?.main?.[name]
87
179
  if (expr?.type === 'js') {
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Shared color schema utility for KPI renderers.
3
+ *
4
+ * Supports four coloring modes for item arrays:
5
+ * palette — cycle through the global fallback palette (default)
6
+ * tints — monochromatic tints of a chosen base color
7
+ * data — only use colors that come from the data; no generated fallback
8
+ * custom — user-defined JSON array of hex / rgb strings
9
+ */
10
+
11
+ export const DEFAULT_PALETTE = [
12
+ '#1976d2','#9c27b0','#e91e63','#ff9800',
13
+ '#4caf50','#00bcd4','#f44336','#3f51b5',
14
+ '#ff5722','#009688','#8bc34a','#607d8b',
15
+ ]
16
+
17
+ // ── Low-level helpers ─────────────────────────────────────────────────────────
18
+
19
+ export function hexToRgb(hex) {
20
+ const h = (hex || '').replace('#', '')
21
+ if (h.length < 6) return [0, 0, 0]
22
+ return [
23
+ parseInt(h.slice(0, 2), 16),
24
+ parseInt(h.slice(2, 4), 16),
25
+ parseInt(h.slice(4, 6), 16),
26
+ ]
27
+ }
28
+
29
+ /**
30
+ * Generate `count` tint variants — from 100 % saturation → ~38 % (mixed with white).
31
+ */
32
+ export function generateTints(baseHex, count = 8) {
33
+ try {
34
+ const [r, g, b] = hexToRgb(baseHex)
35
+ return Array.from({ length: count }, (_, i) => {
36
+ const t = count === 1 ? 0 : (i * 0.62) / (count - 1)
37
+ const mix = v => Math.round(v + (255 - v) * t)
38
+ return `rgb(${mix(r)},${mix(g)},${mix(b)})`
39
+ })
40
+ } catch {
41
+ return DEFAULT_PALETTE.slice(0, count)
42
+ }
43
+ }
44
+
45
+ // ── Public API ────────────────────────────────────────────────────────────────
46
+
47
+ /**
48
+ * Resolve a colorSchema config object into an ordered color array for `count` items.
49
+ *
50
+ * Returns `null` for 'data' mode — the caller should skip generated colors entirely
51
+ * and rely solely on per-item data colors.
52
+ *
53
+ * @param {object|null} schema { mode, color, customColors }
54
+ * @param {number} count Number of items (used for tint generation)
55
+ * @param {string[]} palette Fallback palette (defaults to DEFAULT_PALETTE)
56
+ * @returns {string[]|null}
57
+ */
58
+ export function resolveColorSchema(schema, count = 8, palette = DEFAULT_PALETTE) {
59
+ const mode = schema?.mode || 'palette'
60
+
61
+ if (mode === 'tints' && schema?.color) {
62
+ return generateTints(schema.color, count)
63
+ }
64
+
65
+ if (mode === 'custom') {
66
+ try {
67
+ const arr = JSON.parse(schema?.customColors || '[]')
68
+ if (Array.isArray(arr) && arr.length) return arr
69
+ } catch { /* fall through */ }
70
+ return palette
71
+ }
72
+
73
+ if (mode === 'data') return null // no generated fallback
74
+
75
+ return palette // 'palette' or unknown
76
+ }
77
+
78
+ /**
79
+ * Get the final color for a single item.
80
+ *
81
+ * Priority: dataColor (from data field) → schema-derived color.
82
+ *
83
+ * @param {object|null} schema colorSchema config
84
+ * @param {number} index Item index (for cycling)
85
+ * @param {string|null} dataColor Color already extracted from the data item
86
+ * @param {number} total Total item count
87
+ * @param {string[]} palette Fallback palette
88
+ * @returns {string|undefined}
89
+ */
90
+ export function schemaColor(schema, index, dataColor, total, palette = DEFAULT_PALETTE) {
91
+ if (dataColor) return dataColor
92
+ const colors = resolveColorSchema(schema, total, palette)
93
+ if (!colors) return undefined // 'data' mode, no data color available
94
+ return colors[index % colors.length]
95
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Resolves a string to an MUI @mui/icons-material component.
3
+ *
4
+ * Strategy: lazy-load the entire icons barrel once on first call (tree-shaking
5
+ * doesn't help for a dynamic lookup anyway), then cache for the lifetime of
6
+ * the session. Returns null when the name isn't a known icon.
7
+ *
8
+ * Usage:
9
+ * const Icon = resolveIcon('SearchOutlined') // → React component or null
10
+ * const isIcon = isIconName('SearchOutlined') // → true
11
+ * const isIcon = isIconName('$') // → false
12
+ */
13
+
14
+ let _iconModule = null
15
+
16
+ function getIconModule() {
17
+ if (!_iconModule) {
18
+ try {
19
+ // eslint-disable-next-line global-require
20
+ _iconModule = require('@mui/icons-material')
21
+ } catch {
22
+ _iconModule = {}
23
+ }
24
+ }
25
+ return _iconModule
26
+ }
27
+
28
+ /**
29
+ * Returns the MUI icon component for `name`, or null if not found.
30
+ * @param {string|null|undefined} name
31
+ * @returns {React.ComponentType|null}
32
+ */
33
+ export function resolveIcon(name) {
34
+ if (!name || typeof name !== 'string') return null
35
+ const icons = getIconModule()
36
+ return icons[name] ?? null
37
+ }
38
+
39
+ /**
40
+ * Returns true if `value` resolves to a known MUI icon component.
41
+ * Useful to decide whether to render an icon vs plain text in an adornment.
42
+ * @param {string|null|undefined} value
43
+ * @returns {boolean}
44
+ */
45
+ export function isIconName(value) {
46
+ if (!value || typeof value !== 'string') return false
47
+ // Quick heuristic: icon names always start with an uppercase letter.
48
+ if (!/^[A-Z]/.test(value)) return false
49
+ return !!resolveIcon(value)
50
+ }