robobyte-front-builder 1.0.19 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/INTEGRATION.md +1586 -0
  2. package/README.md +928 -0
  3. package/RoboByteBuilder_User_Manual.docx +0 -0
  4. package/next.config.js +19 -48
  5. package/package.json +42 -86
  6. package/src/context/BuilderContext.jsx +191 -7
  7. package/src/context/SystemContext.js +2 -2
  8. package/src/hooks/useGlobalStore.js +36 -0
  9. package/src/hooks/useTimerEngine.js +54 -0
  10. package/src/lib/index.js +11 -3
  11. package/src/lib/layouts/BlankLayout.jsx +13 -0
  12. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +61 -7
  13. package/src/lib/themes/builderTheme.js +41 -0
  14. package/src/pages/_app.js +32 -134
  15. package/src/pages/api/ai.js +107 -0
  16. package/src/pages/builders/report/index.js +1 -0
  17. package/src/pages/builders/report/list/index.js +1 -0
  18. package/src/pages/builders/report/viewer/index.js +1 -0
  19. package/src/pages/index.js +88 -37
  20. package/src/pages/printBuilder/index.jsx +263 -0
  21. package/src/pages/printBuilder/layouts/index.jsx +298 -0
  22. package/src/pages/reportModule/reportBuilder/index.js +8 -6
  23. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +92 -25
  24. package/src/pages/reportModule/reportBuilder/reports/index.js +3 -5
  25. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +2 -3
  26. package/src/pages/viewBuilder/index.jsx +117 -32
  27. package/src/pages/viewBuilder/views/index.js +3 -3
  28. package/src/pages/viewer/[id]/index.js +2 -1
  29. package/src/services/DeleteService.js +31 -60
  30. package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
  31. package/src/services/Endpoints/ReportBuilderEndpoints.js +7 -7
  32. package/src/services/Endpoints.js +2 -0
  33. package/src/services/GetService.js +33 -54
  34. package/src/services/PatchService.js +38 -65
  35. package/src/services/PostService.js +37 -63
  36. package/src/services/UpdateService.js +39 -65
  37. package/src/services/builderHelper/actionExecutor.js +141 -25
  38. package/src/services/builderHelper/builderHelper.js +92 -0
  39. package/src/services/builderHelper/colorSchema.js +95 -0
  40. package/src/services/builderHelper/iconResolver.js +50 -0
  41. package/src/services/builderHelper/jsExecutor.js +212 -46
  42. package/src/services/builderHelper/nodeFactory.js +32 -15
  43. package/src/services/builderHelper/numberFormat.js +123 -0
  44. package/src/services/builderHelper/resolveProps.js +73 -4
  45. package/src/services/builderHelper/thresholdEngine.js +77 -0
  46. package/src/services/builderHelper/tree.js +31 -0
  47. package/src/services/components/agGridAutoComplete.js +5 -9
  48. package/src/services/config.js +9 -1
  49. package/src/services/globalStore.js +80 -0
  50. package/src/services/helper/multiSelectEditor.js +5 -9
  51. package/src/services/helper/multiSelectEditorByBuilder.js +5 -9
  52. package/src/services/reportData/fetchReportData.js +69 -28
  53. package/src/services/routerRef.js +35 -0
  54. package/src/services/sessionLog.js +171 -0
  55. package/src/views/ConfirmDialog.js +2 -2
  56. package/src/views/builder/JSEditor.js +105 -107
  57. package/src/views/builder/SessionLogDialog.jsx +350 -0
  58. package/src/views/builder/UnsavedChangesGuard.jsx +103 -0
  59. package/src/views/builder/inspector/Inspector.jsx +6 -9
  60. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  61. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  62. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  63. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  64. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  65. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  66. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  67. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  68. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  69. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  70. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  71. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  72. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  73. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  74. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  75. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  76. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  77. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  78. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  79. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  80. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  81. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  82. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  83. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  84. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  85. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  86. package/src/views/builder/inspector/definitions/index.js +106 -19
  87. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  88. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  89. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  90. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  91. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  92. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  93. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  94. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  95. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  96. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  97. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  98. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  99. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  100. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  101. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  102. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  103. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  104. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  105. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  106. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  107. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  108. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  109. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  110. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  111. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  112. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  113. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  114. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  115. package/src/views/builder/inspector/definitions/reportViewer/main.js +28 -1
  116. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  117. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  118. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  119. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  120. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  121. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  122. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  123. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  124. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  125. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  126. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  127. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  128. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  129. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  130. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  131. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  132. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  133. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  134. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  135. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  136. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  137. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  138. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  139. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  140. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  141. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  142. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  143. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  144. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  145. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  146. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  147. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  148. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +53 -0
  149. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  150. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +167 -0
  151. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  152. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  153. package/src/views/builder/sidebar/tabs/AiTab/trainingExport.js +131 -0
  154. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  155. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  156. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  157. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  158. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  159. package/src/views/builder/sidebar/tabs/ViewTab.jsx +173 -13
  160. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  161. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  162. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  163. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  164. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  165. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  166. package/src/views/builder/viewer/Viewer.jsx +106 -8
  167. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +70 -9
  168. package/src/views/builder/viewer/ViewerToolbar.jsx +285 -56
  169. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  170. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  171. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  172. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  173. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  174. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  175. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  176. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  177. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  178. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  179. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  180. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  181. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  182. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  183. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  184. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  185. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  186. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  187. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  188. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  189. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  190. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  191. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  192. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  193. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  194. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  195. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  196. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  197. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  198. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  199. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  200. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  201. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  202. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  204. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  205. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  206. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  207. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  208. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  209. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  210. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  211. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  212. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  213. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +263 -5
  214. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  215. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  216. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  217. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  218. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  219. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  220. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  221. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  222. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  223. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  224. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  225. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  226. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  227. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  228. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  229. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  230. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  231. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  232. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  233. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  234. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  235. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  236. package/src/views/genericTable/ColumnConfiguratorDialog.js +33 -24
  237. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  238. package/src/views/genericTable/FormattingSettingsDialog.js +8 -3
  239. package/src/views/genericTable/SGrid.js +821 -448
  240. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  241. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  242. package/src/views/genericTable/convertStringFunctions.js +274 -138
  243. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  244. package/src/views/genericTable/updateRefHelpers.js +9 -6
  245. package/src/views/printBuilder/PrintBuilderViewer.jsx +627 -0
  246. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  247. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +3 -2
  248. package/src/@core/components/auth/AclGuard.js +0 -55
  249. package/src/@core/components/auth/AuthGuard.js +0 -40
  250. package/src/@core/components/auth/GuestGuard.js +0 -30
  251. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  252. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  253. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  254. package/src/@core/components/customizer/index.jsx +0 -470
  255. package/src/@core/components/customizer/styles.module.css +0 -169
  256. package/src/@core/components/mui/Avatar.jsx +0 -41
  257. package/src/@core/components/mui/Badge.jsx +0 -20
  258. package/src/@core/components/mui/IconButton.jsx +0 -74
  259. package/src/@core/components/mui/TabList.jsx +0 -60
  260. package/src/@core/components/option-menu/index.jsx +0 -137
  261. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  262. package/src/@core/components/spinner/index.js +0 -26
  263. package/src/@core/components/window-wrapper/index.js +0 -27
  264. package/src/@core/contexts/settingsContext.jsx +0 -98
  265. package/src/@core/hooks/useBgColor.js +0 -63
  266. package/src/@core/hooks/useImageVariant.js +0 -27
  267. package/src/@core/hooks/useLayoutInit.js +0 -37
  268. package/src/@core/hooks/useObjectCookie.js +0 -18
  269. package/src/@core/hooks/useSettings.jsx +0 -15
  270. package/src/@core/layouts/BlankLayout.js +0 -37
  271. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  272. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  273. package/src/@core/layouts/Layout.js +0 -39
  274. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  275. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  276. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  277. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  278. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  279. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  280. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  281. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  282. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  283. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  284. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  285. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  286. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  287. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  288. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  289. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  290. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  291. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  292. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  293. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  294. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  295. package/src/@core/layouts/utils.js +0 -69
  296. package/src/@core/styles/Table.module.css +0 -93
  297. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  298. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  299. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  300. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  301. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  302. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  303. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  304. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  305. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  306. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  307. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  308. package/src/@core/styles/libs/recharts/index.js +0 -47
  309. package/src/@core/styles/stepper.js +0 -103
  310. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  311. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  312. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  313. package/src/@core/svg/ContentCompact.jsx +0 -17
  314. package/src/@core/svg/ContentWide.jsx +0 -17
  315. package/src/@core/svg/DirectionLtr.jsx +0 -93
  316. package/src/@core/svg/DirectionRtl.jsx +0 -93
  317. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  318. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  319. package/src/@core/svg/LayoutVertical.jsx +0 -59
  320. package/src/@core/svg/Logo.jsx +0 -76
  321. package/src/@core/svg/SkinBordered.jsx +0 -54
  322. package/src/@core/svg/SkinDefault.jsx +0 -59
  323. package/src/@core/tailwind/plugin.js +0 -78
  324. package/src/@core/theme/ThemeComponent.js +0 -63
  325. package/src/@core/theme/ThemeOptions.js +0 -71
  326. package/src/@core/theme/breakpoints/index.js +0 -11
  327. package/src/@core/theme/colorSchemes.js +0 -326
  328. package/src/@core/theme/customShadows.js +0 -11
  329. package/src/@core/theme/globalStyles.js +0 -81
  330. package/src/@core/theme/index.js +0 -42
  331. package/src/@core/theme/overrides/accordion.js +0 -51
  332. package/src/@core/theme/overrides/accordion.jsx +0 -85
  333. package/src/@core/theme/overrides/alerts.js +0 -110
  334. package/src/@core/theme/overrides/alerts.jsx +0 -180
  335. package/src/@core/theme/overrides/autocomplete.js +0 -14
  336. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  337. package/src/@core/theme/overrides/avatar.js +0 -38
  338. package/src/@core/theme/overrides/avatars.js +0 -27
  339. package/src/@core/theme/overrides/backdrop.js +0 -22
  340. package/src/@core/theme/overrides/badges.js +0 -16
  341. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  342. package/src/@core/theme/overrides/button-group.js +0 -84
  343. package/src/@core/theme/overrides/button.js +0 -93
  344. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  345. package/src/@core/theme/overrides/card.js +0 -83
  346. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  347. package/src/@core/theme/overrides/chip.js +0 -72
  348. package/src/@core/theme/overrides/dataGrid.js +0 -114
  349. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  350. package/src/@core/theme/overrides/dialog.js +0 -120
  351. package/src/@core/theme/overrides/divider.js +0 -13
  352. package/src/@core/theme/overrides/drawer.js +0 -20
  353. package/src/@core/theme/overrides/fab.js +0 -13
  354. package/src/@core/theme/overrides/form-control-label.js +0 -19
  355. package/src/@core/theme/overrides/icon-button.js +0 -145
  356. package/src/@core/theme/overrides/index.js +0 -103
  357. package/src/@core/theme/overrides/input.js +0 -72
  358. package/src/@core/theme/overrides/link.js +0 -9
  359. package/src/@core/theme/overrides/list.js +0 -44
  360. package/src/@core/theme/overrides/menu.js +0 -25
  361. package/src/@core/theme/overrides/pagination.js +0 -41
  362. package/src/@core/theme/overrides/paper.js +0 -9
  363. package/src/@core/theme/overrides/popover.js +0 -16
  364. package/src/@core/theme/overrides/progress.js +0 -38
  365. package/src/@core/theme/overrides/radio.jsx +0 -80
  366. package/src/@core/theme/overrides/rating.js +0 -16
  367. package/src/@core/theme/overrides/rating.jsx +0 -32
  368. package/src/@core/theme/overrides/select.js +0 -19
  369. package/src/@core/theme/overrides/select.jsx +0 -52
  370. package/src/@core/theme/overrides/slider.js +0 -97
  371. package/src/@core/theme/overrides/snackbar.js +0 -19
  372. package/src/@core/theme/overrides/switch.js +0 -73
  373. package/src/@core/theme/overrides/switches.js +0 -25
  374. package/src/@core/theme/overrides/table-pagination.js +0 -39
  375. package/src/@core/theme/overrides/table.js +0 -81
  376. package/src/@core/theme/overrides/tabs.js +0 -30
  377. package/src/@core/theme/overrides/timeline.js +0 -80
  378. package/src/@core/theme/overrides/toggle-button.js +0 -33
  379. package/src/@core/theme/overrides/toggleButton.js +0 -16
  380. package/src/@core/theme/overrides/tooltip.js +0 -21
  381. package/src/@core/theme/overrides/typography.js +0 -13
  382. package/src/@core/theme/palette/index.js +0 -107
  383. package/src/@core/theme/shadows/index.js +0 -61
  384. package/src/@core/theme/shadows.js +0 -12
  385. package/src/@core/theme/spacing/index.js +0 -3
  386. package/src/@core/theme/spacing.js +0 -5
  387. package/src/@core/theme/typography/index.js +0 -65
  388. package/src/@core/theme/typography.js +0 -84
  389. package/src/@core/utils/create-emotion-cache.js +0 -5
  390. package/src/@core/utils/hex-to-rgba.js +0 -11
  391. package/src/@core/utils/serverHelpers.js +0 -45
  392. package/src/@menu/components/RouterLink.jsx +0 -18
  393. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  394. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  395. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  396. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  397. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  398. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  399. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  400. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  401. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  402. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  403. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  404. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  405. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  406. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  407. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  408. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  409. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  410. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  411. package/src/@menu/defaultConfigs.js +0 -12
  412. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  413. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  414. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  415. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  416. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  417. package/src/@menu/horizontal-menu/index.jsx +0 -8
  418. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  419. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  420. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  421. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  422. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  423. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  424. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  425. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  426. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  427. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  428. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  429. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  430. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  431. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  432. package/src/@menu/styles/styles.module.css +0 -5
  433. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  434. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  435. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  436. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  437. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  438. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  439. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  440. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  441. package/src/@menu/svg/ChevronRight.jsx +0 -9
  442. package/src/@menu/svg/Close.jsx +0 -12
  443. package/src/@menu/svg/RadioCircle.jsx +0 -12
  444. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  445. package/src/@menu/utils/menuClasses.js +0 -44
  446. package/src/@menu/utils/menuUtils.jsx +0 -145
  447. package/src/@menu/vertical-menu/index.jsx +0 -11
  448. package/src/configs/acl.js +0 -115
  449. package/src/configs/auth.js +0 -5
  450. package/src/configs/aws-exports.js +0 -30
  451. package/src/configs/firebase.js +0 -25
  452. package/src/configs/i18n.js +0 -34
  453. package/src/configs/primaryColorConfig.js +0 -35
  454. package/src/configs/themeConfig.js +0 -44
  455. package/src/layouts/UserLayout.js +0 -94
  456. package/src/layouts/UserThemeOptions.js +0 -191
  457. package/src/layouts/components/Direction.js +0 -30
  458. package/src/layouts/components/HtmlTooltip.js +0 -15
  459. package/src/layouts/components/Translations.js +0 -11
  460. package/src/layouts/components/UserDropdown.js +0 -217
  461. package/src/layouts/components/UserIcon.js +0 -40
  462. package/src/layouts/components/acl/Can.js +0 -6
  463. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  464. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  465. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  466. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  467. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  468. package/src/layouts/components/mui/StepperComps.js +0 -55
  469. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  470. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  471. package/src/libs/ApexCharts.jsx +0 -5
  472. package/src/libs/ReactPlayer.jsx +0 -5
  473. package/src/libs/Recharts.jsx +0 -4
  474. package/src/libs/auth.js +0 -124
  475. package/src/libs/styles/AppFullCalendar.js +0 -505
  476. package/src/libs/styles/AppKeenSlider.js +0 -116
  477. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  478. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  479. package/src/libs/styles/AppReactDropzone.js +0 -76
  480. package/src/libs/styles/AppReactToastify.jsx +0 -108
  481. package/src/libs/styles/AppRecharts.js +0 -55
  482. package/src/libs/styles/inputOtp.module.css +0 -39
  483. package/src/libs/styles/tiptapEditor.css +0 -72
  484. package/src/navigation/horizontal/index.js +0 -246
  485. package/src/navigation/vertical/index.js +0 -253
  486. package/src/pages/401.js +0 -70
  487. package/src/pages/404.js +0 -67
  488. package/src/pages/500.js +0 -68
  489. package/src/pages/[slug].js +0 -115
  490. package/src/pages/_document.js +0 -72
  491. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  492. package/src/pages/api/navigation/save.js +0 -218
  493. package/src/pages/authModule/acl/index.js +0 -48
  494. package/src/pages/authModule/forgot-password/index.js +0 -228
  495. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  496. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  497. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  498. package/src/pages/authModule/privacy/index.js +0 -721
  499. package/src/pages/authModule/users/index.js +0 -210
  500. package/src/pages/login/index.js +0 -328
  501. package/src/pages/mainHome/index.js +0 -181
  502. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  503. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  504. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  505. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  506. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  507. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  508. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  509. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  510. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  511. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  512. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  513. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  514. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  515. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  516. package/src/views/pages/users/UserManageDialog.js +0 -283
  517. package/src/views/pages/users/UserViewPage.js +0 -199
  518. package/src/views/users/AddUserNameDialog.js +0 -162
  519. package/src/views/users/ContactManage.js +0 -449
  520. package/src/views/users/ResetPasswordDialog.js +0 -242
@@ -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}>
@@ -0,0 +1,350 @@
1
+ import { useEffect, useMemo, useState } from 'react'
2
+ import {
3
+ Box,
4
+ Button,
5
+ Chip,
6
+ Dialog,
7
+ DialogActions,
8
+ DialogContent,
9
+ DialogTitle,
10
+ Divider,
11
+ IconButton,
12
+ List,
13
+ ListItemButton,
14
+ ListItemText,
15
+ Stack,
16
+ TextField,
17
+ Tooltip,
18
+ Typography
19
+ } from '@mui/material'
20
+ import DeleteOutlineIcon from '@mui/icons-material/DeleteOutline'
21
+ import DownloadIcon from '@mui/icons-material/Download'
22
+ import DeleteSweepIcon from '@mui/icons-material/DeleteSweep'
23
+ import ModelTrainingIcon from '@mui/icons-material/ModelTraining'
24
+ import NoteAddOutlinedIcon from '@mui/icons-material/NoteAddOutlined'
25
+ import {
26
+ subscribe,
27
+ listEntries,
28
+ updateEntry,
29
+ deleteEntry,
30
+ exportJSON,
31
+ clearAll
32
+ } from 'services/sessionLog'
33
+ import { exportTrainingJSONL } from 'views/builder/sidebar/tabs/AiTab/trainingExport'
34
+ import { useBuilder } from 'context/BuilderContext'
35
+
36
+ // Print Builder schemas always carry these zone/page fields. UI Builder schemas
37
+ // don't. Used to auto-tag a snapshot with the right builder kind so we don't
38
+ // need to plumb a prop through every page that mounts BuilderProvider.
39
+ function detectBuilderKind(schema) {
40
+ if (!schema || typeof schema !== 'object') return 'ui'
41
+ if (schema.zones && schema.pageOrder) return 'print'
42
+ return 'ui'
43
+ }
44
+
45
+ function fmtDate(iso) {
46
+ try {
47
+ const d = new Date(iso)
48
+ return d.toLocaleString()
49
+ } catch {
50
+ return iso
51
+ }
52
+ }
53
+
54
+ function builderLabel(b) {
55
+ return b === 'print' ? 'Print' : 'UI'
56
+ }
57
+
58
+ export default function SessionLogDialog({ open, onClose }) {
59
+ const [entries, setEntries] = useState(() => listEntries())
60
+ const [selectedId, setSelectedId] = useState(null)
61
+
62
+ // Pull current schema + logger from the builder so we can snapshot without
63
+ // requiring a save round-trip.
64
+ const { schema, viewMetaData, logSchema } = useBuilder() ?? {}
65
+
66
+ // Re-fetch on every change to the underlying store
67
+ useEffect(() => {
68
+ const unsub = subscribe(() => setEntries(listEntries()))
69
+ // also refresh whenever the dialog opens (in case storage was edited
70
+ // by another tab while it was closed)
71
+ if (open) setEntries(listEntries())
72
+ return unsub
73
+ }, [open])
74
+
75
+ // Pick a sensible default selection
76
+ useEffect(() => {
77
+ if (!open) return
78
+ if (entries.length === 0) { setSelectedId(null); return }
79
+ if (!selectedId || !entries.some(e => e.id === selectedId)) {
80
+ setSelectedId(entries[0].id)
81
+ }
82
+ }, [open, entries, selectedId])
83
+
84
+ const selected = useMemo(
85
+ () => entries.find(e => e.id === selectedId) ?? null,
86
+ [entries, selectedId]
87
+ )
88
+
89
+ // Entries that have a non-empty prompt are eligible for fine-tune export.
90
+ const labeledCount = useMemo(
91
+ () => entries.filter(e => (e.prompt ?? '').trim().length > 0).length,
92
+ [entries]
93
+ )
94
+
95
+ const handleSnapshot = () => {
96
+ if (!schema || typeof logSchema !== 'function') return
97
+ const builderKind = detectBuilderKind(schema)
98
+
99
+ // In Print Builder, schema.root is just the active zone — fold it back
100
+ // into schema.zones so the snapshot matches what a real save would emit.
101
+ let snapshotSchema = schema
102
+ if (builderKind === 'print' && schema.activeZone && schema.root) {
103
+ snapshotSchema = {
104
+ ...schema,
105
+ zones: { ...(schema.zones ?? {}), [schema.activeZone]: schema.root }
106
+ }
107
+ }
108
+
109
+ const title =
110
+ (viewMetaData && viewMetaData.title) ||
111
+ `Snapshot ${new Date().toLocaleString()}`
112
+ const entry = logSchema({
113
+ builder: builderKind,
114
+ trigger: 'snapshot',
115
+ title,
116
+ viewMetaData: viewMetaData ?? {},
117
+ schema: snapshotSchema
118
+ })
119
+ if (entry) setSelectedId(entry.id)
120
+ }
121
+
122
+ const handleExportTraining = () => {
123
+ const { count, skipped } = exportTrainingJSONL(entries)
124
+ if (count === 0) {
125
+ window.alert('No labeled entries to export. Fill in the Prompt field on at least one entry first.')
126
+ return
127
+ }
128
+ const skipMsg = skipped.length > 0
129
+ ? `\n\nSkipped ${skipped.length} entr${skipped.length === 1 ? 'y' : 'ies'} (no prompt or unusable schema).`
130
+ : ''
131
+ window.alert(`Exported ${count} training example${count === 1 ? '' : 's'} as JSONL.${skipMsg}\n\nNext: upload to Together with the CLI:\n together files check <file>\n together files upload <file> --type jsonl --purpose fine-tune\n together fine-tuning create --training-file <id> --model <base> --lora\n\n(--type jsonl is required — Together rejects the upload otherwise.)`)
132
+ }
133
+
134
+ const handlePromptChange = (value) => {
135
+ if (!selected) return
136
+ updateEntry(selected.id, { prompt: value })
137
+ }
138
+
139
+ const handleNotesChange = (value) => {
140
+ if (!selected) return
141
+ updateEntry(selected.id, { notes: value })
142
+ }
143
+
144
+ const handleDelete = (id) => {
145
+ deleteEntry(id)
146
+ }
147
+
148
+ const handleClearAll = () => {
149
+ if (entries.length === 0) return
150
+ if (!window.confirm(`Delete all ${entries.length} logged schemas? This cannot be undone.`)) return
151
+ clearAll()
152
+ }
153
+
154
+ return (
155
+ <Dialog open={open} onClose={onClose} maxWidth='lg' fullWidth PaperProps={{ sx: { height: '85vh' } }}>
156
+ <DialogTitle sx={{ display: 'flex', alignItems: 'center', gap: 1, pr: 1 }}>
157
+ <Box sx={{ flex: 1 }}>
158
+ Session Logs
159
+ <Typography variant='caption' sx={{ ml: 1, color: 'text.secondary' }}>
160
+ {entries.length} {entries.length === 1 ? 'entry' : 'entries'} · {labeledCount} labeled
161
+ </Typography>
162
+ </Box>
163
+ <Tooltip title='Snapshot the current builder schema (no save required)'>
164
+ <span>
165
+ <Button
166
+ size='small'
167
+ variant='outlined'
168
+ startIcon={<NoteAddOutlinedIcon fontSize='small' />}
169
+ onClick={handleSnapshot}
170
+ disabled={!schema || typeof logSchema !== 'function'}
171
+ sx={{ mr: 1 }}
172
+ >
173
+ Snapshot
174
+ </Button>
175
+ </span>
176
+ </Tooltip>
177
+ <Tooltip title={
178
+ labeledCount === 0
179
+ ? 'Fill in a Prompt on at least one entry to enable Together fine-tune export'
180
+ : `Export ${labeledCount} labeled example${labeledCount === 1 ? '' : 's'} as Together fine-tune JSONL`
181
+ }>
182
+ <span>
183
+ <IconButton
184
+ size='small'
185
+ onClick={handleExportTraining}
186
+ disabled={labeledCount === 0}
187
+ color='primary'
188
+ >
189
+ <ModelTrainingIcon fontSize='small' />
190
+ </IconButton>
191
+ </span>
192
+ </Tooltip>
193
+ <Tooltip title='Export all as JSON (raw backup)'>
194
+ <span>
195
+ <IconButton size='small' onClick={exportJSON} disabled={entries.length === 0}>
196
+ <DownloadIcon fontSize='small' />
197
+ </IconButton>
198
+ </span>
199
+ </Tooltip>
200
+ <Tooltip title='Delete all'>
201
+ <span>
202
+ <IconButton size='small' color='error' onClick={handleClearAll} disabled={entries.length === 0}>
203
+ <DeleteSweepIcon fontSize='small' />
204
+ </IconButton>
205
+ </span>
206
+ </Tooltip>
207
+ </DialogTitle>
208
+
209
+ <Divider />
210
+
211
+ <DialogContent sx={{ p: 0, display: 'flex', minHeight: 0 }}>
212
+ {/* ── Left: entries list ─────────────────────────────────────────── */}
213
+ <Box sx={{ width: 320, borderRight: '1px solid', borderColor: 'divider', overflow: 'auto' }}>
214
+ {entries.length === 0 ? (
215
+ <Box sx={{ p: 3, color: 'text.secondary', fontSize: 13 }}>
216
+ No entries yet. Click <strong>Snapshot</strong> to capture the current builder schema, or save a view — both are auto-logged.
217
+ </Box>
218
+ ) : (
219
+ <List dense disablePadding>
220
+ {entries.map(entry => (
221
+ <ListItemButton
222
+ key={entry.id}
223
+ selected={entry.id === selectedId}
224
+ onClick={() => setSelectedId(entry.id)}
225
+ sx={{ alignItems: 'flex-start', py: 1.25, pr: 1 }}
226
+ >
227
+ <ListItemText
228
+ primary={
229
+ <Stack direction='row' spacing={1} alignItems='center'>
230
+ <Chip
231
+ label={builderLabel(entry.builder)}
232
+ size='small'
233
+ color={entry.builder === 'print' ? 'secondary' : 'primary'}
234
+ sx={{ height: 18, fontSize: 10 }}
235
+ />
236
+ <Typography variant='body2' noWrap sx={{ flex: 1 }}>
237
+ {entry.title || '(untitled)'}
238
+ </Typography>
239
+ </Stack>
240
+ }
241
+ secondary={
242
+ <Stack direction='row' justifyContent='space-between' alignItems='center'>
243
+ <Typography variant='caption' color='text.secondary'>
244
+ {fmtDate(entry.createdAt)}
245
+ </Typography>
246
+ {entry.prompt
247
+ ? <Chip label='labeled' size='small' color='success' sx={{ height: 16, fontSize: 9 }} />
248
+ : <Chip label='no prompt' size='small' variant='outlined' sx={{ height: 16, fontSize: 9 }} />}
249
+ </Stack>
250
+ }
251
+ secondaryTypographyProps={{ component: 'div' }}
252
+ />
253
+ <IconButton
254
+ size='small'
255
+ edge='end'
256
+ onClick={(e) => { e.stopPropagation(); handleDelete(entry.id) }}
257
+ sx={{ ml: 0.5 }}
258
+ >
259
+ <DeleteOutlineIcon fontSize='small' />
260
+ </IconButton>
261
+ </ListItemButton>
262
+ ))}
263
+ </List>
264
+ )}
265
+ </Box>
266
+
267
+ {/* ── Right: detail / editor ─────────────────────────────────────── */}
268
+ <Box sx={{ flex: 1, display: 'flex', flexDirection: 'column', minWidth: 0 }}>
269
+ {!selected ? (
270
+ <Box sx={{ p: 3, color: 'text.secondary', fontSize: 13 }}>
271
+ Select an entry on the left.
272
+ </Box>
273
+ ) : (
274
+ <Box sx={{ display: 'flex', flexDirection: 'column', height: '100%', minHeight: 0 }}>
275
+ {/* Header row */}
276
+ <Box sx={{ p: 2, pb: 1 }}>
277
+ <Stack direction='row' spacing={1} alignItems='center' sx={{ mb: 1 }}>
278
+ <Chip
279
+ label={builderLabel(selected.builder)}
280
+ size='small'
281
+ color={selected.builder === 'print' ? 'secondary' : 'primary'}
282
+ />
283
+ <Typography variant='subtitle2'>{selected.title || '(untitled)'}</Typography>
284
+ <Box sx={{ flex: 1 }} />
285
+ <Typography variant='caption' color='text.secondary'>
286
+ {fmtDate(selected.createdAt)}
287
+ </Typography>
288
+ </Stack>
289
+
290
+ <TextField
291
+ fullWidth
292
+ size='small'
293
+ multiline
294
+ minRows={2}
295
+ maxRows={4}
296
+ label='Prompt (training instruction)'
297
+ placeholder='What natural-language instruction would produce this schema? (Filled later — leave empty for now if you prefer.)'
298
+ value={selected.prompt ?? ''}
299
+ onChange={e => handlePromptChange(e.target.value)}
300
+ sx={{ mb: 1 }}
301
+ />
302
+
303
+ <TextField
304
+ fullWidth
305
+ size='small'
306
+ label='Notes (optional)'
307
+ placeholder='Internal notes — not part of the prompt'
308
+ value={selected.notes ?? ''}
309
+ onChange={e => handleNotesChange(e.target.value)}
310
+ />
311
+ </Box>
312
+
313
+ <Divider />
314
+
315
+ {/* Schema preview */}
316
+ <Box sx={{ flex: 1, overflow: 'auto', p: 2, bgcolor: 'background.default' }}>
317
+ <Typography variant='caption' color='text.secondary' sx={{ display: 'block', mb: 1 }}>
318
+ Schema
319
+ </Typography>
320
+ <Box
321
+ component='pre'
322
+ sx={{
323
+ m: 0,
324
+ p: 1.5,
325
+ fontFamily: 'monospace',
326
+ fontSize: 12,
327
+ lineHeight: 1.5,
328
+ bgcolor: 'background.paper',
329
+ border: '1px solid',
330
+ borderColor: 'divider',
331
+ borderRadius: 1,
332
+ overflow: 'auto',
333
+ whiteSpace: 'pre',
334
+ maxHeight: '100%'
335
+ }}
336
+ >
337
+ {JSON.stringify(selected.schema, null, 2)}
338
+ </Box>
339
+ </Box>
340
+ </Box>
341
+ )}
342
+ </Box>
343
+ </DialogContent>
344
+
345
+ <DialogActions>
346
+ <Button onClick={onClose}>Close</Button>
347
+ </DialogActions>
348
+ </Dialog>
349
+ )
350
+ }