From 84188bbe3122ab67b53870c2c952c51f1813bb68 Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Tue, 9 Apr 2024 22:30:12 +0300
Subject: [PATCH 01/16] unfinished moving meeting comp to lowcoder-comps
---
client/packages/lowcoder/package.json | 2 +-
.../videoMeetingControllerComp.tsx | 72 ++++++++++---------
2 files changed, 39 insertions(+), 35 deletions(-)
diff --git a/client/packages/lowcoder/package.json b/client/packages/lowcoder/package.json
index d9a05c00d..e9e2f5bc2 100644
--- a/client/packages/lowcoder/package.json
+++ b/client/packages/lowcoder/package.json
@@ -37,7 +37,7 @@
"@types/react-test-renderer": "^18.0.0",
"@types/react-virtualized": "^9.21.21",
"agora-access-token": "^2.0.4",
- "agora-rtc-sdk-ng": "^4.19.0",
+ "agora-rtc-sdk-ng": "^4.20.2",
"agora-rtm-sdk": "^1.5.1",
"antd": "5.13.2",
"axios": "^1.6.2",
diff --git a/client/packages/lowcoder/src/comps/comps/meetingComp/videoMeetingControllerComp.tsx b/client/packages/lowcoder/src/comps/comps/meetingComp/videoMeetingControllerComp.tsx
index 90def35ac..de667c712 100644
--- a/client/packages/lowcoder/src/comps/comps/meetingComp/videoMeetingControllerComp.tsx
+++ b/client/packages/lowcoder/src/comps/comps/meetingComp/videoMeetingControllerComp.tsx
@@ -512,12 +512,12 @@ let MTComp = (function () {
styles={{
wrapper: {
maxHeight: "100%",
- maxWidth: "100%"
- },
+ maxWidth: "100%",
+ },
body: {
padding: 0,
backgroundColor: props.style.background,
- }
+ },
}}
closable={false}
placement={props.placement}
@@ -569,8 +569,10 @@ let MTComp = (function () {
)
.setPropertyViewFn((children) => (
<>
- {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && (
- <>
+ {(useContext(EditorContext).editorModeStatus === "logic" ||
+ useContext(EditorContext).editorModeStatus === "both") && (
+ <>
+
{children.appId.propertyView({
label: trans("meeting.appid"),
})}
@@ -593,38 +595,40 @@ let MTComp = (function () {
>
)}
- {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && (
- <>
- {children.placement.propertyView({
- label: trans("drawer.placement"),
- radioButton: true,
- })}
- {["top", "bottom"].includes(children.placement.getView())
- ? children.autoHeight.getPropertyView()
- : children.width.propertyView({
- label: trans("drawer.width"),
- tooltip: trans("drawer.widthTooltip"),
+ {(useContext(EditorContext).editorModeStatus === "layout" ||
+ useContext(EditorContext).editorModeStatus === "both") && (
+ <>
+
+ {children.placement.propertyView({
+ label: trans("drawer.placement"),
+ radioButton: true,
+ })}
+ {["top", "bottom"].includes(children.placement.getView())
+ ? children.autoHeight.getPropertyView()
+ : children.width.propertyView({
+ label: trans("drawer.width"),
+ tooltip: trans("drawer.widthTooltip"),
+ placeholder: DEFAULT_SIZE + "",
+ })}
+ {!children.autoHeight.getView() &&
+ ["top", "bottom"].includes(children.placement.getView()) &&
+ children.height.propertyView({
+ label: trans("drawer.height"),
+ tooltip: trans("drawer.heightTooltip"),
placeholder: DEFAULT_SIZE + "",
})}
- {!children.autoHeight.getView() &&
- ["top", "bottom"].includes(children.placement.getView()) &&
- children.height.propertyView({
- label: trans("drawer.height"),
- tooltip: trans("drawer.heightTooltip"),
- placeholder: DEFAULT_SIZE + "",
+ {children.maskClosable.propertyView({
+ label: trans("prop.maskClosable"),
+ })}
+ {children.showMask.propertyView({
+ label: trans("prop.showMask"),
})}
- {children.maskClosable.propertyView({
- label: trans("prop.maskClosable"),
- })}
- {children.showMask.propertyView({
- label: trans("prop.showMask"),
- })}
-
-
-
-
- {children.style.getPropertyView()}
- >
+
+
+
+ {children.style.getPropertyView()}
+
+ >
)}
>
))
From 3621bfef3ac33eec9658a122f54ef7e4c176677b Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Tue, 9 Apr 2024 22:30:43 +0300
Subject: [PATCH 02/16] unfinished moving meeting comp to lowcoder-comps
---
.../agorameetingControllerComp.tsx | 124 +++
.../agoraMeetingComp/calendarConstants.tsx | 946 ++++++++++++++++++
client/yarn.lock | 4 +-
3 files changed, 1072 insertions(+), 2 deletions(-)
create mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
create mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
new file mode 100644
index 000000000..955fa7545
--- /dev/null
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
@@ -0,0 +1,124 @@
+import {
+ isValidColor,
+ NameConfig,
+ NameConfigHidden,
+ BoolControl,
+ UICompBuilder,
+ withDefault,
+ withExposingConfigs,
+ NumberControl,
+ StringControl,
+ hiddenPropertyView,
+ ChangeEventHandlerControl,
+ Section,
+ sectionNames,
+ dropdownControl,
+ styleControl,
+ ThemeContext,
+ CalendarStyle,
+ DateParser,
+ CustomModal,
+ jsonValueExposingStateControl,
+ CalendarDeleteIcon,
+ Tooltip,
+} from "lowcoder-sdk";
+import { trans, getCalendarLocale } from "../../i18n/comps";
+import {
+ DefaultWithFreeViewOptions,
+ DefaultWithPremiumViewOptions,
+ FirstDayOptions,
+} from "./calendarConstants";
+
+import AgoraRTC, {
+ type ICameraVideoTrack,
+ type IMicrophoneAudioTrack,
+ type IAgoraRTCClient,
+ type IAgoraRTCRemoteUser,
+ type UID,
+ type ILocalVideoTrack,
+} from "agora-rtc-sdk-ng";
+import type { RtmChannel, RtmClient } from "agora-rtm-sdk";
+
+const childrenMap = {
+
+};
+
+let CalendarBasicComp = (function () {
+ return new UICompBuilder(childrenMap, (props) => {
+
+ })
+ .setPropertyViewFn((children) => {
+ let licence = children.licenceKey.getView();
+ return (
+ <>
+
+ {children.events.propertyView({})}
+
+
+ {children.licenceKey.propertyView({
+ label: trans("calendar.licence"),
+ })}
+ {children.onEvent.getPropertyView()}
+
+
+ {children.editable.propertyView({
+ label: trans("calendar.editable"),
+ })}
+ {children.defaultDate.propertyView({
+ label: trans("calendar.defaultDate"),
+ tooltip: trans("calendar.defaultDateTooltip"),
+ })}
+ {licence == ""
+ ? children.defaultFreeView.propertyView({
+ label: trans("calendar.defaultView"),
+ tooltip: trans("calendar.defaultViewTooltip"),
+ })
+ : children.defaultPremiumView.propertyView({
+ label: trans("calendar.defaultView"),
+ tooltip: trans("calendar.defaultViewTooltip"),
+ })}
+ {children.firstDay.propertyView({
+ label: trans("calendar.startWeek"),
+ })}
+ {children.showEventTime.propertyView({
+ label: trans("calendar.showEventTime"),
+ tooltip: trans("calendar.showEventTimeTooltip"),
+ })}
+ {children.showWeekends.propertyView({
+ label: trans("calendar.showWeekends"),
+ })}
+ {children.showAllDay.propertyView({
+ label: trans("calendar.showAllDay"),
+ tooltip: trans("calendar.showAllDayTooltip"),
+ })}
+ {children.dayMaxEvents.propertyView({
+ label: trans("calendar.dayMaxEvents"),
+ tooltip: trans("calendar.dayMaxEventsTooltip"),
+ })}
+ {children.eventMaxStack.propertyView({
+ label: trans("calendar.eventMaxStack"),
+ tooltip: trans("calendar.eventMaxStackTooltip"),
+ })}
+
+
+ {hiddenPropertyView(children)}
+
+
+ {children.style.getPropertyView()}
+
+ >
+ );
+ })
+ .build();
+})();
+
+CalendarBasicComp = class extends CalendarBasicComp {
+ override autoHeight(): boolean {
+ return false;
+ }
+};
+
+export const CalendarComp = withExposingConfigs(CalendarBasicComp, [
+ new NameConfig("events", trans("calendar.events")),
+ NameConfigHidden,
+]);
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx
new file mode 100644
index 000000000..394c0427a
--- /dev/null
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx
@@ -0,0 +1,946 @@
+import { trans } from "../../i18n/comps";
+import {
+ backgroundToBorder,
+ CalendarStyleType,
+ contrastText,
+ contrastColor,
+ handleToCalendarHeadSelectBg,
+ handleToCalendarToday,
+ genHoverColor,
+ DATE_FORMAT,
+ DATE_TIME_FORMAT,
+ ThemeDetail,
+ isDarkColor,
+ darkenColor,
+ lightenColor,
+ toHex,
+ UnderlineCss,
+} from "lowcoder-sdk";
+import styled from "styled-components";
+import dayjs from "dayjs";
+import {
+ DayHeaderContentArg,
+ FormatterInput,
+ SlotLabelContentArg,
+ ViewContentArg,
+} from "@fullcalendar/core";
+import { default as Form } from "antd/es/form";
+
+export const Wrapper = styled.div<{
+ $editable: boolean;
+ $style: CalendarStyleType;
+ $theme?: ThemeDetail;
+ $left?: number;
+}>`
+ position: relative;
+ height: 100%;
+ overflow: hidden;
+ color: ${(props) => props.$style.text};
+ .fc-theme-standard .fc-list-day-cushion,
+ .fc .fc-timegrid-col.fc-day-today,
+ .fc .fc-daygrid-day.fc-day-today {
+ background-color: ${(props) => props.$style.background};
+ }
+ .fc .fc-highlight {
+ background-color: ${(props) => props.$style.selectBackground};
+ }
+ a {
+ color: ${(props) => props.$style.text};
+ }
+
+ .fc .fc-timegrid-slot {
+ height: 28px;
+ }
+
+ // day
+ .fc-timeGridDay-view {
+ .fc-col-header-cell {
+ font-size: 20px;
+ font-weight: 500;
+ a {
+ line-height: 67px;
+ }
+ }
+ }
+
+ // list
+ .fc-list {
+ .fc-list-table {
+ table-layout: fixed;
+ th {
+ background-color: ${(props) => props.$style.background};
+ }
+ }
+ .fc-list-event-graphic {
+ display: none;
+ }
+ .fc-list-day-cushion {
+ font-size: 16px;
+ font-weight: 500;
+ line-height: 32px;
+ padding: 0 24px;
+ }
+ .fc-list-day-side-text {
+ float: left;
+ margin-left: 24px;
+ }
+ .fc-list-day {
+ th {
+ padding: 8px 0 3px 0;
+ }
+ > th {
+ border: none;
+ }
+ &:not(:nth-of-type(1)) .fc-list-day-cushion {
+ border-top: 1px solid
+ ${(props) =>
+ toHex(props.$style.border) === "#D7D9E0"
+ ? "#E1E3EB"
+ : lightenColor(props.$style.border, 0.03)};
+ }
+ }
+ .fc-event + .fc-list-day th {
+ padding-top: 11px;
+ .fc-list-day-cushion {
+ padding-top: 8px;
+ }
+ }
+ .fc-event {
+ .fc-list-event-time,
+ .fc-list-event-title {
+ border: none;
+ }
+ &:hover .event {
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
+ border-width: 1px;
+ margin: 2px 5px;
+ height: 20px;
+ .event-title {
+ margin-left: 15px;
+ }
+ &::before {
+ left: 2px;
+ }
+ }
+ }
+ .fc-event {
+ font-size: 13px;
+ line-height: 20px;
+ display: flex;
+ align-items: center;
+ &.no-time {
+ padding-left: 19px;
+ }
+ }
+ .fc-list-event-time {
+ padding: 0px 16px 0 24px;
+ vertical-align: middle;
+ min-width: 87px;
+ width: 87px;
+ box-sizing: content-box;
+ }
+ .fc-list-event-title {
+ min-width: 266px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ padding: 0 14px 0 0;
+ cursor: pointer;
+ .event {
+ font-size: 13px;
+ height: 18px;
+ line-height: 18px;
+ margin: 3px 5px;
+ border-width: 0;
+ align-items: center;
+ &::before {
+ height: 14px;
+ top: 2px;
+ left: 3px;
+ }
+ .event-time {
+ display: none;
+ }
+ .event-title {
+ margin-left: 16px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .event-remove {
+ background-color: inherit;
+ }
+ }
+ }
+ .fc-event:hover td {
+ background-color: inherit;
+ }
+ }
+
+ // month
+ .fc-dayGridMonth-view {
+ .fc-daygrid-day-frame {
+ min-height: 95px;
+ height: 100%;
+ }
+ .fc-col-header-cell {
+ font-size: 14px;
+ font-weight: 400;
+ text-align: left;
+ padding-left: 16px;
+ a {
+ padding: 0;
+ line-height: 39px;
+ }
+ }
+ .fc-daygrid-day-number {
+ font-size: 14px;
+ line-height: 22px;
+ font-weight: 500;
+ padding: 0 6px;
+ border-radius: 11px;
+ margin: 12px 0 0 10px;
+ }
+ .fc-daygrid-day-top {
+ flex-direction: inherit;
+ }
+ .fc-day-today .fc-daygrid-day-number {
+ background-color: ${(props) =>
+ props.$theme?.primary ? props.$theme.primary : props.$style.background};
+ color: ${(props) =>
+ contrastText(
+ props.$theme?.primary || "",
+ props.$theme?.textDark || "#000000",
+ props.$theme?.textLight || "#ffffff"
+ )};
+ }
+ .fc-daygrid-day-events {
+ padding: 1px 0 5px 0;
+ min-height: unset;
+ .fc-event {
+ margin: 2px 4px 2px 12px;
+ padding: 0;
+ &:hover .event {
+ padding-right: 20px;
+ }
+ .event {
+ font-size: 13px;
+ line-height: 18px;
+ padding-right: 0;
+ .event-time {
+ display: none;
+ }
+ .event-title {
+ margin-left: 15px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ &::before {
+ height: 14px;
+ }
+ }
+ }
+ .fc-daygrid-day-bottom {
+ padding: 2px 2px 0 10px;
+ }
+ }
+ .fc-day-other {
+ color: ${(props) => props.$style.text};
+ .fc-daygrid-day-top,
+ .fc-daygrid-day-events {
+ opacity: 0.35;
+ }
+ .event::before {
+ background-color: ${(props) => props.$style.text};
+ }
+ }
+ }
+ // month drag event
+ .fc > .fc-event {
+ visibility: hidden;
+ }
+
+ // more link
+ .fc-view-harness-active .fc-more-popover {
+ border-radius: 4px;
+ box-shadow: 0 0px 10px 4px rgba(0, 0, 0, 0.25);
+ overflow: hidden;
+ left: ${(props) => `min(${props.$left}px, calc(100% - 210px)) !important`};
+ .fc-popover-body {
+ padding: 4px 0;
+ min-width: 200px;
+ width: 200px;
+ .fc-daygrid-event-harness {
+ margin: 4px;
+ .fc-event {
+ margin: 0;
+ .event {
+ height: fit-content;
+ .event-title {
+ white-space: pre-wrap;
+ }
+ .event-time {
+ margin-top: 0;
+ }
+ }
+ }
+ }
+ }
+ .fc-popover-header,
+ .fc-popover-body {
+ background-color: ${(props) => props.$style.background};
+ }
+ .fc-popover-header .fc-popover-close {
+ color: #8b8fa3;
+ &:hover {
+ color: #222;
+ }
+ }
+ }
+
+ .fc-direction-ltr .fc-timegrid-more-link {
+ border: 1px solid ${(props) => props.$style.border};
+ border-radius: 4px;
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
+ font-size: 13px;
+ display: inline-block;
+ font-weight: 500;
+ background-color: ${(props) => lightenColor(props.$style.background, 0.1)};
+ }
+
+ .fc-dayGridMonth-view .fc-more-link {
+ margin: 0 2px 2px 2px !important;
+ }
+ .fc-timeGridWeek-view .fc-more-link,
+ .fc-timeGridDay-view .fc-more-link {
+ margin: 2px !important;
+ }
+ .fc-daygrid-day-events {
+ margin: 0 !important;
+ padding: 2px 0;
+ .fc-event {
+ margin: 2px 4px;
+ }
+ .fc-daygrid-day-bottom {
+ line-height: 16px;
+ padding: 0;
+ .fc-more-link {
+ width: calc(100% - 4px);
+ border: 1px solid ${(props) => props.$style.border};
+ border-radius: 4px;
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
+ font-size: 13px;
+ display: inline-block;
+ height: 20px;
+ padding-left: 15px;
+ font-weight: 500;
+ background-color: ${(props) =>
+ lightenColor(props.$style.background, 0.1)};
+ }
+ }
+ }
+
+ // on resize
+ .fc-media-screen {
+ height: 100% !important;
+ }
+ .fc-scroller {
+ overflow: hidden auto !important;
+ overflow: hidden overlay !important;
+ }
+ .fc-col-header,
+ .fc-scroller > div,
+ .fc-scroller > div > table,
+ .fc-scrollgrid-sync-table,
+ .fc-timegrid-cols > table,
+ .fc .fc-scrollgrid,
+ .fc .fc-scrollgrid table {
+ width: 100% !important;
+ }
+
+ // event
+ .fc-timegrid-event .fc-event-main {
+ padding: 4px 0 4px 1px;
+ }
+ .fc-event {
+ position: relative;
+ height: 100%;
+ background-color: unset !important;
+ border: none !important;
+ box-shadow: none !important;
+ .event-remove {
+ color: ${(props) => props.$style.text};
+ }
+ &:hover {
+ .event-remove {
+ opacity: ${(props) => (props.$editable ? 1 : undefined)};
+ }
+ }
+ }
+
+ // left time
+ .time.past {
+ opacity: 0.35;
+ }
+
+ .past .time {
+ opacity: 0.35;
+ }
+
+ .future .time {
+ opacity: 1;
+ }
+
+ .fc-scrollgrid-liquid > tbody {
+ & > tr:nth-of-type(2) {
+ display: ${(props) => props.allDay && 1};
+ }
+ }
+ .fc .fc-timegrid-slot-label-cushion {
+ padding: 0 15px;
+ }
+
+ // border-radius, bg
+ .fc-theme-standard .fc-list {
+ background-color: ${(props) => props.$style.background};
+ border-radius: ${(props) =>
+ `0 0 ${props.$style.radius} ${props.$style.radius}`};
+ border-color: ${(props) => props.$style.border};
+ border-top-color: ${(props) =>
+ toHex(props.$style.border) === "#D7D9E0"
+ ? "#E1E3EB"
+ : lightenColor(props.$style.border, 0.03)};
+ }
+ .fc-scrollgrid-liquid {
+ border-radius: ${(props) =>
+ `0 0 ${props.$style.radius} ${props.$style.radius}`};
+ overflow: hidden;
+ border-right-width: 1px;
+ border-bottom-width: 1px;
+ border-color: ${(props) => props.$style.border};
+ > thead,
+ > tbody > tr:nth-of-type(1),
+ .fc-scrollgrid-section-liquid > td {
+ background-color: ${(props) => props.$style.background};
+ }
+ }
+ .fc-scrollgrid-section-liquid > td,
+ .fc-scrollgrid-liquid .fc-scrollgrid-section-header > th {
+ border: none;
+ }
+ .fc-scrollgrid-liquid > tbody > tr:nth-of-type(1) > td {
+ border-right: none;
+ }
+ .fc-theme-standard .fc-scrollgrid {
+ border-color: ${(props) =>
+ toHex(props.$style.border) === "#D7D9E0"
+ ? "#E1E3EB"
+ : lightenColor(props.$style.border, 0.03)};
+ }
+ .fc .fc-scrollgrid {
+ border-bottom-width: 1px;
+ border-right-width: 1px;
+ }
+
+ .fc-day-sat,
+ .fc-day-sun {
+ &.fc-timegrid-col,
+ &.fc-daygrid-day {
+ background-color: ${(props) =>
+ isDarkColor(props.$style.background)
+ ? darkenColor(props.$style.background, 0.06)
+ : darkenColor(props.$style.background, 0.02)};
+ }
+ }
+ .fc-theme-standard td,
+ .fc-theme-standard th {
+ border-color: ${(props) =>
+ toHex(props.$style.border) === "#D7D9E0"
+ ? "#E1E3EB"
+ : lightenColor(props.$style.border, 0.03)};
+ }
+
+ // header
+ .fc .fc-toolbar.fc-header-toolbar {
+ padding: 16px;
+ margin-bottom: 0;
+ border: 1px solid ${(props) => props.$style.border};
+ border-bottom: none;
+ border-radius: ${(props) =>
+ `${props.$style.radius} ${props.$style.radius} 0 0`};
+ background-color: ${(props) => props.$style.background};
+ }
+ .fc-toolbar-title {
+ color: ${(props) => props.$style.title};
+ font-size: 24px;
+ line-height: 24px;
+ display: inline-flex;
+ }
+ .fc-toolbar-chunk {
+ display: inline-flex;
+ align-items: center;
+ }
+ .fc .fc-toolbar-chunk .fc-button.fc-button-primary {
+ height: 28px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ &:not(:disabled):not(.fc-button-active) {
+ &:hover,
+ &:active {
+ color: ${(props) => props.$style.btnText};
+ background-color: ${(props) =>
+ toHex(props.$style.headerBtnBackground) === "#FFFFFF"
+ ? "#F5F5F6"
+ : genHoverColor(props.$style.headerBtnBackground)};
+ border-color: ${(props) =>
+ toHex(props.$style.headerBtnBackground) === "#FFFFFF"
+ ? "#D7D9E0"
+ : backgroundToBorder(
+ genHoverColor(props.$style.headerBtnBackground)
+ )};
+ }
+ }
+ &:not(:disabled):focus {
+ box-shadow: none;
+ }
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 1;
+ &,
+ &:hover {
+ background-color: ${(props) => props.$style.headerBtnBackground};
+ border-color: ${(props) =>
+ backgroundToBorder(props.$style.headerBtnBackground)};
+ color: ${(props) =>
+ toHex(props.$style.btnText) === "#222222"
+ ? "#B8B9BF"
+ : contrastColor(props.$style.btnText)};
+ }
+ }
+ }
+ .fc .fc-button-primary:not(:disabled).fc-button-active:focus,
+ .fc .fc-button-primary:not(:disabled):active:focus {
+ box-shadow: none;
+ }
+ .fc-toolbar-chunk:nth-of-type(3) .fc-button-primary {
+ height: 28px;
+ display: inline-flex;
+ font-size: 14px;
+ margin-left: 8px;
+ background-color: ${(props) => props.$style.headerBtnBackground};
+ border-color: ${(props) =>
+ backgroundToBorder(props.$style.headerBtnBackground)};
+ color: ${(props) => props.$style.btnText};
+ &.fc-today-button {
+ min-width: 52px;
+ }
+ &.fc-prev-button,
+ &.fc-next-button {
+ padding: 0;
+ width: 28px;
+ color: ${(props) => lightenColor(props.$style.btnText, 0.4)};
+ }
+ &.fc-prev-button {
+ margin-left: 12px;
+ }
+ }
+ .fc-toolbar-chunk:nth-of-type(3) .fc-button-group {
+ background-color: ${(props) =>
+ toHex(props.$style.headerBtnBackground) === "#FFFFFF"
+ ? "#EFEFF1"
+ : isDarkColor(props.$style.headerBtnBackground)
+ ? props.$style.headerBtnBackground
+ : darkenColor(props.$style.headerBtnBackground, 0.1)};
+ border-radius: 4px;
+ margin-left: 16px;
+ .fc-button-primary {
+ background-color: transparent;
+ min-width: 60px;
+ border-radius: 4px;
+ margin: 2px;
+ border: none;
+ color: ${(props) =>
+ toHex(props.$style.btnText) === "#222222"
+ ? "#8B8FA3"
+ : lightenColor(props.$style.btnText, 0.4)};
+ font-weight: 500;
+
+ &.fc-button-active {
+ background-color: ${(props) =>
+ isDarkColor(props.$style.headerBtnBackground)
+ ? lightenColor(props.$style.headerBtnBackground, 0.1)
+ : props.$style.headerBtnBackground};
+ color: ${(props) => props.$style.btnText};
+ }
+ }
+ }
+
+ // week head
+ .fc-timeGridWeek-view {
+ .week-head {
+ display: flex;
+ flex-direction: column;
+ font-size: 14px;
+ font-weight: 400;
+ &.past span {
+ opacity: 0.35;
+ }
+ .week {
+ padding-bottom: 3px;
+ }
+ .day {
+ font-size: 20px;
+ font-weight: 500;
+ line-height: 22px;
+ }
+ }
+ .fc-day-today.fc-col-header-cell {
+ background-color: ${(props) =>
+ isDarkColor(props.$style.background)
+ ? "#ffffff19"
+ : toHex(props.$theme?.primary!) + "19"};
+ a {
+ color: ${(props) =>
+ !isDarkColor(props.$style.background) &&
+ darkenColor(props.$theme?.primary!, 0.1)};
+ }
+ }
+ .fc-col-header-cell-cushion {
+ padding: 8px 0 13px 0;
+ }
+ }
+
+ // week left
+ .fc .fc-timegrid-axis-cushion {
+ min-width: 62px;
+ min-height: 52px;
+ max-width: none;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .fc-direction-ltr .fc-timegrid-slot-label-frame {
+ text-align: center;
+ }
+ .fc .fc-timegrid-slot-label {
+ border: none;
+ }
+
+ // time can doubleClick
+ .fc-timegrid-bg-harness,
+ .fc-daygrid-day-bg {
+ pointer-events: none;
+ }
+`;
+
+export const Remove = styled.div<{ isList: boolean }>`
+ position: absolute;
+ pointer-events: auto;
+ top: 0;
+ right: 0;
+ display: flex;
+ padding: 5px;
+ opacity: 0;
+ cursor: pointer;
+ &:hover {
+ g {
+ stroke: #315efb;
+ }
+ }
+`;
+
+export const Event = styled.div<{
+ bg: string;
+ theme: Object;
+ isList: boolean;
+ allDay: boolean;
+ $style: CalendarStyleType;
+}>`
+ height: 100%;
+ width: 100%;
+ pointer-events: none;
+ border-radius: 4px;
+ box-shadow: ${(props) => !props.isList && "0 0 5px 0 rgba(0, 0, 0, 0.15)"};
+ border: 1px solid ${(props) => props.$style.border};
+ display: ${(props) => props.isList && "flex"};
+ background-color: ${(props) =>
+ !props.isList && lightenColor(props.$style.background, 0.1)};
+ overflow: hidden;
+ font-size: 13px;
+ line-height: 19px;
+ padding-right: 20px;
+ overflow: hidden;
+ position: relative;
+ &::before {
+ content: "";
+ position: absolute;
+ display: block;
+ width: 5px;
+ height: calc(100% - 4px);
+ left: 2px;
+ top: 2px;
+ border-radius: 3px;
+ background-color: ${(props) => props.bg};
+ }
+
+ .event-time {
+ color: ${(props) =>
+ !props.isList &&
+ (isDarkColor(props.$style.text)
+ ? lightenColor(props.$style.text, 0.2)
+ : props.$style.text)};
+ margin-left: 15px;
+ white-space: pre-wrap;
+ margin-top: 2px;
+ }
+ .event-title {
+ color: ${(props) => !props.isList && props.$style.text};
+ font-weight: 500;
+ margin-left: 15px;
+ white-space: pre-wrap;
+ word-break: break-word;
+ }
+
+ &.small {
+ height: 20px;
+ .event-time {
+ display: none;
+ }
+ .event-title {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+ }
+ &.middle {
+ padding-top: 2px;
+ .event-time,
+ .event-title {
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+ }
+ }
+ &.large {
+ .event-time {
+ margin-top: 13px;
+ }
+ }
+ &.past {
+ background-color: ${(props) =>
+ isDarkColor(props.$style.background) && props.$style.background};
+ &::before {
+ background-color: ${(props) =>
+ toHex(props.$style.text) === "#3C3C3C"
+ ? "#8B8FA3"
+ : isDarkColor(props.$style.text)
+ ? lightenColor(props.$style.text, 0.3)
+ : props.$style.text};
+ }
+ &::before,
+ .event-title,
+ .event-time {
+ opacity: 0.35;
+ }
+ }
+`;
+
+export const FormWrapper = styled(Form)`
+ .ant-form-item-label {
+ width: 100px;
+ text-align: left;
+ line-height: 18px;
+ label:not(.ant-form-item-required) {
+ margin-left: 11px;
+ }
+ label span {
+ ${UnderlineCss}
+ }
+ }
+`;
+
+export type EventType = {
+ id?: string;
+ label?: string;
+ title?: string;
+ start?: string;
+ end?: string;
+ allDay?: boolean;
+ color?: string;
+ groupId?: string;
+ value?: string;
+};
+
+export enum ViewType {
+ MONTH = "dayGridMonth",
+ WEEK = "timeGridWeek",
+ DAY = "timeGridDay",
+ LIST = "listWeek",
+ TIMEGRID = "timeGridDay",
+}
+
+
+export const DefaultWithPremiumViewOptions = [
+ {
+ label: trans("calendar.month"),
+ value: "dayGridMonth",
+ },
+ {
+ label: trans("calendar.week"),
+ value: "timeGridWeek",
+ },
+ {
+ label: trans("calendar.timeline"),
+ value: "resourceTimeline",
+ },
+ {
+ label: trans("calendar.day"),
+ value: "timeGridDay",
+ },
+ {
+ label: trans("calendar.list"),
+ value: "listWeek",
+ },
+] as const;
+
+export const DefaultWithFreeViewOptions = [
+ {
+ label: trans("calendar.month"),
+ value: "dayGridMonth",
+ },
+ {
+ label: trans("calendar.week"),
+ value: "timeGridWeek",
+ },
+ {
+ label: trans("calendar.day"),
+ value: "timeGridDay",
+ },
+ {
+ label: trans("calendar.list"),
+ value: "listWeek",
+ },
+] as const;
+
+export const FirstDayOptions = [
+ {
+ label: trans("calendar.monday"),
+ value: "1",
+ },
+ {
+ label: trans("calendar.tuesday"),
+ value: "2",
+ },
+ {
+ label: trans("calendar.wednesday"),
+ value: "3",
+ },
+ {
+ label: trans("calendar.thursday"),
+ value: "4",
+ },
+ {
+ label: trans("calendar.friday"),
+ value: "5",
+ },
+ {
+ label: trans("calendar.saturday"),
+ value: "6",
+ },
+ {
+ label: trans("calendar.sunday"),
+ value: "0",
+ },
+];
+
+export const defaultData = [
+ {
+ id: "1",
+ title: "Coding",
+ start: dayjs().hour(10).minute(0).second(0).format(DATE_TIME_FORMAT),
+ end: dayjs().hour(12).minute(30).second(0).format(DATE_TIME_FORMAT),
+ color: "#079968",
+ },
+ {
+ id: "2",
+ title: "Rest",
+ start: dayjs().hour(24).format(DATE_FORMAT),
+ end: dayjs().hour(48).format(DATE_FORMAT),
+ allDay: true,
+ },
+];
+
+export const buttonText = {
+ today: trans("calendar.today"),
+ month: trans("calendar.month"),
+ week: trans("calendar.week"),
+ timeline: trans("calendar.timeline"),
+ day: trans("calendar.day"),
+ list: trans("calendar.list"),
+};
+
+export const headerToolbar = {
+ left: "title",
+ right: "prev today next dayGridMonth,timeGridWeek,timeGridDay,listWeek",
+};
+
+const weekHeadContent = (info: DayHeaderContentArg) => {
+ const text = info.text.split(" ");
+ return {
+ html: `
+ ${text[0]}
+ ${text[1]}
+ `,
+ };
+};
+
+const leftTimeContent = (info: SlotLabelContentArg) => {
+ let isPast = false;
+ if (info.view.type === ViewType.WEEK) {
+ isPast = dayjs().isAfter(dayjs(dayjs().format("YYYY MM DD " + info.text)));
+ } else if (info.view.type === ViewType.DAY) {
+ isPast = dayjs().isAfter(
+ dayjs(dayjs(info.view.activeStart).format("YYYY MM DD " + info.text))
+ );
+ }
+ return {
+ html: `${info.text}`,
+ };
+};
+
+export const views = {
+ [ViewType.WEEK]: {
+ dayHeaderFormat: "ddd DD",
+ dayHeaderContent: (info: DayHeaderContentArg) => weekHeadContent(info),
+ slotLabelContent: (info: SlotLabelContentArg) => leftTimeContent(info),
+ },
+ [ViewType.DAY]: {
+ slotLabelContent: (info: SlotLabelContentArg) => leftTimeContent(info),
+ },
+ [ViewType.LIST]: {
+ listDayFormat: { weekday: "short" },
+ },
+} as const;
+
+export const slotLabelFormat = [
+ {
+ hour: "2-digit",
+ minute: "2-digit",
+ },
+] as FormatterInput[];
+
+export const viewClassNames = (info: ViewContentArg) => {
+ let className = "";
+ if ([ViewType.WEEK, ViewType.DAY].includes(info.view.type as ViewType)) {
+ if (dayjs().isAfter(info.view.activeEnd)) {
+ className = "past";
+ } else if (dayjs().isBefore(info.view.activeStart)) {
+ className = "future";
+ }
+ }
+ return className;
+};
diff --git a/client/yarn.lock b/client/yarn.lock
index 16ca373cb..8ee5fba00 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -5666,7 +5666,7 @@ __metadata:
languageName: node
linkType: hard
-"agora-rtc-sdk-ng@npm:^4.19.0":
+"agora-rtc-sdk-ng@npm:^4.20.2":
version: 4.20.2
resolution: "agora-rtc-sdk-ng@npm:4.20.2"
dependencies:
@@ -13658,7 +13658,7 @@ __metadata:
"@types/uuid": ^8.3.4
"@vitejs/plugin-react": ^2.2.0
agora-access-token: ^2.0.4
- agora-rtc-sdk-ng: ^4.19.0
+ agora-rtc-sdk-ng: ^4.20.2
agora-rtm-sdk: ^1.5.1
antd: 5.13.2
axios: ^1.6.2
From 95c9de916f7e4f6a0bd9db6648a52fe37d403782 Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Thu, 11 Apr 2024 14:06:37 +0300
Subject: [PATCH 03/16] "unfinished agora meeting to lowcoder plugin"
---
client/packages/lowcoder-comps/package.json | 8 +
.../agorameetingControllerComp.tsx | 891 ++++++++++++++++--
.../src/comps/calendarComp/calendarComp.tsx | 2 +-
.../src/i18n/comps/locales/en.ts | 60 ++
client/packages/lowcoder-comps/src/index.ts | 4 +-
5 files changed, 892 insertions(+), 73 deletions(-)
diff --git a/client/packages/lowcoder-comps/package.json b/client/packages/lowcoder-comps/package.json
index 9f1e232dd..6acb59f12 100644
--- a/client/packages/lowcoder-comps/package.json
+++ b/client/packages/lowcoder-comps/package.json
@@ -30,6 +30,14 @@
"lowcoder": {
"description": "",
"comps": {
+ "agormeetingcontroller": {
+ "name": "Agora meeting Controller",
+ "icon": "./icons/icon-chart.svg",
+ "layoutInfo": {
+ "w": 15,
+ "h": 40
+ }
+ },
"chart": {
"name": "Chart",
"icon": "./icons/icon-chart.svg",
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
index 955fa7545..157d7e9a8 100644
--- a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
@@ -21,13 +21,40 @@ import {
jsonValueExposingStateControl,
CalendarDeleteIcon,
Tooltip,
+ BooleanStateControl,
+ AutoHeightControl,
+ stringStateControl,
+ InnerGrid,
+ useUserViewMode,
+ getData,
+ DrawerWrapper,
+ gridItemCompToGridItems,
+ Layers,
+ isNumeric,
+ EditorContext,
+ withMethodExposing,
+ eventHandlerControl,
+ EventOptions,
+ DrawerStyle,
+ PositionControl,
+ jsonObjectExposingStateControl,
+ stateComp,
+ Drawer,
+ changeChildAction,
+ HintPlaceHolder,
+ styled,
} from "lowcoder-sdk";
+
+import { BackgroundColorContext } from "../../../../lowcoder/src/comps/utils/backgroundColorContext";
+import { ContainerCompBuilder } from "../../../../lowcoder/src/comps/comps/containerBase/containerCompBuilder";
+import { Button } from "antd-mobile";
import { trans, getCalendarLocale } from "../../i18n/comps";
import {
DefaultWithFreeViewOptions,
DefaultWithPremiumViewOptions,
FirstDayOptions,
} from "./calendarConstants";
+import { default as CloseOutlined } from "@ant-design/icons/CloseOutlined";
import AgoraRTC, {
type ICameraVideoTrack,
@@ -38,87 +65,809 @@ import AgoraRTC, {
type ILocalVideoTrack,
} from "agora-rtc-sdk-ng";
import type { RtmChannel, RtmClient } from "agora-rtm-sdk";
+import { useCallback, useContext, useEffect, useState } from "react";
+// import { Drawer, changeChildAction } from "lowcoder-sdk/src";
+import { ResizeHandle } from "react-resizable";
+import { v4 as uuidv4 } from "uuid";
+// import styled from "styled-components/dist/constructors/styled";
+
+const DEFAULT_SIZE = 378;
+const DEFAULT_PADDING = 16;
+function transToPxSize(size: string | number) {
+ return isNumeric(size) ? size + "px" : (size as string);
+}
+
+export const client: IAgoraRTCClient = AgoraRTC.createClient({
+ mode: "rtc",
+ codec: "vp8",
+});
+
+AgoraRTC.setLogLevel(4);
+
+/*
+0: DEBUG. Output all API logs.
+1: INFO. Output logs of the INFO, WARNING and ERROR level.
+2: WARNING. Output logs of the WARNING and ERROR level.
+3: ERROR. Output logs of the ERROR level.
+4: NONE. Do not output any log.
+*/
+
+let audioTrack: IMicrophoneAudioTrack;
+let videoTrack: ICameraVideoTrack;
+let screenShareStream: ILocalVideoTrack;
+let userId: UID | null | undefined;
+let rtmChannelResponse: RtmChannel;
+let rtmClient: RtmClient;
+const ButtonStyle = styled(Button)`
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 10;
+ font-weight: 700;
+ box-shadow: none;
+ color: rgba(0, 0, 0, 0.45);
+ height: 54px;
+ width: 54px;
+
+ svg {
+ width: 16px;
+ height: 16px;
+ }
+
+ &,
+ :hover,
+ :focus {
+ background-color: transparent;
+ border: none;
+ }
+
+ :hover,
+ :focus {
+ color: rgba(0, 0, 0, 0.75);
+ }
+`;
+const turnOnCamera = async (flag?: boolean) => {
+ if (videoTrack) {
+ return videoTrack.setEnabled(flag!);
+ }
+ videoTrack = await AgoraRTC.createCameraVideoTrack();
+ videoTrack.play(userId + "");
+};
+
+const turnOnMicrophone = async (flag?: boolean) => {
+ if (audioTrack) {
+ return audioTrack.setEnabled(flag!);
+ }
+ audioTrack = await AgoraRTC.createMicrophoneAudioTrack();
+ if (!flag) {
+ await client.unpublish(audioTrack);
+ } else {
+ await client.publish(audioTrack);
+ }
+};
+const shareScreen = async (sharing: boolean) => {
+ try {
+ if (sharing === false) {
+ await client.unpublish(screenShareStream);
+ screenShareStream.close();
+ await client.publish(videoTrack);
+ videoTrack.play(userId + "");
+ } else {
+ screenShareStream = await AgoraRTC.createScreenVideoTrack(
+ {
+ screenSourceType: "screen",
+ },
+ "disable"
+ );
+ await client.unpublish(videoTrack);
+ screenShareStream.play("share-screen");
+ await client.publish(screenShareStream);
+ }
+ } catch (error) {
+ console.error("Failed to create screen share stream:", error);
+ }
+};
+const leaveChannel = async () => {
+ //stops local sharing video
+ if (screenShareStream) {
+ screenShareStream.close();
+ }
+
+ //stops local video streaming and puts off the camera
+ if (videoTrack) {
+ await client.unpublish(videoTrack);
+ await turnOnCamera(false);
+ }
+
+ //mutes and stops locla audio stream
+ if (audioTrack) {
+ await turnOnMicrophone(false);
+ }
+ await client.leave();
+ await rtmChannelResponse.leave();
+};
+
+const publishVideo = async (
+ appId: string,
+ channel: string,
+ rtmToken: string,
+ rtcToken: string
+) => {
+ // initializing the Agora Meeting Client
+ await turnOnCamera(true);
+ await client.join(appId, channel, rtcToken, userId);
+ await client.publish(videoTrack);
+ // initializing the Agora RTM Client
+ await rtmInit(appId, userId, rtmToken, channel);
+};
+
+const sendMessageRtm = (message: any) => {
+ rtmChannelResponse.sendMessage({ text: JSON.stringify(message) });
+};
+
+const sendPeerMessageRtm = (message: any, toId: string) => {
+ rtmClient.sendMessageToPeer({ text: JSON.stringify(message) }, toId);
+};
+
+const rtmInit = async (appId: any, uid: any, token: any, channel: any) => {
+ const AgoraRTM = (await import("agora-rtm-sdk")).default;
+ rtmClient = AgoraRTM.createInstance(appId);
+ let options = {
+ uid: String(uid),
+ token: token ? token : null,
+ };
+ await rtmClient.login(options);
+
+ rtmChannelResponse = rtmClient.createChannel(channel);
-const childrenMap = {
-
+ await rtmChannelResponse.join();
};
-let CalendarBasicComp = (function () {
- return new UICompBuilder(childrenMap, (props) => {
-
- })
- .setPropertyViewFn((children) => {
- let licence = children.licenceKey.getView();
+const CanvasContainerID = "__canvas_container__";
+const meetingControllerChildren = {
+ visible: withDefault(BooleanStateControl, "false"),
+ onEvent: eventHandlerControl(EventOptions),
+ width: StringControl,
+ height: StringControl,
+ autoHeight: AutoHeightControl,
+ style: styleControl(DrawerStyle),
+ placement: PositionControl,
+ maskClosable: withDefault(BoolControl, true),
+ showMask: withDefault(BoolControl, true),
+ meetingActive: withDefault(BooleanStateControl, "false"),
+ audioControl: withDefault(BooleanStateControl, "false"),
+ videoControl: withDefault(BooleanStateControl, "true"),
+ endCall: withDefault(BooleanStateControl, "false"),
+ sharing: withDefault(BooleanStateControl, "false"),
+ appId: withDefault(StringControl, trans("meeting.appid")),
+ participants: stateComp([]),
+ usersScreenShared: stateComp([]),
+ localUser: jsonObjectExposingStateControl(""),
+ localUserID: withDefault(
+ stringStateControl(trans("meeting.localUserID")),
+ uuidv4() + ""
+ ),
+ meetingName: withDefault(
+ stringStateControl(trans("meeting.meetingName")),
+ uuidv4() + ""
+ ),
+ rtmToken: stringStateControl(trans("meeting.rtmToken")),
+ rtcToken: stringStateControl(trans("meeting.rtcToken")),
+ messages: stateComp([]),
+};
+let MTComp = (function () {
+ return new ContainerCompBuilder(
+ meetingControllerChildren,
+ (props: any, dispatch: any) => {
+ const isTopBom = ["top", "bottom"].includes(props.placement);
+ const { items, ...otherContainerProps } = props.container;
+ const userViewMode = useUserViewMode();
+ const resizable = !userViewMode && (!isTopBom || !props.autoHeight);
+ const onResizeStop = useCallback(
+ (
+ e: React.SyntheticEvent,
+ node: HTMLElement,
+ size: { width: number; height: number },
+ handle: ResizeHandle
+ ) => {
+ isTopBom
+ ? dispatch(changeChildAction("height", size.height, true))
+ : dispatch(changeChildAction("width", size.width, true));
+ },
+ [dispatch, isTopBom]
+ );
+ const [userIds, setUserIds] = useState([]);
+ const [updateVolume, setUpdateVolume] = useState({
+ update: false,
+ userid: null,
+ });
+ const [rtmMessages, setRtmMessages] = useState([]);
+ const [localUserSpeaking, setLocalUserSpeaking] = useState(false);
+ const [localUserVideo, setLocalUserVideo] =
+ useState();
+ const [userJoined, setUserJoined] = useState();
+ const [userLeft, setUserLeft] = useState();
+
+ useEffect(() => {
+ if (userJoined) {
+ let prevUsers: any[] = props.participants as [];
+ let userData = {
+ user: userJoined.uid,
+ audiostatus: userJoined.hasAudio,
+ streamingVideo: true,
+ };
+ setUserIds((userIds: any) => [...userIds, userData]);
+ dispatch(
+ changeChildAction(
+ "participants",
+ removeDuplicates(getData([...prevUsers, userData]).data, "user"),
+ false
+ )
+ );
+ }
+ }, [userJoined]);
+
+ function removeDuplicates(arr: any, prop: any) {
+ const uniqueObjects = [];
+ const seenValues = new Set();
+
+ for (const obj of arr) {
+ const objValue = obj[prop];
+
+ if (!seenValues.has(objValue)) {
+ seenValues.add(objValue);
+ uniqueObjects.push(obj);
+ }
+ }
+
+ return uniqueObjects;
+ }
+ useEffect(() => {
+ if (userLeft) {
+ let newUsers = userIds.filter(
+ (item: any) => item.user !== userLeft.uid
+ );
+ let hostExists = newUsers.filter((f: any) => f.host === true);
+ if (hostExists.length == 0 && newUsers.length > 0) {
+ newUsers[0].host = true;
+ }
+ setUserIds(newUsers);
+ dispatch(
+ changeChildAction(
+ "participants",
+ removeDuplicates(getData(newUsers).data, "user"),
+ false
+ )
+ );
+ }
+ }, [userLeft]);
+
+ // console.log("sharing", props.sharing);
+
+ useEffect(() => {
+ if (updateVolume.userid) {
+ let prevUsers: [] = props.participants as [];
+
+ const updatedItems = prevUsers.map((userInfo: any) => {
+ if (
+ userInfo.user === updateVolume.userid &&
+ userInfo.speaking != updateVolume.update
+ ) {
+ return { ...userInfo, speaking: updateVolume.update };
+ }
+ return userInfo;
+ });
+ dispatch(
+ changeChildAction("participants", getData(updatedItems).data, false)
+ );
+ }
+ }, [updateVolume]);
+
+ useEffect(() => {
+ let prevUsers: [] = props.participants as [];
+ const updatedItems = prevUsers.map((userInfo: any) => {
+ if (userInfo.user === localUserVideo?.uid) {
+ return { ...userInfo, streamingSharing: props.sharing.value };
+ }
+ return userInfo;
+ });
+ dispatch(
+ changeChildAction("participants", getData(updatedItems).data, false)
+ );
+
+ let localObject = {
+ user: userId + "",
+ audiostatus: props.audioControl.value,
+ streamingVideo: props.videoControl.value,
+ streamingSharing: props.sharing.value,
+ speaking: localUserSpeaking,
+ };
+ props.localUser.onChange(localObject);
+ }, [props.sharing.value]);
+
+ useEffect(() => {
+ let prevUsers: [] = props.participants as [];
+ const updatedItems = prevUsers.map((userInfo: any) => {
+ if (userInfo.user === localUserVideo?.uid) {
+ return { ...userInfo, streamingVideo: localUserVideo?.hasVideo };
+ }
+ return userInfo;
+ });
+ dispatch(
+ changeChildAction("participants", getData(updatedItems).data, false)
+ );
+ }, [localUserVideo?.hasVideo]);
+
+ useEffect(() => {
+ if (rtmMessages) {
+ dispatch(
+ changeChildAction("messages", getData(rtmMessages).data, false)
+ );
+ }
+ }, [rtmMessages]);
+
+ useEffect(() => {
+ if (localUserSpeaking === true || localUserVideo) {
+ let localObject = {
+ user: userId + "",
+ audiostatus: props.audioControl.value,
+ streamingVideo: props.videoControl.value,
+ speaking: localUserSpeaking,
+ };
+ props.localUser.onChange(localObject);
+ }
+ }, [localUserSpeaking]);
+
+ useEffect(() => {
+ if (rtmChannelResponse) {
+ rtmClient.on("MessageFromPeer", function (message, peerId) {
+ setRtmMessages((prevMessages: any[]) => {
+ // Check if the messages array exceeds the maximum limit
+ if (prevMessages.length >= 500) {
+ prevMessages.pop(); // Remove the oldest message
+ }
+ return [
+ ...prevMessages,
+ { peermessage: JSON.parse(message.text + ""), from: peerId },
+ ];
+ });
+ });
+
+ rtmChannelResponse.on("ChannelMessage", function (message, memberId) {
+ setRtmMessages((prevMessages: any[]) => {
+ // Check if the messages array exceeds the maximum limit
+ if (prevMessages.length >= 500) {
+ prevMessages.pop(); // Remove the oldest message
+ }
+ return [
+ ...prevMessages,
+ {
+ channelmessage: JSON.parse(message.text + ""),
+ from: memberId,
+ },
+ ];
+ });
+
+ dispatch(
+ changeChildAction("messages", getData(rtmMessages).data, false)
+ );
+ });
+ }
+ }, [rtmChannelResponse]);
+ useEffect(() => {
+ if (client) {
+ //Enable Agora to send audio bytes
+ client.enableAudioVolumeIndicator();
+ //user activity listeners
+ client.on("user-joined", (user: IAgoraRTCRemoteUser) => {
+ setUserJoined(user);
+ });
+ client.on("user-left", (user: IAgoraRTCRemoteUser, reason: any) => {
+ setUserLeft(user);
+ });
+
+ //listen to user speaking,
+ client.on("volume-indicator", (volumeInfos: any) => {
+ if (volumeInfos.length === 0) return;
+ volumeInfos.map((volumeInfo: any) => {
+ //when the volume is above 30, user is probably speaking
+ const speaking = volumeInfo.level >= 30;
+ if (
+ volumeInfo.uid === userId &&
+ props.localUser.value.speaking != speaking
+ ) {
+ setLocalUserSpeaking(speaking);
+ } else {
+ setUpdateVolume({ update: speaking, userid: volumeInfo.uid });
+ }
+ });
+ });
+
+ client.on(
+ "user-published",
+ async (user: IAgoraRTCRemoteUser, mediaType: "video" | "audio") => {
+ setLocalUserVideo(user);
+ }
+ );
+ client.on(
+ "user-unpublished",
+ (user: IAgoraRTCRemoteUser, mediaType: "video" | "audio") => {
+ setLocalUserVideo(user);
+ }
+ );
+ }
+ }, [client]);
+
return (
- <>
-
- {children.events.propertyView({})}
-
-
- {children.licenceKey.propertyView({
- label: trans("calendar.licence"),
- })}
- {children.onEvent.getPropertyView()}
-
-
- {children.editable.propertyView({
- label: trans("calendar.editable"),
- })}
- {children.defaultDate.propertyView({
- label: trans("calendar.defaultDate"),
- tooltip: trans("calendar.defaultDateTooltip"),
- })}
- {licence == ""
- ? children.defaultFreeView.propertyView({
- label: trans("calendar.defaultView"),
- tooltip: trans("calendar.defaultViewTooltip"),
- })
- : children.defaultPremiumView.propertyView({
- label: trans("calendar.defaultView"),
- tooltip: trans("calendar.defaultViewTooltip"),
- })}
- {children.firstDay.propertyView({
- label: trans("calendar.startWeek"),
- })}
- {children.showEventTime.propertyView({
- label: trans("calendar.showEventTime"),
- tooltip: trans("calendar.showEventTimeTooltip"),
- })}
- {children.showWeekends.propertyView({
- label: trans("calendar.showWeekends"),
- })}
- {children.showAllDay.propertyView({
- label: trans("calendar.showAllDay"),
- tooltip: trans("calendar.showAllDayTooltip"),
- })}
- {children.dayMaxEvents.propertyView({
- label: trans("calendar.dayMaxEvents"),
- tooltip: trans("calendar.dayMaxEventsTooltip"),
- })}
- {children.eventMaxStack.propertyView({
- label: trans("calendar.eventMaxStack"),
- tooltip: trans("calendar.eventMaxStackTooltip"),
- })}
-
-
- {hiddenPropertyView(children)}
-
-
- {children.style.getPropertyView()}
-
- >
+
+
+
+ document.querySelector(`#${CanvasContainerID}`) || document.body
+ }
+ footer={null}
+ width={transToPxSize(props.width || DEFAULT_SIZE)}
+ height={
+ !props.autoHeight
+ ? transToPxSize(props.height || DEFAULT_SIZE)
+ : ""
+ }
+ onClose={(e) => {
+ props.visible.onChange(false);
+ }}
+ afterOpenChange={(visible) => {
+ if (!visible) {
+ props.onEvent("close");
+ }
+ }}
+ zIndex={Layers.drawer}
+ maskClosable={props.maskClosable}
+ mask={props.showMask}
+ >
+ {
+ props.visible.onChange(false);
+ }}
+ >
+
+
+
+
+
+
);
- })
+ }
+ )
+ .setPropertyViewFn((children: any) => (
+ <>
+ {/* {(useContext(EditorContext).editorModeStatus === "logic" ||
+ useContext(EditorContext).editorModeStatus === "both") && (
+ <>
+
+ {children.appId.propertyView({
+ label: trans("meeting.appid"),
+ })}
+ {children.meetingName.propertyView({
+ label: trans("meeting.meetingName"),
+ })}
+ {children.localUserID.propertyView({
+ label: trans("meeting.localUserID"),
+ })}
+ {children.rtmToken.propertyView({
+ label: trans("meeting.rtmToken"),
+ })}
+ {children.rtcToken.propertyView({
+ label: trans("meeting.rtcToken"),
+ })}
+
+
+ {children.onEvent.getPropertyView()}
+
+ >
+ )} */}
+
+ {/* {(useContext(EditorContext).editorModeStatus === "layout" ||
+ useContext(EditorContext).editorModeStatus === "both") && ( */}
+ {/* <> */}
+
+ {children.placement.propertyView({
+ label: trans("meeting.placement"),
+ radioButton: true,
+ })}
+ {["top", "bottom"].includes(children.placement.getView())
+ ? children.autoHeight.getPropertyView()
+ : children.width.propertyView({
+ label: trans("meeting.width"),
+ tooltip: trans("meeting.widthTooltip"),
+ placeholder: DEFAULT_SIZE + "",
+ })}
+ {!children.autoHeight.getView() &&
+ ["top", "bottom"].includes(children.placement.getView()) &&
+ children.height.propertyView({
+ label: trans("meeting.height"),
+ tooltip: trans("meeting.heightTooltip"),
+ placeholder: DEFAULT_SIZE + "",
+ })}
+ {children.maskClosable.propertyView({
+ label: trans("meeting.maskClosable"),
+ })}
+ {children.showMask.propertyView({
+ label: trans("meeting.showMask"),
+ })}
+
+
+
+ {children.style.getPropertyView()}
+
+ {/* > */}
+ {/* )} */}
+ >
+ ))
.build();
})();
-CalendarBasicComp = class extends CalendarBasicComp {
- override autoHeight(): boolean {
+MTComp = class extends MTComp {
+ autoHeight(): boolean {
return false;
}
};
-export const CalendarComp = withExposingConfigs(CalendarBasicComp, [
- new NameConfig("events", trans("calendar.events")),
- NameConfigHidden,
+MTComp = withMethodExposing(MTComp, [
+ {
+ method: {
+ name: "openDrawer",
+ params: [],
+ },
+ execute: (comp: any, values: any) => {
+ comp.children.visible.getView().onChange(true);
+ },
+ },
+ {
+ method: {
+ name: "startSharing",
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ if (!comp.children.meetingActive.getView().value) return;
+ let sharing = !comp.children.sharing.getView().value;
+ await shareScreen(sharing);
+ comp.children.sharing.change(sharing);
+ },
+ },
+ {
+ method: {
+ name: "audioControl",
+ description: trans("meeting.actionBtnDesc"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ if (!comp.children.meetingActive.getView().value) return;
+ let value = !comp.children.audioControl.getView().value;
+ comp.children.localUser.change({
+ user: userId + "",
+ audiostatus: value,
+ streamingVideo: comp.children.videoControl.getView().value,
+ speaking: false,
+ });
+ await turnOnMicrophone(value);
+ comp.children.audioControl.change(value);
+ },
+ },
+ {
+ method: {
+ name: "videoControl",
+ description: trans("meeting.actionBtnDesc"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ //check if meeting is active
+ if (!comp.children.meetingActive.getView().value) return;
+ //toggle videoControl
+ let value = !comp.children.videoControl.getView().value;
+ if (videoTrack) {
+ videoTrack.setEnabled(value);
+ } else {
+ await turnOnCamera(value);
+ }
+ //change my local user data
+ let localData = {
+ user: userId + "",
+ streamingVideo: value,
+ audiostatus: comp.children.audioControl.getView().value,
+ speaking: comp.children.localUser.getView().value.speaking,
+ };
+
+ comp.children.localUser.change(localData);
+ comp.children.videoControl.change(value);
+ },
+ },
+ {
+ method: {
+ name: "startMeeting",
+ description: trans("meeting.actionBtnDesc"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ if (comp.children.meetingActive.getView().value) return;
+ userId =
+ comp.children.localUserID.getView().value === ""
+ ? uuidv4()
+ : comp.children.localUserID.getView().value;
+ comp.children.localUser.change({
+ user: userId + "",
+ audiostatus: false,
+ speaking: false,
+ streamingVideo: true,
+ });
+
+ comp.children.localUser.children.value.dispatch(
+ changeChildAction(
+ "localUser",
+ {
+ user: userId + "",
+ audiostatus: false,
+ speaking: false,
+ streamingVideo: true,
+ },
+ false
+ )
+ );
+ comp.children.videoControl.change(true);
+ await publishVideo(
+ comp.children.appId.getView(),
+ comp.children.meetingName.getView().value === ""
+ ? uuidv4()
+ : comp.children.meetingName.getView().value,
+ comp.children.rtmToken.getView().value,
+ comp.children.rtcToken.getView().value
+ );
+ comp.children.meetingActive.change(true);
+ },
+ },
+ {
+ method: {
+ name: "broadCast",
+ description: trans("meeting.broadCast"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ if (!comp.children.meetingActive.getView().value) return;
+ let messagedata =
+ values !== undefined && values[0] !== undefined ? values[0] : "";
+ let toUsers: any =
+ values !== undefined && values[1] !== undefined ? values[1] : "";
+
+ let message: any = {
+ time: Date.now(),
+ message: messagedata,
+ };
+
+ if (toUsers.length > 0 && toUsers[0] !== undefined) {
+ toUsers.forEach((peer: any) => {
+ message.to = peer;
+ sendPeerMessageRtm(message, String(peer));
+ });
+ } else {
+ sendMessageRtm(message);
+ }
+ },
+ },
+ {
+ method: {
+ name: "setMeetingName",
+ description: trans("meeting.meetingName"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ let meetingName: any = values[0];
+ comp.children.meetingName.change(meetingName);
+ },
+ },
+ {
+ method: {
+ name: "setUserName",
+ description: trans("meeting.userName"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ let userName: any = values[0];
+ let userLocal = comp.children.localUser.getView().value;
+ comp.children.localUser.change({ ...userLocal, userName: userName });
+ },
+ },
+ {
+ method: {
+ name: "setRTCToken",
+ description: trans("meeting.rtcToken"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ let rtcToken: any = values[0];
+ comp.children.rtcToken.change(rtcToken);
+ },
+ },
+ {
+ method: {
+ name: "setRTMToken",
+ description: trans("meeting.rtmToken"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ let rtmToken: any = values[0];
+ comp.children.rtmToken.change(rtmToken);
+ },
+ },
+ {
+ method: {
+ name: "endMeeting",
+ description: trans("meeting.actionBtnDesc"),
+ params: [],
+ },
+ execute: async (comp: any, values: any) => {
+ if (!comp.children.meetingActive.getView().value) return;
+
+ let value = !comp.children.endCall.getView().value;
+ comp.children.endCall.change(value);
+ comp.children.meetingActive.change(false);
+
+ await leaveChannel();
+
+ comp.children.localUser.change({
+ user: userId + "",
+ streamingVideo: false,
+ });
+ },
+ },
+ // {
+ // method: {
+ // name: "closeDrawer",
+ // description: trans("drawer.closeDrawerDesc"),
+ // params: [],
+ // },
+ // execute: (comp : any, values: any) => {
+ // comp.children.visible.getView().onChange(false);
+ // },
+ // },
+]);
+
+export const AgoraMeetingControllerComp = withExposingConfigs(MTComp, [
+ // new NameConfig("visible", trans("export.visibleDesc")),
+ new NameConfig("appId", trans("meeting.appid")),
+ new NameConfig("localUser", trans("meeting.host")),
+ new NameConfig("participants", trans("meeting.participants")),
+ new NameConfig("meetingActive", trans("meeting.meetingActive")),
+ new NameConfig("meetingName", trans("meeting.meetingName")),
+ new NameConfig("localUserID", trans("meeting.localUserID")),
+ new NameConfig("messages", trans("meeting.messages")),
+ new NameConfig("rtmToken", trans("meeting.rtmToken")),
+ new NameConfig("rtcToken", trans("meeting.rtcToken")),
]);
diff --git a/client/packages/lowcoder-comps/src/comps/calendarComp/calendarComp.tsx b/client/packages/lowcoder-comps/src/comps/calendarComp/calendarComp.tsx
index c65de7873..53598520f 100644
--- a/client/packages/lowcoder-comps/src/comps/calendarComp/calendarComp.tsx
+++ b/client/packages/lowcoder-comps/src/comps/calendarComp/calendarComp.tsx
@@ -86,7 +86,7 @@ let CalendarBasicComp = (function () {
const theme = useContext(ThemeContext);
const ref = createRef();
const editEvent = useRef();
- const [form] = Form.useForm();
+ const [form] = Form.useForm();
const [left, setLeft] = useState(undefined);
const events = props.events.value.map((item: EventType) => {
diff --git a/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts b/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts
index 18c022991..4cbe12e21 100644
--- a/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts
+++ b/client/packages/lowcoder-comps/src/i18n/comps/locales/en.ts
@@ -96,6 +96,66 @@ export const en = {
dataDesc: "Image Data",
buttonTextDesc: "Button Text",
},
+ meeting: {
+ logLevel: "Agora SDK Log Level",
+ placement: "Meeting Drawer Placement",
+ meeting: "Meeting Settings",
+ cameraView: "Camera View",
+ cameraViewDesc: "Camera View of the Local User (Host)",
+ screenShared: "Screen Shared",
+ heightTooltip: "Pixel, e.g. 378",
+ height: "Drawer Height",
+ widthTooltip: "Pixel or Percentage, e.g. 520, 60%",
+ width: "Drawer Width",
+ screenSharedDesc: "Screen Shared by the Local User (Host)",
+ audioUnmuted: "Audio Unmuted",
+ audioMuted: "Audio Muted",
+ videoClicked: "Video Clicked",
+ showMask: "Show Mask",
+ maskClosable: "Click Outside to Close",
+ videoOff: "Video Off",
+ videoOn: "Video On",
+ size: "Size",
+ top: "Top",
+ host: "Host of the Meeting Room. You would need to manage the host as own Application Logic",
+ participants: "Participants of the Meeting Room",
+ shareScreen: "Display Screen Shared by the Local User",
+ appid: "Agora Application ID",
+ meetingName: "Meeting Name",
+ localUserID: "Host User ID",
+ userName: "Host User Name",
+ rtmToken: "Agora RTM Token",
+ rtcToken: "Agora RTC Token",
+ noVideo: "No Video",
+ profileImageUrl: "Profile Image URL",
+ right: "Right",
+ bottom: "Bottom",
+ videoId: "Video Stream ID",
+ audioStatus: "Audio Status",
+ left: "Left",
+ widthTooltip: "Pixel or Percentage, e.g. 520, 60%",
+ heightTooltip: "Pixel, e.g. 378",
+ openDrawerDesc: "Open Drawer",
+ closeDrawerDesc: "Close Drawer",
+ width: "Drawer Width",
+ height: "Drawer Height",
+ actionBtnDesc: "Action Button",
+ broadCast: "Broadcast Messages",
+ title: "Meeting Title",
+ meetingCompName: "Agora Meeting Controller",
+ sharingCompName: "Screen Share Stream",
+ videoCompName: "Camera Stream",
+ videoSharingCompName: "Screen Share Stream",
+ meetingControlCompName: "Control Button",
+ meetingCompDesc: "Meeting Component",
+ meetingCompControls: "Meeting Control",
+ meetingCompKeywords: "Agora Meeting, Web Meeting, Collaboration",
+ iconSize: "Icon Size",
+ userId: "Host User ID",
+ roomId: "Room ID",
+ meetingActive: "Ongoing Meeting",
+ messages: "Broadcasted Messages",
+ },
calendar: {
events: "Events Data",
editable: "Editable",
diff --git a/client/packages/lowcoder-comps/src/index.ts b/client/packages/lowcoder-comps/src/index.ts
index 065393b52..5fbe6a340 100644
--- a/client/packages/lowcoder-comps/src/index.ts
+++ b/client/packages/lowcoder-comps/src/index.ts
@@ -1,11 +1,13 @@
import { ChartCompWithDefault } from "./comps/chartComp/chartComp";
import { ImageEditorComp } from "./comps/imageEditorComp/index";
import { CalendarComp } from "./comps/calendarComp/calendarComp";
-import { MermaidComp } from "comps/mermaidComp";
+import { MermaidComp } from "comps/mermaidComp";
+import { AgoraMeetingControllerComp } from "comps/agoraMeetingComp/agorameetingControllerComp";
export default {
chart: ChartCompWithDefault,
imageEditor: ImageEditorComp,
calendar: CalendarComp,
mermaid: MermaidComp,
+ agoraMeetingComp: AgoraMeetingControllerComp,
};
From 25cda6ad6da0a761f4d31158331947842ea9d3bc Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Mon, 15 Apr 2024 11:24:56 +0300
Subject: [PATCH 04/16] with t constructor error
---
client/packages/lowcoder-comps/package.json | 2 +-
.../agorameetingControllerComp.tsx | 93 +++++++++----------
2 files changed, 43 insertions(+), 52 deletions(-)
diff --git a/client/packages/lowcoder-comps/package.json b/client/packages/lowcoder-comps/package.json
index 6acb59f12..07f9fe2d0 100644
--- a/client/packages/lowcoder-comps/package.json
+++ b/client/packages/lowcoder-comps/package.json
@@ -21,7 +21,7 @@
"echarts-extension-gmap": "^1.6.0",
"echarts-wordcloud": "^2.1.0",
"lowcoder-cli": "workspace:^",
- "lowcoder-sdk": "workspace:^",
+ "lowcoder-sdk": "/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk",
"mermaid": "^10.6.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
index 157d7e9a8..6b4249daf 100644
--- a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
@@ -1,40 +1,24 @@
import {
- isValidColor,
NameConfig,
- NameConfigHidden,
BoolControl,
- UICompBuilder,
withDefault,
withExposingConfigs,
- NumberControl,
StringControl,
- hiddenPropertyView,
- ChangeEventHandlerControl,
Section,
sectionNames,
- dropdownControl,
styleControl,
- ThemeContext,
- CalendarStyle,
- DateParser,
- CustomModal,
- jsonValueExposingStateControl,
- CalendarDeleteIcon,
- Tooltip,
BooleanStateControl,
AutoHeightControl,
stringStateControl,
InnerGrid,
useUserViewMode,
getData,
- DrawerWrapper,
gridItemCompToGridItems,
Layers,
isNumeric,
EditorContext,
withMethodExposing,
eventHandlerControl,
- EventOptions,
DrawerStyle,
PositionControl,
jsonObjectExposingStateControl,
@@ -43,10 +27,12 @@ import {
changeChildAction,
HintPlaceHolder,
styled,
+ BackgroundColorContext,
+ ContainerCompBuilder,
+ closeEvent,
} from "lowcoder-sdk";
-import { BackgroundColorContext } from "../../../../lowcoder/src/comps/utils/backgroundColorContext";
-import { ContainerCompBuilder } from "../../../../lowcoder/src/comps/comps/containerBase/containerCompBuilder";
+const EventOptions = [closeEvent] as const;
import { Button } from "antd-mobile";
import { trans, getCalendarLocale } from "../../i18n/comps";
import {
@@ -55,7 +41,10 @@ import {
FirstDayOptions,
} from "./calendarConstants";
import { default as CloseOutlined } from "@ant-design/icons/CloseOutlined";
-
+const DrawerWrapper = styled.div`
+ // Shield the mouse events of the lower layer, the mask can be closed in the edit mode to prevent the lower layer from sliding
+ pointer-events: auto;
+`;
import AgoraRTC, {
type ICameraVideoTrack,
type IMicrophoneAudioTrack,
@@ -64,6 +53,7 @@ import AgoraRTC, {
type UID,
type ILocalVideoTrack,
} from "agora-rtc-sdk-ng";
+
import type { RtmChannel, RtmClient } from "agora-rtm-sdk";
import { useCallback, useContext, useEffect, useState } from "react";
// import { Drawer, changeChildAction } from "lowcoder-sdk/src";
@@ -98,34 +88,34 @@ let screenShareStream: ILocalVideoTrack;
let userId: UID | null | undefined;
let rtmChannelResponse: RtmChannel;
let rtmClient: RtmClient;
-const ButtonStyle = styled(Button)`
- position: absolute;
- left: 0;
- top: 0;
- z-index: 10;
- font-weight: 700;
- box-shadow: none;
- color: rgba(0, 0, 0, 0.45);
- height: 54px;
- width: 54px;
-
- svg {
- width: 16px;
- height: 16px;
- }
-
- &,
- :hover,
- :focus {
- background-color: transparent;
- border: none;
- }
-
- :hover,
- :focus {
- color: rgba(0, 0, 0, 0.75);
- }
-`;
+// const ButtonStyle = styled(Button)`
+// position: absolute;
+// left: 0;
+// top: 0;
+// z-index: 10;
+// font-weight: 700;
+// box-shadow: none;
+// color: rgba(0, 0, 0, 0.45);
+// height: 54px;
+// width: 54px;
+
+// svg {
+// width: 16px;
+// height: 16px;
+// }
+
+// &,
+// :hover,
+// :focus {
+// background-color: transparent;
+// border: none;
+// }
+
+// :hover,
+// :focus {
+// color: rgba(0, 0, 0, 0.75);
+// }
+// `;
const turnOnCamera = async (flag?: boolean) => {
if (videoTrack) {
return videoTrack.setEnabled(flag!);
@@ -532,10 +522,10 @@ let MTComp = (function () {
? transToPxSize(props.height || DEFAULT_SIZE)
: ""
}
- onClose={(e) => {
+ onClose={(e: any) => {
props.visible.onChange(false);
}}
- afterOpenChange={(visible) => {
+ afterOpenChange={(visible: any) => {
if (!visible) {
props.onEvent("close");
}
@@ -544,13 +534,14 @@ let MTComp = (function () {
maskClosable={props.maskClosable}
mask={props.showMask}
>
- sfsd
+ {/* {
props.visible.onChange(false);
}}
>
-
+ */}
Date: Mon, 15 Apr 2024 11:25:41 +0300
Subject: [PATCH 05/16] exported missing compos to lowcoder sdk
---
client/packages/lowcoder/src/index.sdk.ts | 12 ++++++++++++
client/yarn.lock | 14 +++++++++++++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/client/packages/lowcoder/src/index.sdk.ts b/client/packages/lowcoder/src/index.sdk.ts
index 9bec411fc..ee6862166 100644
--- a/client/packages/lowcoder/src/index.sdk.ts
+++ b/client/packages/lowcoder/src/index.sdk.ts
@@ -4,7 +4,19 @@ import * as uuid from "uuid";
import * as styledNameExports from "styled-components";
import styledDefault from "styled-components";
+export * from "comps/comps/containerBase/containerCompBuilder";
+export * from "comps/utils/backgroundColorContext";
+export {
+ closeEvent,
+ eventHandlerControl,
+} from "comps/controls/eventHandlerControl";
+export { getData } from "comps/comps/listViewComp/listViewUtils";
+export {
+ gridItemCompToGridItems,
+ InnerGrid,
+} from "comps/comps/containerComp/containerView";
+export { Layers } from "constants/Layers";
export * from "redux/store/store";
// util
diff --git a/client/yarn.lock b/client/yarn.lock
index 8ee5fba00..635e76dde 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -13409,7 +13409,7 @@ __metadata:
echarts-wordcloud: ^2.1.0
jest: 29.3.0
lowcoder-cli: "workspace:^"
- lowcoder-sdk: "workspace:^"
+ lowcoder-sdk: /Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk
mermaid: ^10.6.1
react: ^18.2.0
react-dom: ^18.2.0
@@ -13576,6 +13576,18 @@ __metadata:
languageName: unknown
linkType: soft
+"lowcoder-sdk@file:/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk::locator=lowcoder-comps%40workspace%3Apackages%2Flowcoder-comps":
+ version: 2.4.0-beta
+ resolution: "lowcoder-sdk@file:/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk#/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk::hash=bd18d9&locator=lowcoder-comps%40workspace%3Apackages%2Flowcoder-comps"
+ dependencies:
+ prettier: ^3.1.1
+ peerDependencies:
+ react: ">=18"
+ react-dom: ">=18"
+ checksum: 89abb711cf6d46857c7e9375dcc20e2b7fbffde89fd43c3a7161109c61adbbf0d530ff8c2ebb750b56954ba701061117b82c21f119ee2abd2badfec96e1713f7
+ languageName: node
+ linkType: hard
+
"lowcoder-sdk@npm:^2.1.10":
version: 2.3.4
resolution: "lowcoder-sdk@npm:2.3.4"
From bb1014ae2b78e7d1de4fe37260293e2b0803a806 Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Mon, 15 Apr 2024 16:01:09 +0300
Subject: [PATCH 06/16] moved agora meeting components to lowcoder-comps
---
client/packages/lowcoder-comps/package.json | 26 +-
.../agoraMeetingComp/calendarConstants.tsx | 946 ------------------
.../comps/agoraMeetingComp/controlButton.tsx | 332 ++++++
.../meetingControlerUtils.tsx | 37 +
...llerComp.tsx => meetingControllerComp.tsx} | 135 ++-
.../videoMeetingStreamComp.tsx | 249 +++++
.../videoSharingStreamComp.tsx | 238 +++++
.../videobuttonCompConstants.tsx | 111 ++
client/packages/lowcoder-comps/src/index.ts | 9 +-
9 files changed, 1062 insertions(+), 1021 deletions(-)
delete mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx
create mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/controlButton.tsx
create mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControlerUtils.tsx
rename client/packages/lowcoder-comps/src/comps/agoraMeetingComp/{agorameetingControllerComp.tsx => meetingControllerComp.tsx} (88%)
create mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx
create mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx
create mode 100644 client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videobuttonCompConstants.tsx
diff --git a/client/packages/lowcoder-comps/package.json b/client/packages/lowcoder-comps/package.json
index 4c1c880cd..386128841 100644
--- a/client/packages/lowcoder-comps/package.json
+++ b/client/packages/lowcoder-comps/package.json
@@ -32,6 +32,30 @@
"lowcoder": {
"description": "",
"comps": {
+ "meetingSharing": {
+ "name": "Agora Meeting Sharing",
+ "icon": "./icons/icon-comp-calendar.svg",
+ "layoutInfo": {
+ "w": 15,
+ "h": 60
+ }
+ },
+ "meetingController": {
+ "name": "Agora Meeting Controller",
+ "icon": "./icons/icon-comp-calendar.svg",
+ "layoutInfo": {
+ "w": 15,
+ "h": 60
+ }
+ },
+ "meetingStream": {
+ "name": "Video Stream",
+ "icon": "./icons/icon-comp-calendar.svg",
+ "layoutInfo": {
+ "w": 15,
+ "h": 60
+ }
+ },
"calendar": {
"name": "Calendar",
"icon": "./icons/icon-comp-calendar.svg",
@@ -78,4 +102,4 @@
"vite": "^5.0.12",
"vite-tsconfig-paths": "^3.6.0"
}
-}
+}
\ No newline at end of file
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx
deleted file mode 100644
index 394c0427a..000000000
--- a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/calendarConstants.tsx
+++ /dev/null
@@ -1,946 +0,0 @@
-import { trans } from "../../i18n/comps";
-import {
- backgroundToBorder,
- CalendarStyleType,
- contrastText,
- contrastColor,
- handleToCalendarHeadSelectBg,
- handleToCalendarToday,
- genHoverColor,
- DATE_FORMAT,
- DATE_TIME_FORMAT,
- ThemeDetail,
- isDarkColor,
- darkenColor,
- lightenColor,
- toHex,
- UnderlineCss,
-} from "lowcoder-sdk";
-import styled from "styled-components";
-import dayjs from "dayjs";
-import {
- DayHeaderContentArg,
- FormatterInput,
- SlotLabelContentArg,
- ViewContentArg,
-} from "@fullcalendar/core";
-import { default as Form } from "antd/es/form";
-
-export const Wrapper = styled.div<{
- $editable: boolean;
- $style: CalendarStyleType;
- $theme?: ThemeDetail;
- $left?: number;
-}>`
- position: relative;
- height: 100%;
- overflow: hidden;
- color: ${(props) => props.$style.text};
- .fc-theme-standard .fc-list-day-cushion,
- .fc .fc-timegrid-col.fc-day-today,
- .fc .fc-daygrid-day.fc-day-today {
- background-color: ${(props) => props.$style.background};
- }
- .fc .fc-highlight {
- background-color: ${(props) => props.$style.selectBackground};
- }
- a {
- color: ${(props) => props.$style.text};
- }
-
- .fc .fc-timegrid-slot {
- height: 28px;
- }
-
- // day
- .fc-timeGridDay-view {
- .fc-col-header-cell {
- font-size: 20px;
- font-weight: 500;
- a {
- line-height: 67px;
- }
- }
- }
-
- // list
- .fc-list {
- .fc-list-table {
- table-layout: fixed;
- th {
- background-color: ${(props) => props.$style.background};
- }
- }
- .fc-list-event-graphic {
- display: none;
- }
- .fc-list-day-cushion {
- font-size: 16px;
- font-weight: 500;
- line-height: 32px;
- padding: 0 24px;
- }
- .fc-list-day-side-text {
- float: left;
- margin-left: 24px;
- }
- .fc-list-day {
- th {
- padding: 8px 0 3px 0;
- }
- > th {
- border: none;
- }
- &:not(:nth-of-type(1)) .fc-list-day-cushion {
- border-top: 1px solid
- ${(props) =>
- toHex(props.$style.border) === "#D7D9E0"
- ? "#E1E3EB"
- : lightenColor(props.$style.border, 0.03)};
- }
- }
- .fc-event + .fc-list-day th {
- padding-top: 11px;
- .fc-list-day-cushion {
- padding-top: 8px;
- }
- }
- .fc-event {
- .fc-list-event-time,
- .fc-list-event-title {
- border: none;
- }
- &:hover .event {
- box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
- border-width: 1px;
- margin: 2px 5px;
- height: 20px;
- .event-title {
- margin-left: 15px;
- }
- &::before {
- left: 2px;
- }
- }
- }
- .fc-event {
- font-size: 13px;
- line-height: 20px;
- display: flex;
- align-items: center;
- &.no-time {
- padding-left: 19px;
- }
- }
- .fc-list-event-time {
- padding: 0px 16px 0 24px;
- vertical-align: middle;
- min-width: 87px;
- width: 87px;
- box-sizing: content-box;
- }
- .fc-list-event-title {
- min-width: 266px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- padding: 0 14px 0 0;
- cursor: pointer;
- .event {
- font-size: 13px;
- height: 18px;
- line-height: 18px;
- margin: 3px 5px;
- border-width: 0;
- align-items: center;
- &::before {
- height: 14px;
- top: 2px;
- left: 3px;
- }
- .event-time {
- display: none;
- }
- .event-title {
- margin-left: 16px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .event-remove {
- background-color: inherit;
- }
- }
- }
- .fc-event:hover td {
- background-color: inherit;
- }
- }
-
- // month
- .fc-dayGridMonth-view {
- .fc-daygrid-day-frame {
- min-height: 95px;
- height: 100%;
- }
- .fc-col-header-cell {
- font-size: 14px;
- font-weight: 400;
- text-align: left;
- padding-left: 16px;
- a {
- padding: 0;
- line-height: 39px;
- }
- }
- .fc-daygrid-day-number {
- font-size: 14px;
- line-height: 22px;
- font-weight: 500;
- padding: 0 6px;
- border-radius: 11px;
- margin: 12px 0 0 10px;
- }
- .fc-daygrid-day-top {
- flex-direction: inherit;
- }
- .fc-day-today .fc-daygrid-day-number {
- background-color: ${(props) =>
- props.$theme?.primary ? props.$theme.primary : props.$style.background};
- color: ${(props) =>
- contrastText(
- props.$theme?.primary || "",
- props.$theme?.textDark || "#000000",
- props.$theme?.textLight || "#ffffff"
- )};
- }
- .fc-daygrid-day-events {
- padding: 1px 0 5px 0;
- min-height: unset;
- .fc-event {
- margin: 2px 4px 2px 12px;
- padding: 0;
- &:hover .event {
- padding-right: 20px;
- }
- .event {
- font-size: 13px;
- line-height: 18px;
- padding-right: 0;
- .event-time {
- display: none;
- }
- .event-title {
- margin-left: 15px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- &::before {
- height: 14px;
- }
- }
- }
- .fc-daygrid-day-bottom {
- padding: 2px 2px 0 10px;
- }
- }
- .fc-day-other {
- color: ${(props) => props.$style.text};
- .fc-daygrid-day-top,
- .fc-daygrid-day-events {
- opacity: 0.35;
- }
- .event::before {
- background-color: ${(props) => props.$style.text};
- }
- }
- }
- // month drag event
- .fc > .fc-event {
- visibility: hidden;
- }
-
- // more link
- .fc-view-harness-active .fc-more-popover {
- border-radius: 4px;
- box-shadow: 0 0px 10px 4px rgba(0, 0, 0, 0.25);
- overflow: hidden;
- left: ${(props) => `min(${props.$left}px, calc(100% - 210px)) !important`};
- .fc-popover-body {
- padding: 4px 0;
- min-width: 200px;
- width: 200px;
- .fc-daygrid-event-harness {
- margin: 4px;
- .fc-event {
- margin: 0;
- .event {
- height: fit-content;
- .event-title {
- white-space: pre-wrap;
- }
- .event-time {
- margin-top: 0;
- }
- }
- }
- }
- }
- .fc-popover-header,
- .fc-popover-body {
- background-color: ${(props) => props.$style.background};
- }
- .fc-popover-header .fc-popover-close {
- color: #8b8fa3;
- &:hover {
- color: #222;
- }
- }
- }
-
- .fc-direction-ltr .fc-timegrid-more-link {
- border: 1px solid ${(props) => props.$style.border};
- border-radius: 4px;
- box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
- font-size: 13px;
- display: inline-block;
- font-weight: 500;
- background-color: ${(props) => lightenColor(props.$style.background, 0.1)};
- }
-
- .fc-dayGridMonth-view .fc-more-link {
- margin: 0 2px 2px 2px !important;
- }
- .fc-timeGridWeek-view .fc-more-link,
- .fc-timeGridDay-view .fc-more-link {
- margin: 2px !important;
- }
- .fc-daygrid-day-events {
- margin: 0 !important;
- padding: 2px 0;
- .fc-event {
- margin: 2px 4px;
- }
- .fc-daygrid-day-bottom {
- line-height: 16px;
- padding: 0;
- .fc-more-link {
- width: calc(100% - 4px);
- border: 1px solid ${(props) => props.$style.border};
- border-radius: 4px;
- box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.15);
- font-size: 13px;
- display: inline-block;
- height: 20px;
- padding-left: 15px;
- font-weight: 500;
- background-color: ${(props) =>
- lightenColor(props.$style.background, 0.1)};
- }
- }
- }
-
- // on resize
- .fc-media-screen {
- height: 100% !important;
- }
- .fc-scroller {
- overflow: hidden auto !important;
- overflow: hidden overlay !important;
- }
- .fc-col-header,
- .fc-scroller > div,
- .fc-scroller > div > table,
- .fc-scrollgrid-sync-table,
- .fc-timegrid-cols > table,
- .fc .fc-scrollgrid,
- .fc .fc-scrollgrid table {
- width: 100% !important;
- }
-
- // event
- .fc-timegrid-event .fc-event-main {
- padding: 4px 0 4px 1px;
- }
- .fc-event {
- position: relative;
- height: 100%;
- background-color: unset !important;
- border: none !important;
- box-shadow: none !important;
- .event-remove {
- color: ${(props) => props.$style.text};
- }
- &:hover {
- .event-remove {
- opacity: ${(props) => (props.$editable ? 1 : undefined)};
- }
- }
- }
-
- // left time
- .time.past {
- opacity: 0.35;
- }
-
- .past .time {
- opacity: 0.35;
- }
-
- .future .time {
- opacity: 1;
- }
-
- .fc-scrollgrid-liquid > tbody {
- & > tr:nth-of-type(2) {
- display: ${(props) => props.allDay && 1};
- }
- }
- .fc .fc-timegrid-slot-label-cushion {
- padding: 0 15px;
- }
-
- // border-radius, bg
- .fc-theme-standard .fc-list {
- background-color: ${(props) => props.$style.background};
- border-radius: ${(props) =>
- `0 0 ${props.$style.radius} ${props.$style.radius}`};
- border-color: ${(props) => props.$style.border};
- border-top-color: ${(props) =>
- toHex(props.$style.border) === "#D7D9E0"
- ? "#E1E3EB"
- : lightenColor(props.$style.border, 0.03)};
- }
- .fc-scrollgrid-liquid {
- border-radius: ${(props) =>
- `0 0 ${props.$style.radius} ${props.$style.radius}`};
- overflow: hidden;
- border-right-width: 1px;
- border-bottom-width: 1px;
- border-color: ${(props) => props.$style.border};
- > thead,
- > tbody > tr:nth-of-type(1),
- .fc-scrollgrid-section-liquid > td {
- background-color: ${(props) => props.$style.background};
- }
- }
- .fc-scrollgrid-section-liquid > td,
- .fc-scrollgrid-liquid .fc-scrollgrid-section-header > th {
- border: none;
- }
- .fc-scrollgrid-liquid > tbody > tr:nth-of-type(1) > td {
- border-right: none;
- }
- .fc-theme-standard .fc-scrollgrid {
- border-color: ${(props) =>
- toHex(props.$style.border) === "#D7D9E0"
- ? "#E1E3EB"
- : lightenColor(props.$style.border, 0.03)};
- }
- .fc .fc-scrollgrid {
- border-bottom-width: 1px;
- border-right-width: 1px;
- }
-
- .fc-day-sat,
- .fc-day-sun {
- &.fc-timegrid-col,
- &.fc-daygrid-day {
- background-color: ${(props) =>
- isDarkColor(props.$style.background)
- ? darkenColor(props.$style.background, 0.06)
- : darkenColor(props.$style.background, 0.02)};
- }
- }
- .fc-theme-standard td,
- .fc-theme-standard th {
- border-color: ${(props) =>
- toHex(props.$style.border) === "#D7D9E0"
- ? "#E1E3EB"
- : lightenColor(props.$style.border, 0.03)};
- }
-
- // header
- .fc .fc-toolbar.fc-header-toolbar {
- padding: 16px;
- margin-bottom: 0;
- border: 1px solid ${(props) => props.$style.border};
- border-bottom: none;
- border-radius: ${(props) =>
- `${props.$style.radius} ${props.$style.radius} 0 0`};
- background-color: ${(props) => props.$style.background};
- }
- .fc-toolbar-title {
- color: ${(props) => props.$style.title};
- font-size: 24px;
- line-height: 24px;
- display: inline-flex;
- }
- .fc-toolbar-chunk {
- display: inline-flex;
- align-items: center;
- }
- .fc .fc-toolbar-chunk .fc-button.fc-button-primary {
- height: 28px;
- display: flex;
- align-items: center;
- justify-content: center;
- &:not(:disabled):not(.fc-button-active) {
- &:hover,
- &:active {
- color: ${(props) => props.$style.btnText};
- background-color: ${(props) =>
- toHex(props.$style.headerBtnBackground) === "#FFFFFF"
- ? "#F5F5F6"
- : genHoverColor(props.$style.headerBtnBackground)};
- border-color: ${(props) =>
- toHex(props.$style.headerBtnBackground) === "#FFFFFF"
- ? "#D7D9E0"
- : backgroundToBorder(
- genHoverColor(props.$style.headerBtnBackground)
- )};
- }
- }
- &:not(:disabled):focus {
- box-shadow: none;
- }
- &:disabled {
- cursor: not-allowed;
- opacity: 1;
- &,
- &:hover {
- background-color: ${(props) => props.$style.headerBtnBackground};
- border-color: ${(props) =>
- backgroundToBorder(props.$style.headerBtnBackground)};
- color: ${(props) =>
- toHex(props.$style.btnText) === "#222222"
- ? "#B8B9BF"
- : contrastColor(props.$style.btnText)};
- }
- }
- }
- .fc .fc-button-primary:not(:disabled).fc-button-active:focus,
- .fc .fc-button-primary:not(:disabled):active:focus {
- box-shadow: none;
- }
- .fc-toolbar-chunk:nth-of-type(3) .fc-button-primary {
- height: 28px;
- display: inline-flex;
- font-size: 14px;
- margin-left: 8px;
- background-color: ${(props) => props.$style.headerBtnBackground};
- border-color: ${(props) =>
- backgroundToBorder(props.$style.headerBtnBackground)};
- color: ${(props) => props.$style.btnText};
- &.fc-today-button {
- min-width: 52px;
- }
- &.fc-prev-button,
- &.fc-next-button {
- padding: 0;
- width: 28px;
- color: ${(props) => lightenColor(props.$style.btnText, 0.4)};
- }
- &.fc-prev-button {
- margin-left: 12px;
- }
- }
- .fc-toolbar-chunk:nth-of-type(3) .fc-button-group {
- background-color: ${(props) =>
- toHex(props.$style.headerBtnBackground) === "#FFFFFF"
- ? "#EFEFF1"
- : isDarkColor(props.$style.headerBtnBackground)
- ? props.$style.headerBtnBackground
- : darkenColor(props.$style.headerBtnBackground, 0.1)};
- border-radius: 4px;
- margin-left: 16px;
- .fc-button-primary {
- background-color: transparent;
- min-width: 60px;
- border-radius: 4px;
- margin: 2px;
- border: none;
- color: ${(props) =>
- toHex(props.$style.btnText) === "#222222"
- ? "#8B8FA3"
- : lightenColor(props.$style.btnText, 0.4)};
- font-weight: 500;
-
- &.fc-button-active {
- background-color: ${(props) =>
- isDarkColor(props.$style.headerBtnBackground)
- ? lightenColor(props.$style.headerBtnBackground, 0.1)
- : props.$style.headerBtnBackground};
- color: ${(props) => props.$style.btnText};
- }
- }
- }
-
- // week head
- .fc-timeGridWeek-view {
- .week-head {
- display: flex;
- flex-direction: column;
- font-size: 14px;
- font-weight: 400;
- &.past span {
- opacity: 0.35;
- }
- .week {
- padding-bottom: 3px;
- }
- .day {
- font-size: 20px;
- font-weight: 500;
- line-height: 22px;
- }
- }
- .fc-day-today.fc-col-header-cell {
- background-color: ${(props) =>
- isDarkColor(props.$style.background)
- ? "#ffffff19"
- : toHex(props.$theme?.primary!) + "19"};
- a {
- color: ${(props) =>
- !isDarkColor(props.$style.background) &&
- darkenColor(props.$theme?.primary!, 0.1)};
- }
- }
- .fc-col-header-cell-cushion {
- padding: 8px 0 13px 0;
- }
- }
-
- // week left
- .fc .fc-timegrid-axis-cushion {
- min-width: 62px;
- min-height: 52px;
- max-width: none;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- }
- .fc-direction-ltr .fc-timegrid-slot-label-frame {
- text-align: center;
- }
- .fc .fc-timegrid-slot-label {
- border: none;
- }
-
- // time can doubleClick
- .fc-timegrid-bg-harness,
- .fc-daygrid-day-bg {
- pointer-events: none;
- }
-`;
-
-export const Remove = styled.div<{ isList: boolean }>`
- position: absolute;
- pointer-events: auto;
- top: 0;
- right: 0;
- display: flex;
- padding: 5px;
- opacity: 0;
- cursor: pointer;
- &:hover {
- g {
- stroke: #315efb;
- }
- }
-`;
-
-export const Event = styled.div<{
- bg: string;
- theme: Object;
- isList: boolean;
- allDay: boolean;
- $style: CalendarStyleType;
-}>`
- height: 100%;
- width: 100%;
- pointer-events: none;
- border-radius: 4px;
- box-shadow: ${(props) => !props.isList && "0 0 5px 0 rgba(0, 0, 0, 0.15)"};
- border: 1px solid ${(props) => props.$style.border};
- display: ${(props) => props.isList && "flex"};
- background-color: ${(props) =>
- !props.isList && lightenColor(props.$style.background, 0.1)};
- overflow: hidden;
- font-size: 13px;
- line-height: 19px;
- padding-right: 20px;
- overflow: hidden;
- position: relative;
- &::before {
- content: "";
- position: absolute;
- display: block;
- width: 5px;
- height: calc(100% - 4px);
- left: 2px;
- top: 2px;
- border-radius: 3px;
- background-color: ${(props) => props.bg};
- }
-
- .event-time {
- color: ${(props) =>
- !props.isList &&
- (isDarkColor(props.$style.text)
- ? lightenColor(props.$style.text, 0.2)
- : props.$style.text)};
- margin-left: 15px;
- white-space: pre-wrap;
- margin-top: 2px;
- }
- .event-title {
- color: ${(props) => !props.isList && props.$style.text};
- font-weight: 500;
- margin-left: 15px;
- white-space: pre-wrap;
- word-break: break-word;
- }
-
- &.small {
- height: 20px;
- .event-time {
- display: none;
- }
- .event-title {
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- }
- }
- &.middle {
- padding-top: 2px;
- .event-time,
- .event-title {
- text-overflow: ellipsis;
- overflow: hidden;
- white-space: nowrap;
- }
- }
- &.large {
- .event-time {
- margin-top: 13px;
- }
- }
- &.past {
- background-color: ${(props) =>
- isDarkColor(props.$style.background) && props.$style.background};
- &::before {
- background-color: ${(props) =>
- toHex(props.$style.text) === "#3C3C3C"
- ? "#8B8FA3"
- : isDarkColor(props.$style.text)
- ? lightenColor(props.$style.text, 0.3)
- : props.$style.text};
- }
- &::before,
- .event-title,
- .event-time {
- opacity: 0.35;
- }
- }
-`;
-
-export const FormWrapper = styled(Form)`
- .ant-form-item-label {
- width: 100px;
- text-align: left;
- line-height: 18px;
- label:not(.ant-form-item-required) {
- margin-left: 11px;
- }
- label span {
- ${UnderlineCss}
- }
- }
-`;
-
-export type EventType = {
- id?: string;
- label?: string;
- title?: string;
- start?: string;
- end?: string;
- allDay?: boolean;
- color?: string;
- groupId?: string;
- value?: string;
-};
-
-export enum ViewType {
- MONTH = "dayGridMonth",
- WEEK = "timeGridWeek",
- DAY = "timeGridDay",
- LIST = "listWeek",
- TIMEGRID = "timeGridDay",
-}
-
-
-export const DefaultWithPremiumViewOptions = [
- {
- label: trans("calendar.month"),
- value: "dayGridMonth",
- },
- {
- label: trans("calendar.week"),
- value: "timeGridWeek",
- },
- {
- label: trans("calendar.timeline"),
- value: "resourceTimeline",
- },
- {
- label: trans("calendar.day"),
- value: "timeGridDay",
- },
- {
- label: trans("calendar.list"),
- value: "listWeek",
- },
-] as const;
-
-export const DefaultWithFreeViewOptions = [
- {
- label: trans("calendar.month"),
- value: "dayGridMonth",
- },
- {
- label: trans("calendar.week"),
- value: "timeGridWeek",
- },
- {
- label: trans("calendar.day"),
- value: "timeGridDay",
- },
- {
- label: trans("calendar.list"),
- value: "listWeek",
- },
-] as const;
-
-export const FirstDayOptions = [
- {
- label: trans("calendar.monday"),
- value: "1",
- },
- {
- label: trans("calendar.tuesday"),
- value: "2",
- },
- {
- label: trans("calendar.wednesday"),
- value: "3",
- },
- {
- label: trans("calendar.thursday"),
- value: "4",
- },
- {
- label: trans("calendar.friday"),
- value: "5",
- },
- {
- label: trans("calendar.saturday"),
- value: "6",
- },
- {
- label: trans("calendar.sunday"),
- value: "0",
- },
-];
-
-export const defaultData = [
- {
- id: "1",
- title: "Coding",
- start: dayjs().hour(10).minute(0).second(0).format(DATE_TIME_FORMAT),
- end: dayjs().hour(12).minute(30).second(0).format(DATE_TIME_FORMAT),
- color: "#079968",
- },
- {
- id: "2",
- title: "Rest",
- start: dayjs().hour(24).format(DATE_FORMAT),
- end: dayjs().hour(48).format(DATE_FORMAT),
- allDay: true,
- },
-];
-
-export const buttonText = {
- today: trans("calendar.today"),
- month: trans("calendar.month"),
- week: trans("calendar.week"),
- timeline: trans("calendar.timeline"),
- day: trans("calendar.day"),
- list: trans("calendar.list"),
-};
-
-export const headerToolbar = {
- left: "title",
- right: "prev today next dayGridMonth,timeGridWeek,timeGridDay,listWeek",
-};
-
-const weekHeadContent = (info: DayHeaderContentArg) => {
- const text = info.text.split(" ");
- return {
- html: `
- ${text[0]}
- ${text[1]}
- `,
- };
-};
-
-const leftTimeContent = (info: SlotLabelContentArg) => {
- let isPast = false;
- if (info.view.type === ViewType.WEEK) {
- isPast = dayjs().isAfter(dayjs(dayjs().format("YYYY MM DD " + info.text)));
- } else if (info.view.type === ViewType.DAY) {
- isPast = dayjs().isAfter(
- dayjs(dayjs(info.view.activeStart).format("YYYY MM DD " + info.text))
- );
- }
- return {
- html: `${info.text}`,
- };
-};
-
-export const views = {
- [ViewType.WEEK]: {
- dayHeaderFormat: "ddd DD",
- dayHeaderContent: (info: DayHeaderContentArg) => weekHeadContent(info),
- slotLabelContent: (info: SlotLabelContentArg) => leftTimeContent(info),
- },
- [ViewType.DAY]: {
- slotLabelContent: (info: SlotLabelContentArg) => leftTimeContent(info),
- },
- [ViewType.LIST]: {
- listDayFormat: { weekday: "short" },
- },
-} as const;
-
-export const slotLabelFormat = [
- {
- hour: "2-digit",
- minute: "2-digit",
- },
-] as FormatterInput[];
-
-export const viewClassNames = (info: ViewContentArg) => {
- let className = "";
- if ([ViewType.WEEK, ViewType.DAY].includes(info.view.type as ViewType)) {
- if (dayjs().isAfter(info.view.activeEnd)) {
- className = "past";
- } else if (dayjs().isBefore(info.view.activeStart)) {
- className = "future";
- }
- }
- return className;
-};
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/controlButton.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/controlButton.tsx
new file mode 100644
index 000000000..1f7815a80
--- /dev/null
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/controlButton.tsx
@@ -0,0 +1,332 @@
+import { BoolCodeControl, StringControl } from "comps/controls/codeControl";
+import { dropdownControl } from "comps/controls/dropdownControl";
+import { ButtonEventHandlerControl } from "comps/controls/eventHandlerControl";
+import { IconControl } from "comps/controls/iconControl";
+import { CompNameContext, EditorContext, EditorState } from "comps/editorState";
+import { withDefault } from "comps/generators";
+import { UICompBuilder } from "comps/generators/uiCompBuilder";
+import _ from "lodash";
+import {
+ disabledPropertyView,
+ hiddenPropertyView,
+ loadingPropertyView,
+} from "comps/utils/propertyUtils";
+import {
+ CommonBlueLabel,
+ controlItem,
+ Dropdown,
+ Section,
+ sectionNames,
+} from "lowcoder-design";
+import { trans } from "i18n";
+import styled, { css } from "styled-components";
+
+import {
+ CommonNameConfig,
+ NameConfig,
+ withExposingConfigs,
+} from "../../generators/withExposing";
+import { IForm } from "../formComp/formDataConstants";
+import { SimpleNameComp } from "../simpleNameComp";
+import {
+ Button100,
+ ButtonStyleControl,
+} from "./videobuttonCompConstants";
+import { RefControl } from "comps/controls/refControl";
+import { AutoHeightControl } from "comps/controls/autoHeightControl";
+import {
+ heightCalculator,
+ widthCalculator,
+} from "comps/controls/styleControlConstants";
+import { useEffect, useRef, useState } from "react";
+import ReactResizeDetector from "react-resize-detector";
+
+import { useContext } from "react";
+
+const Container = styled.div<{ $style: any }>`
+ height: 100%;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ ${(props) => props.$style && getStyle(props.$style)}
+`;
+
+const getStyle = (style: any) => {
+ return css`
+ button {
+ border: 1px solid ${style.border};
+ border-radius: ${style.radius};
+ margin: ${style.margin};
+ padding: ${style.padding};
+ max-width: ${widthCalculator(style.margin)};
+ max-height: ${heightCalculator(style.margin)};
+ }
+ `;
+};
+
+const FormLabel = styled(CommonBlueLabel)`
+ font-size: 13px;
+ margin-right: 4px;
+`;
+
+const IconWrapper = styled.div<{ $style: any }>`
+ display: flex;
+
+ ${(props) => props.$style && getStyleIcon(props.$style)}
+`;
+
+function getStyleIcon(style: any) {
+ return css`
+ svg {
+ width: ${style.size} !important;
+ height: ${style.size} !important;
+ }
+ `;
+}
+
+function getFormOptions(editorState: EditorState) {
+ return editorState
+ .uiCompInfoList()
+ .filter((info) => info.type === "form")
+ .map((info) => ({
+ label: info.name,
+ value: info.name,
+ }));
+}
+
+function getForm(editorState: EditorState, formName: string) {
+ const comp = editorState?.getUICompByName(formName);
+ if (comp && comp.children.compType.getView() === "form") {
+ return comp.children.comp as unknown as IForm;
+ }
+}
+
+function getFormEventHandlerPropertyView(
+ editorState: EditorState,
+ formName: string
+) {
+ const form = getForm(editorState, formName);
+ if (!form) {
+ return undefined;
+ }
+ return (
+
+ {form.onEventPropertyView(
+ <>
+
+ editorState.setSelectedCompNames(
+ new Set([formName]),
+ "rightPanel"
+ )
+ }
+ >
+ {formName}
+
+ {trans("button.formButtonEvent")}
+ >
+ )}
+
+ );
+}
+
+class SelectFormControl extends SimpleNameComp {
+ override getPropertyView() {
+ const label = trans("button.formToSubmit");
+ return controlItem(
+ { filterText: label },
+
+ {(editorState) => (
+ <>
+ this.dispatchChangeValueAction(value)}
+ allowClear={true}
+ />
+ {getFormEventHandlerPropertyView(editorState, this.value)}
+ >
+ )}
+
+ );
+ }
+}
+
+const typeOptions = [
+ {
+ label: trans("button.default"),
+ value: "",
+ },
+ {
+ label: trans("button.submit"),
+ value: "submit",
+ },
+] as const;
+
+function isDefault(type?: string) {
+ return !type;
+}
+
+function submitForm(editorState: EditorState, formName: string) {
+ const form = getForm(editorState, formName);
+ if (form) {
+ form.submit();
+ }
+}
+
+const childrenMap = {
+ iconSize: withDefault(StringControl, "20px"),
+ type: dropdownControl(typeOptions, ""),
+ autoHeight: withDefault(AutoHeightControl, "fixed"),
+ aspectRatio: withDefault(StringControl, "1 / 1"),
+ onEvent: ButtonEventHandlerControl,
+ disabled: BoolCodeControl,
+ loading: BoolCodeControl,
+ form: SelectFormControl,
+ prefixIcon: IconControl,
+ style: ButtonStyleControl,
+ viewRef: RefControl,
+};
+
+let ButtonTmpComp = (function () {
+ return new UICompBuilder(childrenMap, (props) => {
+ const [width, setWidth] = useState(120);
+ const [height, setHeight] = useState(0);
+
+ const imgRef = useRef(null);
+ const conRef = useRef(null);
+ useEffect(() => {
+ if (height && width) {
+ onResize();
+ }
+ }, [height, width]);
+
+ const setStyle = (height: string, width: string) => {
+ const img = imgRef.current;
+
+ const imgDiv = img?.getElementsByTagName("button")[0];
+ img!.style.height = height;
+ img!.style.width = width;
+ imgDiv!.style.height = height;
+ imgDiv!.style.width = width;
+ };
+
+ const onResize = () => {
+ const img = imgRef.current;
+ const container = conRef.current;
+ if (
+ !img?.clientWidth ||
+ !img?.clientHeight ||
+ props.autoHeight ||
+ !width
+ ) {
+ return;
+ }
+
+ setStyle(container?.clientHeight + "px", container?.clientWidth + "px");
+ };
+
+ return (
+
+ {(editorState) => (
+
+
+
+
+ isDefault(props.type)
+ ? props.onEvent("click")
+ : submitForm(editorState, props.form)
+ }
+ >
+ {props.prefixIcon && (
+
+ {props.prefixIcon}
+
+ )}
+
+
+
+
+
+ )}
+
+ );
+ })
+ .setPropertyViewFn((children) => (
+ <>
+
+ {children.prefixIcon.propertyView({
+ label: trans("button.icon"),
+ })}
+
+
+
+ {(useContext(EditorContext).editorModeStatus === "logic" || useContext(EditorContext).editorModeStatus === "both") && (
+
+ {children.onEvent.getPropertyView()}
+ {disabledPropertyView(children)}
+ {hiddenPropertyView(children)}
+ {loadingPropertyView(children)}
+
+ )}
+
+ {(useContext(EditorContext).editorModeStatus === "layout" || useContext(EditorContext).editorModeStatus === "both") && (
+ <>
+ {children.autoHeight.getPropertyView()}
+ {children.iconSize.propertyView({
+ label: trans("button.iconSize"),
+ })}
+
+
+ {children.style.getPropertyView()}
+ {children.aspectRatio.propertyView({
+ label: trans("style.aspectRatio"),
+ })}
+ >
+ )}
+ >
+ ))
+ .build();
+})();
+ButtonTmpComp = class extends ButtonTmpComp {
+ override autoHeight(): boolean {
+ return this.children.autoHeight.getView();
+ }
+};
+export const ControlButton = withExposingConfigs(ButtonTmpComp, [
+ new NameConfig("loading", trans("button.loadingDesc")),
+ ...CommonNameConfig,
+]);
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControlerUtils.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControlerUtils.tsx
new file mode 100644
index 000000000..10e685faf
--- /dev/null
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControlerUtils.tsx
@@ -0,0 +1,37 @@
+import { CheckBox, controlItem, Switch, SwitchWrapper } from "lowcoder-design";
+import { ReactNode } from "react";
+import { ControlParams } from "comps/controls/controlParams";
+import { SimpleComp } from "lowcoder-core";
+
+export class BoolShareVideoControl extends SimpleComp {
+ readonly IGNORABLE_DEFAULT_VALUE = false;
+ protected getDefaultValue(): boolean {
+ return false;
+ }
+
+ getPropertyView(): ReactNode {
+ return (
+ this.dispatchChangeValueAction(x)}
+ />
+ );
+ }
+
+ propertyView(params: ControlParams & { type?: "switch" | "checkbox" }) {
+ return controlItem(
+ { filterText: params.label },
+
+ {params.type === "checkbox" ? (
+ this.dispatchChangeValueAction(x.target.checked)}
+ />
+ ) : (
+ this.getPropertyView()
+ )}
+
+ );
+ }
+}
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControllerComp.tsx
similarity index 88%
rename from client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
rename to client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControllerComp.tsx
index 6b4249daf..028926c29 100644
--- a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/agorameetingControllerComp.tsx
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControllerComp.tsx
@@ -30,17 +30,11 @@ import {
BackgroundColorContext,
ContainerCompBuilder,
closeEvent,
+ MeetingEventHandlerControl,
} from "lowcoder-sdk";
const EventOptions = [closeEvent] as const;
-import { Button } from "antd-mobile";
-import { trans, getCalendarLocale } from "../../i18n/comps";
-import {
- DefaultWithFreeViewOptions,
- DefaultWithPremiumViewOptions,
- FirstDayOptions,
-} from "./calendarConstants";
-import { default as CloseOutlined } from "@ant-design/icons/CloseOutlined";
+import { trans } from "../../i18n/comps";
const DrawerWrapper = styled.div`
// Shield the mouse events of the lower layer, the mask can be closed in the edit mode to prevent the lower layer from sliding
pointer-events: auto;
@@ -55,11 +49,9 @@ import AgoraRTC, {
} from "agora-rtc-sdk-ng";
import type { RtmChannel, RtmClient } from "agora-rtm-sdk";
-import { useCallback, useContext, useEffect, useState } from "react";
-// import { Drawer, changeChildAction } from "lowcoder-sdk/src";
+import { useCallback, useEffect, useState } from "react";
import { ResizeHandle } from "react-resizable";
import { v4 as uuidv4 } from "uuid";
-// import styled from "styled-components/dist/constructors/styled";
const DEFAULT_SIZE = 378;
const DEFAULT_PADDING = 16;
@@ -227,6 +219,7 @@ const meetingControllerChildren = {
meetingActive: withDefault(BooleanStateControl, "false"),
audioControl: withDefault(BooleanStateControl, "false"),
videoControl: withDefault(BooleanStateControl, "true"),
+ onMeetingEvent: MeetingEventHandlerControl,
endCall: withDefault(BooleanStateControl, "false"),
sharing: withDefault(BooleanStateControl, "false"),
appId: withDefault(StringControl, trans("meeting.appid")),
@@ -251,8 +244,8 @@ let MTComp = (function () {
(props: any, dispatch: any) => {
const isTopBom = ["top", "bottom"].includes(props.placement);
const { items, ...otherContainerProps } = props.container;
- const userViewMode = useUserViewMode();
- const resizable = !userViewMode && (!isTopBom || !props.autoHeight);
+ // const userViewMode = useUserViewMode();
+ // const resizable = !userViewMode && (!isTopBom || !props.autoHeight);
const onResizeStop = useCallback(
(
e: React.SyntheticEvent,
@@ -492,7 +485,7 @@ let MTComp = (function () {
- sfsd
{/* {
props.visible.onChange(false);
@@ -558,67 +550,68 @@ let MTComp = (function () {
);
}
)
- .setPropertyViewFn((children: any) => (
+ .setPropertyViewFn((children:any) => (
<>
- {/* {(useContext(EditorContext).editorModeStatus === "logic" ||
- useContext(EditorContext).editorModeStatus === "both") && (
- <>
-
- {children.appId.propertyView({
- label: trans("meeting.appid"),
- })}
- {children.meetingName.propertyView({
- label: trans("meeting.meetingName"),
- })}
- {children.localUserID.propertyView({
- label: trans("meeting.localUserID"),
- })}
- {children.rtmToken.propertyView({
- label: trans("meeting.rtmToken"),
- })}
- {children.rtcToken.propertyView({
- label: trans("meeting.rtcToken"),
- })}
-
-
- {children.onEvent.getPropertyView()}
-
- >
- )} */}
-
- {/* {(useContext(EditorContext).editorModeStatus === "layout" ||
- useContext(EditorContext).editorModeStatus === "both") && ( */}
- {/* <> */}
-
- {children.placement.propertyView({
- label: trans("meeting.placement"),
- radioButton: true,
+ {/* {(EditorContext.editorModeStatus === "logic" ||
+ EditorContext.editorModeStatus === "both") && (
+ <> */}
+
+ {children.appId.propertyView({
+ label: trans("meeting.appid"),
+ })}
+ {children.meetingName.propertyView({
+ label: trans("meeting.meetingName"),
})}
- {["top", "bottom"].includes(children.placement.getView())
- ? children.autoHeight.getPropertyView()
- : children.width.propertyView({
- label: trans("meeting.width"),
- tooltip: trans("meeting.widthTooltip"),
- placeholder: DEFAULT_SIZE + "",
- })}
- {!children.autoHeight.getView() &&
- ["top", "bottom"].includes(children.placement.getView()) &&
- children.height.propertyView({
- label: trans("meeting.height"),
- tooltip: trans("meeting.heightTooltip"),
- placeholder: DEFAULT_SIZE + "",
- })}
- {children.maskClosable.propertyView({
- label: trans("meeting.maskClosable"),
+ {children.localUserID.propertyView({
+ label: trans("meeting.localUserID"),
})}
- {children.showMask.propertyView({
- label: trans("meeting.showMask"),
+ {children.rtmToken.propertyView({
+ label: trans("meeting.rtmToken"),
+ })}
+ {children.rtcToken.propertyView({
+ label: trans("meeting.rtcToken"),
})}
-
-
- {children.style.getPropertyView()}
+
+ {children.onEvent.getPropertyView()}
+ {children.onMeetingEvent.getPropertyView()}
+ {/* >
+ )} */}
+
+ {/* {(EditorContext.editorModeStatus === "layout" ||
+ EditorContext.editorModeStatus === "both") && (
+ <> */}
+ {/*
+ {children.placement.propertyView({
+ label: trans("meeting.placement"),
+ radioButton: true,
+ })}
+ {["top", "bottom"].includes(children.placement.getView())
+ ? children.autoHeight.getPropertyView()
+ : children.width.propertyView({
+ label: trans("meeting.width"),
+ tooltip: trans("meeting.widthTooltip"),
+ placeholder: DEFAULT_SIZE + "",
+ })}
+ {!children.autoHeight.getView() &&
+ ["top", "bottom"].includes(children.placement.getView()) &&
+ children.height.propertyView({
+ label: trans("meeting.height"),
+ tooltip: trans("meeting.heightTooltip"),
+ placeholder: DEFAULT_SIZE + "",
+ })}
+ {children.maskClosable.propertyView({
+ label: trans("meeting.maskClosable"),
+ })}
+ {children.showMask.propertyView({
+ label: trans("meeting.showMask"),
+ })}
+
+
+
+ {children.style.getPropertyView()}
+ */}
{/* > */}
{/* )} */}
>
@@ -850,7 +843,7 @@ MTComp = withMethodExposing(MTComp, [
// },
]);
-export const AgoraMeetingControllerComp = withExposingConfigs(MTComp, [
+export const MeetingControllerComp = withExposingConfigs(MTComp, [
// new NameConfig("visible", trans("export.visibleDesc")),
new NameConfig("appId", trans("meeting.appid")),
new NameConfig("localUser", trans("meeting.host")),
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx
new file mode 100644
index 000000000..6ebad7876
--- /dev/null
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoMeetingStreamComp.tsx
@@ -0,0 +1,249 @@
+import {
+ NameConfig,
+ withDefault,
+ withExposingConfigs,
+ StringControl,
+ Section,
+ sectionNames,
+ AutoHeightControl,
+ EditorContext,
+ styled,
+ MeetingEventHandlerControl,
+ BoolCodeControl,
+ RefControl,
+ stringExposingStateControl,
+ StringStateControl,
+ UICompBuilder,
+ CommonNameConfig,
+} from "lowcoder-sdk";
+import { ButtonStyleControl } from "./videobuttonCompConstants";
+import { trans } from "../../i18n/comps";
+
+import { client } from "./meetingControllerComp";
+import type { IAgoraRTCRemoteUser } from "agora-rtc-sdk-ng";
+import { useEffect, useRef, useState } from "react";
+import ReactResizeDetector from "react-resize-detector";
+
+const VideoContainer = styled.video`
+ height: 100%;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+`;
+
+const meetingStreamChildren = {
+ autoHeight: withDefault(AutoHeightControl, "auto"),
+ profilePadding: withDefault(StringControl, "0px"),
+ profileBorderRadius: withDefault(StringControl, "0px"),
+ videoAspectRatio: withDefault(StringControl, "1 / 1"),
+ onEvent: MeetingEventHandlerControl,
+ disabled: BoolCodeControl,
+ loading: BoolCodeControl,
+ style: ButtonStyleControl,
+ viewRef: RefControl,
+ userId: withDefault(stringExposingStateControl(""), "{{meeting1.localUser}}"),
+ profileImageUrl: withDefault(
+ StringStateControl,
+ "https://api.dicebear.com/7.x/fun-emoji/svg?seed=Peanut&radius=50&backgroundColor=transparent&randomizeIds=true&eyes=wink,sleepClose"
+ ),
+ noVideoText: stringExposingStateControl(trans("meeting.noVideo")),
+};
+
+let VideoCompBuilder = (function () {
+ return new UICompBuilder(meetingStreamChildren, (props: any) => {
+ const videoRef = useRef(null);
+ const conRef = useRef(null);
+ const [userId, setUserId] = useState();
+ const [userName, setUsername] = useState("");
+ const [showVideo, setVideo] = useState(true);
+
+ useEffect(() => {
+ if (props.userId.value !== "") {
+ let userData = JSON.parse(props.userId?.value);
+ client.on(
+ "user-published",
+ async (user: IAgoraRTCRemoteUser, mediaType: "video" | "audio") => {
+ if (mediaType === "video") {
+ const remoteTrack = await client.subscribe(user, mediaType);
+ let userId = user.uid + "";
+ if (
+ user.hasVideo &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ props.onEvent("videoOn");
+ }
+ const element = document.getElementById(userId);
+
+ if (element) {
+ remoteTrack.play(userId);
+ }
+ }
+ if (mediaType === "audio") {
+ const remoteTrack = await client.subscribe(user, mediaType);
+ if (
+ user.hasAudio &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ userData.audiostatus = user.hasVideo;
+
+ props.onEvent("audioUnmuted");
+ }
+ remoteTrack.play();
+ }
+ }
+ );
+ client.on(
+ "user-unpublished",
+ (user: IAgoraRTCRemoteUser, mediaType: "video" | "audio") => {
+ // console.log("user-unpublished");
+
+ if (mediaType === "audio") {
+ if (
+ !user.hasAudio &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ userData.audiostatus = user.hasVideo;
+ props.onEvent("audioMuted");
+ }
+ }
+ if (mediaType === "video") {
+ if (videoRef.current && videoRef.current?.id === user.uid + "") {
+ videoRef.current.srcObject = null;
+ }
+ if (
+ !user.hasVideo &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ props.onEvent("videoOff");
+ }
+ }
+ }
+ );
+
+ setUserId(userData.user);
+ setUsername(userData.userName);
+ setVideo(userData.streamingVideo);
+ }
+ }, [props.userId.value]);
+
+ return (
+
+ {(editorState: any) => (
+
+
+ {userId ? (
+
props.onEvent("videoClicked")}
+ ref={videoRef}
+ style={{
+ display: `${showVideo ? "flex" : "none"}`,
+ aspectRatio: props.videoAspectRatio,
+ borderRadius: props.style.radius,
+ width: "auto",
+ }}
+ id={userId}
+ >
+ ) : (
+ <>>
+ )}
+
+

+
{userName ?? ""}
+
+
+
+ )}
+
+ );
+ })
+ .setPropertyViewFn((children: any) => (
+ <>
+
+ {children.userId.propertyView({ label: trans("meeting.videoId") })}
+
+ {children.profileImageUrl.propertyView({
+ label: trans("meeting.profileImageUrl"),
+ placeholder:
+ "https://api.dicebear.com/7.x/fun-emoji/svg?seed=Peanut&radius=50&backgroundColor=transparent&randomizeIds=true&eyes=wink,sleepClose",
+ })}
+
+
+ {/* {(useContext(EditorContext).editorModeStatus === "logic" ||
+ useContext(EditorContext).editorModeStatus === "both") && (
+
+ {children.onEvent.getPropertyView()}
+ {hiddenPropertyView(children)}
+
+ )}
+
+ {(useContext(EditorContext).editorModeStatus === "layout" ||
+ useContext(EditorContext).editorModeStatus === "both") && (
+ <> */}
+
+ {children.autoHeight.getPropertyView()}
+
+
+ {children.profilePadding.propertyView({
+ label: "Profile Image Padding",
+ })}
+ {children.profileBorderRadius.propertyView({
+ label: "Profile Image Border Radius",
+ })}
+ {children.videoAspectRatio.propertyView({
+ label: "Video Aspect Ratio",
+ })}
+ {children.style.getPropertyView()}
+
+ {/* > */}
+ {/* )} */}
+ >
+ ))
+ .build();
+})();
+
+VideoCompBuilder = class extends VideoCompBuilder {
+ autoHeight(): boolean {
+ return false;
+ }
+};
+
+export const VideoMeetingStreamComp = withExposingConfigs(VideoCompBuilder, [
+ // new NameConfig("loading", trans("meeting.loadingDesc")),
+ new NameConfig("profileImageUrl", trans("meeting.profileImageUrl")),
+
+ ...CommonNameConfig,
+]);
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx
new file mode 100644
index 000000000..06eab43ae
--- /dev/null
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videoSharingStreamComp.tsx
@@ -0,0 +1,238 @@
+import {
+ NameConfig,
+ withDefault,
+ withExposingConfigs,
+ StringControl,
+ Section,
+ sectionNames,
+ AutoHeightControl,
+ EditorContext,
+ styled,
+ MeetingEventHandlerControl,
+ BoolCodeControl,
+ RefControl,
+ stringExposingStateControl,
+ StringStateControl,
+ UICompBuilder,
+ CommonNameConfig,
+ hiddenPropertyView,
+ // ButtonStyleControl,
+} from "lowcoder-sdk";
+import { useEffect, useRef, useState } from "react";
+import { client } from "./meetingControllerComp";
+import type { IAgoraRTCRemoteUser } from "agora-rtc-sdk-ng";
+import { trans } from "../../i18n/comps";
+import { useContext } from "react";
+import ReactResizeDetector from "react-resize-detector";
+
+const VideoContainer = styled.video`
+ height: 100%;
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+`;
+
+const sharingStreamChildren = {
+ autoHeight: withDefault(AutoHeightControl, "fixed"),
+ profilePadding: withDefault(StringControl, "0px"),
+ profileBorderRadius: withDefault(StringControl, "0px"),
+ videoAspectRatio: withDefault(StringControl, ""),
+ onEvent: MeetingEventHandlerControl,
+ disabled: BoolCodeControl,
+ loading: BoolCodeControl,
+ // style: ButtonStyleControl,
+ viewRef: RefControl,
+ userId: withDefault(stringExposingStateControl(""), "{{meeting1.localUser}}"),
+ noVideoText: stringExposingStateControl(trans("meeting.noVideo")),
+};
+
+let SharingCompBuilder = (function () {
+ return new UICompBuilder(sharingStreamChildren, (props: any) => {
+ const videoRef = useRef(null);
+ const conRef = useRef(null);
+ const [userId, setUserId] = useState();
+ const [userName, setUsername] = useState("");
+ const [showVideoSharing, setVideoSharing] = useState(true);
+
+ useEffect(() => {
+ if (props.userId.value !== "") {
+ let userData = JSON.parse(props.userId?.value);
+ client.on(
+ "user-published",
+ async (user: IAgoraRTCRemoteUser, mediaType: "video" | "audio") => {
+ if (mediaType === "video") {
+ const remoteTrack = await client.subscribe(user, mediaType);
+ let userId = user.uid + "";
+ if (
+ user.hasVideo &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ props.onEvent("videoOn");
+ }
+ const element = document.getElementById(userId);
+
+ if (element) {
+ remoteTrack.play(userId);
+ }
+ }
+ if (mediaType === "audio") {
+ const remoteTrack = await client.subscribe(user, mediaType);
+ if (
+ user.hasAudio &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ userData.audiostatus = user.hasVideo;
+
+ props.onEvent("audioUnmuted");
+ }
+ remoteTrack.play();
+ }
+ }
+ );
+ client.on(
+ "user-unpublished",
+ (user: IAgoraRTCRemoteUser, mediaType: "video" | "audio") => {
+ // console.log("user-unpublished");
+
+ if (mediaType === "audio") {
+ if (
+ !user.hasAudio &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ userData.audiostatus = user.hasVideo;
+ props.onEvent("audioMuted");
+ }
+ }
+ if (mediaType === "video") {
+ if (videoRef.current && videoRef.current?.id === user.uid + "") {
+ videoRef.current.srcObject = null;
+ }
+ if (
+ !user.hasVideo &&
+ user.uid + "" !== userData.user &&
+ userData.user !== ""
+ ) {
+ props.onEvent("videoOff");
+ }
+ }
+ }
+ );
+
+ setUserId(userData.user);
+ setUsername(userData.userName);
+ setVideoSharing(userData.streamingSharing);
+ }
+ }, [props.userId.value]);
+
+ return (
+
+ {(editorState: any) => (
+
+
+ {userId ? (
+
props.onEvent("videoClicked")}
+ ref={videoRef}
+ style={{
+ display: `${showVideoSharing ? "flex" : "none"}`,
+ aspectRatio: props.videoAspectRatio,
+ borderRadius: props.style.radius,
+ width: "auto",
+ }}
+ id="share-screen"
+ >
+ ) : (
+ <>>
+ )}
+ {/*
+

+
{userName ?? ""}
+
*/}
+
+
+ )}
+
+ );
+ })
+ .setPropertyViewFn((children: any) => (
+ <>
+
+ {children.userId.propertyView({ label: trans("meeting.videoId") })}
+
+
+ {/* {(useContext(EditorContext).editorModeStatus === "logic" ||
+ useContext(EditorContext).editorModeStatus === "both") && (
+
+ {children.onEvent.getPropertyView()}
+ {hiddenPropertyView(children)}
+
+ )} */}
+
+ {/* {(useContext(EditorContext).editorModeStatus === "layout" ||
+ useContext(EditorContext).editorModeStatus === "both") && (
+ <> */}
+
+ {children.autoHeight.getPropertyView()}
+
+
+ {children.profilePadding.propertyView({
+ label: "Profile Image Padding",
+ })}
+ {children.profileBorderRadius.propertyView({
+ label: "Profile Image Border Radius",
+ })}
+ {children.videoAspectRatio.propertyView({
+ label: "Video Aspect Ratio",
+ })}
+ {children.style?.getPropertyView()}
+
+ {/* > */}
+ {/* )} */}
+ >
+ ))
+ .build();
+})();
+
+SharingCompBuilder = class extends SharingCompBuilder {
+ autoHeight(): boolean {
+ return false;
+ }
+};
+
+export const VideoSharingStreamComp = withExposingConfigs(SharingCompBuilder, [
+ // new NameConfig("loading", trans("meeting.loadingDesc")),
+ ...CommonNameConfig,
+]);
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videobuttonCompConstants.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videobuttonCompConstants.tsx
new file mode 100644
index 000000000..134edcf98
--- /dev/null
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/videobuttonCompConstants.tsx
@@ -0,0 +1,111 @@
+import { default as Button } from "antd/es/button";
+import {
+ styleControl,
+ ButtonStyleType,
+ ButtonStyle,
+ migrateOldData,
+ refMethods,
+ blurMethod,
+ clickMethod,
+ focusWithOptions,
+ genActiveColor,
+ genHoverColor,
+} from "lowcoder-sdk";
+import styled, { css } from "styled-components";
+// import { genActiveColor, genHoverColor } from "lowcoder-design";
+
+export function getButtonStyle(buttonStyle: any) {
+ const hoverColor = genHoverColor(buttonStyle.background);
+ const activeColor = genActiveColor(buttonStyle.background);
+ return css`
+ &&& {
+ border-radius: ${buttonStyle.radius};
+ margin: ${buttonStyle.margin};
+ padding: ${buttonStyle.padding};
+ &:not(:disabled) {
+ // click animation color
+ --antd-wave-shadow-color: ${buttonStyle.border};
+ border-color: ${buttonStyle.border};
+ color: ${buttonStyle.text};
+ background-color: ${buttonStyle.background};
+ border-radius: ${buttonStyle.radius};
+ margin: ${buttonStyle.margin};
+ padding: ${buttonStyle.padding};
+
+ &:hover,
+ &:focus {
+ color: ${buttonStyle.text};
+ background-color: ${hoverColor};
+ border-color: ${buttonStyle.border === buttonStyle.background
+ ? hoverColor
+ : buttonStyle.border};
+ }
+
+ &:active {
+ color: ${buttonStyle.text};
+ background-color: ${activeColor};
+ border-color: ${buttonStyle.border === buttonStyle.background
+ ? activeColor
+ : buttonStyle.border};
+ }
+ }
+ }
+ `;
+}
+
+export const Button100 = styled(Button)<{ $buttonStyle?: any }>`
+ ${(props) => props.$buttonStyle && getButtonStyle(props.$buttonStyle)}
+ width: 100%;
+ height: auto;
+ display: inline-flex;
+ justify-content: center;
+ align-items: center;
+ overflow: hidden;
+ span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ gap: 6px;
+`;
+
+export const ButtonCompWrapper = styled.div<{ disabled: boolean }>`
+ // The button component is disabled but can respond to drag & select events
+ ${(props) =>
+ props.disabled &&
+ `
+ cursor: not-allowed;
+ button:disabled {
+ pointer-events: none;
+ }
+ `};
+`;
+
+/**
+ * Compatible with old data 2022-08-05
+ */
+function fixOldData(oldData: any) {
+ if (
+ oldData &&
+ (oldData.hasOwnProperty("backgroundColor") ||
+ oldData.hasOwnProperty("borderColor") ||
+ oldData.hasOwnProperty("color"))
+ ) {
+ return {
+ background: oldData.backgroundColor,
+ border: oldData.borderColor,
+ text: oldData.color,
+ };
+ }
+ return oldData;
+}
+const ButtonTmpStyleControl = styleControl(ButtonStyle);
+export const ButtonStyleControl = migrateOldData(
+ ButtonTmpStyleControl,
+ fixOldData
+);
+
+// export const buttonRefMethods = refMethods([
+// focusWithOptions,
+// blurMethod,
+// clickMethod,
+// ]);
diff --git a/client/packages/lowcoder-comps/src/index.ts b/client/packages/lowcoder-comps/src/index.ts
index 5fbe6a340..9d8097d32 100644
--- a/client/packages/lowcoder-comps/src/index.ts
+++ b/client/packages/lowcoder-comps/src/index.ts
@@ -2,12 +2,15 @@ import { ChartCompWithDefault } from "./comps/chartComp/chartComp";
import { ImageEditorComp } from "./comps/imageEditorComp/index";
import { CalendarComp } from "./comps/calendarComp/calendarComp";
import { MermaidComp } from "comps/mermaidComp";
-import { AgoraMeetingControllerComp } from "comps/agoraMeetingComp/agorameetingControllerComp";
-
+import { MeetingControllerComp } from "comps/agoraMeetingComp/meetingControllerComp";
+import { VideoMeetingStreamComp } from "comps/agoraMeetingComp/videoMeetingStreamComp";
+import { VideoSharingStreamComp } from "comps/agoraMeetingComp/videoSharingStreamComp";
export default {
chart: ChartCompWithDefault,
imageEditor: ImageEditorComp,
calendar: CalendarComp,
mermaid: MermaidComp,
- agoraMeetingComp: AgoraMeetingControllerComp,
+ meetingController: MeetingControllerComp,
+ meetingStream: VideoMeetingStreamComp,
+ meetingSharing: VideoSharingStreamComp,
};
From b5653182a2ebe1dbb0bcab959f5a65507b9f1416 Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Mon, 15 Apr 2024 16:01:43 +0300
Subject: [PATCH 07/16] exported missing comps to lowcoder-sdk
---
client/packages/lowcoder/src/index.sdk.ts | 9 +++++----
client/yarn.lock | 6 +++---
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/client/packages/lowcoder/src/index.sdk.ts b/client/packages/lowcoder/src/index.sdk.ts
index ee6862166..99f18331e 100644
--- a/client/packages/lowcoder/src/index.sdk.ts
+++ b/client/packages/lowcoder/src/index.sdk.ts
@@ -6,10 +6,6 @@ import * as styledNameExports from "styled-components";
import styledDefault from "styled-components";
export * from "comps/comps/containerBase/containerCompBuilder";
export * from "comps/utils/backgroundColorContext";
-export {
- closeEvent,
- eventHandlerControl,
-} from "comps/controls/eventHandlerControl";
export { getData } from "comps/comps/listViewComp/listViewUtils";
export {
gridItemCompToGridItems,
@@ -17,6 +13,11 @@ export {
} from "comps/comps/containerComp/containerView";
export { Layers } from "constants/Layers";
+export * from "comps/controls/eventHandlerControl";
+export * from "comps/utils/methodUtils";
+
+export { useUserViewMode } from "util/hooks";
+export * from "comps/editorState";
export * from "redux/store/store";
// util
diff --git a/client/yarn.lock b/client/yarn.lock
index e823ab30f..2aa94cc81 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -13590,14 +13590,14 @@ __metadata:
linkType: soft
"lowcoder-sdk@file:/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk::locator=lowcoder-comps%40workspace%3Apackages%2Flowcoder-comps":
- version: 2.4.0-beta
- resolution: "lowcoder-sdk@file:/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk#/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk::hash=bd18d9&locator=lowcoder-comps%40workspace%3Apackages%2Flowcoder-comps"
+ version: 2.4.0-beta-4
+ resolution: "lowcoder-sdk@file:/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk#/Users/la/Desktop/lowcoder-1/client/packages/lowcoder-sdk::hash=8f69ed&locator=lowcoder-comps%40workspace%3Apackages%2Flowcoder-comps"
dependencies:
prettier: ^3.1.1
peerDependencies:
react: ">=18"
react-dom: ">=18"
- checksum: 89abb711cf6d46857c7e9375dcc20e2b7fbffde89fd43c3a7161109c61adbbf0d530ff8c2ebb750b56954ba701061117b82c21f119ee2abd2badfec96e1713f7
+ checksum: 53389cc347577922de953c5eb86083e7c2942117a241aa589776dd260d27564fc6fec930675cdf4a735cbf15eb2bf5c197e06354be80fa0cb9e52bb32453c392
languageName: node
linkType: hard
From acfa2a158663b5cd6b8c9921350337f17277e1eb Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Mon, 15 Apr 2024 17:09:53 +0300
Subject: [PATCH 08/16] fixed lowcoder-comps agora loading
---
client/packages/lowcoder/package.json | 3 -
.../src/comps/comps/remoteComp/loaders.tsx | 4 +-
.../src/comps/hooks/agoraFunctions.tsx | 144 -------
client/packages/lowcoder/src/comps/index.tsx | 385 ++++++++++--------
4 files changed, 207 insertions(+), 329 deletions(-)
delete mode 100644 client/packages/lowcoder/src/comps/hooks/agoraFunctions.tsx
diff --git a/client/packages/lowcoder/package.json b/client/packages/lowcoder/package.json
index e9e2f5bc2..7d39538c1 100644
--- a/client/packages/lowcoder/package.json
+++ b/client/packages/lowcoder/package.json
@@ -36,9 +36,6 @@
"@types/react-signature-canvas": "^1.0.2",
"@types/react-test-renderer": "^18.0.0",
"@types/react-virtualized": "^9.21.21",
- "agora-access-token": "^2.0.4",
- "agora-rtc-sdk-ng": "^4.20.2",
- "agora-rtm-sdk": "^1.5.1",
"antd": "5.13.2",
"axios": "^1.6.2",
"buffer": "^6.0.3",
diff --git a/client/packages/lowcoder/src/comps/comps/remoteComp/loaders.tsx b/client/packages/lowcoder/src/comps/comps/remoteComp/loaders.tsx
index 61140cf1b..0f2389f45 100644
--- a/client/packages/lowcoder/src/comps/comps/remoteComp/loaders.tsx
+++ b/client/packages/lowcoder/src/comps/comps/remoteComp/loaders.tsx
@@ -15,8 +15,8 @@ async function npmLoader(
const localPackageVersion = remoteInfo.packageVersion || "latest";
const { packageName, packageVersion, compName } = remoteInfo;
- const entry = `${NPM_PLUGIN_ASSETS_BASE_URL}/${packageName}@${localPackageVersion}/index.js`;
- // const entry = `../../../../../public/package/index.js`;
+ // const entry = `${NPM_PLUGIN_ASSETS_BASE_URL}/${packageName}@${localPackageVersion}/index.js`;
+ const entry = `../../../../../public/package/index.js`;
// console.log("Entry", entry);
try {
const module = await import(
diff --git a/client/packages/lowcoder/src/comps/hooks/agoraFunctions.tsx b/client/packages/lowcoder/src/comps/hooks/agoraFunctions.tsx
deleted file mode 100644
index 159ee0547..000000000
--- a/client/packages/lowcoder/src/comps/hooks/agoraFunctions.tsx
+++ /dev/null
@@ -1,144 +0,0 @@
-import { useEffect, useState } from "react";
-import AgoraRTC, {
- type IAgoraRTCClient,
- type IAgoraRTCRemoteUser,
- type ICameraVideoTrack,
- type IMicrophoneAudioTrack,
-} from "agora-rtc-sdk-ng"; // Update the import with correct types
-import { v4 as uuidv4 } from "uuid";
-
-const useAgora = () => {
- const [client, setClient] = useState(null);
- const [audioTrack, setAudioTrack] = useState(
- null
- );
- const [videoTrack, setVideoTrack] = useState(null);
- const [isJoined, setIsJoined] = useState(false);
- const [videoHeight, setHeight] = useState(200);
- const [videoWidth, setWidth] = useState(200);
-
- const initializeAgora = () => {
- const agoraClient = AgoraRTC.createClient({ mode: "rtc", codec: "vp8" });
- setClient(agoraClient);
- };
-
- const turnOnCamera = async (flag: any) => {
- if (videoTrack) {
- return videoTrack.setEnabled(flag);
- }
- const newVideoTrack = await AgoraRTC.createCameraVideoTrack();
- newVideoTrack.play("camera-video");
- setVideoTrack(newVideoTrack);
- };
-
- const turnOnMicrophone = async (flag: any) => {
- if (audioTrack) {
- return audioTrack.setEnabled(flag);
- }
- const newAudioTrack = await AgoraRTC.createMicrophoneAudioTrack();
- newAudioTrack.play();
- setAudioTrack(newAudioTrack);
- };
-
- const leaveChannel = async () => {
- if (isJoined) {
- if (!client) {
- // console.error("Agora client is not initialized");
- return;
- }
-
- if (!client.localTracks.length) {
- // console.error("No local tracks to unpublish");
- return;
- }
-
- if (videoTrack) {
- await turnOnCamera(false);
- await client.unpublish(videoTrack);
- videoTrack.stop();
- setVideoTrack(null);
- }
-
- if (audioTrack) {
- await turnOnMicrophone(false);
- await client.unpublish(audioTrack);
- audioTrack.stop();
- setAudioTrack(null);
- }
-
- await client.leave();
- setIsJoined(false);
- }
- };
-
- const joinChannel = async (appId: any, channel: any, token: any) => {
- if (!channel) {
- channel = "react-room";
- }
-
- if (isJoined) {
- await leaveChannel();
- }
-
- client?.on("user-published", onUserPublish);
-
- await client?.join(appId, channel, token || null, uuidv4());
- setIsJoined(true);
- };
-
- const publishVideo = async (appId: any, channel: any) => {
- await turnOnCamera(true);
-
- if (!isJoined) {
- await joinChannel(appId, channel, null);
- }
-
- await client?.publish(videoTrack!);
-
- const mediaStreamTrack = videoTrack?.getMediaStreamTrack();
-
- if (mediaStreamTrack) {
- const videoSettings = mediaStreamTrack.getSettings();
- const videoWidth = videoSettings.width;
- const videoHeight = videoSettings.height;
- setWidth(videoWidth!);
- setHeight(videoHeight!);
- // console.log(`Video width: ${videoWidth}px, height: ${videoHeight}px`);
- } else {
- // console.error("Media stream track not found");
- }
- };
-
- const onUserPublish = async (
- user: IAgoraRTCRemoteUser,
- mediaType: string
- ) => {
- if (mediaType === "video") {
- const remoteTrack = await client?.subscribe(user, mediaType);
- remoteTrack?.play("remote-video");
- }
- if (mediaType === "audio") {
- const remoteTrack = await client?.subscribe(user, mediaType);
- remoteTrack?.play();
- }
- };
-
- return {
- client,
- audioTrack,
- videoTrack,
- isJoined,
- turnOnCamera,
- turnOnMicrophone,
- leaveChannel,
- joinChannel,
- publishVideo,
- initializeAgora,
- videoWidth,
- videoHeight,
- setHeight,
- setWidth,
- };
-};
-
-export default useAgora;
diff --git a/client/packages/lowcoder/src/comps/index.tsx b/client/packages/lowcoder/src/comps/index.tsx
index cbb6ff234..eb3e8eff4 100644
--- a/client/packages/lowcoder/src/comps/index.tsx
+++ b/client/packages/lowcoder/src/comps/index.tsx
@@ -6,10 +6,16 @@ import { ModalComp } from "comps/hooks/modalComp";
import { ButtonComp } from "./comps/buttonComp/buttonComp";
import { DropdownComp } from "./comps/buttonComp/dropdownComp";
import { LinkComp } from "./comps/buttonComp/linkComp";
-import { ContainerComp, defaultContainerData } from "./comps/containerComp/containerComp";
+import {
+ ContainerComp,
+ defaultContainerData,
+} from "./comps/containerComp/containerComp";
import { defaultCollapsibleContainerData } from "./comps/containerComp/collapsibleContainerComp";
import { ContainerComp as FloatTextContainerComp } from "./comps/containerComp/textContainerComp";
-import { PageLayoutComp, defaultPageLayoutData } from "./comps/containerComp/pageLayoutComp";
+import {
+ PageLayoutComp,
+ defaultPageLayoutData,
+} from "./comps/containerComp/pageLayoutComp";
import { CustomComp } from "./comps/customComp/customComp";
import { DatePickerComp, DateRangeComp } from "./comps/dateComp/dateComp";
import { DividerComp } from "./comps/dividerComp";
@@ -41,7 +47,12 @@ import { TextAreaComp } from "./comps/textInputComp/textAreaComp";
import { TimePickerComp, TimeRangeComp } from "./comps/dateComp/timeComp";
import { defaultFormData, FormComp } from "./comps/formComp/formComp";
import { IFrameComp } from "./comps/iframeComp";
-import { defaultGridData, defaultListViewData, GridComp, ListViewComp,} from "./comps/listViewComp";
+import {
+ defaultGridData,
+ defaultListViewData,
+ GridComp,
+ ListViewComp,
+} from "./comps/listViewComp";
import { ModuleComp } from "./comps/moduleComp/moduleComp";
import { NavComp } from "./comps/navComp/navComp";
import { TableComp } from "./comps/tableComp";
@@ -52,7 +63,11 @@ import { TreeComp } from "./comps/treeComp/treeComp";
import { TreeSelectComp } from "./comps/treeComp/treeSelectComp";
import { trans } from "i18n";
import { remoteComp } from "./comps/remoteComp/remoteComp";
-import { registerComp, type UICompManifest, type UICompType } from "./uiCompRegistry";
+import {
+ registerComp,
+ type UICompManifest,
+ type UICompType,
+} from "./uiCompRegistry";
import { AudioComp } from "./comps/mediaComp/audioComp";
import { VideoComp } from "./comps/mediaComp/videoComp";
import { DrawerComp } from "./hooks/drawerComp";
@@ -66,12 +81,12 @@ import { TimeLineComp } from "./comps/timelineComp/timelineComp";
import { CommentComp } from "./comps/commentComp/commentComp";
import { MentionComp } from "./comps/textInputComp/mentionComp";
import { AutoCompleteComp } from "./comps/autoCompleteComp/autoCompleteComp";
-import { JsonLottieComp } from "./comps/jsonComp/jsonLottieComp";
+import { JsonLottieComp } from "./comps/jsonComp/jsonLottieComp";
import { ResponsiveLayoutComp } from "./comps/responsiveLayout";
import { VideoMeetingStreamComp } from "./comps/meetingComp/videoMeetingStreamComp";
import { ControlButton } from "./comps/meetingComp/controlButton";
import { VideoMeetingControllerComp } from "./comps/meetingComp/videoMeetingControllerComp";
-import { VideoSharingStreamComp } from "./comps/meetingComp/videoSharingStreamComp";
+// import { VideoSharingStreamComp } from "./comps/meetingComp/videoSharingStreamComp";
import { IconComp } from "./comps/iconComp";
import {
@@ -154,7 +169,6 @@ const builtInRemoteComps: Omit = {
};
export var uiCompMap: Registry = {
-
// Dashboards
chart: {
@@ -191,8 +205,8 @@ export var uiCompMap: Registry = {
icon: TimeLineIcon,
keywords: trans("uiComp.timelineCompKeywords"),
lazyLoad: true,
- compName: 'TimeLineComp',
- compPath: 'comps/timelineComp/timelineComp',
+ compName: "TimeLineComp",
+ compPath: "comps/timelineComp/timelineComp",
layoutInfo: {
w: 12,
h: 40,
@@ -206,15 +220,15 @@ export var uiCompMap: Registry = {
icon: TableCompIcon,
keywords: trans("uiComp.tableCompKeywords"),
lazyLoad: true,
- compName: 'TableComp',
- compPath: 'comps/tableComp/index',
+ compName: "TableComp",
+ compPath: "comps/tableComp/index",
layoutInfo: {
w: 12,
h: 40,
},
withoutLoading: true,
- defaultDataFnName: 'defaultTableData',
- defaultDataFnPath: 'comps/tableComp/mockTableComp'
+ defaultDataFnName: "defaultTableData",
+ defaultDataFnPath: "comps/tableComp/mockTableComp",
},
slider: {
name: trans("uiComp.sliderCompName"),
@@ -224,8 +238,8 @@ export var uiCompMap: Registry = {
icon: SliderCompIcon,
keywords: trans("uiComp.sliderCompKeywords"),
lazyLoad: true,
- compName: 'SliderComp',
- compPath: 'comps/numberInputComp/sliderComp',
+ compName: "SliderComp",
+ compPath: "comps/numberInputComp/sliderComp",
layoutInfo: {
w: 6,
h: 5,
@@ -239,8 +253,8 @@ export var uiCompMap: Registry = {
icon: RangeSliderCompIcon,
keywords: trans("uiComp.rangeSliderCompKeywords"),
lazyLoad: true,
- compName: 'RangeSliderComp',
- compPath: 'comps/numberInputComp/rangeSliderComp',
+ compName: "RangeSliderComp",
+ compPath: "comps/numberInputComp/rangeSliderComp",
layoutInfo: {
w: 6,
h: 5,
@@ -257,8 +271,8 @@ export var uiCompMap: Registry = {
icon: ResponsiveLayoutCompIcon,
keywords: trans("uiComp.responsiveLayoutCompKeywords"),
lazyLoad: true,
- compName: 'ResponsiveLayoutComp',
- compPath: 'comps/responsiveLayout/index',
+ compName: "ResponsiveLayoutComp",
+ compPath: "comps/responsiveLayout/index",
withoutLoading: true,
layoutInfo: {
w: 24,
@@ -274,8 +288,8 @@ export var uiCompMap: Registry = {
icon: ContainerCompIcon,
keywords: trans("uiComp.containerCompKeywords"),
lazyLoad: true,
- compName: 'ContainerComp',
- compPath: 'comps/containerComp/containerComp',
+ compName: "ContainerComp",
+ compPath: "comps/containerComp/containerComp",
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -283,8 +297,8 @@ export var uiCompMap: Registry = {
// static: true,
delayCollision: true,
},
- defaultDataFnName: 'defaultContainerData',
- defaultDataFnPath: 'comps/containerComp/containerComp'
+ defaultDataFnName: "defaultContainerData",
+ defaultDataFnPath: "comps/containerComp/containerComp",
},
floatTextContainer: {
@@ -295,8 +309,8 @@ export var uiCompMap: Registry = {
icon: FloatingTextComp,
keywords: trans("uiComp.floatTextContainerCompKeywords"),
comp: FloatTextContainerComp,
- compName: 'ContainerComp',
- compPath: 'comps/containerComp/textContainerComp',
+ compName: "ContainerComp",
+ compPath: "comps/containerComp/textContainerComp",
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -305,8 +319,8 @@ export var uiCompMap: Registry = {
delayCollision: true,
},
defaultDataFn: defaultContainerData,
- defaultDataFnName: 'defaultContainerData',
- defaultDataFnPath: 'comps/containerComp/containerComp'
+ defaultDataFnName: "defaultContainerData",
+ defaultDataFnPath: "comps/containerComp/containerComp",
},
tabbedContainer: {
@@ -317,8 +331,8 @@ export var uiCompMap: Registry = {
icon: TabbedContainerCompIcon,
keywords: trans("uiComp.tabbedContainerCompKeywords"),
lazyLoad: true,
- compName: 'TabbedContainerComp',
- compPath: 'comps/tabs/index',
+ compName: "TabbedContainerComp",
+ compPath: "comps/tabs/index",
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -335,8 +349,8 @@ export var uiCompMap: Registry = {
icon: CollapsibleContainerCompIcon,
keywords: trans("uiComp.collapsibleContainerCompKeywords"),
lazyLoad: true,
- compName: 'ContainerComp',
- compPath: 'comps/containerComp/containerComp',
+ compName: "ContainerComp",
+ compPath: "comps/containerComp/containerComp",
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -344,8 +358,8 @@ export var uiCompMap: Registry = {
// static: true,
delayCollision: true,
},
- defaultDataFnName: 'defaultCollapsibleContainerData',
- defaultDataFnPath: 'comps/containerComp/collapsibleContainerComp',
+ defaultDataFnName: "defaultCollapsibleContainerData",
+ defaultDataFnPath: "comps/containerComp/collapsibleContainerComp",
},
pageLayout: {
name: trans("uiComp.pageLayoutCompName"),
@@ -373,15 +387,15 @@ export var uiCompMap: Registry = {
categories: ["layout"],
keywords: trans("uiComp.listViewCompKeywords"),
lazyLoad: true,
- compName: 'ListViewComp',
- compPath: 'comps/listViewComp/index',
+ compName: "ListViewComp",
+ compPath: "comps/listViewComp/index",
layoutInfo: {
w: 12,
h: 40,
delayCollision: true,
},
- defaultDataFnName: 'defaultListViewData',
- defaultDataFnPath: 'comps/listViewComp/index',
+ defaultDataFnName: "defaultListViewData",
+ defaultDataFnPath: "comps/listViewComp/index",
},
grid: {
name: trans("uiComp.gridCompName"),
@@ -391,15 +405,15 @@ export var uiCompMap: Registry = {
categories: ["layout"],
keywords: trans("uiComp.gridCompKeywords"),
lazyLoad: true,
- compName: 'GridComp',
- compPath: 'comps/listViewComp/index',
+ compName: "GridComp",
+ compPath: "comps/listViewComp/index",
layoutInfo: {
w: 12,
h: 40,
delayCollision: true,
},
- defaultDataFnName: 'defaultGridData',
- defaultDataFnPath: 'comps/listViewComp/index',
+ defaultDataFnName: "defaultGridData",
+ defaultDataFnPath: "comps/listViewComp/index",
},
modal: {
name: trans("uiComp.modalCompName"),
@@ -409,8 +423,8 @@ export var uiCompMap: Registry = {
categories: ["layout"],
keywords: trans("uiComp.modalCompKeywords"),
lazyLoad: true,
- compName: 'ModalComp',
- compPath: 'hooks/modalComp',
+ compName: "ModalComp",
+ compPath: "hooks/modalComp",
withoutLoading: true,
},
drawer: {
@@ -421,8 +435,8 @@ export var uiCompMap: Registry = {
icon: DrawerCompIcon,
keywords: trans("uiComp.drawerCompKeywords"),
lazyLoad: true,
- compName: 'DrawerComp',
- compPath: 'hooks/drawerComp',
+ compName: "DrawerComp",
+ compPath: "hooks/drawerComp",
withoutLoading: true,
},
navigation: {
@@ -433,8 +447,8 @@ export var uiCompMap: Registry = {
categories: ["layout"],
keywords: trans("uiComp.navigationCompKeywords"),
lazyLoad: true,
- compName: 'NavComp',
- compPath: 'comps/navComp/navComp',
+ compName: "NavComp",
+ compPath: "comps/navComp/navComp",
layoutInfo: {
w: 24,
h: 5,
@@ -448,8 +462,8 @@ export var uiCompMap: Registry = {
icon: CascaderCompIcon,
keywords: trans("uiComp.cascaderCompKeywords"),
lazyLoad: true,
- compName: 'CascaderWithDefault',
- compPath: 'comps/selectInputComp/cascaderComp',
+ compName: "CascaderWithDefault",
+ compPath: "comps/selectInputComp/cascaderComp",
layoutInfo: {
w: 9,
h: 5,
@@ -463,8 +477,8 @@ export var uiCompMap: Registry = {
icon: LinkCompIcon,
keywords: trans("uiComp.linkCompKeywords"),
lazyLoad: true,
- compName: 'LinkComp',
- compPath: 'comps/buttonComp/linkComp',
+ compName: "LinkComp",
+ compPath: "comps/buttonComp/linkComp",
layoutInfo: {
w: 6,
h: 5,
@@ -478,8 +492,8 @@ export var uiCompMap: Registry = {
icon: DividerCompIcon,
keywords: trans("uiComp.dividerCompKeywords"),
lazyLoad: true,
- compName: 'DividerComp',
- compPath: 'comps/dividerComp',
+ compName: "DividerComp",
+ compPath: "comps/dividerComp",
layoutInfo: {
w: 12,
h: 1,
@@ -512,13 +526,14 @@ export var uiCompMap: Registry = {
icon: VideoCompIcon,
keywords: trans("meeting.meetingCompKeywords"),
lazyLoad: true,
- compName: 'VideoSharingStreamComp',
- compPath: 'comps/meetingComp/videoSharingStreamComp',
+ compName: "VideoSharingStreamComp",
+ // compPath: "comps/meetingComp/videoSharingStreamComp",
+ comp: remoteComp({ ...builtInRemoteComps, compName: "meetingSharing" }),
withoutLoading: true,
layoutInfo: {
- w: 12,
+ w: 12,
h: 50,
- }
+ },
},
videocomponent: {
name: trans("meeting.videoCompName"),
@@ -526,15 +541,26 @@ export var uiCompMap: Registry = {
description: trans("meeting.videoCompName"),
categories: ["collaboration"],
icon: VideoCompIcon,
+ comp: remoteComp({ ...builtInRemoteComps, compName: "meetingStream" }),
keywords: trans("meeting.meetingCompKeywords"),
- lazyLoad: true,
- compName: 'VideoMeetingStreamComp',
- compPath: 'comps/meetingComp/videoMeetingStreamComp',
- withoutLoading: true,
layoutInfo: {
- w: 6,
+ w: 6,
h: 32,
- }
+ },
+ // name: trans("meeting.videoCompName"),
+ // enName: "Video",
+ // description: trans("meeting.videoCompName"),
+ // categories: ["collaboration"],
+ // icon: VideoCompIcon,
+ // keywords: trans("meeting.meetingCompKeywords"),
+ // lazyLoad: true,
+ // compName: "VideoMeetingStreamComp",
+ // compPath: "comps/meetingComp/videoMeetingStreamComp",
+ // withoutLoading: true,
+ // layoutInfo: {
+ // w: 6,
+ // h: 32,
+ // },
},
meeting: {
name: trans("meeting.meetingCompName"),
@@ -544,20 +570,21 @@ export var uiCompMap: Registry = {
icon: DrawerCompIcon,
keywords: trans("meeting.meetingCompKeywords"),
lazyLoad: true,
- compName: 'VideoMeetingControllerComp',
- compPath: 'comps/meetingComp/videoMeetingControllerComp',
+ compName: "VideoMeetingControllerComp",
+ // compPath: "comps/meetingComp/videoMeetingControllerComp",
+ comp: remoteComp({ ...builtInRemoteComps, compName: "meetingController" }),
withoutLoading: true,
},
comment: {
name: trans("uiComp.commentCompName"),
enName: "comment",
description: trans("uiComp.commentCompDesc"),
- categories: ["forms","collaboration"],
+ categories: ["forms", "collaboration"],
icon: CommentIcon,
keywords: trans("uiComp.commentCompKeywords"),
lazyLoad: true,
- compName: 'CommentComp',
- compPath: 'comps/commentComp/commentComp',
+ compName: "CommentComp",
+ compPath: "comps/commentComp/commentComp",
layoutInfo: {
w: 13,
h: 55,
@@ -567,12 +594,12 @@ export var uiCompMap: Registry = {
name: trans("uiComp.mentionCompName"),
enName: "mention",
description: trans("uiComp.mentionCompDesc"),
- categories: ["forms","collaboration"],
+ categories: ["forms", "collaboration"],
icon: MentionIcon,
keywords: trans("uiComp.mentionCompKeywords"),
lazyLoad: true,
- compName: 'MentionComp',
- compPath: 'comps/textInputComp/mentionComp',
+ compName: "MentionComp",
+ compPath: "comps/textInputComp/mentionComp",
},
// Forms
@@ -585,8 +612,8 @@ export var uiCompMap: Registry = {
icon: FormCompIcon,
keywords: trans("uiComp.formCompKeywords"),
lazyLoad: true,
- compName: 'FormComp',
- compPath: 'comps/formComp/formComp',
+ compName: "FormComp",
+ compPath: "comps/formComp/formComp",
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -594,8 +621,8 @@ export var uiCompMap: Registry = {
// static: true,
delayCollision: true,
},
- defaultDataFnName: 'defaultFormData',
- defaultDataFnPath: 'comps/formComp/formComp',
+ defaultDataFnName: "defaultFormData",
+ defaultDataFnPath: "comps/formComp/formComp",
},
jsonSchemaForm: {
name: trans("uiComp.jsonSchemaFormCompName"),
@@ -605,8 +632,8 @@ export var uiCompMap: Registry = {
icon: JsonFormCompIcon,
keywords: trans("uiComp.jsonSchemaFormCompKeywords"),
lazyLoad: true,
- compName: 'JsonSchemaFormComp',
- compPath: 'comps/jsonSchemaFormComp/jsonSchemaFormComp',
+ compName: "JsonSchemaFormComp",
+ compPath: "comps/jsonSchemaFormComp/jsonSchemaFormComp",
layoutInfo: {
w: 12,
h: 50,
@@ -620,8 +647,8 @@ export var uiCompMap: Registry = {
icon: JsonEditorCompIcon,
keywords: trans("uiComp.jsonEditorCompKeywords"),
lazyLoad: true,
- compName: 'JsonEditorComp',
- compPath: 'comps/jsonComp/jsonEditorComp',
+ compName: "JsonEditorComp",
+ compPath: "comps/jsonComp/jsonEditorComp",
layoutInfo: {
w: 12,
h: 50,
@@ -635,8 +662,8 @@ export var uiCompMap: Registry = {
icon: JsonExplorerCompIcon,
keywords: trans("uiComp.jsonExplorerCompKeywords"),
lazyLoad: true,
- compName: 'JsonExplorerComp',
- compPath: 'comps/jsonComp/jsonExplorerComp',
+ compName: "JsonExplorerComp",
+ compPath: "comps/jsonComp/jsonExplorerComp",
layoutInfo: {
w: 12,
h: 50,
@@ -650,8 +677,8 @@ export var uiCompMap: Registry = {
icon: RichTextEditorCompIcon,
keywords: trans("uiComp.richTextEditorCompKeywords"),
lazyLoad: true,
- compName: 'RichTextEditorComp',
- compPath: 'comps/richTextEditorComp',
+ compName: "RichTextEditorComp",
+ compPath: "comps/richTextEditorComp",
layoutInfo: {
w: 12,
h: 50,
@@ -665,12 +692,12 @@ export var uiCompMap: Registry = {
icon: InputCompIcon,
keywords: trans("uiComp.inputCompKeywords"),
lazyLoad: true,
- compName: 'InputComp',
- compPath: 'comps/textInputComp/inputComp',
+ compName: "InputComp",
+ compPath: "comps/textInputComp/inputComp",
layoutInfo: {
- w: 6,
+ w: 6,
h: 6,
- }
+ },
},
password: {
name: trans("uiComp.passwordCompName"),
@@ -680,12 +707,12 @@ export var uiCompMap: Registry = {
icon: PasswordCompIcon,
keywords: trans("uiComp.passwordCompKeywords"),
lazyLoad: true,
- compName: 'PasswordComp',
- compPath: 'comps/textInputComp/passwordComp',
+ compName: "PasswordComp",
+ compPath: "comps/textInputComp/passwordComp",
layoutInfo: {
- w: 6,
+ w: 6,
h: 6,
- }
+ },
},
numberInput: {
name: trans("uiComp.numberInputCompName"),
@@ -695,12 +722,12 @@ export var uiCompMap: Registry = {
icon: NumberInputCompIcon,
keywords: trans("uiComp.numberInputCompKeywords"),
lazyLoad: true,
- compName: 'NumberInputComp',
- compPath: 'comps/numberInputComp/numberInputComp',
+ compName: "NumberInputComp",
+ compPath: "comps/numberInputComp/numberInputComp",
layoutInfo: {
- w: 6,
+ w: 6,
h: 6,
- }
+ },
},
textArea: {
name: trans("uiComp.textAreaCompName"),
@@ -710,12 +737,12 @@ export var uiCompMap: Registry = {
icon: TextAreaCompIcon,
keywords: trans("uiComp.textAreaCompKeywords"),
lazyLoad: true,
- compName: 'TextAreaComp',
- compPath: 'comps/textInputComp/textAreaComp',
+ compName: "TextAreaComp",
+ compPath: "comps/textInputComp/textAreaComp",
layoutInfo: {
- w: 6,
+ w: 6,
h: 12,
- }
+ },
},
switch: {
name: trans("uiComp.switchCompName"),
@@ -725,12 +752,12 @@ export var uiCompMap: Registry = {
icon: SwitchCompIcon,
keywords: trans("uiComp.switchCompKeywords"),
lazyLoad: true,
- compName: 'SwitchComp',
- compPath: 'comps/switchComp',
+ compName: "SwitchComp",
+ compPath: "comps/switchComp",
layoutInfo: {
- w: 6,
+ w: 6,
h: 6,
- }
+ },
},
checkbox: {
name: trans("uiComp.checkboxCompName"),
@@ -740,8 +767,8 @@ export var uiCompMap: Registry = {
icon: CheckboxCompIcon,
keywords: trans("uiComp.checkboxCompKeywords"),
lazyLoad: true,
- compName: 'CheckboxComp',
- compPath: 'comps/selectInputComp/checkboxComp',
+ compName: "CheckboxComp",
+ compPath: "comps/selectInputComp/checkboxComp",
layoutInfo: {
w: 6,
h: 6,
@@ -755,8 +782,8 @@ export var uiCompMap: Registry = {
icon: RadioCompIcon,
keywords: trans("uiComp.radioCompKeywords"),
lazyLoad: true,
- compName: 'RadioComp',
- compPath: 'comps/selectInputComp/radioComp',
+ compName: "RadioComp",
+ compPath: "comps/selectInputComp/radioComp",
layoutInfo: {
w: 6,
h: 6,
@@ -770,8 +797,8 @@ export var uiCompMap: Registry = {
icon: DateCompIcon,
keywords: trans("uiComp.dateCompKeywords"),
lazyLoad: true,
- compName: 'DatePickerComp',
- compPath: 'comps/dateComp/dateComp',
+ compName: "DatePickerComp",
+ compPath: "comps/dateComp/dateComp",
layoutInfo: {
w: 6,
h: 6,
@@ -785,8 +812,8 @@ export var uiCompMap: Registry = {
icon: DateRangeCompIcon,
keywords: trans("uiComp.dateRangeCompKeywords"),
lazyLoad: true,
- compName: 'DateRangeComp',
- compPath: 'comps/dateComp/dateComp',
+ compName: "DateRangeComp",
+ compPath: "comps/dateComp/dateComp",
layoutInfo: {
w: 12,
h: 6,
@@ -800,8 +827,8 @@ export var uiCompMap: Registry = {
icon: TimeCompIcon,
keywords: trans("uiComp.timeCompKeywords"),
lazyLoad: true,
- compName: 'TimePickerComp',
- compPath: 'comps/dateComp/timeComp',
+ compName: "TimePickerComp",
+ compPath: "comps/dateComp/timeComp",
layoutInfo: {
w: 6,
h: 6,
@@ -815,8 +842,8 @@ export var uiCompMap: Registry = {
icon: TimeRangeCompIcon,
keywords: trans("uiComp.timeRangeCompKeywords"),
lazyLoad: true,
- compName: 'TimeRangeComp',
- compPath: 'comps/dateComp/timeComp',
+ compName: "TimeRangeComp",
+ compPath: "comps/dateComp/timeComp",
layoutInfo: {
w: 12,
h: 6,
@@ -830,8 +857,8 @@ export var uiCompMap: Registry = {
icon: ButtonCompIcon,
keywords: trans("uiComp.buttonCompKeywords"),
lazyLoad: true,
- compName: 'ButtonComp',
- compPath: 'comps/buttonComp/buttonComp',
+ compName: "ButtonComp",
+ compPath: "comps/buttonComp/buttonComp",
layoutInfo: {
w: 6,
h: 6,
@@ -846,8 +873,8 @@ export var uiCompMap: Registry = {
icon: ButtonCompIcon,
keywords: trans("meeting.meetingCompKeywords"),
lazyLoad: true,
- compName: 'ControlButton',
- compPath: 'comps/meetingComp/controlButton',
+ compName: "ControlButton",
+ compPath: "comps/meetingComp/controlButton",
withoutLoading: true,
layoutInfo: {
w: 3,
@@ -862,8 +889,8 @@ export var uiCompMap: Registry = {
icon: DropdownCompIcon,
keywords: trans("uiComp.dropdownCompKeywords"),
lazyLoad: true,
- compName: 'DropdownComp',
- compPath: 'comps/buttonComp/dropdownComp',
+ compName: "DropdownComp",
+ compPath: "comps/buttonComp/dropdownComp",
layoutInfo: {
w: 6,
h: 6,
@@ -877,8 +904,8 @@ export var uiCompMap: Registry = {
icon: ToggleButtonCompIcon,
keywords: trans("uiComp.toggleButtonCompKeywords"),
lazyLoad: true,
- compName: 'ToggleButtonComp',
- compPath: 'comps/buttonComp/toggleButtonComp',
+ compName: "ToggleButtonComp",
+ compPath: "comps/buttonComp/toggleButtonComp",
layoutInfo: {
w: 3,
h: 6,
@@ -892,8 +919,8 @@ export var uiCompMap: Registry = {
icon: SegmentedCompIcon,
keywords: trans("uiComp.segmentedControlCompKeywords"),
lazyLoad: true,
- compName: 'SegmentedControlComp',
- compPath: 'comps/selectInputComp/segmentedControl',
+ compName: "SegmentedControlComp",
+ compPath: "comps/selectInputComp/segmentedControl",
layoutInfo: {
w: 6,
h: 6,
@@ -907,8 +934,8 @@ export var uiCompMap: Registry = {
icon: SegmentedCompIcon,
keywords: trans("uiComp.stepControlCompKeywords"),
lazyLoad: true,
- compName: 'StepComp',
- compPath: 'comps/selectInputComp/stepsControl',
+ compName: "StepComp",
+ compPath: "comps/selectInputComp/stepsControl",
layoutInfo: {
w: 6,
h: 6,
@@ -923,25 +950,25 @@ export var uiCompMap: Registry = {
icon: RatingCompIcon,
keywords: trans("uiComp.ratingCompKeywords"),
lazyLoad: true,
- compName: 'RatingComp',
- compPath: 'comps/ratingComp',
+ compName: "RatingComp",
+ compPath: "comps/ratingComp",
layoutInfo: {
- w: 6,
+ w: 6,
h: 6,
- }
+ },
},
autocomplete: {
name: trans("uiComp.autoCompleteCompName"),
enName: "autoComplete",
description: trans("uiComp.autoCompleteCompDesc"),
- categories: ["forms","collaboration"],
+ categories: ["forms", "collaboration"],
icon: AutoCompleteCompIcon,
keywords: cnchar
.spell(trans("uiComp.autoCompleteCompName"), "first", "low")
.toString(),
lazyLoad: true,
- compName: 'AutoCompleteComp',
- compPath: 'comps/autoCompleteComp/autoCompleteComp',
+ compName: "AutoCompleteComp",
+ compPath: "comps/autoCompleteComp/autoCompleteComp",
layoutInfo: {
w: 6,
h: 5,
@@ -958,8 +985,8 @@ export var uiCompMap: Registry = {
icon: ProgressCompIcon,
keywords: trans("uiComp.progressCompKeywords"),
lazyLoad: true,
- compName: 'ProgressComp',
- compPath: 'comps/progressComp',
+ compName: "ProgressComp",
+ compPath: "comps/progressComp",
layoutInfo: {
w: 6,
h: 5,
@@ -973,17 +1000,16 @@ export var uiCompMap: Registry = {
icon: ProcessCircleCompIcon,
keywords: trans("uiComp.progressCircleCompKeywords"),
lazyLoad: true,
- compName: 'ProgressCircleComp',
- compPath: 'comps/progressCircleComp',
+ compName: "ProgressCircleComp",
+ compPath: "comps/progressCircleComp",
layoutInfo: {
w: 6,
h: 20,
},
- },
-
+ },
// Document handling
-
+
file: {
name: trans("uiComp.fileUploadCompName"),
enName: "File Upload",
@@ -992,8 +1018,8 @@ export var uiCompMap: Registry = {
icon: UploadCompIcon,
keywords: trans("uiComp.fileUploadCompKeywords"),
lazyLoad: true,
- compName: 'FileComp',
- compPath: 'comps/fileComp/fileComp',
+ compName: "FileComp",
+ compPath: "comps/fileComp/fileComp",
layoutInfo: {
w: 6,
h: 5,
@@ -1007,14 +1033,14 @@ export var uiCompMap: Registry = {
icon: FileViewerCompIcon,
keywords: trans("uiComp.fileViewerCompKeywords"),
lazyLoad: true,
- compName: 'FileViewerComp',
- compPath: 'comps/fileViewerComp',
+ compName: "FileViewerComp",
+ compPath: "comps/fileViewerComp",
layoutInfo: {
w: 12,
h: 40,
},
},
-
+
// Multimedia
image: {
@@ -1025,8 +1051,8 @@ export var uiCompMap: Registry = {
icon: ImageCompIcon,
keywords: trans("uiComp.imageCompKeywords"),
lazyLoad: true,
- compName: 'ImageComp',
- compPath: 'comps/imageComp',
+ compName: "ImageComp",
+ compPath: "comps/imageComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1040,8 +1066,8 @@ export var uiCompMap: Registry = {
icon: CarouselCompIcon,
keywords: trans("uiComp.drawerCompKeywords"),
lazyLoad: true,
- compName: 'CarouselComp',
- compPath: 'comps/carouselComp',
+ compName: "CarouselComp",
+ compPath: "comps/carouselComp",
withoutLoading: true,
layoutInfo: {
w: 12,
@@ -1056,8 +1082,8 @@ export var uiCompMap: Registry = {
icon: AudioCompIcon,
keywords: trans("uiComp.audioCompKeywords"),
lazyLoad: true,
- compName: 'AudioComp',
- compPath: 'comps/mediaComp/audioComp',
+ compName: "AudioComp",
+ compPath: "comps/mediaComp/audioComp",
layoutInfo: {
w: 6,
h: 5,
@@ -1071,8 +1097,8 @@ export var uiCompMap: Registry = {
icon: VideoCompIcon,
keywords: trans("uiComp.videoCompKeywords"),
lazyLoad: true,
- compName: 'VideoComp',
- compPath: 'comps/mediaComp/videoComp',
+ compName: "VideoComp",
+ compPath: "comps/mediaComp/videoComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1086,8 +1112,8 @@ export var uiCompMap: Registry = {
icon: LottieIcon,
keywords: trans("uiComp.jsonLottieCompKeywords"),
lazyLoad: true,
- compName: 'JsonLottieComp',
- compPath: 'comps/jsonComp/jsonLottieComp',
+ compName: "JsonLottieComp",
+ compPath: "comps/jsonComp/jsonLottieComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1130,8 +1156,8 @@ export var uiCompMap: Registry = {
icon: QRCodeCompIcon,
keywords: trans("uiComp.qrCodeCompKeywords"),
lazyLoad: true,
- compName: 'QRCodeComp',
- compPath: 'comps/qrCodeComp',
+ compName: "QRCodeComp",
+ compPath: "comps/qrCodeComp",
layoutInfo: {
w: 6,
h: 32,
@@ -1145,8 +1171,8 @@ export var uiCompMap: Registry = {
icon: ScannerIcon,
keywords: trans("uiComp.scannerCompKeywords"),
lazyLoad: true,
- compName: 'ScannerComp',
- compPath: 'comps/buttonComp/scannerComp',
+ compName: "ScannerComp",
+ compPath: "comps/buttonComp/scannerComp",
layoutInfo: {
w: 6,
h: 5,
@@ -1160,8 +1186,8 @@ export var uiCompMap: Registry = {
icon: SignatureIcon,
keywords: trans("uiComp.signatureCompKeywords"),
lazyLoad: true,
- compName: 'SignatureComp',
- compPath: 'comps/signatureComp',
+ compName: "SignatureComp",
+ compPath: "comps/signatureComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1175,8 +1201,8 @@ export var uiCompMap: Registry = {
icon: SelectCompIcon,
keywords: trans("uiComp.selectCompKeywords"),
lazyLoad: true,
- compName: 'SelectComp',
- compPath: 'comps/selectInputComp/selectComp',
+ compName: "SelectComp",
+ compPath: "comps/selectInputComp/selectComp",
layoutInfo: {
w: 6,
h: 5,
@@ -1190,8 +1216,8 @@ export var uiCompMap: Registry = {
icon: MultiSelectCompIcon,
keywords: trans("uiComp.multiSelectCompKeywords"),
lazyLoad: true,
- compName: 'MultiSelectComp',
- compPath: 'comps/selectInputComp/multiSelectComp',
+ compName: "MultiSelectComp",
+ compPath: "comps/selectInputComp/multiSelectComp",
layoutInfo: {
w: 6,
h: 5,
@@ -1205,8 +1231,8 @@ export var uiCompMap: Registry = {
icon: TreeIcon,
keywords: trans("uiComp.treeCompKeywords"),
lazyLoad: true,
- compName: 'TreeComp',
- compPath: 'comps/treeComp/treeComp',
+ compName: "TreeComp",
+ compPath: "comps/treeComp/treeComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1220,8 +1246,8 @@ export var uiCompMap: Registry = {
icon: TreeSelectIcon,
keywords: trans("uiComp.treeSelectCompKeywords"),
lazyLoad: true,
- compName: 'TreeSelectComp',
- compPath: 'comps/treeComp/treeSelectComp',
+ compName: "TreeSelectComp",
+ compPath: "comps/treeComp/treeSelectComp",
layoutInfo: {
w: 12,
h: 5,
@@ -1238,8 +1264,8 @@ export var uiCompMap: Registry = {
categories: ["integration"],
keywords: trans("uiComp.iframeCompKeywords"),
lazyLoad: true,
- compName: 'IFrameComp',
- compPath: 'comps/iframeComp',
+ compName: "IFrameComp",
+ compPath: "comps/iframeComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1253,8 +1279,8 @@ export var uiCompMap: Registry = {
categories: ["integration"],
keywords: trans("uiComp.customCompKeywords"),
lazyLoad: true,
- compName: 'CustomComp',
- compPath: 'comps/customComp/customComp',
+ compName: "CustomComp",
+ compPath: "comps/customComp/customComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1268,8 +1294,8 @@ export var uiCompMap: Registry = {
categories: [],
keywords: trans("uiComp.moduleCompKeywords"),
lazyLoad: true,
- compName: 'ModuleComp',
- compPath: 'comps/moduleComp/moduleComp',
+ compName: "ModuleComp",
+ compPath: "comps/moduleComp/moduleComp",
layoutInfo: {
w: 12,
h: 40,
@@ -1285,19 +1311,18 @@ export var uiCompMap: Registry = {
categories: ["dashboards", "layout", "multimedia"],
icon: TextCompIcon,
keywords: trans("uiComp.textCompKeywords"),
- compName: 'TextComp',
+ compName: "TextComp",
lazyLoad: true,
- compPath: 'comps/textComp',
+ compPath: "comps/textComp",
layoutInfo: {
w: 6,
h: 24,
},
},
-
};
export function loadComps() {
- if(!uiCompMap) return;
+ if (!uiCompMap) return;
const entries = Object.entries(uiCompMap);
for (const [compType, manifest] of entries) {
registerComp(compType as UICompType, manifest);
From ccfa3ebb946bbc1eb640c25d5e2ee1ef110fadf8 Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Mon, 15 Apr 2024 17:10:12 +0300
Subject: [PATCH 09/16] fixed lowcoder-comps agora loading
---
client/packages/lowcoder-comps/package.json | 4 +-
.../meetingControllerComp.tsx | 11 -
client/yarn.lock | 877 +++++++++---------
3 files changed, 424 insertions(+), 468 deletions(-)
diff --git a/client/packages/lowcoder-comps/package.json b/client/packages/lowcoder-comps/package.json
index 386128841..292cd1f68 100644
--- a/client/packages/lowcoder-comps/package.json
+++ b/client/packages/lowcoder-comps/package.json
@@ -19,6 +19,8 @@
"@fullcalendar/timeline": "^6.1.6",
"@types/react": "^18.2.45",
"@types/react-dom": "^18.2.18",
+ "agora-rtc-sdk-ng": "^4.20.2",
+ "agora-rtm-sdk": "^1.5.1",
"big.js": "^6.2.1",
"echarts-extension-gmap": "^1.6.0",
"echarts-wordcloud": "^2.1.0",
@@ -102,4 +104,4 @@
"vite": "^5.0.12",
"vite-tsconfig-paths": "^3.6.0"
}
-}
\ No newline at end of file
+}
diff --git a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControllerComp.tsx b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControllerComp.tsx
index 028926c29..b816a03a6 100644
--- a/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControllerComp.tsx
+++ b/client/packages/lowcoder-comps/src/comps/agoraMeetingComp/meetingControllerComp.tsx
@@ -831,20 +831,9 @@ MTComp = withMethodExposing(MTComp, [
});
},
},
- // {
- // method: {
- // name: "closeDrawer",
- // description: trans("drawer.closeDrawerDesc"),
- // params: [],
- // },
- // execute: (comp : any, values: any) => {
- // comp.children.visible.getView().onChange(false);
- // },
- // },
]);
export const MeetingControllerComp = withExposingConfigs(MTComp, [
- // new NameConfig("visible", trans("export.visibleDesc")),
new NameConfig("appId", trans("meeting.appid")),
new NameConfig("localUser", trans("meeting.host")),
new NameConfig("participants", trans("meeting.participants")),
diff --git a/client/yarn.lock b/client/yarn.lock
index 2aa94cc81..cc1045046 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -73,8 +73,8 @@ __metadata:
linkType: hard
"@ant-design/cssinjs@npm:^1.18.2":
- version: 1.18.4
- resolution: "@ant-design/cssinjs@npm:1.18.4"
+ version: 1.19.1
+ resolution: "@ant-design/cssinjs@npm:1.19.1"
dependencies:
"@babel/runtime": ^7.11.1
"@emotion/hash": ^0.8.0
@@ -86,7 +86,7 @@ __metadata:
peerDependencies:
react: ">=16.0.0"
react-dom: ">=16.0.0"
- checksum: c6028097929a9948d1e9d5441aeab51ff824edacf98976fb06c146397c7cc9b2fc3f88765a0d93345b1fbbf6b766f638260652d5637fcbf6e6bbafe4e79e60bd
+ checksum: d4db654f0bc45932db59b8583587c7e0baf4985074b0e1aa9dd6cbd058fb40a655c103a2c9ba344f36d3048ac3b86c489d538d4d2d95a730d3d8dbee11b70fe2
languageName: node
linkType: hard
@@ -98,8 +98,8 @@ __metadata:
linkType: hard
"@ant-design/icons@npm:^5.2.6, @ant-design/icons@npm:^5.3.0":
- version: 5.3.4
- resolution: "@ant-design/icons@npm:5.3.4"
+ version: 5.3.6
+ resolution: "@ant-design/icons@npm:5.3.6"
dependencies:
"@ant-design/colors": ^7.0.0
"@ant-design/icons-svg": ^4.4.0
@@ -109,7 +109,7 @@ __metadata:
peerDependencies:
react: ">=16.0.0"
react-dom: ">=16.0.0"
- checksum: 9c3e04e20159250ed9a6e694e2944ce2a5d3f164d41bb024ce64c69692a4b14a31fb3f25c0dd7c6f6770269731e46fc3ac81d8a23bfdcad08178135fe008e8e4
+ checksum: bdb57adcdc0c687002e99d91413ac1c9ffd70c8368a54648ef6c3427c074b24376d8dced57542be695f5fdfe81be14a62b58a41cba7f5efdadc77c4161c58cae
languageName: node
linkType: hard
@@ -138,24 +138,24 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.1":
- version: 7.24.1
- resolution: "@babel/compat-data@npm:7.24.1"
- checksum: e14e94b00c3ac57bba929a87da8edb6c6a99d0051c54bf49591a5481440dd4d3ac7b4e4a93b81b54e45c2bca55e538aa1e1ad8281b083440a1598bfa8c8df03a
+"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/compat-data@npm:7.24.4"
+ checksum: 52ce371658dc7796c9447c9cb3b9c0659370d141b76997f21c5e0028cca4d026ca546b84bc8d157ce7ca30bd353d89f9238504eb8b7aefa9b1f178b4c100c2d4
languageName: node
linkType: hard
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.19.6, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9":
- version: 7.24.3
- resolution: "@babel/core@npm:7.24.3"
+ version: 7.24.4
+ resolution: "@babel/core@npm:7.24.4"
dependencies:
"@ampproject/remapping": ^2.2.0
"@babel/code-frame": ^7.24.2
- "@babel/generator": ^7.24.1
+ "@babel/generator": ^7.24.4
"@babel/helper-compilation-targets": ^7.23.6
"@babel/helper-module-transforms": ^7.23.3
- "@babel/helpers": ^7.24.1
- "@babel/parser": ^7.24.1
+ "@babel/helpers": ^7.24.4
+ "@babel/parser": ^7.24.4
"@babel/template": ^7.24.0
"@babel/traverse": ^7.24.1
"@babel/types": ^7.24.0
@@ -164,7 +164,7 @@ __metadata:
gensync: ^1.0.0-beta.2
json5: ^2.2.3
semver: ^6.3.1
- checksum: 1a33460794f4122cf255b656f4d6586913f41078a1afdf1bcf0365ddbd99c1ddb68f904062f9079445ab26b507c36bc297055192bc26e5c8e6e3def42195f9ab
+ checksum: 15ecad7581f3329995956ba461961b1af7bed48901f14fe962ccd3217edca60049e9e6ad4ce48134618397e6c90230168c842e2c28e47ef1f16c97dbbf663c61
languageName: node
linkType: hard
@@ -182,15 +182,15 @@ __metadata:
languageName: node
linkType: hard
-"@babel/generator@npm:^7.24.1, @babel/generator@npm:^7.7.2":
- version: 7.24.1
- resolution: "@babel/generator@npm:7.24.1"
+"@babel/generator@npm:^7.24.1, @babel/generator@npm:^7.24.4, @babel/generator@npm:^7.7.2":
+ version: 7.24.4
+ resolution: "@babel/generator@npm:7.24.4"
dependencies:
"@babel/types": ^7.24.0
"@jridgewell/gen-mapping": ^0.3.5
"@jridgewell/trace-mapping": ^0.3.25
jsesc: ^2.5.1
- checksum: 98c6ce5ec7a1cba2bdf35cdf607273b90cf7cf82bbe75cd0227363fb84d7e1bd8efa74f40247d5900c8c009123f10132ad209a05283757698de918278c3c6700
+ checksum: 1b6146c31386c9df3eb594a2c36b5c98da4f67f7c06edb3d68a442b92516b21bb5ba3ad7dbe0058fe76625ed24d66923e15c95b0df75ef1907d4068921a699b8
languageName: node
linkType: hard
@@ -225,9 +225,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.1":
- version: 7.24.1
- resolution: "@babel/helper-create-class-features-plugin@npm:7.24.1"
+"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.24.4"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
"@babel/helper-environment-visitor": ^7.22.20
@@ -240,7 +240,7 @@ __metadata:
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 310d063eafbd2a777609770c1aa7b24e43f375122fd84031c45edc512686000197da1cf450b48eca266489131bc06dbaa35db2afed8b7213c9bcfa8c89b82c4d
+ checksum: 75b0a51ae1f7232932559779b78711c271404d02d069156d1bd9a7982c165c5134058d2ec2d8b5f2e42026ee4f52ba2a30c86a7aa3bce6b5fd0991eb721abc8c
languageName: node
linkType: hard
@@ -432,14 +432,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.24.1":
- version: 7.24.1
- resolution: "@babel/helpers@npm:7.24.1"
+"@babel/helpers@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/helpers@npm:7.24.4"
dependencies:
"@babel/template": ^7.24.0
"@babel/traverse": ^7.24.1
"@babel/types": ^7.24.0
- checksum: 0643b8ccf3358682303aea65f0798e482b2c3642040d32ffe130a245f4a46d0d23fe575a5e06e3cda4e8ec4af89d52b94ff1c444a74465d47ccc27da6ddbbb9f
+ checksum: ecd2dc0b3b32e24b97fa3bcda432dd3235b77c2be1e16eafc35b8ef8f6c461faa99796a8bc2431a408c98b4aabfd572c160e2b67ecea4c5c9dd3a8314a97994a
languageName: node
linkType: hard
@@ -455,12 +455,24 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1":
- version: 7.24.1
- resolution: "@babel/parser@npm:7.24.1"
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1, @babel/parser@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/parser@npm:7.24.4"
bin:
parser: ./bin/babel-parser.js
- checksum: a1068941dddf82ffdf572565b8b7b2cddb963ff9ddf97e6e28f50e843d820b4285e6def8f59170104a94e2a91ae2e3b326489886d77a57ea29d468f6a5e79bf9
+ checksum: 94c9e3e592894cd6fc57c519f4e06b65463df9be5f01739bb0d0bfce7ffcf99b3c2fdadd44dc59cc858ba2739ce6e469813a941c2f2dfacf333a3b2c9c5c8465
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.4"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 0be3f41b1b865d7a4ed1a432337be48de67989d0b4e47def34a05097a804b6fc193115f97c954fd757339e0b80030ecf1d0a3d3fd6e7e91718644de0a5aae3d3
languageName: node
linkType: hard
@@ -900,14 +912,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoping@npm:^7.24.1":
- version: 7.24.1
- resolution: "@babel/plugin-transform-block-scoping@npm:7.24.1"
+"@babel/plugin-transform-block-scoping@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/plugin-transform-block-scoping@npm:7.24.4"
dependencies:
"@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 65423ee83dba4e84c357f34e0970a96d0f5e727fad327cc7bdb0e1492243eb9c72b95d3c649dc0b488b9b4774dadef5662fed0bf66717b59673ff6d4ffbd6441
+ checksum: 5229ffe1c55744b96f791521e2876b01ed05c81df67488a7453ce66c2faceb9d1d653089ce6f0abf512752e15e9acac0e75a797a860f24e05b4d36497c7c3183
languageName: node
linkType: hard
@@ -923,16 +935,16 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-class-static-block@npm:^7.24.1":
- version: 7.24.1
- resolution: "@babel/plugin-transform-class-static-block@npm:7.24.1"
+"@babel/plugin-transform-class-static-block@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.24.4"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.24.1
+ "@babel/helper-create-class-features-plugin": ^7.24.4
"@babel/helper-plugin-utils": ^7.24.0
"@babel/plugin-syntax-class-static-block": ^7.14.5
peerDependencies:
"@babel/core": ^7.12.0
- checksum: 253c627c11d9df79e3b32e78bfa1fe0dd1f91c3579da52bf73f76c83de53b140dcb1c9cc5f4c65ff1505754a01b59bc83987c35bcc8f89492b63dae46adef78f
+ checksum: 3b1db3308b57ba21d47772a9f183804234c23fd64c9ca40915d2d65c5dc7a48b49a6de16b8b90b7a354eacbb51232a862f0fca3dbd23e27d34641f511decddab
languageName: node
linkType: hard
@@ -1494,16 +1506,16 @@ __metadata:
linkType: hard
"@babel/plugin-transform-typescript@npm:^7.24.1":
- version: 7.24.1
- resolution: "@babel/plugin-transform-typescript@npm:7.24.1"
+ version: 7.24.4
+ resolution: "@babel/plugin-transform-typescript@npm:7.24.4"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
- "@babel/helper-create-class-features-plugin": ^7.24.1
+ "@babel/helper-create-class-features-plugin": ^7.24.4
"@babel/helper-plugin-utils": ^7.24.0
"@babel/plugin-syntax-typescript": ^7.24.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 1a37fa55ab176b11c3763da4295651b3db38f0a7f3d47b5cd5ab1e33cbcbbf2b471c4bdb7b24f39392d4660409209621c8d11c521de2deffddc3d876a1b60482
+ checksum: 57a9a776b1910c706d28972e4b056ced3af8fc59c29b2a6205c2bb2a408141ddb59a8f2f6041f8467a7b260942818767f4ecabb9f63adf7fddf2afa25e774dfc
languageName: node
linkType: hard
@@ -1555,13 +1567,14 @@ __metadata:
linkType: hard
"@babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.20.2":
- version: 7.24.3
- resolution: "@babel/preset-env@npm:7.24.3"
+ version: 7.24.4
+ resolution: "@babel/preset-env@npm:7.24.4"
dependencies:
- "@babel/compat-data": ^7.24.1
+ "@babel/compat-data": ^7.24.4
"@babel/helper-compilation-targets": ^7.23.6
"@babel/helper-plugin-utils": ^7.24.0
"@babel/helper-validator-option": ^7.23.5
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.4
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.1
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.1
"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.1
@@ -1588,9 +1601,9 @@ __metadata:
"@babel/plugin-transform-async-generator-functions": ^7.24.3
"@babel/plugin-transform-async-to-generator": ^7.24.1
"@babel/plugin-transform-block-scoped-functions": ^7.24.1
- "@babel/plugin-transform-block-scoping": ^7.24.1
+ "@babel/plugin-transform-block-scoping": ^7.24.4
"@babel/plugin-transform-class-properties": ^7.24.1
- "@babel/plugin-transform-class-static-block": ^7.24.1
+ "@babel/plugin-transform-class-static-block": ^7.24.4
"@babel/plugin-transform-classes": ^7.24.1
"@babel/plugin-transform-computed-properties": ^7.24.1
"@babel/plugin-transform-destructuring": ^7.24.1
@@ -1640,7 +1653,7 @@ __metadata:
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4f3376444f938b3884fddd3cded86cfda97a1fb4bccc93b49fb4593a63f79d9b20e6fb0e1a0934736cea6205df3998c752b248c5f5ec398162fbe165c8e69c5c
+ checksum: 5a057a6463f92b02bfe66257d3f2c76878815bc7847f2a716b0539d9f547eae2a9d1f0fc62a5c0eff6ab0504bb52e815829ef893e4586b641f8dd6a609d114f3
languageName: node
linkType: hard
@@ -1696,11 +1709,11 @@ __metadata:
linkType: hard
"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.6, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
- version: 7.24.1
- resolution: "@babel/runtime@npm:7.24.1"
+ version: 7.24.4
+ resolution: "@babel/runtime@npm:7.24.4"
dependencies:
regenerator-runtime: ^0.14.0
- checksum: 5c8f3b912ba949865f03b3cf8395c60e1f4ebd1033fbd835bdfe81b6cac8a87d85bc3c7aded5fcdf07be044c9ab8c818f467abe0deca50020c72496782639572
+ checksum: 2f27d4c0ffac7ae7999ac0385e1106f2a06992a8bdcbf3da06adcac7413863cd08c198c2e4e970041bbea849e17f02e1df18875539b6afba76c781b6b59a07c3
languageName: node
linkType: hard
@@ -1759,8 +1772,8 @@ __metadata:
linkType: hard
"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.11.1":
- version: 6.15.0
- resolution: "@codemirror/autocomplete@npm:6.15.0"
+ version: 6.16.0
+ resolution: "@codemirror/autocomplete@npm:6.16.0"
dependencies:
"@codemirror/language": ^6.0.0
"@codemirror/state": ^6.0.0
@@ -1771,7 +1784,7 @@ __metadata:
"@codemirror/state": ^6.0.0
"@codemirror/view": ^6.0.0
"@lezer/common": ^1.0.0
- checksum: fce8d85e34a76d37a009c74d7d25c32a8cf12a9cbcff95211f96ff9afcb092e0d79e1f3b40425b4ea9b797579aaf64dd770ff2187ffabe2e5c9f44da23631363
+ checksum: e33d3d8c961c03dc4a70d1ac6f01aee5362d778da9d873a8335aed47f7de9430eab083589736e7922464b941d5da23c51ab6af05400413a8d1a07604ffcb99f7
languageName: node
linkType: hard
@@ -1801,8 +1814,8 @@ __metadata:
linkType: hard
"@codemirror/lang-html@npm:^6.4.7":
- version: 6.4.8
- resolution: "@codemirror/lang-html@npm:6.4.8"
+ version: 6.4.9
+ resolution: "@codemirror/lang-html@npm:6.4.9"
dependencies:
"@codemirror/autocomplete": ^6.0.0
"@codemirror/lang-css": ^6.0.0
@@ -1813,7 +1826,7 @@ __metadata:
"@lezer/common": ^1.0.0
"@lezer/css": ^1.1.0
"@lezer/html": ^1.3.0
- checksum: 9aec56c333cc06f9e4bb6d09806ae83e4a7f235a26b3244010e2dcea83a923cfcd7bec84904b8a59bc81256b0bb579a52bf5614962dad031d7577db1c49a216a
+ checksum: ac8c3ceb0396f2e032752c5079bd950124dca708bc64e96fc147dc5fe7133e5cee0814fe951abdb953ec1d11fa540e4b30a712b5149d9a36016a197a28de45d7
languageName: node
linkType: hard
@@ -1843,8 +1856,8 @@ __metadata:
linkType: hard
"@codemirror/lang-sql@npm:^6.5.4":
- version: 6.6.1
- resolution: "@codemirror/lang-sql@npm:6.6.1"
+ version: 6.6.3
+ resolution: "@codemirror/lang-sql@npm:6.6.3"
dependencies:
"@codemirror/autocomplete": ^6.0.0
"@codemirror/language": ^6.0.0
@@ -1852,7 +1865,7 @@ __metadata:
"@lezer/common": ^1.2.0
"@lezer/highlight": ^1.0.0
"@lezer/lr": ^1.0.0
- checksum: 65f59b2a4477ddff27aba9435f4c3f1d236cbc03aa7c9cf3b2f70b8bbcd748c8883aae249efd9077fdbd9b23a9c0f046a29c945ffb0d8e6ef4e9ee9f61d35a88
+ checksum: b8e554bda9107107283674a6397cdb4816ad8bb429afd739fdc5e0339ef60170f09bdd93e7dc3eaf7f24ffaec5c7477ee42af7c05cb471990657014fac2fea1e
languageName: node
linkType: hard
@@ -1900,13 +1913,13 @@ __metadata:
linkType: hard
"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0":
- version: 6.26.0
- resolution: "@codemirror/view@npm:6.26.0"
+ version: 6.26.3
+ resolution: "@codemirror/view@npm:6.26.3"
dependencies:
"@codemirror/state": ^6.4.0
style-mod: ^4.1.0
w3c-keyname: ^2.2.4
- checksum: 93c824334228d0ed81c0db8f58a627b69dad1300f4b64df6e19b487aa36cbd8bf624121092119fc09d49c290cd4e1c88680de62bd138a15f89570832f7addd80
+ checksum: fdee35fb5e0bbba7b6f1a9b43a865880911bbfafd30360da5dda21b35f81ba2d080ff66b6c3d94dbe946b6b7ec98a76208786360b8f030ef10bcb054b816de05
languageName: node
linkType: hard
@@ -2462,46 +2475,46 @@ __metadata:
languageName: node
linkType: hard
-"@fortawesome/fontawesome-common-types@npm:6.5.1":
- version: 6.5.1
- resolution: "@fortawesome/fontawesome-common-types@npm:6.5.1"
- checksum: c597062de8903aae591b652aa03b9b7aaa66e8c71e5950dc34a8b2812851a7f4ad743fba7396bab87d787c5359bb121496769a165bd3399d039dc214434f6f0c
+"@fortawesome/fontawesome-common-types@npm:6.5.2":
+ version: 6.5.2
+ resolution: "@fortawesome/fontawesome-common-types@npm:6.5.2"
+ checksum: 8164f3e16683db5125634a4fbf3db83a5a7366bb830111ffe8538e1b8f98f8fe6dc35609cf2c595a7d6840e27d3fb45b57faf7340e40e98f0d76207fe8f94e79
languageName: node
linkType: hard
"@fortawesome/fontawesome-svg-core@npm:^6.5.1":
- version: 6.5.1
- resolution: "@fortawesome/fontawesome-svg-core@npm:6.5.1"
+ version: 6.5.2
+ resolution: "@fortawesome/fontawesome-svg-core@npm:6.5.2"
dependencies:
- "@fortawesome/fontawesome-common-types": 6.5.1
- checksum: e17f995abe215d288163b2cd009f935c7f96bc896ab4ea7a75de72789d52a1275bd112eeb60cadd63bb20017a05ed765232157079bfb7efda7347a5614e04ce1
+ "@fortawesome/fontawesome-common-types": 6.5.2
+ checksum: f0c2a0800074c5bbc143631b9f3f818b94bd14b8590153058eecc9f548ae0ac78cfca61196880f9b3b79b5d5b5afdb140d05da75542da2087701614c9c043905
languageName: node
linkType: hard
"@fortawesome/free-brands-svg-icons@npm:^6.5.1":
- version: 6.5.1
- resolution: "@fortawesome/free-brands-svg-icons@npm:6.5.1"
+ version: 6.5.2
+ resolution: "@fortawesome/free-brands-svg-icons@npm:6.5.2"
dependencies:
- "@fortawesome/fontawesome-common-types": 6.5.1
- checksum: c29f8a9ad9886c0733d3616b5ea05b08b4943c1b5231c73f31a07e7df36c337e5a51cfe7cc610e623cb2b4a0607e3f82a8a3f46107c4347aa653784489672314
+ "@fortawesome/fontawesome-common-types": 6.5.2
+ checksum: f037c15978da40942e7962f3ddbddf767bc1a5a126952422c786408e4942f7da4daaefe028ba039b56761636903a5916b845547755a8e04e079c6f92e724fd37
languageName: node
linkType: hard
"@fortawesome/free-regular-svg-icons@npm:^6.5.1":
- version: 6.5.1
- resolution: "@fortawesome/free-regular-svg-icons@npm:6.5.1"
+ version: 6.5.2
+ resolution: "@fortawesome/free-regular-svg-icons@npm:6.5.2"
dependencies:
- "@fortawesome/fontawesome-common-types": 6.5.1
- checksum: c1809fae5f3bffff2f06d414f552e38acf385f79bb1b1a8e34b6b9c1138e9e6be7f8ed1503da0f72e225079138b8377f95f279d0079bb04ba8d3bfb3025ec512
+ "@fortawesome/fontawesome-common-types": 6.5.2
+ checksum: e5a6cf019e0252adbfc64d150c47beeb78c90f3d6173df75891a7fd3af45ce187412e498cb21e7d1b0818047febe9ff5a9896d0ca8c279eb5217cb4af63cc71d
languageName: node
linkType: hard
"@fortawesome/free-solid-svg-icons@npm:^6.5.1":
- version: 6.5.1
- resolution: "@fortawesome/free-solid-svg-icons@npm:6.5.1"
+ version: 6.5.2
+ resolution: "@fortawesome/free-solid-svg-icons@npm:6.5.2"
dependencies:
- "@fortawesome/fontawesome-common-types": 6.5.1
- checksum: c544b8389bab4ab375d172feeb334d4a591bd7c594acdcc546b5197f2bcc80be22be119a03994dbe7f13d133c11b41c471b62c92dd318fbe0378202c43c09d7d
+ "@fortawesome/fontawesome-common-types": 6.5.2
+ checksum: f23964434ccbab5114c05bcdabb79d8e801b5be534618db7947d40d4841a3e52177e6145ae5fe59c941d864f70ffcffd0f1e4f0983dfd0048a1f5f3430a00c8c
languageName: node
linkType: hard
@@ -2705,25 +2718,6 @@ __metadata:
languageName: node
linkType: hard
-"@gilbarbara/helpers@npm:^0.9.2":
- version: 0.9.2
- resolution: "@gilbarbara/helpers@npm:0.9.2"
- dependencies:
- "@gilbarbara/types": ^0.2.2
- is-lite: ^1.2.1
- checksum: b6f92e5425bc39a6a7443ef4cc3be356c98e43fff003365f11441ff2564fb6c8db156a09bbccb6c9af47056e00db859ad7236cb1f3c27bbde31970fa01ff6f82
- languageName: node
- linkType: hard
-
-"@gilbarbara/types@npm:^0.2.2":
- version: 0.2.2
- resolution: "@gilbarbara/types@npm:0.2.2"
- dependencies:
- type-fest: ^4.1.0
- checksum: 0c348410efa59a653f0f4f9342950fce08bd86ccc600488fe81ae20b5c040675637569fa9eef9c36d9ed62932c2fa7a996a7ca54b5d40ecbf9738876e269d9d4
- languageName: node
- linkType: hard
-
"@humanwhocodes/config-array@npm:^0.11.14":
version: 0.11.14
resolution: "@humanwhocodes/config-array@npm:0.11.14"
@@ -2743,9 +2737,9 @@ __metadata:
linkType: hard
"@humanwhocodes/object-schema@npm:^2.0.2":
- version: 2.0.2
- resolution: "@humanwhocodes/object-schema@npm:2.0.2"
- checksum: 2fc11503361b5fb4f14714c700c02a3f4c7c93e9acd6b87a29f62c522d90470f364d6161b03d1cc618b979f2ae02aed1106fd29d302695d8927e2fc8165ba8ee
+ version: 2.0.3
+ resolution: "@humanwhocodes/object-schema@npm:2.0.3"
+ checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631
languageName: node
linkType: hard
@@ -3066,9 +3060,9 @@ __metadata:
linkType: hard
"@leichtgewicht/ip-codec@npm:^2.0.1":
- version: 2.0.4
- resolution: "@leichtgewicht/ip-codec@npm:2.0.4"
- checksum: 468de1f04d33de6d300892683d7c8aecbf96d1e2c5fe084f95f816e50a054d45b7c1ebfb141a1447d844b86a948733f6eebd92234da8581c84a1ad4de2946a2d
+ version: 2.0.5
+ resolution: "@leichtgewicht/ip-codec@npm:2.0.5"
+ checksum: 4fcd025d0a923cb6b87b631a83436a693b255779c583158bbeacde6b4dd75b94cc1eba1c9c188de5fc36c218d160524ea08bfe4ef03a056b00ff14126d66f881
languageName: node
linkType: hard
@@ -3111,13 +3105,13 @@ __metadata:
linkType: hard
"@lezer/javascript@npm:^1.0.0":
- version: 1.4.13
- resolution: "@lezer/javascript@npm:1.4.13"
+ version: 1.4.14
+ resolution: "@lezer/javascript@npm:1.4.14"
dependencies:
"@lezer/common": ^1.2.0
"@lezer/highlight": ^1.1.3
"@lezer/lr": ^1.3.0
- checksum: a5e4607fec7671dff66d1f3bfee5a5da7395982f1867e17ac4d8f2d8f223451fb18516ef2699340b148af112176a07e1fcba9e63c5f8397c12895dd0509113d6
+ checksum: 4880026f72bcfcd13f204cc57f1469ba04597304ba79d1331048be1e2b0bcb879e9d4b7e57a6a273f38ac66385740b15a6edb4249ecfcc971b94804298399256
languageName: node
linkType: hard
@@ -3198,15 +3192,15 @@ __metadata:
linkType: hard
"@npmcli/agent@npm:^2.0.0":
- version: 2.2.1
- resolution: "@npmcli/agent@npm:2.2.1"
+ version: 2.2.2
+ resolution: "@npmcli/agent@npm:2.2.2"
dependencies:
agent-base: ^7.1.0
http-proxy-agent: ^7.0.0
https-proxy-agent: ^7.0.1
lru-cache: ^10.0.1
- socks-proxy-agent: ^8.0.1
- checksum: c69aca42dbba393f517bc5777ee872d38dc98ea0e5e93c1f6d62b82b8fecdc177a57ea045f07dda1a770c592384b2dd92a5e79e21e2a7cf51c9159466a8f9c9b
+ socks-proxy-agent: ^8.0.3
+ checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874
languageName: node
linkType: hard
@@ -3492,8 +3486,8 @@ __metadata:
linkType: hard
"@rjsf/antd@npm:^5.15.1":
- version: 5.17.1
- resolution: "@rjsf/antd@npm:5.17.1"
+ version: 5.18.2
+ resolution: "@rjsf/antd@npm:5.18.2"
dependencies:
classnames: ^2.5.1
lodash: ^4.17.21
@@ -3501,18 +3495,18 @@ __metadata:
rc-picker: ^2.7.6
peerDependencies:
"@ant-design/icons": ^4.0.0 || ^5.0.0
- "@rjsf/core": ^5.16.x
- "@rjsf/utils": ^5.16.x
+ "@rjsf/core": ^5.18.x
+ "@rjsf/utils": ^5.18.x
antd: ^4.24.0 || ^5.8.5
dayjs: ^1.8.0
react: ^16.14.0 || >=17
- checksum: f5b0368007a06cf0430b8211a49bc0399d541c04c2f49cfb6da5ef24538f450af651d49684834c1be7a33213a627b6a088fb291629da642c4b0a86424b4c1824
+ checksum: bef08fd4ee6585fbac5c9a4c7eab32a01c09ddebbae556a7ca4198c2a1f160d978d0b80d0d1b14964da245ecb537f0323a334b3c38aad3077a57e588167f760d
languageName: node
linkType: hard
"@rjsf/core@npm:^5.15.1":
- version: 5.17.1
- resolution: "@rjsf/core@npm:5.17.1"
+ version: 5.18.2
+ resolution: "@rjsf/core@npm:5.18.2"
dependencies:
lodash: ^4.17.21
lodash-es: ^4.17.21
@@ -3520,15 +3514,15 @@ __metadata:
nanoid: ^3.3.7
prop-types: ^15.8.1
peerDependencies:
- "@rjsf/utils": ^5.16.x
+ "@rjsf/utils": ^5.18.x
react: ^16.14.0 || >=17
- checksum: 2dead2886a4db152d259d3e85281c1fa5975eeac5f05c2840201ccc583ef1cf9d48c922cd404d515133e140eae7a8fca4aa63ccde0bcfe63d0b3fbe3cd621aed
+ checksum: b8b20bd75090b15b19e176aa766c037f3a7f1a27dbbde07ab095376a85e0027fd441b6e37355c8d3b389393db1f1b27699769034146040864c63a8f110d5e2d7
languageName: node
linkType: hard
"@rjsf/utils@npm:^5.15.1":
- version: 5.17.1
- resolution: "@rjsf/utils@npm:5.17.1"
+ version: 5.18.2
+ resolution: "@rjsf/utils@npm:5.18.2"
dependencies:
json-schema-merge-allof: ^0.8.1
jsonpointer: ^5.0.1
@@ -3537,21 +3531,21 @@ __metadata:
react-is: ^18.2.0
peerDependencies:
react: ^16.14.0 || >=17
- checksum: 83010de66b06f1046b023a0b7d0bf30b5f47b152893c3b12f1f42faa89e7c7d18b2f04fe2e9035e5f63454317f09e6d5753fc014d43b933c8023b71fc50c3acf
+ checksum: 19342ce160f5f2ff1b1448bc61b0767c9b19a3c365fe3dca221c9178dff6b54123bdfe9dd4b0314aa7965011edb0e76029f7e76226936066bfacbaaa619546b4
languageName: node
linkType: hard
"@rjsf/validator-ajv8@npm:^5.15.1":
- version: 5.17.1
- resolution: "@rjsf/validator-ajv8@npm:5.17.1"
+ version: 5.18.2
+ resolution: "@rjsf/validator-ajv8@npm:5.18.2"
dependencies:
ajv: ^8.12.0
ajv-formats: ^2.1.1
lodash: ^4.17.21
lodash-es: ^4.17.21
peerDependencies:
- "@rjsf/utils": ^5.16.x
- checksum: 6135960e979571839822bff2f62b37288e909ca760d363db1ea7056d96fd38d2e0ff9d70df1d8b2a7f6ffb38d37568354acd368e64c9c5dde69111456a46870d
+ "@rjsf/utils": ^5.18.x
+ checksum: 0ed953615b0619a376edfa95ccb891f1aa701e1915a09de562fb1c13a69a4902887359dcf68597f78ffc0a9be9c402c1488ef8ae552be8c8f48aeb7d59d3eae3
languageName: node
linkType: hard
@@ -3788,101 +3782,122 @@ __metadata:
languageName: node
linkType: hard
-"@rollup/rollup-android-arm-eabi@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-android-arm-eabi@npm:4.13.0"
+"@rollup/rollup-android-arm-eabi@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-android-arm-eabi@npm:4.14.3"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
-"@rollup/rollup-android-arm64@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-android-arm64@npm:4.13.0"
+"@rollup/rollup-android-arm64@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-android-arm64@npm:4.14.3"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-darwin-arm64@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-darwin-arm64@npm:4.13.0"
+"@rollup/rollup-darwin-arm64@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-darwin-arm64@npm:4.14.3"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-darwin-x64@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-darwin-x64@npm:4.13.0"
+"@rollup/rollup-darwin-x64@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-darwin-x64@npm:4.14.3"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.13.0"
+"@rollup/rollup-linux-arm-gnueabihf@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.14.3"
+ conditions: os=linux & cpu=arm
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-arm-musleabihf@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.14.3"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm64-gnu@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.13.0"
+"@rollup/rollup-linux-arm64-gnu@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.14.3"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm64-musl@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-linux-arm64-musl@npm:4.13.0"
+"@rollup/rollup-linux-arm64-musl@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-arm64-musl@npm:4.14.3"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-linux-riscv64-gnu@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.13.0"
+"@rollup/rollup-linux-powerpc64le-gnu@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.14.3"
+ conditions: os=linux & cpu=ppc64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-riscv64-gnu@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.14.3"
conditions: os=linux & cpu=riscv64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-x64-gnu@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-linux-x64-gnu@npm:4.13.0"
+"@rollup/rollup-linux-s390x-gnu@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.14.3"
+ conditions: os=linux & cpu=s390x & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@rollup/rollup-linux-x64-gnu@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-x64-gnu@npm:4.14.3"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-x64-musl@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-linux-x64-musl@npm:4.13.0"
+"@rollup/rollup-linux-x64-musl@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-linux-x64-musl@npm:4.14.3"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-win32-arm64-msvc@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.13.0"
+"@rollup/rollup-win32-arm64-msvc@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.14.3"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-win32-ia32-msvc@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.13.0"
+"@rollup/rollup-win32-ia32-msvc@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.14.3"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@rollup/rollup-win32-x64-msvc@npm:4.13.0":
- version: 4.13.0
- resolution: "@rollup/rollup-win32-x64-msvc@npm:4.13.0"
+"@rollup/rollup-win32-x64-msvc@npm:4.14.3":
+ version: 4.14.3
+ resolution: "@rollup/rollup-win32-x64-msvc@npm:4.14.3"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@rushstack/eslint-patch@npm:^1.1.0":
- version: 1.8.0
- resolution: "@rushstack/eslint-patch@npm:1.8.0"
- checksum: 25ba5f5dc8828f9a5499045b28d33c642e3db7cd32b3e5f4fbfa5cc6695c28b3967981d662cf37df4e945ba7f874df9bd559c9b2770a1e7d3b5b36afb45246c3
+ version: 1.10.2
+ resolution: "@rushstack/eslint-patch@npm:1.10.2"
+ checksum: 2bac46e0f662c6b9c1f1d2268e4165a779331b9229eaeeb360852feaecdc5cb4adf8e1a36ac510b3545a83f83de702811b984afe26ec7d4a79e1c0ea708e2bfe
languageName: node
linkType: hard
@@ -4247,8 +4262,8 @@ __metadata:
linkType: hard
"@testing-library/react@npm:^14.1.2":
- version: 14.2.2
- resolution: "@testing-library/react@npm:14.2.2"
+ version: 14.3.1
+ resolution: "@testing-library/react@npm:14.3.1"
dependencies:
"@babel/runtime": ^7.12.5
"@testing-library/dom": ^9.0.0
@@ -4256,7 +4271,7 @@ __metadata:
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- checksum: cb73df588592d9101429f057eaa6f320fc12524d5eb2acc8a16002c1ee2d9422a49e44841003bba42974c9ae1ced6b134f0d647826eca42ab8f19e4592971b16
+ checksum: b057d4c9db5a523acfc24d7bc4665a924ab8d6f252c7f51eecf7dd30f1239413e1134925fd5cc9cbdef80496af64c04e6719b2081f89fe05ba87e8c6305bcc16
languageName: node
linkType: hard
@@ -4428,12 +4443,12 @@ __metadata:
linkType: hard
"@types/eslint@npm:*":
- version: 8.56.6
- resolution: "@types/eslint@npm:8.56.6"
+ version: 8.56.9
+ resolution: "@types/eslint@npm:8.56.9"
dependencies:
"@types/estree": "*"
"@types/json-schema": "*"
- checksum: 960996940c8702c6e9bf221f2927f088d8f6463ad21ae1eb8260c62642ce48097a79a4277d99cb7cafde6939beadbd79610015fdd08b18679e565bcad5fcd36f
+ checksum: c0c033fc724774b791bf97465cfe246814eda1f82460aff2daa64dfce1b1a01626c75f4281d2ab10dcd9176446df0b4bf57e8ac542da6476902e28683e89137d
languageName: node
linkType: hard
@@ -4452,14 +4467,14 @@ __metadata:
linkType: hard
"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33":
- version: 4.17.43
- resolution: "@types/express-serve-static-core@npm:4.17.43"
+ version: 4.19.0
+ resolution: "@types/express-serve-static-core@npm:4.19.0"
dependencies:
"@types/node": "*"
"@types/qs": "*"
"@types/range-parser": "*"
"@types/send": "*"
- checksum: 08e940cae52eb1388a7b5f61d65f028e783add77d1854243ae920a6a2dfb5febb6acaafbcf38be9d678b0411253b9bc325893c463a93302405f24135664ab1e4
+ checksum: 39c09fcb3f61de96ed56d97273874cafe50e6675ac254af4d77014e569e4fdc29d1d0d1dd12e11f008cb9a52785b07c2801c6ba91397965392b20c75ee01fb4e
languageName: node
linkType: hard
@@ -4642,13 +4657,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/mime@npm:*":
- version: 3.0.4
- resolution: "@types/mime@npm:3.0.4"
- checksum: a6139c8e1f705ef2b064d072f6edc01f3c099023ad7c4fce2afc6c2bf0231888202adadbdb48643e8e20da0ce409481a49922e737eca52871b3dc08017455843
- languageName: node
- linkType: hard
-
"@types/mime@npm:^1":
version: 1.3.5
resolution: "@types/mime@npm:1.3.5"
@@ -4687,18 +4695,18 @@ __metadata:
linkType: hard
"@types/node@npm:*":
- version: 20.11.30
- resolution: "@types/node@npm:20.11.30"
+ version: 20.12.7
+ resolution: "@types/node@npm:20.12.7"
dependencies:
undici-types: ~5.26.4
- checksum: 7597767aa3e44b0f1bf62efa522dd17741135f283c11de6a20ead8bb7016fb4999cc30adcd8f2bb29ebb216906c92894346ccd187de170927dc1e212d2c07c81
+ checksum: 7cc979f7e2ca9a339ec71318c3901b9978555257929ef3666987f3e447123bc6dc92afcc89f6347e09e07d602fde7d51bcddea626c23aa2bb74aeaacfd1e1686
languageName: node
linkType: hard
"@types/node@npm:^16.7.13":
- version: 16.18.91
- resolution: "@types/node@npm:16.18.91"
- checksum: f5a85c90cf1fcedbeba9e1364cbc738cb8d6a67eee7912470d0d61174f6a70fa819ac53a1ca282689e623c47ea1a164171c22129f1e1e8741911f0009f2197d1
+ version: 16.18.96
+ resolution: "@types/node@npm:16.18.96"
+ checksum: c5b4c20868e1ecb2e3b975b37aeeb5790b3a4f1472b496fae779ac4f14ba4fb4c0e9ed8e9b6eb389e5a074371056130c9d6506705b144b4f6985ffa844556242
languageName: node
linkType: hard
@@ -4726,9 +4734,9 @@ __metadata:
linkType: hard
"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0":
- version: 15.7.11
- resolution: "@types/prop-types@npm:15.7.11"
- checksum: 7519ff11d06fbf6b275029fe03fff9ec377b4cb6e864cac34d87d7146c7f5a7560fd164bdc1d2dbe00b60c43713631251af1fd3d34d46c69cd354602bc0c7c54
+ version: 15.7.12
+ resolution: "@types/prop-types@npm:15.7.12"
+ checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe
languageName: node
linkType: hard
@@ -4765,11 +4773,11 @@ __metadata:
linkType: hard
"@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.2.18":
- version: 18.2.22
- resolution: "@types/react-dom@npm:18.2.22"
+ version: 18.2.25
+ resolution: "@types/react-dom@npm:18.2.25"
dependencies:
"@types/react": "*"
- checksum: 83bb3ddcd7894f20a9a6cbc2befe75d8b76984734020c455b4c50cad625a4025250d8e1d247ef6264e484d47d5a94f2dd11f77c1dcac6a5de998cb447d85b720
+ checksum: 85f9278d6456c6cdc76da6806a33b472588cdd029b08dde32e8b5636b25a3eae529b4ac2e08c848a3d7ca44e4e97ee9a3df406c96fa0768de935c8eed6e07590
languageName: node
linkType: hard
@@ -4853,23 +4861,22 @@ __metadata:
linkType: hard
"@types/react-virtualized@npm:^9.21.21":
- version: 9.21.29
- resolution: "@types/react-virtualized@npm:9.21.29"
+ version: 9.21.30
+ resolution: "@types/react-virtualized@npm:9.21.30"
dependencies:
"@types/prop-types": "*"
"@types/react": "*"
- checksum: df10e8847e20ac2b4bac647a9bfc027edbc73ff41e298024de7b8588e0d8e9b220ba7d65231fced9ca9eb5284a1d6a478ec934f950f33795baed586bd0e30ea0
+ checksum: 3beb6bc5e0edc4831094a0911ca0a5bc6a53295a54aa530e376dc5af98fb7c51bb11e293c652d56cfbcd7049b6bee880569939960ac48ca4ac6d63983030818e
languageName: node
linkType: hard
"@types/react@npm:^18":
- version: 18.2.67
- resolution: "@types/react@npm:18.2.67"
+ version: 18.2.78
+ resolution: "@types/react@npm:18.2.78"
dependencies:
"@types/prop-types": "*"
- "@types/scheduler": "*"
csstype: ^3.0.2
- checksum: 9e48122b0e8d0ae20601f613aca32289eeb94d55c58ff03a7dc532d80ed289a1ba9715f14b773bd926ccdd63e503717f14264143ef531dc370063abe09dee0b2
+ checksum: f686d735707d46690d05ac76e8c8a619802ea6a4a8f2837981669f7dc13b6984751edc4994242afa3be279df15c67b72a5a658f02a7c5ca16f9a0b4878f1bf18
languageName: node
linkType: hard
@@ -4903,13 +4910,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/scheduler@npm:*":
- version: 0.16.8
- resolution: "@types/scheduler@npm:0.16.8"
- checksum: 6c091b096daa490093bf30dd7947cd28e5b2cd612ec93448432b33f724b162587fed9309a0acc104d97b69b1d49a0f3fc755a62282054d62975d53d7fd13472d
- languageName: node
- linkType: hard
-
"@types/semver@npm:^7.3.12":
version: 7.5.8
resolution: "@types/semver@npm:7.5.8"
@@ -4937,13 +4937,13 @@ __metadata:
linkType: hard
"@types/serve-static@npm:*, @types/serve-static@npm:^1.15.5":
- version: 1.15.5
- resolution: "@types/serve-static@npm:1.15.5"
+ version: 1.15.7
+ resolution: "@types/serve-static@npm:1.15.7"
dependencies:
"@types/http-errors": "*"
- "@types/mime": "*"
"@types/node": "*"
- checksum: 0ff4b3703cf20ba89c9f9e345bc38417860a88e85863c8d6fe274a543220ab7f5f647d307c60a71bb57dc9559f0890a661e8dc771a6ec5ef195d91c8afc4a893
+ "@types/send": "*"
+ checksum: bbbf00dbd84719da2250a462270dc68964006e8d62f41fe3741abd94504ba3688f420a49afb2b7478921a1544d3793183ffa097c5724167da777f4e0c7f1a7d6
languageName: node
linkType: hard
@@ -5648,12 +5648,12 @@ __metadata:
languageName: node
linkType: hard
-"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0":
- version: 7.1.0
- resolution: "agent-base@npm:7.1.0"
+"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1":
+ version: 7.1.1
+ resolution: "agent-base@npm:7.1.1"
dependencies:
debug: ^4.3.4
- checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f
+ checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037
languageName: node
linkType: hard
@@ -5667,16 +5667,6 @@ __metadata:
languageName: node
linkType: hard
-"agora-access-token@npm:^2.0.4":
- version: 2.0.4
- resolution: "agora-access-token@npm:2.0.4"
- dependencies:
- crc-32: 1.2.0
- cuint: 0.2.2
- checksum: 7d91fa01c4ba085f70b8bdac9d296f8a5d29d2dc5a1c5cd995d4fe7bfb557cc3c5223bb0417065e89c584c0dbfaa7ddfdb4b689b0b8fc2459e77ad9d4ff0d52a
- languageName: node
- linkType: hard
-
"agora-rtc-sdk-ng@npm:^4.20.2":
version: 4.20.2
resolution: "agora-rtc-sdk-ng@npm:4.20.2"
@@ -5708,20 +5698,21 @@ __metadata:
linkType: hard
"ahooks@npm:^3.7.6":
- version: 3.7.10
- resolution: "ahooks@npm:3.7.10"
+ version: 3.7.11
+ resolution: "ahooks@npm:3.7.11"
dependencies:
"@babel/runtime": ^7.21.0
dayjs: ^1.9.1
intersection-observer: ^0.12.0
js-cookie: ^2.x.x
lodash: ^4.17.21
+ react-fast-compare: ^3.2.2
resize-observer-polyfill: ^1.5.1
screenfull: ^5.0.0
tslib: ^2.4.1
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
- checksum: 8b5a618a5745f39a9d40e689f8d52938276d03dfda9fcf6c57ff3dec13f7313cb70dc1b5a2d8ca8ddaec650e7045ce2b9bcab5e04f4ebeb41c4ff76318959cd8
+ checksum: 290f78a27a25720060e0e4a0b15a772e58f8e02534a000fa60e8fa2e09958c2ec410d382c51e5d510e511a8563f67fdbbee3ffe20680bb2a34573691ba3dbafc
languageName: node
linkType: hard
@@ -5871,8 +5862,8 @@ __metadata:
linkType: hard
"antd-mobile@npm:^5.34.0":
- version: 5.34.0
- resolution: "antd-mobile@npm:5.34.0"
+ version: 5.35.0
+ resolution: "antd-mobile@npm:5.35.0"
dependencies:
"@floating-ui/dom": ^1.4.2
"@rc-component/mini-decimal": ^1.1.0
@@ -5883,9 +5874,11 @@ __metadata:
antd-mobile-v5-count: ^1.0.1
classnames: ^2.3.2
dayjs: ^1.11.7
- lodash: ^4.17.21
+ deepmerge: ^4.3.1
+ nano-memoize: ^3.0.16
rc-field-form: ~1.27.4
rc-util: ^5.38.1
+ react-fast-compare: ^3.2.2
react-is: ^18.2.0
runes2: ^1.1.2
staged-components: ^1.1.3
@@ -5893,7 +5886,7 @@ __metadata:
use-sync-external-store: ^1.2.0
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
- checksum: b30dae9507a6e0ee2fb15dea9a1700a8a625668604d6656530ceaff178efb96d16674c86080456af51a3ac6ac9d6c78f1abc3d375e1bdf3ffb18464a91af527c
+ checksum: cd8eadff320bad28f2e0ff0de42f0320c42cdfdc73d1ebc2d0d262ad5a4d180acdc3751204c035b43dd0557d55b0fe6d68562175d6b073a7da5cb2f54f5d4815
languageName: node
linkType: hard
@@ -6867,9 +6860,9 @@ __metadata:
linkType: hard
"caniuse-lite@npm:^1.0.30001587":
- version: 1.0.30001599
- resolution: "caniuse-lite@npm:1.0.30001599"
- checksum: d7e619e2e723547b7311ba0ca5134d9cd55df548e93dbedcf8a6e4ec74c7db91969c4272fb1ab2fd94cddeac6a8176ebf05853eb06689d5e76bb97d979a214b0
+ version: 1.0.30001610
+ resolution: "caniuse-lite@npm:1.0.30001610"
+ checksum: 580c7367aafd7e524f4e3f0e8b22ac08d081a4d44ceece211f1758e214df9a87961750fb1e1ee28a2cd2830f0daf3edafe5e1d87bf1eefbbe7c6cf3d00e2979d
languageName: node
linkType: hard
@@ -7105,19 +7098,19 @@ __metadata:
languageName: node
linkType: hard
-"cnchar-types@npm:^3.2.5":
- version: 3.2.5
- resolution: "cnchar-types@npm:3.2.5"
- checksum: fbbe186b03c20c50499d37027ae3fbeea695d4f2bd6144baf55a35e890f892ae59d17e1b6918c13addf5f134c8e28dba490a2ad2a2f79cf0eb542b0b3c3343cb
+"cnchar-types@npm:^3.2.6":
+ version: 3.2.6
+ resolution: "cnchar-types@npm:3.2.6"
+ checksum: 4e9bb0d321ca1c57e4f1655294afb1a9ce0194c1d4fa41b3df134be27e513edd3cece26a85847271bff08ac83d9142059b548da85766e0ec7ed72c7a7f98b5d6
languageName: node
linkType: hard
"cnchar@npm:^3.2.4":
- version: 3.2.5
- resolution: "cnchar@npm:3.2.5"
+ version: 3.2.6
+ resolution: "cnchar@npm:3.2.6"
dependencies:
- cnchar-types: ^3.2.5
- checksum: b12317386642a04b41f791631d7af25cfaa9251572083b102c684a786ac280c61dedcfab31e870acaa1be4498580f1794725ff965c40e9e2fe1fcfde99ef6e1b
+ cnchar-types: ^3.2.6
+ checksum: e51be217e33925662f612f239c9d352bb87c076988ec737b0ff42cfba8ef0704d7ff6271ceb1dda2ad6b631e0e410ac71f1242eac994adb5f2d5dfb19c4d014a
languageName: node
linkType: hard
@@ -7508,18 +7501,6 @@ __metadata:
languageName: node
linkType: hard
-"crc-32@npm:1.2.0":
- version: 1.2.0
- resolution: "crc-32@npm:1.2.0"
- dependencies:
- exit-on-epipe: ~1.0.1
- printj: ~1.1.0
- bin:
- crc32: ./bin/crc32.njs
- checksum: 7bcde8bea262f6629ac3c70e20bdfa3d058dc77091705ce8620513f76f19b41fc273ddd65a716eef9b4e33fbb61ff7f9b266653d214319aef27e4223789c6b9e
- languageName: node
- linkType: hard
-
"crc-32@npm:~1.2.0, crc-32@npm:~1.2.1":
version: 1.2.2
resolution: "crc-32@npm:1.2.2"
@@ -7646,14 +7627,14 @@ __metadata:
linkType: hard
"css-loader@npm:^6.10.0":
- version: 6.10.0
- resolution: "css-loader@npm:6.10.0"
+ version: 6.11.0
+ resolution: "css-loader@npm:6.11.0"
dependencies:
icss-utils: ^5.1.0
postcss: ^8.4.33
- postcss-modules-extract-imports: ^3.0.0
- postcss-modules-local-by-default: ^4.0.4
- postcss-modules-scope: ^3.1.1
+ postcss-modules-extract-imports: ^3.1.0
+ postcss-modules-local-by-default: ^4.0.5
+ postcss-modules-scope: ^3.2.0
postcss-modules-values: ^4.0.0
postcss-value-parser: ^4.2.0
semver: ^7.5.4
@@ -7665,7 +7646,7 @@ __metadata:
optional: true
webpack:
optional: true
- checksum: ee3d62b5f7e4eb24281a22506431e920d07a45bd6ea627731ce583f3c6a846ab8b8b703bace599b9b35256b9e762f9f326d969abb72b69c7e6055eacf39074fd
+ checksum: 5c8d35975a7121334905394e88e28f05df72f037dbed2fb8fec4be5f0b313ae73a13894ba791867d4a4190c35896da84a7fd0c54fb426db55d85ba5e714edbe3
languageName: node
linkType: hard
@@ -7828,13 +7809,6 @@ __metadata:
languageName: node
linkType: hard
-"cuint@npm:0.2.2":
- version: 0.2.2
- resolution: "cuint@npm:0.2.2"
- checksum: b8127a93a7f16ce120ffcb22108014327c9808b258ee20e7dbb4c6740d7cb0f0c12d18a054eb716b0f2470090666abaae8a082d3cd5ef0e94fa447dd155842c4
- languageName: node
- linkType: hard
-
"cytoscape-cose-bilkent@npm:^4.1.0":
version: 4.1.0
resolution: "cytoscape-cose-bilkent@npm:4.1.0"
@@ -8388,14 +8362,14 @@ __metadata:
linkType: hard
"dedent@npm:^1.0.0":
- version: 1.5.1
- resolution: "dedent@npm:1.5.1"
+ version: 1.5.3
+ resolution: "dedent@npm:1.5.3"
peerDependencies:
babel-plugin-macros: ^3.1.0
peerDependenciesMeta:
babel-plugin-macros:
optional: true
- checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a
+ checksum: 045b595557b2a8ea2eb9b0b4623d764e9a87326486fe2b61191b4342ed93dc01245644d8a09f3108a50c0ee7965f1eedd92e4a3a503ed89ea8e810566ea27f9a
languageName: node
linkType: hard
@@ -8757,9 +8731,9 @@ __metadata:
linkType: hard
"dompurify@npm:^3.0.5":
- version: 3.0.11
- resolution: "dompurify@npm:3.0.11"
- checksum: aefb86fbaa2cc6acda1a75ea918f69043689cb726f2932e5c1c3c85904255fd145230d66f0a9493ed27d64d035e990f3a767d99d73b1ae7c0b297782be230658
+ version: 3.1.0
+ resolution: "dompurify@npm:3.1.0"
+ checksum: 06fc76607cd076e394b2ea5479ab6f0407b8fedb6877ae95e94207b878365e5e1cd914055dacce152a5f419818afb8d4cd284b780246cf35363f0747c179a0ba
languageName: node
linkType: hard
@@ -8867,20 +8841,20 @@ __metadata:
linkType: hard
"ejs@npm:^3.1.6":
- version: 3.1.9
- resolution: "ejs@npm:3.1.9"
+ version: 3.1.10
+ resolution: "ejs@npm:3.1.10"
dependencies:
jake: ^10.8.5
bin:
ejs: bin/cli.js
- checksum: af6f10eb815885ff8a8cfacc42c6b6cf87daf97a4884f87a30e0c3271fedd85d76a3a297d9c33a70e735b97ee632887f85e32854b9cdd3a2d97edf931519a35f
+ checksum: ce90637e9c7538663ae023b8a7a380b2ef7cc4096de70be85abf5a3b9641912dde65353211d05e24d56b1f242d71185c6d00e02cb8860701d571786d92c71f05
languageName: node
linkType: hard
"electron-to-chromium@npm:^1.4.668":
- version: 1.4.713
- resolution: "electron-to-chromium@npm:1.4.713"
- checksum: cffeff470a73c47763463fdc8f58854544102b572afe417defca6f511fa88dbe7e0b1720f0e64cf0cf92053aa3b086f5de24899a68a12a346f6b9b74ff1c0768
+ version: 1.4.736
+ resolution: "electron-to-chromium@npm:1.4.736"
+ checksum: dcba6d43ffbc40e5d3decb3a0de67b9721a257fefde4eceac0d75202029c62ace7b377d217f49d1ba9cfbad61f89a14514e85a4de77b7205cee336f2e1f0baee
languageName: node
linkType: hard
@@ -8994,11 +8968,11 @@ __metadata:
linkType: hard
"envinfo@npm:^7.7.3":
- version: 7.11.1
- resolution: "envinfo@npm:7.11.1"
+ version: 7.12.0
+ resolution: "envinfo@npm:7.12.0"
bin:
envinfo: dist/cli.js
- checksum: f3d38ab6bc62388466e86e2f5665f90f238ca349c81bb36b311d908cb5ca96650569b43b308c9dcb6725a222693f6c43a704794e74a68fb445ec5575a90ca05e
+ checksum: 4c83a55768cf8b7e553155c29e7fa7bbdb0fb2c1156208efc373fc030045c6aca5e8e642e96027d3eb0c752156922ea3fca6183d9e13f38507f0e02ec82c23a1
languageName: node
linkType: hard
@@ -9039,8 +9013,8 @@ __metadata:
linkType: hard
"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2":
- version: 1.23.2
- resolution: "es-abstract@npm:1.23.2"
+ version: 1.23.3
+ resolution: "es-abstract@npm:1.23.3"
dependencies:
array-buffer-byte-length: ^1.0.1
arraybuffer.prototype.slice: ^1.0.3
@@ -9081,14 +9055,14 @@ __metadata:
safe-regex-test: ^1.0.3
string.prototype.trim: ^1.2.9
string.prototype.trimend: ^1.0.8
- string.prototype.trimstart: ^1.0.7
+ string.prototype.trimstart: ^1.0.8
typed-array-buffer: ^1.0.2
typed-array-byte-length: ^1.0.1
typed-array-byte-offset: ^1.0.2
- typed-array-length: ^1.0.5
+ typed-array-length: ^1.0.6
unbox-primitive: ^1.0.2
which-typed-array: ^1.1.15
- checksum: cc6410cb58ba90e3f0f84d83297c372ca545017b94e50fd0020119e82b26f0dbf9885c72335f0063b93669393c505712c6fe82bef7ae4d3d29d770c0dbfb1340
+ checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae
languageName: node
linkType: hard
@@ -9148,9 +9122,9 @@ __metadata:
linkType: hard
"es-module-lexer@npm:^1.2.1":
- version: 1.4.2
- resolution: "es-module-lexer@npm:1.4.2"
- checksum: f4cfb9e1227f63c786d1c861a086cad477d2b9b29128b343d20e34ae775341a62f62cea0119976a1db58908c99f50a469ef9f3ec0529de012c6d780b41456912
+ version: 1.5.0
+ resolution: "es-module-lexer@npm:1.5.0"
+ checksum: adbe0772701e226b4b853f758fd89c0bbfe8357ab93babde7b1cdb4f88c3a31460c908cbe578817e241d116cc4fcf569f7c6f29c4fbfa0aadb0def90f1ad4dd2
languageName: node
linkType: hard
@@ -9893,13 +9867,6 @@ __metadata:
languageName: node
linkType: hard
-"exit-on-epipe@npm:~1.0.1":
- version: 1.0.1
- resolution: "exit-on-epipe@npm:1.0.1"
- checksum: e8ab4940416d19f311b3c9226e3725c6c4c6026fe682266ecc0ff33a455d585fe3e4ee757857c7bf1d0491b478cb232b8e395dfb438e65ac87317eda47304c32
- languageName: node
- linkType: hard
-
"exit@npm:^0.1.2":
version: 0.1.2
resolution: "exit@npm:0.1.2"
@@ -10583,17 +10550,17 @@ __metadata:
linkType: hard
"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7":
- version: 10.3.10
- resolution: "glob@npm:10.3.10"
+ version: 10.3.12
+ resolution: "glob@npm:10.3.12"
dependencies:
foreground-child: ^3.1.0
- jackspeak: ^2.3.5
+ jackspeak: ^2.3.6
minimatch: ^9.0.1
- minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
- path-scurry: ^1.10.1
+ minipass: ^7.0.4
+ path-scurry: ^1.10.2
bin:
glob: dist/esm/bin.mjs
- checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3
+ checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6
languageName: node
linkType: hard
@@ -11747,13 +11714,6 @@ __metadata:
languageName: node
linkType: hard
-"is-plain-object@npm:^5.0.0":
- version: 5.0.0
- resolution: "is-plain-object@npm:5.0.0"
- checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c
- languageName: node
- linkType: hard
-
"is-potential-custom-element-name@npm:^1.0.1":
version: 1.0.1
resolution: "is-potential-custom-element-name@npm:1.0.1"
@@ -12052,7 +12012,7 @@ __metadata:
languageName: node
linkType: hard
-"jackspeak@npm:^2.3.5":
+"jackspeak@npm:^2.3.6":
version: 2.3.6
resolution: "jackspeak@npm:2.3.6"
dependencies:
@@ -12880,13 +12840,13 @@ __metadata:
linkType: hard
"katex@npm:^0.16.9":
- version: 0.16.9
- resolution: "katex@npm:0.16.9"
+ version: 0.16.10
+ resolution: "katex@npm:0.16.10"
dependencies:
commander: ^8.3.0
bin:
katex: cli.js
- checksum: 861194dfd4d86505e657f688fb73048d46ac498edafce71199502a35b03c0ecc35ba930c631be79c4a09d90a0d23476673cd52f6bc367c7a161854d64005fa95
+ checksum: 108e9d810e17840c43eef8d46171096f4cc97852bfd1e2dd1890d9b3435846816e3e98678a31d38bd064eb97eea83b18ff224cb65d5f9511b54ce7ff4359b591
languageName: node
linkType: hard
@@ -13417,6 +13377,8 @@ __metadata:
"@fullcalendar/timeline": ^6.1.6
"@types/react": ^18.2.45
"@types/react-dom": ^18.2.18
+ agora-rtc-sdk-ng: ^4.20.2
+ agora-rtm-sdk: ^1.5.1
big.js: ^6.2.1
echarts-extension-gmap: ^1.6.0
echarts-wordcloud: ^2.1.0
@@ -13682,9 +13644,6 @@ __metadata:
"@types/regenerator-runtime": ^0.13.1
"@types/uuid": ^8.3.4
"@vitejs/plugin-react": ^2.2.0
- agora-access-token: ^2.0.4
- agora-rtc-sdk-ng: ^4.20.2
- agora-rtm-sdk: ^1.5.1
antd: 5.13.2
axios: ^1.6.2
buffer: ^6.0.3
@@ -13774,7 +13733,7 @@ __metadata:
languageName: node
linkType: hard
-"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0":
+"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
version: 10.2.0
resolution: "lru-cache@npm:10.2.0"
checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db
@@ -13859,11 +13818,11 @@ __metadata:
linkType: hard
"magic-string@npm:^0.30.1, magic-string@npm:^0.30.2, magic-string@npm:^0.30.3":
- version: 0.30.8
- resolution: "magic-string@npm:0.30.8"
+ version: 0.30.9
+ resolution: "magic-string@npm:0.30.9"
dependencies:
"@jridgewell/sourcemap-codec": ^1.4.15
- checksum: 79922f4500d3932bb587a04440d98d040170decf432edc0f91c0bf8d41db16d364189bf800e334170ac740918feda62cd39dcc170c337dc18050cfcf00a5f232
+ checksum: a97b9a706b39e9569781dcb662b15ab085ca3af8b916cd69d8485e8565108917c17e4eb03b6b1013389387d827bb3025711ebeafe237f742bc95a90708416147
languageName: node
linkType: hard
@@ -13931,11 +13890,11 @@ __metadata:
linkType: hard
"markdown-to-jsx@npm:^7.4.1":
- version: 7.4.4
- resolution: "markdown-to-jsx@npm:7.4.4"
+ version: 7.4.7
+ resolution: "markdown-to-jsx@npm:7.4.7"
peerDependencies:
react: ">= 0.14.0"
- checksum: a901e68a4cf258095133b659a52b35dc7b8025706d74cb363831c664cf0c948d06098b6327dd956f0f429e31d8c7f2a272a39d16c9b370072d1012557f2ade41
+ checksum: bb8a696c8a95dd67ac1eb44255f31cf17e60b6c2ff03bfcd51b5e28da17856c57d7a16da59fda7f3a4eedb01d7e92eeef57a10ff3abd5431e5c80059d4565016
languageName: node
linkType: hard
@@ -14143,11 +14102,11 @@ __metadata:
linkType: hard
"memfs@npm:^4.6.0":
- version: 4.8.0
- resolution: "memfs@npm:4.8.0"
+ version: 4.8.2
+ resolution: "memfs@npm:4.8.2"
dependencies:
tslib: ^2.0.0
- checksum: ac371aad4eb51d1ffaec497e9557d8892cfc910a5bc4fd3e32749c002dca71665e8cf5fe91cc381fff4f38df1df53750ea446cb522eff39f2c59dc5d7fafb14d
+ checksum: ffbc79e89542c57ccdd83f906252313a8354fb050bab6500728a60a321ca2f090e70145c324ff1540b27272a34ff5049b2790e7d5a9af9ec4505fffeca19db8f
languageName: node
linkType: hard
@@ -14672,11 +14631,11 @@ __metadata:
linkType: hard
"minimatch@npm:^9.0.1":
- version: 9.0.3
- resolution: "minimatch@npm:9.0.3"
+ version: 9.0.4
+ resolution: "minimatch@npm:9.0.4"
dependencies:
brace-expansion: ^2.0.1
- checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5
+ checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5
languageName: node
linkType: hard
@@ -14754,7 +14713,7 @@ __metadata:
languageName: node
linkType: hard
-"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3":
+"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4":
version: 7.0.4
resolution: "minipass@npm:7.0.4"
checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21
@@ -14880,6 +14839,13 @@ __metadata:
languageName: node
linkType: hard
+"nano-memoize@npm:^3.0.16":
+ version: 3.0.16
+ resolution: "nano-memoize@npm:3.0.16"
+ checksum: b3ed15450f842eeb08fdf434f3ebbfd5a7da07124f1c77428116c1b88eb42a8f973289d7b17fbd20eec3356b39de3d37d574167e4e0a00977d06a2e616a1bea0
+ languageName: node
+ linkType: hard
+
"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7":
version: 3.3.7
resolution: "nanoid@npm:3.3.7"
@@ -14968,8 +14934,8 @@ __metadata:
linkType: hard
"node-gyp@npm:latest":
- version: 10.0.1
- resolution: "node-gyp@npm:10.0.1"
+ version: 10.1.0
+ resolution: "node-gyp@npm:10.1.0"
dependencies:
env-paths: ^2.2.0
exponential-backoff: ^3.1.1
@@ -14983,7 +14949,7 @@ __metadata:
which: ^4.0.0
bin:
node-gyp: bin/node-gyp.js
- checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f
+ checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60
languageName: node
linkType: hard
@@ -15071,11 +15037,11 @@ __metadata:
linkType: hard
"numbro@npm:^2.3.6":
- version: 2.4.0
- resolution: "numbro@npm:2.4.0"
+ version: 2.5.0
+ resolution: "numbro@npm:2.5.0"
dependencies:
bignumber.js: ^8 || ^9
- checksum: 25400b2dea487ab9033964e15ea2027b4dc32da21f473c04f68dfc23a96ecb9d5c0684af4e817454bced02b69ade790a379307af5c5820d26fb6abc65cb1ffe1
+ checksum: 0d0b228eeb6525c4557c273bb860f1425af53289f3be054ad768576ed83060552ae6e14a0d47debb8c7ce9ecf25685e34f1fd30ead7275948af85f94ecdca595
languageName: node
linkType: hard
@@ -15189,12 +15155,13 @@ __metadata:
linkType: hard
"object.hasown@npm:^1.1.3":
- version: 1.1.3
- resolution: "object.hasown@npm:1.1.3"
+ version: 1.1.4
+ resolution: "object.hasown@npm:1.1.4"
dependencies:
- define-properties: ^1.2.0
- es-abstract: ^1.22.1
- checksum: 76bc17356f6124542fb47e5d0e78d531eafa4bba3fc2d6fc4b1a8ce8b6878912366c0d99f37ce5c84ada8fd79df7aa6ea1214fddf721f43e093ad2df51f27da1
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-object-atoms: ^1.0.0
+ checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6
languageName: node
linkType: hard
@@ -15562,13 +15529,13 @@ __metadata:
languageName: node
linkType: hard
-"path-scurry@npm:^1.10.1":
- version: 1.10.1
- resolution: "path-scurry@npm:1.10.1"
+"path-scurry@npm:^1.10.2":
+ version: 1.10.2
+ resolution: "path-scurry@npm:1.10.2"
dependencies:
- lru-cache: ^9.1.1 || ^10.0.0
+ lru-cache: ^10.2.0
minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
- checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90
+ checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8
languageName: node
linkType: hard
@@ -15705,36 +15672,36 @@ __metadata:
languageName: node
linkType: hard
-"postcss-modules-extract-imports@npm:^3.0.0":
- version: 3.0.0
- resolution: "postcss-modules-extract-imports@npm:3.0.0"
+"postcss-modules-extract-imports@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "postcss-modules-extract-imports@npm:3.1.0"
peerDependencies:
postcss: ^8.1.0
- checksum: 4b65f2f1382d89c4bc3c0a1bdc5942f52f3cb19c110c57bd591ffab3a5fee03fcf831604168205b0c1b631a3dce2255c70b61aaae3ef39d69cd7eb450c2552d2
+ checksum: b9192e0f4fb3d19431558be6f8af7ca45fc92baaad9b2778d1732a5880cd25c3df2074ce5484ae491e224f0d21345ffc2d419bd51c25b019af76d7a7af88c17f
languageName: node
linkType: hard
-"postcss-modules-local-by-default@npm:^4.0.4":
- version: 4.0.4
- resolution: "postcss-modules-local-by-default@npm:4.0.4"
+"postcss-modules-local-by-default@npm:^4.0.5":
+ version: 4.0.5
+ resolution: "postcss-modules-local-by-default@npm:4.0.5"
dependencies:
icss-utils: ^5.0.0
postcss-selector-parser: ^6.0.2
postcss-value-parser: ^4.1.0
peerDependencies:
postcss: ^8.1.0
- checksum: 578b955b0773147890caa88c30b10dfc849c5b1412a47ad51751890dba16fca9528c3ab00a19b186a8c2c150c2d08e2ce64d3d907800afee1f37c6d38252e365
+ checksum: ca9b01f4a0a3dfb33e016299e2dfb7e85c3123292f7aec2efc0c6771b9955648598bfb4c1561f7ee9732fb27fb073681233661b32eef98baab43743f96735452
languageName: node
linkType: hard
-"postcss-modules-scope@npm:^3.1.1":
- version: 3.1.1
- resolution: "postcss-modules-scope@npm:3.1.1"
+"postcss-modules-scope@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "postcss-modules-scope@npm:3.2.0"
dependencies:
postcss-selector-parser: ^6.0.4
peerDependencies:
postcss: ^8.1.0
- checksum: 9e9d23abb0babc7fa243be65704d72a5a9ceb2bded4dbaef96a88210d468b03c8c3158c197f4e22300c851f08c6fdddd6ebe65f44e4c34448b45b8a2e063a16d
+ checksum: 2ffe7e98c1fa993192a39c8dd8ade93fc4f59fbd1336ce34fcedaee0ee3bafb29e2e23fb49189256895b30e4f21af661c6a6a16ef7b17ae2c859301e4a4459ae
languageName: node
linkType: hard
@@ -15777,7 +15744,7 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:^8.4.27, postcss@npm:^8.4.33, postcss@npm:^8.4.36":
+"postcss@npm:^8.4.27, postcss@npm:^8.4.33, postcss@npm:^8.4.38":
version: 8.4.38
resolution: "postcss@npm:8.4.38"
dependencies:
@@ -15840,15 +15807,6 @@ __metadata:
languageName: node
linkType: hard
-"printj@npm:~1.1.0":
- version: 1.1.2
- resolution: "printj@npm:1.1.2"
- bin:
- printj: ./bin/printj.njs
- checksum: 1c0c66844545415e339356ad62009cdc467819817b1e0341aba428087a1414d46b84089edb4e77ef24705829f8aae6349724b9c7bd89d8690302b2de7a89b315
- languageName: node
- linkType: hard
-
"proc-log@npm:^3.0.0":
version: 3.0.0
resolution: "proc-log@npm:3.0.0"
@@ -15911,9 +15869,9 @@ __metadata:
linkType: hard
"property-information@npm:^6.0.0":
- version: 6.4.1
- resolution: "property-information@npm:6.4.1"
- checksum: d9eece5f14b6fea9e6a1fa65fba88554956a58825eb9a5c8327bffee06bcc265117eaeae901871e8e8a5caec8d5e05ce39ab6872d5cef3b49a6f07815b6ef285
+ version: 6.5.0
+ resolution: "property-information@npm:6.5.0"
+ checksum: 6e55664e2f64083b715011e5bafaa1e694faf36986c235b0907e95d09259cc37c38382e3cc94a4c3f56366e05336443db12c8a0f0968a8c0a1b1416eebfc8f53
languageName: node
linkType: hard
@@ -16401,8 +16359,8 @@ __metadata:
linkType: hard
"rc-picker@npm:~3.14.6":
- version: 3.14.6
- resolution: "rc-picker@npm:3.14.6"
+ version: 3.14.7
+ resolution: "rc-picker@npm:3.14.7"
dependencies:
"@babel/runtime": ^7.10.1
"@rc-component/trigger": ^1.5.0
@@ -16424,7 +16382,7 @@ __metadata:
optional: true
moment:
optional: true
- checksum: e87914c6ffbbcf760b56080d8bf504cf9323885378a6769abcf9a62bb1325f7a9d534c065a683ab1d30269a26a81ce11a008d01aacc800359e3c7a4fbda66e17
+ checksum: c6e8cd6f330dd05c736b59bdfae599a76068bf2a6ab4afe121b39f53653622e40929032fa3381ad59152b308a6d5fafdeecffe580bb4c9c3413776203fc99188
languageName: node
linkType: hard
@@ -16760,7 +16718,7 @@ __metadata:
languageName: node
linkType: hard
-"react-fast-compare@npm:^3.0.1, react-fast-compare@npm:^3.1.1":
+"react-fast-compare@npm:^3.0.1, react-fast-compare@npm:^3.1.1, react-fast-compare@npm:^3.2.2":
version: 3.2.2
resolution: "react-fast-compare@npm:3.2.2"
checksum: 2071415b4f76a3e6b55c84611c4d24dcb12ffc85811a2840b5a3f1ff2d1a99be1020d9437ee7c6e024c9f4cbb84ceb35e48cf84f28fcb00265ad2dfdd3947704
@@ -16857,11 +16815,10 @@ __metadata:
linkType: hard
"react-joyride@npm:^2.4.0":
- version: 2.8.0
- resolution: "react-joyride@npm:2.8.0"
+ version: 2.8.1
+ resolution: "react-joyride@npm:2.8.1"
dependencies:
"@gilbarbara/deep-equal": ^0.3.1
- "@gilbarbara/helpers": ^0.9.2
deep-diff: ^1.0.2
deepmerge: ^4.3.1
is-lite: ^1.2.1
@@ -16871,11 +16828,11 @@ __metadata:
scroll: ^3.0.1
scrollparent: ^2.1.0
tree-changes: ^0.11.2
- type-fest: ^4.12.0
+ type-fest: ^4.15.0
peerDependencies:
react: 15 - 18
react-dom: 15 - 18
- checksum: b514fca2f3dad79dc7b3f2802b0f8c16230102a196b7734430682ee263a73c3fab2d4e8ebd2763f9638d8150decd474cbacb3b2644883049dc2f8df5bc88012c
+ checksum: 555394e3f9f2cd91602a8f639c28a9f881d2c8ea82ad93054fb9548cf407da3e17c23e4fc44bca04b4d0acd9955cb3886a61c5f4ebdcee6c512737272a27b38e
languageName: node
linkType: hard
@@ -16928,8 +16885,8 @@ __metadata:
linkType: hard
"react-player@npm:^2.11.0":
- version: 2.15.1
- resolution: "react-player@npm:2.15.1"
+ version: 2.16.0
+ resolution: "react-player@npm:2.16.0"
dependencies:
deepmerge: ^4.0.0
load-script: ^1.0.0
@@ -16938,7 +16895,7 @@ __metadata:
react-fast-compare: ^3.0.1
peerDependencies:
react: ">=16.6.0"
- checksum: 8e065dd7effcbec0bb770393b676145aa8bd46e4d2f9c46b1c15f5c1dff3f1a334f619aa3cc8525f82e6772b773fb9e96745d5e835b5264cd9ce1166ed9e1492
+ checksum: 9cc78a6099fdf06bbb2e1db75aa57461fb152eb6207a00e6e026dde0675b6f4ad02a45cab7b6c18a9f19e001bf9695a5be0cbe7606eca57a0af501ced717fbe9
languageName: node
linkType: hard
@@ -17955,22 +17912,25 @@ __metadata:
linkType: hard
"rollup@npm:^4.13.0":
- version: 4.13.0
- resolution: "rollup@npm:4.13.0"
- dependencies:
- "@rollup/rollup-android-arm-eabi": 4.13.0
- "@rollup/rollup-android-arm64": 4.13.0
- "@rollup/rollup-darwin-arm64": 4.13.0
- "@rollup/rollup-darwin-x64": 4.13.0
- "@rollup/rollup-linux-arm-gnueabihf": 4.13.0
- "@rollup/rollup-linux-arm64-gnu": 4.13.0
- "@rollup/rollup-linux-arm64-musl": 4.13.0
- "@rollup/rollup-linux-riscv64-gnu": 4.13.0
- "@rollup/rollup-linux-x64-gnu": 4.13.0
- "@rollup/rollup-linux-x64-musl": 4.13.0
- "@rollup/rollup-win32-arm64-msvc": 4.13.0
- "@rollup/rollup-win32-ia32-msvc": 4.13.0
- "@rollup/rollup-win32-x64-msvc": 4.13.0
+ version: 4.14.3
+ resolution: "rollup@npm:4.14.3"
+ dependencies:
+ "@rollup/rollup-android-arm-eabi": 4.14.3
+ "@rollup/rollup-android-arm64": 4.14.3
+ "@rollup/rollup-darwin-arm64": 4.14.3
+ "@rollup/rollup-darwin-x64": 4.14.3
+ "@rollup/rollup-linux-arm-gnueabihf": 4.14.3
+ "@rollup/rollup-linux-arm-musleabihf": 4.14.3
+ "@rollup/rollup-linux-arm64-gnu": 4.14.3
+ "@rollup/rollup-linux-arm64-musl": 4.14.3
+ "@rollup/rollup-linux-powerpc64le-gnu": 4.14.3
+ "@rollup/rollup-linux-riscv64-gnu": 4.14.3
+ "@rollup/rollup-linux-s390x-gnu": 4.14.3
+ "@rollup/rollup-linux-x64-gnu": 4.14.3
+ "@rollup/rollup-linux-x64-musl": 4.14.3
+ "@rollup/rollup-win32-arm64-msvc": 4.14.3
+ "@rollup/rollup-win32-ia32-msvc": 4.14.3
+ "@rollup/rollup-win32-x64-msvc": 4.14.3
"@types/estree": 1.0.5
fsevents: ~2.3.2
dependenciesMeta:
@@ -17984,12 +17944,18 @@ __metadata:
optional: true
"@rollup/rollup-linux-arm-gnueabihf":
optional: true
+ "@rollup/rollup-linux-arm-musleabihf":
+ optional: true
"@rollup/rollup-linux-arm64-gnu":
optional: true
"@rollup/rollup-linux-arm64-musl":
optional: true
+ "@rollup/rollup-linux-powerpc64le-gnu":
+ optional: true
"@rollup/rollup-linux-riscv64-gnu":
optional: true
+ "@rollup/rollup-linux-s390x-gnu":
+ optional: true
"@rollup/rollup-linux-x64-gnu":
optional: true
"@rollup/rollup-linux-x64-musl":
@@ -18004,7 +17970,7 @@ __metadata:
optional: true
bin:
rollup: dist/bin/rollup
- checksum: c2c35bee0a71ceb0df37c170c2b73a500bf9ebdffb747487d77831348603d50dcfcdd9d0a937362d3a87edda559c9d1e017fba2d75f05f0c594634d9b8dde9a4
+ checksum: f5077037e8514e330db1451a92bf6d9d15b8634698b2e60f56d8d7f30df11cdacfcd1b350a1598ed6516383b5ed2bf3e5a0685e72f81bb2fdb4e630491d09b67
languageName: node
linkType: hard
@@ -18569,24 +18535,24 @@ __metadata:
languageName: node
linkType: hard
-"socks-proxy-agent@npm:^8.0.1":
- version: 8.0.2
- resolution: "socks-proxy-agent@npm:8.0.2"
+"socks-proxy-agent@npm:^8.0.3":
+ version: 8.0.3
+ resolution: "socks-proxy-agent@npm:8.0.3"
dependencies:
- agent-base: ^7.0.2
+ agent-base: ^7.1.1
debug: ^4.3.4
socks: ^2.7.1
- checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d
+ checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5
languageName: node
linkType: hard
"socks@npm:^2.7.1":
- version: 2.8.1
- resolution: "socks@npm:2.8.1"
+ version: 2.8.3
+ resolution: "socks@npm:2.8.3"
dependencies:
ip-address: ^9.0.5
smart-buffer: ^4.2.0
- checksum: 29586d42e9c36c5016632b2bcb6595e3adfbcb694b3a652c51bc8741b079c5ec37bdd5675a1a89a1620078c8137208294991fabb50786f92d47759a725b2b62e
+ checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd
languageName: node
linkType: hard
@@ -18938,14 +18904,14 @@ __metadata:
languageName: node
linkType: hard
-"string.prototype.trimstart@npm:^1.0.7":
- version: 1.0.7
- resolution: "string.prototype.trimstart@npm:1.0.7"
+"string.prototype.trimstart@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "string.prototype.trimstart@npm:1.0.8"
dependencies:
- call-bind: ^1.0.2
- define-properties: ^1.2.0
- es-abstract: ^1.22.1
- checksum: 13d0c2cb0d5ff9e926fa0bec559158b062eed2b68cd5be777ffba782c96b2b492944e47057274e064549b94dd27cf81f48b27a31fee8af5b574cff253e7eb613
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96
languageName: node
linkType: hard
@@ -19203,8 +19169,8 @@ __metadata:
linkType: hard
"tar@npm:^6.1.11, tar@npm:^6.1.2":
- version: 6.2.0
- resolution: "tar@npm:6.2.0"
+ version: 6.2.1
+ resolution: "tar@npm:6.2.1"
dependencies:
chownr: ^2.0.0
fs-minipass: ^2.0.0
@@ -19212,7 +19178,7 @@ __metadata:
minizlib: ^2.1.1
mkdirp: ^1.0.3
yallist: ^4.0.0
- checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c
+ checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c
languageName: node
linkType: hard
@@ -19256,8 +19222,8 @@ __metadata:
linkType: hard
"terser@npm:^5.0.0, terser@npm:^5.10.0, terser@npm:^5.26.0":
- version: 5.29.2
- resolution: "terser@npm:5.29.2"
+ version: 5.30.3
+ resolution: "terser@npm:5.30.3"
dependencies:
"@jridgewell/source-map": ^0.3.3
acorn: ^8.8.2
@@ -19265,7 +19231,7 @@ __metadata:
source-map-support: ~0.5.20
bin:
terser: bin/terser
- checksum: 2310d04e530903ed4da6168c4c90ab65965c5f1f8919733772119ff560e9e9be2def070c9659f7d96f2e28489c4378241c4cef1917f05b9524587436fdd5a802
+ checksum: 8c680ed32a948f806fade0969c52aab94b6de174e4a78610f5d3abf9993b161eb19b88b2ceadff09b153858727c02deb6709635e4bfbd519f67d54e0394e2983
languageName: node
linkType: hard
@@ -19687,10 +19653,10 @@ __metadata:
languageName: node
linkType: hard
-"type-fest@npm:^4.1.0, type-fest@npm:^4.12.0":
- version: 4.13.1
- resolution: "type-fest@npm:4.13.1"
- checksum: 53959d57d64910a493ec4afb2e98149b6deac73ede4774af15335e7016527524646acd45af1738a0fe7b654c3f655ca6bfe88cc9adc9e8f859548356c6e5a0ec
+"type-fest@npm:^4.15.0":
+ version: 4.15.0
+ resolution: "type-fest@npm:4.15.0"
+ checksum: 8da2b8c4556a6bbafd79c0d50b4f3ba6526942aead9c1687038980276eee72b95a1d195bc6f1408e0ebf96ebfbe9d33436b506b35ed4b68f14f8b3ff56753850
languageName: node
linkType: hard
@@ -19742,9 +19708,9 @@ __metadata:
languageName: node
linkType: hard
-"typed-array-length@npm:^1.0.5":
- version: 1.0.5
- resolution: "typed-array-length@npm:1.0.5"
+"typed-array-length@npm:^1.0.6":
+ version: 1.0.6
+ resolution: "typed-array-length@npm:1.0.6"
dependencies:
call-bind: ^1.0.7
for-each: ^0.3.3
@@ -19752,7 +19718,7 @@ __metadata:
has-proto: ^1.0.3
is-typed-array: ^1.1.13
possible-typed-array-names: ^1.0.0
- checksum: 82f5b666155cff1b345a1f3ab018d3f7667990f525435e4c8448cc094ab0f8ea283bb7cbde4d7bc82ea0b9b1072523bf31e86620d72615951d7fa9ccb4f42dfa
+ checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c
languageName: node
linkType: hard
@@ -20420,8 +20386,8 @@ __metadata:
linkType: hard
"vite@npm:^4.5.2":
- version: 4.5.2
- resolution: "vite@npm:4.5.2"
+ version: 4.5.3
+ resolution: "vite@npm:4.5.3"
dependencies:
esbuild: ^0.18.10
fsevents: ~2.3.2
@@ -20455,17 +20421,17 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
- checksum: 9d1f84f703c2660aced34deee7f309278ed368880f66e9570ac115c793d91f7fffb80ab19c602b3c8bc1341fe23437d86a3fcca2a9ef82f7ef0cdac5a40d0c86
+ checksum: fd3f512ce48ca2a1fe60ad0376283b832de9272725fdbc65064ae9248f792de87b0f27a89573115e23e26784800daca329f8a9234d298ba6f60e808a9c63883c
languageName: node
linkType: hard
"vite@npm:^5.0.12":
- version: 5.2.2
- resolution: "vite@npm:5.2.2"
+ version: 5.2.8
+ resolution: "vite@npm:5.2.8"
dependencies:
esbuild: ^0.20.1
fsevents: ~2.3.3
- postcss: ^8.4.36
+ postcss: ^8.4.38
rollup: ^4.13.0
peerDependencies:
"@types/node": ^18.0.0 || >=20.0.0
@@ -20495,7 +20461,7 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
- checksum: ef20480a0d4145f05378d33d295917995679c75205c19872346f18ad847cca8ac90794b7cfb280f787c0db60a90afcc1ae2c2e5ccedfe4751fb4a3c0ff07be69
+ checksum: c0a77271b548fce443af59a383939924ffcba8e6d0ba6ecb2e481d0ec2318465d2116ce9317599c448e6d6d8af11a67b8efc5b52cb1deab37d2e83311ac4f1b5
languageName: node
linkType: hard
@@ -20680,8 +20646,8 @@ __metadata:
linkType: hard
"webpack-bundle-analyzer@npm:^4.10.1":
- version: 4.10.1
- resolution: "webpack-bundle-analyzer@npm:4.10.1"
+ version: 4.10.2
+ resolution: "webpack-bundle-analyzer@npm:4.10.2"
dependencies:
"@discoveryjs/json-ext": 0.5.7
acorn: ^8.0.4
@@ -20691,14 +20657,13 @@ __metadata:
escape-string-regexp: ^4.0.0
gzip-size: ^6.0.0
html-escaper: ^2.0.2
- is-plain-object: ^5.0.0
opener: ^1.5.2
picocolors: ^1.0.0
sirv: ^2.0.3
ws: ^7.3.1
bin:
webpack-bundle-analyzer: lib/bin/analyzer.js
- checksum: 77f48f10a493b1cc95674526472978a2de32412ddbf556bd3903738f14890611426f19477352993efe5a9fd6ca16711eb912d986f2221b17ba6eeca1b6f71fb6
+ checksum: 4f0275e7d87bb6203a618ca5d2d4953943979d986fa2b91be1bf1ad0bcd22bec13398803273d11699f9fbcf106896311208a72d63fe5f8a47b687a226e598dc1
languageName: node
linkType: hard
@@ -20735,8 +20700,8 @@ __metadata:
linkType: hard
"webpack-dev-middleware@npm:^7.1.0":
- version: 7.1.1
- resolution: "webpack-dev-middleware@npm:7.1.1"
+ version: 7.2.1
+ resolution: "webpack-dev-middleware@npm:7.2.1"
dependencies:
colorette: ^2.0.10
memfs: ^4.6.0
@@ -20749,7 +20714,7 @@ __metadata:
peerDependenciesMeta:
webpack:
optional: true
- checksum: 54b748ba354649bb5d80862f8828a05e75c0037a64ef3228722ebff1a6a9d5498467edc1a9fe210ed0ff8f37b2d32d2271273d8b6576f8249371881f14a309ad
+ checksum: bb8c75f7ceabc13ee2c3bc9648190e05a0a8c6d40b940ef72b09ea858a63d16bcb434b49995f1025125a1c3a1c8d40274beb5d26ef2fb1458b19e7f6fe3a91fe
languageName: node
linkType: hard
From 7292e25a1db0f7d8d5e2f9cc38d0873f04297f8d Mon Sep 17 00:00:00 2001
From: freddysundowner
Date: Sat, 20 Apr 2024 12:47:27 +0300
Subject: [PATCH 10/16] fixed meeting bug
---
.../lowcoder/public/lowcoder-comps-0.0.29.tgz | Bin 0 -> 2775785 bytes
.../lowcoder/public/package/02596f6c.js | 1579 +
.../lowcoder/public/package/0738aeda.js | 208 +
.../lowcoder/public/package/08856db2.js | 162418 +++++++++++++++
.../lowcoder/public/package/0933b788.js | 818 +
.../lowcoder/public/package/0c155f84.js | 455 +
.../lowcoder/public/package/0ddaa2bc.js | 796 +
.../lowcoder/public/package/0fddf2f2.js | 64 +
.../lowcoder/public/package/116e77a5.js | 927 +
.../lowcoder/public/package/18068d52.js | 1127 +
.../lowcoder/public/package/1a7d2804.js | 220 +
.../lowcoder/public/package/256b619e.js | 92 +
.../lowcoder/public/package/289514c9.js | 8 +
.../lowcoder/public/package/2d256667.js | 2501 +
.../lowcoder/public/package/2ff2c7a6.js | 6 +
.../lowcoder/public/package/2ff7471d.js | 9 +
.../lowcoder/public/package/32cceee9.js | 1276 +
.../lowcoder/public/package/35fb67fd.js | 19104 ++
.../lowcoder/public/package/4504d077.js | 881 +
.../lowcoder/public/package/47848c42.js | 11636 ++
.../lowcoder/public/package/519a1dac.js | 1269 +
.../lowcoder/public/package/56525b94.js | 915 +
.../lowcoder/public/package/5f94a727.js | 819 +
.../lowcoder/public/package/60619617.js | 804 +
.../lowcoder/public/package/62954dbd.js | 769 +
.../lowcoder/public/package/666097a3.js | 1536 +
.../lowcoder/public/package/691304fa.js | 1102 +
.../lowcoder/public/package/728928d2.js | 1284 +
.../lowcoder/public/package/79929275.js | 25 +
.../lowcoder/public/package/7ca39633.js | 391 +
.../lowcoder/public/package/85051678.js | 5 +
.../lowcoder/public/package/888e22ae.js | 960 +
.../lowcoder/public/package/8de27e61.js | 48428 +++++
.../lowcoder/public/package/8e8be6e8.js | 34 +
.../lowcoder/public/package/92e85b65.js | 65 +
.../lowcoder/public/package/cb6c34e7.js | 268 +
.../lowcoder/public/package/dcbd4e73.js | 319 +
.../lowcoder/public/package/e158889d.js | 16582 ++
.../lowcoder/public/package/e1e81803.js | 505 +
.../lowcoder/public/package/e934239f.js | 2284 +
.../lowcoder/public/package/eb460319.js | 86 +
.../lowcoder/public/package/f434312e.js | 1089 +
.../lowcoder/public/package/f69b998c.js | 2967 +
.../lowcoder/public/package/f9637058.js | 16 +
.../lowcoder/public/package/f9d0127a.js | 447 +
.../lowcoder/public/package/fbf3e70e.js | 237 +
.../public/package/icons/icon-chart.svg | 15 +
.../package/icons/icon-comp-calendar.svg | 22 +
.../public/package/icons/mermaidchart.svg | 18 +
.../packages/lowcoder/public/package/index.js | 5 +
.../lowcoder/public/package/package.json | 108 +
.../comps/comps/layout/mobileTabLayout.tsx | 2 +-
.../lowcoder/src/comps/comps/tabs/index.tsx | 2 +-
client/packages/lowcoder/src/index.sdk.ts | 2 +
54 files changed, 287503 insertions(+), 2 deletions(-)
create mode 100644 client/packages/lowcoder/public/lowcoder-comps-0.0.29.tgz
create mode 100644 client/packages/lowcoder/public/package/02596f6c.js
create mode 100644 client/packages/lowcoder/public/package/0738aeda.js
create mode 100644 client/packages/lowcoder/public/package/08856db2.js
create mode 100644 client/packages/lowcoder/public/package/0933b788.js
create mode 100644 client/packages/lowcoder/public/package/0c155f84.js
create mode 100644 client/packages/lowcoder/public/package/0ddaa2bc.js
create mode 100644 client/packages/lowcoder/public/package/0fddf2f2.js
create mode 100644 client/packages/lowcoder/public/package/116e77a5.js
create mode 100644 client/packages/lowcoder/public/package/18068d52.js
create mode 100644 client/packages/lowcoder/public/package/1a7d2804.js
create mode 100644 client/packages/lowcoder/public/package/256b619e.js
create mode 100644 client/packages/lowcoder/public/package/289514c9.js
create mode 100644 client/packages/lowcoder/public/package/2d256667.js
create mode 100644 client/packages/lowcoder/public/package/2ff2c7a6.js
create mode 100644 client/packages/lowcoder/public/package/2ff7471d.js
create mode 100644 client/packages/lowcoder/public/package/32cceee9.js
create mode 100644 client/packages/lowcoder/public/package/35fb67fd.js
create mode 100644 client/packages/lowcoder/public/package/4504d077.js
create mode 100644 client/packages/lowcoder/public/package/47848c42.js
create mode 100644 client/packages/lowcoder/public/package/519a1dac.js
create mode 100644 client/packages/lowcoder/public/package/56525b94.js
create mode 100644 client/packages/lowcoder/public/package/5f94a727.js
create mode 100644 client/packages/lowcoder/public/package/60619617.js
create mode 100644 client/packages/lowcoder/public/package/62954dbd.js
create mode 100644 client/packages/lowcoder/public/package/666097a3.js
create mode 100644 client/packages/lowcoder/public/package/691304fa.js
create mode 100644 client/packages/lowcoder/public/package/728928d2.js
create mode 100644 client/packages/lowcoder/public/package/79929275.js
create mode 100644 client/packages/lowcoder/public/package/7ca39633.js
create mode 100644 client/packages/lowcoder/public/package/85051678.js
create mode 100644 client/packages/lowcoder/public/package/888e22ae.js
create mode 100644 client/packages/lowcoder/public/package/8de27e61.js
create mode 100644 client/packages/lowcoder/public/package/8e8be6e8.js
create mode 100644 client/packages/lowcoder/public/package/92e85b65.js
create mode 100644 client/packages/lowcoder/public/package/cb6c34e7.js
create mode 100644 client/packages/lowcoder/public/package/dcbd4e73.js
create mode 100644 client/packages/lowcoder/public/package/e158889d.js
create mode 100644 client/packages/lowcoder/public/package/e1e81803.js
create mode 100644 client/packages/lowcoder/public/package/e934239f.js
create mode 100644 client/packages/lowcoder/public/package/eb460319.js
create mode 100644 client/packages/lowcoder/public/package/f434312e.js
create mode 100644 client/packages/lowcoder/public/package/f69b998c.js
create mode 100644 client/packages/lowcoder/public/package/f9637058.js
create mode 100644 client/packages/lowcoder/public/package/f9d0127a.js
create mode 100644 client/packages/lowcoder/public/package/fbf3e70e.js
create mode 100644 client/packages/lowcoder/public/package/icons/icon-chart.svg
create mode 100644 client/packages/lowcoder/public/package/icons/icon-comp-calendar.svg
create mode 100644 client/packages/lowcoder/public/package/icons/mermaidchart.svg
create mode 100644 client/packages/lowcoder/public/package/index.js
create mode 100644 client/packages/lowcoder/public/package/package.json
diff --git a/client/packages/lowcoder/public/lowcoder-comps-0.0.29.tgz b/client/packages/lowcoder/public/lowcoder-comps-0.0.29.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..179fd169fa7f10238806d11991f55d904353543b
GIT binary patch
literal 2775785
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 |