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.
- package/INTEGRATION.md +1586 -0
- package/README.md +928 -0
- package/RoboByteBuilder_User_Manual.docx +0 -0
- package/next.config.js +19 -48
- package/package.json +42 -86
- package/src/context/BuilderContext.jsx +191 -7
- package/src/context/SystemContext.js +2 -2
- package/src/hooks/useGlobalStore.js +36 -0
- package/src/hooks/useTimerEngine.js +54 -0
- package/src/lib/index.js +11 -3
- package/src/lib/layouts/BlankLayout.jsx +13 -0
- package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +61 -7
- package/src/lib/themes/builderTheme.js +41 -0
- package/src/pages/_app.js +32 -134
- package/src/pages/api/ai.js +107 -0
- package/src/pages/builders/report/index.js +1 -0
- package/src/pages/builders/report/list/index.js +1 -0
- package/src/pages/builders/report/viewer/index.js +1 -0
- package/src/pages/index.js +88 -37
- package/src/pages/printBuilder/index.jsx +263 -0
- package/src/pages/printBuilder/layouts/index.jsx +298 -0
- package/src/pages/reportModule/reportBuilder/index.js +8 -6
- package/src/pages/reportModule/reportBuilder/reportViewer/index.js +92 -25
- package/src/pages/reportModule/reportBuilder/reports/index.js +3 -5
- package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +2 -3
- package/src/pages/viewBuilder/index.jsx +117 -32
- package/src/pages/viewBuilder/views/index.js +3 -3
- package/src/pages/viewer/[id]/index.js +2 -1
- package/src/services/DeleteService.js +31 -60
- package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
- package/src/services/Endpoints/ReportBuilderEndpoints.js +7 -7
- package/src/services/Endpoints.js +2 -0
- package/src/services/GetService.js +33 -54
- package/src/services/PatchService.js +38 -65
- package/src/services/PostService.js +37 -63
- package/src/services/UpdateService.js +39 -65
- package/src/services/builderHelper/actionExecutor.js +141 -25
- package/src/services/builderHelper/builderHelper.js +92 -0
- package/src/services/builderHelper/colorSchema.js +95 -0
- package/src/services/builderHelper/iconResolver.js +50 -0
- package/src/services/builderHelper/jsExecutor.js +212 -46
- package/src/services/builderHelper/nodeFactory.js +32 -15
- package/src/services/builderHelper/numberFormat.js +123 -0
- package/src/services/builderHelper/resolveProps.js +73 -4
- package/src/services/builderHelper/thresholdEngine.js +77 -0
- package/src/services/builderHelper/tree.js +31 -0
- package/src/services/components/agGridAutoComplete.js +5 -9
- package/src/services/config.js +9 -1
- package/src/services/globalStore.js +80 -0
- package/src/services/helper/multiSelectEditor.js +5 -9
- package/src/services/helper/multiSelectEditorByBuilder.js +5 -9
- package/src/services/reportData/fetchReportData.js +69 -28
- package/src/services/routerRef.js +35 -0
- package/src/services/sessionLog.js +171 -0
- package/src/views/ConfirmDialog.js +2 -2
- package/src/views/builder/JSEditor.js +105 -107
- package/src/views/builder/SessionLogDialog.jsx +350 -0
- package/src/views/builder/UnsavedChangesGuard.jsx +103 -0
- package/src/views/builder/inspector/Inspector.jsx +6 -9
- package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
- package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
- package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
- package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
- package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
- package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
- package/src/views/builder/inspector/definitions/banner/main.js +22 -0
- package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
- package/src/views/builder/inspector/definitions/banner/style.js +1 -0
- package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
- package/src/views/builder/inspector/definitions/button/main.js +11 -12
- package/src/views/builder/inspector/definitions/button/style.js +18 -30
- package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
- package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
- package/src/views/builder/inspector/definitions/common/main.js +13 -2
- package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
- package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
- package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
- package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
- package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
- package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
- package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
- package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
- package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
- package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
- package/src/views/builder/inspector/definitions/header/main.js +10 -1
- package/src/views/builder/inspector/definitions/index.js +106 -19
- package/src/views/builder/inspector/definitions/input/actions.js +4 -1
- package/src/views/builder/inspector/definitions/input/main.js +20 -11
- package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
- package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
- package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
- package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
- package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
- package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
- package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
- package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
- package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
- package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
- package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
- package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
- package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
- package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
- package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
- package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
- package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
- package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
- package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
- package/src/views/builder/inspector/definitions/label/main.js +10 -1
- package/src/views/builder/inspector/definitions/layout/main.js +27 -3
- package/src/views/builder/inspector/definitions/number/main.js +6 -14
- package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
- package/src/views/builder/inspector/definitions/popover/main.js +71 -0
- package/src/views/builder/inspector/definitions/radio/main.js +5 -8
- package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
- package/src/views/builder/inspector/definitions/reportViewer/main.js +28 -1
- package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
- package/src/views/builder/inspector/definitions/signature/main.js +4 -1
- package/src/views/builder/inspector/definitions/tag/main.js +5 -8
- package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
- package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
- package/src/views/builder/inspector/definitions/time/main.js +5 -8
- package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
- package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
- package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
- package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
- package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
- package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
- package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
- package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
- package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
- package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
- package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
- package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
- package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
- package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
- package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
- package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
- package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
- package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
- package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
- package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
- package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
- package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
- package/src/views/builder/sidebar/Sidebar.jsx +4 -2
- package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
- package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
- package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
- package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +53 -0
- package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
- package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +167 -0
- package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
- package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
- package/src/views/builder/sidebar/tabs/AiTab/trainingExport.js +131 -0
- package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
- package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
- package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
- package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
- package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
- package/src/views/builder/sidebar/tabs/ViewTab.jsx +173 -13
- package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
- package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
- package/src/views/builder/viewer/DialogsZone.jsx +259 -0
- package/src/views/builder/viewer/FieldLabel.jsx +106 -0
- package/src/views/builder/viewer/PrintDialog.jsx +481 -0
- package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
- package/src/views/builder/viewer/Viewer.jsx +106 -8
- package/src/views/builder/viewer/ViewerComponentWrapper.jsx +70 -9
- package/src/views/builder/viewer/ViewerToolbar.jsx +285 -56
- package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
- package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
- package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
- package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
- package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
- package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
- package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
- package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
- package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
- package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
- package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
- package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
- package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
- package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
- package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
- package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
- package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
- package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
- package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
- package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
- package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
- package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
- package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
- package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
- package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
- package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
- package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
- package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
- package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
- package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
- package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
- package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
- package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
- package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
- package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
- package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
- package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
- package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
- package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
- package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +263 -5
- package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
- package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
- package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
- package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
- package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
- package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
- package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
- package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
- package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
- package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
- package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
- package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
- package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
- package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
- package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
- package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
- package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
- package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
- package/src/views/customFilter/CustomFilterDialog.js +1023 -660
- package/src/views/customFilter/FixedFilterDialog.js +649 -0
- package/src/views/customFilter/SearchFilterDialog.js +248 -0
- package/src/views/genericTable/BuilderExpressionParams.js +3 -3
- package/src/views/genericTable/ColumnConfiguratorDialog.js +33 -24
- package/src/views/genericTable/FixedFilterDialog.js +3 -2
- package/src/views/genericTable/FormattingSettingsDialog.js +8 -3
- package/src/views/genericTable/SGrid.js +821 -448
- package/src/views/genericTable/SearchFilterDialog.js +3 -2
- package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
- package/src/views/genericTable/convertStringFunctions.js +274 -138
- package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
- package/src/views/genericTable/updateRefHelpers.js +9 -6
- package/src/views/printBuilder/PrintBuilderViewer.jsx +627 -0
- package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
- package/src/views/rolePermissions/UpdateReportPermissionDialog.js +3 -2
- package/src/@core/components/auth/AclGuard.js +0 -55
- package/src/@core/components/auth/AuthGuard.js +0 -40
- package/src/@core/components/auth/GuestGuard.js +0 -30
- package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
- package/src/@core/components/custom-inputs/Image.jsx +0 -78
- package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
- package/src/@core/components/customizer/index.jsx +0 -470
- package/src/@core/components/customizer/styles.module.css +0 -169
- package/src/@core/components/mui/Avatar.jsx +0 -41
- package/src/@core/components/mui/Badge.jsx +0 -20
- package/src/@core/components/mui/IconButton.jsx +0 -74
- package/src/@core/components/mui/TabList.jsx +0 -60
- package/src/@core/components/option-menu/index.jsx +0 -137
- package/src/@core/components/scroll-to-top/index.jsx +0 -43
- package/src/@core/components/spinner/index.js +0 -26
- package/src/@core/components/window-wrapper/index.js +0 -27
- package/src/@core/contexts/settingsContext.jsx +0 -98
- package/src/@core/hooks/useBgColor.js +0 -63
- package/src/@core/hooks/useImageVariant.js +0 -27
- package/src/@core/hooks/useLayoutInit.js +0 -37
- package/src/@core/hooks/useObjectCookie.js +0 -18
- package/src/@core/hooks/useSettings.jsx +0 -15
- package/src/@core/layouts/BlankLayout.js +0 -37
- package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
- package/src/@core/layouts/HorizontalLayout.jsx +0 -151
- package/src/@core/layouts/Layout.js +0 -39
- package/src/@core/layouts/VerticalLayout.jsx +0 -124
- package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
- package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
- package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
- package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
- package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
- package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
- package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
- package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
- package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
- package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
- package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
- package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
- package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
- package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
- package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
- package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
- package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
- package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
- package/src/@core/layouts/utils.js +0 -69
- package/src/@core/styles/Table.module.css +0 -93
- package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
- package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
- package/src/@core/styles/libs/fullcalendar/index.js +0 -461
- package/src/@core/styles/libs/keen-slider/index.js +0 -111
- package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
- package/src/@core/styles/libs/react-cleave/index.js +0 -33
- package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
- package/src/@core/styles/libs/react-datepicker/index.js +0 -388
- package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
- package/src/@core/styles/libs/react-dropzone/index.js +0 -76
- package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
- package/src/@core/styles/libs/recharts/index.js +0 -47
- package/src/@core/styles/stepper.js +0 -103
- package/src/@core/styles/vertical/menuItemStyles.js +0 -138
- package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
- package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
- package/src/@core/svg/ContentCompact.jsx +0 -17
- package/src/@core/svg/ContentWide.jsx +0 -17
- package/src/@core/svg/DirectionLtr.jsx +0 -93
- package/src/@core/svg/DirectionRtl.jsx +0 -93
- package/src/@core/svg/LayoutCollapsed.jsx +0 -59
- package/src/@core/svg/LayoutHorizontal.jsx +0 -42
- package/src/@core/svg/LayoutVertical.jsx +0 -59
- package/src/@core/svg/Logo.jsx +0 -76
- package/src/@core/svg/SkinBordered.jsx +0 -54
- package/src/@core/svg/SkinDefault.jsx +0 -59
- package/src/@core/tailwind/plugin.js +0 -78
- package/src/@core/theme/ThemeComponent.js +0 -63
- package/src/@core/theme/ThemeOptions.js +0 -71
- package/src/@core/theme/breakpoints/index.js +0 -11
- package/src/@core/theme/colorSchemes.js +0 -326
- package/src/@core/theme/customShadows.js +0 -11
- package/src/@core/theme/globalStyles.js +0 -81
- package/src/@core/theme/index.js +0 -42
- package/src/@core/theme/overrides/accordion.js +0 -51
- package/src/@core/theme/overrides/accordion.jsx +0 -85
- package/src/@core/theme/overrides/alerts.js +0 -110
- package/src/@core/theme/overrides/alerts.jsx +0 -180
- package/src/@core/theme/overrides/autocomplete.js +0 -14
- package/src/@core/theme/overrides/autocomplete.jsx +0 -68
- package/src/@core/theme/overrides/avatar.js +0 -38
- package/src/@core/theme/overrides/avatars.js +0 -27
- package/src/@core/theme/overrides/backdrop.js +0 -22
- package/src/@core/theme/overrides/badges.js +0 -16
- package/src/@core/theme/overrides/breadcrumbs.js +0 -11
- package/src/@core/theme/overrides/button-group.js +0 -84
- package/src/@core/theme/overrides/button.js +0 -93
- package/src/@core/theme/overrides/buttonGroup.js +0 -9
- package/src/@core/theme/overrides/card.js +0 -83
- package/src/@core/theme/overrides/checkbox.jsx +0 -95
- package/src/@core/theme/overrides/chip.js +0 -72
- package/src/@core/theme/overrides/dataGrid.js +0 -114
- package/src/@core/theme/overrides/dateTimePicker.js +0 -65
- package/src/@core/theme/overrides/dialog.js +0 -120
- package/src/@core/theme/overrides/divider.js +0 -13
- package/src/@core/theme/overrides/drawer.js +0 -20
- package/src/@core/theme/overrides/fab.js +0 -13
- package/src/@core/theme/overrides/form-control-label.js +0 -19
- package/src/@core/theme/overrides/icon-button.js +0 -145
- package/src/@core/theme/overrides/index.js +0 -103
- package/src/@core/theme/overrides/input.js +0 -72
- package/src/@core/theme/overrides/link.js +0 -9
- package/src/@core/theme/overrides/list.js +0 -44
- package/src/@core/theme/overrides/menu.js +0 -25
- package/src/@core/theme/overrides/pagination.js +0 -41
- package/src/@core/theme/overrides/paper.js +0 -9
- package/src/@core/theme/overrides/popover.js +0 -16
- package/src/@core/theme/overrides/progress.js +0 -38
- package/src/@core/theme/overrides/radio.jsx +0 -80
- package/src/@core/theme/overrides/rating.js +0 -16
- package/src/@core/theme/overrides/rating.jsx +0 -32
- package/src/@core/theme/overrides/select.js +0 -19
- package/src/@core/theme/overrides/select.jsx +0 -52
- package/src/@core/theme/overrides/slider.js +0 -97
- package/src/@core/theme/overrides/snackbar.js +0 -19
- package/src/@core/theme/overrides/switch.js +0 -73
- package/src/@core/theme/overrides/switches.js +0 -25
- package/src/@core/theme/overrides/table-pagination.js +0 -39
- package/src/@core/theme/overrides/table.js +0 -81
- package/src/@core/theme/overrides/tabs.js +0 -30
- package/src/@core/theme/overrides/timeline.js +0 -80
- package/src/@core/theme/overrides/toggle-button.js +0 -33
- package/src/@core/theme/overrides/toggleButton.js +0 -16
- package/src/@core/theme/overrides/tooltip.js +0 -21
- package/src/@core/theme/overrides/typography.js +0 -13
- package/src/@core/theme/palette/index.js +0 -107
- package/src/@core/theme/shadows/index.js +0 -61
- package/src/@core/theme/shadows.js +0 -12
- package/src/@core/theme/spacing/index.js +0 -3
- package/src/@core/theme/spacing.js +0 -5
- package/src/@core/theme/typography/index.js +0 -65
- package/src/@core/theme/typography.js +0 -84
- package/src/@core/utils/create-emotion-cache.js +0 -5
- package/src/@core/utils/hex-to-rgba.js +0 -11
- package/src/@core/utils/serverHelpers.js +0 -45
- package/src/@menu/components/RouterLink.jsx +0 -18
- package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
- package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
- package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
- package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
- package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
- package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
- package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
- package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
- package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
- package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
- package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
- package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
- package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
- package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
- package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
- package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
- package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
- package/src/@menu/contexts/verticalNavContext.jsx +0 -65
- package/src/@menu/defaultConfigs.js +0 -12
- package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
- package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
- package/src/@menu/hooks/useMediaQuery.jsx +0 -29
- package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
- package/src/@menu/hooks/useVerticalNav.jsx +0 -19
- package/src/@menu/horizontal-menu/index.jsx +0 -8
- package/src/@menu/styles/StyledBackdrop.jsx +0 -15
- package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
- package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
- package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
- package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
- package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
- package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
- package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
- package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
- package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
- package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
- package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
- package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
- package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
- package/src/@menu/styles/styles.module.css +0 -5
- package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
- package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
- package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
- package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
- package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
- package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
- package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
- package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
- package/src/@menu/svg/ChevronRight.jsx +0 -9
- package/src/@menu/svg/Close.jsx +0 -12
- package/src/@menu/svg/RadioCircle.jsx +0 -12
- package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
- package/src/@menu/utils/menuClasses.js +0 -44
- package/src/@menu/utils/menuUtils.jsx +0 -145
- package/src/@menu/vertical-menu/index.jsx +0 -11
- package/src/configs/acl.js +0 -115
- package/src/configs/auth.js +0 -5
- package/src/configs/aws-exports.js +0 -30
- package/src/configs/firebase.js +0 -25
- package/src/configs/i18n.js +0 -34
- package/src/configs/primaryColorConfig.js +0 -35
- package/src/configs/themeConfig.js +0 -44
- package/src/layouts/UserLayout.js +0 -94
- package/src/layouts/UserThemeOptions.js +0 -191
- package/src/layouts/components/Direction.js +0 -30
- package/src/layouts/components/HtmlTooltip.js +0 -15
- package/src/layouts/components/Translations.js +0 -11
- package/src/layouts/components/UserDropdown.js +0 -217
- package/src/layouts/components/UserIcon.js +0 -40
- package/src/layouts/components/acl/Can.js +0 -6
- package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
- package/src/layouts/components/acl/CanViewNavLink.js +0 -17
- package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
- package/src/layouts/components/horizontal/AppBarContent.js +0 -39
- package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
- package/src/layouts/components/mui/StepperComps.js +0 -55
- package/src/layouts/components/vertical/AppBarContent.js +0 -35
- package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
- package/src/libs/ApexCharts.jsx +0 -5
- package/src/libs/ReactPlayer.jsx +0 -5
- package/src/libs/Recharts.jsx +0 -4
- package/src/libs/auth.js +0 -124
- package/src/libs/styles/AppFullCalendar.js +0 -505
- package/src/libs/styles/AppKeenSlider.js +0 -116
- package/src/libs/styles/AppReactApexCharts.jsx +0 -110
- package/src/libs/styles/AppReactDatepicker.jsx +0 -470
- package/src/libs/styles/AppReactDropzone.js +0 -76
- package/src/libs/styles/AppReactToastify.jsx +0 -108
- package/src/libs/styles/AppRecharts.js +0 -55
- package/src/libs/styles/inputOtp.module.css +0 -39
- package/src/libs/styles/tiptapEditor.css +0 -72
- package/src/navigation/horizontal/index.js +0 -246
- package/src/navigation/vertical/index.js +0 -253
- package/src/pages/401.js +0 -70
- package/src/pages/404.js +0 -67
- package/src/pages/500.js +0 -68
- package/src/pages/[slug].js +0 -115
- package/src/pages/_document.js +0 -72
- package/src/pages/api/navigation/regenerate-registry.js +0 -116
- package/src/pages/api/navigation/save.js +0 -218
- package/src/pages/authModule/acl/index.js +0 -48
- package/src/pages/authModule/forgot-password/index.js +0 -228
- package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
- package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
- package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
- package/src/pages/authModule/privacy/index.js +0 -721
- package/src/pages/authModule/users/index.js +0 -210
- package/src/pages/login/index.js +0 -328
- package/src/pages/mainHome/index.js +0 -181
- package/src/views/builder/inspector/definitions/cell/main.js +0 -4
- package/src/views/builder/inspector/definitions/column/main.js +0 -9
- package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
- package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
- package/src/views/builder/inspector/definitions/table/main.js +0 -9
- package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
- package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
- package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
- package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
- package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
- package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
- package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
- package/src/views/pages/misc/FooterIllustrations.js +0 -47
- package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
- package/src/views/pages/users/UserManageDialog.js +0 -283
- package/src/views/pages/users/UserViewPage.js +0 -199
- package/src/views/users/AddUserNameDialog.js +0 -162
- package/src/views/users/ContactManage.js +0 -449
- package/src/views/users/ResetPasswordDialog.js +0 -242
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared number formatting utility.
|
|
3
|
+
*
|
|
4
|
+
* format options:
|
|
5
|
+
* 'number' — 1,234.56
|
|
6
|
+
* 'currency' — $1,234.56 (currencyCode defaults to USD)
|
|
7
|
+
* 'percent' — 12.4% (expects 0-100 range; pass asRatio:true for 0-1)
|
|
8
|
+
* 'compact' — 84.2k / 1.2M
|
|
9
|
+
* 'duration' — value treated as total seconds → "2h 14m 05s"
|
|
10
|
+
* 'bytes' — 1.2 MB / 4.3 GB
|
|
11
|
+
* 'custom' — returns raw value (caller formats via expression)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/** Sanitise a decimals value from an expression field.
|
|
15
|
+
* Accepts string/number, clamps to [0, 20], falls back to `fallback`. */
|
|
16
|
+
function clampDec(val, fallback = 0) {
|
|
17
|
+
if (val == null) return fallback
|
|
18
|
+
const n = Math.round(Number(val))
|
|
19
|
+
if (!isFinite(n) || n < 0) return fallback
|
|
20
|
+
return Math.min(20, n)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Sanitise prefix/suffix — ensure they are plain strings. */
|
|
24
|
+
function safeStr(val) {
|
|
25
|
+
if (val == null) return ''
|
|
26
|
+
return typeof val === 'string' ? val : String(val)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function formatNumber(value, {
|
|
30
|
+
format = 'number',
|
|
31
|
+
decimals,
|
|
32
|
+
prefix = '',
|
|
33
|
+
suffix = '',
|
|
34
|
+
locale = 'en-US',
|
|
35
|
+
currency = 'USD',
|
|
36
|
+
asRatio = false, // for percent: true means value is 0-1
|
|
37
|
+
} = {}) {
|
|
38
|
+
if (value == null || value === '') return '—'
|
|
39
|
+
const num = Number(value)
|
|
40
|
+
if (isNaN(num)) return String(value)
|
|
41
|
+
|
|
42
|
+
// Sanitise caller-supplied strings from expression fields
|
|
43
|
+
const pfx = safeStr(prefix)
|
|
44
|
+
const sfx = safeStr(suffix)
|
|
45
|
+
|
|
46
|
+
let core
|
|
47
|
+
|
|
48
|
+
switch (format) {
|
|
49
|
+
case 'currency': {
|
|
50
|
+
const dec = clampDec(decimals, 2)
|
|
51
|
+
core = new Intl.NumberFormat(locale, {
|
|
52
|
+
style: 'currency', currency: safeStr(currency) || 'USD',
|
|
53
|
+
minimumFractionDigits: dec, maximumFractionDigits: dec,
|
|
54
|
+
}).format(num)
|
|
55
|
+
break
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
case 'percent': {
|
|
59
|
+
const pct = asRatio ? num * 100 : num
|
|
60
|
+
const dec = clampDec(decimals, 1)
|
|
61
|
+
core = pct.toFixed(dec) + '%'
|
|
62
|
+
break
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
case 'compact': {
|
|
66
|
+
core = new Intl.NumberFormat(locale, {
|
|
67
|
+
notation: 'compact',
|
|
68
|
+
maximumFractionDigits: clampDec(decimals, 1),
|
|
69
|
+
}).format(num)
|
|
70
|
+
break
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
case 'duration': {
|
|
74
|
+
// value = total seconds
|
|
75
|
+
const totalSec = Math.abs(Math.round(num))
|
|
76
|
+
const h = Math.floor(totalSec / 3600)
|
|
77
|
+
const m = Math.floor((totalSec % 3600) / 60)
|
|
78
|
+
const s = totalSec % 60
|
|
79
|
+
const parts = []
|
|
80
|
+
if (h) parts.push(`${h}h`)
|
|
81
|
+
if (m || h) parts.push(`${m}m`)
|
|
82
|
+
parts.push(`${String(s).padStart(2, '0')}s`)
|
|
83
|
+
core = (num < 0 ? '-' : '') + parts.join(' ')
|
|
84
|
+
break
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
case 'bytes': {
|
|
88
|
+
const abs = Math.abs(num)
|
|
89
|
+
const sign = num < 0 ? '-' : ''
|
|
90
|
+
const dec = clampDec(decimals, 1)
|
|
91
|
+
if (abs >= 1e12) core = sign + (abs / 1e12).toFixed(dec) + ' TB'
|
|
92
|
+
else if (abs >= 1e9) core = sign + (abs / 1e9).toFixed(dec) + ' GB'
|
|
93
|
+
else if (abs >= 1e6) core = sign + (abs / 1e6).toFixed(dec) + ' MB'
|
|
94
|
+
else if (abs >= 1e3) core = sign + (abs / 1e3).toFixed(dec) + ' KB'
|
|
95
|
+
else core = sign + abs + ' B'
|
|
96
|
+
break
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
default: { // 'number'
|
|
100
|
+
const dec = clampDec(decimals, 0)
|
|
101
|
+
core = new Intl.NumberFormat(locale, {
|
|
102
|
+
minimumFractionDigits: dec,
|
|
103
|
+
maximumFractionDigits: dec,
|
|
104
|
+
}).format(num)
|
|
105
|
+
break
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return `${pfx}${core}${sfx}`
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Format a trend delta. Returns { text, positive, zero } */
|
|
113
|
+
export function formatTrend(value, { isPercent = true, decimals = 1, invertColors = false } = {}) {
|
|
114
|
+
if (value == null || value === '') return { text: '—', positive: null, zero: true }
|
|
115
|
+
const num = Number(value)
|
|
116
|
+
if (isNaN(num)) return { text: String(value), positive: null, zero: false }
|
|
117
|
+
const zero = num === 0
|
|
118
|
+
const positive = invertColors ? num < 0 : num > 0
|
|
119
|
+
const abs = Math.abs(num)
|
|
120
|
+
const text = (num > 0 ? '+' : num < 0 ? '−' : '') +
|
|
121
|
+
(isPercent ? abs.toFixed(decimals) + '%' : abs.toFixed(decimals))
|
|
122
|
+
return { text, positive, zero }
|
|
123
|
+
}
|
|
@@ -1,21 +1,68 @@
|
|
|
1
|
-
import { getJSCalculationFunction } from './jsExecutor'
|
|
1
|
+
import { getJSCalculationFunction, getUrlParams } from './jsExecutor'
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a node's props tab (main / style / advanced) into plain values.
|
|
5
|
+
*
|
|
6
|
+
* Accepts either:
|
|
7
|
+
* - a plain context object: { form, data, setData, dataRef, reportRefs, … }
|
|
8
|
+
* - a full viewerContext (has dataRef as a React ref with .current)
|
|
9
|
+
*
|
|
10
|
+
* Backward-compatible: callers that pass only { form, data } still work.
|
|
11
|
+
* Callers that pass the full viewerContext get dataItem / itemIndex / all
|
|
12
|
+
* page stores automatically, without any per-renderer boilerplate.
|
|
13
|
+
*/
|
|
3
14
|
export function resolveProps(node, tab, context = {}) {
|
|
4
15
|
const props = node.props?.[tab] ?? {}
|
|
5
16
|
const resolved = {}
|
|
6
17
|
|
|
18
|
+
const form = context.form ?? {}
|
|
19
|
+
const data = context.data ?? {}
|
|
20
|
+
const setData = context.setData ?? (() => {})
|
|
21
|
+
|
|
22
|
+
// dataRef may be a React ref ({ current: obj }) when viewerContext is passed
|
|
23
|
+
// directly, or a plain object when a custom resolveCtx is constructed.
|
|
24
|
+
const rawDataRef = context.dataRef
|
|
25
|
+
const dataRef = rawDataRef?.current !== undefined ? rawDataRef.current : (rawDataRef ?? {})
|
|
26
|
+
|
|
27
|
+
const rawReportRefs = context.reportRefs
|
|
28
|
+
const reportRefs = rawReportRefs?.current !== undefined ? rawReportRefs.current : (rawReportRefs ?? {})
|
|
29
|
+
|
|
30
|
+
const openDialog = context.openDialog ?? (() => {})
|
|
31
|
+
const closeDialog = context.closeDialog ?? (() => {})
|
|
32
|
+
const urlParams = getUrlParams()
|
|
33
|
+
|
|
34
|
+
// `page` — parent/main-page stores forwarded from the viewerContext.
|
|
35
|
+
// In isolated dialogs/embedded views these differ from the component's own data.
|
|
36
|
+
const page = context.page ?? {
|
|
37
|
+
data: context.pageData ?? data,
|
|
38
|
+
setData: context.pageSetData ?? setData,
|
|
39
|
+
dataRef: context.pageDataRef ?? dataRef,
|
|
40
|
+
reportRefs: context.pageReportRefs ?? reportRefs,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const execContext = {
|
|
44
|
+
form, data, setData, dataRef, reportRefs, openDialog, closeDialog, page,
|
|
45
|
+
// Repeater item context — present when inside a Repeater, null elsewhere
|
|
46
|
+
dataItem: context.dataItem ?? null,
|
|
47
|
+
itemIndex: context.itemIndex ?? null,
|
|
48
|
+
}
|
|
49
|
+
|
|
7
50
|
for (const [key, field] of Object.entries(props)) {
|
|
8
51
|
if (!field) continue
|
|
9
52
|
|
|
10
53
|
if ((field.valueType || field.type) === 'value') {
|
|
11
|
-
|
|
54
|
+
// Skip empty strings so the renderer's destructuring default kicks in.
|
|
55
|
+
// An explicitly cleared field should behave identically to "never set".
|
|
56
|
+
if (field.value !== '') resolved[key] = field.value
|
|
12
57
|
continue
|
|
13
58
|
}
|
|
14
59
|
|
|
15
60
|
if ((field.valueType || field.type) === 'expression' && field.expression?.code) {
|
|
16
61
|
try {
|
|
17
|
-
const calc = getJSCalculationFunction(field.expression.code,
|
|
18
|
-
|
|
62
|
+
const calc = getJSCalculationFunction(field.expression.code, execContext)
|
|
63
|
+
|
|
64
|
+
// Call Calculation with all args — old functions that only declare (form, data) ignore extras
|
|
65
|
+
const value = calc(form, data, setData, dataRef, reportRefs, openDialog, closeDialog, urlParams, page)
|
|
19
66
|
|
|
20
67
|
// Viewer prop resolution is synchronous. Skip unresolved promises.
|
|
21
68
|
if (value && typeof value.then === 'function') {
|
|
@@ -32,3 +79,25 @@ export function resolveProps(node, tab, context = {}) {
|
|
|
32
79
|
|
|
33
80
|
return resolved
|
|
34
81
|
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Resolve a scalar value from a KPI component's "value key" field.
|
|
85
|
+
*
|
|
86
|
+
* The field type is `expression`, so resolveProps already evaluates it.
|
|
87
|
+
* The result can be either:
|
|
88
|
+
* • a string → treat as a data key and look up data[key]
|
|
89
|
+
* • anything else (number, boolean, null …) → use the value directly
|
|
90
|
+
*
|
|
91
|
+
* This lets users write either:
|
|
92
|
+
* valueKey: "revenue" → data["revenue"]
|
|
93
|
+
* valueKey: data.price * data.qty → computed value used as-is
|
|
94
|
+
* valueKey: 42 → literal 42
|
|
95
|
+
*
|
|
96
|
+
* @param {*} key The resolved value from resolveProps (already evaluated)
|
|
97
|
+
* @param {object} data The current page data object
|
|
98
|
+
* @param {*} fallback Returned when key is null/undefined (default: undefined)
|
|
99
|
+
*/
|
|
100
|
+
export function resolveValue(key, data, fallback = undefined) {
|
|
101
|
+
if (key == null) return fallback
|
|
102
|
+
return typeof key === 'string' ? (data?.[key] ?? fallback) : key
|
|
103
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared threshold evaluation engine.
|
|
3
|
+
*
|
|
4
|
+
* A threshold rule:
|
|
5
|
+
* { operator: '<' | '<=' | '>' | '>=' | '==' | '!=' | 'between',
|
|
6
|
+
* value: number,
|
|
7
|
+
* value2: number, // only used for 'between'
|
|
8
|
+
* color: string, // MUI palette key or CSS color
|
|
9
|
+
* label: string, // optional override label
|
|
10
|
+
* bg: string, // optional background override
|
|
11
|
+
* }
|
|
12
|
+
*
|
|
13
|
+
* evaluateThreshold returns the first matching rule (or null).
|
|
14
|
+
* resolveColor maps a MUI palette key to a CSS color.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const MUI_COLOR_MAP = {
|
|
18
|
+
// semantic
|
|
19
|
+
error: { color: '#d32f2f', bg: '#ffebee' },
|
|
20
|
+
warning: { color: '#e65100', bg: '#fff3e0' },
|
|
21
|
+
success: { color: '#2e7d32', bg: '#e8f5e9' },
|
|
22
|
+
info: { color: '#0277bd', bg: '#e1f5fe' },
|
|
23
|
+
primary: { color: '#1565c0', bg: '#e3f2fd' },
|
|
24
|
+
secondary:{ color: '#6a1b9a', bg: '#f3e5f5' },
|
|
25
|
+
// extras
|
|
26
|
+
purple: { color: '#7b1fa2', bg: '#f3e5f5' },
|
|
27
|
+
pink: { color: '#c2185b', bg: '#fce4ec' },
|
|
28
|
+
teal: { color: '#00695c', bg: '#e0f2f1' },
|
|
29
|
+
cyan: { color: '#00838f', bg: '#e0f7fa' },
|
|
30
|
+
orange: { color: '#e64a19', bg: '#fbe9e7' },
|
|
31
|
+
indigo: { color: '#283593', bg: '#e8eaf6' },
|
|
32
|
+
default: { color: 'inherit', bg: 'transparent' },
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Resolve a color string: MUI key → { color, bg } or pass-through. */
|
|
36
|
+
export function resolveMuiColor(key) {
|
|
37
|
+
return MUI_COLOR_MAP[key] ?? { color: key ?? 'inherit', bg: 'transparent' }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Evaluate a value against a threshold list. Returns the first matching rule or null. */
|
|
41
|
+
export function evaluateThreshold(value, thresholds) {
|
|
42
|
+
if (!Array.isArray(thresholds) || !thresholds.length) return null
|
|
43
|
+
const v = Number(value)
|
|
44
|
+
for (const rule of thresholds) {
|
|
45
|
+
if (matches(v, rule)) return rule
|
|
46
|
+
}
|
|
47
|
+
return null
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function matches(v, rule) {
|
|
51
|
+
const a = Number(rule.value)
|
|
52
|
+
const b = Number(rule.value2)
|
|
53
|
+
switch (rule.operator) {
|
|
54
|
+
case '<': return v < a
|
|
55
|
+
case '<=': return v <= a
|
|
56
|
+
case '>': return v > a
|
|
57
|
+
case '>=': return v >= a
|
|
58
|
+
case '==': return v === a
|
|
59
|
+
case '!=': return v !== a
|
|
60
|
+
case 'between': return v >= a && v <= b
|
|
61
|
+
default: return false
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Convenience: returns { color, bg } for a value+thresholds pair.
|
|
67
|
+
* Falls back to { color: 'inherit', bg: 'transparent' }.
|
|
68
|
+
*/
|
|
69
|
+
export function thresholdColors(value, thresholds) {
|
|
70
|
+
const rule = evaluateThreshold(value, thresholds)
|
|
71
|
+
if (!rule) return { color: 'inherit', bg: 'transparent' }
|
|
72
|
+
const base = resolveMuiColor(rule.color)
|
|
73
|
+
return {
|
|
74
|
+
color: rule.colorOverride ?? base.color,
|
|
75
|
+
bg: rule.bg ?? base.bg,
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -10,6 +10,37 @@ export function findNode(node, targetId) {
|
|
|
10
10
|
return null
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Find a node anywhere in the schema — searches both root tree and dialogs array.
|
|
15
|
+
* Returns { node, location: 'root' | 'dialog', dialogId? }
|
|
16
|
+
*/
|
|
17
|
+
export function findNodeAnywhere(schema, targetId) {
|
|
18
|
+
const inRoot = findNode(schema.root, targetId)
|
|
19
|
+
if (inRoot) return { node: inRoot, location: 'root' }
|
|
20
|
+
|
|
21
|
+
for (const dialog of schema.dialogs ?? []) {
|
|
22
|
+
const inDialog = findNode(dialog, targetId)
|
|
23
|
+
if (inDialog) return { node: inDialog, location: 'dialog', dialogId: dialog.id }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return { node: null, location: null }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Update a node anywhere in the schema — patches root tree or the matching dialog.
|
|
31
|
+
*/
|
|
32
|
+
export function updateNodeAnywhere(schema, nodeId, patch, location, dialogId) {
|
|
33
|
+
if (location === 'dialog') {
|
|
34
|
+
return {
|
|
35
|
+
...schema,
|
|
36
|
+
dialogs: (schema.dialogs ?? []).map(d =>
|
|
37
|
+
d.id === dialogId ? updateNodeInTree(d, nodeId, patch) : d
|
|
38
|
+
),
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { ...schema, root: updateNodeInTree(schema.root, nodeId, patch) }
|
|
42
|
+
}
|
|
43
|
+
|
|
13
44
|
export function removeFromTree(node, targetId) {
|
|
14
45
|
if (!node.children) return node
|
|
15
46
|
|
|
@@ -9,10 +9,10 @@ import React, {
|
|
|
9
9
|
import Autocomplete from '@mui/material/Autocomplete';
|
|
10
10
|
import TextField from '@mui/material/TextField';
|
|
11
11
|
import Chip from '@mui/material/Chip';
|
|
12
|
-
import {
|
|
13
|
-
import ThemeComponent from 'src/@core/theme/ThemeComponent';
|
|
12
|
+
import { ThemeProvider, createTheme, lighten, styled } from '@mui/material/styles';
|
|
14
13
|
import moment from 'moment';
|
|
15
|
-
|
|
14
|
+
|
|
15
|
+
const defaultTheme = createTheme();
|
|
16
16
|
import izColors from 'src/configs/izColors.json';
|
|
17
17
|
|
|
18
18
|
// Utility for nested value access
|
|
@@ -112,9 +112,7 @@ const AutocompleteEditor = (props, ref) => {
|
|
|
112
112
|
};
|
|
113
113
|
|
|
114
114
|
return (
|
|
115
|
-
<
|
|
116
|
-
{({settings}) => (
|
|
117
|
-
<ThemeComponent settings={settings}>
|
|
115
|
+
<ThemeProvider theme={defaultTheme}>
|
|
118
116
|
<Autocomplete
|
|
119
117
|
multiple={!isSingle}
|
|
120
118
|
size="small"
|
|
@@ -163,9 +161,7 @@ const AutocompleteEditor = (props, ref) => {
|
|
|
163
161
|
))
|
|
164
162
|
}
|
|
165
163
|
/>
|
|
166
|
-
|
|
167
|
-
)}
|
|
168
|
-
</SettingsConsumer>
|
|
164
|
+
</ThemeProvider>
|
|
169
165
|
);
|
|
170
166
|
};
|
|
171
167
|
|
package/src/services/config.js
CHANGED
|
@@ -39,9 +39,17 @@ const _config = {
|
|
|
39
39
|
|
|
40
40
|
// Default token reader — reads the key Mazajk (and most host apps) use.
|
|
41
41
|
// Override via configureRoboByte({ getAccessToken }) or via the provider prop.
|
|
42
|
+
//
|
|
43
|
+
// Resolution order:
|
|
44
|
+
// 1. localStorage 'accessToken' (normal auth flow — takes priority)
|
|
45
|
+
// 2. NEXT_PUBLIC_DEV_ACCESS_TOKEN env var (dev convenience, .env.local only)
|
|
42
46
|
getAccessToken: () => {
|
|
43
47
|
if (typeof window === 'undefined') return null
|
|
44
|
-
return
|
|
48
|
+
return (
|
|
49
|
+
localStorage.getItem('accessToken') ??
|
|
50
|
+
(process.env.NODE_ENV === 'development' ? process.env.NEXT_PUBLIC_DEV_ACCESS_TOKEN : null) ??
|
|
51
|
+
null
|
|
52
|
+
)
|
|
45
53
|
},
|
|
46
54
|
|
|
47
55
|
// Default user reader — parses the JSON object Mazajk stores in localStorage.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* globalStore — cross-route reactive data store.
|
|
3
|
+
*
|
|
4
|
+
* Lives at module scope so it survives Next.js client-side navigations.
|
|
5
|
+
* Any page, dialog, renderer, or Calculation function can read and write it.
|
|
6
|
+
*
|
|
7
|
+
* ── In action code (Calculation functions) ───────────────────────────────────
|
|
8
|
+
*
|
|
9
|
+
* // Read current global state
|
|
10
|
+
* console.log(globalData.selectedUser)
|
|
11
|
+
*
|
|
12
|
+
* // Write (like setData but global — persists across route changes)
|
|
13
|
+
* setGlobalData(prev => ({ ...prev, selectedUser: clickedItem }))
|
|
14
|
+
* setGlobalData({ theme: 'dark', locale: 'en' }) // full replace also works
|
|
15
|
+
*
|
|
16
|
+
* // Then navigate — globalData.selectedUser is still there on the next page
|
|
17
|
+
* router.push('/user-detail')
|
|
18
|
+
*
|
|
19
|
+
* ── In React components ───────────────────────────────────────────────────────
|
|
20
|
+
*
|
|
21
|
+
* import { useGlobalStore } from 'src/hooks/useGlobalStore'
|
|
22
|
+
*
|
|
23
|
+
* function MyRenderer() {
|
|
24
|
+
* const { globalData, setGlobalData } = useGlobalStore()
|
|
25
|
+
* return <div>{globalData.selectedUser?.name}</div>
|
|
26
|
+
* }
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
// ── Internal state ────────────────────────────────────────────────────────────
|
|
30
|
+
|
|
31
|
+
let _state = {}
|
|
32
|
+
const _listeners = new Set()
|
|
33
|
+
|
|
34
|
+
// ── Public API ────────────────────────────────────────────────────────────────
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Returns a snapshot of the current global state.
|
|
38
|
+
* This is synchronous and safe to call from anywhere, including jsExecutor.
|
|
39
|
+
* @returns {object}
|
|
40
|
+
*/
|
|
41
|
+
export function getGlobalData() {
|
|
42
|
+
return _state
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Updates the global state.
|
|
47
|
+
* Accepts either a plain object (shallow-merged) or an updater function
|
|
48
|
+
* that receives the previous state and returns the next state.
|
|
49
|
+
*
|
|
50
|
+
* All subscribed React components are notified synchronously so they
|
|
51
|
+
* re-render with the new values.
|
|
52
|
+
*
|
|
53
|
+
* @param {object | ((prev: object) => object)} updater
|
|
54
|
+
*/
|
|
55
|
+
export function setGlobalData(updater) {
|
|
56
|
+
const next = typeof updater === 'function' ? updater(_state) : updater
|
|
57
|
+
_state = next && typeof next === 'object' ? { ..._state, ...next } : _state
|
|
58
|
+
_listeners.forEach(fn => fn(_state))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Subscribe to global state changes.
|
|
63
|
+
* Returns an unsubscribe function — call it in useEffect cleanup.
|
|
64
|
+
*
|
|
65
|
+
* @param {(state: object) => void} listener
|
|
66
|
+
* @returns {() => void} unsubscribe
|
|
67
|
+
*/
|
|
68
|
+
export function subscribeGlobal(listener) {
|
|
69
|
+
_listeners.add(listener)
|
|
70
|
+
return () => _listeners.delete(listener)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Resets the global store to an empty object.
|
|
75
|
+
* Useful for logout / session reset.
|
|
76
|
+
*/
|
|
77
|
+
export function resetGlobalData() {
|
|
78
|
+
_state = {}
|
|
79
|
+
_listeners.forEach(fn => fn(_state))
|
|
80
|
+
}
|
|
@@ -3,12 +3,12 @@ import Autocomplete from '@mui/material/Autocomplete';
|
|
|
3
3
|
import TextField from '@mui/material/TextField';
|
|
4
4
|
import Chip from '@mui/material/Chip';
|
|
5
5
|
import { createRoot } from 'react-dom/client';
|
|
6
|
-
import
|
|
6
|
+
import { ThemeProvider, createTheme, darken, lighten, styled } from "@mui/material/styles";
|
|
7
7
|
import moment from 'moment';
|
|
8
8
|
import Typography from "@mui/material/Typography";
|
|
9
|
-
import { darken, lighten, styled } from "@mui/material/styles";
|
|
10
9
|
import izColors from "src/configs/izColors.json"
|
|
11
|
-
|
|
10
|
+
|
|
11
|
+
const defaultTheme = createTheme();
|
|
12
12
|
const AutocompleteEditor = React.memo(
|
|
13
13
|
forwardRef((props, ref) => {
|
|
14
14
|
// Initialize as an array for multi-selection.
|
|
@@ -122,9 +122,7 @@ const AutocompleteEditor = React.memo(
|
|
|
122
122
|
});
|
|
123
123
|
|
|
124
124
|
return (
|
|
125
|
-
<
|
|
126
|
-
{({ settings }) => (
|
|
127
|
-
<ThemeComponent settings={settings}>
|
|
125
|
+
<ThemeProvider theme={defaultTheme}>
|
|
128
126
|
<Autocomplete
|
|
129
127
|
multiple={!props.isSingle === true}
|
|
130
128
|
size="small"
|
|
@@ -179,9 +177,7 @@ const AutocompleteEditor = React.memo(
|
|
|
179
177
|
))
|
|
180
178
|
}
|
|
181
179
|
/>
|
|
182
|
-
|
|
183
|
-
)}
|
|
184
|
-
</SettingsConsumer>
|
|
180
|
+
</ThemeProvider>
|
|
185
181
|
);
|
|
186
182
|
})
|
|
187
183
|
);
|
|
@@ -3,13 +3,13 @@ import Autocomplete from '@mui/material/Autocomplete';
|
|
|
3
3
|
import TextField from '@mui/material/TextField';
|
|
4
4
|
import Chip from '@mui/material/Chip';
|
|
5
5
|
import {createRoot} from 'react-dom/client';
|
|
6
|
-
import {
|
|
7
|
-
import ThemeComponent from 'src/@core/theme/ThemeComponent';
|
|
6
|
+
import { ThemeProvider, createTheme, darken, lighten, styled } from "@mui/material/styles";
|
|
8
7
|
import moment from 'moment';
|
|
9
8
|
import Typography from "@mui/material/Typography";
|
|
10
|
-
import {darken, lighten, styled} from "@mui/material/styles";
|
|
11
9
|
import izColors from "src/configs/izColors.json"
|
|
12
10
|
|
|
11
|
+
const defaultTheme = createTheme();
|
|
12
|
+
|
|
13
13
|
const AutocompleteEditor = React.memo(
|
|
14
14
|
forwardRef((props, ref) => {
|
|
15
15
|
// Initialize as an array for multi-selection.
|
|
@@ -128,9 +128,7 @@ const AutocompleteEditor = React.memo(
|
|
|
128
128
|
});
|
|
129
129
|
|
|
130
130
|
return (
|
|
131
|
-
<
|
|
132
|
-
{({settings}) => (
|
|
133
|
-
<ThemeComponent settings={settings}>
|
|
131
|
+
<ThemeProvider theme={defaultTheme}>
|
|
134
132
|
<Autocomplete
|
|
135
133
|
multiple={!props.isSingle === true}
|
|
136
134
|
size="small"
|
|
@@ -198,9 +196,7 @@ const AutocompleteEditor = React.memo(
|
|
|
198
196
|
))
|
|
199
197
|
}
|
|
200
198
|
/>
|
|
201
|
-
|
|
202
|
-
)}
|
|
203
|
-
</SettingsConsumer>
|
|
199
|
+
</ThemeProvider>
|
|
204
200
|
);
|
|
205
201
|
})
|
|
206
202
|
);
|