robobyte-front-builder 1.0.19 → 1.0.21

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