@lifesg/web-frontend-engine 2.2.0 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/chunks/{file-upload-manager.faa055fa.js → file-upload-manager.581859a5.js} +2 -2
  3. package/chunks/{file-upload-manager.faa055fa.js.map → file-upload-manager.581859a5.js.map} +1 -1
  4. package/chunks/{index.2d28e824.js → index.8cc1cf41.js} +155 -129
  5. package/chunks/index.8cc1cf41.js.map +1 -0
  6. package/chunks/{index.ef942fcf.js → index.bba30c64.js} +2 -2
  7. package/chunks/{index.ef942fcf.js.map → index.bba30c64.js.map} +1 -1
  8. package/chunks/{index.fe54c734.js → index.d31714ac.js} +2 -2
  9. package/chunks/{index.fe54c734.js.map → index.d31714ac.js.map} +1 -1
  10. package/chunks/{location-modal.5e4e98fd.js → location-modal.60f7c5c4.js} +146 -100
  11. package/chunks/location-modal.60f7c5c4.js.map +1 -0
  12. package/cjs/chunks/{file-upload-manager.bc7599d2.js → file-upload-manager.75d19b87.js} +2 -2
  13. package/cjs/chunks/{file-upload-manager.bc7599d2.js.map → file-upload-manager.75d19b87.js.map} +1 -1
  14. package/cjs/chunks/{index.17761159.js → index.00d4458f.js} +155 -129
  15. package/cjs/chunks/index.00d4458f.js.map +1 -0
  16. package/cjs/chunks/{index.8d9d1609.js → index.260bcc27.js} +2 -2
  17. package/cjs/chunks/{index.8d9d1609.js.map → index.260bcc27.js.map} +1 -1
  18. package/cjs/chunks/{index.51cff881.js → index.b1899917.js} +2 -2
  19. package/cjs/chunks/{index.51cff881.js.map → index.b1899917.js.map} +1 -1
  20. package/cjs/chunks/{location-modal.ca4904e4.js → location-modal.ff55a907.js} +84 -38
  21. package/cjs/chunks/location-modal.ff55a907.js.map +1 -0
  22. package/cjs/index.js +1 -1
  23. package/components/fields/image-upload/image-input/image-input.d.ts +5 -0
  24. package/components/fields/image-upload/image-input/image-input.styles.d.ts +5 -0
  25. package/components/fields/image-upload/types.d.ts +7 -0
  26. package/components/fields/location-field/location-modal/location-modal.d.ts +1 -1
  27. package/components/fields/location-field/location-modal/location-modal.styles.d.ts +1 -1
  28. package/components/fields/location-field/location-modal/location-picker/legend/index.d.ts +1 -0
  29. package/components/fields/location-field/location-modal/location-picker/legend/legend.d.ts +8 -0
  30. package/components/fields/location-field/location-modal/location-picker/legend/legend.styles.d.ts +9 -0
  31. package/components/fields/location-field/location-modal/location-picker/location-picker.d.ts +1 -1
  32. package/components/fields/location-field/location-modal/location-picker/location-picker.styles.d.ts +3 -0
  33. package/components/fields/location-field/location-modal/location-picker/types.d.ts +2 -1
  34. package/components/fields/location-field/location-modal/types.d.ts +1 -1
  35. package/components/fields/location-field/types.d.ts +9 -0
  36. package/context-providers/yup/custom-conditions/html-safe.d.ts +1 -0
  37. package/context-providers/yup/custom-conditions/index.d.ts +1 -0
  38. package/context-providers/yup/types.d.ts +2 -1
  39. package/index.js +1 -1
  40. package/package.json +2 -2
  41. package/chunks/index.2d28e824.js.map +0 -1
  42. package/chunks/location-modal.5e4e98fd.js.map +0 -1
  43. package/cjs/chunks/index.17761159.js.map +0 -1
  44. package/cjs/chunks/location-modal.ca4904e4.js.map +0 -1
package/cjs/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./chunks/index.17761159.js");require("react/jsx-runtime"),require("@lifesg/react-design-system/box-container"),require("@lifesg/react-design-system/button"),require("react"),require("@lifesg/react-design-system/theme"),require("styled-components"),require("@lifesg/react-design-system/alert"),require("@lifesg/react-design-system/typography"),require("@lifesg/react-icons"),require("@lifesg/react-icons/plus-circle-fill"),require("@lifesg/react-design-system/markup"),require("react-dom/server"),require("@lifesg/react-design-system/filter"),require("@lifesg/react-design-system/uneditable-section"),require("@lifesg/react-design-system/timeline"),require("@lifesg/react-design-system/form"),require("@lifesg/react-design-system/toggle"),require("@lifesg/react-design-system/layout"),require("@lifesg/react-design-system/v2_layout"),require("@lifesg/react-design-system/text-list"),require("@lifesg/react-design-system/popover-v2"),require("@lifesg/react-design-system/tab"),require("@lifesg/react-design-system/modal"),require("@lifesg/react-design-system/divider"),require("@lifesg/react-design-system/v2_media"),require("@lifesg/react-design-system/button-with-icon"),require("@lifesg/react-design-system/error-display"),require("@lifesg/react-design-system/checkbox"),require("@lifesg/react-design-system/file-upload"),require("@lifesg/react-icons/cross"),require("@lifesg/react-design-system/icon-button"),require("@lifesg/react-icons/bin"),require("@lifesg/react-icons/eraser"),require("@lifesg/react-icons/pencil"),require("@lifesg/react-icons/pencil-stroke"),require("@lifesg/react-icons/plus"),require("@lifesg/react-icons/exclamation-triangle"),require("@lifesg/react-icons/pin-fill"),require("@lifesg/react-design-system/image-button"),require("@lifesg/react-design-system/radio-button"),Object.defineProperty(exports,"EElementType",{enumerable:!0,get:function(){return e.EElementType}}),Object.defineProperty(exports,"EFieldType",{enumerable:!0,get:function(){return e.EFieldType}}),exports.FrontendEngine=e.FrontendEngine,exports.useFrontendEngineComponent=e.useFrontendEngineComponent;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./chunks/index.00d4458f.js");require("react/jsx-runtime"),require("@lifesg/react-design-system/box-container"),require("@lifesg/react-design-system/button"),require("react"),require("@lifesg/react-design-system/theme"),require("styled-components"),require("@lifesg/react-design-system/alert"),require("@lifesg/react-design-system/typography"),require("@lifesg/react-icons"),require("@lifesg/react-icons/plus-circle-fill"),require("@lifesg/react-design-system/markup"),require("react-dom/server"),require("@lifesg/react-design-system/filter"),require("@lifesg/react-design-system/uneditable-section"),require("@lifesg/react-design-system/timeline"),require("@lifesg/react-design-system/form"),require("@lifesg/react-design-system/toggle"),require("@lifesg/react-design-system/layout"),require("@lifesg/react-design-system/v2_layout"),require("@lifesg/react-design-system/text-list"),require("@lifesg/react-design-system/popover-v2"),require("@lifesg/react-design-system/tab"),require("@lifesg/react-design-system/modal"),require("@lifesg/react-design-system/divider"),require("@lifesg/react-design-system/v2_media"),require("@lifesg/react-design-system/button-with-icon"),require("@lifesg/react-design-system/error-display"),require("@lifesg/react-design-system/checkbox"),require("@lifesg/react-design-system/file-upload"),require("@lifesg/react-icons/cross"),require("@lifesg/react-design-system/icon-button"),require("@lifesg/react-icons/bin"),require("@lifesg/react-icons/eraser"),require("@lifesg/react-icons/pencil"),require("@lifesg/react-icons/pencil-stroke"),require("@lifesg/react-icons/plus"),require("@lifesg/react-icons/exclamation-triangle"),require("@lifesg/react-icons/pin-fill"),require("@lifesg/react-design-system/image-button"),require("@lifesg/react-design-system/radio-button"),Object.defineProperty(exports,"EElementType",{enumerable:!0,get:function(){return e.EElementType}}),Object.defineProperty(exports,"EFieldType",{enumerable:!0,get:function(){return e.EFieldType}}),exports.FrontendEngine=e.FrontendEngine,exports.useFrontendEngineComponent=e.useFrontendEngineComponent;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,4 @@
1
+ import * as Icons from "@lifesg/react-icons";
1
2
  import { IImageUploadValidationRule, ISharedImageProps, TFileCapture } from "../types";
2
3
  interface IImageInputProps extends ISharedImageProps {
3
4
  buttonLabel?: string | undefined;
@@ -13,6 +14,10 @@ interface IImageInputProps extends ISharedImageProps {
13
14
  validation: IImageUploadValidationRule[];
14
15
  multiple?: boolean | undefined;
15
16
  warning?: string | undefined;
17
+ tooltip?: {
18
+ label?: string | undefined;
19
+ icon?: keyof typeof Icons | undefined;
20
+ } | undefined;
16
21
  }
17
22
  /**
18
23
  * handles adding of image(s) through drag & drop or file dialog
@@ -6,6 +6,11 @@ export declare const Wrapper: import("styled-components/dist/types").IStyledComp
6
6
  export declare const Subtitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("@lifesg/react-design-system/typography").TypographyProps & {
7
7
  ref?: import("react").RefObject<HTMLParagraphElement>;
8
8
  }, SubtitleProps>> & string;
9
+ export declare const TooltipWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
10
+ export declare const TooltipIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
11
+ export declare const TooltipLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("@lifesg/react-design-system/typography").TypographyProps & {
12
+ ref?: import("react").RefObject<HTMLParagraphElement>;
13
+ }, never>> & string;
9
14
  export declare const Content: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
10
15
  export declare const UploadWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
11
16
  export declare const AddButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("@lifesg/react-design-system/button").ButtonProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & {
@@ -1,3 +1,4 @@
1
+ import * as Icons from "@lifesg/react-icons";
1
2
  import { FabricObject } from "fabric";
2
3
  import { IBaseFieldSchema } from "../types";
3
4
  import { IYupValidationRule } from "../../../context-providers";
@@ -33,6 +34,10 @@ export interface IImageUploadSchema<V = undefined> extends IBaseFieldSchema<"ima
33
34
  capture?: TFileCapture | undefined;
34
35
  multiple?: boolean | undefined;
35
36
  imageReviewModalStyles?: string | undefined;
37
+ tooltip?: {
38
+ label?: string | undefined;
39
+ icon?: keyof typeof Icons | undefined;
40
+ } | undefined;
36
41
  }
37
42
  export interface ISharedImageProps {
38
43
  id?: string | undefined;
@@ -133,6 +138,8 @@ declare function imageUploadEvent(uiType: "image-upload", type: "save-review-ima
133
138
  declare function imageUploadEvent(uiType: "image-upload", type: "uploaded", id: string, listener: TFieldEventListener<{
134
139
  imageData: IImage;
135
140
  }>, options?: boolean | AddEventListenerOptions | undefined): void;
141
+ /** fired when the tooltip is clicked */
142
+ declare function imageUploadEvent(uiType: "image-upload", type: "click-tooltip", id: string, listener: TFieldEventListener, options?: boolean | AddEventListenerOptions | undefined): void;
136
143
  export type TImageUploadEvents = typeof imageUploadEvent;
137
144
  /** update status and error message according to id */
138
145
  declare function imageUploadTrigger(uiType: "image-upload", type: "update-image-status", id: string, details: IUpdateImageStatus): boolean;
@@ -4,5 +4,5 @@ import { ILocationModalProps } from "./types";
4
4
  * Mobile or tablet - single panel
5
5
  * Desktop - double panel
6
6
  */
7
- declare const LocationModal: ({ id, className, formValues, showLocationModal, mapPanZoom, interactiveMapPinIconUrl, mapApi, gettingCurrentLocationFetchMessage, mapBannerText, mustHavePostalCode, locationModalStyles, onClose, onConfirm, updateFormValues, locationListTitle, locationSelectionMode, disableSearch, addressFieldPlaceholder, searchBarIcon, bufferRadius, pinsOnlyIndicateCurrentLocation, }: ILocationModalProps) => import("react/jsx-runtime").JSX.Element;
7
+ declare const LocationModal: ({ id, className, formValues, showLocationModal, mapPanZoom, interactiveMapPinIconUrl, mapApi, gettingCurrentLocationFetchMessage, mapBannerText, mustHavePostalCode, locationModalStyles, onClose, onConfirm, updateFormValues, locationListTitle, locationSelectionMode, disableSearch, addressFieldPlaceholder, searchBarIcon, bufferRadius, pinsOnlyIndicateCurrentLocation, legendItems, }: ILocationModalProps) => import("react/jsx-runtime").JSX.Element;
8
8
  export default LocationModal;
@@ -9,7 +9,7 @@ interface IModalBoxStyle {
9
9
  export declare const ModalBox: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<Omit<import("@lifesg/react-design-system/modal").ModalBoxProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
10
10
  ref?: import("react").Ref<HTMLDivElement>;
11
11
  }, IModalBoxStyle>> & string & Omit<(props: import("@lifesg/react-design-system/modal").ModalBoxProps & import("react").RefAttributes<HTMLDivElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, keyof import("react").Component<any, {}, any>>;
12
- export declare const StyledLocationPicker: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("./location-picker/types").ILocationPickerProps, ISinglePanelStyle>> & string & Omit<({ id, className, mapPanZoom, panelInputMode, showLocationModal, selectedLocationCoord, interactiveMapPinIconUrl, getCurrentLocation, locationAvailable, gettingCurrentLocation, onMapCenterChange, mapBannerText, disableSelectionFromMap, disableSelectedLocationMarker, selectablePins, pinsOnlyIndicateCurrentLocation, currentLocation, }: import("./location-picker/types").ILocationPickerProps) => import("react/jsx-runtime").JSX.Element, keyof import("react").Component<any, {}, any>>;
12
+ export declare const StyledLocationPicker: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("./location-picker/types").ILocationPickerProps, ISinglePanelStyle>> & string & Omit<({ id, className, mapPanZoom, panelInputMode, showLocationModal, selectedLocationCoord, interactiveMapPinIconUrl, getCurrentLocation, locationAvailable, gettingCurrentLocation, onMapCenterChange, mapBannerText, disableSelectionFromMap, disableSelectedLocationMarker, selectablePins, pinsOnlyIndicateCurrentLocation, currentLocation, legendItems, }: import("./location-picker/types").ILocationPickerProps) => import("react/jsx-runtime").JSX.Element, keyof import("react").Component<any, {}, any>>;
13
13
  export declare const ErrorImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
14
14
  export declare const PrefetchImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
15
15
  export {};
@@ -0,0 +1,8 @@
1
+ import { ILegendItem } from "../../../types";
2
+ interface ILegendProps {
3
+ onClose?: (() => void) | undefined;
4
+ items?: ILegendItem[] | undefined;
5
+ id?: string | undefined;
6
+ }
7
+ export declare const Legend: ({ onClose, items, id }: ILegendProps) => import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ export declare const LegendWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
3
+ export declare const LegendHeader: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
4
+ export declare const LegendContent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
5
+ export declare const LegendItem: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
6
+ export declare const LegendIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, never>> & string;
7
+ export declare const CloseButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("@lifesg/react-design-system/icon-button").IconButtonProps & import("react").RefAttributes<HTMLButtonElement>, "ref"> & {
8
+ ref?: import("react").Ref<HTMLButtonElement>;
9
+ }, never>> & string & Omit<(props: import("@lifesg/react-design-system/icon-button").IconButtonProps & import("react").RefAttributes<HTMLButtonElement>) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>, keyof import("react").Component<any, {}, any>>;
@@ -1,3 +1,3 @@
1
1
  import "leaflet/dist/leaflet.css";
2
2
  import { ILocationPickerProps } from "./types";
3
- export declare const LocationPicker: ({ id, className, mapPanZoom, panelInputMode, showLocationModal, selectedLocationCoord, interactiveMapPinIconUrl, getCurrentLocation, locationAvailable, gettingCurrentLocation, onMapCenterChange, mapBannerText, disableSelectionFromMap, disableSelectedLocationMarker, selectablePins, pinsOnlyIndicateCurrentLocation, currentLocation, }: ILocationPickerProps) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const LocationPicker: ({ id, className, mapPanZoom, panelInputMode, showLocationModal, selectedLocationCoord, interactiveMapPinIconUrl, getCurrentLocation, locationAvailable, gettingCurrentLocation, onMapCenterChange, mapBannerText, disableSelectionFromMap, disableSelectedLocationMarker, selectablePins, pinsOnlyIndicateCurrentLocation, currentLocation, legendItems, }: ILocationPickerProps) => import("react/jsx-runtime").JSX.Element;
@@ -2,6 +2,9 @@
2
2
  export declare const LocationPickerWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
3
3
  export declare const LeafletWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
4
4
  export declare const ButtonLocation: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
5
+ export declare const ButtonLegend: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>, "ref"> & {
6
+ ref?: import("react").Ref<HTMLButtonElement>;
7
+ }, never>> & string;
5
8
  export declare const ButtonLocationImage: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
6
9
  export declare const BannerWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
7
10
  export declare const Banner: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("@lifesg/react-design-system/card/types").CardProps, never>> & string & Omit<({ children, ...otherProps }: import("@lifesg/react-design-system/card/types").CardProps) => JSX.Element, keyof import("react").Component<any, {}, any>>;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { TPanelInputMode } from "../..";
2
+ import { ILegendItem, TPanelInputMode } from "../..";
3
3
  import { ILocationCoord } from "../../types";
4
4
  export interface IMapPin extends ILocationCoord {
5
5
  address?: string | undefined;
@@ -30,4 +30,5 @@ export interface ILocationPickerProps extends React.InputHTMLAttributes<HTMLDivE
30
30
  selectablePins: IMapPin[];
31
31
  pinsOnlyIndicateCurrentLocation?: boolean | undefined;
32
32
  currentLocation?: ILocationCoord | undefined;
33
+ legendItems?: ILegendItem[] | undefined;
33
34
  }
@@ -1,7 +1,7 @@
1
1
  import { ILocationFieldValues } from "../types";
2
2
  import { ILocationPickerProps } from "./location-picker/types";
3
3
  import { ILocationSearchProps } from "./location-search/types";
4
- export interface ILocationModalProps extends Pick<ILocationPickerProps, "mapPanZoom" | "interactiveMapPinIconUrl">, Pick<ILocationSearchProps, "mapApi" | "mustHavePostalCode" | "gettingCurrentLocationFetchMessage" | "disableSearch" | "addressFieldPlaceholder" | "searchBarIcon" | "bufferRadius"> {
4
+ export interface ILocationModalProps extends Pick<ILocationPickerProps, "mapPanZoom" | "interactiveMapPinIconUrl" | "legendItems">, Pick<ILocationSearchProps, "mapApi" | "mustHavePostalCode" | "gettingCurrentLocationFetchMessage" | "disableSearch" | "addressFieldPlaceholder" | "searchBarIcon" | "bufferRadius"> {
5
5
  id: string;
6
6
  className: string;
7
7
  showLocationModal: boolean;
@@ -9,6 +9,11 @@ import { ILocationModalProps } from "./location-modal/types";
9
9
  export interface ILocationFieldValidation extends IYupValidationRule {
10
10
  postalCode?: boolean | undefined;
11
11
  }
12
+ export interface ILegendItem {
13
+ id: string;
14
+ label: string;
15
+ icon: string;
16
+ }
12
17
  export interface ILocationMapApi {
13
18
  reverseGeocode?: string | undefined;
14
19
  convertLatLngToXY?: string | undefined;
@@ -21,6 +26,7 @@ export interface ILocationFieldSchema<V = undefined> extends IBaseFieldSchema<"l
21
26
  locationListTitle?: string | undefined;
22
27
  mapBannerText?: string | undefined;
23
28
  pinsOnlyIndicateCurrentLocation?: boolean | undefined;
29
+ legendItems?: ILegendItem[] | undefined;
24
30
  }
25
31
  export type TSinglePanelInputMode = "search" | "map";
26
32
  export type TExplicitEditMode = "show" | "explicit";
@@ -62,6 +68,7 @@ export interface TLocationFieldDetail<T = unknown> {
62
68
  export type TSetCurrentLocationDetail = TLocationFieldDetail<ILocationCoord>;
63
69
  export type TLocationFieldErrorDetail = TLocationFieldDetail<TErrorType>;
64
70
  export type TLocationFieldEvents = {
71
+ "show-location-modal-ready": CustomEvent;
65
72
  "get-current-location": CustomEvent;
66
73
  "set-current-location": CustomEvent<TSetCurrentLocationDetail>;
67
74
  error: CustomEvent<TLocationFieldErrorDetail>;
@@ -75,6 +82,8 @@ export declare class GeolocationPositionErrorWrapper extends Error {
75
82
  message: any;
76
83
  constructor(error: GeolocationPositionError);
77
84
  }
85
+ /** fired after the location field registers the `show-location-modal` event listener and is ready for external triggers */
86
+ declare function locationFieldEvent(uiType: "location-field", type: "show-location-modal-ready", id: string, listener: TFieldEventListener, options?: boolean | AddEventListenerOptions | undefined): void;
78
87
  /** fired on showing location modal */
79
88
  declare function locationFieldEvent(uiType: "location-field", type: "show-location-modal", id: string, listener: TFieldEventListener, options?: boolean | AddEventListenerOptions | undefined): void;
80
89
  /** fired on dismissing location modal */
@@ -1,2 +1,3 @@
1
+ import "./html-safe";
1
2
  import "./uinfin";
2
3
  import "./uen";
@@ -1,6 +1,6 @@
1
1
  import * as Yup from "yup";
2
2
  export declare const YUP_TYPES: readonly ["string", "number", "boolean", "array", "object"];
3
- export declare const YUP_CONDITIONS: readonly ["required", "length", "min", "max", "matches", "email", "url", "uuid", "positive", "negative", "integer", "lessThan", "moreThan", "when", "filled", "empty", "equals", "notEquals", "includes", "excludes", "uinfin", "equalsField", "withinDays"];
3
+ export declare const YUP_CONDITIONS: readonly ["required", "length", "min", "max", "matches", "email", "url", "uuid", "positive", "negative", "integer", "lessThan", "moreThan", "when", "filled", "empty", "equals", "notEquals", "includes", "excludes", "uinfin", "equalsField", "withinDays", "htmlSafe"];
4
4
  export type TYupSchemaType = (typeof YUP_TYPES)[number];
5
5
  export type TYupCondition = (typeof YUP_CONDITIONS)[number];
6
6
  interface IYupRule {
@@ -27,6 +27,7 @@ interface IYupRule {
27
27
  equalsField?: string | undefined;
28
28
  notEqualsField?: string | undefined;
29
29
  whitespace?: boolean | IWhitespaceRule | undefined;
30
+ htmlSafe?: boolean | undefined;
30
31
  /**
31
32
  * @deprecated Use `whitespace` rule instead.
32
33
  */
package/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{p as EElementType,q as EFieldType,o as FrontendEngine,n as useFrontendEngineComponent}from"./chunks/index.2d28e824.js";import"react/jsx-runtime";import"@lifesg/react-design-system/box-container";import"@lifesg/react-design-system/button";import"react";import"@lifesg/react-design-system/theme";import"styled-components";import"@lifesg/react-design-system/alert";import"@lifesg/react-design-system/typography";import"@lifesg/react-icons";import"@lifesg/react-icons/plus-circle-fill";import"@lifesg/react-design-system/markup";import"react-dom/server";import"@lifesg/react-design-system/filter";import"@lifesg/react-design-system/uneditable-section";import"@lifesg/react-design-system/timeline";import"@lifesg/react-design-system/form";import"@lifesg/react-design-system/toggle";import"@lifesg/react-design-system/layout";import"@lifesg/react-design-system/v2_layout";import"@lifesg/react-design-system/text-list";import"@lifesg/react-design-system/popover-v2";import"@lifesg/react-design-system/tab";import"@lifesg/react-design-system/modal";import"@lifesg/react-design-system/divider";import"@lifesg/react-design-system/v2_media";import"@lifesg/react-design-system/button-with-icon";import"@lifesg/react-design-system/error-display";import"@lifesg/react-design-system/checkbox";import"@lifesg/react-design-system/file-upload";import"@lifesg/react-icons/cross";import"@lifesg/react-design-system/icon-button";import"@lifesg/react-icons/bin";import"@lifesg/react-icons/eraser";import"@lifesg/react-icons/pencil";import"@lifesg/react-icons/pencil-stroke";import"@lifesg/react-icons/plus";import"@lifesg/react-icons/exclamation-triangle";import"@lifesg/react-icons/pin-fill";import"@lifesg/react-design-system/image-button";import"@lifesg/react-design-system/radio-button";
1
+ export{p as EElementType,q as EFieldType,o as FrontendEngine,n as useFrontendEngineComponent}from"./chunks/index.8cc1cf41.js";import"react/jsx-runtime";import"@lifesg/react-design-system/box-container";import"@lifesg/react-design-system/button";import"react";import"@lifesg/react-design-system/theme";import"styled-components";import"@lifesg/react-design-system/alert";import"@lifesg/react-design-system/typography";import"@lifesg/react-icons";import"@lifesg/react-icons/plus-circle-fill";import"@lifesg/react-design-system/markup";import"react-dom/server";import"@lifesg/react-design-system/filter";import"@lifesg/react-design-system/uneditable-section";import"@lifesg/react-design-system/timeline";import"@lifesg/react-design-system/form";import"@lifesg/react-design-system/toggle";import"@lifesg/react-design-system/layout";import"@lifesg/react-design-system/v2_layout";import"@lifesg/react-design-system/text-list";import"@lifesg/react-design-system/popover-v2";import"@lifesg/react-design-system/tab";import"@lifesg/react-design-system/modal";import"@lifesg/react-design-system/divider";import"@lifesg/react-design-system/v2_media";import"@lifesg/react-design-system/button-with-icon";import"@lifesg/react-design-system/error-display";import"@lifesg/react-design-system/checkbox";import"@lifesg/react-design-system/file-upload";import"@lifesg/react-icons/cross";import"@lifesg/react-design-system/icon-button";import"@lifesg/react-icons/bin";import"@lifesg/react-icons/eraser";import"@lifesg/react-icons/pencil";import"@lifesg/react-icons/pencil-stroke";import"@lifesg/react-icons/plus";import"@lifesg/react-icons/exclamation-triangle";import"@lifesg/react-icons/pin-fill";import"@lifesg/react-design-system/image-button";import"@lifesg/react-design-system/radio-button";
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifesg/web-frontend-engine",
3
- "version": "2.2.0",
3
+ "version": "2.2.2",
4
4
  "description": "A frontend engine for LifeSG React apps",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./index.js",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@floating-ui/react": ">=0.26.23 <1.0.0",
46
- "@lifesg/react-design-system": "^3.3.0-canary.7",
46
+ "@lifesg/react-design-system": "^3.4.0-canary.1",
47
47
  "@lifesg/react-icons": "^1.9.0",
48
48
  "react": "^17.0.2 || ^18.0.0 || ^19.0.0",
49
49
  "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0",