robobyte-front-builder 1.0.17 → 1.0.21

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