)
.build();
})();
diff --git a/client/packages/lowcoder/src/comps/generators/hookToComp.tsx b/client/packages/lowcoder/src/comps/generators/hookToComp.tsx
index 40e92bf4b3..68dce72cdb 100644
--- a/client/packages/lowcoder/src/comps/generators/hookToComp.tsx
+++ b/client/packages/lowcoder/src/comps/generators/hookToComp.tsx
@@ -36,9 +36,11 @@ export function hookToStateComp(useHookFn: () => JSONObject) {
const hookValue = useHookFn();
const stateValue = useMemo(() => comp.children.stateValue.getView(), [comp.children.stateValue]);
- if (!isEqual(hookValue, stateValue)) {
- comp.children.stateValue.dispatchChangeValueAction(hookValue);
- }
+ useEffect(() => {
+ if (!isEqual(hookValue, stateValue)) {
+ comp.children.stateValue.dispatchChangeValueAction(hookValue);
+ }
+ }, [hookValue, stateValue]);
return null;
}
);
diff --git a/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx b/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx
index 61652fb0ff..0d4fb1df06 100644
--- a/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx
+++ b/client/packages/lowcoder/src/comps/hooks/screenInfoComp.tsx
@@ -22,7 +22,9 @@ type ScreenInfo = {
export function useScreenInfo() {
const canvasContainer = document.getElementById(CanvasContainerID);
const canvas = document.getElementsByClassName('lowcoder-app-canvas')?.[0];
- const canvasWidth = canvasContainer?.clientWidth || canvas?.clientWidth;
+ const canvasWidth = useMemo(() => {
+ return canvasContainer?.clientWidth || canvas?.clientWidth;
+ }, [canvasContainer?.clientWidth, canvas?.clientWidth]);
const getDeviceType = (width: number) => {
if (width < 768) return ScreenTypes.Mobile; @@ -71,7 +73,9 @@ export function useScreenInfo() { }, [ updateScreenInfo ]) useEffect(() => {
- updateScreenInfo();
+ if (canvasWidth) {
+ updateScreenInfo();
+ }
}, [canvasWidth]);
return screenInfo;
diff --git a/client/packages/lowcoder/src/comps/hooks/themeComp.tsx b/client/packages/lowcoder/src/comps/hooks/themeComp.tsx
index 7fdff5ed05..8e11723fa8 100644
--- a/client/packages/lowcoder/src/comps/hooks/themeComp.tsx
+++ b/client/packages/lowcoder/src/comps/hooks/themeComp.tsx
@@ -64,12 +64,15 @@ let ThemeTempComp = withViewFn(
return stateValue;
}, [themeList, currentTheme, stateValue])
- if (!isEqual(themeValue, stateValue)) {
- comp.children.stateValue.dispatchChangeValueAction({
- ...exposingTheme(currentTheme),
- allThemes: themeList.map((t) => exposingTheme(t)),
- })
- }
+ useEffect(() => {
+ if (!isEqual(themeValue, stateValue)) {
+ comp.children.stateValue.dispatchChangeValueAction({
+ ...exposingTheme(currentTheme),
+ allThemes: themeList.map((t) => exposingTheme(t)),
+ })
+ }
+ }, [themeValue, stateValue]);
+
return null;
}
);
diff --git a/client/packages/lowcoder/src/comps/index.tsx b/client/packages/lowcoder/src/comps/index.tsx
index 4acecfd144..f00ebaa5a1 100644
--- a/client/packages/lowcoder/src/comps/index.tsx
+++ b/client/packages/lowcoder/src/comps/index.tsx
@@ -128,6 +128,67 @@ import { TextComp } from "./comps/textComp";
import { SelectComp } from "./comps/selectInputComp/selectComp";
import { InputComp } from "./comps/textInputComp/inputComp";
import { TextAreaComp } from "./comps/textInputComp/textAreaComp";
+import { AutoCompleteComp } from "./comps/autoCompleteComp/autoCompleteComp";
+import { AvatarComp } from "./comps/avatar";
+import { AvatarGroupComp } from "./comps/avatarGroup";
+import { DropdownComp } from "./comps/buttonComp/dropdownComp";
+import { FloatButtonComp } from "./comps/buttonComp/floatButtonComp";
+import { LinkComp } from "./comps/buttonComp/linkComp";
+import { ScannerComp } from "./comps/buttonComp/scannerComp";
+import { ToggleButtonComp } from "./comps/buttonComp/toggleButtonComp";
+import { CarouselComp } from "./comps/carouselComp";
+import { CommentComp } from "./comps/commentComp/commentComp";
+import { CardComp } from "./comps/containerComp/cardComp";
+import { CustomComp } from "./comps/customComp/customComp";
+import { DatePickerComp, DateRangeComp } from "./comps/dateComp/dateComp";
+import { TimePickerComp, TimeRangeComp } from "./comps/dateComp/timeComp";
+import { DividerComp } from "./comps/dividerComp";
+import { FileComp } from "./comps/fileComp/fileComp";
+import { FileViewerComp } from "./comps/fileViewerComp";
+import { FormComp } from "./comps/formComp/formComp";
+import { IconComp } from "./comps/iconComp";
+import { IFrameComp } from "./comps/iframeComp";
+import { ImageComp } from "./comps/imageComp";
+import { JsonEditorComp } from "./comps/jsonComp/jsonEditorComp";
+import { JsonExplorerComp } from "./comps/jsonComp/jsonExplorerComp";
+import { JsonLottieComp } from "./comps/jsonComp/jsonLottieComp";
+import { JsonSchemaFormComp } from "./comps/jsonSchemaFormComp/jsonSchemaFormComp";
+import { ListViewComp, GridComp } from "./comps/listViewComp";
+import { AudioComp } from "./comps/mediaComp/audioComp";
+import { ColorPickerComp } from "./comps/mediaComp/colorPickerComp";
+import { VideoComp } from "./comps/mediaComp/videoComp";
+import { ControlButton } from "./comps/meetingComp/controlButton";
+import { NavComp } from "./comps/navComp/navComp";
+import { NumberInputComp } from "./comps/numberInputComp/numberInputComp";
+import { RangeSliderComp } from "./comps/numberInputComp/rangeSliderComp";
+import { SliderComp } from "./comps/numberInputComp/sliderComp";
+import { PageLayoutComp } from "./comps/containerComp/pageLayoutComp";
+import { ProgressCircleComp } from "./comps/progressCircleComp";
+import { ProgressComp } from "./comps/progressComp";
+import { QRCodeComp } from "./comps/qrCodeComp";
+import { RatingComp } from "./comps/ratingComp";
+import { ResponsiveLayoutComp } from "./comps/responsiveLayout";
+import { RichTextEditorComp } from "./comps/richTextEditorComp";
+import { CascaderWithDefault } from "./comps/selectInputComp/cascaderComp";
+import { CheckboxComp } from "./comps/selectInputComp/checkboxComp";
+import { MultiSelectComp } from "./comps/selectInputComp/multiSelectComp";
+import { RadioComp } from "./comps/selectInputComp/radioComp";
+import { SegmentedControlComp } from "./comps/selectInputComp/segmentedControl";
+import { StepComp } from "./comps/selectInputComp/stepControl";
+import { ShapeComp } from "./comps/shapeComp/shapeComp";
+import { SignatureComp } from "./comps/signatureComp";
+import { SplitLayoutComp } from "./comps/splitLayout";
+import { SwitchComp } from "./comps/switchComp";
+import { MentionComp } from "./comps/textInputComp/mentionComp";
+import { PasswordComp } from "./comps/textInputComp/passwordComp";
+import { TimeLineComp } from "./comps/timelineComp/timelineComp";
+import { TimerComp } from "./comps/timerComp";
+import { TourComp } from "./comps/tourComp/tourComp";
+import { transferComp } from "./comps/transferComp";
+import { TreeComp } from "./comps/treeComp/treeComp";
+import { TreeSelectComp } from "./comps/treeComp/treeSelectComp";
+import { DrawerComp } from "./hooks/drawerComp";
+import { ModalComp } from "./hooks/modalComp";
type Registry = {
[key in UICompType]?: UICompManifest;
@@ -407,9 +468,7 @@ export var uiCompMap: Registry = {
categories: ["dashboards"],
icon: TimeLineCompIcon,
keywords: trans("uiComp.timelineCompKeywords"),
- lazyLoad: true,
- compName: "TimeLineComp",
- compPath: "comps/timelineComp/timelineComp",
+ comp: TimeLineComp,
layoutInfo: {
w: 12,
h: 40,
@@ -425,9 +484,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: ResponsiveLayoutCompIcon,
keywords: trans("uiComp.responsiveLayoutCompKeywords"),
- lazyLoad: true,
- compName: "ResponsiveLayoutComp",
- compPath: "comps/responsiveLayout/index",
+ comp: ResponsiveLayoutComp,
withoutLoading: true,
layoutInfo: {
w: 24,
@@ -442,9 +499,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: PageLayoutCompIcon,
keywords: trans("uiComp.pageLayoutCompKeywords"),
- lazyLoad: true,
- compName: "PageLayoutComp",
- compPath: "comps/containerComp/pageLayoutComp",
+ comp: PageLayoutComp,
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -477,9 +532,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: SplitLayoutCompIcon,
keywords: trans("uiComp.splitLayoutCompKeywords"),
- lazyLoad: true,
- compName: "SplitLayoutComp",
- compPath: "comps/splitLayout/index",
+ comp: SplitLayoutComp,
withoutLoading: true,
layoutInfo: {
w: 24,
@@ -494,9 +547,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: FloatingTextCompIcon,
keywords: trans("uiComp.floatTextContainerCompKeywords"),
- lazyLoad: true,
- compName: "ContainerComp",
- compPath: "comps/containerComp/textContainerComp",
+ comp: ContainerComp,
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -514,9 +565,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.cardCompDesc"),
categories: ["layout"],
keywords: trans("uiComp.cardCompKeywords"),
- lazyLoad: true,
- compName: "CardComp",
- compPath: "comps/containerComp/cardComp",
+ comp: CardComp,
layoutInfo: {
h: 44,
w: 6,
@@ -545,9 +594,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: CollapsibleContainerCompIcon,
keywords: trans("uiComp.collapsibleContainerCompKeywords"),
- lazyLoad: true,
- compName: "ContainerComp",
- compPath: "comps/containerComp/containerComp",
+ comp: ContainerComp,
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -582,9 +629,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.listViewCompDesc"),
categories: ["layout"],
keywords: trans("uiComp.listViewCompKeywords"),
- lazyLoad: true,
- compName: "ListViewComp",
- compPath: "comps/listViewComp/index",
+ comp: ListViewComp,
layoutInfo: {
w: 12,
h: 40,
@@ -600,9 +645,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.gridCompDesc"),
categories: ["layout"],
keywords: trans("uiComp.gridCompKeywords"),
- lazyLoad: true,
- compName: "GridComp",
- compPath: "comps/listViewComp/index",
+ comp: GridComp,
layoutInfo: {
w: 12,
h: 40,
@@ -618,9 +661,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.modalCompDesc"),
categories: ["layout"],
keywords: trans("uiComp.modalCompKeywords"),
- lazyLoad: true,
- compName: "ModalComp",
- compPath: "hooks/modalComp",
+ comp: ModalComp,
withoutLoading: true,
},
drawer: {
@@ -630,9 +671,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: DrawerCompIcon,
keywords: trans("uiComp.drawerCompKeywords"),
- lazyLoad: true,
- compName: "DrawerComp",
- compPath: "hooks/drawerComp",
+ comp: DrawerComp,
withoutLoading: true,
},
divider: {
@@ -642,9 +681,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: DividerCompIcon,
keywords: trans("uiComp.dividerCompKeywords"),
- lazyLoad: true,
- compName: "DividerComp",
- compPath: "comps/dividerComp",
+ comp: DividerComp,
layoutInfo: {
w: 12,
h: 1,
@@ -657,9 +694,7 @@ export var uiCompMap: Registry = {
icon: NavComIcon,
categories: ["layout"],
keywords: trans("uiComp.navigationCompKeywords"),
- lazyLoad: true,
- compName: "NavComp",
- compPath: "comps/navComp/navComp",
+ comp: NavComp,
layoutInfo: {
w: 24,
h: 5,
@@ -672,9 +707,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: StepCompIcon,
keywords: trans("uiComp.stepControlCompKeywords"),
- lazyLoad: true,
- compName: "StepComp",
- compPath: "comps/selectInputComp/stepControl",
+ comp: StepComp,
layoutInfo: {
w: 19,
h: 6,
@@ -687,9 +720,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: CascaderCompIcon,
keywords: trans("uiComp.cascaderCompKeywords"),
- lazyLoad: true,
- compName: "CascaderWithDefault",
- compPath: "comps/selectInputComp/cascaderComp",
+ comp: CascaderWithDefault,
layoutInfo: {
w: 9,
h: 5,
@@ -702,9 +733,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: LinkCompIcon,
keywords: trans("uiComp.linkCompKeywords"),
- lazyLoad: true,
- compName: "LinkComp",
- compPath: "comps/buttonComp/linkComp",
+ comp: LinkComp,
layoutInfo: {
w: 6,
h: 5,
@@ -717,9 +746,7 @@ export var uiCompMap: Registry = {
categories: ["layout"],
icon: FloatingButtonCompIcon,
keywords: trans("uiComp.floatButtonCompKeywords"),
- lazyLoad: true,
- compName: "FloatButtonComp",
- compPath: "comps/buttonComp/floatButtonComp",
+ comp: FloatButtonComp,
layoutInfo: {
w: 1,
h: 1,
@@ -749,9 +776,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.timerCompDesc"),
categories: ["scheduling", "projectmanagement"],
keywords: trans("uiComp.timerCompKeywords"),
- lazyLoad: true,
- compName: "TimerComp",
- compPath: "comps/timerComp",
+ comp: TimerComp,
layoutInfo: {
h: 14,
w: 6,
@@ -807,9 +832,7 @@ export var uiCompMap: Registry = {
categories: ["collaboration"],
icon: AvatarCompIcon,
keywords: trans("uiComp.avatarCompKeywords"),
- lazyLoad: true,
- compName: "AvatarComp",
- compPath: "comps/avatar",
+ comp: AvatarComp,
layoutInfo: {
w: 6,
h: 6,
@@ -823,9 +846,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.avatarGroupCompDesc"),
categories: ["collaboration"],
keywords: trans("uiComp.avatarGroupCompKeywords"),
- lazyLoad: true,
- compName: "AvatarGroupComp",
- compPath: "comps/avatarGroup",
+ comp: AvatarGroupComp,
withoutLoading: true,
layoutInfo: {
w: 6,
@@ -840,9 +861,7 @@ export var uiCompMap: Registry = {
categories: ["collaboration"],
icon: CommentCompIcon,
keywords: trans("uiComp.commentCompKeywords"),
- lazyLoad: true,
- compName: "CommentComp",
- compPath: "comps/commentComp/commentComp",
+ comp: CommentComp,
layoutInfo: {
w: 12,
h: 55,
@@ -855,9 +874,7 @@ export var uiCompMap: Registry = {
categories: ["collaboration"],
icon: MentionCompIcon,
keywords: trans("uiComp.mentionCompKeywords"),
- lazyLoad: true,
- compName: "MentionComp",
- compPath: "comps/textInputComp/mentionComp",
+ comp: MentionComp,
},
// Forms
@@ -869,9 +886,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: FormCompIcon,
keywords: trans("uiComp.formCompKeywords"),
- lazyLoad: true,
- compName: "FormComp",
- compPath: "comps/formComp/formComp",
+ comp: FormComp,
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -889,9 +904,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: JsonFormCompIcon,
keywords: trans("uiComp.jsonSchemaFormCompKeywords"),
- lazyLoad: true,
- compName: "JsonSchemaFormComp",
- compPath: "comps/jsonSchemaFormComp/jsonSchemaFormComp",
+ comp: JsonSchemaFormComp,
layoutInfo: {
w: 12,
h: 50,
@@ -904,9 +917,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: JsonEditorCompIcon,
keywords: trans("uiComp.jsonEditorCompKeywords"),
- lazyLoad: true,
- compName: "JsonEditorComp",
- compPath: "comps/jsonComp/jsonEditorComp",
+ comp: JsonEditorComp,
layoutInfo: {
w: 12,
h: 50,
@@ -919,9 +930,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: JsonExplorerCompIcon,
keywords: trans("uiComp.jsonExplorerCompKeywords"),
- lazyLoad: true,
- compName: "JsonExplorerComp",
- compPath: "comps/jsonComp/jsonExplorerComp",
+ comp: JsonExplorerComp,
layoutInfo: {
w: 12,
h: 50,
@@ -934,9 +943,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.richTextEditorCompDesc"),
icon: RichTextEditorCompIcon,
keywords: trans("uiComp.richTextEditorCompKeywords"),
- lazyLoad: true,
- compName: "RichTextEditorComp",
- compPath: "comps/richTextEditorComp",
+ comp: RichTextEditorComp,
layoutInfo: {
w: 12,
h: 50,
@@ -962,9 +969,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: PasswordCompIcon,
keywords: trans("uiComp.passwordCompKeywords"),
- lazyLoad: true,
- compName: "PasswordComp",
- compPath: "comps/textInputComp/passwordComp",
+ comp: PasswordComp,
layoutInfo: {
w: 6,
h: 6,
@@ -977,9 +982,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: NumberInputCompIcon,
keywords: trans("uiComp.numberInputCompKeywords"),
- lazyLoad: true,
- compName: "NumberInputComp",
- compPath: "comps/numberInputComp/numberInputComp",
+ comp: NumberInputComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1007,9 +1010,10 @@ export var uiCompMap: Registry = {
keywords: cnchar
.spell(trans("uiComp.autoCompleteCompName"), "first", "low")
.toString(),
- lazyLoad: true,
- compName: "AutoCompleteComp",
- compPath: "comps/autoCompleteComp/autoCompleteComp",
+ comp: AutoCompleteComp,
+ // lazyLoad: true,
+ // compName: "AutoCompleteComp",
+ // compPath: "comps/autoCompleteComp/autoCompleteComp",
layoutInfo: {
w: 6,
h: 5,
@@ -1022,9 +1026,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: SwitchCompIcon,
keywords: trans("uiComp.switchCompKeywords"),
- lazyLoad: true,
- compName: "SwitchComp",
- compPath: "comps/switchComp",
+ comp: SwitchComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1037,9 +1039,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: CheckboxCompIcon,
keywords: trans("uiComp.checkboxCompKeywords"),
- lazyLoad: true,
- compName: "CheckboxComp",
- compPath: "comps/selectInputComp/checkboxComp",
+ comp: CheckboxComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1052,9 +1052,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: RadioCompIcon,
keywords: trans("uiComp.radioCompKeywords"),
- lazyLoad: true,
- compName: "RadioComp",
- compPath: "comps/selectInputComp/radioComp",
+ comp: RadioComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1067,9 +1065,7 @@ export var uiCompMap: Registry = {
categories: ["forms", "scheduling"],
icon: DateCompIcon,
keywords: trans("uiComp.dateCompKeywords"),
- lazyLoad: true,
- compName: "DatePickerComp",
- compPath: "comps/dateComp/dateComp",
+ comp: DatePickerComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1082,9 +1078,7 @@ export var uiCompMap: Registry = {
categories: ["forms", "scheduling"],
icon: DateRangeCompIcon,
keywords: trans("uiComp.dateRangeCompKeywords"),
- lazyLoad: true,
- compName: "DateRangeComp",
- compPath: "comps/dateComp/dateComp",
+ comp: DateRangeComp,
layoutInfo: {
w: 12,
h: 6,
@@ -1097,9 +1091,7 @@ export var uiCompMap: Registry = {
categories: ["forms", "scheduling"],
icon: TimeCompIcon,
keywords: trans("uiComp.timeCompKeywords"),
- lazyLoad: true,
- compName: "TimePickerComp",
- compPath: "comps/dateComp/timeComp",
+ comp: TimePickerComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1112,9 +1104,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.timeRangeCompDesc"),
icon: TimeRangeCompIcon,
keywords: trans("uiComp.timeRangeCompKeywords"),
- lazyLoad: true,
- compName: "TimeRangeComp",
- compPath: "comps/dateComp/timeComp",
+ comp: TimeRangeComp,
layoutInfo: {
w: 12,
h: 6,
@@ -1128,9 +1118,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: SliderCompIcon,
keywords: trans("uiComp.sliderCompKeywords"),
- lazyLoad: true,
- compName: "SliderComp",
- compPath: "comps/numberInputComp/sliderComp",
+ comp: SliderComp,
layoutInfo: {
w: 6,
h: 5,
@@ -1143,9 +1131,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: RangeSliderCompIcon,
keywords: trans("uiComp.rangeSliderCompKeywords"),
- lazyLoad: true,
- compName: "RangeSliderComp",
- compPath: "comps/numberInputComp/rangeSliderComp",
+ comp: RangeSliderComp,
layoutInfo: {
w: 6,
h: 5,
@@ -1173,9 +1159,7 @@ export var uiCompMap: Registry = {
categories: ["forms", "collaboration"],
icon: IconButtonCompIcon,
keywords: trans("uiComp.meetingCompKeywords"),
- lazyLoad: true,
- compName: "ControlButton",
- compPath: "comps/meetingComp/controlButton",
+ comp: ControlButton,
withoutLoading: true,
layoutInfo: {
w: 3,
@@ -1189,9 +1173,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: DropdownCompIcon,
keywords: trans("uiComp.dropdownCompKeywords"),
- lazyLoad: true,
- compName: "DropdownComp",
- compPath: "comps/buttonComp/dropdownComp",
+ comp: DropdownComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1204,9 +1186,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: ToggleButtonCompIcon,
keywords: trans("uiComp.toggleButtonCompKeywords"),
- lazyLoad: true,
- compName: "ToggleButtonComp",
- compPath: "comps/buttonComp/toggleButtonComp",
+ comp: ToggleButtonComp,
layoutInfo: {
w: 3,
h: 6,
@@ -1219,9 +1199,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: SegmentedCompIcon,
keywords: trans("uiComp.segmentedControlCompKeywords"),
- lazyLoad: true,
- compName: "SegmentedControlComp",
- compPath: "comps/selectInputComp/segmentedControl",
+ comp: SegmentedControlComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1235,9 +1213,7 @@ export var uiCompMap: Registry = {
categories: ["forms"],
icon: RatingCompIcon,
keywords: trans("uiComp.ratingCompKeywords"),
- lazyLoad: true,
- compName: "RatingComp",
- compPath: "comps/ratingComp",
+ comp: RatingComp,
layoutInfo: {
w: 6,
h: 6,
@@ -1331,9 +1307,7 @@ export var uiCompMap: Registry = {
categories: ["dashboards", "projectmanagement"],
icon: ProgressCompIcon,
keywords: trans("uiComp.progressCompKeywords"),
- lazyLoad: true,
- compName: "ProgressComp",
- compPath: "comps/progressComp",
+ comp: ProgressComp,
layoutInfo: {
w: 6,
h: 5,
@@ -1346,9 +1320,7 @@ export var uiCompMap: Registry = {
categories: ["dashboards", "projectmanagement"],
icon: ProcessCircleCompIcon,
keywords: trans("uiComp.progressCircleCompKeywords"),
- lazyLoad: true,
- compName: "ProgressCircleComp",
- compPath: "comps/progressCircleComp",
+ comp: ProgressCircleComp,
layoutInfo: {
w: 6,
h: 20,
@@ -1364,9 +1336,7 @@ export var uiCompMap: Registry = {
categories: ["documents"],
icon: UploadCompIcon,
keywords: trans("uiComp.fileUploadCompKeywords"),
- lazyLoad: true,
- compName: "FileComp",
- compPath: "comps/fileComp/fileComp",
+ comp: FileComp,
layoutInfo: {
w: 6,
h: 5,
@@ -1379,9 +1349,7 @@ export var uiCompMap: Registry = {
categories: ["documents"],
icon: FileViewerCompIcon,
keywords: trans("uiComp.fileViewerCompKeywords"),
- lazyLoad: true,
- compName: "FileViewerComp",
- compPath: "comps/fileViewerComp",
+ comp: FileViewerComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1397,9 +1365,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia"],
icon: ImageCompIcon,
keywords: trans("uiComp.imageCompKeywords"),
- lazyLoad: true,
- compName: "ImageComp",
- compPath: "comps/imageComp",
+ comp: ImageComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1412,9 +1378,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia"],
icon: CarouselCompIcon,
keywords: trans("uiComp.drawerCompKeywords"),
- lazyLoad: true,
- compName: "CarouselComp",
- compPath: "comps/carouselComp",
+ comp: CarouselComp,
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -1428,9 +1392,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia"],
icon: AudioCompIcon,
keywords: trans("uiComp.audioCompKeywords"),
- lazyLoad: true,
- compName: "AudioComp",
- compPath: "comps/mediaComp/audioComp",
+ comp: AudioComp,
layoutInfo: {
w: 6,
h: 5,
@@ -1443,9 +1405,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia"],
icon: VideoCompIcon,
keywords: trans("uiComp.videoCompKeywords"),
- lazyLoad: true,
- compName: "VideoComp",
- compPath: "comps/mediaComp/videoComp",
+ comp: VideoComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1459,9 +1419,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia", "dashboards"],
icon: ShapesCompIcon,
keywords: trans("uiComp.shapeCompKeywords"),
- lazyLoad: true,
- compName: "ShapeComp",
- compPath: "comps/shapeComp/shapeComp",
+ comp: ShapeComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1475,9 +1433,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia"],
icon: LottieAnimationCompIcon,
keywords: trans("uiComp.jsonLottieCompKeywords"),
- lazyLoad: true,
- compName: "JsonLottieComp",
- compPath: "comps/jsonComp/jsonLottieComp",
+ comp: JsonLottieComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1490,9 +1446,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia"],
icon: IconCompIcon,
keywords: trans("uiComp.iconCompKeywords"),
- lazyLoad: true,
- compName: "IconComp",
- compPath: "comps/iconComp",
+ comp: IconComp,
layoutInfo: {
w: 2,
h: 10,
@@ -1520,9 +1474,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia"],
icon: ColorPickerCompIcon,
keywords: trans("uiComp.colorPickerCompKeywords"),
- lazyLoad: true,
- compName: "ColorPickerComp",
- compPath: "comps/mediaComp/colorPickerComp",
+ comp: ColorPickerComp,
},
// item Handling
@@ -1534,9 +1486,7 @@ export var uiCompMap: Registry = {
categories: ["itemHandling", "documents"],
icon: QRCodeCompIcon,
keywords: trans("uiComp.qrCodeCompKeywords"),
- lazyLoad: true,
- compName: "QRCodeComp",
- compPath: "comps/qrCodeComp",
+ comp: QRCodeComp,
layoutInfo: {
w: 6,
h: 32,
@@ -1549,9 +1499,7 @@ export var uiCompMap: Registry = {
categories: ["itemHandling"],
icon: ScannerCompIcon,
keywords: trans("uiComp.scannerCompKeywords"),
- lazyLoad: true,
- compName: "ScannerComp",
- compPath: "comps/buttonComp/scannerComp",
+ comp: ScannerComp,
layoutInfo: {
w: 6,
h: 5,
@@ -1564,9 +1512,7 @@ export var uiCompMap: Registry = {
categories: ["itemHandling"],
icon: SignatureCompIcon,
keywords: trans("uiComp.signatureCompKeywords"),
- lazyLoad: true,
- compName: "SignatureComp",
- compPath: "comps/signatureComp",
+ comp: SignatureComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1592,9 +1538,7 @@ export var uiCompMap: Registry = {
categories: ["multimedia", "itemHandling"],
icon: TourCompIcon,
keywords: trans("uiComp.tourCompKeywords"),
- lazyLoad: true,
- compName: "TourComp",
- compPath: "comps/tourComp/tourComp",
+ comp: TourComp,
layoutInfo: {
w: 1,
h: 1,
@@ -1607,9 +1551,7 @@ export var uiCompMap: Registry = {
categories: ["forms", "itemHandling"],
icon: MultiSelectCompIcon,
keywords: trans("uiComp.multiSelectCompKeywords"),
- lazyLoad: true,
- compName: "MultiSelectComp",
- compPath: "comps/selectInputComp/multiSelectComp",
+ comp: MultiSelectComp,
layoutInfo: {
w: 6,
h: 5,
@@ -1622,9 +1564,7 @@ export var uiCompMap: Registry = {
categories: ["layout", "itemHandling", "documents"],
icon: TreeDisplayCompIcon,
keywords: trans("uiComp.treeCompKeywords"),
- lazyLoad: true,
- compName: "TreeComp",
- compPath: "comps/treeComp/treeComp",
+ comp: TreeComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1637,9 +1577,7 @@ export var uiCompMap: Registry = {
categories: ["layout", "itemHandling", "documents"],
icon: TreeSelectCompIcon,
keywords: trans("uiComp.treeSelectCompKeywords"),
- lazyLoad: true,
- compName: "TreeSelectComp",
- compPath: "comps/treeComp/treeSelectComp",
+ comp: TreeSelectComp,
layoutInfo: {
w: 12,
h: 5,
@@ -1652,9 +1590,7 @@ export var uiCompMap: Registry = {
description: trans("uiComp.transferDesc"),
categories: ["itemHandling", "documents"],
keywords: trans("uiComp.transferKeywords"),
- lazyLoad: true,
- compName: "transferComp",
- compPath: "comps/transferComp",
+ comp: transferComp,
layoutInfo: {
w: 12,
h: 50,
@@ -1689,9 +1625,7 @@ export var uiCompMap: Registry = {
icon: IFrameCompIcon,
categories: ["integration"],
keywords: trans("uiComp.iframeCompKeywords"),
- lazyLoad: true,
- compName: "IFrameComp",
- compPath: "comps/iframeComp",
+ comp: IFrameComp,
layoutInfo: {
w: 12,
h: 40,
@@ -1704,9 +1638,7 @@ export var uiCompMap: Registry = {
icon: CustomCompIcon,
categories: ["integration"],
keywords: trans("uiComp.customCompKeywords"),
- lazyLoad: true,
- compName: "CustomComp",
- compPath: "comps/customComp/customComp",
+ comp: CustomComp,
layoutInfo: {
w: 12,
h: 40,
diff --git a/client/packages/lowcoder/src/comps/utils/useCompInstance.tsx b/client/packages/lowcoder/src/comps/utils/useCompInstance.tsx
index 812ae73899..c15e7c0dbb 100644
--- a/client/packages/lowcoder/src/comps/utils/useCompInstance.tsx
+++ b/client/packages/lowcoder/src/comps/utils/useCompInstance.tsx
@@ -304,11 +304,11 @@ export function useCompInstance
(
let updateHandler = () => setComp(container.comp);
- if (UPDATE_ROOT_VIEW_DEBOUNCE> 0) {
+ // if (UPDATE_ROOT_VIEW_DEBOUNCE> 0) {
updateHandler = debounce(() => {
setComp(container.comp);
- }, UPDATE_ROOT_VIEW_DEBOUNCE);
- }
+ }, 50 /* UPDATE_ROOT_VIEW_DEBOUNCE */);
+ // }
const finalHandlers = [...(handlers || []), updateHandler];
finalHandlers.forEach((handler) => container.addChangeListener(handler));
diff --git a/client/packages/lowcoder/src/layout/calculateUtils.tsx b/client/packages/lowcoder/src/layout/calculateUtils.tsx
index 1d919bd1bf..44a661e001 100644
--- a/client/packages/lowcoder/src/layout/calculateUtils.tsx
+++ b/client/packages/lowcoder/src/layout/calculateUtils.tsx
@@ -93,7 +93,6 @@ export function calcGridItemSizePx(
const width = calcGridItemWHPx(w, colWidth, margin[0], false);
const isTouchSBound = top ? isTouchBound(maxRows, rowHeight, h, top) : false;
- // console.log('positionParams',positionParams);
const height = calcGridItemWHPx(h, rowHeight, margin[1], isTouchSBound);
return { width, height };
}
diff --git a/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx b/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx
index 4b347907ea..d9eb475d4d 100644
--- a/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx
+++ b/client/packages/lowcoder/src/layout/compSelectionWrapper.tsx
@@ -11,6 +11,7 @@ import React, {
MouseEventHandler,
useCallback,
useContext,
+ useMemo,
useRef,
useState,
} from "react";
@@ -18,7 +19,8 @@ import ReactResizeDetector, { useResizeDetector } from "react-resize-detector";
import styled, { css } from "styled-components";
import { EllipsisTextCss } from "lowcoder-design";
import { draggingUtils } from "./draggingUtils";
-import { ResizeHandleAxis } from "./gridLayoutPropTypes";
+import type { ResizeHandleAxis } from "./gridLayoutPropTypes";
+import { isEqual } from "lodash";
export type DragHandleName = "w" | "e" | "nw" | "ne" | "sw" | "se";
type NamePos = "top" | "bottom" | "bottomInside";
@@ -273,7 +275,7 @@ export const CompSelectionWrapper = React.memo((props: {
}
setHover(true);
},
- [setHover]
+ [nameDivRef.current, setHover]
);
const onMouseOut = useCallback(
(e: MouseEvent) => {
@@ -287,42 +289,61 @@ export const CompSelectionWrapper = React.memo((props: {
}
setHover(false);
},
- [setHover]
+ [nameDivRef.current, setHover]
);
- const selectableDivProps = props.isSelectable
- ? {
- onMouseOver,
- onMouseOut,
- onClick: props.onClick,
- $hover: hover || undefined,
- $showDashLine: editorState.showGridLines() || props.hidden,
- $isSelected: props.isSelected,
- $isHidden: props.hidden,
- }
- : {
- $hover: undefined,
- $showDashLine: false,
- $isSelected: false,
- $isHidden: false,
- };
+ const selectableDivProps = useMemo(() => {
+ return props.isSelectable
+ ? {
+ onMouseOver,
+ onMouseOut,
+ onClick: props.onClick,
+ $hover: hover || undefined,
+ $showDashLine: editorState.showGridLines() || props.hidden,
+ $isSelected: props.isSelected,
+ $isHidden: props.hidden,
+ }
+ : {
+ $hover: undefined,
+ $showDashLine: false,
+ $isSelected: false,
+ $isHidden: false,
+ };
+ }, [
+ hover,
+ props.hidden,
+ props.isSelected,
+ props.isSelectable,
+ ]);
+
+ const zIndex = useMemo(() => {
+ return props.isSelected
+ ? Layers.compSelected
+ : hover
+ ? Layers.compHover
+ : props.hidden
+ ? Layers.compHidden
+ : undefined;
+ }, [
+ hover,
+ props.hidden,
+ props.isSelected
+ ]);
- const zIndex = props.isSelected
- ? Layers.compSelected
- : hover
- ? Layers.compHover
- : props.hidden
- ? Layers.compHidden
- : undefined;
+ const needResizeDetector = useMemo(() => {
+ return props.autoHeight && !props.placeholder;
+ }, [props.autoHeight, props.placeholder]);
- const needResizeDetector = props.autoHeight && !props.placeholder;
const { ref: wrapperRef } = useResizeDetector({
onResize: props.onWrapperResize,
handleHeight: needResizeDetector,
handleWidth: false,
+ refreshMode: 'debounce',
+ refreshRate: 100,
});
// log.debug("CompSelectionWrapper. name: ", props.name, " zIndex: ", zIndex);
const { nameConfig, resizeIconSize } = props;
+
return (
@@ -380,4 +411,4 @@ export const CompSelectionWrapper = React.memo((props: {
);
-});
+}, (prev, next) => isEqual(prev, next));
diff --git a/client/packages/lowcoder/src/layout/gridItem.tsx b/client/packages/lowcoder/src/layout/gridItem.tsx
index 963c1c0567..3594f3acd3 100644
--- a/client/packages/lowcoder/src/layout/gridItem.tsx
+++ b/client/packages/lowcoder/src/layout/gridItem.tsx
@@ -113,8 +113,8 @@ export const GridItem = React.memo((props: GridItemProps) => {
maxRows: props.maxRows,
}, props.x, props.y, props.w, props.h)},
[
- props.margin,
- props.containerPadding,
+ JSON.stringify(props.margin),
+ JSON.stringify(props.containerPadding),
props.containerWidth,
props.cols,
props.rowHeight,
@@ -123,7 +123,6 @@ export const GridItem = React.memo((props: GridItemProps) => {
props.y,
props.w,
props.h,
- calcGridItemPosition,
]
);
@@ -230,8 +229,8 @@ export const GridItem = React.memo((props: GridItemProps) => {
y: yy,
});
}, [
- resizing,
- dragging,
+ JSON.stringify(resizing),
+ JSON.stringify(dragging),
props.cols,
props.maxRows,
props.x,
@@ -417,7 +416,7 @@ export const GridItem = React.memo((props: GridItemProps) => {
itemHeightRef.current = height;
}
adjustWrapperHeight(width, height);
- }, [itemHeightRef, adjustWrapperHeight]);
+ }, [itemHeightRef.current, adjustWrapperHeight]);
/**
* re-calculate the occupied gird-cells.
@@ -427,7 +426,7 @@ export const GridItem = React.memo((props: GridItemProps) => {
*/
const onWrapperSizeChange = useCallback(() => {
adjustWrapperHeight(undefined, itemHeightRef.current);
- }, [itemHeightRef, adjustWrapperHeight]);
+ }, [itemHeightRef.current, adjustWrapperHeight]);
const mixinChildWrapper = useCallback((child: React.ReactElement): React.ReactElement => {
const {
@@ -535,6 +534,21 @@ export const GridItem = React.memo((props: GridItemProps) => {
const pos = useMemo(calcPosition, [calcPosition]);
+ const transform = useMemo(() => {
+ return setTransform(
+ pos,
+ props.name,
+ props.autoHeight,
+ props.hidden,
+ Boolean(draggingUtils.isDragging())
+ )
+ }, [
+ JSON.stringify(pos),
+ props.name,
+ props.autoHeight,
+ props.hidden
+ ]);
+
const render = useMemo(() => {
let child = React.Children.only(children);
// Create the child element. We clone the existing element but modify its className and style.
@@ -563,13 +577,7 @@ export const GridItem = React.memo((props: GridItemProps) => {
cssTransforms: true,
}),
style: {
- ...setTransform(
- pos,
- props.name,
- props.autoHeight,
- props.hidden,
- Boolean(draggingUtils.isDragging())
- ),
+ ...transform,
opacity: layoutHide ? 0 : undefined,
pointerEvents: layoutHide ? "none" : "auto",
},
@@ -580,11 +588,12 @@ export const GridItem = React.memo((props: GridItemProps) => {
newChild = mixinDraggable(newChild, isDraggable);
return newChild;
}, [
- pos,
+ JSON.stringify(transform),
+ JSON.stringify(pos),
children,
elementRef,
- resizing,
- dragging,
+ Boolean(resizing),
+ Boolean(dragging),
isDraggable,
layoutHide,
zIndex,
@@ -593,8 +602,6 @@ export const GridItem = React.memo((props: GridItemProps) => {
props.className,
props.style,
props.static,
- props.autoHeight,
- props.hidden,
setTransform,
mixinChildWrapper,
mixinResizable,
diff --git a/client/packages/lowcoder/src/layout/gridLayout.tsx b/client/packages/lowcoder/src/layout/gridLayout.tsx
index 0b88786c25..0b25763b77 100644
--- a/client/packages/lowcoder/src/layout/gridLayout.tsx
+++ b/client/packages/lowcoder/src/layout/gridLayout.tsx
@@ -1,8 +1,8 @@
import clsx from "clsx";
import { colord } from "colord";
-import { UICompType } from "comps/uiCompRegistry";
+import type { UICompType } from "comps/uiCompRegistry";
import { ModulePrimaryColor, PrimaryColor } from "constants/style";
-import _ from "lodash";
+import _, { isEqual } from "lodash";
import log from "loglevel";
import React, { DragEvent, DragEventHandler, MouseEventHandler, ReactElement } from "react";
import ReactResizeDetector from "react-resize-detector";
@@ -21,7 +21,7 @@ import {
import { draggingUtils } from "./draggingUtils";
import { FlyOverInfo, FlyStartInfo } from "./flyInfo";
import { GridItem } from "./gridItem";
-import { GridLayoutProps } from "./gridLayoutPropTypes";
+import type { GridLayoutProps } from "./gridLayoutPropTypes";
import { GridLines } from "./gridLines";
import { changeItemOp, deleteItemOp, LayoutOp, renameItemOp } from "./layoutOp";
import { getUILayout, LayoutOps, layoutOpUtils } from "./layoutOpUtils";
@@ -1102,7 +1102,7 @@ const LayoutContainer = styled.div<{ }`} `; -export const ReactGridLayout = React.memo(GridLayout); +export const ReactGridLayout = React.memo(GridLayout, (prev, next) => isEqual(prev, next));
function moveOrResize(
e: React.KeyboardEvent,
diff --git a/client/packages/lowcoder/src/layout/gridLines.tsx b/client/packages/lowcoder/src/layout/gridLines.tsx
index c7cfc1366a..33b5eefec0 100644
--- a/client/packages/lowcoder/src/layout/gridLines.tsx
+++ b/client/packages/lowcoder/src/layout/gridLines.tsx
@@ -1,6 +1,7 @@
import { CSSProperties } from "react";
import { calcGridColWidth, PositionParams } from "./calculateUtils";
import { Position, setTransform } from "./utils";
+import React from "react";
interface GridLineProps {
position: Position;
@@ -19,10 +20,10 @@ function setBackgroundProps(positionParams: PositionParams, lineColor: string):
};
}
-export function GridLines(props: GridLineProps) {
+export const GridLines = React.memo((props: GridLineProps) => {
const style = {
...setTransform(props.position),
...setBackgroundProps(props.positionParams, props.lineColor),
};
return ;
-}
+})
diff --git a/client/packages/lowcoder/vite.config.mts b/client/packages/lowcoder/vite.config.mts
index 9699e15db2..371b944a7b 100644
--- a/client/packages/lowcoder/vite.config.mts
+++ b/client/packages/lowcoder/vite.config.mts
@@ -1,5 +1,5 @@
import dotenv from "dotenv";
-import { defineConfig, ServerOptions, UserConfig } from "vite";
+import { defineConfig, PluginOption, ServerOptions, UserConfig } from "vite";
import react from "@vitejs/plugin-react";
import viteTsconfigPaths from "vite-tsconfig-paths";
import svgrPlugin from "vite-plugin-svgr";
@@ -12,6 +12,7 @@ import dynamicImport from 'vite-plugin-dynamic-import';
import { ensureLastSlash } from "./src/dev-utils/util";
import { buildVars } from "./src/dev-utils/buildVars";
import { globalDepPlugin } from "./src/dev-utils/globalDepPlguin";
+import { terser } from 'rollup-plugin-terser';
// import { nodePolyfills } from 'vite-plugin-node-polyfills'
dotenv.config();
@@ -66,6 +67,7 @@ export const viteConfig: UserConfig = {
},
base,
build: {
+ minify: "terser",
manifest: true,
target: "es2020",
cssTarget: "chrome87",
@@ -73,9 +75,116 @@ export const viteConfig: UserConfig = {
assetsDir: "static",
emptyOutDir: false,
rollupOptions: {
+ treeshake: {
+ moduleSideEffects: true,
+ propertyReadSideEffects: false,
+ tryCatchDeoptimization: false,
+ unknownGlobalSideEffects: false,
+ },
output: {
chunkFileNames: "[hash].js",
+ manualChunks: (id) => {
+ if (id.includes("node_modules")) {
+ // UI LIBRARIES
+ if (id.includes("@ant-design/icons")) return "ant-design-icons";
+ if (id.includes("node_modules/antd")) return "antd";
+ if (id.includes("styled-components")) return "styled-components";
+
+ // πΉ BARCODE & QR CODE PROCESSING
+ if (id.includes("react-qr-barcode-scanner")) return "barcode";
+
+ // TEXT EDITORS & PARSERS
+ if (id.includes("codemirror")) return "codemirror";
+ if (id.includes("quill")) return "quill";
+ if (id.includes("react-json-view")) return "react-json-view";
+ if (id.includes("react-quill")) return "react-quill";
+ if (id.includes("remark-gfm")) return "remark-gfm";
+ if (id.includes("rehype-raw")) return "rehype-raw";
+ if (id.includes("rehype-sanitize")) return "rehype-sanitize";
+
+ // DRAG & DROP
+ if (id.includes("@dnd-kit")) return "dnd-kit";
+ if (id.includes("react-draggable")) return "react-draggable";
+ if (id.includes("react-grid-layout")) return "react-grid-layout";
+ if (id.includes("react-sortable-hoc")) return "react-sortable-hoc";
+
+ // ICONS & FONTS
+ if (id.includes("@fortawesome")) return "fontawesome";
+ if (id.includes("@remixicon")) return "remixicon";
+
+ // DATE/TIME HANDLING
+ if (id.includes("moment")) return "moment";
+ if (id.includes("date-fns")) return "date-fns";
+ if (id.includes("dayjs")) return "dayjs";
+
+ // UTILITIES & HELPERS
+ if (id.includes("clsx")) return "clsx";
+ if (id.includes("immer")) return "immer";
+ if (id.includes("lodash")) return "lodash";
+ if (id.includes("lodash-es")) return "lodash-es";
+ if (id.includes("uuid")) return "uuid";
+ if (id.includes("ua-parser-js")) return "ua-parser-js";
+ if (id.includes("html2canvas")) return "ua-parser-js";
+ if (id.includes("numbro")) return "numbro";
+
+ // FILE & DATA PROCESSING
+ if (id.includes("buffer")) return "buffer";
+ if (id.includes("file-saver")) return "file-saver";
+ if (id.includes("papaparse")) return "papaparse";
+ if (id.includes("parse5")) return "parse5";
+ if (id.includes("xlsx")) return "xlsx";
+ if (id.includes("alasql")) return "alasql";
+ if (id.includes("sql-formatter")) return "sql-formatter";
+
+ // NETWORK & HTTP
+ if (id.includes("axios")) return "axios";
+ if (id.includes("fetch")) return "fetch";
+ if (id.includes("http")) return "http-modules";
+ if (id.includes("https")) return "https-modules";
+
+ // WEB SOCKETS & STREAMING
+ if (id.includes("sockjs")) return "websockets";
+ if (id.includes("websocket")) return "websockets";
+
+ // STATE MANAGEMENT
+ if (id.includes("react-error-boundary")) return "react-error-boundary";
+ if (id.includes("redux-devtools-extension")) return "redux-devtools";
+
+ // POLYFILLS & BROWSER COMPATIBILITY
+ // if (id.includes("core-js")) return "core-js";
+ if (id.includes("regenerator-runtime")) return "regenerator-runtime";
+ if (id.includes("eslint4b-prebuilt-2")) return "eslint4b-prebuilt-2";
+
+ // MISCELLANEOUS
+ if (id.includes("cnchar")) return "cnchar";
+ if (id.includes("hotkeys-js")) return "hotkeys-js";
+ if (id.includes("loglevel")) return "loglevel";
+ if (id.includes("qrcode.react")) return "qrcode-react";
+ if (id.includes("react-joyride")) return "react-joyride";
+ if (id.includes("rc-trigger")) return "rc-trigger";
+ if (id.includes("really-relaxed-json")) return "really-relaxed-json";
+ if (id.includes("simplebar-react")) return "simplebar-react";
+ if (id.includes("react-documents")) return "react-documents";
+ if (id.includes("react-colorful")) return "react-colorful";
+ if (id.includes("react-best-gradient-color-picker")) return "react-best-gradient-color-picker";
+ if (id.includes("@supabase/supabase-js")) return "supabase";
+ return null;
+ }
+ return null;
+ },
},
+ plugins: [
+ terser({
+ compress: {
+ drop_console: true,
+ drop_debugger: true,
+ pure_funcs: ["console.info", "console.debug", "console.log"],
+ },
+ format: {
+ comments: /(@vite-ignore|webpackIgnore)/
+ },
+ }) as PluginOption,
+ ],
onwarn: (warning, warn) => {
if (warning.code === 'MODULE_LEVEL_DIRECTIVE') {
return
diff --git a/client/yarn.lock b/client/yarn.lock
index 1589f0bb74..1f364cbc26 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -14242,6 +14242,7 @@ coolshapes-react@lowcoder-org/coolshapes-react:
rehype-sanitize: ^5.0.1
remark-gfm: ^4.0.0
resize-observer-polyfill: ^1.5.1
+ rollup-plugin-terser: ^7.0.2
rollup-plugin-visualizer: ^5.9.2
simplebar-react: ^3.2.4
sql-formatter: ^8.2.0