robobyte-front-builder 1.0.17 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. package/README.md +211 -0
  2. package/next.config.js +19 -48
  3. package/package.json +39 -85
  4. package/src/context/BuilderContext.jsx +134 -6
  5. package/src/context/SystemContext.js +2 -2
  6. package/src/hooks/useGlobalStore.js +36 -0
  7. package/src/hooks/useTimerEngine.js +54 -0
  8. package/src/lib/index.js +11 -3
  9. package/src/lib/layouts/BlankLayout.jsx +13 -0
  10. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +59 -1
  11. package/src/lib/themes/builderTheme.js +41 -0
  12. package/src/pages/_app.js +32 -134
  13. package/src/pages/api/ai.js +87 -0
  14. package/src/pages/builders/report/index.js +1 -0
  15. package/src/pages/builders/report/list/index.js +1 -0
  16. package/src/pages/builders/report/viewer/index.js +1 -0
  17. package/src/pages/index.js +88 -37
  18. package/src/pages/printBuilder/index.jsx +263 -0
  19. package/src/pages/printBuilder/layouts/index.jsx +298 -0
  20. package/src/pages/reportModule/reportBuilder/index.js +723 -563
  21. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +137 -71
  22. package/src/pages/reportModule/reportBuilder/reports/index.js +51 -13
  23. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +126 -0
  24. package/src/pages/viewBuilder/index.jsx +117 -32
  25. package/src/pages/viewBuilder/views/index.js +3 -3
  26. package/src/pages/viewer/[id]/index.js +2 -1
  27. package/src/services/DeleteService.js +31 -60
  28. package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
  29. package/src/services/Endpoints.js +2 -0
  30. package/src/services/GetService.js +33 -54
  31. package/src/services/PatchService.js +38 -65
  32. package/src/services/PostService.js +37 -63
  33. package/src/services/UpdateService.js +39 -65
  34. package/src/services/builderHelper/actionExecutor.js +141 -25
  35. package/src/services/builderHelper/builderHelper.js +92 -0
  36. package/src/services/builderHelper/colorSchema.js +95 -0
  37. package/src/services/builderHelper/iconResolver.js +50 -0
  38. package/src/services/builderHelper/jsExecutor.js +212 -46
  39. package/src/services/builderHelper/nodeFactory.js +32 -15
  40. package/src/services/builderHelper/numberFormat.js +123 -0
  41. package/src/services/builderHelper/resolveProps.js +73 -4
  42. package/src/services/builderHelper/thresholdEngine.js +77 -0
  43. package/src/services/builderHelper/tree.js +31 -0
  44. package/src/services/components/agGridAutoComplete.js +5 -9
  45. package/src/services/config.js +9 -1
  46. package/src/services/globalStore.js +80 -0
  47. package/src/services/helper/multiSelectEditor.js +5 -9
  48. package/src/services/helper/multiSelectEditorByBuilder.js +241 -0
  49. package/src/services/helper/reportSessionHelper.js +83 -0
  50. package/src/services/reportData/fetchReportData.js +69 -28
  51. package/src/services/routerRef.js +35 -0
  52. package/src/views/ConfirmDialog.js +2 -2
  53. package/src/views/builder/JSEditor.js +105 -107
  54. package/src/views/builder/inspector/Inspector.jsx +6 -9
  55. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  56. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  57. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  58. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  59. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  60. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  61. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  62. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  63. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  64. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  65. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  66. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  67. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  68. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  69. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  70. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  71. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  72. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  73. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  74. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  75. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  76. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  77. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  78. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  79. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  80. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  81. package/src/views/builder/inspector/definitions/index.js +106 -19
  82. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  83. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  84. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  85. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  86. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  87. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  88. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  89. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  90. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  91. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  92. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  93. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  94. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  95. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  96. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  97. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  98. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  99. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  100. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  101. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  102. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  103. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  104. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  105. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  106. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  107. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  108. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  109. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  110. package/src/views/builder/inspector/definitions/reportViewer/main.js +15 -1
  111. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  112. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  113. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  114. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  115. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  116. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  117. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  118. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  119. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  120. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  121. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  122. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  123. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  124. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  125. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  126. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  127. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  128. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  129. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  130. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  131. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  132. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  133. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  134. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  135. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  136. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  137. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  138. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  139. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  140. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  141. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  142. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  143. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +49 -0
  144. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  145. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +102 -0
  146. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  147. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  148. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  149. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  150. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  151. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  152. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  153. package/src/views/builder/sidebar/tabs/ViewTab.jsx +1 -1
  154. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  155. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  156. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  157. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  158. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  159. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  160. package/src/views/builder/viewer/Viewer.jsx +106 -8
  161. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +61 -4
  162. package/src/views/builder/viewer/ViewerToolbar.jsx +273 -59
  163. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  164. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  165. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  166. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  167. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  168. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  169. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  170. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  171. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  172. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  173. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  174. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  175. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  176. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  177. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  178. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  179. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  180. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  181. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  182. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  183. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  184. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  185. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  186. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  187. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  188. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  189. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  190. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  191. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  192. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  193. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  194. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  195. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  196. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  197. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  198. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  199. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  200. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  201. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  202. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  204. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  205. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  206. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  207. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +219 -5
  208. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  209. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  210. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  211. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  212. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  213. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  214. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  215. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  216. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  217. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  218. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  219. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  220. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  221. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  222. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  223. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  224. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  225. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  226. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  227. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  228. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  229. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  230. package/src/views/genericTable/ColumnConfiguratorDialog.js +771 -0
  231. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  232. package/src/views/genericTable/FormattingSettingsDialog.js +551 -0
  233. package/src/views/genericTable/ReportSettingsDialog.js +151 -0
  234. package/src/views/genericTable/SGrid.js +1061 -247
  235. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  236. package/src/views/genericTable/TAGGrid.js +83 -69
  237. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  238. package/src/views/genericTable/convertStringFunctions.js +336 -0
  239. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  240. package/src/views/genericTable/updateRefHelpers.js +424 -0
  241. package/src/views/printBuilder/PrintBuilderViewer.jsx +607 -0
  242. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  243. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +316 -0
  244. package/src/@core/components/auth/AclGuard.js +0 -55
  245. package/src/@core/components/auth/AuthGuard.js +0 -40
  246. package/src/@core/components/auth/GuestGuard.js +0 -30
  247. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  248. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  249. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  250. package/src/@core/components/customizer/index.jsx +0 -470
  251. package/src/@core/components/customizer/styles.module.css +0 -169
  252. package/src/@core/components/mui/Avatar.jsx +0 -41
  253. package/src/@core/components/mui/Badge.jsx +0 -20
  254. package/src/@core/components/mui/IconButton.jsx +0 -74
  255. package/src/@core/components/mui/TabList.jsx +0 -60
  256. package/src/@core/components/option-menu/index.jsx +0 -137
  257. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  258. package/src/@core/components/spinner/index.js +0 -26
  259. package/src/@core/components/window-wrapper/index.js +0 -27
  260. package/src/@core/contexts/settingsContext.jsx +0 -98
  261. package/src/@core/hooks/useBgColor.js +0 -63
  262. package/src/@core/hooks/useImageVariant.js +0 -27
  263. package/src/@core/hooks/useLayoutInit.js +0 -37
  264. package/src/@core/hooks/useObjectCookie.js +0 -18
  265. package/src/@core/hooks/useSettings.jsx +0 -15
  266. package/src/@core/layouts/BlankLayout.js +0 -37
  267. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  268. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  269. package/src/@core/layouts/Layout.js +0 -39
  270. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  271. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  272. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  273. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  274. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  275. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  276. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  277. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  278. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  279. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  280. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  281. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  282. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  283. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  284. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  285. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  286. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  287. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  288. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  289. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  290. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  291. package/src/@core/layouts/utils.js +0 -69
  292. package/src/@core/styles/Table.module.css +0 -93
  293. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  294. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  295. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  296. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  297. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  298. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  299. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  300. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  301. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  302. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  303. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  304. package/src/@core/styles/libs/recharts/index.js +0 -47
  305. package/src/@core/styles/stepper.js +0 -103
  306. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  307. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  308. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  309. package/src/@core/svg/ContentCompact.jsx +0 -17
  310. package/src/@core/svg/ContentWide.jsx +0 -17
  311. package/src/@core/svg/DirectionLtr.jsx +0 -93
  312. package/src/@core/svg/DirectionRtl.jsx +0 -93
  313. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  314. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  315. package/src/@core/svg/LayoutVertical.jsx +0 -59
  316. package/src/@core/svg/Logo.jsx +0 -76
  317. package/src/@core/svg/SkinBordered.jsx +0 -54
  318. package/src/@core/svg/SkinDefault.jsx +0 -59
  319. package/src/@core/tailwind/plugin.js +0 -78
  320. package/src/@core/theme/ThemeComponent.js +0 -63
  321. package/src/@core/theme/ThemeOptions.js +0 -71
  322. package/src/@core/theme/breakpoints/index.js +0 -11
  323. package/src/@core/theme/colorSchemes.js +0 -326
  324. package/src/@core/theme/customShadows.js +0 -11
  325. package/src/@core/theme/globalStyles.js +0 -81
  326. package/src/@core/theme/index.js +0 -42
  327. package/src/@core/theme/overrides/accordion.js +0 -51
  328. package/src/@core/theme/overrides/accordion.jsx +0 -85
  329. package/src/@core/theme/overrides/alerts.js +0 -110
  330. package/src/@core/theme/overrides/alerts.jsx +0 -180
  331. package/src/@core/theme/overrides/autocomplete.js +0 -14
  332. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  333. package/src/@core/theme/overrides/avatar.js +0 -38
  334. package/src/@core/theme/overrides/avatars.js +0 -27
  335. package/src/@core/theme/overrides/backdrop.js +0 -22
  336. package/src/@core/theme/overrides/badges.js +0 -16
  337. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  338. package/src/@core/theme/overrides/button-group.js +0 -84
  339. package/src/@core/theme/overrides/button.js +0 -93
  340. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  341. package/src/@core/theme/overrides/card.js +0 -83
  342. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  343. package/src/@core/theme/overrides/chip.js +0 -72
  344. package/src/@core/theme/overrides/dataGrid.js +0 -114
  345. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  346. package/src/@core/theme/overrides/dialog.js +0 -120
  347. package/src/@core/theme/overrides/divider.js +0 -13
  348. package/src/@core/theme/overrides/drawer.js +0 -20
  349. package/src/@core/theme/overrides/fab.js +0 -13
  350. package/src/@core/theme/overrides/form-control-label.js +0 -19
  351. package/src/@core/theme/overrides/icon-button.js +0 -145
  352. package/src/@core/theme/overrides/index.js +0 -103
  353. package/src/@core/theme/overrides/input.js +0 -72
  354. package/src/@core/theme/overrides/link.js +0 -9
  355. package/src/@core/theme/overrides/list.js +0 -44
  356. package/src/@core/theme/overrides/menu.js +0 -25
  357. package/src/@core/theme/overrides/pagination.js +0 -41
  358. package/src/@core/theme/overrides/paper.js +0 -9
  359. package/src/@core/theme/overrides/popover.js +0 -16
  360. package/src/@core/theme/overrides/progress.js +0 -38
  361. package/src/@core/theme/overrides/radio.jsx +0 -80
  362. package/src/@core/theme/overrides/rating.js +0 -16
  363. package/src/@core/theme/overrides/rating.jsx +0 -32
  364. package/src/@core/theme/overrides/select.js +0 -19
  365. package/src/@core/theme/overrides/select.jsx +0 -52
  366. package/src/@core/theme/overrides/slider.js +0 -97
  367. package/src/@core/theme/overrides/snackbar.js +0 -19
  368. package/src/@core/theme/overrides/switch.js +0 -73
  369. package/src/@core/theme/overrides/switches.js +0 -25
  370. package/src/@core/theme/overrides/table-pagination.js +0 -39
  371. package/src/@core/theme/overrides/table.js +0 -81
  372. package/src/@core/theme/overrides/tabs.js +0 -30
  373. package/src/@core/theme/overrides/timeline.js +0 -80
  374. package/src/@core/theme/overrides/toggle-button.js +0 -33
  375. package/src/@core/theme/overrides/toggleButton.js +0 -16
  376. package/src/@core/theme/overrides/tooltip.js +0 -21
  377. package/src/@core/theme/overrides/typography.js +0 -13
  378. package/src/@core/theme/palette/index.js +0 -107
  379. package/src/@core/theme/shadows/index.js +0 -61
  380. package/src/@core/theme/shadows.js +0 -12
  381. package/src/@core/theme/spacing/index.js +0 -3
  382. package/src/@core/theme/spacing.js +0 -5
  383. package/src/@core/theme/typography/index.js +0 -65
  384. package/src/@core/theme/typography.js +0 -84
  385. package/src/@core/utils/create-emotion-cache.js +0 -5
  386. package/src/@core/utils/hex-to-rgba.js +0 -11
  387. package/src/@core/utils/serverHelpers.js +0 -45
  388. package/src/@menu/components/RouterLink.jsx +0 -18
  389. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  390. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  391. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  392. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  393. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  394. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  395. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  396. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  397. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  398. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  399. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  400. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  401. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  402. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  403. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  404. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  405. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  406. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  407. package/src/@menu/defaultConfigs.js +0 -12
  408. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  409. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  410. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  411. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  412. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  413. package/src/@menu/horizontal-menu/index.jsx +0 -8
  414. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  415. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  416. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  417. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  418. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  419. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  420. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  421. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  422. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  423. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  424. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  425. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  426. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  427. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  428. package/src/@menu/styles/styles.module.css +0 -5
  429. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  430. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  431. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  432. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  433. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  434. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  435. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  436. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  437. package/src/@menu/svg/ChevronRight.jsx +0 -9
  438. package/src/@menu/svg/Close.jsx +0 -12
  439. package/src/@menu/svg/RadioCircle.jsx +0 -12
  440. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  441. package/src/@menu/utils/menuClasses.js +0 -44
  442. package/src/@menu/utils/menuUtils.jsx +0 -145
  443. package/src/@menu/vertical-menu/index.jsx +0 -11
  444. package/src/configs/acl.js +0 -115
  445. package/src/configs/auth.js +0 -5
  446. package/src/configs/aws-exports.js +0 -30
  447. package/src/configs/firebase.js +0 -25
  448. package/src/configs/i18n.js +0 -34
  449. package/src/configs/primaryColorConfig.js +0 -35
  450. package/src/configs/themeConfig.js +0 -44
  451. package/src/layouts/UserLayout.js +0 -94
  452. package/src/layouts/UserThemeOptions.js +0 -191
  453. package/src/layouts/components/Direction.js +0 -30
  454. package/src/layouts/components/HtmlTooltip.js +0 -15
  455. package/src/layouts/components/Translations.js +0 -11
  456. package/src/layouts/components/UserDropdown.js +0 -217
  457. package/src/layouts/components/UserIcon.js +0 -40
  458. package/src/layouts/components/acl/Can.js +0 -6
  459. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  460. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  461. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  462. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  463. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  464. package/src/layouts/components/mui/StepperComps.js +0 -55
  465. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  466. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  467. package/src/libs/ApexCharts.jsx +0 -5
  468. package/src/libs/ReactPlayer.jsx +0 -5
  469. package/src/libs/Recharts.jsx +0 -4
  470. package/src/libs/auth.js +0 -124
  471. package/src/libs/styles/AppFullCalendar.js +0 -505
  472. package/src/libs/styles/AppKeenSlider.js +0 -116
  473. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  474. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  475. package/src/libs/styles/AppReactDropzone.js +0 -76
  476. package/src/libs/styles/AppReactToastify.jsx +0 -108
  477. package/src/libs/styles/AppRecharts.js +0 -55
  478. package/src/libs/styles/inputOtp.module.css +0 -39
  479. package/src/libs/styles/tiptapEditor.css +0 -72
  480. package/src/navigation/horizontal/index.js +0 -246
  481. package/src/navigation/vertical/index.js +0 -253
  482. package/src/pages/401.js +0 -70
  483. package/src/pages/404.js +0 -67
  484. package/src/pages/500.js +0 -68
  485. package/src/pages/[slug].js +0 -115
  486. package/src/pages/_document.js +0 -72
  487. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  488. package/src/pages/api/navigation/save.js +0 -218
  489. package/src/pages/authModule/acl/index.js +0 -48
  490. package/src/pages/authModule/forgot-password/index.js +0 -228
  491. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  492. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  493. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  494. package/src/pages/authModule/privacy/index.js +0 -721
  495. package/src/pages/authModule/users/index.js +0 -210
  496. package/src/pages/login/index.js +0 -328
  497. package/src/pages/mainHome/index.js +0 -181
  498. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  499. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  500. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  501. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  502. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  503. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  504. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  505. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  506. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  507. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  508. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  509. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  510. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  511. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  512. package/src/views/pages/users/UserManageDialog.js +0 -283
  513. package/src/views/pages/users/UserViewPage.js +0 -199
  514. package/src/views/users/AddUserNameDialog.js +0 -162
  515. package/src/views/users/ContactManage.js +0 -449
  516. package/src/views/users/ResetPasswordDialog.js +0 -242
@@ -4,46 +4,47 @@ import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'
4
4
  import { TextField } from '@mui/material'
5
5
  import dayjs from 'dayjs'
6
6
  import ViewerComponentWrapper from '../ViewerComponentWrapper'
7
+ import FieldLabel from '../FieldLabel'
7
8
  import { resolveProps } from 'services/builderHelper/resolveProps'
9
+ import { runFieldAction } from 'services/builderHelper/actionExecutor'
8
10
 
9
11
  export default function TimePickerRenderer({ node, viewerContext }) {
10
12
  const { data, form, updateFormValue, validationErrors } = viewerContext
11
- const main = resolveProps(node, 'main', { form, data })
13
+ const main = resolveProps(node, 'main', viewerContext)
12
14
 
13
- // Get component key
14
15
  const key = node.props?.main?.key?.value || node.props?.main?.key || node.id
15
-
16
- // Get value from form state
17
16
  const value = form[key] || null
17
+ const error = validationErrors?.[key]
18
18
 
19
- // Get validation error
20
- const error = validationErrors[key]
19
+ const { label, labelPosition, required, helperText, ...pickerProps } = main
21
20
 
22
21
  const handleChange = (newValue) => {
23
- // Store as dayjs object or ISO string depending on preference
24
- updateFormValue(key, newValue ? newValue.toISOString() : null)
22
+ const iso = newValue ? newValue.toISOString() : null
23
+ updateFormValue(key, iso)
24
+ runFieldAction(node, viewerContext, 'onChange', iso)
25
25
  }
26
26
 
27
- // Convert value to dayjs if it exists
28
27
  const dayjsValue = value ? dayjs(value) : null
29
28
 
30
29
  return (
31
30
  <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
32
- <LocalizationProvider dateAdapter={AdapterDayjs}>
33
- <TimePicker
34
- {...main}
35
- value={dayjsValue}
36
- onChange={handleChange}
37
- renderInput={(params) => (
38
- <TextField
39
- {...params}
40
- fullWidth
41
- error={!!error}
42
- helperText={error || main.helperText}
43
- />
44
- )}
45
- />
46
- </LocalizationProvider>
31
+ <FieldLabel label={label} required={required} labelPosition={labelPosition} error={!!error}>
32
+ <LocalizationProvider dateAdapter={AdapterDayjs}>
33
+ <TimePicker
34
+ {...pickerProps}
35
+ value={dayjsValue}
36
+ onChange={handleChange}
37
+ renderInput={(params) => (
38
+ <TextField
39
+ {...params}
40
+ fullWidth
41
+ error={!!error}
42
+ helperText={error || helperText}
43
+ />
44
+ )}
45
+ />
46
+ </LocalizationProvider>
47
+ </FieldLabel>
47
48
  </ViewerComponentWrapper>
48
49
  )
49
50
  }
@@ -0,0 +1,525 @@
1
+ import { Box, Typography } from '@mui/material'
2
+ import ViewerComponentWrapper from '../ViewerComponentWrapper'
3
+ import { resolveProps, resolveValue } from 'services/builderHelper/resolveProps'
4
+ import { evaluateThreshold, resolveMuiColor } from 'services/builderHelper/thresholdEngine'
5
+ import { schemaColor, DEFAULT_PALETTE } from 'services/builderHelper/colorSchema'
6
+ import { formatNumber } from 'services/builderHelper/numberFormat'
7
+ import { runKpiAction } from 'services/builderHelper/actionExecutor'
8
+
9
+ // ── Status helpers ────────────────────────────────────────────────────────────
10
+
11
+ const DONE_STATUSES = new Set(['done', 'success', 'completed', 'approved', 'closed', 'resolved'])
12
+ const ACTIVE_STATUSES = new Set(['active', 'current', 'in-progress', 'inprogress', 'running', 'open'])
13
+ const WARNING_STATUSES = new Set(['warning', 'warn', 'at-risk', 'atrisk', 'delayed'])
14
+ const ERROR_STATUSES = new Set(['error', 'failed', 'rejected', 'cancelled', 'blocked'])
15
+ const PENDING_STATUSES = new Set(['pending', 'todo', 'future', 'upcoming', 'planned', 'not-started'])
16
+
17
+ function classifyStatus(s) {
18
+ const v = (s || '').toLowerCase()
19
+ if (DONE_STATUSES.has(v)) return 'done'
20
+ if (ACTIVE_STATUSES.has(v)) return 'active'
21
+ if (WARNING_STATUSES.has(v)) return 'warning'
22
+ if (ERROR_STATUSES.has(v)) return 'error'
23
+ if (PENDING_STATUSES.has(v)) return 'pending'
24
+ return 'default'
25
+ }
26
+
27
+ // Default color per status class
28
+ const CLASS_COLORS = {
29
+ done: '#4caf50',
30
+ active: '#1976d2',
31
+ warning: '#ff9800',
32
+ error: '#f44336',
33
+ pending: '#bdbdbd',
34
+ default: '#bdbdbd',
35
+ }
36
+
37
+ // Badge colors (bg / text)
38
+ const BADGE_STYLES = {
39
+ done: { bg: '#e8f5e9', color: '#2e7d32' },
40
+ active: { bg: '#e3f2fd', color: '#1565c0' },
41
+ warning: { bg: '#fff8e1', color: '#e65100' },
42
+ error: { bg: '#ffebee', color: '#c62828' },
43
+ pending: { bg: '#f5f5f5', color: '#757575' },
44
+ default: { bg: '#f5f5f5', color: '#757575' },
45
+ }
46
+
47
+ // ── Sample data ───────────────────────────────────────────────────────────────
48
+
49
+ const SAMPLE_EVENTS = [
50
+ {
51
+ label: 'Project kickoff',
52
+ date: 'Jan 12, 2025',
53
+ status: 'done',
54
+ description: 'Stakeholders aligned. Scope and budget finalized.',
55
+ value: '100%',
56
+ },
57
+ {
58
+ label: 'Design review',
59
+ date: 'Jan 28, 2025',
60
+ status: 'done',
61
+ description: 'UI/UX designs approved by product team.',
62
+ value: '100%',
63
+ },
64
+ {
65
+ label: 'Development sprint',
66
+ date: 'Feb 10, 2025',
67
+ status: 'active',
68
+ description: 'Backend APIs complete. Frontend 60% done.',
69
+ value: '60%',
70
+ },
71
+ {
72
+ label: 'QA & testing',
73
+ date: 'Feb 24, 2025',
74
+ status: 'pending',
75
+ description: 'Regression suite and UAT sessions planned.',
76
+ value: '—',
77
+ },
78
+ {
79
+ label: 'Production release',
80
+ date: 'Mar 5, 2025',
81
+ status: 'pending',
82
+ description: '',
83
+ value: '—',
84
+ },
85
+ ]
86
+
87
+ // ── Dot component ─────────────────────────────────────────────────────────────
88
+
89
+ function TimelineDot({ sz, color, statusClass, dotStyle, icon }) {
90
+ const isPending = statusClass === 'pending' || dotStyle === 'ring'
91
+ const isDone = statusClass === 'done'
92
+ const isActive = statusClass === 'active'
93
+ const isWarning = statusClass === 'warning'
94
+ const isError = statusClass === 'error'
95
+ const isAuto = !dotStyle || dotStyle === 'auto'
96
+
97
+ // Inner glyph
98
+ const glyph = icon
99
+ ? icon
100
+ : isAuto
101
+ ? (isDone ? '✓' : isError ? '✕' : isWarning ? '!' : null)
102
+ : null
103
+
104
+ const useRing = isAuto ? isPending : dotStyle === 'ring'
105
+
106
+ return (
107
+ <Box sx={{ position: 'relative', flexShrink: 0 }}>
108
+ {/* Pulse ring for active */}
109
+ {isActive && (
110
+ <Box sx={{
111
+ position: 'absolute',
112
+ inset: -4,
113
+ borderRadius: '50%',
114
+ border: `2px solid ${color}`,
115
+ opacity: 0.35,
116
+ animation: 'none',
117
+ }} />
118
+ )}
119
+ <Box sx={{
120
+ width: sz,
121
+ height: sz,
122
+ borderRadius: '50%',
123
+ bgcolor: useRing ? 'transparent' : color,
124
+ border: useRing ? `2px solid ${color}` : 'none',
125
+ display: 'flex',
126
+ alignItems: 'center',
127
+ justifyContent: 'center',
128
+ flexShrink: 0,
129
+ boxShadow: isActive ? `0 0 0 3px ${color}28` : 'none',
130
+ transition: 'all .2s',
131
+ }}>
132
+ {glyph && (
133
+ <Typography sx={{
134
+ fontSize: Math.max(8, sz * 0.52),
135
+ color: useRing ? color : '#fff',
136
+ fontWeight: 800,
137
+ lineHeight: 1,
138
+ userSelect: 'none',
139
+ }}>
140
+ {glyph}
141
+ </Typography>
142
+ )}
143
+ </Box>
144
+ </Box>
145
+ )
146
+ }
147
+
148
+ // ── Connector line ────────────────────────────────────────────────────────────
149
+
150
+ function Connector({ lineColor, lineWidth, lineStyle, filled, filledColor }) {
151
+ return (
152
+ <Box sx={{
153
+ flex: 1,
154
+ width: lineWidth,
155
+ minHeight: 16,
156
+ mx: 'auto',
157
+ my: '3px',
158
+ borderLeft: `${lineWidth}px ${lineStyle} ${filled ? filledColor : lineColor}`,
159
+ opacity: filled ? 0.9 : 0.45,
160
+ }} />
161
+ )
162
+ }
163
+
164
+ // ── Badge pill ────────────────────────────────────────────────────────────────
165
+
166
+ function StatusBadge({ text, statusClass, fontSize }) {
167
+ const { bg, color } = BADGE_STYLES[statusClass] ?? BADGE_STYLES.default
168
+ return (
169
+ <Box sx={{
170
+ display: 'inline-flex',
171
+ alignItems: 'center',
172
+ px: 0.75,
173
+ py: '1px',
174
+ borderRadius: 10,
175
+ bgcolor: bg,
176
+ flexShrink: 0,
177
+ }}>
178
+ <Typography sx={{ fontSize: fontSize ?? 10, fontWeight: 600, color, lineHeight: 1.6, textTransform: 'capitalize' }}>
179
+ {text}
180
+ </Typography>
181
+ </Box>
182
+ )
183
+ }
184
+
185
+ // ── Content card ──────────────────────────────────────────────────────────────
186
+
187
+ function EventContent({ item, labelField, dateField, descField, statusField, valueField,
188
+ showDate, showBadge, showValue, density, dotColor, statusClass, format, prefix, suffix }) {
189
+
190
+ const label = item[labelField] ?? '—'
191
+ const date = item[dateField]
192
+ const desc = item[descField]
193
+ const status = item[statusField]
194
+ const value = valueField ? item[valueField] : null
195
+
196
+ const titleSz = density === 'compact' ? 12 : 13
197
+ const descSz = density === 'compact' ? 11 : 12
198
+ const dateSz = density === 'compact' ? 10 : 11
199
+
200
+ const formattedValue = value != null && typeof value === 'number'
201
+ ? formatNumber(value, { format, prefix, suffix })
202
+ : value
203
+
204
+ return (
205
+ <Box sx={{ flex: 1, minWidth: 0 }}>
206
+ {/* Title row */}
207
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.75, flexWrap: 'wrap' }}>
208
+ <Typography sx={{ fontSize: titleSz, fontWeight: 600, color: 'text.primary', lineHeight: 1.35 }}>
209
+ {label}
210
+ </Typography>
211
+ {showBadge && status && (
212
+ <StatusBadge text={status} statusClass={statusClass} fontSize={dateSz - 1} />
213
+ )}
214
+ {showValue && formattedValue != null && (
215
+ <Box sx={{ ml: 'auto', flexShrink: 0 }}>
216
+ <Typography sx={{ fontSize: dateSz, fontWeight: 700, color: dotColor }}>
217
+ {formattedValue}
218
+ </Typography>
219
+ </Box>
220
+ )}
221
+ </Box>
222
+
223
+ {/* Date */}
224
+ {showDate && date && (
225
+ <Typography sx={{ fontSize: dateSz, color: 'text.disabled', mt: 0.15, lineHeight: 1.3 }}>
226
+ {date}
227
+ </Typography>
228
+ )}
229
+
230
+ {/* Description */}
231
+ {desc && (
232
+ <Typography sx={{ fontSize: descSz, color: 'text.secondary', mt: 0.35, lineHeight: 1.45 }}>
233
+ {desc}
234
+ </Typography>
235
+ )}
236
+ </Box>
237
+ )
238
+ }
239
+
240
+ // ── Main renderer ─────────────────────────────────────────────────────────────
241
+
242
+ export default function TimelineRenderer({ node, viewerContext }) {
243
+ const main = resolveProps(node, 'main', viewerContext)
244
+ const { data, isEditMode } = viewerContext ?? {}
245
+ const inBuilder = isEditMode !== false
246
+
247
+ const {
248
+ // data
249
+ dataKey,
250
+ labelField = 'label',
251
+ dateField = 'date',
252
+ statusField = 'status',
253
+ descField = 'description',
254
+ valueField,
255
+ iconField,
256
+
257
+ // coloring
258
+ colorSchema,
259
+ thresholds = [],
260
+ colorMap = {},
261
+ defaultColor = '#bdbdbd',
262
+
263
+ // layout
264
+ layout = 'left', // 'left' | 'right' | 'alternate'
265
+ density = 'comfortable', // 'comfortable' | 'compact'
266
+ maxItems,
267
+
268
+ // dot
269
+ dotSize = 10,
270
+ dotStyle = 'auto', // 'auto' | 'filled' | 'ring'
271
+
272
+ // connector line
273
+ lineColor = '#e0e0e0',
274
+ lineWidth = 2,
275
+ lineStyle = 'solid', // 'solid' | 'dashed'
276
+ filledLine = true, // done→done transitions show colored line
277
+
278
+ // active item indicator
279
+ activeKey, // data key whose value identifies the active item
280
+ activeField, // field on each item to match against activeKey value
281
+ activeColor = '#1976d2', // highlight color for active card
282
+ showActiveLine = true, // draw left accent bar on active item
283
+
284
+ // display toggles
285
+ showDate = true,
286
+ showBadge = false,
287
+ showValue = false,
288
+
289
+ // format (for valueField if numeric)
290
+ format = 'number',
291
+ prefix = '',
292
+ suffix = '',
293
+ } = main
294
+
295
+ // Resolve active item identifier
296
+ const activeMatchValue = resolveValue(activeKey, data)
297
+
298
+ const rawItems = resolveValue(dataKey, data) ?? []
299
+ const sourceItems = Array.isArray(rawItems)
300
+ ? (maxItems ? rawItems.slice(0, Number(maxItems)) : rawItems)
301
+ : []
302
+ const items = (inBuilder && sourceItems.length === 0) ? SAMPLE_EVENTS : sourceItems
303
+
304
+ if (!inBuilder && items.length === 0) return null
305
+
306
+ const sz = Math.max(6, Number(dotSize) || 10)
307
+ const lw = Math.max(1, Number(lineWidth) || 2)
308
+
309
+ // Determine whether an item is "active" via activeKey/activeField binding,
310
+ // falling back to status classification when no explicit binding is set.
311
+ const isItemActive = (item) => {
312
+ if (activeMatchValue != null && activeField) {
313
+ return String(item[activeField]) === String(activeMatchValue)
314
+ }
315
+ if (activeMatchValue != null) {
316
+ // Match against label or id field if no activeField specified
317
+ return String(item['id'] ?? item[labelField] ?? '') === String(activeMatchValue)
318
+ }
319
+ // Fallback: treat status 'active'/'current' items as active
320
+ return classifyStatus(item[statusField]) === 'active'
321
+ }
322
+
323
+ // Safe-parse colorMap — it may arrive as a JSON string from expression fields
324
+ const safeColorMap = typeof colorMap === 'string'
325
+ ? (() => { try { return JSON.parse(colorMap) } catch { return {} } })()
326
+ : (colorMap && typeof colorMap === 'object' ? colorMap : {})
327
+
328
+ const resolveColor = (item, index) => {
329
+ const status = item[statusField]
330
+
331
+ // 1. Explicit colorMap override (e.g. {"done":"#4caf50","pending":"warning"})
332
+ if (status && safeColorMap[status]) return resolveMuiColor(safeColorMap[status]).color
333
+
334
+ // 2. colorSchema takes priority when explicitly configured
335
+ if (colorSchema?.mode) {
336
+ const c = schemaColor(colorSchema, index, item['color'] || null, items.length, DEFAULT_PALETTE)
337
+ if (c) return c
338
+ }
339
+
340
+ // 3. Thresholds — only meaningful for numeric statuses (avoid Number('done') === 0 false-match)
341
+ const numericStatus = status !== '' && status != null && !isNaN(Number(status))
342
+ if (numericStatus && thresholds?.length) {
343
+ const rule = evaluateThreshold(Number(status), thresholds)
344
+ if (rule) return resolveMuiColor(rule.color).color
345
+ }
346
+
347
+ // 4. Built-in semantic class colors
348
+ const cls = classifyStatus(status)
349
+ if (cls !== 'default') return CLASS_COLORS[cls]
350
+
351
+ // 5. Fallback — schema (no mode set) → item color field → defaultColor
352
+ return schemaColor(colorSchema, index, item['color'] || null, items.length, DEFAULT_PALETTE) ?? defaultColor
353
+ }
354
+
355
+ // ── Click action ─────────────────────────────────────────────────────────────
356
+ const hasClickAction = !!node.props?.actions?.onItemClick?.code
357
+ const handleItemClick = (item, index) => {
358
+ runKpiAction(node, viewerContext, 'onItemClick', {
359
+ clickedItem: item,
360
+ clickedIndex: index,
361
+ clickedLabel: item[labelField],
362
+ clickedStatus: item[statusField],
363
+ clickedValue: valueField ? item[valueField] : undefined,
364
+ })
365
+ }
366
+
367
+ // ── Item row renderer (shared for left/right) ────────────────────────────
368
+ const itemGap = density === 'compact' ? 1 : 1.5
369
+ const itemPb = density === 'compact' ? 0.75 : 1.5
370
+
371
+ const renderItem = (item, i, side = 'left') => {
372
+ const isLast = i === items.length - 1
373
+ const dotColor = resolveColor(item, i)
374
+ const statusClass = classifyStatus(item[statusField])
375
+ const icon = iconField ? item[iconField] : null
376
+ const active = isItemActive(item)
377
+
378
+ const nextItem = items[i + 1]
379
+ const nextDone = nextItem ? classifyStatus(nextItem[statusField]) === 'done' : false
380
+ const lineIsFilled = filledLine && statusClass === 'done' && nextDone
381
+
382
+ const contentProps = {
383
+ item, labelField, dateField, descField, statusField, valueField,
384
+ showDate, showBadge, showValue, density,
385
+ dotColor: active ? activeColor : dotColor,
386
+ statusClass, format, prefix, suffix,
387
+ }
388
+
389
+ const dotCol = (
390
+ <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', flexShrink: 0, width: sz }}>
391
+ <TimelineDot
392
+ sz={sz}
393
+ color={active ? activeColor : dotColor}
394
+ statusClass={statusClass} dotStyle={dotStyle} icon={icon}
395
+ />
396
+ {!isLast && (
397
+ <Connector
398
+ lineColor={lineColor} lineWidth={lw} lineStyle={lineStyle}
399
+ filled={lineIsFilled} filledColor={dotColor}
400
+ />
401
+ )}
402
+ </Box>
403
+ )
404
+
405
+ // Active card: subtle highlighted background + left accent bar
406
+ const contentCol = (
407
+ <Box
408
+ onClick={hasClickAction ? () => handleItemClick(item, i) : undefined}
409
+ sx={{
410
+ pb: isLast ? 0 : itemPb,
411
+ flex: 1,
412
+ minWidth: 0,
413
+ cursor: hasClickAction ? 'pointer' : 'default',
414
+ borderRadius: 1,
415
+ transition: 'background .15s',
416
+ ...(hasClickAction && { '&:hover': { bgcolor: 'action.hover' } }),
417
+ ...(active && {
418
+ bgcolor: `${activeColor}0d`,
419
+ borderLeft: showActiveLine ? `3px solid ${activeColor}` : 'none',
420
+ pl: showActiveLine ? 1 : 0,
421
+ pr: 0.75,
422
+ py: 0.5,
423
+ mb: isLast ? 0 : itemPb * 0.5,
424
+ }),
425
+ }}
426
+ >
427
+ <EventContent {...contentProps} />
428
+ </Box>
429
+ )
430
+
431
+ if (side === 'right') {
432
+ return (
433
+ <Box key={i} sx={{ display: 'flex', gap: itemGap, flexDirection: 'row-reverse' }}>
434
+ {dotCol}
435
+ {contentCol}
436
+ </Box>
437
+ )
438
+ }
439
+
440
+ return (
441
+ <Box key={i} sx={{ display: 'flex', gap: itemGap }}>
442
+ {dotCol}
443
+ {contentCol}
444
+ </Box>
445
+ )
446
+ }
447
+
448
+ // ── Alternate layout ─────────────────────────────────────────────────────
449
+ if (layout === 'alternate') {
450
+ return (
451
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
452
+ <Box>
453
+ {items.map((item, i) => {
454
+ const isLast = i === items.length - 1
455
+ const dotColor = resolveColor(item, i)
456
+ const statusClass = classifyStatus(item[statusField])
457
+ const icon = iconField ? item[iconField] : null
458
+ const isEven = i % 2 === 0
459
+ const active = isItemActive(item)
460
+
461
+ const nextItem = items[i + 1]
462
+ const nextDone = nextItem ? classifyStatus(nextItem[statusField]) === 'done' : false
463
+ const lineIsFilled = filledLine && statusClass === 'done' && nextDone
464
+
465
+ const effectiveColor = active ? activeColor : dotColor
466
+ const contentProps = {
467
+ item, labelField, dateField, descField, statusField, valueField,
468
+ showDate, showBadge, showValue, density,
469
+ dotColor: effectiveColor, statusClass,
470
+ format, prefix, suffix,
471
+ }
472
+
473
+ const activeSx = active ? {
474
+ bgcolor: `${activeColor}0d`, borderRadius: 1, px: 0.75, py: 0.5,
475
+ } : {}
476
+ const clickSx = hasClickAction ? {
477
+ cursor: 'pointer', transition: 'background .15s',
478
+ '&:hover': { bgcolor: 'action.hover' },
479
+ } : {}
480
+
481
+ return (
482
+ <Box key={i} sx={{ display: 'flex', gap: 1.5, alignItems: 'flex-start' }}>
483
+ {/* Left content (even items) */}
484
+ <Box
485
+ onClick={hasClickAction && isEven ? () => handleItemClick(item, i) : undefined}
486
+ sx={{ flex: 1, pb: isLast ? 0 : itemPb, textAlign: 'right', minWidth: 0, ...activeSx, ...(isEven && clickSx) }}
487
+ >
488
+ {isEven && <EventContent {...contentProps} />}
489
+ </Box>
490
+
491
+ {/* Center spine */}
492
+ <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center', flexShrink: 0, width: sz }}>
493
+ <TimelineDot sz={sz} color={effectiveColor} statusClass={statusClass} dotStyle={dotStyle} icon={icon} />
494
+ {!isLast && (
495
+ <Connector
496
+ lineColor={lineColor} lineWidth={lw} lineStyle={lineStyle}
497
+ filled={lineIsFilled} filledColor={dotColor}
498
+ />
499
+ )}
500
+ </Box>
501
+
502
+ {/* Right content (odd items) */}
503
+ <Box
504
+ onClick={hasClickAction && !isEven ? () => handleItemClick(item, i) : undefined}
505
+ sx={{ flex: 1, pb: isLast ? 0 : itemPb, minWidth: 0, ...activeSx, ...(!isEven && clickSx) }}
506
+ >
507
+ {!isEven && <EventContent {...contentProps} />}
508
+ </Box>
509
+ </Box>
510
+ )
511
+ })}
512
+ </Box>
513
+ </ViewerComponentWrapper>
514
+ )
515
+ }
516
+
517
+ // ── Left / Right layout ──────────────────────────────────────────────────
518
+ return (
519
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
520
+ <Box>
521
+ {items.map((item, i) => renderItem(item, i, layout === 'right' ? 'right' : 'left'))}
522
+ </Box>
523
+ </ViewerComponentWrapper>
524
+ )
525
+ }
@@ -1,46 +1,40 @@
1
1
  import { FormControlLabel, Switch, FormHelperText, Box } from '@mui/material'
2
2
  import ViewerComponentWrapper from '../ViewerComponentWrapper'
3
+ import FieldLabel from '../FieldLabel'
3
4
  import { resolveProps } from 'services/builderHelper/resolveProps'
5
+ import { runFieldAction } from 'services/builderHelper/actionExecutor'
4
6
 
5
7
  export default function ToggleRenderer({ node, viewerContext }) {
6
8
  const { data, form, updateFormValue, validationErrors } = viewerContext
7
- const main = resolveProps(node, 'main', { form, data })
9
+ const main = resolveProps(node, 'main', viewerContext)
8
10
 
9
- // Get component key
10
11
  const key = node.props?.main?.key?.value || node.props?.main?.key || node.id
11
-
12
- // Get value from form state (boolean)
13
12
  const value = form[key] || false
13
+ const error = validationErrors?.[key]
14
14
 
15
- // Get validation error
16
- const error = validationErrors[key]
15
+ const { label, labelPosition, required, helperText, size, color, disabled } = main
17
16
 
18
- const handleChange = (e) => {
17
+ const handleChange = e => {
19
18
  updateFormValue(key, e.target.checked)
19
+ runFieldAction(node, viewerContext, 'onChange', e.target.checked)
20
20
  }
21
21
 
22
22
  return (
23
23
  <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
24
- <Box>
25
- <FormControlLabel
26
- control={
27
- <Switch
28
- checked={Boolean(value)}
29
- onChange={handleChange}
30
- disabled={main.disabled}
31
- size={main.size}
32
- color={main.color || 'primary'}
33
- />
34
- }
35
- label={main.label || ''}
36
- labelPlacement={main.labelPlacement || 'end'}
37
- />
38
- {(error || main.helperText) && (
39
- <FormHelperText error={!!error}>
40
- {error || main.helperText}
41
- </FormHelperText>
42
- )}
43
- </Box>
24
+ <FieldLabel label={label} required={required} labelPosition={labelPosition} error={!!error}>
25
+ <Box>
26
+ <Switch
27
+ checked={Boolean(value)}
28
+ onChange={handleChange}
29
+ disabled={disabled}
30
+ size={size}
31
+ color={color || 'primary'}
32
+ />
33
+ {(error || helperText) && (
34
+ <FormHelperText error={!!error}>{error || helperText}</FormHelperText>
35
+ )}
36
+ </Box>
37
+ </FieldLabel>
44
38
  </ViewerComponentWrapper>
45
39
  )
46
40
  }