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
@@ -0,0 +1,240 @@
1
+ import { Box } from '@mui/material'
2
+ import ViewerComponentWrapper from '../ViewerComponentWrapper'
3
+ import { resolveProps } from 'services/builderHelper/resolveProps'
4
+
5
+ // Convert any cell value to a printable string.
6
+ // Objects / arrays → compact JSON. Primitives → native string coercion.
7
+ function cellText(value) {
8
+ if (value === null || value === undefined) return ''
9
+ if (typeof value === 'object') {
10
+ try { return JSON.stringify(value) } catch { return String(value) }
11
+ }
12
+ return String(value)
13
+ }
14
+
15
+ /**
16
+ * DataTableViewerRenderer
17
+ *
18
+ * A lightweight, print-ready table that reads a flat array from
19
+ * viewerContext.data[dataKey] and renders it using configured column mappings.
20
+ *
21
+ * Unlike ReportViewer it never fetches data — the caller is responsible for
22
+ * loading the array into data[dataKey] before print/preview.
23
+ *
24
+ * Inspector props (see definitions/dataTableViewer/main.js):
25
+ * dataKey — key in viewerContext.data that holds the rows array
26
+ * columns — [{ label, field }] (configured via TableColumnsEditor)
27
+ * fontSize — optional, default 12
28
+ * headerBgColor — optional, default '#f0f0f0'
29
+ * striped — optional boolean, alternate row shading
30
+ * bordered — optional boolean, show cell borders (default true)
31
+ */
32
+ export default function DataTableViewerRenderer({ node, viewerContext }) {
33
+ const {
34
+ data, form, setData, dataRef, reportRefs, openDialog, closeDialog,
35
+ pageData, pageSetData, pageDataRef, pageReportRefs,
36
+ isEditMode,
37
+ } = viewerContext
38
+
39
+ const resolveCtx = {
40
+ form, data, setData,
41
+ dataRef: dataRef?.current ?? {},
42
+ reportRefs: reportRefs?.current ?? {},
43
+ openDialog: openDialog ?? (() => {}),
44
+ closeDialog: closeDialog ?? (() => {}),
45
+ pageData, pageSetData, pageDataRef, pageReportRefs,
46
+ }
47
+
48
+ const main = resolveProps(node, 'main', resolveCtx)
49
+
50
+ const dataKey = main.dataKey || ''
51
+ const columns = Array.isArray(main.columns) ? main.columns : []
52
+
53
+ // ── Table
54
+ const tableWidth = main.tableWidth || '100%'
55
+
56
+ // ── Header
57
+ const showHeader = main.showHeader !== false // default true
58
+ const headerBg = main.headerBgColor ?? '#f0f0f0'
59
+ const headerText = main.headerTextColor || undefined
60
+ const headerFontSize = main.headerFontSize != null ? Number(main.headerFontSize) : undefined
61
+ const headerAlign = main.headerAlign || 'left'
62
+ const headerPH = main.headerPaddingH != null ? `${main.headerPaddingH}px` : '8px'
63
+ const headerPV = main.headerPaddingV != null ? `${main.headerPaddingV}px` : '6px'
64
+
65
+ // ── Cell
66
+ const fontSize = main.fontSize ?? 12
67
+ const cellText2 = main.cellTextColor || undefined
68
+ const cellAlign = main.cellAlign || 'left'
69
+ const cellPH = main.cellPaddingH != null ? `${main.cellPaddingH}px` : '8px'
70
+ const cellPV = main.cellPaddingV != null ? `${main.cellPaddingV}px` : '5px'
71
+ const cellVAlign = main.cellVerticalAlign || 'top'
72
+
73
+ // ── Row
74
+ const striped = main.striped ?? false
75
+ const stripedColor = main.stripedColor || '#f9f9f9'
76
+ const rowHover = main.rowHover ?? false
77
+ const rowHoverColor = main.rowHoverColor || '#f0f4ff'
78
+
79
+ // ── Border
80
+ const bordered = main.bordered !== false // default true
81
+ const borderColor = main.borderColor || '#ccc'
82
+ const borderWidth = main.borderWidth != null ? Number(main.borderWidth) : 1
83
+
84
+ // Parse testData — accepts a JS array value or a JSON string expression
85
+ let testRows = []
86
+ if (main.testData) {
87
+ if (Array.isArray(main.testData)) {
88
+ testRows = main.testData
89
+ } else if (typeof main.testData === 'string') {
90
+ try { testRows = JSON.parse(main.testData) } catch { /* ignore */ }
91
+ }
92
+ }
93
+
94
+ const liveRows = Array.isArray(data?.[dataKey]) ? data[dataKey] : []
95
+ // Use live data when available; fall back to testData for preview/edit
96
+ const rows = liveRows.length > 0 ? liveRows : testRows
97
+
98
+ // ── Edit mode placeholder ─────────────────────────────────────────────────
99
+ if (isEditMode) {
100
+ return (
101
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
102
+ <Box sx={{
103
+ border: '2px dashed #80cbc4', borderRadius: 1, p: 1.5, m: 0.5,
104
+ bgcolor: '#e0f2f1', display: 'flex', flexDirection: 'column', gap: 0.5, minHeight: 72,
105
+ }}>
106
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
107
+ <Box sx={{ fontSize: 10, fontWeight: 700, color: '#00796b',
108
+ textTransform: 'uppercase', letterSpacing: 0.5, flexShrink: 0 }}>
109
+ Data Table
110
+ </Box>
111
+ {columns.length > 0 && (
112
+ <Box sx={{ fontSize: 10, color: '#4db6ac', ml: 'auto', flexShrink: 0 }}>
113
+ {columns.length} col{columns.length !== 1 ? 's' : ''}
114
+ </Box>
115
+ )}
116
+ </Box>
117
+
118
+ {dataKey && (
119
+ <Box sx={{ display: 'flex', gap: 0.5, alignItems: 'baseline' }}>
120
+ <Box sx={{ fontSize: 9, color: '#4db6ac', fontWeight: 600, minWidth: 48, flexShrink: 0 }}>
121
+ dataKey
122
+ </Box>
123
+ <Box sx={{ fontSize: 10, color: '#004d40', fontFamily: 'monospace' }}>
124
+ {cellText(dataKey)}
125
+ </Box>
126
+ </Box>
127
+ )}
128
+
129
+ {columns.length > 0 && (
130
+ <Box sx={{ fontSize: 9, color: '#26a69a', mt: 0.25,
131
+ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
132
+ {columns.slice(0, 6).map(c => c.label || c.field || '?').join(' · ')}
133
+ {columns.length > 6 ? ` · +${columns.length - 6} more` : ''}
134
+ </Box>
135
+ )}
136
+
137
+ {columns.length === 0 && (
138
+ <Box sx={{ fontSize: 10, color: '#80cbc4', fontStyle: 'italic' }}>
139
+ No columns configured
140
+ </Box>
141
+ )}
142
+
143
+ {testRows.length > 0 && (
144
+ <Box sx={{ fontSize: 9, color: '#00796b', mt: 0.25 }}>
145
+ ⚡ {testRows.length} test row{testRows.length !== 1 ? 's' : ''} configured
146
+ </Box>
147
+ )}
148
+ </Box>
149
+ </ViewerComponentWrapper>
150
+ )
151
+ }
152
+
153
+ // ── Live / preview / print: plain HTML table ──────────────────────────────
154
+ const cellBorder = bordered ? `${borderWidth}px solid ${borderColor}` : 'none'
155
+
156
+ return (
157
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
158
+ <Box
159
+ component='table'
160
+ sx={{
161
+ width: tableWidth,
162
+ borderCollapse: 'collapse',
163
+ fontSize,
164
+ fontFamily: 'inherit',
165
+ tableLayout: 'auto',
166
+ }}
167
+ >
168
+ {showHeader && (
169
+ <thead>
170
+ <tr>
171
+ {columns.map((col, i) => (
172
+ <th
173
+ key={i}
174
+ style={{
175
+ border: cellBorder,
176
+ padding: `${headerPV} ${headerPH}`,
177
+ textAlign: headerAlign,
178
+ backgroundColor: headerBg,
179
+ color: headerText,
180
+ fontSize: headerFontSize,
181
+ fontWeight: 600,
182
+ whiteSpace: 'nowrap',
183
+ }}
184
+ >
185
+ {cellText(col.label || col.field || '')}
186
+ </th>
187
+ ))}
188
+ </tr>
189
+ </thead>
190
+ )}
191
+ <tbody>
192
+ {rows.length === 0 ? (
193
+ <tr>
194
+ <td
195
+ colSpan={columns.length || 1}
196
+ style={{
197
+ border: cellBorder,
198
+ padding: '10px 8px',
199
+ textAlign: 'center',
200
+ color: '#aaa',
201
+ fontSize: fontSize - 1,
202
+ }}
203
+ >
204
+ No data
205
+ </td>
206
+ </tr>
207
+ ) : (
208
+ rows.map((row, ri) => {
209
+ const isOdd = ri % 2 === 1
210
+ const rowBg = striped && isOdd ? stripedColor : undefined
211
+ return (
212
+ <tr
213
+ key={ri}
214
+ style={{ backgroundColor: rowBg }}
215
+ onMouseEnter={rowHover ? e => { e.currentTarget.style.backgroundColor = rowHoverColor } : undefined}
216
+ onMouseLeave={rowHover ? e => { e.currentTarget.style.backgroundColor = rowBg || '' } : undefined}
217
+ >
218
+ {columns.map((col, ci) => (
219
+ <td
220
+ key={ci}
221
+ style={{
222
+ border: cellBorder,
223
+ padding: `${cellPV} ${cellPH}`,
224
+ verticalAlign: cellVAlign,
225
+ textAlign: cellAlign,
226
+ color: cellText2,
227
+ }}
228
+ >
229
+ {cellText(row[col.field])}
230
+ </td>
231
+ ))}
232
+ </tr>
233
+ )
234
+ })
235
+ )}
236
+ </tbody>
237
+ </Box>
238
+ </ViewerComponentWrapper>
239
+ )
240
+ }
@@ -4,46 +4,47 @@ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'
4
4
  import { TextField } from '@mui/material'
5
5
  import dayjs from 'dayjs'
6
6
  import ViewerComponentWrapper from '../ViewerComponentWrapper'
7
+ import FieldLabel from '../FieldLabel'
7
8
  import { resolveProps } from 'services/builderHelper/resolveProps'
9
+ import { runFieldAction } from 'services/builderHelper/actionExecutor'
8
10
 
9
11
  export default function DatePickerRenderer({ node, viewerContext }) {
10
12
  const { data, form, updateFormValue, validationErrors } = viewerContext
11
- const main = resolveProps(node, 'main', { form, data })
13
+ const main = resolveProps(node, 'main', viewerContext)
12
14
 
13
- // Get component key
14
15
  const key = node.props?.main?.key?.value || node.props?.main?.key || node.id
15
-
16
- // Get value from form state
17
16
  const value = form[key] || null
17
+ const error = validationErrors?.[key]
18
18
 
19
- // Get validation error
20
- const error = validationErrors[key]
19
+ const { label, labelPosition, required, helperText, ...pickerProps } = main
21
20
 
22
21
  const handleChange = (newValue) => {
23
- // Store as dayjs object or ISO string depending on preference
24
- updateFormValue(key, newValue ? newValue.toISOString() : null)
22
+ const iso = newValue ? newValue.toISOString() : null
23
+ updateFormValue(key, iso)
24
+ runFieldAction(node, viewerContext, 'onChange', iso)
25
25
  }
26
26
 
27
- // Convert value to dayjs if it exists
28
27
  const dayjsValue = value ? dayjs(value) : null
29
28
 
30
29
  return (
31
30
  <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
32
- <LocalizationProvider dateAdapter={AdapterDayjs}>
33
- <DatePicker
34
- {...main}
35
- value={dayjsValue}
36
- onChange={handleChange}
37
- renderInput={(params) => (
38
- <TextField
39
- {...params}
40
- fullWidth
41
- error={!!error}
42
- helperText={error || main.helperText}
43
- />
44
- )}
45
- />
46
- </LocalizationProvider>
31
+ <FieldLabel label={label} required={required} labelPosition={labelPosition} error={!!error}>
32
+ <LocalizationProvider dateAdapter={AdapterDayjs}>
33
+ <DatePicker
34
+ {...pickerProps}
35
+ value={dayjsValue}
36
+ onChange={handleChange}
37
+ renderInput={(params) => (
38
+ <TextField
39
+ {...params}
40
+ fullWidth
41
+ error={!!error}
42
+ helperText={error || helperText}
43
+ />
44
+ )}
45
+ />
46
+ </LocalizationProvider>
47
+ </FieldLabel>
47
48
  </ViewerComponentWrapper>
48
49
  )
49
50
  }
@@ -0,0 +1,327 @@
1
+ import { useState, useEffect, useRef, useCallback, useMemo } from 'react'
2
+ import {
3
+ Dialog, DialogTitle, DialogContent, DialogActions,
4
+ Box, Typography, IconButton, Button, CircularProgress,
5
+ } from '@mui/material'
6
+ import {
7
+ CloseOutlined, OpenInBrowserOutlined,
8
+ EditOutlined, DeleteOutlined, VisibilityOutlined, OpenInNewOutlined,
9
+ ContentCopyOutlined, DownloadOutlined, PrintOutlined, CheckOutlined,
10
+ SendOutlined, RefreshOutlined, SettingsOutlined, InfoOutlined,
11
+ WarningOutlined, ArchiveOutlined, RestoreOutlined, LockOutlined,
12
+ LockOpenOutlined, StarOutlined, AddOutlined, RemoveOutlined,
13
+ } from '@mui/icons-material'
14
+ import { resolveProps } from 'services/builderHelper/resolveProps'
15
+ import { executeJSCode } from 'services/builderHelper/jsExecutor'
16
+ import ComponentRenderer from '../ComponentRenderer'
17
+ import ViewRendererRenderer from './ViewRendererRenderer'
18
+
19
+ // ── Icon registry (keep in sync with ActionsConfigEditor) ─────────────────────
20
+ const ICON_MAP = {
21
+ EditOutlined, DeleteOutlined, VisibilityOutlined, OpenInNewOutlined,
22
+ ContentCopyOutlined, DownloadOutlined, PrintOutlined, CheckOutlined,
23
+ CloseOutlined, SendOutlined, RefreshOutlined, SettingsOutlined,
24
+ InfoOutlined, WarningOutlined, ArchiveOutlined, RestoreOutlined,
25
+ LockOutlined, LockOpenOutlined, StarOutlined, AddOutlined, RemoveOutlined,
26
+ }
27
+
28
+ function ResolvedIcon({ name }) {
29
+ const Comp = name ? ICON_MAP[name] : null
30
+ return Comp ? <Comp sx={{ fontSize: 16 }} /> : null
31
+ }
32
+
33
+ // ── Single action button ──────────────────────────────────────────────────────
34
+ function DialogActionButton({ action, execCtx, onDone }) {
35
+ const [loading, setLoading] = useState(false)
36
+
37
+ const handleClick = async () => {
38
+ if (!action.code) { onDone?.(); return }
39
+ setLoading(true)
40
+ try {
41
+ await executeJSCode(action.code, execCtx)
42
+ } catch (e) {
43
+ console.error('[DialogActionButton]', e)
44
+ } finally {
45
+ setLoading(false)
46
+ }
47
+ }
48
+
49
+ return (
50
+ <Button
51
+ variant={action.variant || 'text'}
52
+ color={action.color === 'inherit' ? undefined : (action.color || 'primary')}
53
+ disabled={!!action.disabled || loading}
54
+ size='small'
55
+ startIcon={loading ? <CircularProgress size={12} /> : <ResolvedIcon name={action.icon} />}
56
+ onClick={handleClick}
57
+ sx={{ textTransform: 'none', minWidth: 80 }}
58
+ >
59
+ {action.label}
60
+ </Button>
61
+ )
62
+ }
63
+
64
+ // ── DialogRenderer ────────────────────────────────────────────────────────────
65
+ //
66
+ // Renders a single dialog node.
67
+ //
68
+ // In EDIT MODE — shows a compact card in the DialogsZone so the builder can
69
+ // select it, inspect its props, and drop components into it.
70
+ // The actual MUI Dialog is never opened in edit mode.
71
+ //
72
+ // In PRODUCTION — mounts a hidden MUI Dialog and registers open/close handlers
73
+ // in viewerContext.dialogRefs so that any button / action / column
74
+ // function can call openDialog(key) / closeDialog(key).
75
+ //
76
+ // When openDialog(key, data) is called the optional `data` object is merged into
77
+ // the dialog's own isolated data state, making it available inside the dialog
78
+ // via the normal `data` context variable.
79
+
80
+ export default function DialogRenderer({ node, viewerContext }) {
81
+ const { data: parentData, form, setData: parentSetData, dataRef, reportRefs,
82
+ openDialog, closeDialog, dialogRefs, isEditMode, builderContext } = viewerContext
83
+
84
+ const main = resolveProps(node, 'main', {
85
+ form,
86
+ data: parentData,
87
+ setData: parentSetData,
88
+ dataRef: dataRef?.current ?? {},
89
+ reportRefs: reportRefs?.current ?? {},
90
+ openDialog: openDialog ?? (() => {}),
91
+ closeDialog: closeDialog ?? (() => {}),
92
+ // page — for dialogs the page stores are the parent page stores themselves
93
+ pageData: viewerContext.pageData ?? parentData,
94
+ pageSetData: viewerContext.pageSetData ?? parentSetData,
95
+ pageDataRef: viewerContext.pageDataRef ?? dataRef,
96
+ pageReportRefs: viewerContext.pageReportRefs ?? reportRefs,
97
+ })
98
+
99
+ const {
100
+ key: dialogKey,
101
+ viewId,
102
+ title,
103
+ hideTitle = false,
104
+ maxWidth = 'sm',
105
+ fullWidth = true,
106
+ fullScreen = false,
107
+ showCloseButton = true,
108
+ closeOnBackdrop = true,
109
+ dialogActions: rawDialogActions,
110
+ } = main
111
+
112
+ const dialogActions = Array.isArray(rawDialogActions)
113
+ ? rawDialogActions.filter(a => a.label?.trim())
114
+ : []
115
+
116
+ // Synthetic ViewRenderer node — built once per viewId change so that
117
+ // ViewRendererRenderer can resolve props and fetch the view normally.
118
+ const viewNode = useMemo(() => !viewId ? null : ({
119
+ id: `${node.id}__vr`,
120
+ type: 'viewRenderer',
121
+ props: {
122
+ main: {
123
+ key: { valueType: 'value', value: `${dialogKey ?? node.id}_view` },
124
+ viewId: { valueType: 'value', value: viewId },
125
+ heightMode: { valueType: 'value', value: 'auto' },
126
+ isolated: { valueType: 'value', value: true },
127
+ },
128
+ style: {},
129
+ advanced: {},
130
+ },
131
+ }), [viewId, node.id, dialogKey])
132
+
133
+ // ── Dialog state ──────────────────────────────────────────────────────────
134
+ const [isOpen, setIsOpen] = useState(false)
135
+ const [dialogData, setDialogData] = useState({})
136
+
137
+ // ── Register in dialogRefs ────────────────────────────────────────────────
138
+ useEffect(() => {
139
+ if (!dialogRefs?.current || !dialogKey) return
140
+ dialogRefs.current[dialogKey] = {
141
+ open: (data) => { setDialogData(data && typeof data === 'object' ? data : {}); setIsOpen(true) },
142
+ close: () => setIsOpen(false),
143
+ }
144
+ return () => { delete dialogRefs.current[dialogKey] }
145
+ }, [dialogKey, dialogRefs])
146
+
147
+ const handleClose = useCallback(() => {
148
+ if (!closeOnBackdrop) return
149
+ setIsOpen(false)
150
+ }, [closeOnBackdrop])
151
+
152
+ // ── Child viewerContext ───────────────────────────────────────────────────
153
+ // Dialogs always run in production mode regardless of the builder's edit mode.
154
+ // They get their own isolated data store seeded by the openDialog(key, data) call.
155
+ const [childData, setChildData] = useState({})
156
+ const [childForm, setChildForm] = useState({})
157
+ const childDataRef = useRef({})
158
+ const childReportRefs = useRef({})
159
+
160
+ // Sync dialogData into childData when dialog opens
161
+ useEffect(() => {
162
+ if (isOpen) setChildData(dialogData)
163
+ }, [isOpen, dialogData])
164
+
165
+ const childViewerContext = {
166
+ ...viewerContext,
167
+ isEditMode: false,
168
+ isPreviewMode: true,
169
+ builderContext: null,
170
+ data: childData,
171
+ setData: setChildData,
172
+ form: childForm,
173
+ setForm: setChildForm,
174
+ updateFormValue: (k, v) => setChildForm(prev => ({ ...prev, [k]: v })),
175
+ dataRef: childDataRef,
176
+ reportRefs: childReportRefs,
177
+ // `page` — parent/main-page stores accessible as page.data, page.setData, etc.
178
+ // These are the outer page's stores; `data` above is the dialog's isolated state.
179
+ pageData: parentData,
180
+ pageSetData: parentSetData,
181
+ pageDataRef: dataRef,
182
+ pageReportRefs: reportRefs,
183
+ }
184
+
185
+ // ── EDIT MODE — selectable card ───────────────────────────────────────────
186
+ if (isEditMode) {
187
+ const isSelected = builderContext?.selectedId === node.id
188
+ return (
189
+ <Box
190
+ onClick={() => builderContext?.setSelectedId(node.id)}
191
+ sx={{
192
+ border: isSelected ? '2px solid #9c27b0' : '1px dashed #555',
193
+ borderRadius: 1.5,
194
+ p: 1.5,
195
+ cursor: 'pointer',
196
+ bgcolor: isSelected ? 'rgba(156,39,176,0.07)' : 'rgba(255,255,255,0.03)',
197
+ '&:hover': { borderColor: '#9c27b0', bgcolor: 'rgba(156,39,176,0.05)' },
198
+ minWidth: 220,
199
+ }}
200
+ >
201
+ <Box display='flex' alignItems='center' gap={1} mb={1}>
202
+ <OpenInBrowserOutlined sx={{ fontSize: 15, color: '#9c27b0' }} />
203
+ <Typography sx={{ fontSize: 11, fontWeight: 700, color: '#9c27b0', letterSpacing: '0.06em', textTransform: 'uppercase' }}>
204
+ Dialog
205
+ </Typography>
206
+ {dialogKey && (
207
+ <Typography sx={{ fontSize: 11, color: '#aaa', ml: 'auto', fontFamily: 'monospace' }}>
208
+ key: {dialogKey}
209
+ </Typography>
210
+ )}
211
+ </Box>
212
+
213
+ {/* Title row */}
214
+ <Typography sx={{ fontSize: 12, color: hideTitle ? '#555' : '#ccc', fontStyle: hideTitle ? 'italic' : 'normal', mb: 0.5 }}>
215
+ {hideTitle
216
+ ? '(title hidden)'
217
+ : title || <span style={{ opacity: 0.4 }}>(no title)</span>
218
+ }
219
+ </Typography>
220
+
221
+ {/* Content hint */}
222
+ <Box mb={dialogActions.length > 0 ? 0.5 : 0}>
223
+ {viewId ? (
224
+ <Typography sx={{ fontSize: 10, color: '#7b8ea0', fontFamily: 'monospace' }}>
225
+ viewId: {viewId}
226
+ </Typography>
227
+ ) : node.children?.length > 0 ? (
228
+ <Typography sx={{ fontSize: 10, color: '#666' }}>
229
+ {node.children.length} child component{node.children.length !== 1 ? 's' : ''}
230
+ </Typography>
231
+ ) : (
232
+ <Typography sx={{ fontSize: 10, color: '#444', fontStyle: 'italic' }}>
233
+ No view ID set — drop components or set a View ID
234
+ </Typography>
235
+ )}
236
+ </Box>
237
+
238
+ {/* Action buttons hint */}
239
+ {dialogActions.length > 0 && (
240
+ <Typography sx={{ fontSize: 10, color: '#7b8ea0' }}>
241
+ {dialogActions.length} action button{dialogActions.length !== 1 ? 's' : ''}: {dialogActions.map(a => a.label).join(', ')}
242
+ </Typography>
243
+ )}
244
+ </Box>
245
+ )
246
+ }
247
+
248
+ // ── Action buttons execution context ─────────────────────────────────────
249
+ // Runs in the dialog's isolated child context so Calculations see childData.
250
+ // closeDialog is pre-wired to close THIS dialog as a convenience shortcut.
251
+ const actionExecCtx = {
252
+ form: childViewerContext.form ?? {},
253
+ data: childViewerContext.data ?? {},
254
+ setData: childViewerContext.setData ?? (() => {}),
255
+ dataRef: childDataRef?.current ?? {},
256
+ reportRefs: childReportRefs?.current ?? {},
257
+ openDialog: openDialog ?? (() => {}),
258
+ closeDialog: closeDialog ?? (() => {}),
259
+ pageData: parentData,
260
+ pageSetData: parentSetData,
261
+ pageDataRef: dataRef,
262
+ pageReportRefs: reportRefs,
263
+ // Convenience: close THIS dialog without knowing its key
264
+ extraVars: {
265
+ closeThisDialog: () => setIsOpen(false),
266
+ },
267
+ }
268
+
269
+ // ── PRODUCTION MODE — MUI Dialog ──────────────────────────────────────────
270
+ return (
271
+ <Dialog
272
+ open={isOpen}
273
+ onClose={handleClose}
274
+ maxWidth={maxWidth}
275
+ fullWidth={fullWidth}
276
+ fullScreen={fullScreen}
277
+ >
278
+ {/* Title bar — hidden when hideTitle is true */}
279
+ {!hideTitle && (title || showCloseButton) && (
280
+ <DialogTitle sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', pr: 1 }}>
281
+ <Typography variant='h6' sx={{ fontSize: 16, fontWeight: 600 }}>
282
+ {title ?? ''}
283
+ </Typography>
284
+ {showCloseButton && (
285
+ <IconButton size='small' onClick={() => setIsOpen(false)}>
286
+ <CloseOutlined fontSize='small' />
287
+ </IconButton>
288
+ )}
289
+ </DialogTitle>
290
+ )}
291
+
292
+ {/* Close button only (no title text) when title hidden but button still wanted */}
293
+ {hideTitle && showCloseButton && (
294
+ <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1 }}>
295
+ <IconButton size='small' onClick={() => setIsOpen(false)}>
296
+ <CloseOutlined fontSize='small' />
297
+ </IconButton>
298
+ </Box>
299
+ )}
300
+
301
+ <DialogContent dividers={!hideTitle} sx={{ p: viewNode ? 0 : undefined }}>
302
+ {viewNode
303
+ ? /* View ID set → render the embedded view */
304
+ <ViewRendererRenderer node={viewNode} viewerContext={childViewerContext} />
305
+ : /* No view ID → render dropped child components */
306
+ node.children?.map(child => (
307
+ <ComponentRenderer key={child.id} node={child} viewerContext={childViewerContext} />
308
+ ))
309
+ }
310
+ </DialogContent>
311
+
312
+ {/* Action buttons footer */}
313
+ {dialogActions.length > 0 && (
314
+ <DialogActions sx={{ px: 2.5, py: 1.5, gap: 1 }}>
315
+ {dialogActions.map((action, idx) => (
316
+ <DialogActionButton
317
+ key={idx}
318
+ action={action}
319
+ execCtx={actionExecCtx}
320
+ onDone={() => setIsOpen(false)}
321
+ />
322
+ ))}
323
+ </DialogActions>
324
+ )}
325
+ </Dialog>
326
+ )
327
+ }
@@ -4,7 +4,7 @@ import { resolveProps } from 'services/builderHelper/resolveProps'
4
4
 
5
5
  export default function DividerRenderer({ node, viewerContext }) {
6
6
  const { data, form } = viewerContext
7
- const main = resolveProps(node, 'main', { form, data })
7
+ const main = resolveProps(node, 'main', viewerContext)
8
8
 
9
9
  return (
10
10
  <ViewerComponentWrapper node={node} viewerContext={viewerContext}>