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
@@ -7,20 +7,82 @@ import { createNode } from 'services/builderHelper/nodeFactory'
7
7
  import { insertIntoTreeAtIndex, moveNodeInTree } from 'services/builderHelper/tree'
8
8
  import { getCellProps_public } from 'services/builderHelper/layoutHelpers'
9
9
 
10
- export default function LayoutCellRenderer({ node, layoutNode, viewerContext }) {
10
+ // ── CSS helpers (mirrors ViewerComponentWrapper) ──────────────────────────────
11
+ function kebabToCamel(str = '') {
12
+ return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase())
13
+ }
14
+
15
+ function parseCssString(css = '') {
16
+ return css.split(';').map(r => r.trim()).filter(Boolean).reduce((acc, rule) => {
17
+ const sep = rule.indexOf(':')
18
+ if (sep === -1) return acc
19
+ const prop = rule.slice(0, sep).trim()
20
+ const value = rule.slice(sep + 1).trim()
21
+ if (prop && value) acc[kebabToCamel(prop)] = value
22
+ return acc
23
+ }, {})
24
+ }
25
+
26
+ function toCssObject(val) {
27
+ if (!val) return {}
28
+ if (typeof val === 'string') return parseCssString(val)
29
+ if (typeof val === 'object' && !Array.isArray(val)) return val
30
+ return {}
31
+ }
32
+
33
+ // ─────────────────────────────────────────────────────────────────────────────
34
+
35
+ export default function LayoutCellRenderer({ node, layoutNode, gridCellDefaults = {}, viewerContext }) {
11
36
  const { data, form, isEditMode, builderContext } = viewerContext
12
- const main = resolveProps(node, 'main', { form, data })
13
- const styleProps = resolveProps(node, 'style', { form, data })
14
37
 
15
- const { elementStyle: _es, elementCss: _ec, justifyContent, alignItems, ...restStyle } = styleProps
38
+ // ── Resolve cell's own style tab ─────────────────────────────────────────
39
+ const cellStyleProps = resolveProps(node, 'style', viewerContext)
40
+
41
+ // elementStyle / elementCss are the "pure CSS escape-hatch" fields
42
+ const { elementStyle, elementCss, justifyContent, alignItems, minHeight, ...restCellStyle } = cellStyleProps
43
+
44
+ const cellElementStyle = toCssObject(elementStyle) // expression → CSS object
45
+ const cellElementCss = toCssObject(elementCss) // expression → CSS object
46
+
47
+ // ── Merge: grid defaults → cell style tab → cell element overrides ────────
48
+ // Grid defaults are lowest priority; cell's own settings always win.
49
+ const mergedStyle = {
50
+ ...gridCellDefaults, // from layout's cellStyle expression / cell* fields
51
+ ...restCellStyle, // from cell's Style tab (padding, bg, border, etc.)
52
+ ...cellElementStyle, // from cell's elementStyle expression
53
+ ...cellElementCss, // from cell's elementCss expression
54
+ }
55
+
56
+ // Pull flex-alignment out so we can apply them to the Box flex container
57
+ const resolvedJustify = justifyContent ?? gridCellDefaults.justifyContent ?? 'flex-start'
58
+ const resolvedAlign = alignItems ?? gridCellDefaults.alignItems ?? 'stretch'
59
+ const resolvedMinHeight = mergedStyle.minHeight ?? minHeight ?? (isEditMode ? 48 : 0)
60
+
61
+ // Remove from mergedStyle so we don't double-apply
62
+ delete mergedStyle.justifyContent
63
+ delete mergedStyle.alignItems
64
+ delete mergedStyle.minHeight
16
65
 
17
66
  const [contextMenu, setContextMenu] = useState(null)
18
- const [isDragOver, setIsDragOver] = useState(false)
67
+ const [isDragOver, setIsDragOver] = useState(false)
19
68
 
20
69
  const { colStart, rowStart, colSpan, rowSpan } = getCellProps_public(node)
21
70
 
22
- const isSelected = builderContext?.selectedId === node.id
23
- const isEmpty = !node.children || node.children.length === 0
71
+ // Only apply explicit grid placement when the cell has been manually positioned.
72
+ // Without this guard every cell defaults to colStart:1 / rowStart:1, which
73
+ // overrides CSS grid auto-placement and causes all cells to stack at (1,1).
74
+ const mainProps = node.props?.main ?? {}
75
+ const hasExplicitCol = mainProps.colStart !== undefined || mainProps.colSpan !== undefined
76
+ const hasExplicitRow = mainProps.rowStart !== undefined || mainProps.rowSpan !== undefined
77
+ const gridPlacement = {
78
+ ...(hasExplicitCol ? { gridColumn: `${colStart} / span ${colSpan}` } : {}),
79
+ ...(hasExplicitRow ? { gridRow: `${rowStart} / span ${rowSpan}` } : {}),
80
+ }
81
+
82
+ const isSelected = builderContext?.selectedId === node.id
83
+ const isEmpty = !node.children || node.children.length === 0
84
+ const hasBorder = !!(mergedStyle.border || mergedStyle.borderTop || mergedStyle.borderBottom || mergedStyle.borderLeft || mergedStyle.borderRight)
85
+ const hasBg = !!mergedStyle.backgroundColor
24
86
 
25
87
  const handleRightClick = e => {
26
88
  if (!isEditMode) return
@@ -30,33 +92,29 @@ export default function LayoutCellRenderer({ node, layoutNode, viewerContext })
30
92
  setContextMenu({ mouseX: e.clientX, mouseY: e.clientY })
31
93
  }
32
94
 
33
- const handleCloseMenu = () => setContextMenu(null)
34
-
35
95
  const handleDrop = e => {
36
96
  if (!isEditMode || !builderContext) return
37
97
  e.preventDefault()
38
98
  e.stopPropagation()
39
99
  setIsDragOver(false)
40
-
41
100
  try {
42
101
  const nodeId = e.dataTransfer.getData('application/builder-node-id')
43
102
  if (nodeId) {
44
103
  builderContext.setSchema(prev => ({
45
104
  ...prev,
46
- root: moveNodeInTree(prev.root, nodeId, node.id, node.children?.length ?? 0)
105
+ root: moveNodeInTree(prev.root, nodeId, node.id, node.children?.length ?? 0),
47
106
  }))
48
107
  builderContext.setSelectedId(nodeId)
49
108
  builderContext.setDraggingNodeId(null)
50
109
  return
51
110
  }
52
-
53
111
  const componentData = e.dataTransfer.getData('application/builder-component')
54
112
  if (componentData) {
55
113
  const component = JSON.parse(componentData)
56
114
  const newNode = createNode(component.type, component.value ? JSON.parse(component.value) : null)
57
115
  builderContext.setSchema(prev => ({
58
116
  ...prev,
59
- root: insertIntoTreeAtIndex(prev.root, node.id, newNode, node.children?.length ?? 0)
117
+ root: insertIntoTreeAtIndex(prev.root, node.id, newNode, node.children?.length ?? 0),
60
118
  }))
61
119
  builderContext.setSelectedId(newNode.id)
62
120
  builderContext.setDraggingNodeId(null)
@@ -79,6 +137,13 @@ export default function LayoutCellRenderer({ node, layoutNode, viewerContext })
79
137
  setIsDragOver(false)
80
138
  }
81
139
 
140
+ // ── Edit-mode border (only when no user-defined border) ──────────────────
141
+ const editBorder = isEditMode && !hasBorder
142
+ ? isSelected ? '2px solid #1976d2'
143
+ : isDragOver ? '2px dashed #1976d2'
144
+ : '1px dashed #bbb'
145
+ : undefined
146
+
82
147
  return (
83
148
  <>
84
149
  <Box
@@ -93,36 +158,33 @@ export default function LayoutCellRenderer({ node, layoutNode, viewerContext })
93
158
  }
94
159
  }}
95
160
  style={{
96
- gridColumn: `${colStart} / span ${colSpan}`,
97
- gridRow: `${rowStart} / span ${rowSpan}`,
98
- minHeight: 48,
99
- height: '100%',
161
+ // Grid placement only explicit when the cell has manual position props;
162
+ // otherwise CSS grid auto-placement distributes cells across the columns.
163
+ ...gridPlacement,
164
+ // Flex container
165
+ display: 'flex',
166
+ flexDirection: 'column',
167
+ justifyContent: resolvedJustify,
168
+ alignItems: resolvedAlign,
169
+ // Sizing
170
+ minHeight: resolvedMinHeight,
171
+ height: '100%',
100
172
  boxSizing: 'border-box',
173
+ // ── Pure CSS from grid defaults + cell style (cell wins) ──────────
174
+ ...mergedStyle,
101
175
  }}
102
176
  sx={{
103
177
  position: 'relative',
104
- display: 'flex',
105
- flexDirection: 'column',
106
- justifyContent: justifyContent ?? 'center',
107
- alignItems: alignItems ?? 'stretch',
108
- ...restStyle,
109
- ...(isEditMode && !restStyle.border ? {
110
- border: isSelected
111
- ? '2px solid #1976d2'
112
- : isDragOver
113
- ? '2px dashed #1976d2'
114
- : '1px dashed #bbb',
115
- } : {}),
116
- ...(isEditMode && isSelected ? { border: '2px solid #1976d2' } : {}),
117
- borderRadius: restStyle.borderRadius ?? 1,
118
- bgcolor: restStyle.backgroundColor
119
- ? undefined
120
- : isDragOver
121
- ? 'rgba(25,118,210,0.06)'
122
- : isEditMode ? 'rgba(0,0,0,0.01)' : 'transparent',
178
+ overflow: mergedStyle.overflow ?? 'visible',
179
+ // Edit-mode visuals — lower specificity than inline style,
180
+ // so they only apply when user hasn't set those properties
181
+ ...(editBorder && { border: editBorder }),
182
+ ...(isEditMode && isSelected && { border: '2px solid #1976d2 !important' }),
183
+ ...(!hasBg && isEditMode && {
184
+ bgcolor: isDragOver ? 'rgba(25,118,210,0.06)' : 'rgba(0,0,0,0.01)',
185
+ }),
123
186
  transition: 'border-color 0.15s, background-color 0.15s',
124
- '&:hover': isEditMode ? { borderColor: '#90caf9' } : {},
125
- overflow: restStyle.overflow ?? 'hidden',
187
+ '&:hover': isEditMode && !isSelected ? { borderColor: '#90caf9' } : {},
126
188
  }}
127
189
  >
128
190
  {isEmpty
@@ -139,7 +201,7 @@ export default function LayoutCellRenderer({ node, layoutNode, viewerContext })
139
201
  userSelect: 'none',
140
202
  }}
141
203
  >
142
- Drop Component Here
204
+ Drop here
143
205
  </Typography>
144
206
  )
145
207
  : node.children.map(child => (
@@ -151,7 +213,7 @@ export default function LayoutCellRenderer({ node, layoutNode, viewerContext })
151
213
  {contextMenu && (
152
214
  <LayoutContextMenu
153
215
  anchorPosition={contextMenu}
154
- onClose={handleCloseMenu}
216
+ onClose={() => setContextMenu(null)}
155
217
  cell={node}
156
218
  layoutNode={layoutNode}
157
219
  viewerContext={viewerContext}
@@ -3,8 +3,8 @@ import {
3
3
  ArrowForward,
4
4
  ArrowDownward,
5
5
  CallSplit,
6
- AddCircleOutline,
7
- RemoveCircleOutline,
6
+ AddCircleOutlined,
7
+ RemoveCircleOutlined,
8
8
  } from '@mui/icons-material'
9
9
  import {
10
10
  mergeRight,
@@ -75,20 +75,20 @@ export default function LayoutContextMenu({ anchorPosition, onClose, cell, layou
75
75
  { divider: true },
76
76
  {
77
77
  label: 'Add Row Above',
78
- icon: <AddCircleOutline fontSize='small' />,
78
+ icon: <AddCircleOutlined fontSize='small' />,
79
79
  disabled: false,
80
80
  onClick: () => applyNewCells(addRow(cells, layoutCols, rowStart - 1)),
81
81
  },
82
82
  {
83
83
  label: 'Add Row Below',
84
- icon: <AddCircleOutline fontSize='small' />,
84
+ icon: <AddCircleOutlined fontSize='small' />,
85
85
  disabled: false,
86
86
  onClick: () => applyNewCells(addRow(cells, layoutCols, rowStart)),
87
87
  },
88
88
  { divider: true },
89
89
  {
90
90
  label: 'Add Column Left',
91
- icon: <AddCircleOutline fontSize='small' />,
91
+ icon: <AddCircleOutlined fontSize='small' />,
92
92
  disabled: false,
93
93
  onClick: () => {
94
94
  const newCells = addColumn(cells, totalRows, colStart - 1)
@@ -105,7 +105,7 @@ export default function LayoutContextMenu({ anchorPosition, onClose, cell, layou
105
105
  },
106
106
  {
107
107
  label: 'Add Column Right',
108
- icon: <AddCircleOutline fontSize='small' />,
108
+ icon: <AddCircleOutlined fontSize='small' />,
109
109
  disabled: false,
110
110
  onClick: () => {
111
111
  const newCells = addColumn(cells, totalRows, colStart)
@@ -123,13 +123,13 @@ export default function LayoutContextMenu({ anchorPosition, onClose, cell, layou
123
123
  { divider: true },
124
124
  {
125
125
  label: 'Delete Row',
126
- icon: <RemoveCircleOutline fontSize='small' color='error' />,
126
+ icon: <RemoveCircleOutlined fontSize='small' color='error' />,
127
127
  disabled: totalRows <= 1,
128
128
  onClick: () => applyNewCells(deleteRow(cells, rowStart)),
129
129
  },
130
130
  {
131
131
  label: 'Delete Column',
132
- icon: <RemoveCircleOutline fontSize='small' color='error' />,
132
+ icon: <RemoveCircleOutlined fontSize='small' color='error' />,
133
133
  disabled: totalCols <= 1,
134
134
  onClick: () => {
135
135
  const newCells = deleteColumn(cells, colStart)
@@ -1,17 +1,57 @@
1
- import { Box, IconButton, Tooltip } from '@mui/material'
1
+ import { Box } from '@mui/material'
2
2
  import { useEffect } from 'react'
3
3
  import ViewerComponentWrapper from '../ViewerComponentWrapper'
4
4
  import LayoutCellRenderer from './LayoutCellRenderer'
5
5
  import { resolveProps } from 'services/builderHelper/resolveProps'
6
- import { createLayoutGrid, getTotalRows, getTotalCols, getCellProps_public } from 'services/builderHelper/layoutHelpers'
6
+ import { createLayoutGrid } from 'services/builderHelper/layoutHelpers'
7
7
  import { updateNodeInTree } from 'services/builderHelper/tree'
8
8
 
9
+ // ── CSS helpers ───────────────────────────────────────────────────────────────
10
+ function kebabToCamel(str = '') {
11
+ return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase())
12
+ }
13
+
14
+ function parseCssString(css = '') {
15
+ return css.split(';').map(r => r.trim()).filter(Boolean).reduce((acc, rule) => {
16
+ const sep = rule.indexOf(':')
17
+ if (sep === -1) return acc
18
+ const prop = rule.slice(0, sep).trim()
19
+ const value = rule.slice(sep + 1).trim()
20
+ if (prop && value) acc[kebabToCamel(prop)] = value
21
+ return acc
22
+ }, {})
23
+ }
24
+
25
+ function toCssObject(val) {
26
+ if (!val) return {}
27
+ if (typeof val === 'string') return parseCssString(val)
28
+ if (typeof val === 'object' && !Array.isArray(val)) return val
29
+ return {}
30
+ }
31
+ // ─────────────────────────────────────────────────────────────────────────────
32
+
9
33
  export default function LayoutRenderer({ node, viewerContext }) {
10
34
  const { data, form, isEditMode, builderContext } = viewerContext
11
- const main = resolveProps(node, 'main', { form, data })
35
+ const main = resolveProps(node, 'main', viewerContext)
36
+
37
+ const cols = main.cols ?? 2
38
+ const gap = main.gap ?? 8
39
+ const rowGap = main.rowGap ?? gap
12
40
 
13
- const cols = main.cols ?? 2
14
- const gap = main.gap ?? 8
41
+ // Grid-level defaults passed to every cell — overrideable per-cell via Style tab.
42
+ const gridCellDefaults = {
43
+ ...(main.cellMinHeight != null && { minHeight: main.cellMinHeight }),
44
+ ...(main.cellPadding != null && { padding: main.cellPadding }),
45
+ ...(main.cellBackgroundColor != null && { backgroundColor: main.cellBackgroundColor }),
46
+ ...(main.cellBorder != null && { border: main.cellBorder }),
47
+ ...(main.cellBorderRadius != null && { borderRadius: main.cellBorderRadius }),
48
+ ...(main.cellBoxShadow != null && { boxShadow: main.cellBoxShadow }),
49
+ ...(main.cellJustifyContent != null && { justifyContent: main.cellJustifyContent }),
50
+ ...(main.cellAlignItems != null && { alignItems: main.cellAlignItems }),
51
+ // cellElementStyle / cellElementCss merge last — highest priority among grid defaults
52
+ ...toCssObject(main.cellElementStyle),
53
+ ...toCssObject(main.cellElementCss),
54
+ }
15
55
 
16
56
  const cells = node.children ?? []
17
57
 
@@ -21,7 +61,7 @@ export default function LayoutRenderer({ node, viewerContext }) {
21
61
  const defaultCells = createLayoutGrid(cols, 2)
22
62
  builderContext.setSchema(prev => ({
23
63
  ...prev,
24
- root: updateNodeInTree(prev.root, node.id, { children: defaultCells })
64
+ root: updateNodeInTree(prev.root, node.id, { children: defaultCells }),
25
65
  }))
26
66
  }
27
67
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -34,6 +74,7 @@ export default function LayoutRenderer({ node, viewerContext }) {
34
74
  display: 'grid',
35
75
  gridTemplateColumns: `repeat(${cols}, 1fr)`,
36
76
  gap: `${gap}px`,
77
+ rowGap: `${rowGap}px`,
37
78
  width: '100%',
38
79
  }}
39
80
  >
@@ -42,6 +83,7 @@ export default function LayoutRenderer({ node, viewerContext }) {
42
83
  key={cell.id}
43
84
  node={cell}
44
85
  layoutNode={node}
86
+ gridCellDefaults={gridCellDefaults}
45
87
  viewerContext={viewerContext}
46
88
  />
47
89
  ))}
@@ -4,7 +4,7 @@ import { resolveProps } from 'services/builderHelper/resolveProps'
4
4
 
5
5
  export default function LinkRenderer({ 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}>
@@ -27,8 +27,8 @@ export default function MenuRenderer({ node, viewerContext }) {
27
27
  const [activeTab, setActiveTab] = useState(0)
28
28
 
29
29
  // Resolve main props for configuration
30
- const main = resolveProps(node, 'main', { form, data })
31
- const styleProps = resolveProps(node, 'style', { form, data })
30
+ const main = resolveProps(node, 'main', viewerContext)
31
+ const styleProps = resolveProps(node, 'style', viewerContext)
32
32
 
33
33
  // Get configuration - check if items (navigation menu) or tabs (tab panels) mode
34
34
  const items = main.items || []
@@ -0,0 +1,80 @@
1
+ import { Box, Typography } from '@mui/material'
2
+ import ViewerComponentWrapper from '../ViewerComponentWrapper'
3
+ import { resolveProps, resolveValue } from 'services/builderHelper/resolveProps'
4
+ import { formatNumber } from 'services/builderHelper/numberFormat'
5
+ import { thresholdColors } from 'services/builderHelper/thresholdEngine'
6
+ import { runKpiAction } from 'services/builderHelper/actionExecutor'
7
+
8
+ export default function MetricRenderer({ node, viewerContext }) {
9
+ const main = resolveProps(node, 'main', viewerContext)
10
+ const { data, setData, isEditMode } = viewerContext ?? {}
11
+
12
+ const {
13
+ valueKey, label, sublabel,
14
+ format = 'number', decimals, prefix = '', suffix = '',
15
+ currency = 'USD', asRatio = false,
16
+ thresholds = [],
17
+ fontSize, fontWeight = 700,
18
+ align = 'left',
19
+ showLabel = true,
20
+ labelPosition = 'above', // 'above' | 'below'
21
+ // label styling
22
+ labelFontSize = 12,
23
+ labelFontWeight = 400,
24
+ labelColor = 'text.secondary',
25
+ // sublabel styling
26
+ sublabelFontSize = 11,
27
+ sublabelFontWeight = 400,
28
+ sublabelColor = 'text.disabled',
29
+ } = main
30
+
31
+ const rawValue = resolveValue(valueKey, data)
32
+ const formatted = formatNumber(rawValue, { format, decimals, prefix, suffix, currency, asRatio })
33
+ const { color } = thresholdColors(rawValue, thresholds)
34
+
35
+ const hasClickAction = !!node.props?.actions?.onClick?.code
36
+ const handleClick = () => {
37
+ if (!hasClickAction || isEditMode) return
38
+ runKpiAction(node, viewerContext, 'onClick', { clickedValue: rawValue })
39
+ }
40
+
41
+ const valueSx = {
42
+ fontSize: fontSize ?? 32,
43
+ fontWeight,
44
+ color,
45
+ lineHeight: 1,
46
+ fontVariantNumeric: 'tabular-nums',
47
+ letterSpacing: '-0.02em',
48
+ transition: 'color .2s',
49
+ }
50
+
51
+ const labelEl = label && showLabel && (
52
+ <Typography sx={{ fontSize: Number(labelFontSize), fontWeight: labelFontWeight, color: labelColor, display: 'block', lineHeight: 1.3 }}>
53
+ {label}
54
+ </Typography>
55
+ )
56
+
57
+ const sublabelEl = sublabel && (
58
+ <Typography sx={{ fontSize: Number(sublabelFontSize), fontWeight: sublabelFontWeight, color: sublabelColor, display: 'block', mt: 0.25, lineHeight: 1.3 }}>
59
+ {sublabel}
60
+ </Typography>
61
+ )
62
+
63
+ return (
64
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
65
+ <Box
66
+ onClick={handleClick}
67
+ sx={{
68
+ textAlign: align,
69
+ cursor: hasClickAction ? 'pointer' : 'default',
70
+ userSelect: 'none',
71
+ }}
72
+ >
73
+ {labelPosition === 'above' && labelEl}
74
+ <Typography component='div' sx={valueSx}>{formatted}</Typography>
75
+ {labelPosition === 'below' && labelEl}
76
+ {sublabelEl}
77
+ </Box>
78
+ </ViewerComponentWrapper>
79
+ )
80
+ }
@@ -1,27 +1,25 @@
1
1
  import { NumericFormat } from 'react-number-format'
2
2
  import { TextField } from '@mui/material'
3
3
  import ViewerComponentWrapper from '../ViewerComponentWrapper'
4
+ import FieldLabel from '../FieldLabel'
4
5
  import { resolveProps } from 'services/builderHelper/resolveProps'
6
+ import { runFieldAction } from 'services/builderHelper/actionExecutor'
5
7
 
6
8
  export default function NumberFormatRenderer({ node, viewerContext }) {
7
9
  const { data, form, updateFormValue, validationErrors } = viewerContext
8
- const main = resolveProps(node, 'main', { form, data })
10
+ const main = resolveProps(node, 'main', viewerContext)
9
11
 
10
- // Get component key
11
12
  const key = node.props?.main?.key?.value || node.props?.main?.key || node.id
12
-
13
- // Get value from form state
14
13
  const value = form[key] || ''
14
+ const error = validationErrors?.[key]
15
15
 
16
- // Get validation error
17
- const error = validationErrors[key]
16
+ const { label, labelPosition, required, helperText } = main
18
17
 
19
18
  const handleValueChange = (values) => {
20
- // values.floatValue contains the actual numeric value
21
19
  updateFormValue(key, values.floatValue)
20
+ runFieldAction(node, viewerContext, 'onChange', values.floatValue)
22
21
  }
23
22
 
24
- // Determine format type and props
25
23
  const formatType = main.formatType || 'decimal'
26
24
  const decimalScale = main.decimalScale ?? 2
27
25
  const fixedDecimalScale = main.fixedDecimalScale ?? false
@@ -30,14 +28,7 @@ export default function NumberFormatRenderer({ node, viewerContext }) {
30
28
  const suffix = main.suffix || ''
31
29
  const allowNegative = main.allowNegative ?? true
32
30
 
33
- // Build NumericFormat props based on format type
34
- let formatProps = {
35
- thousandSeparator,
36
- decimalScale,
37
- fixedDecimalScale,
38
- allowNegative
39
- }
40
-
31
+ let formatProps = { thousandSeparator, decimalScale, fixedDecimalScale, allowNegative }
41
32
  switch (formatType) {
42
33
  case 'currency':
43
34
  formatProps.prefix = main.currencySymbol || '$'
@@ -53,7 +44,6 @@ export default function NumberFormatRenderer({ node, viewerContext }) {
53
44
  formatProps.suffix = suffix
54
45
  break
55
46
  case 'custom':
56
- // Use custom format pattern
57
47
  formatProps.format = main.format
58
48
  formatProps.prefix = prefix
59
49
  formatProps.suffix = suffix
@@ -62,19 +52,20 @@ export default function NumberFormatRenderer({ node, viewerContext }) {
62
52
 
63
53
  return (
64
54
  <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
65
- <NumericFormat
66
- {...formatProps}
67
- value={value}
68
- onValueChange={handleValueChange}
69
- customInput={TextField}
70
- fullWidth
71
- size={main.size}
72
- label={main.label}
73
- placeholder={main.placeholder}
74
- disabled={main.disabled}
75
- error={!!error}
76
- helperText={error || main.helperText}
77
- />
55
+ <FieldLabel label={label} required={required} labelPosition={labelPosition} error={!!error}>
56
+ <NumericFormat
57
+ {...formatProps}
58
+ value={value}
59
+ onValueChange={handleValueChange}
60
+ customInput={TextField}
61
+ fullWidth
62
+ size={main.size}
63
+ placeholder={main.placeholder}
64
+ disabled={main.disabled}
65
+ error={!!error}
66
+ helperText={error || helperText}
67
+ />
68
+ </FieldLabel>
78
69
  </ViewerComponentWrapper>
79
70
  )
80
71
  }
@@ -0,0 +1,76 @@
1
+ import { Box } from '@mui/material'
2
+ import ViewerComponentWrapper from '../ViewerComponentWrapper'
3
+ import { resolveProps } from 'services/builderHelper/resolveProps'
4
+
5
+ /**
6
+ * PageNumber component
7
+ *
8
+ * Canvas / preview — shows "Page 2 of 5" when _printPageIndex is in context,
9
+ * otherwise shows the format string with "—" placeholders.
10
+ *
11
+ * Print portal — renders a <span class="rbb-page-number"> that PrintDialog's
12
+ * handlePrint() fills in with real numbers via DOM before window.print().
13
+ * For fixed header/footer zones only the total-page count can be
14
+ * reliably injected (current page is unknown for fixed elements).
15
+ */
16
+ export default function PageNumberRenderer({ node, viewerContext }) {
17
+ const main = resolveProps(node, 'main', viewerContext)
18
+ const {
19
+ format = 'Page {page} of {pages}',
20
+ align = 'center',
21
+ fontSize = 11,
22
+ color = '#666666',
23
+ } = main
24
+
25
+ const { isPrintContext, __rbbPrint } = viewerContext ?? {}
26
+
27
+ // __rbbPrint is injected by PrintPreviewCanvas under a private namespaced key:
28
+ // • Body pages → { index: 0-based number, total: N } — full info available
29
+ // • Header/footer → { index: null, total: N } — total known, current unknown
30
+ // • No context → undefined — pure canvas, show placeholders
31
+ const pageIndex = __rbbPrint?.index // null means "shared zone, unknown"
32
+ const pageTotal = __rbbPrint?.total // undefined means no print context at all
33
+
34
+ // ── Canvas / dialog preview ────────────────────────────────────────────────
35
+ const displayText = (() => {
36
+ const pagePart = pageIndex != null ? String(pageIndex + 1) : '—'
37
+ const totalPart = pageTotal != null ? String(pageTotal) : '—'
38
+ return format.replace('{page}', pagePart).replace('{pages}', totalPart)
39
+ })()
40
+
41
+ const sharedSx = {
42
+ fontSize,
43
+ color,
44
+ textAlign: align,
45
+ width: '100%',
46
+ display: 'block',
47
+ lineHeight: 1.4,
48
+ }
49
+
50
+ // ── Actual print portal (window.print()) ──────────────────────────────────
51
+ // Render a span that the pre-print JS will populate.
52
+ if (isPrintContext) {
53
+ return (
54
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
55
+ <Box
56
+ component='span'
57
+ className='rbb-page-number'
58
+ data-format={format}
59
+ sx={sharedSx}
60
+ >
61
+ {/* placeholder — replaced by JS before print */}
62
+ {format.replace('{page}', '—').replace('{pages}', '—')}
63
+ </Box>
64
+ </ViewerComponentWrapper>
65
+ )
66
+ }
67
+
68
+ // ── Canvas / preview ──────────────────────────────────────────────────────
69
+ return (
70
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
71
+ <Box component='span' sx={sharedSx}>
72
+ {displayText}
73
+ </Box>
74
+ </ViewerComponentWrapper>
75
+ )
76
+ }