robobyte-front-builder 1.0.17 → 1.0.21

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