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
@@ -18,7 +18,8 @@ import {
18
18
  Dialog,
19
19
  InputAdornment
20
20
  } from '@mui/material'
21
- import {ArrowLeft, Close, DeleteOutline, FilterPlus} from 'mdi-material-ui'
21
+ import {ArrowLeft, Close, FilterPlus} from 'mdi-material-ui'
22
+ import {DeleteOutlined} from '@mui/icons-material'
22
23
  import Autocomplete from '@mui/material/Autocomplete'
23
24
  import {Endpoints, Services} from 'src/services/Endpoints'
24
25
  import CustomFilterDialog from 'src/views/customFilter/CustomFilterDialog'
@@ -408,7 +409,7 @@ export default function FixedFilterDialog({
408
409
  )}
409
410
  </Box>
410
411
  <IconButton color='error' onClick={()=> removeItem(idx)}>
411
- <DeleteOutline/>
412
+ <DeleteOutlined/>
412
413
  </IconButton>
413
414
  <Box sx={{gridColumn:'1 / span 6'}}>
414
415
  <Typography variant='caption' color='text.secondary'>{normalizedRoot}.{it.path} • {it.localProperty}{it.enumName?(' • '+it.enumName):''}</Typography>
@@ -0,0 +1,551 @@
1
+ import React, {useState, useEffect} from 'react';
2
+ import {
3
+ Dialog,
4
+ DialogTitle,
5
+ DialogContent,
6
+ DialogActions,
7
+ Button,
8
+ Grid,
9
+ TextField,
10
+ FormControl,
11
+ InputLabel,
12
+ Select,
13
+ MenuItem,
14
+ Typography,
15
+ Paper,
16
+ Box,
17
+ IconButton,
18
+ Divider,
19
+ FormControlLabel,
20
+ Switch,
21
+ Tooltip,
22
+ Autocomplete, Collapse
23
+ } from '@mui/material';
24
+ import {Plus, ChevronDown, ChevronUp} from 'mdi-material-ui';
25
+ import {DeleteOutlined} from '@mui/icons-material';
26
+ import dynamic from 'next/dynamic';
27
+ import { HelpPopover } from 'views/builder/inspector/fields/FunctionHelpPopover';
28
+
29
+ const MonacoEditor = dynamic(() => import('@monaco-editor/react'), {ssr: false});
30
+
31
+ const FormattingSettingsDialog = ({open, onClose, field, onSave}) => {
32
+ const [settings, setSettings] = useState({
33
+ decimals: 0,
34
+ conditions: [],
35
+ fixedStyle: {
36
+ color: '',
37
+ backgroundColor: '',
38
+ fontWeight: 'normal',
39
+ flashing: false,
40
+ }
41
+ });
42
+
43
+ useEffect(() => {
44
+ if (field && field.formatting) {
45
+ setSettings(field.formatting);
46
+ } else {
47
+ setSettings({
48
+ decimals: 0,
49
+ conditions: [],
50
+ fixedStyle: {
51
+ color: '',
52
+ backgroundColor: '',
53
+ fontWeight: 'normal',
54
+ flashing: false,
55
+ }
56
+ });
57
+ }
58
+ }, [field, open]);
59
+
60
+ const handleSave = () => {
61
+ onSave(settings);
62
+ onClose();
63
+ };
64
+
65
+ const addCondition = () => {
66
+ setSettings(prev => ({
67
+ ...prev,
68
+ conditions: [
69
+ ...prev.conditions,
70
+ {
71
+ baseField: 'self', // 'self' or path of another field
72
+ operator: '==',
73
+ value: '',
74
+ valueType: 'static', // 'static' or 'field'
75
+ compareField: '', // path of field for comparison
76
+ style: {
77
+ color: '',
78
+ backgroundColor: '',
79
+ fontWeight: 'normal',
80
+ flashing: false,
81
+ }
82
+ }
83
+ ]
84
+ }));
85
+ };
86
+
87
+ const removeCondition = (index) => {
88
+ setSettings(prev => ({
89
+ ...prev,
90
+ conditions: prev.conditions.filter((_, i) => i !== index)
91
+ }));
92
+ };
93
+
94
+ const updateCondition = (index, key, value) => {
95
+ setSettings(prev => {
96
+ const newConditions = [...prev.conditions];
97
+ if (key.includes('.')) {
98
+ const [obj, prop] = key.split('.');
99
+ newConditions[index][obj][prop] = value;
100
+ } else {
101
+ newConditions[index][key] = value;
102
+ }
103
+ return {...prev, conditions: newConditions};
104
+ });
105
+ };
106
+
107
+ const updateFixedStyle = (key, value) => {
108
+ setSettings(prev => ({
109
+ ...prev,
110
+ fixedStyle: {
111
+ ...prev.fixedStyle,
112
+ [key]: value
113
+ }
114
+ }));
115
+ };
116
+
117
+ const [expandedEditors, setExpandedEditors] = useState({});
118
+
119
+ useEffect(() => {
120
+ // Expand math expression editors by default if they have content
121
+ if (open && settings.conditions) {
122
+ const initialExpanded = {};
123
+ settings.conditions.forEach((cond, index) => {
124
+ if (cond.valueType === 'expression') {
125
+ initialExpanded[index] = true;
126
+ }
127
+ });
128
+ setExpandedEditors(initialExpanded);
129
+ }
130
+ }, [open]);
131
+
132
+ const toggleEditorExpansion = (index) => {
133
+ setExpandedEditors(prev => ({
134
+ ...prev,
135
+ [index]: !prev[index]
136
+ }));
137
+ };
138
+
139
+ const isNumeric = field?.propertyType === 'Int' || field?.propertyType === 'Double';
140
+
141
+ const fieldOptions = field?.parentFields || []; // This would need to be passed if we want to base on other fields
142
+
143
+ return (
144
+ <Dialog open={open} onClose={onClose} maxWidth="lg" fullWidth dir="ltr">
145
+ <DialogTitle>Formatting Settings: {field?.title || field?.headerName}</DialogTitle>
146
+ <DialogContent>
147
+ <Grid container spacing={3} sx={{mt: 1}}>
148
+ {isNumeric && (
149
+ <Grid size={{ xs: 12 }}>
150
+ <TextField
151
+ label="Decimal Places"
152
+ type="number"
153
+ fullWidth
154
+ value={settings.decimals}
155
+ onChange={(e) => setSettings({...settings, decimals: parseInt(e.target.value) || 0})}
156
+ />
157
+ </Grid>
158
+ )}
159
+
160
+ <Grid size={{ xs: 12 }}>
161
+ <Typography variant="subtitle1" gutterBottom fontWeight="bold">Fixed Style</Typography>
162
+ <Grid container spacing={2}>
163
+ <Grid size={{ xs: 3 }}>
164
+ <TextField
165
+ label="Text Color"
166
+ type="color"
167
+ fullWidth
168
+ InputLabelProps={{shrink: true}}
169
+ value={settings.fixedStyle?.color || '#000000'}
170
+ onChange={(e) => updateFixedStyle('color', e.target.value)}
171
+ />
172
+ </Grid>
173
+ <Grid size={{ xs: 3 }}>
174
+ <TextField
175
+ label="Background Color"
176
+ type="color"
177
+ fullWidth
178
+ InputLabelProps={{shrink: true}}
179
+ value={settings.fixedStyle?.backgroundColor || '#ffffff'}
180
+ onChange={(e) => updateFixedStyle('backgroundColor', e.target.value)}
181
+ />
182
+ </Grid>
183
+ <Grid size={{ xs: 3 }}>
184
+ <FormControl fullWidth>
185
+ <InputLabel>Font Weight</InputLabel>
186
+ <Select
187
+ value={settings.fixedStyle?.fontWeight || 'normal'}
188
+ label="Font Weight"
189
+ onChange={(e) => updateFixedStyle('fontWeight', e.target.value)}
190
+ >
191
+ <MenuItem value="normal">Normal</MenuItem>
192
+ <MenuItem value="bold">Bold</MenuItem>
193
+ </Select>
194
+ </FormControl>
195
+ </Grid>
196
+ <Grid display="flex" alignItems="center" size={{ xs: 1 }}>
197
+ <FormControlLabel
198
+ control={
199
+ <Switch
200
+ checked={settings.fixedStyle?.flashing || false}
201
+ onChange={(e) => updateFixedStyle('flashing', e.target.checked)}
202
+ />
203
+ }
204
+ label="Flashing"
205
+ />
206
+ </Grid>
207
+ </Grid>
208
+ </Grid>
209
+
210
+ <Grid size={{ xs: 12 }}>
211
+ <Divider sx={{my: 2}} />
212
+ <Box display="flex" justifyContent="space-between" alignItems="center" mb={2}>
213
+ <Typography variant="subtitle1" fontWeight="bold">Conditional Formatting (Emphasis)</Typography>
214
+ <Button startIcon={<Plus />} variant="outlined" size="small" onClick={addCondition}>
215
+ Add Condition
216
+ </Button>
217
+ </Box>
218
+
219
+ {settings.conditions.map((condition, index) => (
220
+ <Paper key={index} variant="outlined" sx={{p: 2, mb: 2, backgroundColor: '#f9f9f9'}}>
221
+ <Grid container spacing={2} alignItems="center">
222
+ <Grid size={{ xs: 1.5 }}>
223
+ <FormControl fullWidth size="small">
224
+ <InputLabel>Type</InputLabel>
225
+ <Select
226
+ value={condition.valueType || 'static'}
227
+ label="Type"
228
+ onChange={(e) => {
229
+ const newType = e.target.value;
230
+ updateCondition(index, 'valueType', newType);
231
+ if (newType === 'expression') {
232
+ setExpandedEditors(prev => ({...prev, [index]: true}));
233
+ }
234
+ }}
235
+ >
236
+ <MenuItem value="static">Static Value</MenuItem>
237
+ <MenuItem value="field">Another Field</MenuItem>
238
+ <MenuItem value="expression">Math Expression</MenuItem>
239
+ </Select>
240
+ </FormControl>
241
+ </Grid>
242
+ {condition.valueType !== 'expression' && (
243
+ <Grid size={{ xs: 12, sm: 3 }}>
244
+ <Autocomplete
245
+ freeSolo
246
+ size="small"
247
+ options={['self', ...fieldOptions.map(f => f.path)]}
248
+ getOptionLabel={(option) => {
249
+ if (option === 'self') return 'self';
250
+ const f = fieldOptions.find(fo => fo.path === option);
251
+ return f ? `${f.title || f.headerName} (${f.path})` : option;
252
+ }}
253
+ isOptionEqualToValue={(option, value) => option === value}
254
+ value={condition.baseField || 'self'}
255
+ onChange={(e, newValue) => {
256
+ updateCondition(index, 'baseField', newValue || 'self');
257
+ }}
258
+ onBlur={(e) => {
259
+ const val = e.target.value;
260
+ if (val === 'self' || !val) {
261
+ updateCondition(index, 'baseField', 'self');
262
+ } else {
263
+ // Find if the typed value matches any of our options' labels or paths
264
+ const matchedOption = fieldOptions.find(f =>
265
+ f.path === val || `${f.title || f.headerName} (${f.path})` === val
266
+ );
267
+ updateCondition(index, 'baseField', matchedOption ? matchedOption.path : val);
268
+ }
269
+ }}
270
+ renderInput={(params) => (
271
+ <TextField {...params} label="Base Field" />
272
+ )}
273
+ />
274
+ </Grid>
275
+ )}
276
+ {condition.valueType !== 'expression' && (
277
+ <Grid size={{ xs: 12, sm: 2 }}>
278
+ <FormControl fullWidth size="small">
279
+ <InputLabel>Operator</InputLabel>
280
+ <Select
281
+ value={condition.operator}
282
+ label="Operator"
283
+ onChange={(e) => updateCondition(index, 'operator', e.target.value)}
284
+ >
285
+ <MenuItem value="==">Equals</MenuItem>
286
+ <MenuItem value="!=">Not Equals</MenuItem>
287
+ <MenuItem value=">">Greater Than</MenuItem>
288
+ <MenuItem value="<">Less Than</MenuItem>
289
+ <MenuItem value=">=">Greater Than or Equal</MenuItem>
290
+ <MenuItem value="<=">Less Than or Equal</MenuItem>
291
+ <MenuItem value="contains">Contains</MenuItem>
292
+ </Select>
293
+ </FormControl>
294
+ </Grid>
295
+ )}
296
+ <Grid dir="ltr" size={{ xs: 12, sm: condition.valueType === 'expression' ? 4.5 : 3.5 }}>
297
+ {condition.valueType === 'field' ? (
298
+ <Autocomplete
299
+ freeSolo
300
+ size="small"
301
+ options={fieldOptions.map(f => f.path)}
302
+ getOptionLabel={(option) => {
303
+ const f = fieldOptions.find(fo => fo.path === option);
304
+ return f ? `${f.title || f.headerName} (${f.path})` : option;
305
+ }}
306
+ isOptionEqualToValue={(option, value) => option === value}
307
+ value={condition.compareField || ''}
308
+ onChange={(e, newValue) => {
309
+ updateCondition(index, 'compareField', newValue || '');
310
+ }}
311
+ onBlur={(e) => {
312
+ const val = e.target.value;
313
+ const matchedOption = fieldOptions.find(f =>
314
+ f.path === val || `${f.title || f.headerName} (${f.path})` === val
315
+ );
316
+ updateCondition(index, 'compareField', matchedOption ? matchedOption.path : val);
317
+ }}
318
+ renderInput={(params) => (
319
+ <TextField {...params} label="Compare With" />
320
+ )}
321
+ />
322
+ ) : condition.valueType === 'expression' ? null : (
323
+ <TextField
324
+ label="Value"
325
+ size="small"
326
+ fullWidth
327
+ value={condition.value}
328
+ onChange={(e) => updateCondition(index, 'value', e.target.value)}
329
+ />
330
+ )}
331
+ </Grid>
332
+ <Grid size={{ xs: 1.5 }}>
333
+ <TextField
334
+ label="Color"
335
+ type="color"
336
+ size="small"
337
+ fullWidth
338
+ InputLabelProps={{shrink: true}}
339
+ value={condition.style.color || '#000000'}
340
+ onChange={(e) => updateCondition(index, 'style.color', e.target.value)}
341
+ />
342
+ </Grid>
343
+ <Grid size={{ xs: 1.5 }}>
344
+ <TextField
345
+ label="BG Color"
346
+ type="color"
347
+ size="small"
348
+ fullWidth
349
+ InputLabelProps={{shrink: true}}
350
+ value={condition.style.backgroundColor || '#ffffff'}
351
+ onChange={(e) => updateCondition(index, 'style.backgroundColor', e.target.value)}
352
+ />
353
+ </Grid>
354
+ <Grid size={{ xs: 1.5 }}>
355
+ <FormControl fullWidth size="small">
356
+ <InputLabel>Font Weight</InputLabel>
357
+ <Select
358
+ value={condition.style.fontWeight || 'normal'}
359
+ label="Font Weight"
360
+ onChange={(e) => updateCondition(index, 'style.fontWeight', e.target.value)}
361
+ >
362
+ <MenuItem value="normal">Normal</MenuItem>
363
+ <MenuItem value="bold">Bold</MenuItem>
364
+ </Select>
365
+ </FormControl>
366
+ </Grid>
367
+ <Grid size={{ xs: 1 }}>
368
+ <FormControlLabel
369
+ control={
370
+ <Switch
371
+ size="small"
372
+ checked={condition.style.flashing || false}
373
+ onChange={(e) => updateCondition(index, 'style.flashing', e.target.checked)}
374
+ />
375
+ }
376
+ label={<Typography variant="caption">Flash</Typography>}
377
+ />
378
+ </Grid>
379
+ <Grid display="flex" justifyContent="flex-end" size={{ xs: 0.5 }}>
380
+ <IconButton size="small" color="error" onClick={() => removeCondition(index)}>
381
+ <DeleteOutlined />
382
+ </IconButton>
383
+ </Grid>
384
+
385
+ {/* Expression Editor in another row */}
386
+ {condition.valueType === 'expression' && (
387
+ <Grid size={{ xs: 12 }}>
388
+ <Box sx={{ border: '1px solid #ced4da', borderRadius: 1, overflow: 'hidden', mt: 1 }}>
389
+ <Box sx={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', px: 1, py: 0.5, backgroundColor: '#f0f0f0' }}>
390
+ <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>
391
+ <Typography variant="caption" fontWeight="bold">Math Expression</Typography>
392
+ <HelpPopover type='formattingExpression' />
393
+ </Box>
394
+ <IconButton size="small" onClick={() => toggleEditorExpansion(index)}>
395
+ {expandedEditors[index] ? <ChevronUp size="small" /> : <ChevronDown size="small" />}
396
+ </IconButton>
397
+ </Box>
398
+ <Collapse in={expandedEditors[index]}>
399
+ <Box dir="ltr">
400
+ <MonacoEditor
401
+ height="200px"
402
+ language="mazajak-expression"
403
+ theme="vs-dark"
404
+ value={condition.expression || ''}
405
+ onChange={(newValue) => {
406
+ updateCondition(index, 'expression', newValue || '');
407
+ }}
408
+ onMount={(editor, monaco) => {
409
+ // Define a custom language for highlighting
410
+ const langId = 'mazajak-expression';
411
+
412
+ // Register the language if not already registered
413
+ if (!monaco.languages.getLanguages().some(l => l.id === langId)) {
414
+ monaco.languages.register({ id: langId });
415
+
416
+ // Define the tokenizer
417
+ monaco.languages.setMonarchTokensProvider(langId, {
418
+ tokenizer: {
419
+ root: [
420
+ // Double quotes for field placeholders (highlighted as tags/regex/special)
421
+ [/"[^"]*"/, 'tag'],
422
+
423
+ // Single quotes for string literals (standard string highlighting)
424
+ [/'[^']*'/, 'string'],
425
+
426
+ // Standard JavaScript-like tokens
427
+ [/[a-z_$][\w$]*/, {
428
+ cases: {
429
+ 'if|else|switch|case|break|default|return': 'keyword',
430
+ 'true|false|null': 'constant',
431
+ '@default': 'identifier'
432
+ }
433
+ }],
434
+ [/[{}()\[\]]/, '@brackets'],
435
+ [/[0-9]+/, 'number'],
436
+ [/[><=!|&?:,+*/%-]/, 'operator'],
437
+ [/[ \t\r\n]+/, 'white'],
438
+ ]
439
+ }
440
+ });
441
+
442
+ // Define custom theme colors for these tokens if needed,
443
+ // but 'tag' and 'string' already have different colors in vs-dark.
444
+ }
445
+
446
+ // Update the editor's model language
447
+ const model = editor.getModel();
448
+ if (model) {
449
+ monaco.editor.setModelLanguage(model, langId);
450
+ }
451
+
452
+ // Register completion provider for the custom language
453
+ const provider = monaco.languages.registerCompletionItemProvider(langId, {
454
+ triggerCharacters: ['"'],
455
+ provideCompletionItems: (model, position) => {
456
+ const textUntilPosition = model.getValueInRange({
457
+ startLineNumber: 1,
458
+ startColumn: 1,
459
+ endLineNumber: position.lineNumber,
460
+ endColumn: position.column
461
+ });
462
+
463
+ const quoteCount = (textUntilPosition.match(/"/g) || []).length;
464
+ const isInsideQuotes = quoteCount % 2 !== 0;
465
+
466
+ if (isInsideQuotes) {
467
+ return {
468
+ suggestions: fieldOptions.map(f => ({
469
+ label: `"${f.path}"`,
470
+ kind: monaco.languages.CompletionItemKind.Field,
471
+ documentation: f.title || f.headerName,
472
+ insertText: f.path, // Just the path
473
+ range: {
474
+ startLineNumber: position.lineNumber,
475
+ endLineNumber: position.lineNumber,
476
+ startColumn: position.column,
477
+ endColumn: position.column
478
+ }
479
+ }))
480
+ };
481
+ } else {
482
+ return {
483
+ suggestions: [
484
+ { label: '+', kind: monaco.languages.CompletionItemKind.Operator, insertText: '+ ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
485
+ { label: '-', kind: monaco.languages.CompletionItemKind.Operator, insertText: '- ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
486
+ { label: '*', kind: monaco.languages.CompletionItemKind.Operator, insertText: '* ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
487
+ { label: '/', kind: monaco.languages.CompletionItemKind.Operator, insertText: '/ ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
488
+ { label: '(', kind: monaco.languages.CompletionItemKind.Operator, insertText: '( ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
489
+ { label: ')', kind: monaco.languages.CompletionItemKind.Operator, insertText: ') ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
490
+ { label: '>', kind: monaco.languages.CompletionItemKind.Operator, insertText: '> ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
491
+ { label: '<', kind: monaco.languages.CompletionItemKind.Operator, insertText: '< ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
492
+ { label: '>=', kind: monaco.languages.CompletionItemKind.Operator, insertText: '>= ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
493
+ { label: '<=', kind: monaco.languages.CompletionItemKind.Operator, insertText: '<= ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
494
+ { label: '==', kind: monaco.languages.CompletionItemKind.Operator, insertText: '== ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
495
+ { label: '!=', kind: monaco.languages.CompletionItemKind.Operator, insertText: '!= ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
496
+ { label: '&&', kind: monaco.languages.CompletionItemKind.Operator, insertText: '&& ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
497
+ { label: '||', kind: monaco.languages.CompletionItemKind.Operator, insertText: '|| ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
498
+ { label: '?', kind: monaco.languages.CompletionItemKind.Operator, insertText: '? ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
499
+ { label: ':', kind: monaco.languages.CompletionItemKind.Operator, insertText: ': ', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
500
+ { label: 'if', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'if ($1) {\n\t$0\n}', insertTextRules: monaco.languages.CompletionItemInsertRules.InsertAsSnippet, range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
501
+ { label: 'else', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'else {\n\t$0\n}', insertTextRules: monaco.languages.CompletionItemInsertRules.InsertAsSnippet, range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
502
+ { label: 'switch', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'switch ($1) {\n\tcase $2:\n\t\t$0\n\t\tbreak;\n}', insertTextRules: monaco.languages.CompletionItemInsertRules.InsertAsSnippet, range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
503
+ { label: 'case', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'case $1:\n\t$0\n\tbreak;', insertTextRules: monaco.languages.CompletionItemInsertRules.InsertAsSnippet, range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
504
+ { label: 'break', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'break;', range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
505
+ { label: 'default', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'default:\n\t$0', insertTextRules: monaco.languages.CompletionItemInsertRules.InsertAsSnippet, range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
506
+ { label: 'return', kind: monaco.languages.CompletionItemKind.Keyword, insertText: 'return $0;', insertTextRules: monaco.languages.CompletionItemInsertRules.InsertAsSnippet, range: { startLineNumber: position.lineNumber, endLineNumber: position.lineNumber, startColumn: position.column, endColumn: position.column } },
507
+ ]
508
+ };
509
+ }
510
+ }
511
+ });
512
+ editor.onDidDispose(() => provider.dispose());
513
+ }}
514
+ options={{
515
+ minimap: { enabled: false },
516
+ fontSize: 13,
517
+ lineNumbers: 'off',
518
+ folding: true,
519
+ scrollBeyondLastLine: false,
520
+ automaticLayout: true,
521
+ wordWrap: 'on',
522
+ formatOnPaste: true,
523
+ formatOnType: true,
524
+ suggestOnTriggerCharacters: true,
525
+ }}
526
+ />
527
+ </Box>
528
+ </Collapse>
529
+ {!expandedEditors[index] && (
530
+ <Box sx={{ p: 1, backgroundColor: '#333', color: '#fff', fontSize: '0.75rem', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', cursor: 'pointer' }} onClick={() => toggleEditorExpansion(index)}>
531
+ {condition.expression || 'Click to edit expression...'}
532
+ </Box>
533
+ )}
534
+ </Box>
535
+ </Grid>
536
+ )}
537
+ </Grid>
538
+ </Paper>
539
+ ))}
540
+ </Grid>
541
+ </Grid>
542
+ </DialogContent>
543
+ <DialogActions>
544
+ <Button onClick={onClose}>Cancel</Button>
545
+ <Button onClick={handleSave} variant="contained" color="primary">Save</Button>
546
+ </DialogActions>
547
+ </Dialog>
548
+ );
549
+ };
550
+
551
+ export default FormattingSettingsDialog;