robobyte-front-builder 1.0.19 → 1.0.21

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