From 37a901ab680fcda2c2189db711191c9e0170f55a Mon Sep 17 00:00:00 2001 From: Imtanan Aziz Toor Date: Wed, 14 Feb 2024 21:18:20 +0500 Subject: [PATCH 1/5] font style property created and added in textDisplay component --- client/package.json | 1 + .../lowcoder/src/comps/comps/textComp.tsx | 9 +- .../src/comps/controls/styleControl.tsx | 471 +++++++++--------- .../comps/controls/styleControlConstants.tsx | 230 ++++----- .../packages/lowcoder/src/i18n/locales/en.ts | 1 + 5 files changed, 371 insertions(+), 341 deletions(-) diff --git a/client/package.json b/client/package.json index 2f49baf8c..6e1dff2dc 100644 --- a/client/package.json +++ b/client/package.json @@ -11,6 +11,7 @@ }, "scripts": { "start": "yarn workspace lowcoder start", + "start-win":"LOWCODER_API_SERVICE_URL=http://localhost:3000 yarn start", "start:ee": "REACT_APP_EDITION=enterprise yarn workspace lowcoder start", "start:ee-global": "REACT_APP_EDITION=enterprise-global yarn workspace lowcoder start", "build": "yarn node ./scripts/build.js", diff --git a/client/packages/lowcoder/src/comps/comps/textComp.tsx b/client/packages/lowcoder/src/comps/comps/textComp.tsx index 671e67354..4359166dd 100644 --- a/client/packages/lowcoder/src/comps/comps/textComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/textComp.tsx @@ -29,6 +29,7 @@ const getStyle = (style: TextStyleType) => { font-size: ${style.textSize} !important; font-weight: ${style.textWeight} !important; font-family: ${style.fontFamily} !important; + font-style:${style.fontStyle} !important; background-color: ${style.background}; .markdown-body a { color: ${style.links}; @@ -111,7 +112,7 @@ const VerticalAlignmentOptions = [ ] as const; -let TextTmpComp = (function () { +let TextTmpComp = (function () { const childrenMap = { text: stringExposingStateControl( @@ -123,7 +124,7 @@ let TextTmpComp = (function () { horizontalAlignment: alignWithJustifyControl(), verticalAlignment: dropdownControl(VerticalAlignmentOptions, "center"), style: styleControl(TextStyle), - margin: MarginControl, + margin: MarginControl, padding: PaddingControl, }; return new UICompBuilder(childrenMap, (props) => { @@ -145,7 +146,7 @@ let TextTmpComp = (function () { .setPropertyViewFn((children) => { return ( <> - +
{children.type.propertyView({ label: trans("value"), @@ -160,7 +161,7 @@ let TextTmpComp = (function () { {hiddenPropertyView(children)}
)} - + {["layout", "both"].includes(useContext(EditorContext).editorModeStatus) && ( <>
diff --git a/client/packages/lowcoder/src/comps/controls/styleControl.tsx b/client/packages/lowcoder/src/comps/controls/styleControl.tsx index 669c450e3..7295a9783 100644 --- a/client/packages/lowcoder/src/comps/controls/styleControl.tsx +++ b/client/packages/lowcoder/src/comps/controls/styleControl.tsx @@ -36,6 +36,7 @@ import { TextSizeConfig, TextWeightConfig, FontFamilyConfig, + FontStyleConfig, BorderWidthConfig, BackgroundImageConfig, BackgroundImageRepeatConfig, @@ -136,13 +137,16 @@ function isTextWeightConfig(config: SingleColorConfig): config is TextWeightConf function isFontFamilyConfig(config: SingleColorConfig): config is FontFamilyConfig { return config.hasOwnProperty("fontFamily"); } +function isFontStyleConfig(config: SingleColorConfig): config is FontStyleConfig { + return config.hasOwnProperty("fontStyle"); +} -function isMarginConfig(config: SingleColorConfig): config is MarginConfig { - return config.hasOwnProperty("margin"); -} +function isMarginConfig(config: SingleColorConfig): config is MarginConfig { + return config.hasOwnProperty("margin"); +} -function isPaddingConfig(config: SingleColorConfig): config is PaddingConfig { - return config.hasOwnProperty("padding"); +function isPaddingConfig(config: SingleColorConfig): config is PaddingConfig { + return config.hasOwnProperty("padding"); } // function styleControl(colorConfig: Array) { @@ -215,12 +219,15 @@ function isEmptyTextWeight(textWeight: string) { function isEmptyFontFamily(fontFamily: string) { return _.isEmpty(fontFamily); } +function isEmptyFontStyle(fontStyle: string) { + return _.isEmpty(fontStyle); +} -function isEmptyMargin(margin: string) { - return _.isEmpty(margin); -} -function isEmptyPadding(padding: string) { - return _.isEmpty(padding); +function isEmptyMargin(margin: string) { + return _.isEmpty(margin); +} +function isEmptyPadding(padding: string) { + return _.isEmpty(padding); } /** @@ -237,93 +244,97 @@ function calcColors>( let res: Record = {}; colorConfigs.forEach((config) => { const name = config.name; - if (!isEmptyRadius(props[name]) && isRadiusConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyBorderWidth(props[name]) && isBorderWidthConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyBackgroundImageConfig(props[name]) && isBackgroundImageConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyBackgroundImageRepeatConfig(props[name]) && isBackgroundImageRepeatConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyBackgroundImageSizeConfig(props[name]) && isBackgroundImageSizeConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyBackgroundImagePositionConfig(props[name]) && isBackgroundImagePositionConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyBackgroundImageOriginConfig(props[name]) && isBackgroundImageOriginConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyHeaderBackgroundImageConfig(props[name]) && isHeaderBackgroundImageConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyHeaderBackgroundImageRepeatConfig(props[name]) && isHeaderBackgroundImageRepeatConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyHeaderBackgroundImageSizeConfig(props[name]) && isHeaderBackgroundImageSizeConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyHeaderBackgroundImagePositionConfig(props[name]) && isHeaderBackgroundImagePositionConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyHeaderBackgroundImageOriginConfig(props[name]) && isHeaderBackgroundImageOriginConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyFooterBackgroundImageConfig(props[name]) && isFooterBackgroundImageConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyFooterBackgroundImageRepeatConfig(props[name]) && isFooterBackgroundImageRepeatConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyFooterBackgroundImageSizeConfig(props[name]) && isFooterBackgroundImageSizeConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyFooterBackgroundImagePositionConfig(props[name]) && isFooterBackgroundImagePositionConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyFooterBackgroundImageOriginConfig(props[name]) && isFooterBackgroundImageOriginConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyTextSize(props[name]) && isTextSizeConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyTextWeight(props[name]) && isTextWeightConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyFontFamily(props[name]) && isFontFamilyConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyMargin(props[name]) && isMarginConfig(config)) { - res[name] = props[name]; - return; - } - if (!isEmptyPadding(props[name]) && isPaddingConfig(config)) { - res[name] = props[name]; - return; + if (!isEmptyRadius(props[name]) && isRadiusConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyBorderWidth(props[name]) && isBorderWidthConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyBackgroundImageConfig(props[name]) && isBackgroundImageConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyBackgroundImageRepeatConfig(props[name]) && isBackgroundImageRepeatConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyBackgroundImageSizeConfig(props[name]) && isBackgroundImageSizeConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyBackgroundImagePositionConfig(props[name]) && isBackgroundImagePositionConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyBackgroundImageOriginConfig(props[name]) && isBackgroundImageOriginConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyHeaderBackgroundImageConfig(props[name]) && isHeaderBackgroundImageConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyHeaderBackgroundImageRepeatConfig(props[name]) && isHeaderBackgroundImageRepeatConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyHeaderBackgroundImageSizeConfig(props[name]) && isHeaderBackgroundImageSizeConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyHeaderBackgroundImagePositionConfig(props[name]) && isHeaderBackgroundImagePositionConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyHeaderBackgroundImageOriginConfig(props[name]) && isHeaderBackgroundImageOriginConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyFooterBackgroundImageConfig(props[name]) && isFooterBackgroundImageConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyFooterBackgroundImageRepeatConfig(props[name]) && isFooterBackgroundImageRepeatConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyFooterBackgroundImageSizeConfig(props[name]) && isFooterBackgroundImageSizeConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyFooterBackgroundImagePositionConfig(props[name]) && isFooterBackgroundImagePositionConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyFooterBackgroundImageOriginConfig(props[name]) && isFooterBackgroundImageOriginConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyTextSize(props[name]) && isTextSizeConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyTextWeight(props[name]) && isTextWeightConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyFontFamily(props[name]) && isFontFamilyConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyFontStyle(props[name]) && isFontStyleConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyMargin(props[name]) && isMarginConfig(config)) { + res[name] = props[name]; + return; + } + if (!isEmptyPadding(props[name]) && isPaddingConfig(config)) { + res[name] = props[name]; + return; } if (!isEmptyColor(props[name])) { if (isThemeColorKey(props[name])) { @@ -398,11 +409,14 @@ function calcColors>( if (isFontFamilyConfig(config)) { res[name] = themeWithDefault[config.fontFamily] || 'sans-serif'; } - if (isMarginConfig(config)) { - res[name] = themeWithDefault[config.margin]; - } - if (isPaddingConfig(config)) { - res[name] = themeWithDefault[config.padding]; + if (isFontStyleConfig(config)) { + res[name] = themeWithDefault[config.fontStyle] || 'normal' + } + if (isMarginConfig(config)) { + res[name] = themeWithDefault[config.margin]; + } + if (isPaddingConfig(config)) { + res[name] = themeWithDefault[config.padding]; } }); // The second pass calculates dep @@ -509,7 +523,7 @@ const StyleContent = styled.div` const RadiusIcon = styled(IconRadius)` margin: 0 8px 0 -2px;`; const BorderIcon = styled(BorderWidthIcon)` margin: 0 8px 0 -3px; padding: 3px;`; -const MarginIcon = styled(ExpandIcon)` margin: 0 8px 0 2px;`; +const MarginIcon = styled(ExpandIcon)` margin: 0 8px 0 2px;`; const PaddingIcon = styled(CompressIcon)` margin: 0 8px 0 2px;`; const StyledTextSizeIcon = styled(TextSizeIcon)` margin: 0 8px 0 -3px; padding: 3px;`; const StyledFontFamilyIcon = styled(FontFamilyIcon)` margin: 0 8px 0 -3px; padding: 3px;`; @@ -527,13 +541,14 @@ export function styleControl(colorConfig const childrenMap: any = {}; colorConfigs.map((config) => { const name: Names = config.name; - if ( + if ( name === "radius" || name === "borderWidth" || name === "cardRadius" || - name === "textSize" || + name === "textSize" || name === "textWeight" || name === "fontFamily" || + name === "fontStyle" || name === "backgroundImage" || name === "backgroundImageRepeat" || name === "backgroundImageSize" || @@ -549,15 +564,15 @@ export function styleControl(colorConfig name === "footerBackgroundImageSize" || name === "footerBackgroundImagePosition" || name === "footerBackgroundImageOrigin" || - name === "margin" || - name === "padding" || - name === "containerheaderpadding" || - name === "containerfooterpadding" || + name === "margin" || + name === "padding" || + name === "containerheaderpadding" || + name === "containerfooterpadding" || name === "containerbodypadding" - ) { - childrenMap[name] = StringControl; - } else { - childrenMap[name] = ColorControl; + ) { + childrenMap[name] = StringControl; + } else { + childrenMap[name] = ColorControl; } }); // [K in Names]: new (params: CompParams) => ColorControl; @@ -593,12 +608,12 @@ export function styleControl(colorConfig onClick={() => { colorConfigs.map((item) => { const name: Names = item.name; - if ( - name === "radius" || - name === "margin" || + if ( + name === "radius" || + name === "margin" || name === "padding" || - name === "containerheaderpadding" || - name === "containerfooterpadding" || + name === "containerheaderpadding" || + name === "containerfooterpadding" || name === "containerbodypadding" || name === "borderWidth" || name === "backgroundImage" || @@ -653,115 +668,123 @@ export function styleControl(colorConfig } return controlItem( { filterText: config.label }, -
+
{(name === "radius" || - name === "gap" || - name === "cardRadius") - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "borderWidth" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "margin" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : (name === "padding" || - name === "containerheaderpadding" || - name === "containerfooterpadding" || - name === "containerbodypadding") - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "textSize" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "textWeight" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "fontFamily" - ? ( - children[name] as InstanceType - ).propertyView({ + name === "gap" || + name === "cardRadius") + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "borderWidth" + ? ( + children[name] as InstanceType + ).propertyView({ label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "backgroundImage" || name === "headerBackgroundImage" || name === "footerBackgroundImage" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "backgroundImageRepeat" || name === "headerBackgroundImageRepeat" || name === "footerBackgroundImageRepeat" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "backgroundImageSize" || name === "headerBackgroundImageSize" || name === "footerBackgroundImageSize" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], + preInputNode: , + placeholder: props[name], }) - : name === "backgroundImagePosition" || name === "headerBackgroundImagePosition" || name === "footerBackgroundImagePosition" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : name === "backgroundImageOrigin" || name === "headerBackgroundImageOrigin" || name === "footerBackgroundImageOrigin" - ? ( - children[name] as InstanceType - ).propertyView({ - label: config.label, - preInputNode: , - placeholder: props[name], - }) - : children[name].propertyView({ - label: config.label, - panelDefaultColor: props[name], - // isDep: isDepColorConfig(config), - isDep: true, - depMsg: depMsg, - })} + : name === "margin" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : (name === "padding" || + name === "containerheaderpadding" || + name === "containerfooterpadding" || + name === "containerbodypadding") + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "textSize" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "textWeight" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "fontFamily" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "fontStyle" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "backgroundImage" || name === "headerBackgroundImage" || name === "footerBackgroundImage" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "backgroundImageRepeat" || name === "headerBackgroundImageRepeat" || name === "footerBackgroundImageRepeat" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "backgroundImageSize" || name === "headerBackgroundImageSize" || name === "footerBackgroundImageSize" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "backgroundImagePosition" || name === "headerBackgroundImagePosition" || name === "footerBackgroundImagePosition" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : name === "backgroundImageOrigin" || name === "headerBackgroundImageOrigin" || name === "footerBackgroundImageOrigin" + ? ( + children[name] as InstanceType + ).propertyView({ + label: config.label, + preInputNode: , + placeholder: props[name], + }) + : children[name].propertyView({ + label: config.label, + panelDefaultColor: props[name], + // isDep: isDepColorConfig(config), + isDep: true, + depMsg: depMsg, + })}
); })} diff --git a/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx b/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx index 5dea81d30..3df7ba687 100644 --- a/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx +++ b/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx @@ -1,7 +1,7 @@ import { ThemeDetail } from "api/commonSettingApi"; import { darkenColor, isDarkColor, lightenColor, toHex } from "lowcoder-design"; import { trans } from "i18n"; -import { StyleConfigType } from "./styleControl"; +import { StyleConfigType } from "./styleControl"; type SupportPlatform = "pc" | "mobile"; @@ -23,21 +23,21 @@ export type BorderWidthConfig = CommonColorConfig & { export type BackgroundImageConfig = CommonColorConfig & { readonly backgroundImage: string; }; export type BackgroundImageRepeatConfig = CommonColorConfig & { readonly backgroundImageRepeat: string; }; -export type BackgroundImageSizeConfig = CommonColorConfig & { readonly backgroundImageSize: string;}; +export type BackgroundImageSizeConfig = CommonColorConfig & { readonly backgroundImageSize: string; }; export type BackgroundImagePositionConfig = CommonColorConfig & { readonly backgroundImagePosition: string; }; -export type BackgroundImageOriginConfig = CommonColorConfig & { readonly backgroundImageOrigin: string;}; +export type BackgroundImageOriginConfig = CommonColorConfig & { readonly backgroundImageOrigin: string; }; export type HeaderBackgroundImageConfig = CommonColorConfig & { readonly headerBackgroundImage: string; }; export type HeaderBackgroundImageRepeatConfig = CommonColorConfig & { readonly headerBackgroundImageRepeat: string; }; -export type HeaderBackgroundImageSizeConfig = CommonColorConfig & { readonly headerBackgroundImageSize: string;}; +export type HeaderBackgroundImageSizeConfig = CommonColorConfig & { readonly headerBackgroundImageSize: string; }; export type HeaderBackgroundImagePositionConfig = CommonColorConfig & { readonly headerBackgroundImagePosition: string; }; -export type HeaderBackgroundImageOriginConfig = CommonColorConfig & { readonly headerBackgroundImageOrigin: string;}; +export type HeaderBackgroundImageOriginConfig = CommonColorConfig & { readonly headerBackgroundImageOrigin: string; }; export type FooterBackgroundImageConfig = CommonColorConfig & { readonly footerBackgroundImage: string; }; export type FooterBackgroundImageRepeatConfig = CommonColorConfig & { readonly footerBackgroundImageRepeat: string; }; -export type FooterBackgroundImageSizeConfig = CommonColorConfig & { readonly footerBackgroundImageSize: string;}; +export type FooterBackgroundImageSizeConfig = CommonColorConfig & { readonly footerBackgroundImageSize: string; }; export type FooterBackgroundImagePositionConfig = CommonColorConfig & { readonly footerBackgroundImagePosition: string; }; -export type FooterBackgroundImageOriginConfig = CommonColorConfig & { readonly footerBackgroundImageOrigin: string;}; +export type FooterBackgroundImageOriginConfig = CommonColorConfig & { readonly footerBackgroundImageOrigin: string; }; export type TextSizeConfig = CommonColorConfig & { readonly textSize: string; @@ -51,6 +51,10 @@ export type FontFamilyConfig = CommonColorConfig & { readonly fontFamily: string; }; +export type FontStyleConfig = CommonColorConfig & { + readonly fontStyle: string; +} + export type ContainerHeaderPaddigConfig = CommonColorConfig & { readonly containerheaderpadding: string; }; @@ -63,11 +67,11 @@ export type ContainerFooterPaddigConfig = CommonColorConfig & { readonly containerfooterpadding: string; }; -export type MarginConfig = CommonColorConfig & { - readonly margin: string; -}; -export type PaddingConfig = CommonColorConfig & { - readonly padding: string; +export type MarginConfig = CommonColorConfig & { + readonly margin: string; +}; +export type PaddingConfig = CommonColorConfig & { + readonly padding: string; }; export type DepColorConfig = CommonColorConfig & { @@ -76,7 +80,7 @@ export type DepColorConfig = CommonColorConfig & { readonly depType?: DEP_TYPE; transformer: (color: string, ...rest: string[]) => string; }; -export type SingleColorConfig = SimpleColorConfig | DepColorConfig | RadiusConfig | BorderWidthConfig | BackgroundImageConfig | BackgroundImageRepeatConfig | BackgroundImageSizeConfig | BackgroundImagePositionConfig | BackgroundImageOriginConfig | TextSizeConfig | TextWeightConfig | FontFamilyConfig | MarginConfig | PaddingConfig | ContainerHeaderPaddigConfig | ContainerFooterPaddigConfig | ContainerBodyPaddigConfig | HeaderBackgroundImageConfig | HeaderBackgroundImageRepeatConfig | HeaderBackgroundImageSizeConfig | HeaderBackgroundImagePositionConfig | HeaderBackgroundImageOriginConfig | FooterBackgroundImageConfig | FooterBackgroundImageRepeatConfig | FooterBackgroundImageSizeConfig | FooterBackgroundImagePositionConfig | FooterBackgroundImageOriginConfig; +export type SingleColorConfig = SimpleColorConfig | DepColorConfig | RadiusConfig | BorderWidthConfig | BackgroundImageConfig | BackgroundImageRepeatConfig | BackgroundImageSizeConfig | BackgroundImagePositionConfig | BackgroundImageOriginConfig | TextSizeConfig | TextWeightConfig | FontFamilyConfig | FontStyleConfig | MarginConfig | PaddingConfig | ContainerHeaderPaddigConfig | ContainerFooterPaddigConfig | ContainerBodyPaddigConfig | HeaderBackgroundImageConfig | HeaderBackgroundImageRepeatConfig | HeaderBackgroundImageSizeConfig | HeaderBackgroundImagePositionConfig | HeaderBackgroundImageOriginConfig | FooterBackgroundImageConfig | FooterBackgroundImageRepeatConfig | FooterBackgroundImageSizeConfig | FooterBackgroundImagePositionConfig | FooterBackgroundImageOriginConfig; export const defaultTheme: ThemeDetail = { primary: "#3377FF", @@ -85,7 +89,7 @@ export const defaultTheme: ThemeDetail = { canvas: "#F5F5F6", primarySurface: "#FFFFFF", borderRadius: "4px", - margin: "3px", + margin: "3px", padding: "3px", gridColumns: "24", textSize: "14px", @@ -322,61 +326,67 @@ const BACKGROUND_IMAGE_ORIGIN = { backgroundImageOrigin: "backgroundImageOrigin", } as const; -const MARGIN = { - name: "margin", - label: trans("style.margin"), - margin: "margin", -} as const; +const MARGIN = { + name: "margin", + label: trans("style.margin"), + margin: "margin", +} as const; -const PADDING = { - name: "padding", - label: trans("style.padding"), - padding: "padding", +const PADDING = { + name: "padding", + label: trans("style.padding"), + padding: "padding", } as const; -const TEXT_SIZE = { +const TEXT_SIZE = { name: "textSize", - label: trans("style.textSize"), - textSize: "textSize", + label: trans("style.textSize"), + textSize: "textSize", } as const; -const TEXT_WEIGHT = { +const TEXT_WEIGHT = { name: "textWeight", - label: trans("style.textWeight"), - textWeight: "textWeight", + label: trans("style.textWeight"), + textWeight: "textWeight", } as const; -const FONT_FAMILY = { +const FONT_FAMILY = { name: "fontFamily", - label: trans("style.fontFamily"), - fontFamily: "fontFamily", + label: trans("style.fontFamily"), + fontFamily: "fontFamily", } as const; -const CONTAINERHEADERPADDING = { - name: "containerheaderpadding", - label: trans("style.containerheaderpadding"), - containerheaderpadding: "padding", +const FONT_STYLE = { + name: "fontStyle", + label: trans("style.fontStyle"), + fontStyle: "fontStyle", +} as const + +const CONTAINERHEADERPADDING = { + name: "containerheaderpadding", + label: trans("style.containerheaderpadding"), + containerheaderpadding: "padding", } as const; -const CONTAINERFOOTERPADDING = { - name: "containerfooterpadding", - label: trans("style.containerfooterpadding"), - containerfooterpadding: "padding", +const CONTAINERFOOTERPADDING = { + name: "containerfooterpadding", + label: trans("style.containerfooterpadding"), + containerfooterpadding: "padding", } as const; -const CONTAINERBODYPADDING = { - name: "containerbodypadding", - label: trans("style.containerbodypadding"), - containerbodypadding: "padding", +const CONTAINERBODYPADDING = { + name: "containerbodypadding", + label: trans("style.containerbodypadding"), + containerbodypadding: "padding", } as const; const getStaticBorder = (color: string = SECOND_SURFACE_COLOR) => - ({ - name: "border", - label: trans("style.border"), - color, - } as const); +({ + name: "border", + label: trans("style.border"), + color, +} as const); const HEADER_BACKGROUND = { name: "headerBackground", @@ -439,13 +449,13 @@ function getStaticBackground(color: string) { } export const ButtonStyle = [ - ...getBgBorderRadiusByBg("primary"), + ...getBgBorderRadiusByBg("primary"), BORDER_WIDTH, - TEXT, + TEXT, TEXT_SIZE, TEXT_WEIGHT, FONT_FAMILY, - MARGIN, + MARGIN, PADDING ] as const; @@ -464,7 +474,7 @@ export const ToggleButtonStyle = [ TEXT_SIZE, TEXT_WEIGHT, FONT_FAMILY, - MARGIN, + MARGIN, PADDING, ] as const; @@ -480,8 +490,9 @@ export const TextStyle = [ TEXT_SIZE, TEXT_WEIGHT, FONT_FAMILY, + FONT_STYLE, BORDER, - MARGIN, + MARGIN, PADDING, { name: "links", @@ -491,16 +502,16 @@ export const TextStyle = [ transformer: toSelf, }, RADIUS, - BORDER_WIDTH + BORDER_WIDTH, ] as const; -export const MarginStyle = [ - { - name: "margin", - label: trans("style.margin"), - margin: "margin", - }, -]; +export const MarginStyle = [ + { + name: "margin", + label: trans("style.margin"), + margin: "margin", + }, +]; export const ContainerStyle = [ @@ -508,7 +519,7 @@ export const ContainerStyle = [ getStaticBorder(), RADIUS, BORDER_WIDTH, - MARGIN, + MARGIN, PADDING, { name: "background", @@ -567,7 +578,7 @@ export const ContainerHeaderStyle = [ label: trans("style.backgroundImagePosition"), headerBackgroundImagePosition: "headerBackgroundImagePosition", } - ,{ + , { name: "headerBackgroundImageOrigin", label: trans("style.backgroundImageOrigin"), headerBackgroundImageOrigin: "headerBackgroundImageOrigin", @@ -639,7 +650,7 @@ export const ContainerFooterStyle = [ label: trans("style.backgroundImagePosition"), footerBackgroundImagePosition: "footerBackgroundImagePosition", } - ,{ + , { name: "footerBackgroundImageOrigin", label: trans("style.backgroundImageOrigin"), footerBackgroundImageOrigin: "footerBackgroundImageOrigin", @@ -662,7 +673,7 @@ export const SliderStyle = [ color: SURFACE_COLOR, }, TRACK, - MARGIN, + MARGIN, PADDING, ] as const; @@ -674,7 +685,7 @@ export const InputLikeStyle = [ TEXT_SIZE, TEXT_WEIGHT, FONT_FAMILY, - MARGIN, + MARGIN, PADDING, ...ACCENT_VALIDATE, ] as const; @@ -691,7 +702,7 @@ export const RatingStyle = [ label: trans("style.unchecked"), color: SECOND_SURFACE_COLOR, }, - MARGIN, + MARGIN, PADDING, ] as const; @@ -715,7 +726,7 @@ export const SwitchStyle = [ depType: DEP_TYPE.SELF, transformer: toSelf, }, - MARGIN, + MARGIN, PADDING, ] as const; @@ -723,7 +734,7 @@ export const SelectStyle = [ LABEL, ...getStaticBgBorderRadiusByBg(SURFACE_COLOR, "pc"), TEXT, - MARGIN, + MARGIN, PADDING, ...ACCENT_VALIDATE, ] as const; @@ -732,7 +743,7 @@ const multiSelectCommon = [ LABEL, ...getStaticBgBorderRadiusByBg(SURFACE_COLOR, "pc"), TEXT, - MARGIN, + MARGIN, PADDING, { name: "tags", @@ -784,7 +795,7 @@ export const TabContainerStyle = [ export const ModalStyle = [ ...getBgBorderRadiusByBg(), BORDER_WIDTH, - MARGIN, + MARGIN, PADDING, BACKGROUND_IMAGE, BACKGROUND_IMAGE_REPEAT, @@ -798,7 +809,7 @@ export const CascaderStyle = [ ...getStaticBgBorderRadiusByBg(SURFACE_COLOR, "pc"), TEXT, ACCENT, - MARGIN, + MARGIN, PADDING, ] as const; @@ -838,7 +849,7 @@ export const CheckboxStyle = [ RADIUS, STATIC_TEXT, VALIDATE, - MARGIN, + MARGIN, PADDING, ] as const; @@ -854,7 +865,7 @@ export const RadioStyle = [ }, STATIC_TEXT, VALIDATE, - MARGIN, + MARGIN, PADDING, ] as const; @@ -880,7 +891,7 @@ export const SegmentStyle = [ }, RADIUS, VALIDATE, - MARGIN, + MARGIN, PADDING, ] as const; @@ -1001,7 +1012,7 @@ export const FileViewerStyle = [ getStaticBackground("#FFFFFF"), getStaticBorder("#00000000"), RADIUS, - MARGIN, + MARGIN, PADDING, BORDER_WIDTH ] as const; @@ -1012,7 +1023,7 @@ export const DateTimeStyle = [ LABEL, ...getStaticBgBorderRadiusByBg(SURFACE_COLOR), TEXT, - MARGIN, + MARGIN, PADDING, ...ACCENT_VALIDATE, ] as const; @@ -1027,7 +1038,7 @@ function handleToHoverLink(color: string) { export const LinkStyle = [ ...LinkTextStyle, - MARGIN, + MARGIN, PADDING, TEXT_SIZE ] as const; @@ -1039,7 +1050,7 @@ export const DividerStyle = [ color: lightenColor(SECOND_SURFACE_COLOR, 0.05), }, BORDER_WIDTH, - MARGIN, + MARGIN, PADDING, { name: "text", @@ -1063,7 +1074,7 @@ export const ProgressStyle = [ TRACK, FILL, SUCCESS, - MARGIN, + MARGIN, PADDING, ] as const; @@ -1078,7 +1089,7 @@ export const NavigationStyle = [ ACCENT, getStaticBackground("#FFFFFF00"), getStaticBorder("#FFFFFF00"), - MARGIN, + MARGIN, PADDING, ] as const; @@ -1095,7 +1106,7 @@ export const QRCodeStyle = [ label: trans("color"), color: "#000000", }, - MARGIN, + MARGIN, PADDING, BORDER, RADIUS, @@ -1119,7 +1130,7 @@ export const TimeLineStyle = [ label: trans("timeLine.subTitleColor"), color: "#848484", }, - MARGIN, + MARGIN, PADDING, RADIUS ] as const; @@ -1199,7 +1210,7 @@ export const SignatureStyle = [ label: trans("style.footerIcon"), color: "#222222", }, - MARGIN, + MARGIN, PADDING, BORDER_WIDTH ] as const; @@ -1213,7 +1224,7 @@ export const LottieStyle = [ depType: DEP_TYPE.SELF, transformer: toSelf, }, - MARGIN, + MARGIN, PADDING, ] as const; ///////////////////// @@ -1225,19 +1236,19 @@ export const CommentStyle = [ depType: DEP_TYPE.SELF, transformer: toSelf, }, - MARGIN, + MARGIN, PADDING, RADIUS, ] as const export const ResponsiveLayoutRowStyle = [ ...BG_STATIC_BORDER_RADIUS, - MARGIN, + MARGIN, PADDING, ] as const; export const ResponsiveLayoutColStyle = [ ...BG_STATIC_BORDER_RADIUS, - MARGIN, + MARGIN, PADDING, ] as const; @@ -1297,9 +1308,9 @@ export const NavLayoutItemActiveStyle = [ export const CarouselStyle = [getBackground("canvas")] as const; export const RichTextEditorStyle = [ - getStaticBorder(), - getBackground("primarySurface"), - RADIUS, + getStaticBorder(), + getBackground("primarySurface"), + RADIUS, BORDER_WIDTH ] as const; @@ -1354,43 +1365,36 @@ export type NavLayoutItemHoverStyleType = StyleConfigType; export function widthCalculator(margin: string) { - const marginArr = margin?.trim().replace(/\s+/g,' ').split(" ") || ""; + const marginArr = margin?.trim().replace(/\s+/g, ' ').split(" ") || ""; if (marginArr.length === 1) { - return `calc(100% - ${ - parseInt(margin.replace(/[^\d.]/g, "")) * 2 + + return `calc(100% - ${parseInt(margin.replace(/[^\d.]/g, "")) * 2 + (margin.replace(/[0-9]/g, "") || "px") - })`; + })`; } else if (marginArr.length === 2 || marginArr.length === 3) { - return `calc(100% - ${ - parseInt(marginArr[1].replace(/[^\d.]/g, "")) * 2 + + return `calc(100% - ${parseInt(marginArr[1].replace(/[^\d.]/g, "")) * 2 + (marginArr[1].replace(/[0-9]/g, "") || 'px') - })`; + })`; } else { - return `calc(100% - ${ - parseInt(marginArr[1]?.replace(/[^\d.]/g, "") || "0") + + return `calc(100% - ${parseInt(marginArr[1]?.replace(/[^\d.]/g, "") || "0") + (marginArr[1]?.replace(/[0-9]/g, "") || "px") - } - ${ - parseInt(marginArr[3]?.replace(/[^\d.]/g, "") || "0") + + } - ${parseInt(marginArr[3]?.replace(/[^\d.]/g, "") || "0") + (marginArr[3]?.replace(/[0-9]/g, "") || "px") - })`; + })`; } } export function heightCalculator(margin: string) { const marginArr = margin?.trim().split(" ") || ""; if (marginArr.length === 1 || marginArr.length === 2) { - return `calc(100% - ${ - parseInt(marginArr[0].replace(/[^\d.]/g, "")) * 2 + + return `calc(100% - ${parseInt(marginArr[0].replace(/[^\d.]/g, "")) * 2 + (marginArr[0].replace(/[0-9]/g, "") || 'px') - })`; - }else if(marginArr.length >2){ - return `calc(100% - ${ - parseInt(marginArr[0]?.replace(/[^\d.]/g, "") || "0") + + })`; + } else if (marginArr.length > 2) { + return `calc(100% - ${parseInt(marginArr[0]?.replace(/[^\d.]/g, "") || "0") + (marginArr[0]?.replace(/[0-9]/g, "") || "px") - } - ${ - parseInt(marginArr[2]?.replace(/[^\d.]/g, "") || "0") + + } - ${parseInt(marginArr[2]?.replace(/[^\d.]/g, "") || "0") + (marginArr[2]?.replace(/[0-9]/g, "") || "px") - })`; + })`; } } diff --git a/client/packages/lowcoder/src/i18n/locales/en.ts b/client/packages/lowcoder/src/i18n/locales/en.ts index 9cc91a970..fc05496d4 100644 --- a/client/packages/lowcoder/src/i18n/locales/en.ts +++ b/client/packages/lowcoder/src/i18n/locales/en.ts @@ -361,6 +361,7 @@ export const en = { "textSize": "Text Size", "textWeight": "Text Weight", "fontFamily": "Font Family", + "fontStyle":"Font Style", "backgroundImage": "BG Image", "backgroundImageRepeat": "BG Repeat", "backgroundImageSize": "BG Size", From 85926955f5e9cffc1d4baaba51e75f58a5f7f38f Mon Sep 17 00:00:00 2001 From: Imtanan Aziz Toor Date: Thu, 15 Feb 2024 19:32:08 +0500 Subject: [PATCH 2/5] text-area font syle added --- .../textInputComp/textInputConstants.tsx | 9 +- .../comps/controls/styleControlConstants.tsx | 1 + ....timestamp-1708005283355-9ba212c9a46a4.mjs | 331 ++++++++++++++++++ 3 files changed, 337 insertions(+), 4 deletions(-) create mode 100644 client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs diff --git a/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx b/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx index 291c04077..5a2438245 100644 --- a/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx +++ b/client/packages/lowcoder/src/comps/comps/textInputComp/textInputConstants.tsx @@ -229,6 +229,7 @@ export function getStyle(style: InputLikeStyleType) { font-size: ${style.textSize}; font-weight: ${style.textWeight}; font-family: ${style.fontFamily}; + font-style:${style.fontStyle}; background-color: ${style.background}; border-color: ${style.border}; @@ -275,10 +276,10 @@ export const inputRefMethods = [ ]; export function checkMentionListData(data: any) { - if(data === "") return {} - for(const key in data) { - check(data[key], ["array"], key,(node)=>{ - check(node, ["string"], ); + if (data === "") return {} + for (const key in data) { + check(data[key], ["array"], key, (node) => { + check(node, ["string"],); return node }) } diff --git a/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx b/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx index 3df7ba687..f8fa415a8 100644 --- a/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx +++ b/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx @@ -685,6 +685,7 @@ export const InputLikeStyle = [ TEXT_SIZE, TEXT_WEIGHT, FONT_FAMILY, + FONT_STYLE, MARGIN, PADDING, ...ACCENT_VALIDATE, diff --git a/client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs b/client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs new file mode 100644 index 000000000..8600472a2 --- /dev/null +++ b/client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs @@ -0,0 +1,331 @@ +// vite.config.mts +import dotenv from "file:///C:/Projects/lowcoder/client/node_modules/dotenv/lib/main.js"; +import { defineConfig } from "file:///C:/Projects/lowcoder/client/node_modules/vite/dist/node/index.js"; +import react from "file:///C:/Projects/lowcoder/client/node_modules/@vitejs/plugin-react/dist/index.mjs"; +import viteTsconfigPaths from "file:///C:/Projects/lowcoder/client/node_modules/vite-tsconfig-paths/dist/index.mjs"; +import svgrPlugin from "file:///C:/Projects/lowcoder/client/node_modules/vite-plugin-svgr/dist/index.mjs"; +import checker from "file:///C:/Projects/lowcoder/client/node_modules/vite-plugin-checker/dist/esm/main.js"; +import { visualizer } from "file:///C:/Projects/lowcoder/client/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; +import path from "path"; +import chalk from "file:///C:/Projects/lowcoder/client/node_modules/chalk/source/index.js"; +import { createHtmlPlugin } from "file:///C:/Projects/lowcoder/client/node_modules/vite-plugin-html/dist/index.mjs"; + +// src/dev-utils/util.js +function ensureLastSlash(str) { + if (!str) { + return "/"; + } + if (!str.endsWith("/")) { + return `${str}/`; + } + return str; +} + +// src/dev-utils/buildVars.js +var buildVars = [ + { + name: "PUBLIC_URL", + defaultValue: "/" + }, + { + name: "REACT_APP_EDITION", + defaultValue: "community" + }, + { + name: "REACT_APP_LANGUAGES", + defaultValue: "" + }, + { + name: "REACT_APP_COMMIT_ID", + defaultValue: "00000" + }, + { + name: "REACT_APP_API_HOST", + defaultValue: "" + }, + { + name: "LOWCODER_NODE_SERVICE_URL", + defaultValue: "" + }, + { + name: "REACT_APP_ENV", + defaultValue: "production" + }, + { + name: "REACT_APP_BUILD_ID", + defaultValue: "" + }, + { + name: "REACT_APP_LOG_LEVEL", + defaultValue: "error" + }, + { + name: "REACT_APP_IMPORT_MAP", + defaultValue: "{}" + }, + { + name: "REACT_APP_SERVER_IPS", + defaultValue: "" + }, + { + name: "REACT_APP_BUNDLE_BUILTIN_PLUGIN", + defaultValue: "" + }, + { + name: "REACT_APP_BUNDLE_TYPE", + defaultValue: "app" + }, + { + name: "REACT_APP_DISABLE_JS_SANDBOX", + defaultValue: "" + } +]; + +// src/dev-utils/external.js +var libs = [ + "axios", + "redux", + "react-router", + "react-router-dom", + "react-redux", + "react", + "react-dom", + "lodash", + "history", + "antd", + "@dnd-kit/core", + "@dnd-kit/modifiers", + "@dnd-kit/sortable", + "@dnd-kit/utilities", + { + name: "moment", + extractDefault: true + }, + { + name: "dayjs", + extractDefault: true + }, + { + name: "lowcoder-sdk", + from: "./src/index.sdk.ts" + }, + { + name: "styled-components", + mergeDefaultAndNameExports: true + } +]; +var getLibGlobalVarName = (name) => { + return "$" + name.replace(/@/g, "$").replace(/[\/\-]/g, "_"); +}; +var libsImportCode = (exclude = []) => { + const importLines = []; + const assignLines = []; + libs.forEach((i) => { + let name = i; + let merge = false; + let from = name; + let extractDefault = false; + if (typeof i === "object") { + name = i.name; + merge = i.mergeDefaultAndNameExports ?? false; + from = i.from ?? name; + extractDefault = i.extractDefault ?? false; + } + if (exclude.includes(name)) { + return; + } + const varName = getLibGlobalVarName(name); + if (merge) { + importLines.push(`import * as ${varName}_named_exports from '${from}';`); + importLines.push(`import ${varName} from '${from}';`); + assignLines.push(`Object.assign(${varName}, ${varName}_named_exports);`); + } else if (extractDefault) { + importLines.push(`import ${varName} from '${from}';`); + } else { + importLines.push(`import * as ${varName} from '${from}';`); + } + assignLines.push(`window.${varName} = ${varName};`); + }); + return importLines.concat(assignLines).join("\n"); +}; + +// src/dev-utils/globalDepPlguin.js +function globalDepPlugin(exclude = []) { + const virtualModuleId = "virtual:globals"; + return { + name: "lowcoder-global-plugin", + resolveId(id) { + if (id === virtualModuleId) { + return id; + } + }, + load(id) { + if (id === virtualModuleId) { + return libsImportCode(exclude); + } + } + }; +} + +// vite.config.mts +var __vite_injected_original_dirname = "C:\\Projects\\lowcoder\\client\\packages\\lowcoder"; +dotenv.config(); +var apiProxyTarget = process.env.LOWCODER_API_SERVICE_URL; +var nodeServiceApiProxyTarget = process.env.NODE_SERVICE_API_PROXY_TARGET; +var nodeEnv = process.env.NODE_ENV ?? "development"; +var edition = process.env.REACT_APP_EDITION; +var isEEGlobal = edition === "enterprise-global"; +var isEE = edition === "enterprise" || isEEGlobal; +var isDev = nodeEnv === "development"; +var isVisualizerEnabled = !!process.env.ENABLE_VISUALIZER; +var browserCheckFileName = `browser-check.js`; +var base = ensureLastSlash(process.env.PUBLIC_URL); +if (!apiProxyTarget && isDev) { + console.log(); + console.log(chalk.red`LOWCODER_API_SERVICE_URL is required.\n`); + console.log(chalk.cyan`Start with command: LOWCODER_API_SERVICE_URL=\{backend-api-addr\} yarn start`); + console.log(); + process.exit(1); +} +var proxyConfig = { + "/api": { + target: apiProxyTarget, + changeOrigin: false + } +}; +if (nodeServiceApiProxyTarget) { + proxyConfig["/node-service"] = { + target: nodeServiceApiProxyTarget + }; +} +var define = {}; +buildVars.forEach(({ name, defaultValue }) => { + define[name] = JSON.stringify(process.env[name] || defaultValue); +}); +var viteConfig = { + define, + assetsInclude: ["**/*.md"], + resolve: { + extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json"], + alias: { + "@lowcoder-ee": path.resolve( + __vite_injected_original_dirname, + isEE ? `../lowcoder/src/${isEEGlobal ? "ee-global" : "ee"}` : "../lowcoder/src" + ) + } + }, + base, + build: { + manifest: true, + target: "es2015", + cssTarget: "chrome63", + outDir: "build", + assetsDir: "static", + emptyOutDir: false, + rollupOptions: { + output: { + chunkFileNames: "[hash].js" + } + }, + commonjsOptions: { + defaultIsModuleExports: (id) => { + if (id.indexOf("antd/lib") !== -1) { + return false; + } + return "auto"; + } + } + }, + css: { + preprocessorOptions: { + less: { + modifyVars: { + "@primary-color": "#3377FF", + "@link-color": "#3377FF", + "@border-color-base": "#D7D9E0", + "@border-radius-base": "4px" + }, + javascriptEnabled: true + } + } + }, + server: { + open: true, + cors: true, + port: 8e3, + host: "0.0.0.0", + proxy: proxyConfig + }, + plugins: [ + checker({ + typescript: true, + eslint: { + lintCommand: 'eslint --quiet "./src/**/*.{ts,tsx}"', + dev: { + logLevel: ["error"] + } + } + }), + react({ + babel: { + parserOpts: { + plugins: ["decorators-legacy"] + } + } + }), + viteTsconfigPaths({ + projects: ["../lowcoder/tsconfig.json", "../lowcoder-design/tsconfig.json"] + }), + svgrPlugin({ + svgrOptions: { + exportType: "named", + prettier: false, + svgo: false, + titleProp: true, + ref: true + } + }), + globalDepPlugin(), + createHtmlPlugin({ + minify: true, + inject: { + data: { + browserCheckScript: isDev ? "" : `` + } + } + }), + isVisualizerEnabled && visualizer() + ].filter(Boolean) +}; +var browserCheckConfig = { + ...viteConfig, + define: { + ...viteConfig.define, + "process.env.NODE_ENV": JSON.stringify("production") + }, + build: { + ...viteConfig.build, + manifest: false, + copyPublicDir: false, + emptyOutDir: true, + lib: { + formats: ["iife"], + name: "BrowserCheck", + entry: "./src/browser-check.ts", + fileName: () => { + return browserCheckFileName; + } + } + } +}; +var buildTargets = { + main: viteConfig, + browserCheck: browserCheckConfig +}; +var buildTarget = buildTargets[process.env.BUILD_TARGET || "main"]; +var vite_config_default = defineConfig(buildTarget || viteConfig); +export { + vite_config_default as default, + viteConfig +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubXRzIiwgInNyYy9kZXYtdXRpbHMvdXRpbC5qcyIsICJzcmMvZGV2LXV0aWxzL2J1aWxkVmFycy5qcyIsICJzcmMvZGV2LXV0aWxzL2V4dGVybmFsLmpzIiwgInNyYy9kZXYtdXRpbHMvZ2xvYmFsRGVwUGxndWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcdml0ZS5jb25maWcubXRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Qcm9qZWN0cy9sb3djb2Rlci9jbGllbnQvcGFja2FnZXMvbG93Y29kZXIvdml0ZS5jb25maWcubXRzXCI7aW1wb3J0IGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XHJcbmltcG9ydCB7IGRlZmluZUNvbmZpZywgU2VydmVyT3B0aW9ucywgVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCByZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3RcIjtcclxuaW1wb3J0IHZpdGVUc2NvbmZpZ1BhdGhzIGZyb20gXCJ2aXRlLXRzY29uZmlnLXBhdGhzXCI7XHJcbmltcG9ydCBzdmdyUGx1Z2luIGZyb20gXCJ2aXRlLXBsdWdpbi1zdmdyXCI7XHJcbmltcG9ydCBjaGVja2VyIGZyb20gXCJ2aXRlLXBsdWdpbi1jaGVja2VyXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcclxuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1odG1sXCI7XHJcbmltcG9ydCB7IGVuc3VyZUxhc3RTbGFzaCB9IGZyb20gXCIuL3NyYy9kZXYtdXRpbHMvdXRpbFwiO1xyXG5pbXBvcnQgeyBidWlsZFZhcnMgfSBmcm9tIFwiLi9zcmMvZGV2LXV0aWxzL2J1aWxkVmFyc1wiO1xyXG5pbXBvcnQgeyBnbG9iYWxEZXBQbHVnaW4gfSBmcm9tIFwiLi9zcmMvZGV2LXV0aWxzL2dsb2JhbERlcFBsZ3VpblwiO1xyXG5cclxuZG90ZW52LmNvbmZpZygpO1xyXG5cclxuY29uc3QgYXBpUHJveHlUYXJnZXQgPSBwcm9jZXNzLmVudi5MT1dDT0RFUl9BUElfU0VSVklDRV9VUkw7XHJcbmNvbnN0IG5vZGVTZXJ2aWNlQXBpUHJveHlUYXJnZXQgPSBwcm9jZXNzLmVudi5OT0RFX1NFUlZJQ0VfQVBJX1BST1hZX1RBUkdFVDtcclxuY29uc3Qgbm9kZUVudiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IFwiZGV2ZWxvcG1lbnRcIjtcclxuY29uc3QgZWRpdGlvbiA9IHByb2Nlc3MuZW52LlJFQUNUX0FQUF9FRElUSU9OO1xyXG5jb25zdCBpc0VFR2xvYmFsID0gZWRpdGlvbiA9PT0gXCJlbnRlcnByaXNlLWdsb2JhbFwiO1xyXG5jb25zdCBpc0VFID0gZWRpdGlvbiA9PT0gXCJlbnRlcnByaXNlXCIgfHwgaXNFRUdsb2JhbDtcclxuY29uc3QgaXNEZXYgPSBub2RlRW52ID09PSBcImRldmVsb3BtZW50XCI7XHJcbmNvbnN0IGlzVmlzdWFsaXplckVuYWJsZWQgPSAhIXByb2Nlc3MuZW52LkVOQUJMRV9WSVNVQUxJWkVSO1xyXG4vLyB0aGUgZmlsZSB3YXMgbmV2ZXIgY3JlYXRlZFxyXG4vLyBjb25zdCBicm93c2VyQ2hlY2tGaWxlTmFtZSA9IGBicm93c2VyLWNoZWNrLSR7cHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0NPTU1JVF9JRH0uanNgO1xyXG5jb25zdCBicm93c2VyQ2hlY2tGaWxlTmFtZSA9IGBicm93c2VyLWNoZWNrLmpzYDtcclxuY29uc3QgYmFzZSA9IGVuc3VyZUxhc3RTbGFzaChwcm9jZXNzLmVudi5QVUJMSUNfVVJMKTtcclxuXHJcbmlmICghYXBpUHJveHlUYXJnZXQgJiYgaXNEZXYpIHtcclxuICBjb25zb2xlLmxvZygpO1xyXG4gIGNvbnNvbGUubG9nKGNoYWxrLnJlZGBMT1dDT0RFUl9BUElfU0VSVklDRV9VUkwgaXMgcmVxdWlyZWQuXFxuYCk7XHJcbiAgY29uc29sZS5sb2coY2hhbGsuY3lhbmBTdGFydCB3aXRoIGNvbW1hbmQ6IExPV0NPREVSX0FQSV9TRVJWSUNFX1VSTD1cXHtiYWNrZW5kLWFwaS1hZGRyXFx9IHlhcm4gc3RhcnRgKTtcclxuICBjb25zb2xlLmxvZygpO1xyXG4gIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuY29uc3QgcHJveHlDb25maWc6IFNlcnZlck9wdGlvbnNbXCJwcm94eVwiXSA9IHtcclxuICBcIi9hcGlcIjoge1xyXG4gICAgdGFyZ2V0OiBhcGlQcm94eVRhcmdldCxcclxuICAgIGNoYW5nZU9yaWdpbjogZmFsc2UsXHJcbiAgfSxcclxufTtcclxuXHJcbmlmIChub2RlU2VydmljZUFwaVByb3h5VGFyZ2V0KSB7XHJcbiAgcHJveHlDb25maWdbXCIvbm9kZS1zZXJ2aWNlXCJdID0ge1xyXG4gICAgdGFyZ2V0OiBub2RlU2VydmljZUFwaVByb3h5VGFyZ2V0LFxyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IGRlZmluZSA9IHt9O1xyXG5idWlsZFZhcnMuZm9yRWFjaCgoeyBuYW1lLCBkZWZhdWx0VmFsdWUgfSkgPT4ge1xyXG4gIGRlZmluZVtuYW1lXSA9IEpTT04uc3RyaW5naWZ5KHByb2Nlc3MuZW52W25hbWVdIHx8IGRlZmF1bHRWYWx1ZSk7XHJcbn0pO1xyXG5cclxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cclxuZXhwb3J0IGNvbnN0IHZpdGVDb25maWc6IFVzZXJDb25maWcgPSB7XHJcbiAgZGVmaW5lLFxyXG4gIGFzc2V0c0luY2x1ZGU6IFtcIioqLyoubWRcIl0sXHJcbiAgcmVzb2x2ZToge1xyXG4gICAgZXh0ZW5zaW9uczogW1wiLm1qc1wiLCBcIi5qc1wiLCBcIi50c1wiLCBcIi5qc3hcIiwgXCIudHN4XCIsIFwiLmpzb25cIl0sXHJcbiAgICBhbGlhczoge1xyXG4gICAgICBcIkBsb3djb2Rlci1lZVwiOiBwYXRoLnJlc29sdmUoXHJcbiAgICAgICAgX19kaXJuYW1lLFxyXG4gICAgICAgIGlzRUUgPyBgLi4vbG93Y29kZXIvc3JjLyR7aXNFRUdsb2JhbCA/IFwiZWUtZ2xvYmFsXCIgOiBcImVlXCJ9YCA6IFwiLi4vbG93Y29kZXIvc3JjXCJcclxuICAgICAgKSxcclxuICAgIH0sXHJcbiAgfSxcclxuICBiYXNlLFxyXG4gIGJ1aWxkOiB7XHJcbiAgICBtYW5pZmVzdDogdHJ1ZSxcclxuICAgIHRhcmdldDogXCJlczIwMTVcIixcclxuICAgIGNzc1RhcmdldDogXCJjaHJvbWU2M1wiLFxyXG4gICAgb3V0RGlyOiBcImJ1aWxkXCIsXHJcbiAgICBhc3NldHNEaXI6IFwic3RhdGljXCIsXHJcbiAgICBlbXB0eU91dERpcjogZmFsc2UsXHJcbiAgICByb2xsdXBPcHRpb25zOiB7XHJcbiAgICAgIG91dHB1dDoge1xyXG4gICAgICAgIGNodW5rRmlsZU5hbWVzOiBcIltoYXNoXS5qc1wiLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIGNvbW1vbmpzT3B0aW9uczoge1xyXG4gICAgICBkZWZhdWx0SXNNb2R1bGVFeHBvcnRzOiAoaWQpID0+IHtcclxuICAgICAgICBpZiAoaWQuaW5kZXhPZihcImFudGQvbGliXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJhdXRvXCI7XHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgY3NzOiB7XHJcbiAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgIGxlc3M6IHtcclxuICAgICAgICBtb2RpZnlWYXJzOiB7XHJcbiAgICAgICAgICBcIkBwcmltYXJ5LWNvbG9yXCI6IFwiIzMzNzdGRlwiLFxyXG4gICAgICAgICAgXCJAbGluay1jb2xvclwiOiBcIiMzMzc3RkZcIixcclxuICAgICAgICAgIFwiQGJvcmRlci1jb2xvci1iYXNlXCI6IFwiI0Q3RDlFMFwiLFxyXG4gICAgICAgICAgXCJAYm9yZGVyLXJhZGl1cy1iYXNlXCI6IFwiNHB4XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfSxcclxuICBzZXJ2ZXI6IHtcclxuICAgIG9wZW46IHRydWUsXHJcbiAgICBjb3JzOiB0cnVlLFxyXG4gICAgcG9ydDogODAwMCxcclxuICAgIGhvc3Q6IFwiMC4wLjAuMFwiLFxyXG4gICAgcHJveHk6IHByb3h5Q29uZmlnLFxyXG4gIH0sXHJcbiAgcGx1Z2luczogW1xyXG4gICAgY2hlY2tlcih7XHJcbiAgICAgIHR5cGVzY3JpcHQ6IHRydWUsXHJcbiAgICAgIGVzbGludDoge1xyXG4gICAgICAgIGxpbnRDb21tYW5kOiAnZXNsaW50IC0tcXVpZXQgXCIuL3NyYy8qKi8qLnt0cyx0c3h9XCInLFxyXG4gICAgICAgIGRldjoge1xyXG4gICAgICAgICAgbG9nTGV2ZWw6IFtcImVycm9yXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KSxcclxuICAgIHJlYWN0KHtcclxuICAgICAgYmFiZWw6IHtcclxuICAgICAgICBwYXJzZXJPcHRzOiB7XHJcbiAgICAgICAgICBwbHVnaW5zOiBbXCJkZWNvcmF0b3JzLWxlZ2FjeVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSksXHJcbiAgICB2aXRlVHNjb25maWdQYXRocyh7XHJcbiAgICAgIHByb2plY3RzOiBbXCIuLi9sb3djb2Rlci90c2NvbmZpZy5qc29uXCIsIFwiLi4vbG93Y29kZXItZGVzaWduL3RzY29uZmlnLmpzb25cIl0sXHJcbiAgICB9KSxcclxuICAgIHN2Z3JQbHVnaW4oe1xyXG4gICAgICBzdmdyT3B0aW9uczoge1xyXG4gICAgICAgIGV4cG9ydFR5cGU6IFwibmFtZWRcIixcclxuICAgICAgICBwcmV0dGllcjogZmFsc2UsXHJcbiAgICAgICAgc3ZnbzogZmFsc2UsXHJcbiAgICAgICAgdGl0bGVQcm9wOiB0cnVlLFxyXG4gICAgICAgIHJlZjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgZ2xvYmFsRGVwUGx1Z2luKCksXHJcbiAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgbWluaWZ5OiB0cnVlLFxyXG4gICAgICBpbmplY3Q6IHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBicm93c2VyQ2hlY2tTY3JpcHQ6IGlzRGV2ID8gXCJcIiA6IGA8c2NyaXB0IHNyYz1cIiR7YmFzZX0ke2Jyb3dzZXJDaGVja0ZpbGVOYW1lfVwiPjwvc2NyaXB0PmAsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgaXNWaXN1YWxpemVyRW5hYmxlZCAmJiB2aXN1YWxpemVyKCksXHJcbiAgXS5maWx0ZXIoQm9vbGVhbiksXHJcbn07XHJcblxyXG5jb25zdCBicm93c2VyQ2hlY2tDb25maWc6IFVzZXJDb25maWcgPSB7XHJcbiAgLi4udml0ZUNvbmZpZyxcclxuICBkZWZpbmU6IHtcclxuICAgIC4uLnZpdGVDb25maWcuZGVmaW5lLFxyXG4gICAgXCJwcm9jZXNzLmVudi5OT0RFX0VOVlwiOiBKU09OLnN0cmluZ2lmeShcInByb2R1Y3Rpb25cIiksXHJcbiAgfSxcclxuICBidWlsZDoge1xyXG4gICAgLi4udml0ZUNvbmZpZy5idWlsZCxcclxuICAgIG1hbmlmZXN0OiBmYWxzZSxcclxuICAgIGNvcHlQdWJsaWNEaXI6IGZhbHNlLFxyXG4gICAgZW1wdHlPdXREaXI6IHRydWUsXHJcbiAgICBsaWI6IHtcclxuICAgICAgZm9ybWF0czogW1wiaWlmZVwiXSxcclxuICAgICAgbmFtZTogXCJCcm93c2VyQ2hlY2tcIixcclxuICAgICAgZW50cnk6IFwiLi9zcmMvYnJvd3Nlci1jaGVjay50c1wiLFxyXG4gICAgICBmaWxlTmFtZTogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBicm93c2VyQ2hlY2tGaWxlTmFtZTtcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkVGFyZ2V0cyA9IHtcclxuICBtYWluOiB2aXRlQ29uZmlnLFxyXG4gIGJyb3dzZXJDaGVjazogYnJvd3NlckNoZWNrQ29uZmlnLFxyXG59O1xyXG5cclxuY29uc3QgYnVpbGRUYXJnZXQgPSBidWlsZFRhcmdldHNbcHJvY2Vzcy5lbnYuQlVJTERfVEFSR0VUIHx8IFwibWFpblwiXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyhidWlsZFRhcmdldCB8fCB2aXRlQ29uZmlnKTtcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcc3JjXFxcXGRldi11dGlsc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXFxcXHNyY1xcXFxkZXYtdXRpbHNcXFxcdXRpbC5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovUHJvamVjdHMvbG93Y29kZXIvY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvdXRpbC5qc1wiO2ltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xyXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBMYXN0U2xhc2goc3RyKSB7XHJcbiAgaWYgKHN0ci5lbmRzV2l0aChcIi9cIikpIHtcclxuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgc3RyLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTGFzdFNsYXNoKHN0cikge1xyXG4gIGlmICghc3RyKSB7XHJcbiAgICByZXR1cm4gXCIvXCI7XHJcbiAgfVxyXG4gIGlmICghc3RyLmVuZHNXaXRoKFwiL1wiKSkge1xyXG4gICAgcmV0dXJuIGAke3N0cn0vYDtcclxuICB9XHJcbiAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKc29uKGZpbGUpIHtcclxuICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZSkudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50RGlyTmFtZShpbXBvcnRNZXRhVXJsKSB7XHJcbiAgcmV0dXJuIGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnRNZXRhVXJsKSk7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcc3JjXFxcXGRldi11dGlsc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXFxcXHNyY1xcXFxkZXYtdXRpbHNcXFxcYnVpbGRWYXJzLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Qcm9qZWN0cy9sb3djb2Rlci9jbGllbnQvcGFja2FnZXMvbG93Y29kZXIvc3JjL2Rldi11dGlscy9idWlsZFZhcnMuanNcIjtleHBvcnQgY29uc3QgYnVpbGRWYXJzID0gW1xyXG4gIHtcclxuICAgIG5hbWU6IFwiUFVCTElDX1VSTFwiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcIi9cIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0VESVRJT05cIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJjb21tdW5pdHlcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0xBTkdVQUdFU1wiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogXCJSRUFDVF9BUFBfQ09NTUlUX0lEXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiMDAwMDBcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0FQSV9IT1NUXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIkxPV0NPREVSX05PREVfU0VSVklDRV9VUkxcIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0VOVlwiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcInByb2R1Y3Rpb25cIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0JVSUxEX0lEXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9MT0dfTEVWRUxcIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJlcnJvclwiLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogXCJSRUFDVF9BUFBfSU1QT1JUX01BUFwiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcInt9XCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9TRVJWRVJfSVBTXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9CVU5ETEVfQlVJTFRJTl9QTFVHSU5cIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0JVTkRMRV9UWVBFXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiYXBwXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9ESVNBQkxFX0pTX1NBTkRCT1hcIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcclxuICB9LFxyXG5dO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFByb2plY3RzXFxcXGxvd2NvZGVyXFxcXGNsaWVudFxcXFxwYWNrYWdlc1xcXFxsb3djb2RlclxcXFxzcmNcXFxcZGV2LXV0aWxzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcc3JjXFxcXGRldi11dGlsc1xcXFxleHRlcm5hbC5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovUHJvamVjdHMvbG93Y29kZXIvY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvZXh0ZXJuYWwuanNcIjsvKipcclxuICogbGlicyB0byBpbXBvcnQgYXMgZ2xvYmFsIHZhclxyXG4gKiBuYW1lOiBtb2R1bGUgbmFtZVxyXG4gKiBtZXJnZURlZmF1bHRBbmROYW1lRXhwb3J0czogd2hldGhlciB0byBtZXJnZSBkZWZhdWx0IGFuZCBuYW1lZCBleHBvcnRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbGlicyA9IFtcclxuICBcImF4aW9zXCIsXHJcbiAgXCJyZWR1eFwiLFxyXG4gIFwicmVhY3Qtcm91dGVyXCIsXHJcbiAgXCJyZWFjdC1yb3V0ZXItZG9tXCIsXHJcbiAgXCJyZWFjdC1yZWR1eFwiLFxyXG4gIFwicmVhY3RcIixcclxuICBcInJlYWN0LWRvbVwiLFxyXG4gIFwibG9kYXNoXCIsXHJcbiAgXCJoaXN0b3J5XCIsXHJcbiAgXCJhbnRkXCIsXHJcbiAgXCJAZG5kLWtpdC9jb3JlXCIsXHJcbiAgXCJAZG5kLWtpdC9tb2RpZmllcnNcIixcclxuICBcIkBkbmQta2l0L3NvcnRhYmxlXCIsXHJcbiAgXCJAZG5kLWtpdC91dGlsaXRpZXNcIixcclxuICB7XHJcbiAgICBuYW1lOiBcIm1vbWVudFwiLFxyXG4gICAgZXh0cmFjdERlZmF1bHQ6IHRydWUsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcImRheWpzXCIsXHJcbiAgICBleHRyYWN0RGVmYXVsdDogdHJ1ZSxcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwibG93Y29kZXItc2RrXCIsXHJcbiAgICBmcm9tOiBcIi4vc3JjL2luZGV4LnNkay50c1wiLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogXCJzdHlsZWQtY29tcG9uZW50c1wiLFxyXG4gICAgbWVyZ2VEZWZhdWx0QW5kTmFtZUV4cG9ydHM6IHRydWUsXHJcbiAgfSxcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBnZXQgZ2xvYmFsIHZhciBuYW1lIGZyb20gbW9kdWxlIG5hbWVcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRMaWJHbG9iYWxWYXJOYW1lID0gKG5hbWUpID0+IHtcclxuICByZXR1cm4gXCIkXCIgKyBuYW1lLnJlcGxhY2UoL0AvZywgXCIkXCIpLnJlcGxhY2UoL1tcXC9cXC1dL2csIFwiX1wiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRMaWJOYW1lcyA9ICgpID0+IHtcclxuICByZXR1cm4gbGlicy5tYXAoKGkpID0+IHtcclxuICAgIGlmICh0eXBlb2YgaSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICByZXR1cm4gaS5uYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0QWxsTGliR2xvYmFsVmFyTmFtZXMgPSAoKSA9PiB7XHJcbiAgY29uc3QgcmV0ID0ge307XHJcbiAgbGlicy5mb3JFYWNoKChsaWIpID0+IHtcclxuICAgIGxldCBuYW1lID0gbGliO1xyXG4gICAgaWYgKHR5cGVvZiBsaWIgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgbmFtZSA9IGxpYi5uYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0W25hbWVdID0gZ2V0TGliR2xvYmFsVmFyTmFtZShuYW1lKTtcclxuICB9KTtcclxuICByZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGxpYnNJbXBvcnRDb2RlID0gKGV4Y2x1ZGUgPSBbXSkgPT4ge1xyXG4gIGNvbnN0IGltcG9ydExpbmVzID0gW107XHJcbiAgY29uc3QgYXNzaWduTGluZXMgPSBbXTtcclxuICBsaWJzLmZvckVhY2goKGkpID0+IHtcclxuICAgIGxldCBuYW1lID0gaTtcclxuICAgIGxldCBtZXJnZSA9IGZhbHNlO1xyXG4gICAgbGV0IGZyb20gPSBuYW1lO1xyXG4gICAgbGV0IGV4dHJhY3REZWZhdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIG5hbWUgPSBpLm5hbWU7XHJcbiAgICAgIG1lcmdlID0gaS5tZXJnZURlZmF1bHRBbmROYW1lRXhwb3J0cyA/PyBmYWxzZTtcclxuICAgICAgZnJvbSA9IGkuZnJvbSA/PyBuYW1lO1xyXG4gICAgICBleHRyYWN0RGVmYXVsdCA9IGkuZXh0cmFjdERlZmF1bHQgPz8gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4Y2x1ZGUuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhck5hbWUgPSBnZXRMaWJHbG9iYWxWYXJOYW1lKG5hbWUpO1xyXG4gICAgaWYgKG1lcmdlKSB7XHJcbiAgICAgIGltcG9ydExpbmVzLnB1c2goYGltcG9ydCAqIGFzICR7dmFyTmFtZX1fbmFtZWRfZXhwb3J0cyBmcm9tICcke2Zyb219JztgKTtcclxuICAgICAgaW1wb3J0TGluZXMucHVzaChgaW1wb3J0ICR7dmFyTmFtZX0gZnJvbSAnJHtmcm9tfSc7YCk7XHJcbiAgICAgIGFzc2lnbkxpbmVzLnB1c2goYE9iamVjdC5hc3NpZ24oJHt2YXJOYW1lfSwgJHt2YXJOYW1lfV9uYW1lZF9leHBvcnRzKTtgKTtcclxuICAgIH0gZWxzZSBpZiAoZXh0cmFjdERlZmF1bHQpIHtcclxuICAgICAgaW1wb3J0TGluZXMucHVzaChgaW1wb3J0ICR7dmFyTmFtZX0gZnJvbSAnJHtmcm9tfSc7YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbXBvcnRMaW5lcy5wdXNoKGBpbXBvcnQgKiBhcyAke3Zhck5hbWV9IGZyb20gJyR7ZnJvbX0nO2ApO1xyXG4gICAgfVxyXG4gICAgYXNzaWduTGluZXMucHVzaChgd2luZG93LiR7dmFyTmFtZX0gPSAke3Zhck5hbWV9O2ApO1xyXG4gIH0pO1xyXG4gIHJldHVybiBpbXBvcnRMaW5lcy5jb25jYXQoYXNzaWduTGluZXMpLmpvaW4oXCJcXG5cIik7XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXFxcXHNyY1xcXFxkZXYtdXRpbHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFByb2plY3RzXFxcXGxvd2NvZGVyXFxcXGNsaWVudFxcXFxwYWNrYWdlc1xcXFxsb3djb2RlclxcXFxzcmNcXFxcZGV2LXV0aWxzXFxcXGdsb2JhbERlcFBsZ3Vpbi5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovUHJvamVjdHMvbG93Y29kZXIvY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvZ2xvYmFsRGVwUGxndWluLmpzXCI7aW1wb3J0IHsgbGlic0ltcG9ydENvZGUgfSBmcm9tIFwiLi9leHRlcm5hbC5qc1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JhbERlcFBsdWdpbihleGNsdWRlID0gW10pIHtcclxuICBjb25zdCB2aXJ0dWFsTW9kdWxlSWQgPSBcInZpcnR1YWw6Z2xvYmFsc1wiO1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiBcImxvd2NvZGVyLWdsb2JhbC1wbHVnaW5cIixcclxuICAgIHJlc29sdmVJZChpZCkge1xyXG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkge1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGxvYWQoaWQpIHtcclxuICAgICAgaWYgKGlkID09PSB2aXJ0dWFsTW9kdWxlSWQpIHtcclxuICAgICAgICByZXR1cm4gbGlic0ltcG9ydENvZGUoZXhjbHVkZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQXVVLE9BQU8sWUFBWTtBQUMxVixTQUFTLG9CQUErQztBQUN4RCxPQUFPLFdBQVc7QUFDbEIsT0FBTyx1QkFBdUI7QUFDOUIsT0FBTyxnQkFBZ0I7QUFDdkIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMsa0JBQWtCO0FBQzNCLE9BQU8sVUFBVTtBQUNqQixPQUFPLFdBQVc7QUFDbEIsU0FBUyx3QkFBd0I7OztBQ0UxQixTQUFTLGdCQUFnQixLQUFLO0FBQ25DLE1BQUksQ0FBQyxLQUFLO0FBQ1IsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLENBQUMsSUFBSSxTQUFTLEdBQUcsR0FBRztBQUN0QixXQUFPLEdBQUcsR0FBRztBQUFBLEVBQ2Y7QUFDQSxTQUFPO0FBQ1Q7OztBQ25Cc1gsSUFBTSxZQUFZO0FBQUEsRUFDdFk7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQjtBQUNGOzs7QUNwRE8sSUFBTSxPQUFPO0FBQUEsRUFDbEI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sZ0JBQWdCO0FBQUEsRUFDbEI7QUFBQSxFQUNBO0FBQUEsSUFDRSxNQUFNO0FBQUEsSUFDTixnQkFBZ0I7QUFBQSxFQUNsQjtBQUFBLEVBQ0E7QUFBQSxJQUNFLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxFQUNSO0FBQUEsRUFDQTtBQUFBLElBQ0UsTUFBTTtBQUFBLElBQ04sNEJBQTRCO0FBQUEsRUFDOUI7QUFDRjtBQU9PLElBQU0sc0JBQXNCLENBQUMsU0FBUztBQUMzQyxTQUFPLE1BQU0sS0FBSyxRQUFRLE1BQU0sR0FBRyxFQUFFLFFBQVEsV0FBVyxHQUFHO0FBQzdEO0FBdUJPLElBQU0saUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU07QUFDOUMsUUFBTSxjQUFjLENBQUM7QUFDckIsUUFBTSxjQUFjLENBQUM7QUFDckIsT0FBSyxRQUFRLENBQUMsTUFBTTtBQUNsQixRQUFJLE9BQU87QUFDWCxRQUFJLFFBQVE7QUFDWixRQUFJLE9BQU87QUFDWCxRQUFJLGlCQUFpQjtBQUVyQixRQUFJLE9BQU8sTUFBTSxVQUFVO0FBQ3pCLGFBQU8sRUFBRTtBQUNULGNBQVEsRUFBRSw4QkFBOEI7QUFDeEMsYUFBTyxFQUFFLFFBQVE7QUFDakIsdUJBQWlCLEVBQUUsa0JBQWtCO0FBQUEsSUFDdkM7QUFFQSxRQUFJLFFBQVEsU0FBUyxJQUFJLEdBQUc7QUFDMUI7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLG9CQUFvQixJQUFJO0FBQ3hDLFFBQUksT0FBTztBQUNULGtCQUFZLEtBQUssZUFBZSxPQUFPLHdCQUF3QixJQUFJLElBQUk7QUFDdkUsa0JBQVksS0FBSyxVQUFVLE9BQU8sVUFBVSxJQUFJLElBQUk7QUFDcEQsa0JBQVksS0FBSyxpQkFBaUIsT0FBTyxLQUFLLE9BQU8sa0JBQWtCO0FBQUEsSUFDekUsV0FBVyxnQkFBZ0I7QUFDekIsa0JBQVksS0FBSyxVQUFVLE9BQU8sVUFBVSxJQUFJLElBQUk7QUFBQSxJQUN0RCxPQUFPO0FBQ0wsa0JBQVksS0FBSyxlQUFlLE9BQU8sVUFBVSxJQUFJLElBQUk7QUFBQSxJQUMzRDtBQUNBLGdCQUFZLEtBQUssVUFBVSxPQUFPLE1BQU0sT0FBTyxHQUFHO0FBQUEsRUFDcEQsQ0FBQztBQUNELFNBQU8sWUFBWSxPQUFPLFdBQVcsRUFBRSxLQUFLLElBQUk7QUFDbEQ7OztBQ25HTyxTQUFTLGdCQUFnQixVQUFVLENBQUMsR0FBRztBQUM1QyxRQUFNLGtCQUFrQjtBQUN4QixTQUFPO0FBQUEsSUFDTCxNQUFNO0FBQUEsSUFDTixVQUFVLElBQUk7QUFDWixVQUFJLE9BQU8saUJBQWlCO0FBQzFCLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLElBQ0EsS0FBSyxJQUFJO0FBQ1AsVUFBSSxPQUFPLGlCQUFpQjtBQUMxQixlQUFPLGVBQWUsT0FBTztBQUFBLE1BQy9CO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjs7O0FKakJBLElBQU0sbUNBQW1DO0FBY3pDLE9BQU8sT0FBTztBQUVkLElBQU0saUJBQWlCLFFBQVEsSUFBSTtBQUNuQyxJQUFNLDRCQUE0QixRQUFRLElBQUk7QUFDOUMsSUFBTSxVQUFVLFFBQVEsSUFBSSxZQUFZO0FBQ3hDLElBQU0sVUFBVSxRQUFRLElBQUk7QUFDNUIsSUFBTSxhQUFhLFlBQVk7QUFDL0IsSUFBTSxPQUFPLFlBQVksZ0JBQWdCO0FBQ3pDLElBQU0sUUFBUSxZQUFZO0FBQzFCLElBQU0sc0JBQXNCLENBQUMsQ0FBQyxRQUFRLElBQUk7QUFHMUMsSUFBTSx1QkFBdUI7QUFDN0IsSUFBTSxPQUFPLGdCQUFnQixRQUFRLElBQUksVUFBVTtBQUVuRCxJQUFJLENBQUMsa0JBQWtCLE9BQU87QUFDNUIsVUFBUSxJQUFJO0FBQ1osVUFBUSxJQUFJLE1BQU0sNENBQTRDO0FBQzlELFVBQVEsSUFBSSxNQUFNLGtGQUFrRjtBQUNwRyxVQUFRLElBQUk7QUFDWixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLElBQU0sY0FBc0M7QUFBQSxFQUMxQyxRQUFRO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDaEI7QUFDRjtBQUVBLElBQUksMkJBQTJCO0FBQzdCLGNBQVksZUFBZSxJQUFJO0FBQUEsSUFDN0IsUUFBUTtBQUFBLEVBQ1Y7QUFDRjtBQUVBLElBQU0sU0FBUyxDQUFDO0FBQ2hCLFVBQVUsUUFBUSxDQUFDLEVBQUUsTUFBTSxhQUFhLE1BQU07QUFDNUMsU0FBTyxJQUFJLElBQUksS0FBSyxVQUFVLFFBQVEsSUFBSSxJQUFJLEtBQUssWUFBWTtBQUNqRSxDQUFDO0FBR00sSUFBTSxhQUF5QjtBQUFBLEVBQ3BDO0FBQUEsRUFDQSxlQUFlLENBQUMsU0FBUztBQUFBLEVBQ3pCLFNBQVM7QUFBQSxJQUNQLFlBQVksQ0FBQyxRQUFRLE9BQU8sT0FBTyxRQUFRLFFBQVEsT0FBTztBQUFBLElBQzFELE9BQU87QUFBQSxNQUNMLGdCQUFnQixLQUFLO0FBQUEsUUFDbkI7QUFBQSxRQUNBLE9BQU8sbUJBQW1CLGFBQWEsY0FBYyxJQUFJLEtBQUs7QUFBQSxNQUNoRTtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQUEsRUFDQTtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsVUFBVTtBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsZUFBZTtBQUFBLE1BQ2IsUUFBUTtBQUFBLFFBQ04sZ0JBQWdCO0FBQUEsTUFDbEI7QUFBQSxJQUNGO0FBQUEsSUFDQSxpQkFBaUI7QUFBQSxNQUNmLHdCQUF3QixDQUFDLE9BQU87QUFDOUIsWUFBSSxHQUFHLFFBQVEsVUFBVSxNQUFNLElBQUk7QUFDakMsaUJBQU87QUFBQSxRQUNUO0FBQ0EsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsS0FBSztBQUFBLElBQ0gscUJBQXFCO0FBQUEsTUFDbkIsTUFBTTtBQUFBLFFBQ0osWUFBWTtBQUFBLFVBQ1Ysa0JBQWtCO0FBQUEsVUFDbEIsZUFBZTtBQUFBLFVBQ2Ysc0JBQXNCO0FBQUEsVUFDdEIsdUJBQXVCO0FBQUEsUUFDekI7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLE9BQU87QUFBQSxFQUNUO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUCxRQUFRO0FBQUEsTUFDTixZQUFZO0FBQUEsTUFDWixRQUFRO0FBQUEsUUFDTixhQUFhO0FBQUEsUUFDYixLQUFLO0FBQUEsVUFDSCxVQUFVLENBQUMsT0FBTztBQUFBLFFBQ3BCO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLElBQ0QsTUFBTTtBQUFBLE1BQ0osT0FBTztBQUFBLFFBQ0wsWUFBWTtBQUFBLFVBQ1YsU0FBUyxDQUFDLG1CQUFtQjtBQUFBLFFBQy9CO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUFBLElBQ0Qsa0JBQWtCO0FBQUEsTUFDaEIsVUFBVSxDQUFDLDZCQUE2QixrQ0FBa0M7QUFBQSxJQUM1RSxDQUFDO0FBQUEsSUFDRCxXQUFXO0FBQUEsTUFDVCxhQUFhO0FBQUEsUUFDWCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsUUFDVixNQUFNO0FBQUEsUUFDTixXQUFXO0FBQUEsUUFDWCxLQUFLO0FBQUEsTUFDUDtBQUFBLElBQ0YsQ0FBQztBQUFBLElBQ0QsZ0JBQWdCO0FBQUEsSUFDaEIsaUJBQWlCO0FBQUEsTUFDZixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsUUFDTixNQUFNO0FBQUEsVUFDSixvQkFBb0IsUUFBUSxLQUFLLGdCQUFnQixJQUFJLEdBQUcsb0JBQW9CO0FBQUEsUUFDOUU7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsSUFDRCx1QkFBdUIsV0FBVztBQUFBLEVBQ3BDLEVBQUUsT0FBTyxPQUFPO0FBQ2xCO0FBRUEsSUFBTSxxQkFBaUM7QUFBQSxFQUNyQyxHQUFHO0FBQUEsRUFDSCxRQUFRO0FBQUEsSUFDTixHQUFHLFdBQVc7QUFBQSxJQUNkLHdCQUF3QixLQUFLLFVBQVUsWUFBWTtBQUFBLEVBQ3JEO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTCxHQUFHLFdBQVc7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLGVBQWU7QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLEtBQUs7QUFBQSxNQUNILFNBQVMsQ0FBQyxNQUFNO0FBQUEsTUFDaEIsTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLE1BQ1AsVUFBVSxNQUFNO0FBQ2QsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUEsSUFBTSxlQUFlO0FBQUEsRUFDbkIsTUFBTTtBQUFBLEVBQ04sY0FBYztBQUNoQjtBQUVBLElBQU0sY0FBYyxhQUFhLFFBQVEsSUFBSSxnQkFBZ0IsTUFBTTtBQUVuRSxJQUFPLHNCQUFRLGFBQWEsZUFBZSxVQUFVOyIsCiAgIm5hbWVzIjogW10KfQo= From 8fd726c954c6cb4de310639a11c65a781fe72159 Mon Sep 17 00:00:00 2001 From: Imtanan Aziz Toor Date: Thu, 15 Feb 2024 21:15:52 +0500 Subject: [PATCH 3/5] Text area font style added --- .../tableComp/column/tableColumnComp.tsx | 28 ++++++---- .../comps/comps/tableComp/tableCompView.tsx | 56 +++++++++++-------- .../src/comps/comps/tableComp/tableTypes.tsx | 2 +- .../src/comps/comps/tableComp/tableUtils.tsx | 2 + .../comps/controls/styleControlConstants.tsx | 8 ++- 5 files changed, 59 insertions(+), 37 deletions(-) diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx index 39a392ad4..0de024795 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/column/tableColumnComp.tsx @@ -108,6 +108,7 @@ export const columnChildrenMap = { textSize: withDefault(RadiusControl, ""), textWeight: withDefault(StringControl, "normal"), fontFamily: withDefault(StringControl, "sans-serif"), + fontStyle: withDefault(StringControl, 'normal'), cellColor: CellColorComp, textOverflow: withDefault(TextOverflowControl, "ellipsis"), linkColor: withDefault(ColorControl, "#3377ff"), @@ -155,10 +156,10 @@ export class ColumnComp extends ColumnInitComp { ) ); } - if(action.type === CompActionTypes.CHANGE_VALUE) { + if (action.type === CompActionTypes.CHANGE_VALUE) { const title = comp.children.title.unevaledValue; const dataIndex = comp.children.dataIndex.getView(); - if(!Boolean(title)) { + if (!Boolean(title)) { comp.children.title.dispatchChangeValueAction(dataIndex); } } @@ -223,10 +224,10 @@ export class ColumnComp extends ColumnInitComp { })} {this.children.autoWidth.getView() === "fixed" && this.children.width.propertyView({ label: trans("prop.width") })} - + {(columnType === 'link' || columnType === 'links') && ( <> - + {controlItem({}, (
{"Link Style"} @@ -243,10 +244,10 @@ export class ColumnComp extends ColumnInitComp { })} )} - + {controlItem({}, (
- {"Column Style"} + {"Column Style"}
))} {this.children.background.propertyView({ @@ -260,29 +261,34 @@ export class ColumnComp extends ColumnInitComp { })} {this.children.borderWidth.propertyView({ label: trans('style.borderWidth'), - preInputNode: , + preInputNode: , placeholder: '1px', })} {this.children.radius.propertyView({ label: trans('style.borderRadius'), - preInputNode: , + preInputNode: , placeholder: '3px', })} {this.children.textSize.propertyView({ label: trans('style.textSize'), - preInputNode: , + preInputNode: , placeholder: '14px', })} {this.children.textWeight.propertyView({ label: trans('style.textWeight'), - preInputNode: , + preInputNode: , placeholder: 'normal', })} {this.children.fontFamily.propertyView({ label: trans('style.fontFamily'), - preInputNode: , + preInputNode: , placeholder: 'sans-serif', })} + {this.children.fontStyle.propertyView({ + label: trans('style.fontStyle'), + preInputNode: , + placeholder: 'normal' + })} {this.children.textOverflow.getPropertyView()} {this.children.cellColor.getPropertyView()} diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx index 729e8f6b9..f16db203e 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx @@ -51,7 +51,7 @@ const getStyle = ( style: TableStyleType, rowStyle: TableRowStyleType, headerStyle: TableHeaderStyleType, - toolbarStyle: TableToolbarStyleType + toolbarStyle: TableToolbarStyleType, ) => { const background = genLinerGradient(style.background); const selectedRowBackground = genLinerGradient(rowStyle.selectedRowBackground); @@ -140,7 +140,8 @@ const BackgroundWrapper = styled.div<{ background: ${(props) => props.$style.background} !important; border: ${(props) => `${props.$style.borderWidth} solid ${props.$style.border} !important`}; border-radius: ${(props) => props.$style.radius} !important; - padding: unset !important; + // padding: unset !important; + padding: ${(props) => props.$style.padding} !important margin: ${(props) => props.$style.margin} !important; overflow: scroll !important; ${(props) => props.$style} @@ -209,18 +210,19 @@ const TableWrapper = styled.div<{ > .ant-table-thead { > tr > th { background-color: ${(props) => props.$headerStyle.headerBackground}; + border-color: ${(props) => props.$headerStyle.border}; border-width: ${(props) => props.$headerStyle.borderWidth}; color: ${(props) => props.$headerStyle.headerText}; border-inline-end: ${(props) => `${props.$headerStyle.borderWidth} solid ${props.$headerStyle.border}`} !important; - ${(props) => - props.$fixedHeader && ` + ${(props) => + props.$fixedHeader && ` position: sticky; position: -webkit-sticky; top: ${props.$fixedToolbar ? '47px' : '0'}; z-index: 99; ` - } + } > div { margin: ${(props) => props.$headerStyle.margin}; @@ -229,6 +231,8 @@ const TableWrapper = styled.div<{ font-size: ${(props) => props.$headerStyle.textSize}; font-weight: ${(props) => props.$headerStyle.textWeight}; font-family: ${(props) => props.$headerStyle.fontFamily}; + font-style: ${(props) => props.$headerStyle.fontStyle}; + color:${(props) => props.$headerStyle.text} } } @@ -286,8 +290,8 @@ const TableWrapper = styled.div<{ // hide the bottom border of the last row ${(props) => - props.$toolbarPosition !== "below" && - ` + props.$toolbarPosition !== "below" && + ` tbody > tr:last-child > td { border-bottom: unset; } @@ -300,10 +304,10 @@ const TableWrapper = styled.div<{ } } - ${(props) => + ${(props) => props.$style && getStyle(props.$style, props.$rowStyle, props.$headerStyle, props.$toolbarStyle)} `; - + const TableTh = styled.th<{ width?: number }>` overflow: hidden; @@ -318,7 +322,7 @@ const TableTh = styled.th<{ width?: number }>` const TableTd = styled.td<{ $background: string; - $style: TableColumnStyleType & {rowHeight?: string}; + $style: TableColumnStyleType & { rowHeight?: string }; $defaultThemeDetail: ThemeDetail; $linkStyle?: TableColumnLinkStyleType; $isEditing: boolean; @@ -348,7 +352,8 @@ const TableTd = styled.td<{ ${(props) => props.$tableSize === 'small' && ` padding: 1px 8px; - font-size: ${props.$defaultThemeDetail.textSize == props.$style.textSize ? '14px !important' : props.$style.textSize + ' !important' }; + font-size: ${props.$defaultThemeDetail.textSize == props.$style.textSize ? '14px !important' : props.$style.textSize + ' !important'}; + font-style:${props.$style.fontStyle} !important; min-height: ${props.$style.rowHeight || '14px'}; line-height: 20px; ${!props.$autoHeight && ` @@ -358,7 +363,8 @@ const TableTd = styled.td<{ `}; ${(props) => props.$tableSize === 'middle' && ` padding: 8px 8px; - font-size: ${props.$defaultThemeDetail.textSize == props.$style.textSize ? '16px !important' : props.$style.textSize + ' !important' }; + font-size: ${props.$defaultThemeDetail.textSize == props.$style.textSize ? '16px !important' : props.$style.textSize + ' !important'}; + font-style:${props.$style.fontStyle} !important; min-height: ${props.$style.rowHeight || '24px'}; line-height: 24px; ${!props.$autoHeight && ` @@ -368,7 +374,8 @@ const TableTd = styled.td<{ `}; ${(props) => props.$tableSize === 'large' && ` padding: 16px 16px; - font-size: ${props.$defaultThemeDetail.textSize == props.$style.textSize ? '18px !important' : props.$style.textSize + ' !important' }; + font-size: ${props.$defaultThemeDetail.textSize == props.$style.textSize ? '18px !important' : props.$style.textSize + ' !important'}; + font-style:${props.$style.fontStyle} !important; min-height: ${props.$style.rowHeight || '48px'}; ${!props.$autoHeight && ` overflow-y: auto; @@ -444,7 +451,7 @@ const ResizeableTitle = (props: any) => { draggableOpts={{ enableUserSelectHack: false }} handle={(axis: ResizeHandleAxis, ref: ReactRef) => ( { e.preventDefault(); e.stopPropagation(); @@ -519,7 +526,7 @@ function TableCellView(props: { const cellColor = cellColorFn({ currentCell: record[title.toLowerCase()], }); - + const style = { background: cellColor || rowColor || columnStyle.background || columnsStyle.background, margin: columnStyle.margin || columnsStyle.margin, @@ -530,6 +537,7 @@ function TableCellView(props: { textSize: columnStyle.textSize || columnsStyle.textSize, textWeight: columnStyle.textWeight || columnsStyle.textWeight, fontFamily: columnStyle.fontFamily || columnsStyle.fontFamily, + fontStyle: columnStyle.fontStyle || columnsStyle.fontStyle, rowHeight: rowHeight, } let { background } = style; @@ -554,7 +562,7 @@ function TableCellView(props: { ); } - + return ( {tdView} @@ -804,7 +812,7 @@ export function TableCompView(props: { return ( - + {toolbar.position === "above" && toolbarView} { - if(expanded) { - handleChangeEvent('rowExpand') - } else { - handleChangeEvent('rowShrink') - } + if (expanded) { + handleChangeEvent('rowExpand') + } else { + handleChangeEvent('rowShrink') + } } }} rowColorFn={compChildren.rowColor.getView() as any} @@ -857,14 +865,14 @@ export function TableCompView(props: { compChildren.loading.getView() } /> - + {expansion.expandModalView} {toolbar.position === "below" && toolbarView} - + ); } diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableTypes.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableTypes.tsx index 90f5f0a6c..41a846c19 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableTypes.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableTypes.tsx @@ -210,7 +210,7 @@ const tableChildrenMap = { toolbarStyle: styleControl(TableToolbarStyle), headerStyle: styleControl(TableHeaderStyle), searchText: StringControl, - columnsStyle: withDefault(styleControl(TableColumnStyle), {borderWidth: '1px', radius: '0px'}), + columnsStyle: withDefault(styleControl(TableColumnStyle), {borderWidth: '1px', radius: '0px',fontStyle:'italic'}), viewModeResizable: BoolControl, visibleResizables: BoolControl, // sample data for regenerating columns diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx index 4532475c8..83bc941d7 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableUtils.tsx @@ -311,6 +311,7 @@ export function columnsToAntdFormat( status: StatusType; }[]; const title = renderTitle({ title: column.title, editable: column.editable }); + return { title: column.showTitle ? title : '', titleText: column.title, @@ -326,6 +327,7 @@ export function columnsToAntdFormat( radius: column.radius, textSize: column.textSize, textWeight: column.textWeight, + fontStyle:column.fontStyle, fontFamily: column.fontFamily, borderWidth: column.borderWidth, }, diff --git a/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx b/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx index f8fa415a8..c01fc0d0b 100644 --- a/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx +++ b/client/packages/lowcoder/src/comps/controls/styleControlConstants.tsx @@ -920,6 +920,7 @@ const LinkTextStyle = [ export const TableStyle = [ MARGIN, + PADDING, ...BG_STATIC_BORDER_RADIUS, { name: "borderWidth", @@ -943,6 +944,10 @@ export const TableToolbarStyle = [ export const TableHeaderStyle = [ MARGIN, + PADDING, + FONT_FAMILY, + FONT_STYLE, + TEXT, { name: "headerBackground", label: trans("style.tableHeaderBackground"), @@ -1000,7 +1005,8 @@ export const TableColumnStyle = [ TEXT, TEXT_SIZE, TEXT_WEIGHT, - FONT_FAMILY + FONT_FAMILY, + FONT_STYLE, ] as const; export const TableColumnLinkStyle = [ From a603a57f2dc5791564a55d52611b4910fccc3f2a Mon Sep 17 00:00:00 2001 From: Imtanan Aziz Toor Date: Thu, 15 Feb 2024 21:17:50 +0500 Subject: [PATCH 4/5] Table column styles working --- .../lowcoder/src/comps/comps/tableComp/tableCompView.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx b/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx index f16db203e..fcf99b18a 100644 --- a/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx +++ b/client/packages/lowcoder/src/comps/comps/tableComp/tableCompView.tsx @@ -535,9 +535,9 @@ function TableCellView(props: { radius: columnStyle.radius || columnsStyle.radius, borderWidth: columnStyle.borderWidth || columnsStyle.borderWidth, textSize: columnStyle.textSize || columnsStyle.textSize, - textWeight: columnStyle.textWeight || columnsStyle.textWeight, - fontFamily: columnStyle.fontFamily || columnsStyle.fontFamily, - fontStyle: columnStyle.fontStyle || columnsStyle.fontStyle, + textWeight: columnsStyle.textWeight || columnStyle.textWeight, + fontFamily: columnsStyle.fontFamily || columnStyle.fontFamily, + fontStyle: columnsStyle.fontStyle || columnStyle.fontStyle, rowHeight: rowHeight, } let { background } = style; From e3463a087010dc33e8b66b615ad7daa786bc66e7 Mon Sep 17 00:00:00 2001 From: imtananikhwa <156658165+imtananikhwa@users.noreply.github.com> Date: Sat, 17 Feb 2024 13:51:28 +0500 Subject: [PATCH 5/5] Delete client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs junk file removed --- ....timestamp-1708005283355-9ba212c9a46a4.mjs | 331 ------------------ 1 file changed, 331 deletions(-) delete mode 100644 client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs diff --git a/client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs b/client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs deleted file mode 100644 index 8600472a2..000000000 --- a/client/packages/lowcoder/vite.config.mts.timestamp-1708005283355-9ba212c9a46a4.mjs +++ /dev/null @@ -1,331 +0,0 @@ -// vite.config.mts -import dotenv from "file:///C:/Projects/lowcoder/client/node_modules/dotenv/lib/main.js"; -import { defineConfig } from "file:///C:/Projects/lowcoder/client/node_modules/vite/dist/node/index.js"; -import react from "file:///C:/Projects/lowcoder/client/node_modules/@vitejs/plugin-react/dist/index.mjs"; -import viteTsconfigPaths from "file:///C:/Projects/lowcoder/client/node_modules/vite-tsconfig-paths/dist/index.mjs"; -import svgrPlugin from "file:///C:/Projects/lowcoder/client/node_modules/vite-plugin-svgr/dist/index.mjs"; -import checker from "file:///C:/Projects/lowcoder/client/node_modules/vite-plugin-checker/dist/esm/main.js"; -import { visualizer } from "file:///C:/Projects/lowcoder/client/node_modules/rollup-plugin-visualizer/dist/plugin/index.js"; -import path from "path"; -import chalk from "file:///C:/Projects/lowcoder/client/node_modules/chalk/source/index.js"; -import { createHtmlPlugin } from "file:///C:/Projects/lowcoder/client/node_modules/vite-plugin-html/dist/index.mjs"; - -// src/dev-utils/util.js -function ensureLastSlash(str) { - if (!str) { - return "/"; - } - if (!str.endsWith("/")) { - return `${str}/`; - } - return str; -} - -// src/dev-utils/buildVars.js -var buildVars = [ - { - name: "PUBLIC_URL", - defaultValue: "/" - }, - { - name: "REACT_APP_EDITION", - defaultValue: "community" - }, - { - name: "REACT_APP_LANGUAGES", - defaultValue: "" - }, - { - name: "REACT_APP_COMMIT_ID", - defaultValue: "00000" - }, - { - name: "REACT_APP_API_HOST", - defaultValue: "" - }, - { - name: "LOWCODER_NODE_SERVICE_URL", - defaultValue: "" - }, - { - name: "REACT_APP_ENV", - defaultValue: "production" - }, - { - name: "REACT_APP_BUILD_ID", - defaultValue: "" - }, - { - name: "REACT_APP_LOG_LEVEL", - defaultValue: "error" - }, - { - name: "REACT_APP_IMPORT_MAP", - defaultValue: "{}" - }, - { - name: "REACT_APP_SERVER_IPS", - defaultValue: "" - }, - { - name: "REACT_APP_BUNDLE_BUILTIN_PLUGIN", - defaultValue: "" - }, - { - name: "REACT_APP_BUNDLE_TYPE", - defaultValue: "app" - }, - { - name: "REACT_APP_DISABLE_JS_SANDBOX", - defaultValue: "" - } -]; - -// src/dev-utils/external.js -var libs = [ - "axios", - "redux", - "react-router", - "react-router-dom", - "react-redux", - "react", - "react-dom", - "lodash", - "history", - "antd", - "@dnd-kit/core", - "@dnd-kit/modifiers", - "@dnd-kit/sortable", - "@dnd-kit/utilities", - { - name: "moment", - extractDefault: true - }, - { - name: "dayjs", - extractDefault: true - }, - { - name: "lowcoder-sdk", - from: "./src/index.sdk.ts" - }, - { - name: "styled-components", - mergeDefaultAndNameExports: true - } -]; -var getLibGlobalVarName = (name) => { - return "$" + name.replace(/@/g, "$").replace(/[\/\-]/g, "_"); -}; -var libsImportCode = (exclude = []) => { - const importLines = []; - const assignLines = []; - libs.forEach((i) => { - let name = i; - let merge = false; - let from = name; - let extractDefault = false; - if (typeof i === "object") { - name = i.name; - merge = i.mergeDefaultAndNameExports ?? false; - from = i.from ?? name; - extractDefault = i.extractDefault ?? false; - } - if (exclude.includes(name)) { - return; - } - const varName = getLibGlobalVarName(name); - if (merge) { - importLines.push(`import * as ${varName}_named_exports from '${from}';`); - importLines.push(`import ${varName} from '${from}';`); - assignLines.push(`Object.assign(${varName}, ${varName}_named_exports);`); - } else if (extractDefault) { - importLines.push(`import ${varName} from '${from}';`); - } else { - importLines.push(`import * as ${varName} from '${from}';`); - } - assignLines.push(`window.${varName} = ${varName};`); - }); - return importLines.concat(assignLines).join("\n"); -}; - -// src/dev-utils/globalDepPlguin.js -function globalDepPlugin(exclude = []) { - const virtualModuleId = "virtual:globals"; - return { - name: "lowcoder-global-plugin", - resolveId(id) { - if (id === virtualModuleId) { - return id; - } - }, - load(id) { - if (id === virtualModuleId) { - return libsImportCode(exclude); - } - } - }; -} - -// vite.config.mts -var __vite_injected_original_dirname = "C:\\Projects\\lowcoder\\client\\packages\\lowcoder"; -dotenv.config(); -var apiProxyTarget = process.env.LOWCODER_API_SERVICE_URL; -var nodeServiceApiProxyTarget = process.env.NODE_SERVICE_API_PROXY_TARGET; -var nodeEnv = process.env.NODE_ENV ?? "development"; -var edition = process.env.REACT_APP_EDITION; -var isEEGlobal = edition === "enterprise-global"; -var isEE = edition === "enterprise" || isEEGlobal; -var isDev = nodeEnv === "development"; -var isVisualizerEnabled = !!process.env.ENABLE_VISUALIZER; -var browserCheckFileName = `browser-check.js`; -var base = ensureLastSlash(process.env.PUBLIC_URL); -if (!apiProxyTarget && isDev) { - console.log(); - console.log(chalk.red`LOWCODER_API_SERVICE_URL is required.\n`); - console.log(chalk.cyan`Start with command: LOWCODER_API_SERVICE_URL=\{backend-api-addr\} yarn start`); - console.log(); - process.exit(1); -} -var proxyConfig = { - "/api": { - target: apiProxyTarget, - changeOrigin: false - } -}; -if (nodeServiceApiProxyTarget) { - proxyConfig["/node-service"] = { - target: nodeServiceApiProxyTarget - }; -} -var define = {}; -buildVars.forEach(({ name, defaultValue }) => { - define[name] = JSON.stringify(process.env[name] || defaultValue); -}); -var viteConfig = { - define, - assetsInclude: ["**/*.md"], - resolve: { - extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json"], - alias: { - "@lowcoder-ee": path.resolve( - __vite_injected_original_dirname, - isEE ? `../lowcoder/src/${isEEGlobal ? "ee-global" : "ee"}` : "../lowcoder/src" - ) - } - }, - base, - build: { - manifest: true, - target: "es2015", - cssTarget: "chrome63", - outDir: "build", - assetsDir: "static", - emptyOutDir: false, - rollupOptions: { - output: { - chunkFileNames: "[hash].js" - } - }, - commonjsOptions: { - defaultIsModuleExports: (id) => { - if (id.indexOf("antd/lib") !== -1) { - return false; - } - return "auto"; - } - } - }, - css: { - preprocessorOptions: { - less: { - modifyVars: { - "@primary-color": "#3377FF", - "@link-color": "#3377FF", - "@border-color-base": "#D7D9E0", - "@border-radius-base": "4px" - }, - javascriptEnabled: true - } - } - }, - server: { - open: true, - cors: true, - port: 8e3, - host: "0.0.0.0", - proxy: proxyConfig - }, - plugins: [ - checker({ - typescript: true, - eslint: { - lintCommand: 'eslint --quiet "./src/**/*.{ts,tsx}"', - dev: { - logLevel: ["error"] - } - } - }), - react({ - babel: { - parserOpts: { - plugins: ["decorators-legacy"] - } - } - }), - viteTsconfigPaths({ - projects: ["../lowcoder/tsconfig.json", "../lowcoder-design/tsconfig.json"] - }), - svgrPlugin({ - svgrOptions: { - exportType: "named", - prettier: false, - svgo: false, - titleProp: true, - ref: true - } - }), - globalDepPlugin(), - createHtmlPlugin({ - minify: true, - inject: { - data: { - browserCheckScript: isDev ? "" : `` - } - } - }), - isVisualizerEnabled && visualizer() - ].filter(Boolean) -}; -var browserCheckConfig = { - ...viteConfig, - define: { - ...viteConfig.define, - "process.env.NODE_ENV": JSON.stringify("production") - }, - build: { - ...viteConfig.build, - manifest: false, - copyPublicDir: false, - emptyOutDir: true, - lib: { - formats: ["iife"], - name: "BrowserCheck", - entry: "./src/browser-check.ts", - fileName: () => { - return browserCheckFileName; - } - } - } -}; -var buildTargets = { - main: viteConfig, - browserCheck: browserCheckConfig -}; -var buildTarget = buildTargets[process.env.BUILD_TARGET || "main"]; -var vite_config_default = defineConfig(buildTarget || viteConfig); -export { - vite_config_default as default, - viteConfig -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcubXRzIiwgInNyYy9kZXYtdXRpbHMvdXRpbC5qcyIsICJzcmMvZGV2LXV0aWxzL2J1aWxkVmFycy5qcyIsICJzcmMvZGV2LXV0aWxzL2V4dGVybmFsLmpzIiwgInNyYy9kZXYtdXRpbHMvZ2xvYmFsRGVwUGxndWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcdml0ZS5jb25maWcubXRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Qcm9qZWN0cy9sb3djb2Rlci9jbGllbnQvcGFja2FnZXMvbG93Y29kZXIvdml0ZS5jb25maWcubXRzXCI7aW1wb3J0IGRvdGVudiBmcm9tIFwiZG90ZW52XCI7XHJcbmltcG9ydCB7IGRlZmluZUNvbmZpZywgU2VydmVyT3B0aW9ucywgVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XHJcbmltcG9ydCByZWFjdCBmcm9tIFwiQHZpdGVqcy9wbHVnaW4tcmVhY3RcIjtcclxuaW1wb3J0IHZpdGVUc2NvbmZpZ1BhdGhzIGZyb20gXCJ2aXRlLXRzY29uZmlnLXBhdGhzXCI7XHJcbmltcG9ydCBzdmdyUGx1Z2luIGZyb20gXCJ2aXRlLXBsdWdpbi1zdmdyXCI7XHJcbmltcG9ydCBjaGVja2VyIGZyb20gXCJ2aXRlLXBsdWdpbi1jaGVja2VyXCI7XHJcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tIFwicm9sbHVwLXBsdWdpbi12aXN1YWxpemVyXCI7XHJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcclxuaW1wb3J0IHsgY3JlYXRlSHRtbFBsdWdpbiB9IGZyb20gXCJ2aXRlLXBsdWdpbi1odG1sXCI7XHJcbmltcG9ydCB7IGVuc3VyZUxhc3RTbGFzaCB9IGZyb20gXCIuL3NyYy9kZXYtdXRpbHMvdXRpbFwiO1xyXG5pbXBvcnQgeyBidWlsZFZhcnMgfSBmcm9tIFwiLi9zcmMvZGV2LXV0aWxzL2J1aWxkVmFyc1wiO1xyXG5pbXBvcnQgeyBnbG9iYWxEZXBQbHVnaW4gfSBmcm9tIFwiLi9zcmMvZGV2LXV0aWxzL2dsb2JhbERlcFBsZ3VpblwiO1xyXG5cclxuZG90ZW52LmNvbmZpZygpO1xyXG5cclxuY29uc3QgYXBpUHJveHlUYXJnZXQgPSBwcm9jZXNzLmVudi5MT1dDT0RFUl9BUElfU0VSVklDRV9VUkw7XHJcbmNvbnN0IG5vZGVTZXJ2aWNlQXBpUHJveHlUYXJnZXQgPSBwcm9jZXNzLmVudi5OT0RFX1NFUlZJQ0VfQVBJX1BST1hZX1RBUkdFVDtcclxuY29uc3Qgbm9kZUVudiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID8/IFwiZGV2ZWxvcG1lbnRcIjtcclxuY29uc3QgZWRpdGlvbiA9IHByb2Nlc3MuZW52LlJFQUNUX0FQUF9FRElUSU9OO1xyXG5jb25zdCBpc0VFR2xvYmFsID0gZWRpdGlvbiA9PT0gXCJlbnRlcnByaXNlLWdsb2JhbFwiO1xyXG5jb25zdCBpc0VFID0gZWRpdGlvbiA9PT0gXCJlbnRlcnByaXNlXCIgfHwgaXNFRUdsb2JhbDtcclxuY29uc3QgaXNEZXYgPSBub2RlRW52ID09PSBcImRldmVsb3BtZW50XCI7XHJcbmNvbnN0IGlzVmlzdWFsaXplckVuYWJsZWQgPSAhIXByb2Nlc3MuZW52LkVOQUJMRV9WSVNVQUxJWkVSO1xyXG4vLyB0aGUgZmlsZSB3YXMgbmV2ZXIgY3JlYXRlZFxyXG4vLyBjb25zdCBicm93c2VyQ2hlY2tGaWxlTmFtZSA9IGBicm93c2VyLWNoZWNrLSR7cHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX0NPTU1JVF9JRH0uanNgO1xyXG5jb25zdCBicm93c2VyQ2hlY2tGaWxlTmFtZSA9IGBicm93c2VyLWNoZWNrLmpzYDtcclxuY29uc3QgYmFzZSA9IGVuc3VyZUxhc3RTbGFzaChwcm9jZXNzLmVudi5QVUJMSUNfVVJMKTtcclxuXHJcbmlmICghYXBpUHJveHlUYXJnZXQgJiYgaXNEZXYpIHtcclxuICBjb25zb2xlLmxvZygpO1xyXG4gIGNvbnNvbGUubG9nKGNoYWxrLnJlZGBMT1dDT0RFUl9BUElfU0VSVklDRV9VUkwgaXMgcmVxdWlyZWQuXFxuYCk7XHJcbiAgY29uc29sZS5sb2coY2hhbGsuY3lhbmBTdGFydCB3aXRoIGNvbW1hbmQ6IExPV0NPREVSX0FQSV9TRVJWSUNFX1VSTD1cXHtiYWNrZW5kLWFwaS1hZGRyXFx9IHlhcm4gc3RhcnRgKTtcclxuICBjb25zb2xlLmxvZygpO1xyXG4gIHByb2Nlc3MuZXhpdCgxKTtcclxufVxyXG5cclxuY29uc3QgcHJveHlDb25maWc6IFNlcnZlck9wdGlvbnNbXCJwcm94eVwiXSA9IHtcclxuICBcIi9hcGlcIjoge1xyXG4gICAgdGFyZ2V0OiBhcGlQcm94eVRhcmdldCxcclxuICAgIGNoYW5nZU9yaWdpbjogZmFsc2UsXHJcbiAgfSxcclxufTtcclxuXHJcbmlmIChub2RlU2VydmljZUFwaVByb3h5VGFyZ2V0KSB7XHJcbiAgcHJveHlDb25maWdbXCIvbm9kZS1zZXJ2aWNlXCJdID0ge1xyXG4gICAgdGFyZ2V0OiBub2RlU2VydmljZUFwaVByb3h5VGFyZ2V0LFxyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IGRlZmluZSA9IHt9O1xyXG5idWlsZFZhcnMuZm9yRWFjaCgoeyBuYW1lLCBkZWZhdWx0VmFsdWUgfSkgPT4ge1xyXG4gIGRlZmluZVtuYW1lXSA9IEpTT04uc3RyaW5naWZ5KHByb2Nlc3MuZW52W25hbWVdIHx8IGRlZmF1bHRWYWx1ZSk7XHJcbn0pO1xyXG5cclxuLy8gaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy9cclxuZXhwb3J0IGNvbnN0IHZpdGVDb25maWc6IFVzZXJDb25maWcgPSB7XHJcbiAgZGVmaW5lLFxyXG4gIGFzc2V0c0luY2x1ZGU6IFtcIioqLyoubWRcIl0sXHJcbiAgcmVzb2x2ZToge1xyXG4gICAgZXh0ZW5zaW9uczogW1wiLm1qc1wiLCBcIi5qc1wiLCBcIi50c1wiLCBcIi5qc3hcIiwgXCIudHN4XCIsIFwiLmpzb25cIl0sXHJcbiAgICBhbGlhczoge1xyXG4gICAgICBcIkBsb3djb2Rlci1lZVwiOiBwYXRoLnJlc29sdmUoXHJcbiAgICAgICAgX19kaXJuYW1lLFxyXG4gICAgICAgIGlzRUUgPyBgLi4vbG93Y29kZXIvc3JjLyR7aXNFRUdsb2JhbCA/IFwiZWUtZ2xvYmFsXCIgOiBcImVlXCJ9YCA6IFwiLi4vbG93Y29kZXIvc3JjXCJcclxuICAgICAgKSxcclxuICAgIH0sXHJcbiAgfSxcclxuICBiYXNlLFxyXG4gIGJ1aWxkOiB7XHJcbiAgICBtYW5pZmVzdDogdHJ1ZSxcclxuICAgIHRhcmdldDogXCJlczIwMTVcIixcclxuICAgIGNzc1RhcmdldDogXCJjaHJvbWU2M1wiLFxyXG4gICAgb3V0RGlyOiBcImJ1aWxkXCIsXHJcbiAgICBhc3NldHNEaXI6IFwic3RhdGljXCIsXHJcbiAgICBlbXB0eU91dERpcjogZmFsc2UsXHJcbiAgICByb2xsdXBPcHRpb25zOiB7XHJcbiAgICAgIG91dHB1dDoge1xyXG4gICAgICAgIGNodW5rRmlsZU5hbWVzOiBcIltoYXNoXS5qc1wiLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIGNvbW1vbmpzT3B0aW9uczoge1xyXG4gICAgICBkZWZhdWx0SXNNb2R1bGVFeHBvcnRzOiAoaWQpID0+IHtcclxuICAgICAgICBpZiAoaWQuaW5kZXhPZihcImFudGQvbGliXCIpICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJhdXRvXCI7XHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgY3NzOiB7XHJcbiAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgIGxlc3M6IHtcclxuICAgICAgICBtb2RpZnlWYXJzOiB7XHJcbiAgICAgICAgICBcIkBwcmltYXJ5LWNvbG9yXCI6IFwiIzMzNzdGRlwiLFxyXG4gICAgICAgICAgXCJAbGluay1jb2xvclwiOiBcIiMzMzc3RkZcIixcclxuICAgICAgICAgIFwiQGJvcmRlci1jb2xvci1iYXNlXCI6IFwiI0Q3RDlFMFwiLFxyXG4gICAgICAgICAgXCJAYm9yZGVyLXJhZGl1cy1iYXNlXCI6IFwiNHB4XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfSxcclxuICBzZXJ2ZXI6IHtcclxuICAgIG9wZW46IHRydWUsXHJcbiAgICBjb3JzOiB0cnVlLFxyXG4gICAgcG9ydDogODAwMCxcclxuICAgIGhvc3Q6IFwiMC4wLjAuMFwiLFxyXG4gICAgcHJveHk6IHByb3h5Q29uZmlnLFxyXG4gIH0sXHJcbiAgcGx1Z2luczogW1xyXG4gICAgY2hlY2tlcih7XHJcbiAgICAgIHR5cGVzY3JpcHQ6IHRydWUsXHJcbiAgICAgIGVzbGludDoge1xyXG4gICAgICAgIGxpbnRDb21tYW5kOiAnZXNsaW50IC0tcXVpZXQgXCIuL3NyYy8qKi8qLnt0cyx0c3h9XCInLFxyXG4gICAgICAgIGRldjoge1xyXG4gICAgICAgICAgbG9nTGV2ZWw6IFtcImVycm9yXCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9KSxcclxuICAgIHJlYWN0KHtcclxuICAgICAgYmFiZWw6IHtcclxuICAgICAgICBwYXJzZXJPcHRzOiB7XHJcbiAgICAgICAgICBwbHVnaW5zOiBbXCJkZWNvcmF0b3JzLWxlZ2FjeVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfSksXHJcbiAgICB2aXRlVHNjb25maWdQYXRocyh7XHJcbiAgICAgIHByb2plY3RzOiBbXCIuLi9sb3djb2Rlci90c2NvbmZpZy5qc29uXCIsIFwiLi4vbG93Y29kZXItZGVzaWduL3RzY29uZmlnLmpzb25cIl0sXHJcbiAgICB9KSxcclxuICAgIHN2Z3JQbHVnaW4oe1xyXG4gICAgICBzdmdyT3B0aW9uczoge1xyXG4gICAgICAgIGV4cG9ydFR5cGU6IFwibmFtZWRcIixcclxuICAgICAgICBwcmV0dGllcjogZmFsc2UsXHJcbiAgICAgICAgc3ZnbzogZmFsc2UsXHJcbiAgICAgICAgdGl0bGVQcm9wOiB0cnVlLFxyXG4gICAgICAgIHJlZjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgZ2xvYmFsRGVwUGx1Z2luKCksXHJcbiAgICBjcmVhdGVIdG1sUGx1Z2luKHtcclxuICAgICAgbWluaWZ5OiB0cnVlLFxyXG4gICAgICBpbmplY3Q6IHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBicm93c2VyQ2hlY2tTY3JpcHQ6IGlzRGV2ID8gXCJcIiA6IGA8c2NyaXB0IHNyYz1cIiR7YmFzZX0ke2Jyb3dzZXJDaGVja0ZpbGVOYW1lfVwiPjwvc2NyaXB0PmAsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIH0pLFxyXG4gICAgaXNWaXN1YWxpemVyRW5hYmxlZCAmJiB2aXN1YWxpemVyKCksXHJcbiAgXS5maWx0ZXIoQm9vbGVhbiksXHJcbn07XHJcblxyXG5jb25zdCBicm93c2VyQ2hlY2tDb25maWc6IFVzZXJDb25maWcgPSB7XHJcbiAgLi4udml0ZUNvbmZpZyxcclxuICBkZWZpbmU6IHtcclxuICAgIC4uLnZpdGVDb25maWcuZGVmaW5lLFxyXG4gICAgXCJwcm9jZXNzLmVudi5OT0RFX0VOVlwiOiBKU09OLnN0cmluZ2lmeShcInByb2R1Y3Rpb25cIiksXHJcbiAgfSxcclxuICBidWlsZDoge1xyXG4gICAgLi4udml0ZUNvbmZpZy5idWlsZCxcclxuICAgIG1hbmlmZXN0OiBmYWxzZSxcclxuICAgIGNvcHlQdWJsaWNEaXI6IGZhbHNlLFxyXG4gICAgZW1wdHlPdXREaXI6IHRydWUsXHJcbiAgICBsaWI6IHtcclxuICAgICAgZm9ybWF0czogW1wiaWlmZVwiXSxcclxuICAgICAgbmFtZTogXCJCcm93c2VyQ2hlY2tcIixcclxuICAgICAgZW50cnk6IFwiLi9zcmMvYnJvd3Nlci1jaGVjay50c1wiLFxyXG4gICAgICBmaWxlTmFtZTogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBicm93c2VyQ2hlY2tGaWxlTmFtZTtcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgfSxcclxufTtcclxuXHJcbmNvbnN0IGJ1aWxkVGFyZ2V0cyA9IHtcclxuICBtYWluOiB2aXRlQ29uZmlnLFxyXG4gIGJyb3dzZXJDaGVjazogYnJvd3NlckNoZWNrQ29uZmlnLFxyXG59O1xyXG5cclxuY29uc3QgYnVpbGRUYXJnZXQgPSBidWlsZFRhcmdldHNbcHJvY2Vzcy5lbnYuQlVJTERfVEFSR0VUIHx8IFwibWFpblwiXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyhidWlsZFRhcmdldCB8fCB2aXRlQ29uZmlnKTtcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcc3JjXFxcXGRldi11dGlsc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXFxcXHNyY1xcXFxkZXYtdXRpbHNcXFxcdXRpbC5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovUHJvamVjdHMvbG93Y29kZXIvY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvdXRpbC5qc1wiO2ltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xyXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xyXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBMYXN0U2xhc2goc3RyKSB7XHJcbiAgaWYgKHN0ci5lbmRzV2l0aChcIi9cIikpIHtcclxuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgc3RyLmxlbmd0aCAtIDEpO1xyXG4gIH1cclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTGFzdFNsYXNoKHN0cikge1xyXG4gIGlmICghc3RyKSB7XHJcbiAgICByZXR1cm4gXCIvXCI7XHJcbiAgfVxyXG4gIGlmICghc3RyLmVuZHNXaXRoKFwiL1wiKSkge1xyXG4gICAgcmV0dXJuIGAke3N0cn0vYDtcclxuICB9XHJcbiAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRKc29uKGZpbGUpIHtcclxuICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZSkudG9TdHJpbmcoKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjdXJyZW50RGlyTmFtZShpbXBvcnRNZXRhVXJsKSB7XHJcbiAgcmV0dXJuIGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnRNZXRhVXJsKSk7XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcc3JjXFxcXGRldi11dGlsc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXFxcXHNyY1xcXFxkZXYtdXRpbHNcXFxcYnVpbGRWYXJzLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Qcm9qZWN0cy9sb3djb2Rlci9jbGllbnQvcGFja2FnZXMvbG93Y29kZXIvc3JjL2Rldi11dGlscy9idWlsZFZhcnMuanNcIjtleHBvcnQgY29uc3QgYnVpbGRWYXJzID0gW1xyXG4gIHtcclxuICAgIG5hbWU6IFwiUFVCTElDX1VSTFwiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcIi9cIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0VESVRJT05cIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJjb21tdW5pdHlcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0xBTkdVQUdFU1wiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogXCJSRUFDVF9BUFBfQ09NTUlUX0lEXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiMDAwMDBcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0FQSV9IT1NUXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIkxPV0NPREVSX05PREVfU0VSVklDRV9VUkxcIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0VOVlwiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcInByb2R1Y3Rpb25cIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0JVSUxEX0lEXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9MT0dfTEVWRUxcIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJlcnJvclwiLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogXCJSRUFDVF9BUFBfSU1QT1JUX01BUFwiLFxyXG4gICAgZGVmYXVsdFZhbHVlOiBcInt9XCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9TRVJWRVJfSVBTXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9CVU5ETEVfQlVJTFRJTl9QTFVHSU5cIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwiUkVBQ1RfQVBQX0JVTkRMRV9UWVBFXCIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiYXBwXCIsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcIlJFQUNUX0FQUF9ESVNBQkxFX0pTX1NBTkRCT1hcIixcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcclxuICB9LFxyXG5dO1xyXG4iLCAiY29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2Rpcm5hbWUgPSBcIkM6XFxcXFByb2plY3RzXFxcXGxvd2NvZGVyXFxcXGNsaWVudFxcXFxwYWNrYWdlc1xcXFxsb3djb2RlclxcXFxzcmNcXFxcZGV2LXV0aWxzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxQcm9qZWN0c1xcXFxsb3djb2RlclxcXFxjbGllbnRcXFxccGFja2FnZXNcXFxcbG93Y29kZXJcXFxcc3JjXFxcXGRldi11dGlsc1xcXFxleHRlcm5hbC5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovUHJvamVjdHMvbG93Y29kZXIvY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvZXh0ZXJuYWwuanNcIjsvKipcclxuICogbGlicyB0byBpbXBvcnQgYXMgZ2xvYmFsIHZhclxyXG4gKiBuYW1lOiBtb2R1bGUgbmFtZVxyXG4gKiBtZXJnZURlZmF1bHRBbmROYW1lRXhwb3J0czogd2hldGhlciB0byBtZXJnZSBkZWZhdWx0IGFuZCBuYW1lZCBleHBvcnRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgbGlicyA9IFtcclxuICBcImF4aW9zXCIsXHJcbiAgXCJyZWR1eFwiLFxyXG4gIFwicmVhY3Qtcm91dGVyXCIsXHJcbiAgXCJyZWFjdC1yb3V0ZXItZG9tXCIsXHJcbiAgXCJyZWFjdC1yZWR1eFwiLFxyXG4gIFwicmVhY3RcIixcclxuICBcInJlYWN0LWRvbVwiLFxyXG4gIFwibG9kYXNoXCIsXHJcbiAgXCJoaXN0b3J5XCIsXHJcbiAgXCJhbnRkXCIsXHJcbiAgXCJAZG5kLWtpdC9jb3JlXCIsXHJcbiAgXCJAZG5kLWtpdC9tb2RpZmllcnNcIixcclxuICBcIkBkbmQta2l0L3NvcnRhYmxlXCIsXHJcbiAgXCJAZG5kLWtpdC91dGlsaXRpZXNcIixcclxuICB7XHJcbiAgICBuYW1lOiBcIm1vbWVudFwiLFxyXG4gICAgZXh0cmFjdERlZmF1bHQ6IHRydWUsXHJcbiAgfSxcclxuICB7XHJcbiAgICBuYW1lOiBcImRheWpzXCIsXHJcbiAgICBleHRyYWN0RGVmYXVsdDogdHJ1ZSxcclxuICB9LFxyXG4gIHtcclxuICAgIG5hbWU6IFwibG93Y29kZXItc2RrXCIsXHJcbiAgICBmcm9tOiBcIi4vc3JjL2luZGV4LnNkay50c1wiLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgbmFtZTogXCJzdHlsZWQtY29tcG9uZW50c1wiLFxyXG4gICAgbWVyZ2VEZWZhdWx0QW5kTmFtZUV4cG9ydHM6IHRydWUsXHJcbiAgfSxcclxuXTtcclxuXHJcbi8qKlxyXG4gKiBnZXQgZ2xvYmFsIHZhciBuYW1lIGZyb20gbW9kdWxlIG5hbWVcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRMaWJHbG9iYWxWYXJOYW1lID0gKG5hbWUpID0+IHtcclxuICByZXR1cm4gXCIkXCIgKyBuYW1lLnJlcGxhY2UoL0AvZywgXCIkXCIpLnJlcGxhY2UoL1tcXC9cXC1dL2csIFwiX1wiKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRMaWJOYW1lcyA9ICgpID0+IHtcclxuICByZXR1cm4gbGlicy5tYXAoKGkpID0+IHtcclxuICAgIGlmICh0eXBlb2YgaSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICByZXR1cm4gaS5uYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0QWxsTGliR2xvYmFsVmFyTmFtZXMgPSAoKSA9PiB7XHJcbiAgY29uc3QgcmV0ID0ge307XHJcbiAgbGlicy5mb3JFYWNoKChsaWIpID0+IHtcclxuICAgIGxldCBuYW1lID0gbGliO1xyXG4gICAgaWYgKHR5cGVvZiBsaWIgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgbmFtZSA9IGxpYi5uYW1lO1xyXG4gICAgfVxyXG4gICAgcmV0W25hbWVdID0gZ2V0TGliR2xvYmFsVmFyTmFtZShuYW1lKTtcclxuICB9KTtcclxuICByZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGxpYnNJbXBvcnRDb2RlID0gKGV4Y2x1ZGUgPSBbXSkgPT4ge1xyXG4gIGNvbnN0IGltcG9ydExpbmVzID0gW107XHJcbiAgY29uc3QgYXNzaWduTGluZXMgPSBbXTtcclxuICBsaWJzLmZvckVhY2goKGkpID0+IHtcclxuICAgIGxldCBuYW1lID0gaTtcclxuICAgIGxldCBtZXJnZSA9IGZhbHNlO1xyXG4gICAgbGV0IGZyb20gPSBuYW1lO1xyXG4gICAgbGV0IGV4dHJhY3REZWZhdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIG5hbWUgPSBpLm5hbWU7XHJcbiAgICAgIG1lcmdlID0gaS5tZXJnZURlZmF1bHRBbmROYW1lRXhwb3J0cyA/PyBmYWxzZTtcclxuICAgICAgZnJvbSA9IGkuZnJvbSA/PyBuYW1lO1xyXG4gICAgICBleHRyYWN0RGVmYXVsdCA9IGkuZXh0cmFjdERlZmF1bHQgPz8gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4Y2x1ZGUuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhck5hbWUgPSBnZXRMaWJHbG9iYWxWYXJOYW1lKG5hbWUpO1xyXG4gICAgaWYgKG1lcmdlKSB7XHJcbiAgICAgIGltcG9ydExpbmVzLnB1c2goYGltcG9ydCAqIGFzICR7dmFyTmFtZX1fbmFtZWRfZXhwb3J0cyBmcm9tICcke2Zyb219JztgKTtcclxuICAgICAgaW1wb3J0TGluZXMucHVzaChgaW1wb3J0ICR7dmFyTmFtZX0gZnJvbSAnJHtmcm9tfSc7YCk7XHJcbiAgICAgIGFzc2lnbkxpbmVzLnB1c2goYE9iamVjdC5hc3NpZ24oJHt2YXJOYW1lfSwgJHt2YXJOYW1lfV9uYW1lZF9leHBvcnRzKTtgKTtcclxuICAgIH0gZWxzZSBpZiAoZXh0cmFjdERlZmF1bHQpIHtcclxuICAgICAgaW1wb3J0TGluZXMucHVzaChgaW1wb3J0ICR7dmFyTmFtZX0gZnJvbSAnJHtmcm9tfSc7YCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpbXBvcnRMaW5lcy5wdXNoKGBpbXBvcnQgKiBhcyAke3Zhck5hbWV9IGZyb20gJyR7ZnJvbX0nO2ApO1xyXG4gICAgfVxyXG4gICAgYXNzaWduTGluZXMucHVzaChgd2luZG93LiR7dmFyTmFtZX0gPSAke3Zhck5hbWV9O2ApO1xyXG4gIH0pO1xyXG4gIHJldHVybiBpbXBvcnRMaW5lcy5jb25jYXQoYXNzaWduTGluZXMpLmpvaW4oXCJcXG5cIik7XHJcbn07XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcUHJvamVjdHNcXFxcbG93Y29kZXJcXFxcY2xpZW50XFxcXHBhY2thZ2VzXFxcXGxvd2NvZGVyXFxcXHNyY1xcXFxkZXYtdXRpbHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkM6XFxcXFByb2plY3RzXFxcXGxvd2NvZGVyXFxcXGNsaWVudFxcXFxwYWNrYWdlc1xcXFxsb3djb2RlclxcXFxzcmNcXFxcZGV2LXV0aWxzXFxcXGdsb2JhbERlcFBsZ3Vpbi5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovUHJvamVjdHMvbG93Y29kZXIvY2xpZW50L3BhY2thZ2VzL2xvd2NvZGVyL3NyYy9kZXYtdXRpbHMvZ2xvYmFsRGVwUGxndWluLmpzXCI7aW1wb3J0IHsgbGlic0ltcG9ydENvZGUgfSBmcm9tIFwiLi9leHRlcm5hbC5qc1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JhbERlcFBsdWdpbihleGNsdWRlID0gW10pIHtcclxuICBjb25zdCB2aXJ0dWFsTW9kdWxlSWQgPSBcInZpcnR1YWw6Z2xvYmFsc1wiO1xyXG4gIHJldHVybiB7XHJcbiAgICBuYW1lOiBcImxvd2NvZGVyLWdsb2JhbC1wbHVnaW5cIixcclxuICAgIHJlc29sdmVJZChpZCkge1xyXG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkge1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGxvYWQoaWQpIHtcclxuICAgICAgaWYgKGlkID09PSB2aXJ0dWFsTW9kdWxlSWQpIHtcclxuICAgICAgICByZXR1cm4gbGlic0ltcG9ydENvZGUoZXhjbHVkZSk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfTtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQXVVLE9BQU8sWUFBWTtBQUMxVixTQUFTLG9CQUErQztBQUN4RCxPQUFPLFdBQVc7QUFDbEIsT0FBTyx1QkFB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