robobyte-front-builder 1.0.19 → 1.0.23

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 (520) hide show
  1. package/INTEGRATION.md +1586 -0
  2. package/README.md +928 -0
  3. package/RoboByteBuilder_User_Manual.docx +0 -0
  4. package/next.config.js +19 -48
  5. package/package.json +42 -86
  6. package/src/context/BuilderContext.jsx +191 -7
  7. package/src/context/SystemContext.js +2 -2
  8. package/src/hooks/useGlobalStore.js +36 -0
  9. package/src/hooks/useTimerEngine.js +54 -0
  10. package/src/lib/index.js +11 -3
  11. package/src/lib/layouts/BlankLayout.jsx +13 -0
  12. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +61 -7
  13. package/src/lib/themes/builderTheme.js +41 -0
  14. package/src/pages/_app.js +32 -134
  15. package/src/pages/api/ai.js +107 -0
  16. package/src/pages/builders/report/index.js +1 -0
  17. package/src/pages/builders/report/list/index.js +1 -0
  18. package/src/pages/builders/report/viewer/index.js +1 -0
  19. package/src/pages/index.js +88 -37
  20. package/src/pages/printBuilder/index.jsx +263 -0
  21. package/src/pages/printBuilder/layouts/index.jsx +298 -0
  22. package/src/pages/reportModule/reportBuilder/index.js +8 -6
  23. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +92 -25
  24. package/src/pages/reportModule/reportBuilder/reports/index.js +3 -5
  25. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +2 -3
  26. package/src/pages/viewBuilder/index.jsx +117 -32
  27. package/src/pages/viewBuilder/views/index.js +3 -3
  28. package/src/pages/viewer/[id]/index.js +2 -1
  29. package/src/services/DeleteService.js +31 -60
  30. package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
  31. package/src/services/Endpoints/ReportBuilderEndpoints.js +7 -7
  32. package/src/services/Endpoints.js +2 -0
  33. package/src/services/GetService.js +33 -54
  34. package/src/services/PatchService.js +38 -65
  35. package/src/services/PostService.js +37 -63
  36. package/src/services/UpdateService.js +39 -65
  37. package/src/services/builderHelper/actionExecutor.js +141 -25
  38. package/src/services/builderHelper/builderHelper.js +92 -0
  39. package/src/services/builderHelper/colorSchema.js +95 -0
  40. package/src/services/builderHelper/iconResolver.js +50 -0
  41. package/src/services/builderHelper/jsExecutor.js +212 -46
  42. package/src/services/builderHelper/nodeFactory.js +32 -15
  43. package/src/services/builderHelper/numberFormat.js +123 -0
  44. package/src/services/builderHelper/resolveProps.js +73 -4
  45. package/src/services/builderHelper/thresholdEngine.js +77 -0
  46. package/src/services/builderHelper/tree.js +31 -0
  47. package/src/services/components/agGridAutoComplete.js +5 -9
  48. package/src/services/config.js +9 -1
  49. package/src/services/globalStore.js +80 -0
  50. package/src/services/helper/multiSelectEditor.js +5 -9
  51. package/src/services/helper/multiSelectEditorByBuilder.js +5 -9
  52. package/src/services/reportData/fetchReportData.js +69 -28
  53. package/src/services/routerRef.js +35 -0
  54. package/src/services/sessionLog.js +171 -0
  55. package/src/views/ConfirmDialog.js +2 -2
  56. package/src/views/builder/JSEditor.js +105 -107
  57. package/src/views/builder/SessionLogDialog.jsx +350 -0
  58. package/src/views/builder/UnsavedChangesGuard.jsx +103 -0
  59. package/src/views/builder/inspector/Inspector.jsx +6 -9
  60. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  61. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  62. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  63. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  64. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  65. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  66. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  67. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  68. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  69. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  70. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  71. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  72. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  73. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  74. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  75. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  76. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  77. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  78. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  79. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  80. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  81. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  82. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  83. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  84. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  85. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  86. package/src/views/builder/inspector/definitions/index.js +106 -19
  87. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  88. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  89. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  90. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  91. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  92. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  93. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  94. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  95. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  96. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  97. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  98. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  99. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  100. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  101. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  102. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  103. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  104. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  105. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  106. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  107. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  108. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  109. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  110. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  111. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  112. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  113. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  114. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  115. package/src/views/builder/inspector/definitions/reportViewer/main.js +28 -1
  116. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  117. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  118. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  119. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  120. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  121. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  122. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  123. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  124. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  125. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  126. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  127. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  128. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  129. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  130. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  131. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  132. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  133. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  134. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  135. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  136. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  137. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  138. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  139. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  140. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  141. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  142. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  143. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  144. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  145. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  146. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  147. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  148. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +53 -0
  149. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  150. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +167 -0
  151. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  152. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  153. package/src/views/builder/sidebar/tabs/AiTab/trainingExport.js +131 -0
  154. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  155. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  156. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  157. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  158. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  159. package/src/views/builder/sidebar/tabs/ViewTab.jsx +173 -13
  160. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  161. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  162. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  163. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  164. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  165. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  166. package/src/views/builder/viewer/Viewer.jsx +106 -8
  167. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +70 -9
  168. package/src/views/builder/viewer/ViewerToolbar.jsx +285 -56
  169. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  170. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  171. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  172. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  173. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  174. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  175. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  176. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  177. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  178. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  179. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  180. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  181. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  182. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  183. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  184. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  185. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  186. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  187. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  188. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  189. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  190. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  191. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  192. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  193. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  194. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  195. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  196. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  197. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  198. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  199. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  200. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  201. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  202. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  204. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  205. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  206. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  207. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  208. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  209. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  210. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  211. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  212. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  213. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +263 -5
  214. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  215. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  216. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  217. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  218. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  219. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  220. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  221. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  222. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  223. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  224. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  225. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  226. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  227. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  228. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  229. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  230. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  231. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  232. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  233. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  234. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  235. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  236. package/src/views/genericTable/ColumnConfiguratorDialog.js +33 -24
  237. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  238. package/src/views/genericTable/FormattingSettingsDialog.js +8 -3
  239. package/src/views/genericTable/SGrid.js +821 -448
  240. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  241. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  242. package/src/views/genericTable/convertStringFunctions.js +274 -138
  243. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  244. package/src/views/genericTable/updateRefHelpers.js +9 -6
  245. package/src/views/printBuilder/PrintBuilderViewer.jsx +627 -0
  246. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  247. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +3 -2
  248. package/src/@core/components/auth/AclGuard.js +0 -55
  249. package/src/@core/components/auth/AuthGuard.js +0 -40
  250. package/src/@core/components/auth/GuestGuard.js +0 -30
  251. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  252. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  253. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  254. package/src/@core/components/customizer/index.jsx +0 -470
  255. package/src/@core/components/customizer/styles.module.css +0 -169
  256. package/src/@core/components/mui/Avatar.jsx +0 -41
  257. package/src/@core/components/mui/Badge.jsx +0 -20
  258. package/src/@core/components/mui/IconButton.jsx +0 -74
  259. package/src/@core/components/mui/TabList.jsx +0 -60
  260. package/src/@core/components/option-menu/index.jsx +0 -137
  261. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  262. package/src/@core/components/spinner/index.js +0 -26
  263. package/src/@core/components/window-wrapper/index.js +0 -27
  264. package/src/@core/contexts/settingsContext.jsx +0 -98
  265. package/src/@core/hooks/useBgColor.js +0 -63
  266. package/src/@core/hooks/useImageVariant.js +0 -27
  267. package/src/@core/hooks/useLayoutInit.js +0 -37
  268. package/src/@core/hooks/useObjectCookie.js +0 -18
  269. package/src/@core/hooks/useSettings.jsx +0 -15
  270. package/src/@core/layouts/BlankLayout.js +0 -37
  271. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  272. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  273. package/src/@core/layouts/Layout.js +0 -39
  274. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  275. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  276. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  277. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  278. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  279. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  280. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  281. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  282. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  283. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  284. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  285. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  286. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  287. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  288. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  289. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  290. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  291. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  292. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  293. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  294. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  295. package/src/@core/layouts/utils.js +0 -69
  296. package/src/@core/styles/Table.module.css +0 -93
  297. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  298. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  299. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  300. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  301. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  302. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  303. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  304. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  305. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  306. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  307. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  308. package/src/@core/styles/libs/recharts/index.js +0 -47
  309. package/src/@core/styles/stepper.js +0 -103
  310. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  311. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  312. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  313. package/src/@core/svg/ContentCompact.jsx +0 -17
  314. package/src/@core/svg/ContentWide.jsx +0 -17
  315. package/src/@core/svg/DirectionLtr.jsx +0 -93
  316. package/src/@core/svg/DirectionRtl.jsx +0 -93
  317. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  318. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  319. package/src/@core/svg/LayoutVertical.jsx +0 -59
  320. package/src/@core/svg/Logo.jsx +0 -76
  321. package/src/@core/svg/SkinBordered.jsx +0 -54
  322. package/src/@core/svg/SkinDefault.jsx +0 -59
  323. package/src/@core/tailwind/plugin.js +0 -78
  324. package/src/@core/theme/ThemeComponent.js +0 -63
  325. package/src/@core/theme/ThemeOptions.js +0 -71
  326. package/src/@core/theme/breakpoints/index.js +0 -11
  327. package/src/@core/theme/colorSchemes.js +0 -326
  328. package/src/@core/theme/customShadows.js +0 -11
  329. package/src/@core/theme/globalStyles.js +0 -81
  330. package/src/@core/theme/index.js +0 -42
  331. package/src/@core/theme/overrides/accordion.js +0 -51
  332. package/src/@core/theme/overrides/accordion.jsx +0 -85
  333. package/src/@core/theme/overrides/alerts.js +0 -110
  334. package/src/@core/theme/overrides/alerts.jsx +0 -180
  335. package/src/@core/theme/overrides/autocomplete.js +0 -14
  336. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  337. package/src/@core/theme/overrides/avatar.js +0 -38
  338. package/src/@core/theme/overrides/avatars.js +0 -27
  339. package/src/@core/theme/overrides/backdrop.js +0 -22
  340. package/src/@core/theme/overrides/badges.js +0 -16
  341. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  342. package/src/@core/theme/overrides/button-group.js +0 -84
  343. package/src/@core/theme/overrides/button.js +0 -93
  344. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  345. package/src/@core/theme/overrides/card.js +0 -83
  346. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  347. package/src/@core/theme/overrides/chip.js +0 -72
  348. package/src/@core/theme/overrides/dataGrid.js +0 -114
  349. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  350. package/src/@core/theme/overrides/dialog.js +0 -120
  351. package/src/@core/theme/overrides/divider.js +0 -13
  352. package/src/@core/theme/overrides/drawer.js +0 -20
  353. package/src/@core/theme/overrides/fab.js +0 -13
  354. package/src/@core/theme/overrides/form-control-label.js +0 -19
  355. package/src/@core/theme/overrides/icon-button.js +0 -145
  356. package/src/@core/theme/overrides/index.js +0 -103
  357. package/src/@core/theme/overrides/input.js +0 -72
  358. package/src/@core/theme/overrides/link.js +0 -9
  359. package/src/@core/theme/overrides/list.js +0 -44
  360. package/src/@core/theme/overrides/menu.js +0 -25
  361. package/src/@core/theme/overrides/pagination.js +0 -41
  362. package/src/@core/theme/overrides/paper.js +0 -9
  363. package/src/@core/theme/overrides/popover.js +0 -16
  364. package/src/@core/theme/overrides/progress.js +0 -38
  365. package/src/@core/theme/overrides/radio.jsx +0 -80
  366. package/src/@core/theme/overrides/rating.js +0 -16
  367. package/src/@core/theme/overrides/rating.jsx +0 -32
  368. package/src/@core/theme/overrides/select.js +0 -19
  369. package/src/@core/theme/overrides/select.jsx +0 -52
  370. package/src/@core/theme/overrides/slider.js +0 -97
  371. package/src/@core/theme/overrides/snackbar.js +0 -19
  372. package/src/@core/theme/overrides/switch.js +0 -73
  373. package/src/@core/theme/overrides/switches.js +0 -25
  374. package/src/@core/theme/overrides/table-pagination.js +0 -39
  375. package/src/@core/theme/overrides/table.js +0 -81
  376. package/src/@core/theme/overrides/tabs.js +0 -30
  377. package/src/@core/theme/overrides/timeline.js +0 -80
  378. package/src/@core/theme/overrides/toggle-button.js +0 -33
  379. package/src/@core/theme/overrides/toggleButton.js +0 -16
  380. package/src/@core/theme/overrides/tooltip.js +0 -21
  381. package/src/@core/theme/overrides/typography.js +0 -13
  382. package/src/@core/theme/palette/index.js +0 -107
  383. package/src/@core/theme/shadows/index.js +0 -61
  384. package/src/@core/theme/shadows.js +0 -12
  385. package/src/@core/theme/spacing/index.js +0 -3
  386. package/src/@core/theme/spacing.js +0 -5
  387. package/src/@core/theme/typography/index.js +0 -65
  388. package/src/@core/theme/typography.js +0 -84
  389. package/src/@core/utils/create-emotion-cache.js +0 -5
  390. package/src/@core/utils/hex-to-rgba.js +0 -11
  391. package/src/@core/utils/serverHelpers.js +0 -45
  392. package/src/@menu/components/RouterLink.jsx +0 -18
  393. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  394. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  395. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  396. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  397. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  398. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  399. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  400. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  401. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  402. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  403. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  404. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  405. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  406. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  407. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  408. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  409. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  410. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  411. package/src/@menu/defaultConfigs.js +0 -12
  412. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  413. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  414. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  415. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  416. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  417. package/src/@menu/horizontal-menu/index.jsx +0 -8
  418. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  419. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  420. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  421. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  422. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  423. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  424. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  425. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  426. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  427. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  428. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  429. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  430. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  431. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  432. package/src/@menu/styles/styles.module.css +0 -5
  433. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  434. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  435. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  436. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  437. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  438. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  439. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  440. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  441. package/src/@menu/svg/ChevronRight.jsx +0 -9
  442. package/src/@menu/svg/Close.jsx +0 -12
  443. package/src/@menu/svg/RadioCircle.jsx +0 -12
  444. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  445. package/src/@menu/utils/menuClasses.js +0 -44
  446. package/src/@menu/utils/menuUtils.jsx +0 -145
  447. package/src/@menu/vertical-menu/index.jsx +0 -11
  448. package/src/configs/acl.js +0 -115
  449. package/src/configs/auth.js +0 -5
  450. package/src/configs/aws-exports.js +0 -30
  451. package/src/configs/firebase.js +0 -25
  452. package/src/configs/i18n.js +0 -34
  453. package/src/configs/primaryColorConfig.js +0 -35
  454. package/src/configs/themeConfig.js +0 -44
  455. package/src/layouts/UserLayout.js +0 -94
  456. package/src/layouts/UserThemeOptions.js +0 -191
  457. package/src/layouts/components/Direction.js +0 -30
  458. package/src/layouts/components/HtmlTooltip.js +0 -15
  459. package/src/layouts/components/Translations.js +0 -11
  460. package/src/layouts/components/UserDropdown.js +0 -217
  461. package/src/layouts/components/UserIcon.js +0 -40
  462. package/src/layouts/components/acl/Can.js +0 -6
  463. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  464. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  465. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  466. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  467. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  468. package/src/layouts/components/mui/StepperComps.js +0 -55
  469. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  470. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  471. package/src/libs/ApexCharts.jsx +0 -5
  472. package/src/libs/ReactPlayer.jsx +0 -5
  473. package/src/libs/Recharts.jsx +0 -4
  474. package/src/libs/auth.js +0 -124
  475. package/src/libs/styles/AppFullCalendar.js +0 -505
  476. package/src/libs/styles/AppKeenSlider.js +0 -116
  477. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  478. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  479. package/src/libs/styles/AppReactDropzone.js +0 -76
  480. package/src/libs/styles/AppReactToastify.jsx +0 -108
  481. package/src/libs/styles/AppRecharts.js +0 -55
  482. package/src/libs/styles/inputOtp.module.css +0 -39
  483. package/src/libs/styles/tiptapEditor.css +0 -72
  484. package/src/navigation/horizontal/index.js +0 -246
  485. package/src/navigation/vertical/index.js +0 -253
  486. package/src/pages/401.js +0 -70
  487. package/src/pages/404.js +0 -67
  488. package/src/pages/500.js +0 -68
  489. package/src/pages/[slug].js +0 -115
  490. package/src/pages/_document.js +0 -72
  491. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  492. package/src/pages/api/navigation/save.js +0 -218
  493. package/src/pages/authModule/acl/index.js +0 -48
  494. package/src/pages/authModule/forgot-password/index.js +0 -228
  495. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  496. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  497. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  498. package/src/pages/authModule/privacy/index.js +0 -721
  499. package/src/pages/authModule/users/index.js +0 -210
  500. package/src/pages/login/index.js +0 -328
  501. package/src/pages/mainHome/index.js +0 -181
  502. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  503. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  504. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  505. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  506. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  507. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  508. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  509. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  510. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  511. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  512. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  513. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  514. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  515. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  516. package/src/views/pages/users/UserManageDialog.js +0 -283
  517. package/src/views/pages/users/UserViewPage.js +0 -199
  518. package/src/views/users/AddUserNameDialog.js +0 -162
  519. package/src/views/users/ContactManage.js +0 -449
  520. package/src/views/users/ResetPasswordDialog.js +0 -242
@@ -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
+ }
@@ -1,76 +1,232 @@
1
1
  import { Services } from '../Endpoints'
2
2
  import fetchReportDataByPageId from '../reportData/fetchReportData'
3
+ import toast from 'react-hot-toast'
4
+ import { getRouter } from '../routerRef'
5
+ import { getGlobalData, setGlobalData } from '../globalStore'
6
+
7
+ // ─────────────────────────────────────────────────────────────────────────────
8
+ // showToast — available in every Calculation as a named function.
9
+ // react-hot-toast is a direct dependency of this package, and <Toaster /> is
10
+ // mounted by RoboByteFrontBuilderProvider, so both use the same module instance.
11
+ //
12
+ // Usage (inside any action code):
13
+ // showToast('Saved successfully', 'success')
14
+ // showToast('Something went wrong', 'error')
15
+ // showToast('Please review the form', 'warning')
16
+ // showToast('Data loaded', 'info')
17
+ //
18
+ // type: 'success' | 'error' | 'warning' | 'info' | 'loading' (default: 'default')
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+ function showToast(message, type = 'default') {
21
+ switch (type) {
22
+ case 'success': return toast.success(message)
23
+ case 'error': return toast.error(message)
24
+ case 'warning': return toast(message, { icon: '⚠️' })
25
+ case 'info': return toast(message, { icon: 'ℹ️' })
26
+ case 'loading': return toast.loading(message)
27
+ default: return toast(message)
28
+ }
29
+ }
30
+
31
+ // ─────────────────────────────────────────────────────────────────────────────
32
+ // URL helpers
33
+ // ─────────────────────────────────────────────────────────────────────────────
3
34
 
4
35
  /**
5
- * Centralized JSEditor code executor
6
- * Executes user-defined Calculation functions with injected services
36
+ * Returns current page URL params as a plain object.
37
+ * Computed fresh at execution time no React hook required.
7
38
  *
8
- * @param {string} code - The user's JavaScript code containing a Calculation function
9
- * @param {object} context - Execution context with form and data
10
- * @param {object} context.form - Form data
11
- * @param {object} context.data - Global data object
12
- * @returns {Promise<any>} - Result from the Calculation function
39
+ * Shape: { query: Record<string,string>, pathname: string, asPath: string }
13
40
  */
14
- export async function executeJSCode(code, context = {}) {
15
- if (!code) {
16
- throw new Error('No code provided to execute')
41
+ export function getUrlParams() {
42
+ if (typeof window === 'undefined') {
43
+ return { query: {}, pathname: '', asPath: '' }
44
+ }
45
+ const search = new URLSearchParams(window.location.search)
46
+ const query = Object.fromEntries(search.entries())
47
+ return {
48
+ query,
49
+ pathname: window.location.pathname,
50
+ asPath: window.location.pathname + window.location.search,
51
+ }
52
+ }
53
+
54
+ // ─────────────────────────────────────────────────────────────────────────────
55
+ // Unified context shape
56
+ // ─────────────────────────────────────────────────────────────────────────────
57
+ //
58
+ // form — form field values (state snapshot, read-only)
59
+ // data — reactive data state for this component/dialog/view (read-only snapshot)
60
+ // setData — state setter; Calculation can call setData(prev => ({...}))
61
+ // dataRef — mutable non-reactive store (read/write, no re-render)
62
+ // reportRefs — map of { [nodeId]: updateRef } for every ReportViewer on page
63
+ // openDialog / closeDialog — open or close a named dialog
64
+ // urlParams — { query, pathname, asPath } from window.location (auto-computed)
65
+ //
66
+ // page — always points to the PARENT/MAIN-PAGE stores.
67
+ // Inside a dialog or embedded view `data` is the isolated child
68
+ // state while `page.data` is the outer page's state.
69
+ // In a top-level page page === { data, setData, dataRef, reportRefs }.
70
+ //
71
+ // Calculation signature:
72
+ // function Calculation(form, data, setData, dataRef, reportRefs, openDialog, closeDialog, urlParams, page) { ... }
73
+ //
74
+ // IMPORTANT — setData and data are kept in sync within a single execution:
75
+ // setData(prev => ({ ...prev, userId: 42 }))
76
+ // console.log(data.userId) // ← 42, not stale. Works as expected.
77
+ //
78
+ // ─────────────────────────────────────────────────────────────────────────────
79
+
80
+ function extractContext(context) {
81
+ const rawData = context.data ?? {}
82
+ const rawSetData = context.setData ?? (() => {})
83
+ const dataRef = context.dataRef ?? {}
84
+ const reportRefs = context.reportRefs ?? {}
85
+
86
+ // ── Live data snapshot ────────────────────────────────────────────────────
87
+ //
88
+ // React state updates are asynchronous: calling setData() schedules a
89
+ // re-render but does NOT change the `data` reference captured by the current
90
+ // Calculation closure. This means code like:
91
+ //
92
+ // setData(prev => ({ ...prev, userId: 42 }))
93
+ // console.log(data.userId) // ← still undefined!
94
+ //
95
+ // is confusing and hard to debug.
96
+ //
97
+ // Fix: maintain a mutable `dataSnapshot` object that is kept in sync with
98
+ // state. We pass this object (not the raw snapshot) as `data` to the
99
+ // Calculation. When wrappedSetData is called, dataSnapshot is updated
100
+ // in-place before the React re-render is scheduled — so any code that runs
101
+ // after setData() in the same function sees the new values immediately.
102
+ //
103
+ const dataSnapshot = { ...rawData }
104
+
105
+ const wrappedSetData = (updater) => {
106
+ // Compute the next state eagerly using our local snapshot as `prev`.
107
+ // This is safe because we always keep the snapshot in sync with real state.
108
+ const next = typeof updater === 'function' ? updater(dataSnapshot) : updater
109
+ if (next && typeof next === 'object') {
110
+ // Mutate snapshot in-place so that subsequent reads of `data` inside
111
+ // the same Calculation see the updated values.
112
+ Object.keys(dataSnapshot).forEach(k => delete dataSnapshot[k])
113
+ Object.assign(dataSnapshot, next)
114
+ }
115
+ // Schedule the React state update (triggers component re-render)
116
+ rawSetData(next)
17
117
  }
18
118
 
19
- const { form = {}, data = {} } = context
119
+ return {
120
+ form: context.form ?? {},
121
+ data: dataSnapshot, // ← live-updating reference
122
+ setData: wrappedSetData, // ← syncs snapshot before scheduling re-render
123
+ dataRef,
124
+ reportRefs,
125
+ openDialog: context.openDialog ?? (() => {}),
126
+ closeDialog: context.closeDialog ?? (() => {}),
127
+ openPrintLayout: context.openPrintLayout ?? (() => {}),
128
+ closePrintLayout: context.closePrintLayout ?? (() => {}),
129
+ urlParams: getUrlParams(),
130
+ // `page` — always the parent/main-page stores.
131
+ // In dialogs/embedded views these differ from the isolated `data`.
132
+ // In a top-level page they are identical.
133
+ page: {
134
+ data: context.pageData ?? dataSnapshot,
135
+ setData: context.pageSetData ?? wrappedSetData,
136
+ dataRef: context.pageDataRef ?? dataRef,
137
+ reportRefs: context.pageReportRefs ?? reportRefs,
138
+ },
139
+ // Repeater-scoped item context — null outside a Repeater.
140
+ // Available as closure variables `dataItem` and `itemIndex` in expressions.
141
+ dataItem: context.dataItem ?? null,
142
+ itemIndex: context.itemIndex ?? null,
143
+ }
144
+ }
145
+
146
+ // ─────────────────────────────────────────────────────────────────────────────
147
+ // Async executor (used by action executor and direct calls)
148
+ // ─────────────────────────────────────────────────────────────────────────────
149
+
150
+ /**
151
+ * Execute a user-defined Calculation function asynchronously.
152
+ *
153
+ * @param {string} code - JS code containing a Calculation function
154
+ * @param {object} context - Execution context (see shape above)
155
+ * @returns {Promise<any>}
156
+ */
157
+ export async function executeJSCode(code, context = {}) {
158
+ if (!code) throw new Error('No code provided to execute')
159
+
160
+ const { form, data, setData, dataRef, reportRefs, openDialog, closeDialog,
161
+ openPrintLayout, closePrintLayout, urlParams, page } = extractContext(context)
162
+
163
+ // extraVars: optional plain object of named variables to inject directly into
164
+ // the Calculation's lexical scope. e.g. { rowData: params.data }
165
+ const extraVars = (context.extraVars && typeof context.extraVars === 'object') ? context.extraVars : {}
166
+ const extraNames = Object.keys(extraVars)
167
+ const extraValues = Object.values(extraVars)
20
168
 
21
169
  try {
22
- // Create async function from code with services available
23
170
  const fn = new Function(
24
- 'form',
25
- 'data',
26
- 'GetService',
27
- 'PostService',
28
- 'UpdateService',
29
- 'DeleteService',
30
- 'PatchService',
171
+ 'form', 'data', 'setData', 'dataRef', 'reportRefs', 'openDialog', 'closeDialog',
172
+ 'openPrintLayout', 'closePrintLayout',
173
+ 'urlParams', 'page',
174
+ 'GetService', 'PostService', 'UpdateService', 'DeleteService', 'PatchService',
31
175
  'fetchReportData',
176
+ 'showToast',
177
+ 'router',
178
+ 'globalData', 'setGlobalData',
179
+ ...extraNames,
32
180
  `
33
181
  return (async function() {
34
182
  ${code}
35
183
  if (typeof Calculation !== 'function') {
36
184
  throw new Error('Calculation function not found')
37
185
  }
38
- return await Calculation(form, data)
186
+ return await Calculation(form, data, setData, dataRef, reportRefs, openDialog, closeDialog, openPrintLayout, closePrintLayout, urlParams, page)
39
187
  })()
40
188
  `
41
189
  )
42
190
 
43
- // Execute the function with services
44
- const result = await fn(
45
- form,
46
- data,
191
+ return await fn(
192
+ form, data, setData, dataRef, reportRefs, openDialog, closeDialog,
193
+ openPrintLayout, closePrintLayout,
194
+ urlParams, page,
47
195
  Services.GetService,
48
196
  Services.PostService,
49
197
  Services.UpdateService,
50
198
  Services.DeleteService,
51
199
  Services.PatchService,
52
- fetchReportDataByPageId
200
+ fetchReportDataByPageId,
201
+ showToast,
202
+ getRouter(),
203
+ getGlobalData(), setGlobalData,
204
+ ...extraValues
53
205
  )
54
-
55
- return result
56
206
  } catch (error) {
57
207
  console.error('JSCode execution error:', error)
58
208
  throw error
59
209
  }
60
210
  }
61
211
 
212
+ // ─────────────────────────────────────────────────────────────────────────────
213
+ // Sync factory (used by resolveProps for expression-based prop resolution)
214
+ // ─────────────────────────────────────────────────────────────────────────────
215
+
62
216
  /**
63
- * Synchronous version for prop resolution
64
- * Returns the Calculation function itself without executing it
217
+ * Parse a user Calculation function synchronously and return it ready to call.
218
+ * The returned function has services in its closure and accepts:
219
+ * (form, data, setData, dataRef, reportRefs, openDialog, closeDialog, urlParams, page)
65
220
  *
66
- * @param {string} code - The user's JavaScript code containing a Calculation function
67
- * @param {object} context - Execution context with form and data
68
- * @returns {Function} - The Calculation function ready to be called
221
+ * @param {string} code - JS code containing a Calculation function
222
+ * @param {object} context - Execution context (see shape above)
223
+ * @returns {Function} - The Calculation function
69
224
  */
70
225
  export function getJSCalculationFunction(code, context = {}) {
71
- if (!code) {
72
- throw new Error('No code provided')
73
- }
226
+ if (!code) throw new Error('No code provided')
227
+
228
+ const { form, data, setData, dataRef, reportRefs, openDialog, closeDialog,
229
+ openPrintLayout, closePrintLayout, urlParams, page, dataItem, itemIndex } = extractContext(context)
74
230
 
75
231
  try {
76
232
  const hasAsyncCalculation = /async\s+function\s+Calculation/.test(code)
@@ -81,13 +237,18 @@ export function getJSCalculationFunction(code, context = {}) {
81
237
  : code
82
238
 
83
239
  const fn = new Function(
84
- ...Object.keys(context),
85
- 'GetService',
86
- 'PostService',
87
- 'UpdateService',
88
- 'DeleteService',
89
- 'PatchService',
240
+ 'form', 'data', 'setData', 'dataRef', 'reportRefs', 'openDialog', 'closeDialog',
241
+ 'openPrintLayout', 'closePrintLayout',
242
+ 'urlParams', 'page',
243
+ 'GetService', 'PostService', 'UpdateService', 'DeleteService', 'PatchService',
90
244
  'fetchReportData',
245
+ 'showToast',
246
+ 'router',
247
+ 'globalData', 'setGlobalData',
248
+ // Repeater-scoped variables — available as bare names inside expressions.
249
+ // `dataItem` — the current repeated item object (null outside a Repeater)
250
+ // `itemIndex` — the current iteration index (null outside a Repeater)
251
+ 'dataItem', 'itemIndex',
91
252
  `
92
253
  ${normalizedCode}
93
254
  if (typeof Calculation !== 'function') {
@@ -97,17 +258,22 @@ return Calculation
97
258
  `
98
259
  )
99
260
 
100
- const calc = fn(
101
- ...Object.values(context),
261
+ // Return the raw Calculation function — caller is responsible for passing all args
262
+ return fn(
263
+ form, data, setData, dataRef, reportRefs, openDialog, closeDialog,
264
+ openPrintLayout, closePrintLayout,
265
+ urlParams, page,
102
266
  Services.GetService,
103
267
  Services.PostService,
104
268
  Services.UpdateService,
105
269
  Services.DeleteService,
106
270
  Services.PatchService,
107
- fetchReportDataByPageId
271
+ fetchReportDataByPageId,
272
+ showToast,
273
+ getRouter(),
274
+ getGlobalData(), setGlobalData,
275
+ dataItem, itemIndex
108
276
  )
109
-
110
- return calc
111
277
  } catch (error) {
112
278
  console.error('JSCode parsing error:', error)
113
279
  throw error
@@ -11,34 +11,51 @@ const CONTAINER_TYPES = [
11
11
  'repeater',
12
12
  'widget',
13
13
  'layout',
14
- 'layout-cell'
14
+ 'layout-cell',
15
+ 'dialog',
15
16
  ]
16
17
 
18
+ /**
19
+ * Recursively replaces every node `id` in a tree with a fresh UUID.
20
+ * Used when a saved widget is dropped so each instance gets unique IDs.
21
+ */
22
+ export function remapIds(node) {
23
+ if (!node || typeof node !== 'object') return node
24
+ return {
25
+ ...node,
26
+ id: `cmp_${crypto.randomUUID()}`,
27
+ children: Array.isArray(node.children)
28
+ ? node.children.map(remapIds)
29
+ : node.children,
30
+ }
31
+ }
32
+
17
33
  export function createNode(type, overrides = {}) {
34
+ // When a full saved node tree is passed (e.g. a widget drop), the overrides
35
+ // object already contains an `id` from the saved schema. If we just spread it
36
+ // every drop of the same widget shares identical IDs, breaking selection.
37
+ // Detect this case and remap the entire tree to fresh IDs instead.
38
+ if (overrides && overrides.id) {
39
+ return remapIds(overrides)
40
+ }
41
+
18
42
  const isContainer = CONTAINER_TYPES.includes(type)
19
- const randomKey = `${type}_${Math.random().toString(36).substring(2, 9)}`
43
+ const randomKey = `${type}_${Math.random().toString(36).substring(2, 9)}`
20
44
 
21
- const node = {
45
+ return {
22
46
  id: `cmp_${crypto.randomUUID()}`,
23
47
  type,
24
48
  props: {
25
49
  main: {
26
- key: {
27
- valueType: 'value',
28
- value: randomKey
29
- },
30
- enabled: true
50
+ key: { valueType: 'value', value: randomKey },
51
+ enabled: true,
31
52
  },
32
53
  style: {},
33
- advanced: {}
34
- },
35
- expressions: {
36
- main: {}
54
+ advanced: {},
37
55
  },
56
+ expressions: { main: {} },
38
57
  className: '',
39
58
  children: isContainer ? [] : undefined,
40
- ...overrides
59
+ ...overrides,
41
60
  }
42
-
43
- return node
44
61
  }