robobyte-front-builder 1.0.19 → 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 (513) 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 +61 -7
  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 +8 -6
  21. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +33 -22
  22. package/src/pages/reportModule/reportBuilder/reports/index.js +3 -5
  23. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +2 -3
  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 +5 -9
  49. package/src/services/reportData/fetchReportData.js +69 -28
  50. package/src/services/routerRef.js +35 -0
  51. package/src/views/ConfirmDialog.js +2 -2
  52. package/src/views/builder/JSEditor.js +105 -107
  53. package/src/views/builder/inspector/Inspector.jsx +6 -9
  54. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  55. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  56. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  57. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  58. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  59. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  60. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  61. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  62. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  63. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  64. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  65. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  66. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  67. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  68. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  69. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  70. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  71. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  72. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  73. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  74. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  75. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  76. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  77. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  78. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  79. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  80. package/src/views/builder/inspector/definitions/index.js +106 -19
  81. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  82. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  83. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  84. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  85. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  86. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  87. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  88. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  89. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  90. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  91. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  92. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  93. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  94. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  95. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  96. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  97. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  98. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  99. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  100. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  101. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  102. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  103. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  104. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  105. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  106. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  107. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  108. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  109. package/src/views/builder/inspector/definitions/reportViewer/main.js +15 -1
  110. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  111. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  112. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  113. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  114. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  115. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  116. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  117. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  118. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  119. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  120. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  121. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  122. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  123. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  124. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  125. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  126. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  127. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  128. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  129. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  130. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  131. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  132. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  133. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  134. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  135. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  136. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  137. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  138. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  139. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  140. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  141. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  142. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +49 -0
  143. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  144. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +102 -0
  145. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  146. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  147. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  148. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  149. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  150. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  151. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  152. package/src/views/builder/sidebar/tabs/ViewTab.jsx +1 -1
  153. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  154. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  155. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  156. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  157. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  158. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  159. package/src/views/builder/viewer/Viewer.jsx +106 -8
  160. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +61 -4
  161. package/src/views/builder/viewer/ViewerToolbar.jsx +273 -59
  162. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  163. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  164. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  165. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  166. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  167. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  168. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  169. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  170. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  171. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  172. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  173. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  174. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  175. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  176. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  177. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  178. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  179. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  180. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  181. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  182. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  183. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  184. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  185. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  186. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  187. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  188. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  189. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  190. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  191. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  192. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  193. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  194. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  195. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  196. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  197. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  198. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  199. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  200. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  201. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  202. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  204. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  205. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  206. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +219 -5
  207. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  208. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  209. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  210. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  211. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  212. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  213. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  214. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  215. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  216. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  217. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  218. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  219. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  220. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  221. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  222. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  223. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  224. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  225. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  226. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  227. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  228. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  229. package/src/views/genericTable/ColumnConfiguratorDialog.js +33 -24
  230. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  231. package/src/views/genericTable/FormattingSettingsDialog.js +8 -3
  232. package/src/views/genericTable/SGrid.js +198 -97
  233. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  234. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  235. package/src/views/genericTable/convertStringFunctions.js +274 -138
  236. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  237. package/src/views/genericTable/updateRefHelpers.js +9 -6
  238. package/src/views/printBuilder/PrintBuilderViewer.jsx +607 -0
  239. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  240. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +3 -2
  241. package/src/@core/components/auth/AclGuard.js +0 -55
  242. package/src/@core/components/auth/AuthGuard.js +0 -40
  243. package/src/@core/components/auth/GuestGuard.js +0 -30
  244. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  245. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  246. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  247. package/src/@core/components/customizer/index.jsx +0 -470
  248. package/src/@core/components/customizer/styles.module.css +0 -169
  249. package/src/@core/components/mui/Avatar.jsx +0 -41
  250. package/src/@core/components/mui/Badge.jsx +0 -20
  251. package/src/@core/components/mui/IconButton.jsx +0 -74
  252. package/src/@core/components/mui/TabList.jsx +0 -60
  253. package/src/@core/components/option-menu/index.jsx +0 -137
  254. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  255. package/src/@core/components/spinner/index.js +0 -26
  256. package/src/@core/components/window-wrapper/index.js +0 -27
  257. package/src/@core/contexts/settingsContext.jsx +0 -98
  258. package/src/@core/hooks/useBgColor.js +0 -63
  259. package/src/@core/hooks/useImageVariant.js +0 -27
  260. package/src/@core/hooks/useLayoutInit.js +0 -37
  261. package/src/@core/hooks/useObjectCookie.js +0 -18
  262. package/src/@core/hooks/useSettings.jsx +0 -15
  263. package/src/@core/layouts/BlankLayout.js +0 -37
  264. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  265. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  266. package/src/@core/layouts/Layout.js +0 -39
  267. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  268. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  269. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  270. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  271. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  272. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  273. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  274. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  275. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  276. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  277. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  278. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  279. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  280. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  281. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  282. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  283. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  284. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  285. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  286. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  287. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  288. package/src/@core/layouts/utils.js +0 -69
  289. package/src/@core/styles/Table.module.css +0 -93
  290. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  291. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  292. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  293. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  294. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  295. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  296. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  297. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  298. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  299. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  300. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  301. package/src/@core/styles/libs/recharts/index.js +0 -47
  302. package/src/@core/styles/stepper.js +0 -103
  303. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  304. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  305. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  306. package/src/@core/svg/ContentCompact.jsx +0 -17
  307. package/src/@core/svg/ContentWide.jsx +0 -17
  308. package/src/@core/svg/DirectionLtr.jsx +0 -93
  309. package/src/@core/svg/DirectionRtl.jsx +0 -93
  310. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  311. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  312. package/src/@core/svg/LayoutVertical.jsx +0 -59
  313. package/src/@core/svg/Logo.jsx +0 -76
  314. package/src/@core/svg/SkinBordered.jsx +0 -54
  315. package/src/@core/svg/SkinDefault.jsx +0 -59
  316. package/src/@core/tailwind/plugin.js +0 -78
  317. package/src/@core/theme/ThemeComponent.js +0 -63
  318. package/src/@core/theme/ThemeOptions.js +0 -71
  319. package/src/@core/theme/breakpoints/index.js +0 -11
  320. package/src/@core/theme/colorSchemes.js +0 -326
  321. package/src/@core/theme/customShadows.js +0 -11
  322. package/src/@core/theme/globalStyles.js +0 -81
  323. package/src/@core/theme/index.js +0 -42
  324. package/src/@core/theme/overrides/accordion.js +0 -51
  325. package/src/@core/theme/overrides/accordion.jsx +0 -85
  326. package/src/@core/theme/overrides/alerts.js +0 -110
  327. package/src/@core/theme/overrides/alerts.jsx +0 -180
  328. package/src/@core/theme/overrides/autocomplete.js +0 -14
  329. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  330. package/src/@core/theme/overrides/avatar.js +0 -38
  331. package/src/@core/theme/overrides/avatars.js +0 -27
  332. package/src/@core/theme/overrides/backdrop.js +0 -22
  333. package/src/@core/theme/overrides/badges.js +0 -16
  334. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  335. package/src/@core/theme/overrides/button-group.js +0 -84
  336. package/src/@core/theme/overrides/button.js +0 -93
  337. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  338. package/src/@core/theme/overrides/card.js +0 -83
  339. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  340. package/src/@core/theme/overrides/chip.js +0 -72
  341. package/src/@core/theme/overrides/dataGrid.js +0 -114
  342. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  343. package/src/@core/theme/overrides/dialog.js +0 -120
  344. package/src/@core/theme/overrides/divider.js +0 -13
  345. package/src/@core/theme/overrides/drawer.js +0 -20
  346. package/src/@core/theme/overrides/fab.js +0 -13
  347. package/src/@core/theme/overrides/form-control-label.js +0 -19
  348. package/src/@core/theme/overrides/icon-button.js +0 -145
  349. package/src/@core/theme/overrides/index.js +0 -103
  350. package/src/@core/theme/overrides/input.js +0 -72
  351. package/src/@core/theme/overrides/link.js +0 -9
  352. package/src/@core/theme/overrides/list.js +0 -44
  353. package/src/@core/theme/overrides/menu.js +0 -25
  354. package/src/@core/theme/overrides/pagination.js +0 -41
  355. package/src/@core/theme/overrides/paper.js +0 -9
  356. package/src/@core/theme/overrides/popover.js +0 -16
  357. package/src/@core/theme/overrides/progress.js +0 -38
  358. package/src/@core/theme/overrides/radio.jsx +0 -80
  359. package/src/@core/theme/overrides/rating.js +0 -16
  360. package/src/@core/theme/overrides/rating.jsx +0 -32
  361. package/src/@core/theme/overrides/select.js +0 -19
  362. package/src/@core/theme/overrides/select.jsx +0 -52
  363. package/src/@core/theme/overrides/slider.js +0 -97
  364. package/src/@core/theme/overrides/snackbar.js +0 -19
  365. package/src/@core/theme/overrides/switch.js +0 -73
  366. package/src/@core/theme/overrides/switches.js +0 -25
  367. package/src/@core/theme/overrides/table-pagination.js +0 -39
  368. package/src/@core/theme/overrides/table.js +0 -81
  369. package/src/@core/theme/overrides/tabs.js +0 -30
  370. package/src/@core/theme/overrides/timeline.js +0 -80
  371. package/src/@core/theme/overrides/toggle-button.js +0 -33
  372. package/src/@core/theme/overrides/toggleButton.js +0 -16
  373. package/src/@core/theme/overrides/tooltip.js +0 -21
  374. package/src/@core/theme/overrides/typography.js +0 -13
  375. package/src/@core/theme/palette/index.js +0 -107
  376. package/src/@core/theme/shadows/index.js +0 -61
  377. package/src/@core/theme/shadows.js +0 -12
  378. package/src/@core/theme/spacing/index.js +0 -3
  379. package/src/@core/theme/spacing.js +0 -5
  380. package/src/@core/theme/typography/index.js +0 -65
  381. package/src/@core/theme/typography.js +0 -84
  382. package/src/@core/utils/create-emotion-cache.js +0 -5
  383. package/src/@core/utils/hex-to-rgba.js +0 -11
  384. package/src/@core/utils/serverHelpers.js +0 -45
  385. package/src/@menu/components/RouterLink.jsx +0 -18
  386. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  387. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  388. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  389. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  390. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  391. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  392. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  393. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  394. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  395. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  396. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  397. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  398. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  399. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  400. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  401. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  402. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  403. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  404. package/src/@menu/defaultConfigs.js +0 -12
  405. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  406. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  407. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  408. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  409. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  410. package/src/@menu/horizontal-menu/index.jsx +0 -8
  411. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  412. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  413. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  414. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  415. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  416. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  417. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  418. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  419. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  420. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  421. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  422. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  423. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  424. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  425. package/src/@menu/styles/styles.module.css +0 -5
  426. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  427. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  428. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  429. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  430. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  431. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  432. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  433. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  434. package/src/@menu/svg/ChevronRight.jsx +0 -9
  435. package/src/@menu/svg/Close.jsx +0 -12
  436. package/src/@menu/svg/RadioCircle.jsx +0 -12
  437. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  438. package/src/@menu/utils/menuClasses.js +0 -44
  439. package/src/@menu/utils/menuUtils.jsx +0 -145
  440. package/src/@menu/vertical-menu/index.jsx +0 -11
  441. package/src/configs/acl.js +0 -115
  442. package/src/configs/auth.js +0 -5
  443. package/src/configs/aws-exports.js +0 -30
  444. package/src/configs/firebase.js +0 -25
  445. package/src/configs/i18n.js +0 -34
  446. package/src/configs/primaryColorConfig.js +0 -35
  447. package/src/configs/themeConfig.js +0 -44
  448. package/src/layouts/UserLayout.js +0 -94
  449. package/src/layouts/UserThemeOptions.js +0 -191
  450. package/src/layouts/components/Direction.js +0 -30
  451. package/src/layouts/components/HtmlTooltip.js +0 -15
  452. package/src/layouts/components/Translations.js +0 -11
  453. package/src/layouts/components/UserDropdown.js +0 -217
  454. package/src/layouts/components/UserIcon.js +0 -40
  455. package/src/layouts/components/acl/Can.js +0 -6
  456. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  457. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  458. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  459. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  460. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  461. package/src/layouts/components/mui/StepperComps.js +0 -55
  462. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  463. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  464. package/src/libs/ApexCharts.jsx +0 -5
  465. package/src/libs/ReactPlayer.jsx +0 -5
  466. package/src/libs/Recharts.jsx +0 -4
  467. package/src/libs/auth.js +0 -124
  468. package/src/libs/styles/AppFullCalendar.js +0 -505
  469. package/src/libs/styles/AppKeenSlider.js +0 -116
  470. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  471. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  472. package/src/libs/styles/AppReactDropzone.js +0 -76
  473. package/src/libs/styles/AppReactToastify.jsx +0 -108
  474. package/src/libs/styles/AppRecharts.js +0 -55
  475. package/src/libs/styles/inputOtp.module.css +0 -39
  476. package/src/libs/styles/tiptapEditor.css +0 -72
  477. package/src/navigation/horizontal/index.js +0 -246
  478. package/src/navigation/vertical/index.js +0 -253
  479. package/src/pages/401.js +0 -70
  480. package/src/pages/404.js +0 -67
  481. package/src/pages/500.js +0 -68
  482. package/src/pages/[slug].js +0 -115
  483. package/src/pages/_document.js +0 -72
  484. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  485. package/src/pages/api/navigation/save.js +0 -218
  486. package/src/pages/authModule/acl/index.js +0 -48
  487. package/src/pages/authModule/forgot-password/index.js +0 -228
  488. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  489. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  490. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  491. package/src/pages/authModule/privacy/index.js +0 -721
  492. package/src/pages/authModule/users/index.js +0 -210
  493. package/src/pages/login/index.js +0 -328
  494. package/src/pages/mainHome/index.js +0 -181
  495. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  496. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  497. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  498. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  499. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  500. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  501. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  502. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  503. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  504. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  505. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  506. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  507. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  508. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  509. package/src/views/pages/users/UserManageDialog.js +0 -283
  510. package/src/views/pages/users/UserViewPage.js +0 -199
  511. package/src/views/users/AddUserNameDialog.js +0 -162
  512. package/src/views/users/ContactManage.js +0 -449
  513. 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
+ }