lowcoder-comps 0.0.17 → 0.0.19

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 (78) hide show
  1. package/README.md +27 -0
  2. package/index.html +26 -0
  3. package/index.tsx +19 -0
  4. package/jest.config.js +6 -0
  5. package/package.json +4 -5
  6. package/src/__test__/allComp.test.tsx +61 -0
  7. package/src/app-env.d.ts +3 -0
  8. package/src/comps/calendarComp/calendarComp.tsx +443 -0
  9. package/src/comps/calendarComp/calendarConstants.tsx +898 -0
  10. package/src/comps/chartComp/chartComp.tsx +356 -0
  11. package/src/comps/chartComp/chartConfigs/barChartConfig.tsx +51 -0
  12. package/src/comps/chartComp/chartConfigs/cartesianAxisConfig.tsx +307 -0
  13. package/src/comps/chartComp/chartConfigs/chartUrls.tsx +9 -0
  14. package/src/comps/chartComp/chartConfigs/legendConfig.tsx +55 -0
  15. package/src/comps/chartComp/chartConfigs/lineChartConfig.tsx +96 -0
  16. package/src/comps/chartComp/chartConfigs/pieChartConfig.tsx +83 -0
  17. package/src/comps/chartComp/chartConfigs/scatterChartConfig.tsx +62 -0
  18. package/src/comps/chartComp/chartConstants.tsx +288 -0
  19. package/src/comps/chartComp/chartPropertyView.tsx +218 -0
  20. package/src/comps/chartComp/chartUtils.ts +291 -0
  21. package/src/comps/chartComp/reactEcharts/core.tsx +194 -0
  22. package/src/comps/chartComp/reactEcharts/index.ts +21 -0
  23. package/src/comps/chartComp/reactEcharts/types.ts +76 -0
  24. package/src/comps/chartComp/seriesComp.tsx +119 -0
  25. package/src/comps/imageEditorComp/imageEditorClass.tsx +52 -0
  26. package/src/comps/imageEditorComp/imageEditorConstants.tsx +109 -0
  27. package/src/comps/imageEditorComp/index.tsx +184 -0
  28. package/src/comps/mermaidComp/index.tsx +44 -0
  29. package/src/comps/mermaidComp/mermaid.tsx +29 -0
  30. package/src/global.ts +1 -0
  31. package/src/i18n/comps/index.tsx +29 -0
  32. package/src/i18n/comps/locales/en.ts +150 -0
  33. package/src/i18n/comps/locales/enObj.tsx +198 -0
  34. package/src/i18n/comps/locales/index.ts +7 -0
  35. package/src/i18n/comps/locales/types.tsx +10 -0
  36. package/src/i18n/comps/locales/zh.ts +145 -0
  37. package/src/i18n/comps/locales/zhObj.tsx +4 -0
  38. package/src/index.ts +11 -0
  39. package/tsconfig.json +22 -0
  40. package/vite.config.js +10 -0
  41. package/001f8b13.js +0 -326
  42. package/085bf0c2.js +0 -46688
  43. package/256b619e.js +0 -92
  44. package/29cba276.js +0 -91
  45. package/2e18581a.js +0 -451
  46. package/2ff2c7a6.js +0 -6
  47. package/340c33ea.js +0 -1602
  48. package/3ad55ad7.js +0 -607
  49. package/47b0b0ff.js +0 -70
  50. package/4a5b6fbe.js +0 -798
  51. package/4abe140e.js +0 -943
  52. package/4cf5b178.js +0 -34
  53. package/5cab7b96.js +0 -18619
  54. package/626b9013.js +0 -7
  55. package/6798500f.js +0 -793
  56. package/68b021d0.js +0 -2456
  57. package/6ab1612a.js +0 -24
  58. package/6e903063.js +0 -940
  59. package/72a7048f.js +0 -849
  60. package/7902f186.js +0 -823
  61. package/82c1c410.js +0 -86
  62. package/8517f7c1.js +0 -365
  63. package/9495ef3b.js +0 -1118
  64. package/9ea1ddd6.js +0 -447
  65. package/a01c9944.js +0 -212
  66. package/a4ce7e8a.js +0 -2827
  67. package/ad68bdd0.js +0 -236
  68. package/b499e5a9.js +0 -2103
  69. package/bdc7b18a.js +0 -1032
  70. package/be5b66cd.js +0 -832
  71. package/c4378831.js +0 -117175
  72. package/ca8f4e3f.js +0 -275
  73. package/de61c633.js +0 -2679
  74. package/e04788e2.js +0 -159
  75. package/f9637058.js +0 -16
  76. package/f9a47b7c.js +0 -985
  77. package/ff16c2ec.js +0 -1246
  78. package/index.js +0 -5
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # lowcoder comp lib
2
+
3
+ ## Start
4
+
5
+ Start dev server to develop your comp lib.
6
+
7
+ ```bash
8
+ yarn start
9
+
10
+ # or
11
+
12
+ npm start
13
+ ```
14
+
15
+ ## Build
16
+
17
+ Build current comp lib into a .tgz file that you can upload it to the Lowcoder Comp Market.
18
+
19
+ Before build you should change the version in package.json file.
20
+
21
+ ```bash
22
+ yarn build
23
+
24
+ # or
25
+
26
+ npm run build
27
+ ```
package/index.html ADDED
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Lowcoder Comp Playground</title>
8
+ <style>
9
+ #root {
10
+ height: 100vh;
11
+ }
12
+ #root-loader {
13
+ height: 100vh;
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: center;
17
+ }
18
+ </style>
19
+ </head>
20
+ <body>
21
+ <div id="root">
22
+ <div id="root-loader">Loading...</div>
23
+ </div>
24
+ <script src="index.tsx" type="module"></script>
25
+ </body>
26
+ </html>
package/index.tsx ADDED
@@ -0,0 +1,19 @@
1
+ import ReactDOM from "react-dom";
2
+ import { CompIDE } from "lowcoder-sdk";
3
+ import { name, version, lowcoder } from "./package.json";
4
+ import compMap from "./src/index";
5
+
6
+ import "lowcoder-sdk/dist/style.css";
7
+
8
+ function CompDevApp() {
9
+ return (
10
+ <CompIDE
11
+ compMap={compMap}
12
+ packageName={name}
13
+ packageVersion={version}
14
+ compMeta={lowcoder.comps}
15
+ />
16
+ );
17
+ }
18
+
19
+ ReactDOM.render(<CompDevApp />, document.querySelector("#root"));
package/jest.config.js ADDED
@@ -0,0 +1,6 @@
1
+ import config from "../../config/test/jest.config.js";
2
+
3
+ export default {
4
+ ...config,
5
+ setupFiles: [...config.setupFiles, 'jest-canvas-mock'],
6
+ };
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "lowcoder-comps",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
7
  "@fullcalendar/core": "^6.1.6",
8
8
  "@fullcalendar/daygrid": "^6.1.6",
9
9
  "@fullcalendar/interaction": "^6.1.6",
10
- "@fullcalendar/list": "^6.1.6",
10
+ "@fullcalendar/list": "^6.1.9",
11
11
  "@fullcalendar/moment": "^6.1.6",
12
12
  "@fullcalendar/react": "^6.1.6",
13
13
  "@fullcalendar/timegrid": "^6.1.6",
@@ -58,8 +58,7 @@
58
58
  "h": 40
59
59
  }
60
60
  }
61
- },
62
- "entry": "index.js"
61
+ }
63
62
  },
64
63
  "scripts": {
65
64
  "start": "vite",
@@ -74,4 +73,4 @@
74
73
  "vite": "^4.3.9",
75
74
  "vite-tsconfig-paths": "^3.6.0"
76
75
  }
77
- }
76
+ }
@@ -0,0 +1,61 @@
1
+ import _ from "lodash";
2
+ import { CompConstructor, CustomAction } from "lowcoder-core";
3
+ import { evalAndReduce, isExposingMethodComp } from "lowcoder-sdk";
4
+ import { ChartCompWithDefault } from "comps/chartComp/chartComp";
5
+ import log from "loglevel";
6
+
7
+ const COMPS_MAP = {
8
+ chart: ChartCompWithDefault,
9
+ } as Record<string, CompConstructor>;
10
+
11
+ const compContextActionMap = {} as Record<string, CustomAction>;
12
+
13
+ test("test comp don't change if no value change", () => {
14
+ Object.keys(COMPS_MAP).forEach((name) => {
15
+ const Comp = COMPS_MAP[name];
16
+ let comp = new Comp({});
17
+ if (compContextActionMap[name]) {
18
+ // set context
19
+ comp = comp.reduce(compContextActionMap[name]);
20
+ }
21
+ comp.getView(); // getView() is allowed when unevaluated
22
+ comp = evalAndReduce(comp);
23
+ expect(comp.node() === comp.node()).toBe(true);
24
+ expect(comp.node()?.evaluate() === comp.node()?.evaluate()).toBe(true);
25
+ const comp2 = evalAndReduce(comp);
26
+ if (comp2 !== comp) {
27
+ const comp3 = evalAndReduce(comp2);
28
+ if (comp3 === comp2) {
29
+ // log.debug(`${name} need eval twice to converge`);
30
+ } else {
31
+ const newComp = evalAndReduce(comp);
32
+ Object.keys((comp as any).children).forEach((key) => {
33
+ log.log(
34
+ `${key}, isEqual ${(comp as any).children[key] === (newComp as any).children[key]}`
35
+ );
36
+ });
37
+ throw new Error("bad " + name);
38
+ }
39
+ }
40
+ });
41
+ });
42
+
43
+ test("comp exposing method duplicate name", () => {
44
+ // one comp can't expose two methods with the same name
45
+ Object.values(COMPS_MAP).forEach((Comp) => {
46
+ const comp = new Comp({});
47
+ const methods = [];
48
+ if (isExposingMethodComp(comp)) {
49
+ methods.push(comp.getMethodConfig());
50
+ }
51
+ const childrenMap = (comp as any).children;
52
+ childrenMap &&
53
+ Object.values(childrenMap).forEach((child) => {
54
+ if (isExposingMethodComp(child as any)) {
55
+ methods.push((child as any).getMethodConfig());
56
+ }
57
+ });
58
+ const allMethodName = methods.flatMap((m) => m.map((methodConfig) => methodConfig.name));
59
+ expect(allMethodName.length).toEqual(_.uniq(allMethodName).length);
60
+ });
61
+ });
@@ -0,0 +1,3 @@
1
+ /// <reference types="lowcoder-cli/client" />
2
+
3
+ declare module "lowcoder-sdk";
@@ -0,0 +1,443 @@
1
+ import {
2
+ isValidColor,
3
+ NameConfig,
4
+ NameConfigHidden,
5
+ BoolControl,
6
+ UICompBuilder,
7
+ withDefault,
8
+ withExposingConfigs,
9
+ NumberControl,
10
+ StringControl,
11
+ hiddenPropertyView,
12
+ ChangeEventHandlerControl,
13
+ Section,
14
+ sectionNames,
15
+ dropdownControl,
16
+ styleControl,
17
+ ThemeContext,
18
+ CalendarStyle,
19
+ DateParser,
20
+ CustomModal,
21
+ jsonValueExposingStateControl,
22
+ CalendarDeleteIcon,
23
+ Tooltip,
24
+ } from "lowcoder-sdk";
25
+ import { Input, Form } from "antd";
26
+ import { trans, getCalendarLocale } from "../../i18n/comps";
27
+ import { createRef, useContext, useRef, useState } from "react";
28
+ import FullCalendar from "@fullcalendar/react";
29
+ import dayGridPlugin from "@fullcalendar/daygrid";
30
+ import timeGridPlugin from "@fullcalendar/timegrid";
31
+ import interactionPlugin from "@fullcalendar/interaction";
32
+ import listPlugin from "@fullcalendar/list";
33
+ import allLocales from "@fullcalendar/core/locales-all";
34
+ import { EventContentArg, DateSelectArg } from "@fullcalendar/core";
35
+ import momentPlugin from "@fullcalendar/moment";
36
+ import {
37
+ DefaultViewOptions,
38
+ FirstDayOptions,
39
+ Wrapper,
40
+ Event,
41
+ Remove,
42
+ EventType,
43
+ defaultData,
44
+ ViewType,
45
+ buttonText,
46
+ headerToolbar,
47
+ views,
48
+ slotLabelFormat,
49
+ viewClassNames,
50
+ FormWrapper,
51
+ } from "./calendarConstants";
52
+ import dayjs from "dayjs";
53
+
54
+ const childrenMap = {
55
+ events: jsonValueExposingStateControl("events", defaultData),
56
+ onEvent: ChangeEventHandlerControl,
57
+
58
+ editable: withDefault(BoolControl, true),
59
+ defaultDate: withDefault(StringControl, "{{ new Date() }}"),
60
+ defaultView: dropdownControl(DefaultViewOptions, "timeGridWeek"),
61
+ firstDay: dropdownControl(FirstDayOptions, "1"),
62
+ showEventTime: withDefault(BoolControl, true),
63
+ showWeekends: withDefault(BoolControl, true),
64
+ showAllDay: withDefault(BoolControl, true),
65
+ dayMaxEvents: withDefault(NumberControl, 2),
66
+ eventMaxStack: withDefault(NumberControl, 0),
67
+ style: styleControl(CalendarStyle),
68
+ };
69
+
70
+ let CalendarBasicComp = (function () {
71
+ return new UICompBuilder(childrenMap, (props) => {
72
+ const theme = useContext(ThemeContext);
73
+ const ref = createRef<HTMLDivElement>();
74
+ const editEvent = useRef<EventType>();
75
+ const [form] = Form.useForm();
76
+ const [left, setLeft] = useState<number | undefined>(undefined);
77
+
78
+ const events = props.events.value.map((item: EventType) => {
79
+ return {
80
+ title: item.title,
81
+ id: item.id,
82
+ start: dayjs(item.start, DateParser).format(),
83
+ end: dayjs(item.end, DateParser).format(),
84
+ allDay: item.allDay,
85
+ color: isValidColor(item.color || "") ? item.color : theme?.theme?.primary,
86
+ ...(item.groupId ? { groupId: item.groupId } : null),
87
+ };
88
+ });
89
+
90
+ const {
91
+ defaultDate,
92
+ defaultView,
93
+ showEventTime,
94
+ showWeekends,
95
+ showAllDay,
96
+ dayMaxEvents,
97
+ eventMaxStack,
98
+ style,
99
+ firstDay,
100
+ editable,
101
+ } = props;
102
+
103
+ function renderEventContent(eventInfo: EventContentArg) {
104
+ const isList = eventInfo.view.type === "listWeek";
105
+ let sizeClass = "";
106
+ if ([ViewType.WEEK, ViewType.DAY].includes(eventInfo.view.type as ViewType)) {
107
+ const duration = dayjs(eventInfo.event.end).diff(dayjs(eventInfo.event.start), "minutes");
108
+ if (duration <= 30 || eventInfo.event.allDay) {
109
+ sizeClass = "small";
110
+ } else if (duration <= 60) {
111
+ sizeClass = "middle";
112
+ } else {
113
+ sizeClass = "large";
114
+ }
115
+ }
116
+ const stateClass =
117
+ dayjs().isAfter(dayjs(eventInfo.event.end)) &&
118
+ (eventInfo.view.type as ViewType) !== ViewType.MONTH
119
+ ? "past"
120
+ : "";
121
+
122
+ return (
123
+ <Event
124
+ className={`event ${sizeClass} ${stateClass}`}
125
+ isList={isList}
126
+ bg={eventInfo.backgroundColor}
127
+ theme={theme?.theme}
128
+ allDay={showAllDay}
129
+ $style={props.style}
130
+ >
131
+ <div className="event-time">{eventInfo.timeText}</div>
132
+ <div className="event-title">{eventInfo.event.title}</div>
133
+ <Remove
134
+ isList={isList}
135
+ className="event-remove"
136
+ onClick={(e) => {
137
+ e.stopPropagation();
138
+ props.onEvent("change");
139
+ const event = events.filter((item: EventType) => item.id !== eventInfo.event.id);
140
+ props.events.onChange(event);
141
+ }}
142
+ onMouseDown={(e) => {
143
+ e.stopPropagation();
144
+ e.preventDefault();
145
+ }}
146
+ >
147
+ <CalendarDeleteIcon />
148
+ </Remove>
149
+ </Event>
150
+ );
151
+ }
152
+
153
+ const handleDbClick = () => {
154
+ const event = props.events.value.find(
155
+ (item: EventType) => item.id === editEvent.current?.id
156
+ ) as EventType;
157
+ if (!editable || !editEvent.current) {
158
+ return;
159
+ }
160
+ if (event) {
161
+ const { title, groupId, color, id } = event;
162
+ const eventInfo = {
163
+ title,
164
+ groupId,
165
+ color,
166
+ id,
167
+ };
168
+ showModal(eventInfo, true);
169
+ } else {
170
+ showModal(editEvent.current, false);
171
+ }
172
+ };
173
+
174
+ const handleCreate = (info: DateSelectArg) => {
175
+ const event = {
176
+ allDay: info.allDay,
177
+ start: info.startStr,
178
+ end: info.endStr,
179
+ };
180
+ const view = info.view.type as ViewType;
181
+ const duration = dayjs(info.end).diff(dayjs(info.start), "minutes");
182
+ const singleClick =
183
+ (view === ViewType.MONTH && duration === 1440) ||
184
+ ([ViewType.WEEK, ViewType.DAY].includes(view) && duration === 30) ||
185
+ (info.allDay && duration === 1440);
186
+ if (singleClick) {
187
+ editEvent.current = event;
188
+ setTimeout(() => {
189
+ editEvent.current = undefined;
190
+ }, 500);
191
+ return;
192
+ }
193
+ showModal(event, false);
194
+ };
195
+
196
+ const showModal = (event: EventType, ifEdit: boolean) => {
197
+ const modalTitle = ifEdit ? trans("calendar.editEvent") : trans("calendar.creatEvent");
198
+ form && form.setFieldsValue(event);
199
+ const eventId = editEvent.current?.id;
200
+ CustomModal.confirm({
201
+ title: modalTitle,
202
+ content: (
203
+ <FormWrapper form={form}>
204
+ <Form.Item
205
+ label={
206
+ <Tooltip title={trans("calendar.eventIdTooltip")}>
207
+ {trans("calendar.eventId")}
208
+ </Tooltip>
209
+ }
210
+ name="id"
211
+ rules={[{ required: true, message: trans("calendar.eventIdRequire") }]}
212
+ >
213
+ <Input />
214
+ </Form.Item>
215
+ <Form.Item
216
+ label={trans("calendar.eventName")}
217
+ name="title"
218
+ rules={[{ required: true, message: trans("calendar.eventNameRequire") }]}
219
+ >
220
+ <Input />
221
+ </Form.Item>
222
+ <Form.Item label={trans("calendar.eventColor")} name="color">
223
+ <Input />
224
+ </Form.Item>
225
+ <Form.Item
226
+ label={
227
+ <Tooltip title={trans("calendar.groupIdTooltip")}>
228
+ {trans("calendar.eventGroupId")}
229
+ </Tooltip>
230
+ }
231
+ name="groupId"
232
+ >
233
+ <Input />
234
+ </Form.Item>
235
+ </FormWrapper>
236
+ ),
237
+ onConfirm: () => {
238
+ form.submit();
239
+ return form.validateFields().then(() => {
240
+ const { id, groupId, color, title = "" } = form.getFieldsValue();
241
+ const idExist = props.events.value.findIndex((item: EventType) => item.id === id);
242
+ if (idExist > -1 && id !== eventId) {
243
+ form.setFields([{ name: "id", errors: [trans("calendar.eventIdExist")] }]);
244
+ throw new Error();
245
+ }
246
+ if (ifEdit) {
247
+ const changeEvents = props.events.value.map((item: EventType) => {
248
+ if (item.id === eventId) {
249
+ return {
250
+ ...item,
251
+ title,
252
+ id,
253
+ ...(groupId !== undefined ? { groupId } : null),
254
+ ...(color !== undefined ? { color } : null),
255
+ };
256
+ } else {
257
+ return item;
258
+ }
259
+ });
260
+ props.events.onChange(changeEvents);
261
+ } else {
262
+ const createInfo = {
263
+ allDay: event.allDay,
264
+ start: event.start,
265
+ end: event.end,
266
+ id,
267
+ title,
268
+ ...(groupId !== undefined ? { groupId } : null),
269
+ ...(color !== undefined ? { color } : null),
270
+ };
271
+ props.events.onChange([...props.events.value, createInfo]);
272
+ }
273
+ props.onEvent("change");
274
+ form.resetFields();
275
+ });
276
+ },
277
+ onCancel: () => {
278
+ form.resetFields();
279
+ },
280
+ });
281
+ };
282
+
283
+ let initialDate = defaultDate;
284
+ try {
285
+ initialDate = new Date(defaultDate).toISOString();
286
+ } catch (error) {
287
+ initialDate = undefined;
288
+ }
289
+
290
+ return (
291
+ <Wrapper
292
+ ref={ref}
293
+ editable={editable}
294
+ $style={style}
295
+ theme={theme?.theme}
296
+ onDoubleClick={handleDbClick}
297
+ left={left}
298
+ key={initialDate ? defaultView + initialDate : defaultView}
299
+ >
300
+ <FullCalendar
301
+ slotEventOverlap={false}
302
+ events={events}
303
+ expandRows={true}
304
+ height={"100%"}
305
+ locale={getCalendarLocale()}
306
+ locales={allLocales}
307
+ firstDay={Number(firstDay)}
308
+ plugins={[dayGridPlugin, timeGridPlugin, interactionPlugin, listPlugin, momentPlugin]}
309
+ headerToolbar={headerToolbar}
310
+ moreLinkClick={(info) => {
311
+ let left = 0;
312
+ const ele = info.jsEvent.target as HTMLElement;
313
+ if (info.view.type === ViewType.DAY) {
314
+ if (info.allDay) {
315
+ left = ele.offsetParent?.parentElement?.offsetLeft || 0;
316
+ } else {
317
+ left = ele.parentElement?.offsetLeft || 0;
318
+ }
319
+ } else {
320
+ if (info.allDay) {
321
+ left = ele.offsetParent?.parentElement?.parentElement?.offsetLeft || 0;
322
+ } else {
323
+ left =
324
+ ele.offsetParent?.parentElement?.parentElement?.parentElement?.offsetLeft || 0;
325
+ }
326
+ }
327
+ setLeft(left);
328
+ }}
329
+ buttonText={buttonText}
330
+ views={views}
331
+ eventClassNames={() => (!showEventTime ? "no-time" : "")}
332
+ slotLabelFormat={slotLabelFormat}
333
+ viewClassNames={viewClassNames}
334
+ moreLinkText={trans("calendar.more")}
335
+ initialDate={initialDate}
336
+ initialView={defaultView}
337
+ editable={editable}
338
+ selectable={editable}
339
+ selectMirror={false}
340
+ displayEventTime={showEventTime}
341
+ dayMaxEvents={dayMaxEvents}
342
+ eventMaxStack={eventMaxStack || undefined}
343
+ weekends={showWeekends}
344
+ allDaySlot={showAllDay}
345
+ eventContent={renderEventContent}
346
+ select={(info) => handleCreate(info)}
347
+ eventClick={(info) => {
348
+ const event = events.find((item: EventType) => item.id === info.event.id);
349
+ editEvent.current = event;
350
+ setTimeout(() => {
351
+ editEvent.current = undefined;
352
+ }, 500);
353
+ }}
354
+ eventsSet={(info) => {
355
+ let needChange = false;
356
+ let changeEvents: EventType[] = [];
357
+ info.forEach((item) => {
358
+ const event = events.find((i: EventType) => i.id === item.id);
359
+ const start = dayjs(item.start, DateParser).format();
360
+ const end = dayjs(item.end, DateParser).format();
361
+ if (
362
+ start !== event?.start ||
363
+ end !== event?.end ||
364
+ !!item.allDay !== !!event?.allDay
365
+ ) {
366
+ needChange = true;
367
+ changeEvents.push({
368
+ ...event,
369
+ allDay: item.allDay,
370
+ start: item.startStr,
371
+ end: item.endStr,
372
+ });
373
+ } else {
374
+ changeEvents.push(event);
375
+ }
376
+ });
377
+ if (needChange) {
378
+ props.events.onChange(changeEvents);
379
+ props.onEvent("change");
380
+ }
381
+ }}
382
+ />
383
+ </Wrapper>
384
+ );
385
+ })
386
+ .setPropertyViewFn((children) => {
387
+ return (
388
+ <>
389
+ <Section name={sectionNames.basic}>{children.events.propertyView({})}</Section>
390
+ <Section name={sectionNames.interaction}>{children.onEvent.getPropertyView()}</Section>
391
+ <Section name={sectionNames.advanced}>
392
+ {children.editable.propertyView({
393
+ label: trans("calendar.editable"),
394
+ })}
395
+ {children.defaultDate.propertyView({
396
+ label: trans("calendar.defaultDate"),
397
+ tooltip: trans("calendar.defaultDateTooltip"),
398
+ })}
399
+ {children.defaultView.propertyView({
400
+ label: trans("calendar.defaultView"),
401
+ tooltip: trans("calendar.defaultViewTooltip"),
402
+ })}
403
+ {children.firstDay.propertyView({
404
+ label: trans("calendar.startWeek"),
405
+ })}
406
+ {children.showEventTime.propertyView({
407
+ label: trans("calendar.showEventTime"),
408
+ tooltip: trans("calendar.showEventTimeTooltip"),
409
+ })}
410
+ {children.showWeekends.propertyView({
411
+ label: trans("calendar.showWeekends"),
412
+ })}
413
+ {children.showAllDay.propertyView({
414
+ label: trans("calendar.showAllDay"),
415
+ tooltip: trans("calendar.showAllDayTooltip"),
416
+ })}
417
+ {children.dayMaxEvents.propertyView({
418
+ label: trans("calendar.dayMaxEvents"),
419
+ tooltip: trans("calendar.dayMaxEventsTooltip"),
420
+ })}
421
+ {children.eventMaxStack.propertyView({
422
+ label: trans("calendar.eventMaxStack"),
423
+ tooltip: trans("calendar.eventMaxStackTooltip"),
424
+ })}
425
+ </Section>
426
+ <Section name={sectionNames.layout}>{hiddenPropertyView(children)}</Section>
427
+ <Section name={sectionNames.style}>{children.style.getPropertyView()}</Section>
428
+ </>
429
+ );
430
+ })
431
+ .build();
432
+ })();
433
+
434
+ CalendarBasicComp = class extends CalendarBasicComp {
435
+ override autoHeight(): boolean {
436
+ return false;
437
+ }
438
+ };
439
+
440
+ export const CalendarComp = withExposingConfigs(CalendarBasicComp, [
441
+ new NameConfig("events", trans("calendar.events")),
442
+ NameConfigHidden,
443
+ ]);