robobyte-front-builder 1.0.19 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/INTEGRATION.md +1586 -0
  2. package/README.md +928 -0
  3. package/RoboByteBuilder_User_Manual.docx +0 -0
  4. package/next.config.js +19 -48
  5. package/package.json +42 -86
  6. package/src/context/BuilderContext.jsx +191 -7
  7. package/src/context/SystemContext.js +2 -2
  8. package/src/hooks/useGlobalStore.js +36 -0
  9. package/src/hooks/useTimerEngine.js +54 -0
  10. package/src/lib/index.js +11 -3
  11. package/src/lib/layouts/BlankLayout.jsx +13 -0
  12. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +61 -7
  13. package/src/lib/themes/builderTheme.js +41 -0
  14. package/src/pages/_app.js +32 -134
  15. package/src/pages/api/ai.js +107 -0
  16. package/src/pages/builders/report/index.js +1 -0
  17. package/src/pages/builders/report/list/index.js +1 -0
  18. package/src/pages/builders/report/viewer/index.js +1 -0
  19. package/src/pages/index.js +88 -37
  20. package/src/pages/printBuilder/index.jsx +263 -0
  21. package/src/pages/printBuilder/layouts/index.jsx +298 -0
  22. package/src/pages/reportModule/reportBuilder/index.js +8 -6
  23. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +92 -25
  24. package/src/pages/reportModule/reportBuilder/reports/index.js +3 -5
  25. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +2 -3
  26. package/src/pages/viewBuilder/index.jsx +117 -32
  27. package/src/pages/viewBuilder/views/index.js +3 -3
  28. package/src/pages/viewer/[id]/index.js +2 -1
  29. package/src/services/DeleteService.js +31 -60
  30. package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
  31. package/src/services/Endpoints/ReportBuilderEndpoints.js +7 -7
  32. package/src/services/Endpoints.js +2 -0
  33. package/src/services/GetService.js +33 -54
  34. package/src/services/PatchService.js +38 -65
  35. package/src/services/PostService.js +37 -63
  36. package/src/services/UpdateService.js +39 -65
  37. package/src/services/builderHelper/actionExecutor.js +141 -25
  38. package/src/services/builderHelper/builderHelper.js +92 -0
  39. package/src/services/builderHelper/colorSchema.js +95 -0
  40. package/src/services/builderHelper/iconResolver.js +50 -0
  41. package/src/services/builderHelper/jsExecutor.js +212 -46
  42. package/src/services/builderHelper/nodeFactory.js +32 -15
  43. package/src/services/builderHelper/numberFormat.js +123 -0
  44. package/src/services/builderHelper/resolveProps.js +73 -4
  45. package/src/services/builderHelper/thresholdEngine.js +77 -0
  46. package/src/services/builderHelper/tree.js +31 -0
  47. package/src/services/components/agGridAutoComplete.js +5 -9
  48. package/src/services/config.js +9 -1
  49. package/src/services/globalStore.js +80 -0
  50. package/src/services/helper/multiSelectEditor.js +5 -9
  51. package/src/services/helper/multiSelectEditorByBuilder.js +5 -9
  52. package/src/services/reportData/fetchReportData.js +69 -28
  53. package/src/services/routerRef.js +35 -0
  54. package/src/services/sessionLog.js +171 -0
  55. package/src/views/ConfirmDialog.js +2 -2
  56. package/src/views/builder/JSEditor.js +105 -107
  57. package/src/views/builder/SessionLogDialog.jsx +350 -0
  58. package/src/views/builder/UnsavedChangesGuard.jsx +103 -0
  59. package/src/views/builder/inspector/Inspector.jsx +6 -9
  60. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  61. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  62. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  63. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  64. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  65. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  66. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  67. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  68. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  69. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  70. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  71. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  72. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  73. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  74. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  75. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  76. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  77. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  78. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  79. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  80. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  81. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  82. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  83. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  84. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  85. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  86. package/src/views/builder/inspector/definitions/index.js +106 -19
  87. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  88. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  89. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  90. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  91. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  92. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  93. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  94. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  95. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  96. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  97. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  98. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  99. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  100. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  101. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  102. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  103. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  104. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  105. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  106. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  107. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  108. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  109. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  110. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  111. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  112. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  113. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  114. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  115. package/src/views/builder/inspector/definitions/reportViewer/main.js +28 -1
  116. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  117. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  118. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  119. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  120. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  121. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  122. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  123. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  124. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  125. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  126. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  127. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  128. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  129. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  130. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  131. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  132. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  133. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  134. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  135. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  136. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  137. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  138. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  139. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  140. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  141. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  142. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  143. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  144. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  145. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  146. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  147. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  148. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +53 -0
  149. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  150. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +167 -0
  151. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  152. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  153. package/src/views/builder/sidebar/tabs/AiTab/trainingExport.js +131 -0
  154. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  155. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  156. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  157. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  158. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  159. package/src/views/builder/sidebar/tabs/ViewTab.jsx +173 -13
  160. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  161. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  162. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  163. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  164. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  165. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  166. package/src/views/builder/viewer/Viewer.jsx +106 -8
  167. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +70 -9
  168. package/src/views/builder/viewer/ViewerToolbar.jsx +285 -56
  169. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  170. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  171. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  172. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  173. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  174. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  175. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  176. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  177. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  178. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  179. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  180. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  181. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  182. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  183. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  184. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  185. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  186. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  187. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  188. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  189. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  190. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  191. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  192. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  193. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  194. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  195. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  196. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  197. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  198. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  199. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  200. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  201. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  202. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  204. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  205. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  206. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  207. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  208. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  209. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  210. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  211. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  212. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  213. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +263 -5
  214. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  215. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  216. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  217. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  218. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  219. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  220. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  221. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  222. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  223. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  224. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  225. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  226. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  227. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  228. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  229. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  230. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  231. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  232. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  233. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  234. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  235. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  236. package/src/views/genericTable/ColumnConfiguratorDialog.js +33 -24
  237. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  238. package/src/views/genericTable/FormattingSettingsDialog.js +8 -3
  239. package/src/views/genericTable/SGrid.js +821 -448
  240. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  241. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  242. package/src/views/genericTable/convertStringFunctions.js +274 -138
  243. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  244. package/src/views/genericTable/updateRefHelpers.js +9 -6
  245. package/src/views/printBuilder/PrintBuilderViewer.jsx +627 -0
  246. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  247. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +3 -2
  248. package/src/@core/components/auth/AclGuard.js +0 -55
  249. package/src/@core/components/auth/AuthGuard.js +0 -40
  250. package/src/@core/components/auth/GuestGuard.js +0 -30
  251. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  252. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  253. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  254. package/src/@core/components/customizer/index.jsx +0 -470
  255. package/src/@core/components/customizer/styles.module.css +0 -169
  256. package/src/@core/components/mui/Avatar.jsx +0 -41
  257. package/src/@core/components/mui/Badge.jsx +0 -20
  258. package/src/@core/components/mui/IconButton.jsx +0 -74
  259. package/src/@core/components/mui/TabList.jsx +0 -60
  260. package/src/@core/components/option-menu/index.jsx +0 -137
  261. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  262. package/src/@core/components/spinner/index.js +0 -26
  263. package/src/@core/components/window-wrapper/index.js +0 -27
  264. package/src/@core/contexts/settingsContext.jsx +0 -98
  265. package/src/@core/hooks/useBgColor.js +0 -63
  266. package/src/@core/hooks/useImageVariant.js +0 -27
  267. package/src/@core/hooks/useLayoutInit.js +0 -37
  268. package/src/@core/hooks/useObjectCookie.js +0 -18
  269. package/src/@core/hooks/useSettings.jsx +0 -15
  270. package/src/@core/layouts/BlankLayout.js +0 -37
  271. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  272. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  273. package/src/@core/layouts/Layout.js +0 -39
  274. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  275. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  276. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  277. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  278. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  279. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  280. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  281. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  282. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  283. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  284. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  285. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  286. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  287. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  288. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  289. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  290. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  291. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  292. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  293. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  294. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  295. package/src/@core/layouts/utils.js +0 -69
  296. package/src/@core/styles/Table.module.css +0 -93
  297. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  298. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  299. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  300. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  301. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  302. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  303. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  304. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  305. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  306. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  307. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  308. package/src/@core/styles/libs/recharts/index.js +0 -47
  309. package/src/@core/styles/stepper.js +0 -103
  310. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  311. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  312. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  313. package/src/@core/svg/ContentCompact.jsx +0 -17
  314. package/src/@core/svg/ContentWide.jsx +0 -17
  315. package/src/@core/svg/DirectionLtr.jsx +0 -93
  316. package/src/@core/svg/DirectionRtl.jsx +0 -93
  317. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  318. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  319. package/src/@core/svg/LayoutVertical.jsx +0 -59
  320. package/src/@core/svg/Logo.jsx +0 -76
  321. package/src/@core/svg/SkinBordered.jsx +0 -54
  322. package/src/@core/svg/SkinDefault.jsx +0 -59
  323. package/src/@core/tailwind/plugin.js +0 -78
  324. package/src/@core/theme/ThemeComponent.js +0 -63
  325. package/src/@core/theme/ThemeOptions.js +0 -71
  326. package/src/@core/theme/breakpoints/index.js +0 -11
  327. package/src/@core/theme/colorSchemes.js +0 -326
  328. package/src/@core/theme/customShadows.js +0 -11
  329. package/src/@core/theme/globalStyles.js +0 -81
  330. package/src/@core/theme/index.js +0 -42
  331. package/src/@core/theme/overrides/accordion.js +0 -51
  332. package/src/@core/theme/overrides/accordion.jsx +0 -85
  333. package/src/@core/theme/overrides/alerts.js +0 -110
  334. package/src/@core/theme/overrides/alerts.jsx +0 -180
  335. package/src/@core/theme/overrides/autocomplete.js +0 -14
  336. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  337. package/src/@core/theme/overrides/avatar.js +0 -38
  338. package/src/@core/theme/overrides/avatars.js +0 -27
  339. package/src/@core/theme/overrides/backdrop.js +0 -22
  340. package/src/@core/theme/overrides/badges.js +0 -16
  341. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  342. package/src/@core/theme/overrides/button-group.js +0 -84
  343. package/src/@core/theme/overrides/button.js +0 -93
  344. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  345. package/src/@core/theme/overrides/card.js +0 -83
  346. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  347. package/src/@core/theme/overrides/chip.js +0 -72
  348. package/src/@core/theme/overrides/dataGrid.js +0 -114
  349. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  350. package/src/@core/theme/overrides/dialog.js +0 -120
  351. package/src/@core/theme/overrides/divider.js +0 -13
  352. package/src/@core/theme/overrides/drawer.js +0 -20
  353. package/src/@core/theme/overrides/fab.js +0 -13
  354. package/src/@core/theme/overrides/form-control-label.js +0 -19
  355. package/src/@core/theme/overrides/icon-button.js +0 -145
  356. package/src/@core/theme/overrides/index.js +0 -103
  357. package/src/@core/theme/overrides/input.js +0 -72
  358. package/src/@core/theme/overrides/link.js +0 -9
  359. package/src/@core/theme/overrides/list.js +0 -44
  360. package/src/@core/theme/overrides/menu.js +0 -25
  361. package/src/@core/theme/overrides/pagination.js +0 -41
  362. package/src/@core/theme/overrides/paper.js +0 -9
  363. package/src/@core/theme/overrides/popover.js +0 -16
  364. package/src/@core/theme/overrides/progress.js +0 -38
  365. package/src/@core/theme/overrides/radio.jsx +0 -80
  366. package/src/@core/theme/overrides/rating.js +0 -16
  367. package/src/@core/theme/overrides/rating.jsx +0 -32
  368. package/src/@core/theme/overrides/select.js +0 -19
  369. package/src/@core/theme/overrides/select.jsx +0 -52
  370. package/src/@core/theme/overrides/slider.js +0 -97
  371. package/src/@core/theme/overrides/snackbar.js +0 -19
  372. package/src/@core/theme/overrides/switch.js +0 -73
  373. package/src/@core/theme/overrides/switches.js +0 -25
  374. package/src/@core/theme/overrides/table-pagination.js +0 -39
  375. package/src/@core/theme/overrides/table.js +0 -81
  376. package/src/@core/theme/overrides/tabs.js +0 -30
  377. package/src/@core/theme/overrides/timeline.js +0 -80
  378. package/src/@core/theme/overrides/toggle-button.js +0 -33
  379. package/src/@core/theme/overrides/toggleButton.js +0 -16
  380. package/src/@core/theme/overrides/tooltip.js +0 -21
  381. package/src/@core/theme/overrides/typography.js +0 -13
  382. package/src/@core/theme/palette/index.js +0 -107
  383. package/src/@core/theme/shadows/index.js +0 -61
  384. package/src/@core/theme/shadows.js +0 -12
  385. package/src/@core/theme/spacing/index.js +0 -3
  386. package/src/@core/theme/spacing.js +0 -5
  387. package/src/@core/theme/typography/index.js +0 -65
  388. package/src/@core/theme/typography.js +0 -84
  389. package/src/@core/utils/create-emotion-cache.js +0 -5
  390. package/src/@core/utils/hex-to-rgba.js +0 -11
  391. package/src/@core/utils/serverHelpers.js +0 -45
  392. package/src/@menu/components/RouterLink.jsx +0 -18
  393. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  394. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  395. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  396. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  397. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  398. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  399. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  400. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  401. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  402. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  403. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  404. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  405. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  406. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  407. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  408. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  409. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  410. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  411. package/src/@menu/defaultConfigs.js +0 -12
  412. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  413. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  414. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  415. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  416. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  417. package/src/@menu/horizontal-menu/index.jsx +0 -8
  418. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  419. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  420. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  421. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  422. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  423. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  424. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  425. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  426. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  427. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  428. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  429. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  430. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  431. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  432. package/src/@menu/styles/styles.module.css +0 -5
  433. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  434. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  435. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  436. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  437. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  438. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  439. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  440. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  441. package/src/@menu/svg/ChevronRight.jsx +0 -9
  442. package/src/@menu/svg/Close.jsx +0 -12
  443. package/src/@menu/svg/RadioCircle.jsx +0 -12
  444. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  445. package/src/@menu/utils/menuClasses.js +0 -44
  446. package/src/@menu/utils/menuUtils.jsx +0 -145
  447. package/src/@menu/vertical-menu/index.jsx +0 -11
  448. package/src/configs/acl.js +0 -115
  449. package/src/configs/auth.js +0 -5
  450. package/src/configs/aws-exports.js +0 -30
  451. package/src/configs/firebase.js +0 -25
  452. package/src/configs/i18n.js +0 -34
  453. package/src/configs/primaryColorConfig.js +0 -35
  454. package/src/configs/themeConfig.js +0 -44
  455. package/src/layouts/UserLayout.js +0 -94
  456. package/src/layouts/UserThemeOptions.js +0 -191
  457. package/src/layouts/components/Direction.js +0 -30
  458. package/src/layouts/components/HtmlTooltip.js +0 -15
  459. package/src/layouts/components/Translations.js +0 -11
  460. package/src/layouts/components/UserDropdown.js +0 -217
  461. package/src/layouts/components/UserIcon.js +0 -40
  462. package/src/layouts/components/acl/Can.js +0 -6
  463. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  464. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  465. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  466. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  467. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  468. package/src/layouts/components/mui/StepperComps.js +0 -55
  469. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  470. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  471. package/src/libs/ApexCharts.jsx +0 -5
  472. package/src/libs/ReactPlayer.jsx +0 -5
  473. package/src/libs/Recharts.jsx +0 -4
  474. package/src/libs/auth.js +0 -124
  475. package/src/libs/styles/AppFullCalendar.js +0 -505
  476. package/src/libs/styles/AppKeenSlider.js +0 -116
  477. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  478. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  479. package/src/libs/styles/AppReactDropzone.js +0 -76
  480. package/src/libs/styles/AppReactToastify.jsx +0 -108
  481. package/src/libs/styles/AppRecharts.js +0 -55
  482. package/src/libs/styles/inputOtp.module.css +0 -39
  483. package/src/libs/styles/tiptapEditor.css +0 -72
  484. package/src/navigation/horizontal/index.js +0 -246
  485. package/src/navigation/vertical/index.js +0 -253
  486. package/src/pages/401.js +0 -70
  487. package/src/pages/404.js +0 -67
  488. package/src/pages/500.js +0 -68
  489. package/src/pages/[slug].js +0 -115
  490. package/src/pages/_document.js +0 -72
  491. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  492. package/src/pages/api/navigation/save.js +0 -218
  493. package/src/pages/authModule/acl/index.js +0 -48
  494. package/src/pages/authModule/forgot-password/index.js +0 -228
  495. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  496. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  497. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  498. package/src/pages/authModule/privacy/index.js +0 -721
  499. package/src/pages/authModule/users/index.js +0 -210
  500. package/src/pages/login/index.js +0 -328
  501. package/src/pages/mainHome/index.js +0 -181
  502. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  503. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  504. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  505. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  506. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  507. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  508. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  509. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  510. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  511. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  512. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  513. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  514. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  515. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  516. package/src/views/pages/users/UserManageDialog.js +0 -283
  517. package/src/views/pages/users/UserViewPage.js +0 -199
  518. package/src/views/users/AddUserNameDialog.js +0 -162
  519. package/src/views/users/ContactManage.js +0 -449
  520. package/src/views/users/ResetPasswordDialog.js +0 -242
@@ -0,0 +1,103 @@
1
+ import { useEffect, useRef, useState } from 'react'
2
+ import { useRouter } from 'next/router'
3
+ import {
4
+ Button,
5
+ Dialog,
6
+ DialogActions,
7
+ DialogContent,
8
+ DialogContentText,
9
+ DialogTitle
10
+ } from '@mui/material'
11
+ import WarningAmberRoundedIcon from '@mui/icons-material/WarningAmberRounded'
12
+
13
+ /**
14
+ * Renders nothing visible until the user tries to leave the page (tab close,
15
+ * refresh, browser back, or in-app navigation) while `isDirty` is true.
16
+ *
17
+ * - Tab close / refresh → browser-native confirm (browsers do not allow
18
+ * custom UI here; only `beforeunload` is honored)
19
+ * - In-app navigation → custom MUI dialog (Stay / Leave)
20
+ * - Browser back/forward → handled by Next.js routeChangeStart, so the
21
+ * same custom dialog applies as long as the
22
+ * target stays inside the app
23
+ */
24
+ export default function UnsavedChangesGuard({
25
+ isDirty,
26
+ title = 'Unsaved changes',
27
+ message = 'You have unsaved changes. If you leave this page now, your changes will be lost.',
28
+ stayLabel = 'Stay on page',
29
+ leaveLabel = 'Leave anyway'
30
+ }) {
31
+ const router = useRouter()
32
+ const [pending, setPending] = useState(null) // { url, options }
33
+ // Set just before we re-fire a confirmed navigation so the routeChangeStart
34
+ // handler lets it through.
35
+ const allowNavigationRef = useRef(false)
36
+
37
+ // ── Tab close / refresh ─────────────────────────────────────────────────
38
+ useEffect(() => {
39
+ if (!isDirty) return
40
+ const handler = e => {
41
+ if (allowNavigationRef.current) return
42
+ e.preventDefault()
43
+ // Modern browsers ignore the message and show their own copy, but
44
+ // returnValue must be set for the prompt to appear at all.
45
+ e.returnValue = message
46
+ return message
47
+ }
48
+ window.addEventListener('beforeunload', handler)
49
+ return () => window.removeEventListener('beforeunload', handler)
50
+ }, [isDirty, message])
51
+
52
+ // ── In-app navigation (router push/replace, browser back) ──────────────
53
+ useEffect(() => {
54
+ if (!isDirty) return
55
+ const handler = (url, options) => {
56
+ if (allowNavigationRef.current) return
57
+ // Same-URL changes (e.g. shallow query swaps after save) are not real
58
+ // navigations from the user's POV; let them through.
59
+ if (url === router.asPath) return
60
+
61
+ setPending({ url, options })
62
+ // Documented Next.js pattern for cancelling a route change.
63
+ router.events.emit('routeChangeError')
64
+ // eslint-disable-next-line no-throw-literal
65
+ throw 'Route change aborted by UnsavedChangesGuard.'
66
+ }
67
+ router.events.on('routeChangeStart', handler)
68
+ return () => router.events.off('routeChangeStart', handler)
69
+ }, [isDirty, router])
70
+
71
+ const handleStay = () => setPending(null)
72
+
73
+ const handleLeave = () => {
74
+ if (!pending) return
75
+ const { url, options } = pending
76
+ allowNavigationRef.current = true
77
+ setPending(null)
78
+ // Re-fire the navigation; allowNavigationRef short-circuits the guard.
79
+ router.push(url, undefined, options).finally(() => {
80
+ allowNavigationRef.current = false
81
+ })
82
+ }
83
+
84
+ return (
85
+ <Dialog open={!!pending} onClose={handleStay} maxWidth='xs' fullWidth>
86
+ <DialogTitle sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
87
+ <WarningAmberRoundedIcon color='warning' fontSize='small' />
88
+ {title}
89
+ </DialogTitle>
90
+ <DialogContent>
91
+ <DialogContentText>{message}</DialogContentText>
92
+ </DialogContent>
93
+ <DialogActions sx={{ px: 3, pb: 2 }}>
94
+ <Button onClick={handleStay} autoFocus variant='contained' color='primary'>
95
+ {stayLabel}
96
+ </Button>
97
+ <Button onClick={handleLeave} color='error'>
98
+ {leaveLabel}
99
+ </Button>
100
+ </DialogActions>
101
+ </Dialog>
102
+ )
103
+ }
@@ -28,22 +28,19 @@ export default function Inspector() {
28
28
  variant="scrollable"
29
29
  scrollButtons="auto"
30
30
  sx={{
31
- bgcolor: '#3a3f45',
31
+ bgcolor: 'background.paper',
32
+ borderBottom: '1px solid',
33
+ borderColor: 'divider',
32
34
  minHeight: 48,
33
35
  '& .MuiTab-root': {
34
- color: 'rgba(255, 255, 255, 0.7)',
36
+ color: 'text.secondary',
35
37
  minHeight: 48,
36
38
  textTransform: 'none',
37
39
  fontSize: '0.875rem',
38
40
  fontWeight: 500,
39
- '&.Mui-selected': {
40
- color: '#fff'
41
- }
41
+ '&.Mui-selected': { color: 'text.primary' },
42
42
  },
43
- '& .MuiTabs-indicator': {
44
- backgroundColor: '#9c27b0',
45
- height: 3
46
- }
43
+ '& .MuiTabs-indicator': { backgroundColor: 'primary.main', height: 3 },
47
44
  }}
48
45
  >
49
46
  <Tab label="Main" />
@@ -2,7 +2,7 @@ import { Box, Typography, TextField, MenuItem } from '@mui/material'
2
2
  import { useBuilder } from 'src/context/BuilderContext'
3
3
  import FieldWrapper from '../fields/FieldWrapper'
4
4
  import { getActionsFields } from '../definitions'
5
- import { findNode, updateNodeInTree } from 'services/builderHelper'
5
+ import { findNodeAnywhere, updateNodeAnywhere } from 'services/builderHelper'
6
6
  import JSEditor from '../../JSEditor'
7
7
 
8
8
  /**
@@ -19,7 +19,7 @@ function normalizeActionField(field) {
19
19
 
20
20
  export default function ComponentActionsTab() {
21
21
  const { schema, selectedId, setSchema } = useBuilder()
22
- const node = findNode(schema.root, selectedId)
22
+ const { node, location, dialogId } = findNodeAnywhere(schema, selectedId)
23
23
  if (!node) return null
24
24
 
25
25
  const actionFields = getActionsFields(node.type)
@@ -40,17 +40,11 @@ export default function ComponentActionsTab() {
40
40
  )
41
41
 
42
42
  const updateAction = (name, actionData) => {
43
- setSchema(prev => ({
44
- ...prev,
45
- root: updateNodeInTree(prev.root, node.id, {
46
- props: {
47
- actions: {
48
- ...actions,
49
- [name]: actionData
50
- }
51
- }
52
- })
53
- }))
43
+ setSchema(prev =>
44
+ updateNodeAnywhere(prev, node.id, {
45
+ props: { actions: { ...actions, [name]: actionData } }
46
+ }, location, dialogId)
47
+ )
54
48
  }
55
49
 
56
50
  return (
@@ -1,4 +1,4 @@
1
- import { Box } from '@mui/material'
1
+ import { Box, Typography } from '@mui/material'
2
2
  import { useBuilder } from 'src/context/BuilderContext'
3
3
  import FieldWrapper from '../fields/FieldWrapper'
4
4
  import ExpressionEditor from '../fields/ExpressionEditor'
@@ -8,47 +8,98 @@ import TextEditor from '../fields/TextEditor'
8
8
  import OptionsEditor from '../fields/OptionsEditor'
9
9
  import TabsEditor from '../fields/TabsEditor'
10
10
  import ItemsEditor from '../fields/ItemsEditor'
11
+ import ExtraColsEditor from '../fields/ExtraColsEditor'
12
+ import ColumnsConfigEditor from '../fields/ColumnsConfigEditor'
13
+ import ActionsConfigEditor from '../fields/ActionsConfigEditor'
14
+ import ThresholdsEditor from '../fields/ThresholdsEditor'
15
+ import SeriesEditorField from '../fields/SeriesEditorField'
16
+ import DonutRingsEditorField from '../fields/DonutRingsEditorField'
17
+ import ColorSchemaField from '../fields/ColorSchemaField'
18
+ import ColumnFunctionEditor from '../fields/ColumnFunctionEditor'
19
+ import IconEditor from '../fields/IconEditor'
20
+ import ColumnMappingEditor from '../fields/ColumnMappingEditor'
21
+ import TableColumnsEditor from '../fields/TableColumnsEditor'
22
+ import MarkersEditorField from '../fields/MarkersEditorField'
23
+ import KpiActionField from '../fields/KpiActionField'
11
24
  import { getMainFields } from '../definitions'
12
- import { findNode, updateNodeInTree } from 'services/builderHelper'
25
+ import { findNodeAnywhere, updateNodeAnywhere } from 'services/builderHelper'
13
26
 
14
- /**
15
- * Ensure every field is an object:
16
- * { type: 'value' | 'expression', value?, expression? }
17
- */
18
27
  function normalizeField(field) {
19
28
  if (field && typeof field === 'object' && field.valueType) return field
20
-
21
- return {
22
- valueType: 'value',
23
- value: field
24
- }
29
+ return { valueType: 'value', value: field }
25
30
  }
26
31
 
27
32
  export default function MainTab() {
28
33
  const { schema, selectedId, setSchema } = useBuilder()
29
- const node = findNode(schema.root, selectedId)
34
+
35
+ const { node, location, dialogId } = findNodeAnywhere(schema, selectedId)
30
36
  if (!node) return null
31
37
 
32
38
  const fields = getMainFields(node.type)
33
39
 
34
- // 🔑 Normalize ALL main props
35
- const main = Object.fromEntries(Object.entries(node.props?.main ?? {}).map(([k, v]) => [k, normalizeField(v)]))
40
+ const main = Object.fromEntries(
41
+ Object.entries(node.props?.main ?? {}).map(([k, v]) => [k, normalizeField(v)])
42
+ )
43
+
44
+ const actions = node.props?.actions ?? {}
45
+
36
46
  const updateField = (name, fieldState) => {
37
- setSchema(prev => ({
38
- ...prev,
39
- root: updateNodeInTree(prev.root, node.id, {
40
- props: {
41
- main: {
42
- ...main,
43
- [name]: fieldState
44
- }
45
- }
46
- })
47
- }))
47
+ setSchema(prev =>
48
+ updateNodeAnywhere(prev, node.id, { props: { main: { ...main, [name]: fieldState } } }, location, dialogId)
49
+ )
50
+ }
51
+
52
+ // KPI action fields write to node.props.actions, not node.props.main
53
+ const updateAction = (name, actionValue) => {
54
+ const nextActions = { ...actions }
55
+ if (actionValue == null) {
56
+ delete nextActions[name]
57
+ } else {
58
+ nextActions[name] = actionValue
59
+ }
60
+ setSchema(prev =>
61
+ updateNodeAnywhere(prev, node.id, { props: { actions: nextActions } }, location, dialogId)
62
+ )
48
63
  }
49
64
  return (
50
65
  <Box p={2}>
51
66
  {fields.map(field => {
67
+ // ── Note / info block — no input, no FieldWrapper ─────────────────
68
+ if (field.type === 'note') {
69
+ return (
70
+ <Box key={field.name} sx={{
71
+ mb: 1.5, px: 1.25, py: 0.75,
72
+ bgcolor: 'action.hover',
73
+ borderLeft: '3px solid',
74
+ borderColor: 'info.main',
75
+ borderRadius: '0 4px 4px 0',
76
+ }}>
77
+ {field.label && (
78
+ <Typography variant='caption' sx={{ display: 'block', fontWeight: 600, mb: 0.25, color: 'info.main' }}>
79
+ {field.label}
80
+ </Typography>
81
+ )}
82
+ <Typography variant='caption' sx={{ display: 'block', color: 'text.secondary', whiteSpace: 'pre-line' }}>
83
+ {field.text}
84
+ </Typography>
85
+ </Box>
86
+ )
87
+ }
88
+
89
+ // KPI action fields read from node.props.actions, not main
90
+ if (field.type === 'kpi-action') {
91
+ return (
92
+ <FieldWrapper key={field.name} label={field.label}>
93
+ <KpiActionField
94
+ label={field.label}
95
+ contextVars={field.context ?? []}
96
+ value={actions[field.name]}
97
+ onChange={payload => updateAction(field.name, payload)}
98
+ />
99
+ </FieldWrapper>
100
+ )
101
+ }
102
+
52
103
  const fieldValue = main[field.name] ?? { valueType: 'value', value: undefined }
53
104
  return (
54
105
  <FieldWrapper key={field.name} label={field.label}>
@@ -87,6 +138,73 @@ export default function MainTab() {
87
138
  {field.type === 'items-editor' && (
88
139
  <ItemsEditor field={fieldValue} onChange={payload => updateField(field.name, payload)} />
89
140
  )}
141
+
142
+ {field.type === 'extra-cols-editor' && (
143
+ <ExtraColsEditor field={fieldValue} onChange={payload => updateField(field.name, payload)} />
144
+ )}
145
+
146
+ {field.type === 'columns-config-editor' && (
147
+ <ColumnsConfigEditor field={fieldValue} onChange={payload => updateField(field.name, payload)} />
148
+ )}
149
+
150
+ {field.type === 'thresholds-editor' && (
151
+ <ThresholdsEditor field={fieldValue} onChange={payload => updateField(field.name, payload)} />
152
+ )}
153
+
154
+ {field.type === 'series-editor' && (
155
+ <SeriesEditorField field={fieldValue} onChange={payload => updateField(field.name, payload)} />
156
+ )}
157
+
158
+ {field.type === 'rings-editor' && (
159
+ <DonutRingsEditorField field={fieldValue} onChange={payload => updateField(field.name, payload)} />
160
+ )}
161
+
162
+ {field.type === 'markers-editor' && (
163
+ <MarkersEditorField field={fieldValue} onChange={payload => updateField(field.name, payload)} />
164
+ )}
165
+
166
+ {field.type === 'color-schema' && (
167
+ <ColorSchemaField field={fieldValue} onChange={payload => updateField(field.name, payload)} />
168
+ )}
169
+
170
+ {field.type === 'actions-config-editor' && (
171
+ <ActionsConfigEditor field={fieldValue} context={field.context} onChange={payload => updateField(field.name, payload)} />
172
+ )}
173
+
174
+ {field.type === 'icon' && (
175
+ <IconEditor field={fieldValue} onChange={payload => updateField(field.name, payload)} />
176
+ )}
177
+
178
+ {field.type === 'column-mapping-editor' && (
179
+ <ColumnMappingEditor field={fieldValue} onChange={payload => updateField(field.name, payload)} />
180
+ )}
181
+
182
+ {field.type === 'table-columns-editor' && (
183
+ <TableColumnsEditor field={fieldValue} onChange={payload => updateField(field.name, payload)} />
184
+ )}
185
+
186
+ {field.type === 'code' && (
187
+ <Box display='flex' alignItems='center' gap={1}>
188
+ <Typography
189
+ noWrap
190
+ sx={{
191
+ flex: 1, fontSize: 11, fontFamily: 'monospace',
192
+ color: fieldValue.value?.trim() ? '#aed581' : '#555',
193
+ overflow: 'hidden', textOverflow: 'ellipsis',
194
+ }}
195
+ >
196
+ {fieldValue.value?.trim()
197
+ ? fieldValue.value.trim().split('\n').find(l => l.trim() && !l.trim().startsWith('//') && !l.trim().startsWith('/*')) ?? '(code set)'
198
+ : '(no code)'}
199
+ </Typography>
200
+ <ColumnFunctionEditor
201
+ label={field.label}
202
+ type={field.codeType || 'calculation'}
203
+ value={fieldValue.value || ''}
204
+ onChange={v => updateField(field.name, { valueType: 'value', value: v })}
205
+ />
206
+ </Box>
207
+ )}
90
208
  </FieldWrapper>
91
209
  )
92
210
  })}
@@ -6,43 +6,28 @@ import BooleanEditor from '../fields/BooleanEditor'
6
6
  import SelectEditor from '../fields/SelectEditor'
7
7
  import TextEditor from '../fields/TextEditor'
8
8
  import { getRulesFields } from '../definitions'
9
- import { findNode, updateNodeInTree } from 'services/builderHelper'
9
+ import { findNodeAnywhere, updateNodeAnywhere } from 'services/builderHelper'
10
10
 
11
- /**
12
- * Ensure every field is an object:
13
- * { valueType: 'value' | 'expression', value?, expression? }
14
- */
15
11
  function normalizeField(field) {
16
12
  if (field && typeof field === 'object' && field.valueType) return field
17
-
18
- return {
19
- valueType: 'value',
20
- value: field
21
- }
13
+ return { valueType: 'value', value: field }
22
14
  }
23
15
 
24
16
  export default function RulesTab() {
25
17
  const { schema, selectedId, setSchema } = useBuilder()
26
- const node = findNode(schema.root, selectedId)
18
+ const { node, location, dialogId } = findNodeAnywhere(schema, selectedId)
27
19
  if (!node) return null
28
20
 
29
21
  const fields = getRulesFields(node.type)
30
22
 
31
- // 🔑 Normalize ALL rules props
32
- const rules = Object.fromEntries(Object.entries(node.props?.rules ?? {}).map(([k, v]) => [k, normalizeField(v)]))
23
+ const rules = Object.fromEntries(
24
+ Object.entries(node.props?.rules ?? {}).map(([k, v]) => [k, normalizeField(v)])
25
+ )
33
26
 
34
27
  const updateField = (name, fieldState) => {
35
- setSchema(prev => ({
36
- ...prev,
37
- root: updateNodeInTree(prev.root, node.id, {
38
- props: {
39
- rules: {
40
- ...rules,
41
- [name]: fieldState
42
- }
43
- }
44
- })
45
- }))
28
+ setSchema(prev =>
29
+ updateNodeAnywhere(prev, node.id, { props: { rules: { ...rules, [name]: fieldState } } }, location, dialogId)
30
+ )
46
31
  }
47
32
 
48
33
  return (
@@ -6,43 +6,28 @@ import BooleanEditor from '../fields/BooleanEditor'
6
6
  import SelectEditor from '../fields/SelectEditor'
7
7
  import TextEditor from '../fields/TextEditor'
8
8
  import { getStyleFields } from '../definitions'
9
- import { findNode, updateNodeInTree } from 'services/builderHelper'
9
+ import { findNodeAnywhere, updateNodeAnywhere } from 'services/builderHelper'
10
10
 
11
- /**
12
- * Ensure every field is an object:
13
- * { valueType: 'value' | 'expression', value?, expression? }
14
- */
15
11
  function normalizeField(field) {
16
12
  if (field && typeof field === 'object' && field.valueType) return field
17
-
18
- return {
19
- valueType: 'value',
20
- value: field
21
- }
13
+ return { valueType: 'value', value: field }
22
14
  }
23
15
 
24
16
  export default function StyleTab() {
25
17
  const { schema, selectedId, setSchema } = useBuilder()
26
- const node = findNode(schema.root, selectedId)
18
+ const { node, location, dialogId } = findNodeAnywhere(schema, selectedId)
27
19
  if (!node) return null
28
20
 
29
21
  const fields = getStyleFields(node.type)
30
22
 
31
- // 🔑 Normalize ALL style props
32
- const style = Object.fromEntries(Object.entries(node.props?.style ?? {}).map(([k, v]) => [k, normalizeField(v)]))
23
+ const style = Object.fromEntries(
24
+ Object.entries(node.props?.style ?? {}).map(([k, v]) => [k, normalizeField(v)])
25
+ )
33
26
 
34
27
  const updateField = (name, fieldState) => {
35
- setSchema(prev => ({
36
- ...prev,
37
- root: updateNodeInTree(prev.root, node.id, {
38
- props: {
39
- style: {
40
- ...style,
41
- [name]: fieldState
42
- }
43
- }
44
- })
45
- }))
28
+ setSchema(prev =>
29
+ updateNodeAnywhere(prev, node.id, { props: { style: { ...style, [name]: fieldState } } }, location, dialogId)
30
+ )
46
31
  }
47
32
 
48
33
  return (
@@ -1,13 +1,11 @@
1
+ import { LABEL_POSITION_FIELDS } from '../common/main'
2
+
1
3
  export const AUTOCOMPLETE_MAIN_FIELDS = [
2
4
  { name: 'key', label: 'Key', type: 'expression' },
3
5
  { name: 'label', label: 'Label', type: 'expression' },
6
+ ...LABEL_POSITION_FIELDS,
4
7
  { name: 'placeholder', label: 'Placeholder', type: 'text' },
5
- {
6
- name: 'size',
7
- label: 'Size',
8
- type: 'select',
9
- options: ['small', 'medium', 'large']
10
- },
8
+ { name: 'size', label: 'Size', type: 'select', options: ['small', 'medium', 'large'] },
11
9
  { name: 'disabled', label: 'Disabled', type: 'boolean' },
12
10
  { name: 'enabled', label: 'Enabled', type: 'boolean' },
13
11
  { name: 'fullWidth', label: 'Full Width', type: 'boolean' },
@@ -0,0 +1,7 @@
1
+ export const BANNER_ACTIONS_FIELDS = [
2
+ {
3
+ name: 'onClose',
4
+ label: 'On Close',
5
+ desc: 'Fires when the user dismisses the banner (requires Dismissible = true).',
6
+ },
7
+ ]
@@ -0,0 +1,22 @@
1
+ export const BANNER_MAIN_FIELDS = [
2
+ { name: 'key', label: 'Key', type: 'expression' },
3
+ { name: 'message', label: 'Message', type: 'expression' },
4
+ { name: 'title', label: 'Title', type: 'expression' },
5
+ {
6
+ name: 'severity',
7
+ label: 'Severity',
8
+ type: 'select',
9
+ options: ['info', 'success', 'warning', 'error'],
10
+ },
11
+ {
12
+ name: 'variant',
13
+ label: 'Variant',
14
+ type: 'select',
15
+ options: ['standard', 'filled', 'outlined'],
16
+ },
17
+ // Controlled visibility — bind to a data key to show/hide programmatically.
18
+ // Leave blank to let the component manage its own visible state.
19
+ { name: 'open', label: 'Controlled Open', type: 'expression' },
20
+ { name: 'dismissible', label: 'Dismissible', type: 'boolean' },
21
+ { name: 'icon', label: 'Show Icon', type: 'boolean' },
22
+ ]
@@ -0,0 +1 @@
1
+ export const BANNER_RULES_FIELDS = []
@@ -0,0 +1 @@
1
+ export const BANNER_STYLE_FIELDS = []
@@ -1,9 +1,46 @@
1
1
  export const BREADCRUMB_MAIN_FIELDS = [
2
- { name: 'key', label: 'Key', type: 'expression' },
3
- { name: 'separator', label: 'Separator', type: 'expression' },
2
+ { name: 'key', label: 'Key', type: 'expression' },
3
+ { name: 'items', label: 'Items', type: 'expression' },
4
+ // [{label, href?, disabled?}] — last item = current page
5
+
4
6
  {
5
- name: 'items',
6
- label: 'Items',
7
- type: 'options', // Reusing options editor if it supports label/href or just label
8
- }
7
+ name: 'variant', label: 'Variant', type: 'select',
8
+ options: ['breadcrumb', 'chevron'],
9
+ },
10
+ {
11
+ name: 'mode', label: 'Interaction Mode', type: 'select',
12
+ options: ['link', 'click', 'none'],
13
+ // link → uses href for navigation
14
+ // click → calls onClick code with {item, index}
15
+ // none → display only
16
+ },
17
+
18
+ // ── Breadcrumb-variant options ──────────────────────────────────────────
19
+ { name: 'separator', label: 'Separator', type: 'expression' },
20
+ { name: 'maxItems', label: 'Max Items', type: 'number' },
21
+ {
22
+ name: 'linkUnderline', label: 'Link Underline', type: 'select',
23
+ options: ['hover', 'always', 'none'],
24
+ },
25
+ {
26
+ name: 'currentColor', label: 'Current Item Color', type: 'select',
27
+ options: ['text.primary', 'primary.main', 'text.secondary', 'inherit'],
28
+ },
29
+
30
+ // ── Chevron-variant options ─────────────────────────────────────────────
31
+ { name: 'activeIndex', label: 'Active Index', type: 'expression' },
32
+ {
33
+ name: 'itemSize', label: 'Item Size', type: 'select',
34
+ options: ['small', 'medium', 'large'],
35
+ },
36
+ { name: 'fullWidth', label: 'Full Width', type: 'boolean' },
37
+ { name: 'completedColor', label: 'Completed BG Color', type: 'text' },
38
+ { name: 'activeColor', label: 'Active BG Color', type: 'text' },
39
+ { name: 'pendingColor', label: 'Pending BG Color', type: 'text' },
40
+ { name: 'completedTextColor', label: 'Completed Text Color', type: 'text' },
41
+ { name: 'activeTextColor', label: 'Active Text Color', type: 'text' },
42
+ { name: 'pendingTextColor', label: 'Pending Text Color', type: 'text' },
43
+
44
+ // ── onClick code ────────────────────────────────────────────────────────
45
+ { name: 'onClick', label: 'On Item Click', type: 'code', codeType: 'calculation' },
9
46
  ]
@@ -1,14 +1,13 @@
1
1
  export const BUTTON_MAIN_FIELDS = [
2
- { name: 'key', label: 'Key', type: 'expression' },
3
- { name: 'label', label: 'Label', type: 'expression' },
4
- { name: 'variant', label: 'Variant', type: 'select', options: ['text', 'outlined', 'contained'] },
5
- {
6
- name: 'size',
7
- label: 'Size',
8
- type: 'select',
9
- options: ['small', 'medium', 'large']
10
- },
11
- { name: 'disabled', label: 'Disabled', type: 'boolean' },
12
- { name: 'enabled', label: 'Enabled', type: 'boolean' },
13
- { name: 'fullWidth', label: 'FullWidth', type: 'boolean' }
2
+ { name: 'key', label: 'Key', type: 'expression' },
3
+ { name: 'label', label: 'Label', type: 'expression' },
4
+ { name: 'variant', label: 'Variant', type: 'select', options: ['text', 'outlined', 'contained'] },
5
+ { name: 'color', label: 'Color', type: 'select', options: ['default', 'primary', 'secondary', 'error', 'warning', 'info', 'success', 'inherit'] },
6
+ { name: 'size', label: 'Size', type: 'select', options: ['small', 'medium', 'large'] },
7
+ { name: 'prefix', label: 'Prefix', type: 'icon' },
8
+ { name: 'suffix', label: 'Suffix', type: 'icon' },
9
+ { name: 'tooltip', label: 'Tooltip', type: 'expression' },
10
+ { name: 'iconButton', label: 'Icon Button', type: 'boolean' },
11
+ { name: 'disabled', label: 'Disabled', type: 'boolean' },
12
+ { name: 'fullWidth', label: 'Full Width', type: 'boolean' },
14
13
  ]