@lifesg/web-frontend-engine 1.0.0-alpha.4 → 1.0.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/chunks/heic2any.22ec65b5.js +2 -0
- package/chunks/heic2any.22ec65b5.js.map +1 -0
- package/chunks/index.391c739c.js +2 -0
- package/chunks/index.391c739c.js.map +1 -0
- package/chunks/index.5f3e1c55.js +10 -0
- package/chunks/index.5f3e1c55.js.map +1 -0
- package/chunks/index.e4d9a916.js +815 -0
- package/chunks/index.e4d9a916.js.map +1 -0
- package/cjs/chunks/heic2any.cdea5d8b.js +2 -0
- package/cjs/chunks/heic2any.cdea5d8b.js.map +1 -0
- package/cjs/chunks/index.3812af57.js +10 -0
- package/cjs/chunks/index.3812af57.js.map +1 -0
- package/cjs/chunks/index.b78c824f.js +2 -0
- package/cjs/chunks/index.b78c824f.js.map +1 -0
- package/cjs/chunks/index.eba4a3bb.js +815 -0
- package/cjs/chunks/index.eba4a3bb.js.map +1 -0
- package/cjs/index.js +1 -285
- package/cjs/index.js.map +1 -1
- package/components/fields/checkbox-group/checkbox-group.styles.d.ts +1 -1
- package/components/fields/image-upload/image-context/image-context.d.ts +14 -0
- package/components/fields/image-upload/image-context/index.d.ts +1 -0
- package/components/fields/image-upload/image-input/file-item/file-item.d.ts +11 -0
- package/components/fields/image-upload/image-input/file-item/file-item.styles.d.ts +16 -0
- package/components/fields/image-upload/image-input/file-item/index.d.ts +1 -0
- package/components/fields/image-upload/image-input/image-input.d.ts +17 -0
- package/components/fields/image-upload/image-input/image-input.styles.d.ts +8 -0
- package/components/fields/image-upload/image-input/index.d.ts +1 -0
- package/components/fields/image-upload/image-manager/image-manager.d.ts +22 -0
- package/components/fields/image-upload/image-manager/index.d.ts +2 -0
- package/components/fields/image-upload/image-review/image-editor/image-editor.d.ts +3 -0
- package/components/fields/image-upload/image-review/image-editor/image-editor.styles.d.ts +4 -0
- package/components/fields/image-upload/image-review/image-editor/index.d.ts +3 -0
- package/components/fields/image-upload/image-review/image-editor/types.d.ts +16 -0
- package/components/fields/image-upload/image-review/image-error/image-error.d.ts +8 -0
- package/components/fields/image-upload/image-review/image-error/image-error.styles.d.ts +7 -0
- package/components/fields/image-upload/image-review/image-error/index.d.ts +1 -0
- package/components/fields/image-upload/image-review/image-prompts/image-prompts.d.ts +11 -0
- package/components/fields/image-upload/image-review/image-prompts/index.d.ts +1 -0
- package/components/fields/image-upload/image-review/image-review.d.ts +15 -0
- package/components/fields/image-upload/image-review/image-review.styles.d.ts +31 -0
- package/components/fields/image-upload/image-review/image-thumbnails/image-thumbnails.d.ts +11 -0
- package/components/fields/image-upload/image-review/image-thumbnails/image-thumbnails.styles.d.ts +14 -0
- package/components/fields/image-upload/image-review/image-thumbnails/index.d.ts +1 -0
- package/components/fields/image-upload/image-review/index.d.ts +1 -0
- package/components/fields/image-upload/image-upload-helper.d.ts +10 -0
- package/components/fields/image-upload/image-upload.d.ts +4 -0
- package/components/fields/image-upload/index.d.ts +2 -0
- package/components/fields/image-upload/types.d.ts +65 -0
- package/components/fields/index.d.ts +4 -1
- package/components/fields/radio-button/radio-button.styles.d.ts +4 -3
- package/components/fields/radio-button/types.d.ts +5 -2
- package/components/fields/range-select/index.d.ts +2 -0
- package/components/fields/range-select/range-select.d.ts +3 -0
- package/components/fields/range-select/types.d.ts +8 -0
- package/components/fields/reset-button/types.d.ts +1 -0
- package/components/fields/switch/index.d.ts +2 -0
- package/components/fields/switch/switch.d.ts +3 -0
- package/components/fields/switch/switch.styles.d.ts +1 -0
- package/components/fields/switch/types.d.ts +9 -0
- package/components/fields/text-field/types.d.ts +8 -0
- package/components/fields/textarea/textarea.styles.d.ts +1 -1
- package/components/frontend-engine/event/context-provider.d.ts +14 -0
- package/components/frontend-engine/event/index.d.ts +1 -0
- package/components/frontend-engine/types.d.ts +27 -19
- package/components/frontend-engine/yup/types.d.ts +2 -1
- package/components/shared/drag-upload/drag-upload.d.ts +3 -0
- package/components/shared/drag-upload/drag-upload.styles.d.ts +4 -0
- package/components/shared/drag-upload/index.d.ts +2 -0
- package/components/shared/drag-upload/types.d.ts +15 -0
- package/components/shared/error-messages.d.ts +28 -4
- package/components/shared/index.d.ts +2 -0
- package/components/shared/prompt/index.d.ts +2 -0
- package/components/shared/prompt/prompt.d.ts +2 -0
- package/components/shared/prompt/prompt.styles.d.ts +13 -0
- package/components/shared/prompt/types.d.ts +16 -0
- package/index.js +1 -285
- package/index.js.map +1 -1
- package/package.json +8 -2
- package/utils/api-client/api-client.d.ts +65 -0
- package/utils/api-client/index.d.ts +1 -0
- package/utils/file-helper.d.ts +39 -0
- package/utils/hooks/index.d.ts +1 -0
- package/utils/hooks/use-field-event.d.ts +9 -0
- package/utils/hooks/use-previous.d.ts +4 -1
- package/utils/image-helper.d.ts +34 -0
- package/utils/index.d.ts +4 -0
- package/utils/window-helper.d.ts +3 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
interface ILabelProps {
|
|
3
3
|
disabled?: boolean | undefined;
|
|
4
4
|
}
|
|
5
|
-
export declare const Label: import("styled-components").StyledComponent<"
|
|
5
|
+
export declare const Label: import("styled-components").StyledComponent<"p", any, import("@lifesg/react-design-system/text").TextProps & ILabelProps, never>;
|
|
6
6
|
export declare const StyledCheckbox: import("styled-components").StyledComponent<({ className, checked, disabled, onChange, onKeyPress, displaySize, ...otherProps }: import("@lifesg/react-design-system/checkbox").CheckboxProps) => JSX.Element, any, {}, never>;
|
|
7
7
|
export declare const CheckboxContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
8
8
|
export declare const ToggleWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React, { Dispatch, SetStateAction } from "react";
|
|
2
|
+
import { IImage } from "../types";
|
|
3
|
+
interface IImageContext {
|
|
4
|
+
images: IImage[];
|
|
5
|
+
setImages: Dispatch<SetStateAction<IImage[]>>;
|
|
6
|
+
errorCount: number;
|
|
7
|
+
setErrorCount: Dispatch<SetStateAction<number>>;
|
|
8
|
+
}
|
|
9
|
+
interface Props {
|
|
10
|
+
children: (string | boolean | JSX.Element)[] | (string | boolean | JSX.Element);
|
|
11
|
+
}
|
|
12
|
+
export declare const ImageContext: React.Context<IImageContext>;
|
|
13
|
+
export declare const ImageProvider: ({ children }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./image-context";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { IImage, IImageUploadValidationRule, ISharedImageProps } from "../../types";
|
|
3
|
+
interface IProps extends Omit<ISharedImageProps, "maxFiles"> {
|
|
4
|
+
id?: string;
|
|
5
|
+
index: number;
|
|
6
|
+
fileItem: IImage;
|
|
7
|
+
validation: IImageUploadValidationRule[];
|
|
8
|
+
onDelete: (index: number) => (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const FileItem: ({ id, index, fileItem, maxSizeInKb, accepts, onDelete, validation }: IProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Wrapper: import("styled-components").StyledComponent<"div", any, {
|
|
3
|
+
isError?: boolean;
|
|
4
|
+
}, never>;
|
|
5
|
+
export declare const CellInfo: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
6
|
+
export declare const CellFileSize: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
7
|
+
export declare const CellProgressBar: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
8
|
+
export declare const CellDeleteButton: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
9
|
+
export declare const Thumbnail: import("styled-components").StyledComponent<"div", any, {
|
|
10
|
+
src: string;
|
|
11
|
+
}, never>;
|
|
12
|
+
export declare const TextBody: import("styled-components").StyledComponent<"p", any, import("@lifesg/react-design-system/text").TextProps, never>;
|
|
13
|
+
export declare const MobileFileSize: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
14
|
+
export declare const ProgressBar: import("styled-components").StyledComponent<"progress", any, {}, never>;
|
|
15
|
+
export declare const ErrorText: import("styled-components").StyledComponent<"h6", any, import("@lifesg/react-design-system/text").TextProps, never>;
|
|
16
|
+
export declare const DeleteButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/icon-button").IconButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./file-item";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IImageUploadValidationRule, ISharedImageProps } from "../types";
|
|
2
|
+
interface IImageInputProps extends ISharedImageProps {
|
|
3
|
+
label: string;
|
|
4
|
+
buttonLabel?: string | undefined;
|
|
5
|
+
description: string;
|
|
6
|
+
dimensions: {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
validation: IImageUploadValidationRule[];
|
|
11
|
+
errorMessage?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* handles adding of image(s) through drag & drop or file dialog
|
|
15
|
+
*/
|
|
16
|
+
export declare const ImageInput: (props: IImageInputProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Wrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
3
|
+
export declare const Subtitle: import("styled-components").StyledComponent<"p", any, import("@lifesg/react-design-system/text").TextProps, never>;
|
|
4
|
+
export declare const Content: import("styled-components").StyledComponent<"p", any, import("@lifesg/react-design-system/text").TextProps, never>;
|
|
5
|
+
export declare const UploadWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
6
|
+
export declare const AddButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/button").ButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
7
|
+
export declare const DropThemHereText: import("styled-components").StyledComponent<"p", any, import("@lifesg/react-design-system/text").TextProps, never>;
|
|
8
|
+
export declare const AlertContainer: import("styled-components").StyledComponent<({ type, className, children, actionLink, ...otherProps }: import("@lifesg/react-design-system/alert").AlertProps) => JSX.Element, any, {}, never>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./image-input";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ISharedImageProps, TImageUploadOutputFileType, TUploadMethod } from "../types";
|
|
2
|
+
interface IProps extends Omit<ISharedImageProps, "maxFiles"> {
|
|
3
|
+
editImage: boolean;
|
|
4
|
+
onChange: (...event: any[]) => void;
|
|
5
|
+
compress: boolean;
|
|
6
|
+
dimensions: {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
outputType: TImageUploadOutputFileType;
|
|
11
|
+
upload?: {
|
|
12
|
+
method: TUploadMethod;
|
|
13
|
+
url: string;
|
|
14
|
+
};
|
|
15
|
+
value: any;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* manages selected images by listening to images from context provider
|
|
19
|
+
* rename / compress / upload
|
|
20
|
+
*/
|
|
21
|
+
export declare const ImageManager: (props: IProps) => any;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ForwardedRef } from "react";
|
|
2
|
+
export interface IImageEditorProps {
|
|
3
|
+
maxSizeInKb?: number;
|
|
4
|
+
baseImageDataURL?: string;
|
|
5
|
+
drawing?: fabric.Object[];
|
|
6
|
+
color?: string;
|
|
7
|
+
erase?: boolean;
|
|
8
|
+
forwardedRef?: ForwardedRef<IImageEditorRef>;
|
|
9
|
+
}
|
|
10
|
+
export interface IImageEditorRef {
|
|
11
|
+
clearDrawing: VoidFunction;
|
|
12
|
+
export: () => {
|
|
13
|
+
drawing: fabric.Object[];
|
|
14
|
+
dataURL: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { IImage, ISharedImageProps } from "../../types";
|
|
3
|
+
interface IProps extends Omit<ISharedImageProps, "maxFiles"> {
|
|
4
|
+
image: IImage;
|
|
5
|
+
onClickOk: (e: React.MouseEvent<HTMLButtonElement>) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const ImageError: (props: IProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const Wrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
3
|
+
export declare const ErrorIcon: import("styled-components").StyledComponent<"img", any, {}, never>;
|
|
4
|
+
export declare const Content: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
5
|
+
export declare const BodyText: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
6
|
+
export declare const NameWrapper: import("styled-components").StyledComponent<"span", any, {}, never>;
|
|
7
|
+
export declare const OkButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/button").ButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./image-error";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IImage } from "../../types";
|
|
2
|
+
interface IProps {
|
|
3
|
+
onDecideClearDrawing: (decision?: boolean) => void;
|
|
4
|
+
onDecideDelete: (decision: boolean) => void;
|
|
5
|
+
onDecideExit: (decision?: boolean) => void;
|
|
6
|
+
id?: string;
|
|
7
|
+
images: IImage[];
|
|
8
|
+
show?: "delete" | "exit" | "clear-drawing";
|
|
9
|
+
}
|
|
10
|
+
export declare const ImagePrompts: (props: IProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./image-prompts";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TFileCapture } from "../../../shared";
|
|
2
|
+
import { ISharedImageProps } from "../types";
|
|
3
|
+
interface IProps extends ISharedImageProps {
|
|
4
|
+
capture?: TFileCapture;
|
|
5
|
+
compress?: boolean | undefined;
|
|
6
|
+
dimensions: {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
onExit: () => void;
|
|
11
|
+
outputType: string;
|
|
12
|
+
show: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const ImageReview: (props: IProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const ModalBox: import("styled-components").StyledComponent<({ id, children, onClose, showCloseButton, ...otherProps }: import("@lifesg/react-design-system/modal").ModalBoxProps) => JSX.Element, any, {
|
|
3
|
+
statusBarHeight: number;
|
|
4
|
+
}, never>;
|
|
5
|
+
export declare const HeaderSection: import("styled-components").StyledComponent<"div", any, {
|
|
6
|
+
drawActive?: boolean;
|
|
7
|
+
}, never>;
|
|
8
|
+
export declare const ReviewCloseButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/icon-button").IconButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
9
|
+
export declare const ReviewTitle: import("styled-components").StyledComponent<"h5", any, import("@lifesg/react-design-system/text").TextProps, never>;
|
|
10
|
+
export declare const EditHeaderButton: import("styled-components").StyledComponent<"button", any, {}, never>;
|
|
11
|
+
export declare const ContentSection: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
12
|
+
export declare const LoadingPreviewText: import("styled-components").StyledComponent<"h4", any, import("@lifesg/react-design-system/text").TextProps, never>;
|
|
13
|
+
export declare const DrawDeleteButtonWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
14
|
+
export declare const DrawDeleteButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/icon-button").IconButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
15
|
+
export declare const DrawDeleteButtonText: import("styled-components").StyledComponent<"h6", any, import("@lifesg/react-design-system/text").TextProps & {
|
|
16
|
+
disabled: boolean;
|
|
17
|
+
}, never>;
|
|
18
|
+
export declare const DrawIcon: import("styled-components").StyledComponent<"img", any, {}, never>;
|
|
19
|
+
export declare const DeleteIcon: import("styled-components").StyledComponent<"img", any, {}, never>;
|
|
20
|
+
export declare const ImageEditorWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
21
|
+
export declare const FooterSection: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
22
|
+
export declare const FooterSaveButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/button").ButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
23
|
+
export declare const EraserButton: import("styled-components").StyledComponent<"button", any, {
|
|
24
|
+
active?: boolean;
|
|
25
|
+
}, never>;
|
|
26
|
+
export declare const ButtonIcon: import("styled-components").StyledComponent<"img", any, {}, never>;
|
|
27
|
+
export declare const PaletteHolder: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
28
|
+
export declare const Palette: import("styled-components").StyledComponent<"button", any, {
|
|
29
|
+
color: string;
|
|
30
|
+
colorScheme?: string;
|
|
31
|
+
}, never>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TFileCapture } from "../../../../shared";
|
|
2
|
+
import { IImage, ISharedImageProps } from "../../types";
|
|
3
|
+
interface IProps extends Omit<ISharedImageProps, "maxSizeInKb"> {
|
|
4
|
+
activeFileIndex: number;
|
|
5
|
+
capture?: TFileCapture;
|
|
6
|
+
images: IImage[];
|
|
7
|
+
onClickThumbnail: (index: number) => void;
|
|
8
|
+
onSelectFile: (file: File) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const ImageThumbnails: (props: IProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
package/components/fields/image-upload/image-review/image-thumbnails/image-thumbnails.styles.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const ThumbnailsWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
3
|
+
export declare const ThumbnailItem: import("styled-components").StyledComponent<"button", any, {
|
|
4
|
+
src?: string;
|
|
5
|
+
error?: boolean;
|
|
6
|
+
}, never>;
|
|
7
|
+
export declare const ThumbnailWarningIcon: import("styled-components").StyledComponent<"img", any, {}, never>;
|
|
8
|
+
export declare const LoadingDot: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
9
|
+
export declare const LoadingBox: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
10
|
+
export declare const BorderOverlay: import("styled-components").StyledComponent<"div", any, {
|
|
11
|
+
isSelected: boolean;
|
|
12
|
+
}, never>;
|
|
13
|
+
export declare const HiddenFileSelect: import("styled-components").StyledComponent<"input", any, {}, never>;
|
|
14
|
+
export declare const AddImageButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/icon-button").IconButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./image-thumbnails";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./image-review";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IImage } from "./types";
|
|
2
|
+
export declare namespace ImageUploadHelper {
|
|
3
|
+
/**
|
|
4
|
+
* picks an available slot
|
|
5
|
+
* slot refers to the index of the file selected
|
|
6
|
+
* this is for tracking so we can remove the correct file when user removes it
|
|
7
|
+
* NOTE: validation for max no. of images should be carried out outside this function, this function will only look for the next available slot
|
|
8
|
+
*/
|
|
9
|
+
const findAvailableSlot: (images: IImage[]) => number;
|
|
10
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { IGenericFieldProps } from "../../frontend-engine";
|
|
2
|
+
import { IImageUploadSchema } from "./types";
|
|
3
|
+
export declare const ImageUploadInner: (props: IGenericFieldProps<IImageUploadSchema>) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare const ImageUpload: (props: IGenericFieldProps<IImageUploadSchema>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { IFrontendEngineBaseFieldJsonSchema } from "../../frontend-engine";
|
|
2
|
+
import { IYupValidationRule } from "../../frontend-engine/yup/types";
|
|
3
|
+
export type TUploadMethod = "post" | "put" | "patch";
|
|
4
|
+
export declare const ACCEPTED_FILE_TYPES: readonly ["jpg", "gif", "png", "heic", "heif", "webp"];
|
|
5
|
+
export type TImageUploadAcceptedFileType = (typeof ACCEPTED_FILE_TYPES)[number];
|
|
6
|
+
export type TImageUploadOutputFileType = "jpg" | "png";
|
|
7
|
+
export interface IImageUploadValidationRule extends IYupValidationRule {
|
|
8
|
+
/** accepted file types */
|
|
9
|
+
fileType?: TImageUploadAcceptedFileType[] | undefined;
|
|
10
|
+
/** max acceptable file size in kb */
|
|
11
|
+
maxSizeInKb?: number | undefined;
|
|
12
|
+
}
|
|
13
|
+
export interface IImageUploadSchema<V = IImageUploadValidationRule> extends IFrontendEngineBaseFieldJsonSchema<"image-upload", V> {
|
|
14
|
+
buttonLabel?: string | undefined;
|
|
15
|
+
description?: string | undefined;
|
|
16
|
+
editImage?: boolean | undefined;
|
|
17
|
+
outputType?: TImageUploadOutputFileType | undefined;
|
|
18
|
+
uploadOnAddingFile?: {
|
|
19
|
+
method: TUploadMethod;
|
|
20
|
+
url: string;
|
|
21
|
+
} | undefined;
|
|
22
|
+
compress?: boolean | undefined;
|
|
23
|
+
dimensions?: IImageDimensions | undefined;
|
|
24
|
+
}
|
|
25
|
+
export interface ISharedImageProps {
|
|
26
|
+
id?: string | undefined;
|
|
27
|
+
accepts: TImageUploadAcceptedFileType[];
|
|
28
|
+
maxSizeInKb: number;
|
|
29
|
+
maxFiles: number;
|
|
30
|
+
}
|
|
31
|
+
export declare enum EImageStatus {
|
|
32
|
+
INJECTED = -99,
|
|
33
|
+
ERROR_FORMAT = -3,
|
|
34
|
+
ERROR_GENERIC = -2,
|
|
35
|
+
ERROR_SIZE = -1,
|
|
36
|
+
NONE = 0,
|
|
37
|
+
TO_RECOMPRESS = 1,
|
|
38
|
+
COMPRESSED = 2,
|
|
39
|
+
RECOMPRESSED = 2,
|
|
40
|
+
CONVERTED = 2,
|
|
41
|
+
EDITED = 3,
|
|
42
|
+
UPLOAD_READY = 4,
|
|
43
|
+
UPLOADING = 5,
|
|
44
|
+
UPLOADED = 6
|
|
45
|
+
}
|
|
46
|
+
export interface IImage {
|
|
47
|
+
file: File;
|
|
48
|
+
name: string;
|
|
49
|
+
type?: string;
|
|
50
|
+
/** refers to preview dimensions and eventual output dimensions */
|
|
51
|
+
dimensions: IImageDimensions;
|
|
52
|
+
dataURL?: string;
|
|
53
|
+
thumbnailDataURL?: string;
|
|
54
|
+
drawingDataURL?: string;
|
|
55
|
+
drawing?: fabric.Object[];
|
|
56
|
+
status: EImageStatus;
|
|
57
|
+
addedFrom?: "dragInput" | "reviewModal" | "schema";
|
|
58
|
+
uploadProgress: number;
|
|
59
|
+
uploadResponse?: any;
|
|
60
|
+
slot: number;
|
|
61
|
+
}
|
|
62
|
+
export interface IImageDimensions {
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
}
|
|
@@ -2,12 +2,15 @@ export * from "./checkbox-group";
|
|
|
2
2
|
export * from "./chips";
|
|
3
3
|
export * from "./contact-field";
|
|
4
4
|
export * from "./date-field";
|
|
5
|
+
export * from "./image-upload";
|
|
5
6
|
export * from "./multi-select";
|
|
6
7
|
export * from "./radio-button";
|
|
8
|
+
export * from "./reset-button";
|
|
7
9
|
export * from "./select";
|
|
10
|
+
export * from "./range-select";
|
|
8
11
|
export * from "./submit-button";
|
|
12
|
+
export * from "./switch";
|
|
9
13
|
export * from "./text-field";
|
|
10
14
|
export * from "./textarea";
|
|
11
15
|
export * from "./time-field";
|
|
12
|
-
export * from "./reset-button";
|
|
13
16
|
export * from "./unit-number-field";
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
interface ILabelProps {
|
|
3
3
|
disabled?: boolean | undefined;
|
|
4
4
|
}
|
|
5
|
-
export declare const Label: import("styled-components").StyledComponent<"
|
|
6
|
-
export declare const StyledRadioButton: import("styled-components").StyledComponent<({ className, checked, disabled, onChange, ...otherProps }: import("@lifesg/react-design-system
|
|
5
|
+
export declare const Label: import("styled-components").StyledComponent<"p", any, import("@lifesg/react-design-system").TextProps & ILabelProps, never>;
|
|
6
|
+
export declare const StyledRadioButton: import("styled-components").StyledComponent<({ className, checked, disabled, onChange, ...otherProps }: import("@lifesg/react-design-system").RadioButtonProps) => JSX.Element, any, {}, never>;
|
|
7
|
+
export declare const StyledImageButton: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system").ImageButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, {}, never>;
|
|
7
8
|
export declare const RadioContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
8
|
-
export declare const
|
|
9
|
+
export declare const FlexWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
9
10
|
export {};
|
|
@@ -4,13 +4,16 @@ interface IOption {
|
|
|
4
4
|
label: string;
|
|
5
5
|
value: string;
|
|
6
6
|
disabled?: boolean | undefined;
|
|
7
|
+
imgSrc?: string | undefined;
|
|
7
8
|
}
|
|
8
9
|
type TCustomOptions = {
|
|
9
10
|
styleType: "default";
|
|
10
11
|
} | {
|
|
11
12
|
styleType: "toggle";
|
|
12
|
-
indicator?: boolean;
|
|
13
|
-
border?: boolean;
|
|
13
|
+
indicator?: boolean | undefined;
|
|
14
|
+
border?: boolean | undefined;
|
|
15
|
+
} | {
|
|
16
|
+
styleType: "image-button";
|
|
14
17
|
};
|
|
15
18
|
export interface IRadioButtonGroupSchema<V = undefined> extends IFrontendEngineBaseFieldJsonSchema<"radio", V>, TComponentOmitProps<RadioButtonProps> {
|
|
16
19
|
options: IOption[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { InputRangeSelectProps } from "@lifesg/react-design-system/input-select/types";
|
|
2
|
+
import { IFrontendEngineBaseFieldJsonSchema, TComponentOmitProps } from "../../frontend-engine";
|
|
3
|
+
export interface IRangeSelectOption {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
export interface IRangeSelectSchema<V = undefined> extends IFrontendEngineBaseFieldJsonSchema<"range-select", V>, TComponentOmitProps<InputRangeSelectProps<IRangeSelectOption, string>> {
|
|
8
|
+
}
|
|
@@ -2,4 +2,5 @@ import { ButtonProps } from "@lifesg/react-design-system/button/types";
|
|
|
2
2
|
import { IFrontendEngineBaseFieldJsonSchema, TComponentOmitProps } from "../../frontend-engine";
|
|
3
3
|
export interface IResetButtonSchema extends Omit<IFrontendEngineBaseFieldJsonSchema<"reset">, "validation">, TComponentOmitProps<ButtonProps, "disabled"> {
|
|
4
4
|
disabled?: boolean | undefined;
|
|
5
|
+
ignoreDefaultValues?: boolean | undefined;
|
|
5
6
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const FlexWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IFrontendEngineBaseFieldJsonSchema, TComponentOmitProps } from "../../frontend-engine";
|
|
2
|
+
import { ToggleProps } from "@lifesg/react-design-system/toggle";
|
|
3
|
+
type TCustomOptions = {
|
|
4
|
+
border?: boolean | undefined;
|
|
5
|
+
};
|
|
6
|
+
export interface ISwitchSchema<V = undefined> extends IFrontendEngineBaseFieldJsonSchema<"switch", V>, TComponentOmitProps<ToggleProps> {
|
|
7
|
+
customOptions?: TCustomOptions | undefined;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { FormInputProps } from "@lifesg/react-design-system/form/types";
|
|
2
2
|
import { IFrontendEngineBaseFieldJsonSchema, TComponentOmitProps } from "../../frontend-engine";
|
|
3
|
+
type TCustomOptions = {
|
|
4
|
+
preventCopyAndPaste?: boolean | undefined;
|
|
5
|
+
preventDragAndDrop?: boolean | undefined;
|
|
6
|
+
};
|
|
3
7
|
export interface ITextFieldSchema<V = undefined> extends IFrontendEngineBaseFieldJsonSchema<"text-field", V>, TComponentOmitProps<FormInputProps, "type" | "maxLength"> {
|
|
8
|
+
customOptions?: TCustomOptions | undefined;
|
|
4
9
|
}
|
|
5
10
|
export interface IEmailFieldSchema<V = undefined> extends IFrontendEngineBaseFieldJsonSchema<"email-field", V>, TComponentOmitProps<FormInputProps, "type" | "maxLength"> {
|
|
11
|
+
customOptions?: TCustomOptions | undefined;
|
|
6
12
|
}
|
|
7
13
|
export interface INumericFieldSchema<V = undefined> extends IFrontendEngineBaseFieldJsonSchema<"numeric-field", V>, TComponentOmitProps<FormInputProps, "type" | "max" | "min"> {
|
|
14
|
+
customOptions?: TCustomOptions | undefined;
|
|
8
15
|
}
|
|
16
|
+
export {};
|
|
@@ -7,5 +7,5 @@ export declare const Wrapper: import("styled-components").StyledComponent<"div",
|
|
|
7
7
|
chipPosition?: "top" | "bottom" | undefined;
|
|
8
8
|
}, never>;
|
|
9
9
|
export declare const ChipContainer: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
10
|
-
export declare const StyledTextarea: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/
|
|
10
|
+
export declare const StyledTextarea: import("styled-components").StyledComponent<(props: import("@lifesg/react-design-system/input-textarea").TextareaProps & import("react").RefAttributes<HTMLTextAreaElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, any, ITextareaProps, never>;
|
|
11
11
|
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ReactElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* events are added / removed / dispatched via the eventManager
|
|
4
|
+
* the eventManager is just a div, the handling of events is purely through native event handlers
|
|
5
|
+
*/
|
|
6
|
+
interface IEventContext {
|
|
7
|
+
eventManagerRef: React.RefObject<Element>;
|
|
8
|
+
}
|
|
9
|
+
interface IProps {
|
|
10
|
+
children: ReactElement;
|
|
11
|
+
}
|
|
12
|
+
export declare const EventContext: import("react").Context<IEventContext>;
|
|
13
|
+
export declare const EventProvider: ({ children }: IProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./context-provider";
|
|
@@ -3,7 +3,7 @@ import { IFilterSchema } from "../custom/filter/filter/types";
|
|
|
3
3
|
import { IAlertSchema, ITextSchema } from "../elements";
|
|
4
4
|
import { ISectionSchema } from "../elements/section";
|
|
5
5
|
import { IWrapperSchema } from "../elements/wrapper";
|
|
6
|
-
import { ICheckboxGroupSchema, IChipsSchema, IContactFieldSchema, IDateFieldSchema, IEmailFieldSchema, IMultiSelectSchema, INumericFieldSchema, IRadioButtonGroupSchema, IResetButtonSchema, ISelectSchema, ISubmitButtonSchema, ITextFieldSchema, ITextareaSchema, ITimeFieldSchema, IUnitNumberFieldSchema } from "../fields";
|
|
6
|
+
import { ICheckboxGroupSchema, IChipsSchema, IContactFieldSchema, IDateFieldSchema, IEmailFieldSchema, IImageUploadSchema, IMultiSelectSchema, INumericFieldSchema, IRadioButtonGroupSchema, IRangeSelectSchema, IResetButtonSchema, ISelectSchema, ISubmitButtonSchema, ISwitchSchema, ITextFieldSchema, ITextareaSchema, ITimeFieldSchema, IUnitNumberFieldSchema } from "../fields";
|
|
7
7
|
import { IYupValidationRule, TRenderRules, TYupSchemaType } from "./yup";
|
|
8
8
|
export type { IYupValidationRule } from "./yup";
|
|
9
9
|
export interface IFrontendEngineProps<V = undefined> {
|
|
@@ -15,6 +15,8 @@ export interface IFrontendEngineProps<V = undefined> {
|
|
|
15
15
|
onChange?: ((values: TFrontendEngineValues, isValid?: boolean | undefined) => unknown) | undefined;
|
|
16
16
|
/** Submit event handler, will receive the form data if form validation is successful */
|
|
17
17
|
onSubmit?: (values: TFrontendEngineValues) => unknown | undefined;
|
|
18
|
+
/** Submit error event handler, invoked when form fails validation on submissiohn. Will receive validation errors */
|
|
19
|
+
onSubmitError?: (errors: TFrontendEngineValues) => unknown | undefined;
|
|
18
20
|
}
|
|
19
21
|
export interface IFrontendEngineData<V = undefined> {
|
|
20
22
|
/** HTML class attribute */
|
|
@@ -36,27 +38,30 @@ export interface IFrontendEngineData<V = undefined> {
|
|
|
36
38
|
/** Validation strategy before a user submits the form (onSubmit event) */
|
|
37
39
|
validationMode?: TValidationMode | undefined;
|
|
38
40
|
}
|
|
39
|
-
export type TFrontendEngineFieldSchema<V = undefined> =
|
|
41
|
+
export type TFrontendEngineFieldSchema<V = undefined> = IAlertSchema | ICheckboxGroupSchema<V> | IChipsSchema<V> | IContactFieldSchema<V> | ICustomComponentJsonSchema<V> | IDateFieldSchema<V> | IEmailFieldSchema<V> | IFilterSchema | IImageUploadSchema<V> | IMultiSelectSchema<V> | IRangeSelectSchema<V> | INumericFieldSchema<V> | IRadioButtonGroupSchema<V> | IResetButtonSchema | ISelectSchema<V> | ISubmitButtonSchema | ISwitchSchema<V> | ITextSchema | ITextareaSchema<V> | ITextFieldSchema<V> | ITimeFieldSchema<V> | IUnitNumberFieldSchema<V> | IWrapperSchema;
|
|
40
42
|
export type TFrontendEngineValues<T = any> = Record<keyof T, T[keyof T]>;
|
|
41
43
|
export type TRevalidationMode = Exclude<keyof ValidationMode, "onTouched" | "all">;
|
|
42
44
|
export type TValidationMode = keyof ValidationMode;
|
|
43
45
|
export type TErrorMessage = string | string[] | Record<string, string | string[]>;
|
|
44
46
|
export type TErrorPayload = Record<string, TErrorMessage>;
|
|
45
47
|
export interface IFrontendEngineRef extends HTMLFormElement {
|
|
48
|
+
addCustomValidation: (type: TYupSchemaType | "mixed", name: string, fn: (value: unknown, arg: unknown) => boolean) => void;
|
|
49
|
+
addFieldEventListener: (type: string, id: string, listener: (ev: Event) => any, options?: boolean | AddEventListenerOptions) => void;
|
|
50
|
+
dispatchFieldEvent: (type: string, id: string, detail?: any) => boolean;
|
|
46
51
|
/** gets form values */
|
|
47
52
|
getValues: () => TFrontendEngineValues;
|
|
48
|
-
/** sets field value by id */
|
|
49
|
-
setValue: UseFormSetValue<TFrontendEngineValues>;
|
|
50
53
|
/** checks if form is valid */
|
|
51
54
|
isValid: () => boolean;
|
|
52
|
-
/** triggers form submission */
|
|
53
|
-
submit: () => void;
|
|
54
55
|
/** adds custom validation rule */
|
|
55
|
-
|
|
56
|
-
/** allows setting of custom errors thrown by endpoints */
|
|
57
|
-
setErrors: (errors: TErrorPayload) => void;
|
|
56
|
+
removeFieldEventListener: (type: string, id: string, listener: (ev: Event) => any, options?: boolean | EventListenerOptions) => void;
|
|
58
57
|
/** resets the form to the default state */
|
|
59
58
|
reset: UseFormReset<TFrontendEngineValues>;
|
|
59
|
+
/** allows setting of custom errors thrown by endpoints */
|
|
60
|
+
setErrors: (errors: TErrorPayload) => void;
|
|
61
|
+
/** sets field value by id */
|
|
62
|
+
setValue: UseFormSetValue<TFrontendEngineValues>;
|
|
63
|
+
/** triggers form submission */
|
|
64
|
+
submit: () => void;
|
|
60
65
|
}
|
|
61
66
|
export interface IFrontendEngineBaseFieldJsonSchema<T, V = undefined, U = undefined> {
|
|
62
67
|
/** defines what kind of component to be rendered */
|
|
@@ -104,20 +109,23 @@ export type TComponentOmitProps<T, V = undefined> = Omit<T, UnionOptionalKeys<V>
|
|
|
104
109
|
* - components that can contain values that can get submitted
|
|
105
110
|
*/
|
|
106
111
|
export declare enum EFieldType {
|
|
107
|
-
TEXTAREA = "Textarea",
|
|
108
|
-
"TEXT-FIELD" = "TextField",
|
|
109
|
-
"NUMERIC-FIELD" = "TextField",
|
|
110
|
-
"EMAIL-FIELD" = "TextField",
|
|
111
|
-
SUBMIT = "SubmitButton",
|
|
112
|
-
SELECT = "Select",
|
|
113
|
-
"MULTI-SELECT" = "MultiSelect",
|
|
114
|
-
"DATE-FIELD" = "DateField",
|
|
115
112
|
CHECKBOX = "CheckboxGroup",
|
|
113
|
+
CHIPS = "Chips",
|
|
116
114
|
"CONTACT-FIELD" = "ContactField",
|
|
115
|
+
"DATE-FIELD" = "DateField",
|
|
116
|
+
"EMAIL-FIELD" = "TextField",
|
|
117
|
+
"IMAGE-UPLOAD" = "ImageUpload",
|
|
118
|
+
"MULTI-SELECT" = "MultiSelect",
|
|
119
|
+
"RANGE-SELECT" = "RangeSelect",
|
|
120
|
+
"NUMERIC-FIELD" = "TextField",
|
|
117
121
|
RADIO = "RadioButtonGroup",
|
|
118
|
-
"TIME-FIELD" = "TimeField",
|
|
119
|
-
CHIPS = "Chips",
|
|
120
122
|
RESET = "ResetButton",
|
|
123
|
+
SELECT = "Select",
|
|
124
|
+
SUBMIT = "SubmitButton",
|
|
125
|
+
SWITCH = "Switch",
|
|
126
|
+
TEXTAREA = "Textarea",
|
|
127
|
+
"TEXT-FIELD" = "TextField",
|
|
128
|
+
"TIME-FIELD" = "TimeField",
|
|
121
129
|
"UNIT-NUMBER-FIELD" = "UnitNumberField"
|
|
122
130
|
}
|
|
123
131
|
/**
|