Skip to content

Commit a6bde9e

Browse files
authored
Merge branch 'dev' into dependabot/npm_and_yarn/server/node-service/dev/ali-oss-6.22.0
2 parents 56c381c + 7e73a9a commit a6bde9e

File tree

116 files changed

+190823
-867
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+190823
-867
lines changed

README.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,32 @@
77
<p>
88
Create software applications (internal and customer-facing!) and Meeting/Collaboration tools for your Company and your Customers with minimal coding experience.
99
</p>
10-
<h3 style="margin-top: 0">Lowcoder is the best Retool, Appsmith or Tooljet Alternative.</h3>
10+
<h3 style="margin-top: 0">We think, Lowcoder is simply better than Retool, Appsmith Tooljet, Outsystems or Mendix.</h3>
1111
</div>
12+
---
1213

13-
<img src="https://1167272343-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjNgeI0mUzgw6Re92iTOw%2Fuploads%2FnwXJC1XBqP2MvTQitPyo%2FApp%20Editor%20%7C%20Main%20Screeen%20clean.png?alt=media&token=e5fba81b-82a7-4c0e-a15d-baa781d5b13a"/>
14-
14+
## 🎥 Lowcoder Intro Video
15+
<div align="center">
16+
<a href="https://www.youtube.com/watch?v=AQo0iFWUWiU" target="_blank">
17+
<img src="https://img.youtube.com/vi/AQo0iFWUWiU/maxresdefault.jpg" alt="Lowcoder Intro Video" width="100%">
18+
</a>
19+
<p><i>Click the image above to watch the video on YouTube</i> 📺</p>
20+
</div>
1521

22+
---
1623
## 📢 Use Lowcoder in 3 steps
1724
1. Connect to any data sources or APIs.
18-
2. Build flexible and responsive UI with 100+ components and free layout / design possibilities.
25+
2. Build flexible and responsive UI with 120+ components and free layout / design possibilities.
1926
3. Share with colleagues and customers.
2027

2128
## 💡 Why Lowcoder
2229
One platform for everything instead so many different softwares. (like Website Builders, CMS, CRM, POS, ERP, Dashboards & Data Story Visualization, Collaboration Tools).
2330

2431
It's cumbersome to create a single app. You had to design user interfaces, write code in multiple languages and frameworks, and understand how all of that code works together.
2532

26-
NewGen Lowcode Platforms like Retool and others are great for their simplicity and flexibility - like Lowcoder too, but they can also be limited in different ways, especially when it comes to "external" applications for everyone.
33+
NewGen Lowcode Platforms like Retool and others are great for their simplicity and flexibility - like Lowcoder too, but they can also be limited in different ways, especially when it comes to "external" applications for everyone - because their pricing focusses to internal apps and "pay per User".
2734

28-
Lowcoder wants to take a step forward. More specifically, Lowcoder is:
35+
With Lowcoder we did a step forward. More specifically, Lowcoder is:
2936
- An all-in-one IDE to create internal or customer-facing (external) apps.
3037
- A place to create, build and share building blocks of web applications and whole websites.
3138
- The tool and community to support your business, and lower the cost and time to develop interactive applications.
@@ -34,9 +41,9 @@ Lowcoder wants to take a step forward. More specifically, Lowcoder is:
3441
- The only platform which has extensibility plugin architecture [Check Community Contributions](https://www.npmjs.com/search?q=lowcoder-comp)
3542

3643
## 🪄 Features
37-
- **Visual UI builder** with 100+ built-in components. Save 90% of time to build apps.
44+
- **Visual UI builder** with 120+ built-in components. Save 90% of time to build apps.
3845
- **Modules** for reusable (!) embedable component sets in the UI builder.
39-
- **Embed Lowcoder Apps as native parts of any Website** instead of iFrame (!). [Demo](https://lowcoder.cloud/about), [Docu](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/native-embed-sdk)
46+
- **Embed Lowcoder Apps as native parts of any Website** instead of iFrame (!). [Demo](http://demo-lowcoder.42web.io/ecommerce/), [Docu](https://docs.lowcoder.cloud/lowcoder-documentation/lowcoder-extension/native-embed-sdk)
4047
- **Video Meeting Components** to create your own individual Web-Meeting tool.
4148
- **Query Library** for reusable data queries of your data sources.
4249
- **Custom components** to develop own components and use them in the UI builder.
@@ -107,7 +114,3 @@ Accelerate the growth of Lowcoder and unleash its potential with your Sponsorshi
107114
[Be a Sponsor](https://github.com/sponsors/lowcoder-org)
108115

109116
Like ... [@Darkjamin](https://github.com/Darkjamin), [@spacegoats-io](https://github.com/spacegoats-io), [@Jomedya](https://github.com/Jomedya), [@CHSchuepfer](https://github.com/CHSchuepfer), Thank you very much!!
110-
111-
## Intro Video
112-
113-
[![Watch the video](https://i.ytimg.com/vi/s4ltAqS0hzM/maxresdefault.jpg?sqp=-oaymwEmCIAKENAF8quKqQMa8AEB-AH-CYAC0AWKAgwIABABGD0gSShyMA8=&rs=AOn4CLAlPOIFdtauythoBKNPXhi6XGwlDQ)](https://youtu.be/s4ltAqS0hzM?feature=shared)

client/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.6.0
1+
2.6.3

client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lowcoder-frontend",
3-
"version": "2.6.0",
3+
"version": "2.6.3",
44
"type": "module",
55
"private": true,
66
"workspaces": [

client/packages/lowcoder-comps/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "lowcoder-comps",
3-
"version": "2.6.1",
3+
"version": "2.6.3",
44
"type": "module",
55
"license": "MIT",
66
"dependencies": {

client/packages/lowcoder-design/src/components/CustomModal.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,13 @@ const DEFAULT_PROPS = {
220220
autoFocusButton: "ok",
221221
} as const;
222222

223-
function CustomModalRender(props: CustomModalProps & ModalFuncProps) {
223+
function CustomModalRender(props: Omit<CustomModalProps & ModalFuncProps, "width"> & { width?: string | number }) {
224224
return (
225225
<Draggable handle=".handle" disabled={!props.draggable}>
226-
<ModalWrapper $width={props.width} $customStyles={props?.customStyles}>
226+
<ModalWrapper
227+
$width={props.width}
228+
$customStyles={props?.customStyles}
229+
>
227230
<>
228231
<ModalHeaderWrapper className="handle" $draggable={props.draggable}>
229232
<ModalHeader
@@ -249,20 +252,21 @@ function CustomModalRender(props: CustomModalProps & ModalFuncProps) {
249252
);
250253
}
251254

255+
252256
/**
253257
* an antd modal capsulation
254258
*/
255-
256259
function CustomModal(props: CustomModalProps) {
257260
return (
258261
<AntdModal
259262
{...props}
260-
width="fit-content"
261-
modalRender={() => <CustomModalRender {...DEFAULT_PROPS} {...props} />}
263+
width={typeof props.width === "object" ? undefined : props.width} // Ensure valid type
264+
modalRender={() => <CustomModalRender {...props} width={typeof props.width === "object" ? undefined : props.width} />}
262265
/>
263266
);
264267
}
265268

269+
266270
const TitleIcon = {
267271
error: <ErrorIcon />,
268272
warn: <WarningIcon />,
@@ -285,6 +289,8 @@ CustomModal.confirm = (props: {
285289
customStyles?:React.CSSProperties;
286290
}): any => {
287291

292+
const fixedWidth = typeof props.width === "object" ? undefined : props.width;
293+
288294
const defaultConfirmProps: ModalFuncProps = {
289295
...DEFAULT_PROPS,
290296
okText: trans("ok"),
@@ -301,7 +307,7 @@ CustomModal.confirm = (props: {
301307
};
302308
// create model
303309
const model = modalInstance.confirm({
304-
width: "fit-content",
310+
width: fixedWidth,
305311
style: props.style,
306312
centered: true,
307313
onCancel: () => {

client/packages/lowcoder-design/src/components/Loading.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ type LoadingProps = {
7474
size?: number; // circle's size
7575
className?: string;
7676
style?: CSSProperties;
77+
compHeight?: number;
7778
};
7879

7980
export const Loading = (props: LoadingProps) => {
@@ -92,7 +93,11 @@ export const Loading = (props: LoadingProps) => {
9293
<Load2 {...loadingProps} />
9394
</Container>
9495
</ContainerX> */}
95-
<StyledSkeleton active style={{height: '100%', animationDuration: '2s'}} />
96+
<StyledSkeleton
97+
active
98+
paragraph={{rows: props.compHeight ? Math.floor((props.compHeight * 8) / 35) : 4}}
99+
style={{height: '100%', animationDuration: '2s'}}
100+
/>
96101
</LoadingWrapper>
97102
);
98103
};

client/packages/lowcoder-design/src/components/control.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,9 @@ export const ControlPropertyViewWrapper = (
159159
<ToolTipLabel
160160
title={tooltip}
161161
label={label}
162-
overlayInnerStyle={labelTooltipOverlayInnerStyle}
162+
styles={{
163+
body: labelTooltipOverlayInnerStyle,
164+
}}
163165
/>
164166
</LabelWrapper>
165167
)}

client/packages/lowcoder-design/src/components/iconSelect/index.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -363,10 +363,12 @@ export const IconSelectBase = (props: {
363363
onOpenChange={setVisible}
364364
getPopupContainer={parent ? () => parent : undefined}
365365
// hide the original background when dragging the popover is allowed
366-
overlayInnerStyle={{
367-
border: "none",
368-
boxShadow: "none",
369-
background: "transparent",
366+
styles={{
367+
body: {
368+
border: "none",
369+
boxShadow: "none",
370+
background: "transparent",
371+
}
370372
}}
371373
// when dragging is allowed, always re-location to avoid the popover exceeds the screen
372374
destroyTooltipOnHide

client/packages/lowcoder-design/src/components/keyValueList.tsx

Lines changed: 41 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,34 +73,52 @@ const AddBtn = styled(TacoButton)`
7373
}
7474
`;
7575

76+
const IndicatorWrapper = ({
77+
indicatorForAll,
78+
children,
79+
}: {
80+
indicatorForAll?: boolean;
81+
children: ReactNode,
82+
}) => {
83+
if (indicatorForAll) {
84+
return (
85+
<BranchDiv $type={"inline"}>
86+
{children}
87+
</BranchDiv>
88+
)
89+
}
90+
return (<>{children}</>);
91+
};
92+
7693
export const KeyValueList = (props: {
7794
list: ReactNode[];
7895
onAdd: () => void;
7996
onDelete: (item: ReactNode, index: number) => void;
8097
isStatic?: boolean;
8198
indicatorForAll?: boolean;
8299
}) => {
83-
let IndicatorWrapper = ({children}: any) => (<>{children}</>);
84-
if(props.indicatorForAll) IndicatorWrapper = BranchDiv;
85-
return <>
86-
{props.list.map((item, index) => (
87-
<IndicatorWrapper $type={"inline"} key={index}>
88-
<KeyValueListItem key={index /* FIXME: find a proper key instead of `index` */}>
89-
{item}
90-
{!props.isStatic &&
91-
<DelIcon
92-
onClick={() => props.list.length > 1 && props.onDelete(item, index)}
93-
$forbidden={props.list.length === 1}
94-
/>
95-
}
96-
</KeyValueListItem>
97-
</IndicatorWrapper>
98-
))}
99-
{!props.isStatic &&
100-
<AddBtn onClick={props.onAdd}>
101-
<AddIcon />
102-
{trans("addItem")}
103-
</AddBtn>
104-
}
105-
</>
100+
return (
101+
<>
102+
{props.list.map((item, index) => (
103+
<IndicatorWrapper key={index} indicatorForAll={props.indicatorForAll}>
104+
<KeyValueListItem key={index /* FIXME: find a proper key instead of `index` */}>
105+
{item}
106+
{!props.isStatic &&
107+
<DelIcon
108+
onClick={() => props.list.length > 1 && props.onDelete(item, index)}
109+
$forbidden={props.list.length === 1}
110+
/>
111+
}
112+
</KeyValueListItem>
113+
</IndicatorWrapper>
114+
))}
115+
{!props.isStatic && (
116+
<AddBtn onClick={props.onAdd}>
117+
<AddIcon />
118+
{trans("addItem")}
119+
</AddBtn>
120+
121+
)}
122+
</>
123+
)
106124
};

client/packages/lowcoder-design/src/components/popover.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ const SimplePopover = (props: {
6464
);
6565
return (
6666
<Popover
67-
overlayInnerStyle={{padding: 0}}
6867
align={{
6968
offset: [-12, 0, 0, 0],
7069
}}
@@ -74,7 +73,10 @@ const SimplePopover = (props: {
7473
open={visible}
7574
onOpenChange={setVisible}
7675
placement="left"
77-
overlayStyle={{ width: "310px" }}
76+
styles={{
77+
root: { width: "310px" },
78+
body: { padding: 0 }
79+
}}
7880
>
7981
{props.children}
8082
</Popover>
@@ -101,16 +103,18 @@ const CustomPopover = (props: {
101103
);
102104
return (
103105
<Popover
104-
overlayInnerStyle={{padding: 0}}
105106
content={contentWithBox}
106107
trigger="click"
107108
open={visible}
108109
onOpenChange={setVisible}
109110
placement={props.type === "query" ? "top" : "left"}
110-
overlayStyle={{ width: "310px" }}
111111
align={{
112112
offset: [-12, 0, 0, 0],
113113
}}
114+
styles={{
115+
root: { width: "310px" },
116+
body: { padding: 0 }
117+
}}
114118
>
115119
{props.children}
116120
</Popover>
@@ -167,8 +171,10 @@ const EditPopover = (props: EditPopoverProps) => {
167171
return (
168172
<Popover
169173
arrow={false}
170-
overlayStyle={{paddingTop: '15px'}}
171-
overlayInnerStyle={{padding: 0}}
174+
styles={{
175+
root: { paddingTop: '15px' },
176+
body: { padding: 0 }
177+
}}
172178
content={() => (
173179
<>
174180
<Wedge />

client/packages/lowcoder-design/src/components/shapeSelect/index.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -444,10 +444,12 @@ export const ShapeSelectBase = (props: {
444444
onOpenChange={setVisible}
445445
getPopupContainer={parent ? () => parent : undefined}
446446
// hide the original background when dragging the popover is allowed
447-
overlayInnerStyle={{
448-
border: "none",
449-
boxShadow: "none",
450-
background: "transparent",
447+
styles={{
448+
body: {
449+
border: "none",
450+
boxShadow: "none",
451+
background: "transparent",
452+
}
451453
}}
452454
// when dragging is allowed, always re-location to avoid the popover exceeds the screen
453455
destroyTooltipOnHide

client/packages/lowcoder-design/src/components/toolTip.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ export const UnderlineCss = css`
155155
`;
156156

157157
function Tooltip(props: TooltipProps) {
158-
return <AntdTooltip color="#2c2c2c2" overlayInnerStyle={overlayInnerCss} {...props} />;
158+
return <AntdTooltip color="#2c2c2c2" styles={{ body: overlayInnerCss }} {...props} />;
159159
}
160160

161161
const Label = styled.div<{ $border?: boolean }>`
@@ -181,7 +181,9 @@ function ToolTipLabel(
181181
<AntdTooltip
182182
color="#2c2c2c"
183183
title={title && <TooltipTitleWrapper><>{title}</></TooltipTitleWrapper>}
184-
overlayInnerStyle={{ maxWidth: "232px", whiteSpace: "break-spaces" }}
184+
styles={{
185+
body: { maxWidth: "232px", whiteSpace: "break-spaces" }
186+
}}
185187
arrow={{
186188
pointAtCenter: true
187189
}}

client/packages/lowcoder-design/src/icons/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ export { ReactComponent as RadioCompIconSmall } from "./v2/radio-button-s.svg";
317317
export { ReactComponent as RangeSliderCompIconSmall } from "./v2/range-slider-s.svg"; // new
318318
export { ReactComponent as RatingCompIconSmall } from "./v2/rating-s.svg";
319319
export { ReactComponent as ResponsiveLayoutCompIconSmall } from "./v2/resposive-layout-s.svg"; // new
320+
export { ReactComponent as SplitLayoutCompIconSmall } from "./v2/split-layout-s.svg"; // new
320321
export { ReactComponent as RichTextEditorCompIconSmall } from "./v2/rich-text-editor-s.svg"; // new
321322
export { ReactComponent as ScannerCompIconSmall } from "./v2/scanner-s.svg"; // new
322323
export { ReactComponent as ShapesCompIconSmall } from "./v2/shapes-s.svg"; // new
@@ -419,6 +420,7 @@ export { ReactComponent as RadioCompIcon } from "./v2/radio-button-m.svg";
419420
export { ReactComponent as RangeSliderCompIcon } from "./v2/range-slider-m.svg";
420421
export { ReactComponent as RatingCompIcon } from "./v2/rating-m.svg";
421422
export { ReactComponent as ResponsiveLayoutCompIcon } from "./v2/resposive-layout-m.svg";
423+
export { ReactComponent as SplitLayoutCompIcon } from "./v2/split-layout-m.svg";
422424
export { ReactComponent as RichTextEditorCompIcon } from "./v2/rich-text-editor-m.svg";
423425
export { ReactComponent as ScannerCompIcon } from "./v2/scanner-m.svg";
424426
export { ReactComponent as ShapesCompIcon } from "./v2/shapes-m.svg";

0 commit comments

Comments
 (0)