robobyte-front-builder 1.0.19 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/README.md +211 -0
  2. package/next.config.js +19 -48
  3. package/package.json +39 -85
  4. package/src/context/BuilderContext.jsx +134 -6
  5. package/src/context/SystemContext.js +2 -2
  6. package/src/hooks/useGlobalStore.js +36 -0
  7. package/src/hooks/useTimerEngine.js +54 -0
  8. package/src/lib/index.js +11 -3
  9. package/src/lib/layouts/BlankLayout.jsx +13 -0
  10. package/src/lib/providers/RoboByteFrontBuilderProvider.jsx +61 -7
  11. package/src/lib/themes/builderTheme.js +41 -0
  12. package/src/pages/_app.js +32 -134
  13. package/src/pages/api/ai.js +87 -0
  14. package/src/pages/builders/report/index.js +1 -0
  15. package/src/pages/builders/report/list/index.js +1 -0
  16. package/src/pages/builders/report/viewer/index.js +1 -0
  17. package/src/pages/index.js +88 -37
  18. package/src/pages/printBuilder/index.jsx +263 -0
  19. package/src/pages/printBuilder/layouts/index.jsx +298 -0
  20. package/src/pages/reportModule/reportBuilder/index.js +8 -6
  21. package/src/pages/reportModule/reportBuilder/reportViewer/index.js +33 -22
  22. package/src/pages/reportModule/reportBuilder/reports/index.js +3 -5
  23. package/src/pages/reportModule/reportBuilder/reportsPermissions/index.js +2 -3
  24. package/src/pages/viewBuilder/index.jsx +117 -32
  25. package/src/pages/viewBuilder/views/index.js +3 -3
  26. package/src/pages/viewer/[id]/index.js +2 -1
  27. package/src/services/DeleteService.js +31 -60
  28. package/src/services/Endpoints/PrintLayoutEndpoints.js +42 -0
  29. package/src/services/Endpoints.js +2 -0
  30. package/src/services/GetService.js +33 -54
  31. package/src/services/PatchService.js +38 -65
  32. package/src/services/PostService.js +37 -63
  33. package/src/services/UpdateService.js +39 -65
  34. package/src/services/builderHelper/actionExecutor.js +141 -25
  35. package/src/services/builderHelper/builderHelper.js +92 -0
  36. package/src/services/builderHelper/colorSchema.js +95 -0
  37. package/src/services/builderHelper/iconResolver.js +50 -0
  38. package/src/services/builderHelper/jsExecutor.js +212 -46
  39. package/src/services/builderHelper/nodeFactory.js +32 -15
  40. package/src/services/builderHelper/numberFormat.js +123 -0
  41. package/src/services/builderHelper/resolveProps.js +73 -4
  42. package/src/services/builderHelper/thresholdEngine.js +77 -0
  43. package/src/services/builderHelper/tree.js +31 -0
  44. package/src/services/components/agGridAutoComplete.js +5 -9
  45. package/src/services/config.js +9 -1
  46. package/src/services/globalStore.js +80 -0
  47. package/src/services/helper/multiSelectEditor.js +5 -9
  48. package/src/services/helper/multiSelectEditorByBuilder.js +5 -9
  49. package/src/services/reportData/fetchReportData.js +69 -28
  50. package/src/services/routerRef.js +35 -0
  51. package/src/views/ConfirmDialog.js +2 -2
  52. package/src/views/builder/JSEditor.js +105 -107
  53. package/src/views/builder/inspector/Inspector.jsx +6 -9
  54. package/src/views/builder/inspector/Tabs/ComponentActionsTab.jsx +7 -13
  55. package/src/views/builder/inspector/Tabs/MainTab.jsx +143 -25
  56. package/src/views/builder/inspector/Tabs/RulesTab.jsx +9 -24
  57. package/src/views/builder/inspector/Tabs/StyleTab.jsx +9 -24
  58. package/src/views/builder/inspector/definitions/autocomplete/main.js +4 -6
  59. package/src/views/builder/inspector/definitions/banner/actions.js +7 -0
  60. package/src/views/builder/inspector/definitions/banner/main.js +22 -0
  61. package/src/views/builder/inspector/definitions/banner/rules.js +1 -0
  62. package/src/views/builder/inspector/definitions/banner/style.js +1 -0
  63. package/src/views/builder/inspector/definitions/breadcrumb/main.js +43 -6
  64. package/src/views/builder/inspector/definitions/button/main.js +11 -12
  65. package/src/views/builder/inspector/definitions/button/style.js +18 -30
  66. package/src/views/builder/inspector/definitions/checkbox/actions.js +3 -1
  67. package/src/views/builder/inspector/definitions/checkbox/main.js +4 -6
  68. package/src/views/builder/inspector/definitions/common/main.js +13 -2
  69. package/src/views/builder/inspector/definitions/dataGrid/main.js +23 -0
  70. package/src/views/builder/inspector/definitions/dataTableViewer/main.js +46 -0
  71. package/src/views/builder/inspector/definitions/datepicker/actions.js +3 -1
  72. package/src/views/builder/inspector/definitions/datepicker/main.js +6 -14
  73. package/src/views/builder/inspector/definitions/dialog/main.js +36 -0
  74. package/src/views/builder/inspector/definitions/dropdown/main.js +5 -8
  75. package/src/views/builder/inspector/definitions/excelUpload/actions.js +23 -0
  76. package/src/views/builder/inspector/definitions/excelUpload/main.js +17 -0
  77. package/src/views/builder/inspector/definitions/excelUpload/rules.js +1 -0
  78. package/src/views/builder/inspector/definitions/excelUpload/style.js +45 -0
  79. package/src/views/builder/inspector/definitions/header/main.js +10 -1
  80. package/src/views/builder/inspector/definitions/index.js +106 -19
  81. package/src/views/builder/inspector/definitions/input/actions.js +4 -1
  82. package/src/views/builder/inspector/definitions/input/main.js +20 -11
  83. package/src/views/builder/inspector/definitions/kpi/avatarGroup.js +22 -0
  84. package/src/views/builder/inspector/definitions/kpi/badge.js +17 -0
  85. package/src/views/builder/inspector/definitions/kpi/bulletChart.js +47 -0
  86. package/src/views/builder/inspector/definitions/kpi/chart.js +55 -0
  87. package/src/views/builder/inspector/definitions/kpi/colorScale.js +60 -0
  88. package/src/views/builder/inspector/definitions/kpi/comparisonBars.js +41 -0
  89. package/src/views/builder/inspector/definitions/kpi/countdown.js +46 -0
  90. package/src/views/builder/inspector/definitions/kpi/donut.js +51 -0
  91. package/src/views/builder/inspector/definitions/kpi/funnel.js +25 -0
  92. package/src/views/builder/inspector/definitions/kpi/gauge.js +39 -0
  93. package/src/views/builder/inspector/definitions/kpi/heatmapGrid.js +96 -0
  94. package/src/views/builder/inspector/definitions/kpi/iconBox.js +20 -0
  95. package/src/views/builder/inspector/definitions/kpi/metric.js +45 -0
  96. package/src/views/builder/inspector/definitions/kpi/rating.js +27 -0
  97. package/src/views/builder/inspector/definitions/kpi/statusDot.js +18 -0
  98. package/src/views/builder/inspector/definitions/kpi/stepStage.js +65 -0
  99. package/src/views/builder/inspector/definitions/kpi/tagList.js +32 -0
  100. package/src/views/builder/inspector/definitions/kpi/timeline.js +80 -0
  101. package/src/views/builder/inspector/definitions/kpi/trend.js +20 -0
  102. package/src/views/builder/inspector/definitions/label/main.js +10 -1
  103. package/src/views/builder/inspector/definitions/layout/main.js +27 -3
  104. package/src/views/builder/inspector/definitions/number/main.js +6 -14
  105. package/src/views/builder/inspector/definitions/pageNumber/main.js +21 -0
  106. package/src/views/builder/inspector/definitions/popover/main.js +71 -0
  107. package/src/views/builder/inspector/definitions/radio/main.js +5 -8
  108. package/src/views/builder/inspector/definitions/repeater/main.js +31 -0
  109. package/src/views/builder/inspector/definitions/reportViewer/main.js +15 -1
  110. package/src/views/builder/inspector/definitions/richtext/main.js +5 -8
  111. package/src/views/builder/inspector/definitions/signature/main.js +4 -1
  112. package/src/views/builder/inspector/definitions/tag/main.js +5 -8
  113. package/src/views/builder/inspector/definitions/textarea/actions.js +4 -1
  114. package/src/views/builder/inspector/definitions/textarea/main.js +5 -7
  115. package/src/views/builder/inspector/definitions/time/main.js +5 -8
  116. package/src/views/builder/inspector/definitions/toggle/main.js +5 -19
  117. package/src/views/builder/inspector/definitions/treeView/main.js +61 -0
  118. package/src/views/builder/inspector/definitions/viewRenderer/main.js +53 -0
  119. package/src/views/builder/inspector/definitions/wizard/main.js +68 -0
  120. package/src/views/builder/inspector/definitions/wizard-step/main.js +25 -0
  121. package/src/views/builder/inspector/fields/ActionsConfigEditor.jsx +426 -0
  122. package/src/views/builder/inspector/fields/ColorSchemaField.jsx +140 -0
  123. package/src/views/builder/inspector/fields/ColumnFunctionEditor.jsx +238 -0
  124. package/src/views/builder/inspector/fields/ColumnMappingEditor.jsx +105 -0
  125. package/src/views/builder/inspector/fields/ColumnsConfigEditor.jsx +506 -0
  126. package/src/views/builder/inspector/fields/DonutRingsEditorField.jsx +337 -0
  127. package/src/views/builder/inspector/fields/ExtraColsEditor.jsx +618 -0
  128. package/src/views/builder/inspector/fields/FunctionHelpPopover.jsx +295 -0
  129. package/src/views/builder/inspector/fields/IconEditor.jsx +64 -0
  130. package/src/views/builder/inspector/fields/KpiActionField.jsx +223 -0
  131. package/src/views/builder/inspector/fields/MarkersEditorField.jsx +173 -0
  132. package/src/views/builder/inspector/fields/SelectEditor.jsx +9 -5
  133. package/src/views/builder/inspector/fields/SeriesEditorField.jsx +363 -0
  134. package/src/views/builder/inspector/fields/TableColumnsEditor.jsx +104 -0
  135. package/src/views/builder/inspector/fields/ThresholdsEditor.jsx +247 -0
  136. package/src/views/builder/inspector/fields/ValueFunctionsRefPanel.jsx +217 -0
  137. package/src/views/builder/inspector/fields/columnEditorShared.jsx +217 -0
  138. package/src/views/builder/sidebar/Sidebar.jsx +4 -2
  139. package/src/views/builder/sidebar/SidebarTabs.jsx +28 -17
  140. package/src/views/builder/sidebar/tabs/ActionsTab.jsx +7 -3
  141. package/src/views/builder/sidebar/tabs/AiTab/AiPreviewDialog.jsx +193 -0
  142. package/src/views/builder/sidebar/tabs/AiTab/aiProvider.js +49 -0
  143. package/src/views/builder/sidebar/tabs/AiTab/index.jsx +409 -0
  144. package/src/views/builder/sidebar/tabs/AiTab/schemaTransformer.js +102 -0
  145. package/src/views/builder/sidebar/tabs/AiTab/schemaValidator.js +64 -0
  146. package/src/views/builder/sidebar/tabs/AiTab/systemPrompt.js +1151 -0
  147. package/src/views/builder/sidebar/tabs/Components/ComponentsTab.jsx +31 -31
  148. package/src/views/builder/sidebar/tabs/Components/componentCatalog.js +43 -21
  149. package/src/views/builder/sidebar/tabs/Components/printComponentCatalog.js +81 -0
  150. package/src/views/builder/sidebar/tabs/TimersTab.jsx +338 -0
  151. package/src/views/builder/sidebar/tabs/TreeTab.jsx +13 -4
  152. package/src/views/builder/sidebar/tabs/ViewTab.jsx +1 -1
  153. package/src/views/builder/viewer/AdornedLabel.jsx +82 -0
  154. package/src/views/builder/viewer/ComponentRenderer.jsx +98 -24
  155. package/src/views/builder/viewer/DialogsZone.jsx +259 -0
  156. package/src/views/builder/viewer/FieldLabel.jsx +106 -0
  157. package/src/views/builder/viewer/PrintDialog.jsx +481 -0
  158. package/src/views/builder/viewer/ProductionViewer.jsx +80 -5
  159. package/src/views/builder/viewer/Viewer.jsx +106 -8
  160. package/src/views/builder/viewer/ViewerComponentWrapper.jsx +61 -4
  161. package/src/views/builder/viewer/ViewerToolbar.jsx +273 -59
  162. package/src/views/builder/viewer/renderers/AutoCompleteRenderer.jsx +26 -22
  163. package/src/views/builder/viewer/renderers/AvatarGroupRenderer.jsx +112 -0
  164. package/src/views/builder/viewer/renderers/BadgeRenderer.jsx +79 -0
  165. package/src/views/builder/viewer/renderers/BannerRenderer.jsx +62 -0
  166. package/src/views/builder/viewer/renderers/BreadcrumbRenderer.jsx +203 -15
  167. package/src/views/builder/viewer/renderers/BulletChartRenderer.jsx +147 -0
  168. package/src/views/builder/viewer/renderers/ButtonRenderer.jsx +98 -39
  169. package/src/views/builder/viewer/renderers/CardRenderer.jsx +1 -1
  170. package/src/views/builder/viewer/renderers/ChartRenderer.jsx +388 -0
  171. package/src/views/builder/viewer/renderers/CheckboxRenderer.jsx +17 -9
  172. package/src/views/builder/viewer/renderers/ColorScaleRenderer.jsx +300 -0
  173. package/src/views/builder/viewer/renderers/ComparisonBarsRenderer.jsx +133 -0
  174. package/src/views/builder/viewer/renderers/ContainerRenderer.jsx +3 -1
  175. package/src/views/builder/viewer/renderers/CountdownRenderer.jsx +249 -0
  176. package/src/views/builder/viewer/renderers/DataGridRenderer.jsx +380 -0
  177. package/src/views/builder/viewer/renderers/DataTableViewerRenderer.jsx +240 -0
  178. package/src/views/builder/viewer/renderers/DatePickerRenderer.jsx +25 -24
  179. package/src/views/builder/viewer/renderers/DialogRenderer.jsx +327 -0
  180. package/src/views/builder/viewer/renderers/DividerRenderer.jsx +1 -1
  181. package/src/views/builder/viewer/renderers/DonutRenderer.jsx +294 -0
  182. package/src/views/builder/viewer/renderers/DropdownRenderer.jsx +36 -44
  183. package/src/views/builder/viewer/renderers/ExcelUploadRenderer.jsx +639 -0
  184. package/src/views/builder/viewer/renderers/FunnelRenderer.jsx +93 -0
  185. package/src/views/builder/viewer/renderers/GaugeRenderer.jsx +159 -0
  186. package/src/views/builder/viewer/renderers/HeaderRenderer.jsx +31 -9
  187. package/src/views/builder/viewer/renderers/HeatmapGridRenderer.jsx +432 -0
  188. package/src/views/builder/viewer/renderers/IconBoxRenderer.jsx +59 -0
  189. package/src/views/builder/viewer/renderers/ImageRenderer.jsx +1 -1
  190. package/src/views/builder/viewer/renderers/InputRenderer.jsx +75 -18
  191. package/src/views/builder/viewer/renderers/LabelRenderer.jsx +35 -9
  192. package/src/views/builder/viewer/renderers/LayoutCellRenderer.jsx +102 -40
  193. package/src/views/builder/viewer/renderers/LayoutContextMenu.jsx +8 -8
  194. package/src/views/builder/viewer/renderers/LayoutRenderer.jsx +48 -6
  195. package/src/views/builder/viewer/renderers/LinkRenderer.jsx +1 -1
  196. package/src/views/builder/viewer/renderers/MenuRenderer.jsx +2 -2
  197. package/src/views/builder/viewer/renderers/MetricRenderer.jsx +80 -0
  198. package/src/views/builder/viewer/renderers/NumberFormatRenderer.jsx +21 -30
  199. package/src/views/builder/viewer/renderers/PageNumberRenderer.jsx +76 -0
  200. package/src/views/builder/viewer/renderers/PopoverRenderer.jsx +350 -0
  201. package/src/views/builder/viewer/renderers/ProgressCircleRenderer.jsx +1 -1
  202. package/src/views/builder/viewer/renderers/ProgressLineRenderer.jsx +1 -1
  203. package/src/views/builder/viewer/renderers/RadioGroupRenderer.jsx +28 -39
  204. package/src/views/builder/viewer/renderers/RatingRenderer.jsx +80 -0
  205. package/src/views/builder/viewer/renderers/RepeaterRenderer.jsx +297 -38
  206. package/src/views/builder/viewer/renderers/ReportViewerRenderer.jsx +219 -5
  207. package/src/views/builder/viewer/renderers/RichTextRenderer.jsx +60 -66
  208. package/src/views/builder/viewer/renderers/RowActionsCell.jsx +308 -0
  209. package/src/views/builder/viewer/renderers/SignatureRenderer.jsx +33 -62
  210. package/src/views/builder/viewer/renderers/StatusDotRenderer.jsx +75 -0
  211. package/src/views/builder/viewer/renderers/StepStageRenderer.jsx +348 -0
  212. package/src/views/builder/viewer/renderers/TagListRenderer.jsx +115 -0
  213. package/src/views/builder/viewer/renderers/TagPickerRenderer.jsx +31 -45
  214. package/src/views/builder/viewer/renderers/TextAreaRenderer.jsx +25 -18
  215. package/src/views/builder/viewer/renderers/TextRenderer.jsx +7 -1
  216. package/src/views/builder/viewer/renderers/TimePickerRenderer.jsx +25 -24
  217. package/src/views/builder/viewer/renderers/TimelineRenderer.jsx +525 -0
  218. package/src/views/builder/viewer/renderers/ToggleRenderer.jsx +21 -27
  219. package/src/views/builder/viewer/renderers/TreeViewRenderer.jsx +832 -0
  220. package/src/views/builder/viewer/renderers/TrendRenderer.jsx +66 -0
  221. package/src/views/builder/viewer/renderers/ViewRendererRenderer.jsx +315 -0
  222. package/src/views/builder/viewer/renderers/WizardRenderer.jsx +380 -64
  223. package/src/views/builder/viewer/renderers/WizardStepRenderer.jsx +21 -12
  224. package/src/views/builder/viewer/renderers/dataGridComponents.jsx +824 -0
  225. package/src/views/customFilter/CustomFilterDialog.js +1023 -660
  226. package/src/views/customFilter/FixedFilterDialog.js +649 -0
  227. package/src/views/customFilter/SearchFilterDialog.js +248 -0
  228. package/src/views/genericTable/BuilderExpressionParams.js +3 -3
  229. package/src/views/genericTable/ColumnConfiguratorDialog.js +33 -24
  230. package/src/views/genericTable/FixedFilterDialog.js +3 -2
  231. package/src/views/genericTable/FormattingSettingsDialog.js +8 -3
  232. package/src/views/genericTable/SGrid.js +198 -97
  233. package/src/views/genericTable/SearchFilterDialog.js +3 -2
  234. package/src/views/genericTable/cellEditors/autocompleteEditor.js +5 -9
  235. package/src/views/genericTable/convertStringFunctions.js +274 -138
  236. package/src/views/genericTable/statusBar/rowCountStatusBar.js +3 -1
  237. package/src/views/genericTable/updateRefHelpers.js +9 -6
  238. package/src/views/printBuilder/PrintBuilderViewer.jsx +607 -0
  239. package/src/views/printBuilder/PrintPreviewCanvas.jsx +157 -0
  240. package/src/views/rolePermissions/UpdateReportPermissionDialog.js +3 -2
  241. package/src/@core/components/auth/AclGuard.js +0 -55
  242. package/src/@core/components/auth/AuthGuard.js +0 -40
  243. package/src/@core/components/auth/GuestGuard.js +0 -30
  244. package/src/@core/components/custom-inputs/Horizontal.jsx +0 -143
  245. package/src/@core/components/custom-inputs/Image.jsx +0 -78
  246. package/src/@core/components/custom-inputs/Vertical.jsx +0 -113
  247. package/src/@core/components/customizer/index.jsx +0 -470
  248. package/src/@core/components/customizer/styles.module.css +0 -169
  249. package/src/@core/components/mui/Avatar.jsx +0 -41
  250. package/src/@core/components/mui/Badge.jsx +0 -20
  251. package/src/@core/components/mui/IconButton.jsx +0 -74
  252. package/src/@core/components/mui/TabList.jsx +0 -60
  253. package/src/@core/components/option-menu/index.jsx +0 -137
  254. package/src/@core/components/scroll-to-top/index.jsx +0 -43
  255. package/src/@core/components/spinner/index.js +0 -26
  256. package/src/@core/components/window-wrapper/index.js +0 -27
  257. package/src/@core/contexts/settingsContext.jsx +0 -98
  258. package/src/@core/hooks/useBgColor.js +0 -63
  259. package/src/@core/hooks/useImageVariant.js +0 -27
  260. package/src/@core/hooks/useLayoutInit.js +0 -37
  261. package/src/@core/hooks/useObjectCookie.js +0 -18
  262. package/src/@core/hooks/useSettings.jsx +0 -15
  263. package/src/@core/layouts/BlankLayout.js +0 -37
  264. package/src/@core/layouts/BlankLayoutWithAppBar.js +0 -51
  265. package/src/@core/layouts/HorizontalLayout.jsx +0 -151
  266. package/src/@core/layouts/Layout.js +0 -39
  267. package/src/@core/layouts/VerticalLayout.jsx +0 -124
  268. package/src/@core/layouts/components/blank-layout-with-appBar/index.js +0 -115
  269. package/src/@core/layouts/components/horizontal/app-bar-content/index.js +0 -67
  270. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavGroup.js +0 -352
  271. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavItems.js +0 -21
  272. package/src/@core/layouts/components/horizontal/navigation/HorizontalNavLink.js +0 -195
  273. package/src/@core/layouts/components/horizontal/navigation/index.js +0 -31
  274. package/src/@core/layouts/components/shared-components/LanguageDropdown.js +0 -96
  275. package/src/@core/layouts/components/shared-components/ModeToggler.js +0 -32
  276. package/src/@core/layouts/components/shared-components/NotificationDropdown.js +0 -226
  277. package/src/@core/layouts/components/shared-components/UserDropdown.js +0 -177
  278. package/src/@core/layouts/components/shared-components/footer/FooterContent.js +0 -46
  279. package/src/@core/layouts/components/shared-components/footer/index.js +0 -61
  280. package/src/@core/layouts/components/vertical/appBar/index.js +0 -74
  281. package/src/@core/layouts/components/vertical/navigation/Drawer.js +0 -122
  282. package/src/@core/layouts/components/vertical/navigation/VerticalNavGroup.js +0 -435
  283. package/src/@core/layouts/components/vertical/navigation/VerticalNavHeader.js +0 -180
  284. package/src/@core/layouts/components/vertical/navigation/VerticalNavItems.js +0 -26
  285. package/src/@core/layouts/components/vertical/navigation/VerticalNavLink.js +0 -258
  286. package/src/@core/layouts/components/vertical/navigation/VerticalNavSectionTitle.js +0 -102
  287. package/src/@core/layouts/components/vertical/navigation/index.js +0 -169
  288. package/src/@core/layouts/utils.js +0 -69
  289. package/src/@core/styles/Table.module.css +0 -93
  290. package/src/@core/styles/horizontal/menuItemStyles.js +0 -100
  291. package/src/@core/styles/horizontal/menuRootStyles.js +0 -19
  292. package/src/@core/styles/libs/fullcalendar/index.js +0 -461
  293. package/src/@core/styles/libs/keen-slider/index.js +0 -111
  294. package/src/@core/styles/libs/react-apexcharts/index.js +0 -107
  295. package/src/@core/styles/libs/react-cleave/index.js +0 -33
  296. package/src/@core/styles/libs/react-credit-cards/index.js +0 -11
  297. package/src/@core/styles/libs/react-datepicker/index.js +0 -388
  298. package/src/@core/styles/libs/react-draft-wysiwyg/index.js +0 -144
  299. package/src/@core/styles/libs/react-dropzone/index.js +0 -76
  300. package/src/@core/styles/libs/react-hot-toast/index.js +0 -37
  301. package/src/@core/styles/libs/recharts/index.js +0 -47
  302. package/src/@core/styles/stepper.js +0 -103
  303. package/src/@core/styles/vertical/menuItemStyles.js +0 -138
  304. package/src/@core/styles/vertical/menuSectionStyles.js +0 -54
  305. package/src/@core/styles/vertical/navigationCustomStyles.js +0 -62
  306. package/src/@core/svg/ContentCompact.jsx +0 -17
  307. package/src/@core/svg/ContentWide.jsx +0 -17
  308. package/src/@core/svg/DirectionLtr.jsx +0 -93
  309. package/src/@core/svg/DirectionRtl.jsx +0 -93
  310. package/src/@core/svg/LayoutCollapsed.jsx +0 -59
  311. package/src/@core/svg/LayoutHorizontal.jsx +0 -42
  312. package/src/@core/svg/LayoutVertical.jsx +0 -59
  313. package/src/@core/svg/Logo.jsx +0 -76
  314. package/src/@core/svg/SkinBordered.jsx +0 -54
  315. package/src/@core/svg/SkinDefault.jsx +0 -59
  316. package/src/@core/tailwind/plugin.js +0 -78
  317. package/src/@core/theme/ThemeComponent.js +0 -63
  318. package/src/@core/theme/ThemeOptions.js +0 -71
  319. package/src/@core/theme/breakpoints/index.js +0 -11
  320. package/src/@core/theme/colorSchemes.js +0 -326
  321. package/src/@core/theme/customShadows.js +0 -11
  322. package/src/@core/theme/globalStyles.js +0 -81
  323. package/src/@core/theme/index.js +0 -42
  324. package/src/@core/theme/overrides/accordion.js +0 -51
  325. package/src/@core/theme/overrides/accordion.jsx +0 -85
  326. package/src/@core/theme/overrides/alerts.js +0 -110
  327. package/src/@core/theme/overrides/alerts.jsx +0 -180
  328. package/src/@core/theme/overrides/autocomplete.js +0 -14
  329. package/src/@core/theme/overrides/autocomplete.jsx +0 -68
  330. package/src/@core/theme/overrides/avatar.js +0 -38
  331. package/src/@core/theme/overrides/avatars.js +0 -27
  332. package/src/@core/theme/overrides/backdrop.js +0 -22
  333. package/src/@core/theme/overrides/badges.js +0 -16
  334. package/src/@core/theme/overrides/breadcrumbs.js +0 -11
  335. package/src/@core/theme/overrides/button-group.js +0 -84
  336. package/src/@core/theme/overrides/button.js +0 -93
  337. package/src/@core/theme/overrides/buttonGroup.js +0 -9
  338. package/src/@core/theme/overrides/card.js +0 -83
  339. package/src/@core/theme/overrides/checkbox.jsx +0 -95
  340. package/src/@core/theme/overrides/chip.js +0 -72
  341. package/src/@core/theme/overrides/dataGrid.js +0 -114
  342. package/src/@core/theme/overrides/dateTimePicker.js +0 -65
  343. package/src/@core/theme/overrides/dialog.js +0 -120
  344. package/src/@core/theme/overrides/divider.js +0 -13
  345. package/src/@core/theme/overrides/drawer.js +0 -20
  346. package/src/@core/theme/overrides/fab.js +0 -13
  347. package/src/@core/theme/overrides/form-control-label.js +0 -19
  348. package/src/@core/theme/overrides/icon-button.js +0 -145
  349. package/src/@core/theme/overrides/index.js +0 -103
  350. package/src/@core/theme/overrides/input.js +0 -72
  351. package/src/@core/theme/overrides/link.js +0 -9
  352. package/src/@core/theme/overrides/list.js +0 -44
  353. package/src/@core/theme/overrides/menu.js +0 -25
  354. package/src/@core/theme/overrides/pagination.js +0 -41
  355. package/src/@core/theme/overrides/paper.js +0 -9
  356. package/src/@core/theme/overrides/popover.js +0 -16
  357. package/src/@core/theme/overrides/progress.js +0 -38
  358. package/src/@core/theme/overrides/radio.jsx +0 -80
  359. package/src/@core/theme/overrides/rating.js +0 -16
  360. package/src/@core/theme/overrides/rating.jsx +0 -32
  361. package/src/@core/theme/overrides/select.js +0 -19
  362. package/src/@core/theme/overrides/select.jsx +0 -52
  363. package/src/@core/theme/overrides/slider.js +0 -97
  364. package/src/@core/theme/overrides/snackbar.js +0 -19
  365. package/src/@core/theme/overrides/switch.js +0 -73
  366. package/src/@core/theme/overrides/switches.js +0 -25
  367. package/src/@core/theme/overrides/table-pagination.js +0 -39
  368. package/src/@core/theme/overrides/table.js +0 -81
  369. package/src/@core/theme/overrides/tabs.js +0 -30
  370. package/src/@core/theme/overrides/timeline.js +0 -80
  371. package/src/@core/theme/overrides/toggle-button.js +0 -33
  372. package/src/@core/theme/overrides/toggleButton.js +0 -16
  373. package/src/@core/theme/overrides/tooltip.js +0 -21
  374. package/src/@core/theme/overrides/typography.js +0 -13
  375. package/src/@core/theme/palette/index.js +0 -107
  376. package/src/@core/theme/shadows/index.js +0 -61
  377. package/src/@core/theme/shadows.js +0 -12
  378. package/src/@core/theme/spacing/index.js +0 -3
  379. package/src/@core/theme/spacing.js +0 -5
  380. package/src/@core/theme/typography/index.js +0 -65
  381. package/src/@core/theme/typography.js +0 -84
  382. package/src/@core/utils/create-emotion-cache.js +0 -5
  383. package/src/@core/utils/hex-to-rgba.js +0 -11
  384. package/src/@core/utils/serverHelpers.js +0 -45
  385. package/src/@menu/components/RouterLink.jsx +0 -18
  386. package/src/@menu/components/horizontal-menu/HorizontalNav.jsx +0 -88
  387. package/src/@menu/components/horizontal-menu/Menu.jsx +0 -83
  388. package/src/@menu/components/horizontal-menu/MenuButton.jsx +0 -100
  389. package/src/@menu/components/horizontal-menu/MenuItem.jsx +0 -183
  390. package/src/@menu/components/horizontal-menu/SubMenu.jsx +0 -418
  391. package/src/@menu/components/horizontal-menu/SubMenuContent.jsx +0 -41
  392. package/src/@menu/components/horizontal-menu/VerticalNavInHorizontal.jsx +0 -20
  393. package/src/@menu/components/vertical-menu/Menu.jsx +0 -161
  394. package/src/@menu/components/vertical-menu/MenuButton.jsx +0 -95
  395. package/src/@menu/components/vertical-menu/MenuItem.jsx +0 -180
  396. package/src/@menu/components/vertical-menu/MenuSection.jsx +0 -124
  397. package/src/@menu/components/vertical-menu/NavCollapseIcons.jsx +0 -70
  398. package/src/@menu/components/vertical-menu/NavHeader.jsx +0 -39
  399. package/src/@menu/components/vertical-menu/SubMenu.jsx +0 -420
  400. package/src/@menu/components/vertical-menu/SubMenuContent.jsx +0 -101
  401. package/src/@menu/components/vertical-menu/VerticalNav.jsx +0 -216
  402. package/src/@menu/contexts/horizontalNavContext.jsx +0 -29
  403. package/src/@menu/contexts/verticalNavContext.jsx +0 -65
  404. package/src/@menu/defaultConfigs.js +0 -12
  405. package/src/@menu/hooks/useHorizontalMenu.jsx +0 -19
  406. package/src/@menu/hooks/useHorizontalNav.jsx +0 -19
  407. package/src/@menu/hooks/useMediaQuery.jsx +0 -29
  408. package/src/@menu/hooks/useVerticalMenu.jsx +0 -19
  409. package/src/@menu/hooks/useVerticalNav.jsx +0 -19
  410. package/src/@menu/horizontal-menu/index.jsx +0 -8
  411. package/src/@menu/styles/StyledBackdrop.jsx +0 -15
  412. package/src/@menu/styles/StyledMenuIcon.jsx +0 -12
  413. package/src/@menu/styles/StyledMenuLabel.jsx +0 -16
  414. package/src/@menu/styles/StyledMenuPrefix.jsx +0 -10
  415. package/src/@menu/styles/StyledMenuSectionLabel.jsx +0 -21
  416. package/src/@menu/styles/StyledMenuSuffix.jsx +0 -10
  417. package/src/@menu/styles/StyledSubMenuContent.jsx +0 -43
  418. package/src/@menu/styles/horizontal/StyledHorizontalMenu.jsx +0 -13
  419. package/src/@menu/styles/horizontal/StyledHorizontalMenuItem.jsx +0 -26
  420. package/src/@menu/styles/horizontal/StyledHorizontalNav.jsx +0 -11
  421. package/src/@menu/styles/horizontal/StyledHorizontalNavExpandIcon.jsx +0 -33
  422. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContent.jsx +0 -18
  423. package/src/@menu/styles/horizontal/StyledHorizontalSubMenuContentWrapper.jsx +0 -10
  424. package/src/@menu/styles/horizontal/horizontalUl.module.css +0 -15
  425. package/src/@menu/styles/styles.module.css +0 -5
  426. package/src/@menu/styles/vertical/StyledVerticalMenu.jsx +0 -16
  427. package/src/@menu/styles/vertical/StyledVerticalMenuItem.jsx +0 -28
  428. package/src/@menu/styles/vertical/StyledVerticalMenuSection.jsx +0 -23
  429. package/src/@menu/styles/vertical/StyledVerticalNav.jsx +0 -67
  430. package/src/@menu/styles/vertical/StyledVerticalNavBgColorContainer.jsx +0 -15
  431. package/src/@menu/styles/vertical/StyledVerticalNavContainer.jsx +0 -23
  432. package/src/@menu/styles/vertical/StyledVerticalNavExpandIcon.jsx +0 -25
  433. package/src/@menu/styles/vertical/verticalNavBgImage.module.css +0 -10
  434. package/src/@menu/svg/ChevronRight.jsx +0 -9
  435. package/src/@menu/svg/Close.jsx +0 -12
  436. package/src/@menu/svg/RadioCircle.jsx +0 -12
  437. package/src/@menu/svg/RadioCircleMarked.jsx +0 -13
  438. package/src/@menu/utils/menuClasses.js +0 -44
  439. package/src/@menu/utils/menuUtils.jsx +0 -145
  440. package/src/@menu/vertical-menu/index.jsx +0 -11
  441. package/src/configs/acl.js +0 -115
  442. package/src/configs/auth.js +0 -5
  443. package/src/configs/aws-exports.js +0 -30
  444. package/src/configs/firebase.js +0 -25
  445. package/src/configs/i18n.js +0 -34
  446. package/src/configs/primaryColorConfig.js +0 -35
  447. package/src/configs/themeConfig.js +0 -44
  448. package/src/layouts/UserLayout.js +0 -94
  449. package/src/layouts/UserThemeOptions.js +0 -191
  450. package/src/layouts/components/Direction.js +0 -30
  451. package/src/layouts/components/HtmlTooltip.js +0 -15
  452. package/src/layouts/components/Translations.js +0 -11
  453. package/src/layouts/components/UserDropdown.js +0 -217
  454. package/src/layouts/components/UserIcon.js +0 -40
  455. package/src/layouts/components/acl/Can.js +0 -6
  456. package/src/layouts/components/acl/CanViewNavGroup.js +0 -36
  457. package/src/layouts/components/acl/CanViewNavLink.js +0 -17
  458. package/src/layouts/components/acl/CanViewNavSectionTitle.js +0 -17
  459. package/src/layouts/components/horizontal/AppBarContent.js +0 -39
  460. package/src/layouts/components/horizontal/ServerSideNavItems.js +0 -44
  461. package/src/layouts/components/mui/StepperComps.js +0 -55
  462. package/src/layouts/components/vertical/AppBarContent.js +0 -35
  463. package/src/layouts/components/vertical/ServerSideNavItems.js +0 -44
  464. package/src/libs/ApexCharts.jsx +0 -5
  465. package/src/libs/ReactPlayer.jsx +0 -5
  466. package/src/libs/Recharts.jsx +0 -4
  467. package/src/libs/auth.js +0 -124
  468. package/src/libs/styles/AppFullCalendar.js +0 -505
  469. package/src/libs/styles/AppKeenSlider.js +0 -116
  470. package/src/libs/styles/AppReactApexCharts.jsx +0 -110
  471. package/src/libs/styles/AppReactDatepicker.jsx +0 -470
  472. package/src/libs/styles/AppReactDropzone.js +0 -76
  473. package/src/libs/styles/AppReactToastify.jsx +0 -108
  474. package/src/libs/styles/AppRecharts.js +0 -55
  475. package/src/libs/styles/inputOtp.module.css +0 -39
  476. package/src/libs/styles/tiptapEditor.css +0 -72
  477. package/src/navigation/horizontal/index.js +0 -246
  478. package/src/navigation/vertical/index.js +0 -253
  479. package/src/pages/401.js +0 -70
  480. package/src/pages/404.js +0 -67
  481. package/src/pages/500.js +0 -68
  482. package/src/pages/[slug].js +0 -115
  483. package/src/pages/_document.js +0 -72
  484. package/src/pages/api/navigation/regenerate-registry.js +0 -116
  485. package/src/pages/api/navigation/save.js +0 -218
  486. package/src/pages/authModule/acl/index.js +0 -48
  487. package/src/pages/authModule/forgot-password/index.js +0 -228
  488. package/src/pages/authModule/permissions/rolePermissions/[id]/rolePermissionsUser/index.js +0 -392
  489. package/src/pages/authModule/permissions/rolePermissions/index.js +0 -343
  490. package/src/pages/authModule/permissions/systemPermissions/index.js +0 -354
  491. package/src/pages/authModule/privacy/index.js +0 -721
  492. package/src/pages/authModule/users/index.js +0 -210
  493. package/src/pages/login/index.js +0 -328
  494. package/src/pages/mainHome/index.js +0 -181
  495. package/src/views/builder/inspector/definitions/cell/main.js +0 -4
  496. package/src/views/builder/inspector/definitions/column/main.js +0 -9
  497. package/src/views/builder/inspector/definitions/column-group/main.js +0 -18
  498. package/src/views/builder/inspector/definitions/header-cell/main.js +0 -5
  499. package/src/views/builder/inspector/definitions/table/main.js +0 -9
  500. package/src/views/builder/viewer/renderers/CellRenderer.jsx +0 -71
  501. package/src/views/builder/viewer/renderers/ColumnGroupRenderer.jsx +0 -96
  502. package/src/views/builder/viewer/renderers/ColumnRenderer.jsx +0 -71
  503. package/src/views/builder/viewer/renderers/HeaderCellRenderer.jsx +0 -78
  504. package/src/views/builder/viewer/renderers/TabRenderer.jsx +0 -82
  505. package/src/views/builder/viewer/renderers/TableRenderer.jsx +0 -92
  506. package/src/views/pages/auth/FooterIllustrationsV2.js +0 -40
  507. package/src/views/pages/misc/FooterIllustrations.js +0 -47
  508. package/src/views/pages/misc/muiTable/CustomPagination.js +0 -34
  509. package/src/views/pages/users/UserManageDialog.js +0 -283
  510. package/src/views/pages/users/UserViewPage.js +0 -199
  511. package/src/views/users/AddUserNameDialog.js +0 -162
  512. package/src/views/users/ContactManage.js +0 -449
  513. package/src/views/users/ResetPasswordDialog.js +0 -242
@@ -0,0 +1,832 @@
1
+ import { useState, useCallback, useMemo, useEffect, useRef } from 'react'
2
+ import {
3
+ Box, Typography, IconButton, TextField, Checkbox,
4
+ Collapse, CircularProgress, Tooltip, InputAdornment,
5
+ Popover, Button,
6
+ } from '@mui/material'
7
+ import {
8
+ ChevronRight, ExpandMore, SearchOutlined, ClearOutlined,
9
+ MoreVertOutlined,
10
+
11
+ // Folder / file
12
+ FolderOutlined, FolderOpenOutlined, FolderSharedOutlined,
13
+ InsertDriveFileOutlined, FileOpenOutlined, FileCopyOutlined,
14
+ ArticleOutlined, DescriptionOutlined, NoteOutlined, AssignmentOutlined,
15
+
16
+ // Actions
17
+ EditOutlined, DeleteOutlined, VisibilityOutlined, VisibilityOffOutlined,
18
+ ContentCopyOutlined, DownloadOutlined, UploadOutlined, PrintOutlined,
19
+ CheckOutlined, CloseOutlined, SendOutlined, RefreshOutlined,
20
+ SettingsOutlined, InfoOutlined, WarningOutlined, ErrorOutlined,
21
+ ArchiveOutlined, UnarchiveOutlined, RestoreOutlined,
22
+ LockOutlined, LockOpenOutlined,
23
+ StarOutlined, StarBorderOutlined,
24
+ AddOutlined, RemoveOutlined, AddCircleOutlined, RemoveCircleOutlined,
25
+ SaveOutlined, SaveAsOutlined, ShareOutlined, OpenInNewOutlined,
26
+
27
+ // Navigation / UI
28
+ HomeOutlined, Home,
29
+ DashboardOutlined, Dashboard,
30
+ MenuOutlined, AppsOutlined, GridViewOutlined, ViewListOutlined,
31
+ TuneOutlined, FilterListOutlined, SortOutlined, SearchOffOutlined,
32
+ ExpandLessOutlined, ExpandMoreOutlined,
33
+
34
+ // People / Org
35
+ PersonOutlined, Person,
36
+ GroupOutlined, Group,
37
+ PeopleOutlined, AccountCircleOutlined, SupervisorAccountOutlined,
38
+ ContactsOutlined, BadgeOutlined, WorkOutlined, BusinessOutlined,
39
+ ManageAccountsOutlined, AdminPanelSettingsOutlined,
40
+
41
+ // Comm / Notifications
42
+ MailOutlined, EmailOutlined, PhoneOutlined, ChatOutlined,
43
+ NotificationsOutlined, NotificationsNoneOutlined,
44
+ MessageOutlined, ForumOutlined, CommentOutlined,
45
+ FeedbackOutlined, AnnouncementOutlined,
46
+
47
+ // Location / Map
48
+ LocationOnOutlined, PlaceOutlined, MapOutlined, ExploreOutlined,
49
+ MyLocationOutlined, NavigationOutlined, DirectionsOutlined,
50
+
51
+ // Calendar / Time
52
+ CalendarTodayOutlined, CalendarMonthOutlined, EventOutlined,
53
+ AccessTimeOutlined, ScheduleOutlined, TimerOutlined,
54
+ DateRangeOutlined, TodayOutlined,
55
+
56
+ // Finance
57
+ AttachMoneyOutlined, MoneyOutlined, AccountBalanceOutlined,
58
+ CreditCardOutlined, PaidOutlined, ReceiptOutlined, ReceiptLongOutlined,
59
+ SavingsOutlined, RequestQuoteOutlined,
60
+
61
+ // Charts / Data
62
+ BarChartOutlined, PieChartOutlined, ShowChartOutlined, InsightsOutlined,
63
+ LeaderboardOutlined, AnalyticsOutlined, DataUsageOutlined, TableChartOutlined,
64
+ DataObjectOutlined, DataArrayOutlined, StorageOutlined,
65
+
66
+ // Commerce
67
+ ShoppingCartOutlined, ShoppingBagOutlined, StoreOutlined,
68
+ LocalShippingOutlined, InventoryOutlined, Inventory2Outlined,
69
+ QrCode2Outlined, CategoryOutlined,
70
+
71
+ // Media
72
+ ImageOutlined, PhotoOutlined, VideocamOutlined, PlayCircleOutlined,
73
+ AudiotrackOutlined, AttachFileOutlined, LinkOutlined,
74
+ CloudOutlined, CloudUploadOutlined, CloudDownloadOutlined,
75
+
76
+ // Dev / Tech
77
+ CodeOutlined, BuildOutlined, BugReportOutlined, TerminalOutlined,
78
+ IntegrationInstructionsOutlined, ApiOutlined, WebhookOutlined,
79
+ SecurityOutlined, VpnLockOutlined, HttpsOutlined,
80
+ LayersOutlined, AccountTreeOutlined, DevicesOutlined,
81
+
82
+ // Misc / Status
83
+ CheckCircleOutlined, CancelOutlined, HelpOutlined, QuestionMarkOutlined,
84
+ BookmarkOutlined, BookmarksOutlined, LabelOutlined, FlagOutlined,
85
+ TrendingUpOutlined, TrendingDownOutlined, SwapHorizOutlined,
86
+ TagOutlined, NumbersOutlined, NewReleasesOutlined, FiberNewOutlined,
87
+ SchoolOutlined, LocalLibraryOutlined, ScienceOutlined, PsychologyOutlined,
88
+ } from '@mui/icons-material'
89
+ import ViewerComponentWrapper from '../ViewerComponentWrapper'
90
+ import { resolveProps, resolveValue } from 'services/builderHelper/resolveProps'
91
+ import { executeJSCode } from 'services/builderHelper/jsExecutor'
92
+
93
+ // ── Icon registry ─────────────────────────────────────────────────────────────
94
+ const ICON_MAP = {
95
+ // Folder / file
96
+ FolderOutlined, FolderOpenOutlined, FolderSharedOutlined,
97
+ InsertDriveFileOutlined, FileOpenOutlined, FileCopyOutlined,
98
+ ArticleOutlined, DescriptionOutlined, NoteOutlined, AssignmentOutlined,
99
+
100
+ // Actions
101
+ EditOutlined, DeleteOutlined, VisibilityOutlined, VisibilityOffOutlined,
102
+ ContentCopyOutlined, DownloadOutlined, UploadOutlined, PrintOutlined,
103
+ CheckOutlined, CloseOutlined, SendOutlined, RefreshOutlined,
104
+ SettingsOutlined, InfoOutlined, WarningOutlined, ErrorOutlined,
105
+ ArchiveOutlined, UnarchiveOutlined, RestoreOutlined,
106
+ LockOutlined, LockOpenOutlined,
107
+ StarOutlined, StarBorderOutlined,
108
+ AddOutlined, RemoveOutlined, AddCircleOutlined, RemoveCircleOutlined,
109
+ SaveOutlined, SaveAsOutlined, ShareOutlined, OpenInNewOutlined,
110
+
111
+ // Navigation / UI
112
+ HomeOutlined, Home,
113
+ DashboardOutlined, Dashboard,
114
+ MenuOutlined, AppsOutlined, GridViewOutlined, ViewListOutlined,
115
+ TuneOutlined, FilterListOutlined, SortOutlined, SearchOffOutlined,
116
+ ExpandLessOutlined, ExpandMoreOutlined,
117
+
118
+ // People / Org
119
+ PersonOutlined, Person,
120
+ GroupOutlined, Group,
121
+ PeopleOutlined, AccountCircleOutlined, SupervisorAccountOutlined,
122
+ ContactsOutlined, BadgeOutlined, WorkOutlined, BusinessOutlined,
123
+ ManageAccountsOutlined, AdminPanelSettingsOutlined,
124
+
125
+ // Comm / Notifications
126
+ MailOutlined, EmailOutlined, PhoneOutlined, ChatOutlined,
127
+ NotificationsOutlined, NotificationsNoneOutlined,
128
+ MessageOutlined, ForumOutlined, CommentOutlined,
129
+ FeedbackOutlined, AnnouncementOutlined,
130
+
131
+ // Location / Map
132
+ LocationOnOutlined, PlaceOutlined, MapOutlined, ExploreOutlined,
133
+ MyLocationOutlined, NavigationOutlined, DirectionsOutlined,
134
+
135
+ // Calendar / Time
136
+ CalendarTodayOutlined, CalendarMonthOutlined, EventOutlined,
137
+ AccessTimeOutlined, ScheduleOutlined, TimerOutlined,
138
+ DateRangeOutlined, TodayOutlined,
139
+
140
+ // Finance
141
+ AttachMoneyOutlined, MoneyOutlined, AccountBalanceOutlined,
142
+ CreditCardOutlined, PaidOutlined, ReceiptOutlined, ReceiptLongOutlined,
143
+ SavingsOutlined, RequestQuoteOutlined,
144
+
145
+ // Charts / Data
146
+ BarChartOutlined, PieChartOutlined, ShowChartOutlined, InsightsOutlined,
147
+ LeaderboardOutlined, AnalyticsOutlined, DataUsageOutlined, TableChartOutlined,
148
+ DataObjectOutlined, DataArrayOutlined, StorageOutlined,
149
+
150
+ // Commerce
151
+ ShoppingCartOutlined, ShoppingBagOutlined, StoreOutlined,
152
+ LocalShippingOutlined, InventoryOutlined, Inventory2Outlined,
153
+ QrCode2Outlined, CategoryOutlined,
154
+
155
+ // Media
156
+ ImageOutlined, PhotoOutlined, VideocamOutlined, PlayCircleOutlined,
157
+ AudiotrackOutlined, AttachFileOutlined, LinkOutlined,
158
+ CloudOutlined, CloudUploadOutlined, CloudDownloadOutlined,
159
+
160
+ // Dev / Tech
161
+ CodeOutlined, BuildOutlined, BugReportOutlined, TerminalOutlined,
162
+ IntegrationInstructionsOutlined, ApiOutlined, WebhookOutlined,
163
+ SecurityOutlined, VpnLockOutlined, HttpsOutlined,
164
+ LayersOutlined, AccountTreeOutlined, DevicesOutlined,
165
+
166
+ // Misc / Status
167
+ CheckCircleOutlined, CancelOutlined, HelpOutlined, QuestionMarkOutlined,
168
+ BookmarkOutlined, BookmarksOutlined, LabelOutlined, FlagOutlined,
169
+ TrendingUpOutlined, TrendingDownOutlined, SwapHorizOutlined,
170
+ TagOutlined, NumbersOutlined, NewReleasesOutlined, FiberNewOutlined,
171
+ SchoolOutlined, LocalLibraryOutlined, ScienceOutlined, PsychologyOutlined,
172
+
173
+ // Aliases (common mis-spellings or shorthand the user might try)
174
+ Folder: FolderOutlined,
175
+ File: InsertDriveFileOutlined,
176
+ Document: DescriptionOutlined,
177
+ Edit: EditOutlined,
178
+ Delete: DeleteOutlined,
179
+ Add: AddOutlined,
180
+ Remove: RemoveOutlined,
181
+ Settings: SettingsOutlined,
182
+ Info: InfoOutlined,
183
+ Warning: WarningOutlined,
184
+ Archive: ArchiveOutlined,
185
+ Lock: LockOutlined,
186
+ Star: StarOutlined,
187
+ Bookmark: BookmarkOutlined,
188
+ Flag: FlagOutlined,
189
+ Label: LabelOutlined,
190
+ Tag: TagOutlined,
191
+ Check: CheckOutlined,
192
+ Close: CloseOutlined,
193
+ Refresh: RefreshOutlined,
194
+ Download: DownloadOutlined,
195
+ Upload: UploadOutlined,
196
+ Share: ShareOutlined,
197
+ Save: SaveOutlined,
198
+ Send: SendOutlined,
199
+ Print: PrintOutlined,
200
+ Search: SearchOutlined,
201
+ Mail: MailOutlined,
202
+ Phone: PhoneOutlined,
203
+ Location: LocationOnOutlined,
204
+ Calendar: CalendarTodayOutlined,
205
+ Time: AccessTimeOutlined,
206
+ Money: AttachMoneyOutlined,
207
+ Chart: BarChartOutlined,
208
+ Cart: ShoppingCartOutlined,
209
+ Image: ImageOutlined,
210
+ Code: CodeOutlined,
211
+ Security: SecurityOutlined,
212
+ Layers: LayersOutlined,
213
+ Person: PersonOutlined,
214
+ Group: GroupOutlined,
215
+ Business: BusinessOutlined,
216
+ Dashboard: DashboardOutlined,
217
+ Home: HomeOutlined,
218
+ HomeOutline: HomeOutlined, // common alias typo
219
+ Help: HelpOutlined,
220
+ Copy: ContentCopyOutlined,
221
+ View: VisibilityOutlined,
222
+ Eye: VisibilityOutlined,
223
+ }
224
+
225
+ function NodeIcon({ name, sx }) {
226
+ const Comp = name ? (ICON_MAP[name] ?? null) : null
227
+ if (!Comp) return null
228
+ return <Comp sx={{ fontSize: 16, ...sx }} />
229
+ }
230
+
231
+ // ── Flat → nested conversion ──────────────────────────────────────────────────
232
+ function flatToNested(items, idField, parentIdField, childrenField) {
233
+ const map = {}
234
+ items.forEach(item => {
235
+ map[item[idField]] = { ...item, [childrenField]: item[childrenField] ?? [] }
236
+ })
237
+ const roots = []
238
+ items.forEach(item => {
239
+ const pid = item[parentIdField]
240
+ if (pid == null || pid === '' || map[pid] == null) {
241
+ roots.push(map[item[idField]])
242
+ } else {
243
+ map[pid][childrenField].push(map[item[idField]])
244
+ }
245
+ })
246
+ return roots
247
+ }
248
+
249
+ // ── Auto-detect flat vs nested and normalise ──────────────────────────────────
250
+ function normaliseData(data, idField, parentIdField, childrenField) {
251
+ if (!Array.isArray(data) || data.length === 0) return []
252
+ const hasParent = data.some(item => parentIdField in item)
253
+ if (hasParent) return flatToNested(data, idField, parentIdField, childrenField)
254
+ return data
255
+ }
256
+
257
+ // ── Collect ALL node IDs (for expand-all) ────────────────────────────────────
258
+ function collectIds(nodes, idField, childrenField) {
259
+ const ids = new Set()
260
+ const walk = list => list?.forEach(n => {
261
+ ids.add(n[idField])
262
+ walk(n[childrenField])
263
+ })
264
+ walk(nodes)
265
+ return ids
266
+ }
267
+
268
+ // ── Filter nodes by search text (keeps ancestor path) ────────────────────────
269
+ function filterNodes(nodes, search, labelField, childrenField) {
270
+ if (!search) return nodes
271
+ const q = search.toLowerCase()
272
+ const recurse = list => {
273
+ const out = []
274
+ list?.forEach(node => {
275
+ const kids = recurse(node[childrenField])
276
+ const match = String(node[labelField] ?? '').toLowerCase().includes(q)
277
+ if (match || kids.length) out.push({ ...node, [childrenField]: kids })
278
+ })
279
+ return out
280
+ }
281
+ return recurse(nodes)
282
+ }
283
+
284
+ // ── 3-dots actions popover ────────────────────────────────────────────────────
285
+ function NodeActionsMenu({ actionsConfig, node, viewerContext }) {
286
+ const [anchorEl, setAnchorEl] = useState(null)
287
+ const [runningIdx, setRunningIdx] = useState(null)
288
+ const [confirmIdx, setConfirmIdx] = useState(null)
289
+ const open = Boolean(anchorEl)
290
+
291
+ const handleOpen = e => {
292
+ e.stopPropagation()
293
+ setAnchorEl(e.currentTarget)
294
+ setConfirmIdx(null)
295
+ }
296
+ const handleClose = () => {
297
+ setAnchorEl(null)
298
+ setConfirmIdx(null)
299
+ }
300
+
301
+ const runAction = useCallback(async (action, idx) => {
302
+ if (!action.code) return handleClose()
303
+ setRunningIdx(idx)
304
+ try {
305
+ const { data, form, setData, dataRef, reportRefs,
306
+ openDialog, closeDialog } = viewerContext ?? {}
307
+ await executeJSCode(action.code, {
308
+ data: data ?? {},
309
+ form: form ?? {},
310
+ setData: setData ?? (() => {}),
311
+ dataRef: dataRef?.current ?? {},
312
+ reportRefs: reportRefs?.current ?? {},
313
+ openDialog: openDialog ?? (() => {}),
314
+ closeDialog: closeDialog ?? (() => {}),
315
+ extraVars: { node },
316
+ })
317
+ } catch (e) {
318
+ console.error('[TreeView] action error:', e)
319
+ } finally {
320
+ setRunningIdx(null)
321
+ handleClose()
322
+ }
323
+ }, [actionsConfig, node, viewerContext])
324
+
325
+ const validActions = actionsConfig?.filter(a => a.label?.trim()) ?? []
326
+ if (!validActions.length) return null
327
+
328
+ return (
329
+ <>
330
+ <IconButton
331
+ size='small'
332
+ onClick={handleOpen}
333
+ sx={{ p: 0.3, color: 'text.secondary', opacity: 0, transition: 'opacity 0.15s' }}
334
+ className='tree-actions'
335
+ >
336
+ <MoreVertOutlined sx={{ fontSize: 16 }} />
337
+ </IconButton>
338
+
339
+ <Popover
340
+ open={open}
341
+ anchorEl={anchorEl}
342
+ onClose={handleClose}
343
+ onClick={e => e.stopPropagation()}
344
+ anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
345
+ transformOrigin={{ vertical: 'top', horizontal: 'right' }}
346
+ elevation={4}
347
+ PaperProps={{
348
+ sx: {
349
+ minWidth: 160,
350
+ borderRadius: 1.5,
351
+ overflow: 'hidden',
352
+ p: 0.5,
353
+ },
354
+ }}
355
+ >
356
+ {confirmIdx !== null ? (
357
+ /* ── Confirmation view ───────────────────────────────── */
358
+ <Box sx={{ px: 1.5, py: 1.25 }}>
359
+ <Typography variant='caption' sx={{ display: 'block', mb: 1.25, color: 'text.secondary', lineHeight: 1.5 }}>
360
+ {validActions[confirmIdx].confirmation ?? 'Are you sure?'}
361
+ </Typography>
362
+ <Box display='flex' gap={1}>
363
+ <Button size='small' variant='contained' color='error'
364
+ disabled={runningIdx === confirmIdx}
365
+ onClick={() => runAction(validActions[confirmIdx], confirmIdx)}
366
+ sx={{ flex: 1, fontSize: 12 }}
367
+ >
368
+ {runningIdx === confirmIdx ? <CircularProgress size={12} /> : 'Confirm'}
369
+ </Button>
370
+ <Button size='small' variant='outlined' color='inherit'
371
+ onClick={() => setConfirmIdx(null)}
372
+ sx={{ flex: 1, fontSize: 12 }}
373
+ >
374
+ Cancel
375
+ </Button>
376
+ </Box>
377
+ </Box>
378
+ ) : (
379
+ /* ── Actions list ────────────────────────────────────── */
380
+ validActions.map((action, i) => {
381
+ const isRunning = runningIdx === i
382
+ return (
383
+ <Button
384
+ key={i}
385
+ fullWidth
386
+ size='small'
387
+ variant={action.variant ?? 'text'}
388
+ color={action.color ?? 'inherit'}
389
+ disabled={isRunning || runningIdx !== null}
390
+ startIcon={
391
+ isRunning
392
+ ? <CircularProgress size={13} />
393
+ : <NodeIcon name={action.icon} sx={{ fontSize: 15 }} />
394
+ }
395
+ onClick={() => action.confirmation ? setConfirmIdx(i) : runAction(action, i)}
396
+ sx={{
397
+ justifyContent: 'flex-start',
398
+ borderRadius: 1,
399
+ px: 1.25,
400
+ py: 0.6,
401
+ fontSize: 13,
402
+ fontWeight: 400,
403
+ textTransform: 'none',
404
+ }}
405
+ >
406
+ {action.label}
407
+ </Button>
408
+ )
409
+ })
410
+ )}
411
+ </Popover>
412
+ </>
413
+ )
414
+ }
415
+
416
+ // ── Single tree node ──────────────────────────────────────────────────────────
417
+ function TreeNode({
418
+ node, level,
419
+ // config
420
+ idField, labelField, childrenField, hasChildrenField,
421
+ iconField, defaultIcon, leafIcon,
422
+ selectable, multiSelect, checkboxSelection,
423
+ showLines, showCount, dense, indent, fontSize,
424
+ nodeColor, selectedBg, selectedColor, hoverBg, borderRadius,
425
+ actionsConfig,
426
+ // state
427
+ selectedIds, expandedIds,
428
+ onSelect, onToggle, onLazyExpand, loadingIds,
429
+ viewerContext, isSearch,
430
+ }) {
431
+ const children = node[childrenField] ?? []
432
+ const nodeId = node[idField]
433
+ const label = node[labelField] ?? nodeId
434
+ const isSelected = selectedIds.has(nodeId)
435
+ const isExpanded = expandedIds.has(nodeId)
436
+ const isLoading = loadingIds.has(nodeId)
437
+ const hasKids = children.length > 0
438
+ // Node signals it has children even if not yet loaded
439
+ const flaggedKids = hasChildrenField ? !!node[hasChildrenField] : false
440
+ const expandable = hasKids || flaggedKids
441
+
442
+ const itemPy = dense ? 0.25 : 0.5
443
+ const iconSz = dense ? 14 : 16
444
+ const fSize = fontSize ?? (dense ? 12 : 13)
445
+ const bdRad = borderRadius ?? 1
446
+
447
+ // Resolve icon: node field > defaultIcon > folder/file
448
+ const resolvedIcon = node[iconField]
449
+ ?? (isExpanded && expandable ? (defaultIcon ?? 'FolderOpenOutlined')
450
+ : expandable ? (defaultIcon ?? 'FolderOutlined')
451
+ : (leafIcon ?? defaultIcon ?? null))
452
+
453
+ const handleExpand = e => {
454
+ e.stopPropagation()
455
+ if (!isExpanded && flaggedKids && !hasKids) {
456
+ onLazyExpand(node)
457
+ }
458
+ onToggle(nodeId)
459
+ }
460
+
461
+ const handleSelect = () => {
462
+ if (!selectable) return
463
+ onSelect(node)
464
+ }
465
+
466
+ return (
467
+ <Box>
468
+ {/* ── Node row ─────────────────────────────────────────────────────── */}
469
+ <Box
470
+ onClick={handleSelect}
471
+ sx={{
472
+ display: 'flex', alignItems: 'center',
473
+ py: itemPy,
474
+ pl: `${level * (indent ?? 20) + 4}px`,
475
+ pr: 0.5,
476
+ cursor: selectable ? 'pointer' : 'default',
477
+ bgcolor: isSelected ? (selectedBg ?? 'primary.main') : 'transparent',
478
+ color: isSelected ? (selectedColor ?? 'primary.contrastText') : (nodeColor ?? 'text.primary'),
479
+ borderRadius: bdRad,
480
+ mb: 0.25,
481
+ position: 'relative',
482
+ '&:hover': {
483
+ bgcolor: isSelected
484
+ ? (selectedBg ?? 'primary.main')
485
+ : (hoverBg ?? 'action.hover'),
486
+ },
487
+ '&:hover .tree-actions': { opacity: 1 },
488
+ }}
489
+ >
490
+ {/* Left guide line */}
491
+ {showLines && level > 0 && (
492
+ <Box sx={{
493
+ position: 'absolute',
494
+ left: `${(level - 1) * (indent ?? 20) + 12}px`,
495
+ top: 0, bottom: 0, width: '1px',
496
+ bgcolor: 'divider',
497
+ }} />
498
+ )}
499
+
500
+ {/* Checkbox */}
501
+ {checkboxSelection && (
502
+ <Checkbox
503
+ size='small' checked={isSelected}
504
+ onClick={e => e.stopPropagation()}
505
+ onChange={() => onSelect(node)}
506
+ sx={{ p: 0.3, mr: 0.5 }}
507
+ />
508
+ )}
509
+
510
+ {/* Expand toggle */}
511
+ <Box sx={{ width: iconSz + 4, flexShrink: 0, display: 'flex', alignItems: 'center' }}>
512
+ {expandable ? (
513
+ <IconButton size='small' onClick={handleExpand}
514
+ sx={{ p: 0, color: 'inherit' }}>
515
+ {isLoading
516
+ ? <CircularProgress size={iconSz} />
517
+ : isExpanded
518
+ ? <ExpandMore sx={{ fontSize: iconSz }} />
519
+ : <ChevronRight sx={{ fontSize: iconSz }} />}
520
+ </IconButton>
521
+ ) : (
522
+ <Box sx={{ width: iconSz + 4 }} />
523
+ )}
524
+ </Box>
525
+
526
+ {/* Node icon */}
527
+ {resolvedIcon && (
528
+ <NodeIcon name={resolvedIcon} sx={{ fontSize: iconSz, mr: 0.75, flexShrink: 0, opacity: 0.8 }} />
529
+ )}
530
+
531
+ {/* Label */}
532
+ <Typography
533
+ noWrap
534
+ sx={{ flex: 1, fontSize: fSize, lineHeight: 1.4, color: 'inherit' }}
535
+ >
536
+ {label}
537
+ </Typography>
538
+
539
+ {/* Child count badge */}
540
+ {showCount && expandable && (
541
+ <Typography variant='caption'
542
+ sx={{ ml: 0.5, px: 0.75, py: 0.1, borderRadius: 10,
543
+ bgcolor: isSelected ? 'rgba(255,255,255,0.2)' : 'action.selected',
544
+ color: 'inherit', fontSize: 10, flexShrink: 0 }}>
545
+ {hasKids ? children.length : '…'}
546
+ </Typography>
547
+ )}
548
+
549
+ {/* 3-dots actions popover */}
550
+ {actionsConfig?.length > 0 && (
551
+ <Box onClick={e => e.stopPropagation()} sx={{ flexShrink: 0 }}>
552
+ <NodeActionsMenu
553
+ actionsConfig={actionsConfig}
554
+ node={node}
555
+ viewerContext={viewerContext}
556
+ />
557
+ </Box>
558
+ )}
559
+ </Box>
560
+
561
+ {/* ── Children ─────────────────────────────────────────────────────── */}
562
+ {expandable && (
563
+ <Collapse in={isExpanded} timeout='auto' unmountOnExit>
564
+ {hasKids && (
565
+ <Box>
566
+ {children.map(child => (
567
+ <TreeNode
568
+ key={child[idField]}
569
+ node={child}
570
+ level={level + 1}
571
+ idField={idField} labelField={labelField}
572
+ childrenField={childrenField} hasChildrenField={hasChildrenField}
573
+ iconField={iconField} defaultIcon={defaultIcon} leafIcon={leafIcon}
574
+ selectable={selectable} multiSelect={multiSelect}
575
+ checkboxSelection={checkboxSelection}
576
+ showLines={showLines} showCount={showCount}
577
+ dense={dense} indent={indent} fontSize={fontSize}
578
+ nodeColor={nodeColor} selectedBg={selectedBg}
579
+ selectedColor={selectedColor} hoverBg={hoverBg}
580
+ borderRadius={borderRadius}
581
+ actionsConfig={actionsConfig}
582
+ selectedIds={selectedIds} expandedIds={expandedIds}
583
+ onSelect={onSelect} onToggle={onToggle}
584
+ onLazyExpand={onLazyExpand} loadingIds={loadingIds}
585
+ viewerContext={viewerContext} isSearch={isSearch}
586
+ />
587
+ ))}
588
+ </Box>
589
+ )}
590
+ </Collapse>
591
+ )}
592
+ </Box>
593
+ )
594
+ }
595
+
596
+ // ── Main renderer ─────────────────────────────────────────────────────────────
597
+ export default function TreeViewRenderer({ node, viewerContext }) {
598
+ const main = resolveProps(node, 'main', viewerContext)
599
+
600
+ const {
601
+ dataKey,
602
+ idField = 'id',
603
+ labelField = 'label',
604
+ childrenField = 'children',
605
+ parentIdField = 'parentId',
606
+ hasChildrenField,
607
+
608
+ selectedKey,
609
+ selectable = true,
610
+ multiSelect = false,
611
+ checkboxSelection= false,
612
+
613
+ iconField,
614
+ defaultIcon,
615
+ leafIcon,
616
+
617
+ expandAll = false,
618
+ defaultExpanded,
619
+
620
+ showSearch = false,
621
+ searchPlaceholder= 'Search…',
622
+
623
+ dense = false,
624
+ showLines = false,
625
+ showCount = false,
626
+ indent = 20,
627
+ height,
628
+ fontSize,
629
+ nodeColor,
630
+ selectedBg,
631
+ selectedColor,
632
+ hoverBg,
633
+ borderRadius,
634
+
635
+ actionsConfig = [],
636
+ onSelectCode,
637
+ onExpandCode,
638
+ } = main
639
+
640
+ const { data, setData, isEditMode } = viewerContext ?? {}
641
+
642
+ // ── Raw data ──────────────────────────────────────────────────────────────
643
+ const rawData = resolveValue(dataKey, data) ?? []
644
+
645
+ // ── Normalise (flat → nested) ─────────────────────────────────────────────
646
+ const treeData = useMemo(
647
+ () => normaliseData(rawData, idField, parentIdField, childrenField),
648
+ [rawData, idField, parentIdField, childrenField]
649
+ )
650
+
651
+ // ── Search ────────────────────────────────────────────────────────────────
652
+ const [search, setSearch] = useState('')
653
+ const isSearching = !!search.trim()
654
+ const displayData = useMemo(
655
+ () => filterNodes(treeData, search.trim(), labelField, childrenField),
656
+ [treeData, search, labelField, childrenField]
657
+ )
658
+
659
+ // ── Expanded state ────────────────────────────────────────────────────────
660
+ const allIds = useMemo(() => collectIds(treeData, idField, childrenField), [treeData, idField, childrenField])
661
+
662
+ const [expandedIds, setExpandedIds] = useState(() => {
663
+ if (expandAll) return allIds
664
+ if (Array.isArray(defaultExpanded)) return new Set(defaultExpanded)
665
+ return new Set()
666
+ })
667
+
668
+ // Re-sync when expandAll or defaultExpanded changes, or data first loads
669
+ const didInit = useRef(false)
670
+ useEffect(() => {
671
+ if (!didInit.current && treeData.length > 0) {
672
+ didInit.current = true
673
+ if (expandAll) setExpandedIds(new Set(allIds))
674
+ else if (Array.isArray(defaultExpanded)) setExpandedIds(new Set(defaultExpanded))
675
+ }
676
+ }, [treeData, expandAll, allIds, defaultExpanded])
677
+
678
+ // When searching auto-expand all matches
679
+ useEffect(() => {
680
+ if (isSearching) {
681
+ setExpandedIds(new Set(collectIds(displayData, idField, childrenField)))
682
+ }
683
+ }, [search, displayData, idField, childrenField])
684
+
685
+ const handleToggle = useCallback(id => {
686
+ setExpandedIds(prev => {
687
+ const next = new Set(prev)
688
+ next.has(id) ? next.delete(id) : next.add(id)
689
+ return next
690
+ })
691
+ }, [])
692
+
693
+ // ── Lazy loading ──────────────────────────────────────────────────────────
694
+ const [loadingIds, setLoadingIds] = useState(new Set())
695
+
696
+ const handleLazyExpand = useCallback(async expandedNode => {
697
+ if (!onExpandCode) return
698
+ const nodeId = expandedNode[idField]
699
+ setLoadingIds(prev => new Set(prev).add(nodeId))
700
+ try {
701
+ await executeJSCode(onExpandCode, {
702
+ data: data ?? {},
703
+ form: {},
704
+ setData: setData ?? (() => {}),
705
+ extraVars: { node: expandedNode },
706
+ })
707
+ } catch (e) {
708
+ console.error('[TreeView] onExpand error:', e)
709
+ } finally {
710
+ setLoadingIds(prev => { const s = new Set(prev); s.delete(nodeId); return s })
711
+ }
712
+ }, [onExpandCode, data, setData, idField])
713
+
714
+ // ── Selection ─────────────────────────────────────────────────────────────
715
+ const [selectedIds, setSelectedIds] = useState(new Set())
716
+
717
+ const handleSelect = useCallback(async selectedNode => {
718
+ if (!selectable) return
719
+ const nodeId = selectedNode[idField]
720
+
721
+ let nextSelected
722
+ if (multiSelect || checkboxSelection) {
723
+ nextSelected = new Set(selectedIds)
724
+ nextSelected.has(nodeId) ? nextSelected.delete(nodeId) : nextSelected.add(nodeId)
725
+ } else {
726
+ nextSelected = selectedIds.has(nodeId) ? new Set() : new Set([nodeId])
727
+ }
728
+ setSelectedIds(nextSelected)
729
+
730
+ // Write to data
731
+ if (selectedKey && setData) {
732
+ const selectedNodes = multiSelect || checkboxSelection
733
+ ? rawData.filter(n => nextSelected.has(n[idField]))
734
+ : (nextSelected.has(nodeId) ? selectedNode : null)
735
+ setData(prev => ({ ...(prev ?? {}), [selectedKey]: selectedNodes }))
736
+ }
737
+
738
+ // Run onSelect action
739
+ if (onSelectCode) {
740
+ try {
741
+ await executeJSCode(onSelectCode, {
742
+ data: data ?? {},
743
+ form: {},
744
+ setData: setData ?? (() => {}),
745
+ extraVars: { node: selectedNode },
746
+ })
747
+ } catch (e) {
748
+ console.error('[TreeView] onSelect error:', e)
749
+ }
750
+ }
751
+ }, [selectable, multiSelect, checkboxSelection, selectedIds, idField, selectedKey, setData, rawData, onSelectCode, data])
752
+
753
+ // ── Edit-mode placeholder ─────────────────────────────────────────────────
754
+ if (isEditMode && (!rawData || rawData.length === 0)) {
755
+ return (
756
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
757
+ <Box sx={{
758
+ border: '1px dashed', borderColor: 'divider',
759
+ borderRadius: 1, p: 2, textAlign: 'center',
760
+ color: 'text.disabled', fontSize: 12,
761
+ }}>
762
+ Tree View — bind <strong>dataKey</strong> to populate
763
+ </Box>
764
+ </ViewerComponentWrapper>
765
+ )
766
+ }
767
+
768
+ return (
769
+ <ViewerComponentWrapper node={node} viewerContext={viewerContext}>
770
+ <Box sx={{ display: 'flex', flexDirection: 'column', height: height ? `${height}px` : 'auto' }}>
771
+
772
+ {/* ── Search bar ─────────────────────────────────────────────────── */}
773
+ {showSearch && (
774
+ <Box sx={{ mb: 1 }}>
775
+ <TextField
776
+ size='small' fullWidth
777
+ placeholder={searchPlaceholder}
778
+ value={search}
779
+ onChange={e => setSearch(e.target.value)}
780
+ InputProps={{
781
+ startAdornment: (
782
+ <InputAdornment position='start'>
783
+ <SearchOutlined sx={{ fontSize: 16, color: 'text.disabled' }} />
784
+ </InputAdornment>
785
+ ),
786
+ endAdornment: search ? (
787
+ <InputAdornment position='end'>
788
+ <IconButton size='small' onClick={() => setSearch('')}>
789
+ <ClearOutlined sx={{ fontSize: 14 }} />
790
+ </IconButton>
791
+ </InputAdornment>
792
+ ) : null,
793
+ }}
794
+ sx={{ '& .MuiInputBase-input': { fontSize: 13, py: 0.75 } }}
795
+ />
796
+ </Box>
797
+ )}
798
+
799
+ {/* ── Tree ───────────────────────────────────────────────────────── */}
800
+ <Box sx={{ flex: 1, overflowY: height ? 'auto' : 'visible', pr: 0.5 }}>
801
+ {displayData.length === 0 ? (
802
+ <Typography variant='caption' sx={{ color: 'text.disabled', px: 1 }}>
803
+ {isSearching ? 'No results' : 'No data'}
804
+ </Typography>
805
+ ) : displayData.map(rootNode => (
806
+ <TreeNode
807
+ key={rootNode[idField]}
808
+ node={rootNode}
809
+ level={0}
810
+ idField={idField} labelField={labelField}
811
+ childrenField={childrenField} hasChildrenField={hasChildrenField}
812
+ iconField={iconField} defaultIcon={defaultIcon} leafIcon={leafIcon}
813
+ selectable={selectable} multiSelect={multiSelect}
814
+ checkboxSelection={checkboxSelection}
815
+ showLines={showLines} showCount={showCount}
816
+ dense={dense} indent={indent} fontSize={fontSize}
817
+ nodeColor={nodeColor} selectedBg={selectedBg}
818
+ selectedColor={selectedColor} hoverBg={hoverBg}
819
+ borderRadius={borderRadius}
820
+ actionsConfig={actionsConfig}
821
+ selectedIds={selectedIds} expandedIds={expandedIds}
822
+ onSelect={handleSelect} onToggle={handleToggle}
823
+ onLazyExpand={handleLazyExpand} loadingIds={loadingIds}
824
+ viewerContext={viewerContext} isSearch={isSearching}
825
+ />
826
+ ))}
827
+ </Box>
828
+
829
+ </Box>
830
+ </ViewerComponentWrapper>
831
+ )
832
+ }