@wise/dynamic-flow-types 2.24.0 → 2.25.0

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 (38) hide show
  1. package/build/renderers/AlertRendererProps.d.ts +21 -0
  2. package/build/renderers/BaseInputRendererProps.d.ts +30 -0
  3. package/build/renderers/BooleanRendererProps.d.ts +6 -0
  4. package/build/renderers/BoxRendererProps.d.ts +10 -0
  5. package/build/renderers/ButtonRendererProps.d.ts +15 -0
  6. package/build/renderers/ColumnsRendererProps.d.ts +11 -0
  7. package/build/renderers/CoreContainerRendererProps.d.ts +5 -0
  8. package/build/renderers/DateInputRendererProps.d.ts +8 -0
  9. package/build/renderers/DecisionRendererProps.d.ts +18 -0
  10. package/build/renderers/DividerRendererProps.d.ts +6 -0
  11. package/build/renderers/FormRendererProps.d.ts +8 -0
  12. package/build/renderers/FormSectionRendererProps.d.ts +13 -0
  13. package/build/renderers/HeadingRendererProps.d.ts +12 -0
  14. package/build/renderers/HiddenRendererProps.d.ts +4 -0
  15. package/build/renderers/Icon.d.ts +1 -0
  16. package/build/renderers/Image.d.ts +1 -0
  17. package/build/renderers/ImageRendererProps.d.ts +9 -0
  18. package/build/renderers/InstructionsRendererProps.d.ts +12 -0
  19. package/build/renderers/IntegerInputRendererProps.d.ts +10 -0
  20. package/build/renderers/LoadingIndicatorRendererProps.d.ts +7 -0
  21. package/build/renderers/MarkdownRendererProps.d.ts +8 -0
  22. package/build/renderers/ModalRendererProps.d.ts +14 -0
  23. package/build/renderers/MultiSelectInputRendererProps.d.ts +14 -0
  24. package/build/renderers/MultiUploadInputRendererProps.d.ts +19 -0
  25. package/build/renderers/NumberInputRendererProps.d.ts +10 -0
  26. package/build/renderers/ParagraphRendererProps.d.ts +11 -0
  27. package/build/renderers/RendererProps.d.ts +38 -0
  28. package/build/renderers/RepeatableRendererProps.d.ts +38 -0
  29. package/build/renderers/ReviewRendererProps.d.ts +18 -0
  30. package/build/renderers/SearchRendererProps.d.ts +33 -0
  31. package/build/renderers/SelectInputRendererProps.d.ts +19 -0
  32. package/build/renderers/StatusListRendererProps.d.ts +23 -0
  33. package/build/renderers/StepRendererProps.d.ts +25 -0
  34. package/build/renderers/TextInputRendererProps.d.ts +14 -0
  35. package/build/renderers/UploadInputRendererProps.d.ts +8 -0
  36. package/build/renderers/constants.d.ts +3 -0
  37. package/build/renderers/index.d.ts +36 -422
  38. package/package.json +4 -4
@@ -0,0 +1,21 @@
1
+ import { Context, Margin } from './constants';
2
+ export type AlertRendererProps = {
3
+ type: 'alert';
4
+ control?: string;
5
+ context: Context;
6
+ margin: Margin;
7
+ markdown: string;
8
+ callToAction?: AlertCallToAction | AlertCallToActionLink;
9
+ };
10
+ export type AlertCallToActionLink = {
11
+ type: 'link';
12
+ accessibilityDescription?: string;
13
+ href: string;
14
+ title: string;
15
+ };
16
+ export type AlertCallToAction = {
17
+ type: 'action';
18
+ accessibilityDescription?: string;
19
+ title: string;
20
+ onClick: () => void;
21
+ };
@@ -0,0 +1,30 @@
1
+ import { Icon } from './Icon';
2
+ import { Image } from './Image';
3
+ export interface BaseInputRendererProps {
4
+ id: string;
5
+ control?: string;
6
+ autoComplete: string;
7
+ description?: string;
8
+ disabled: boolean;
9
+ /**
10
+ * @deprecated please use the `validationState` property instead
11
+ */
12
+ error?: string;
13
+ help?: string;
14
+ label?: string;
15
+ placeholder?: string;
16
+ required: boolean;
17
+ /** @experimental */
18
+ validationState: ValidationResult | undefined;
19
+ icon?: Icon;
20
+ image?: Image;
21
+ onBlur: () => void;
22
+ onFocus: () => void;
23
+ }
24
+ export type ValidationResult = {
25
+ status: 'valid';
26
+ message?: string;
27
+ } | {
28
+ status: 'invalid';
29
+ message: string;
30
+ };
@@ -0,0 +1,6 @@
1
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
2
+ export interface BooleanInputRendererProps extends BaseInputRendererProps {
3
+ type: 'input-boolean';
4
+ value: boolean;
5
+ onChange: (value: boolean) => void;
6
+ }
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ import { Margin, Size } from './constants';
3
+ export type BoxRendererProps = {
4
+ type: 'box';
5
+ control?: string;
6
+ border: boolean;
7
+ children: ReactNode;
8
+ margin: Margin;
9
+ width: Size;
10
+ };
@@ -0,0 +1,15 @@
1
+ import { Context, Margin, Size } from './constants';
2
+ /**
3
+ * Known values for "control" are: 'primary' | 'secondary' | 'tertiary'.
4
+ */
5
+ export type ButtonRendererProps = {
6
+ type: 'button';
7
+ control?: string;
8
+ context: Context;
9
+ disabled: boolean;
10
+ margin: Margin;
11
+ pinOrder?: number;
12
+ size?: Size;
13
+ title: string;
14
+ onClick: () => void;
15
+ };
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ import { Margin } from './constants';
3
+ export type Bias = 'none' | 'start' | 'end';
4
+ export type ColumnsRendererProps = {
5
+ type: 'columns';
6
+ control?: string;
7
+ bias: Bias;
8
+ margin: Margin;
9
+ startChildren: ReactNode;
10
+ endChildren: ReactNode;
11
+ };
@@ -0,0 +1,5 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface CoreContainerRendererProps {
3
+ type: 'container';
4
+ children: ReactNode;
5
+ }
@@ -0,0 +1,8 @@
1
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
2
+ export type DateInputRendererProps = BaseInputRendererProps & {
3
+ type: 'input-date';
4
+ maximumDate?: string;
5
+ minimumDate?: string;
6
+ value: string | null;
7
+ onChange: (value: string | null) => void;
8
+ };
@@ -0,0 +1,18 @@
1
+ import { Icon } from './Icon';
2
+ import { Image } from './Image';
3
+ import { Margin } from './constants';
4
+ export type DecisionRendererProps = {
5
+ type: 'decision';
6
+ control?: string;
7
+ options: DecisionOption[];
8
+ margin: Margin;
9
+ title?: string;
10
+ };
11
+ export type DecisionOption = {
12
+ description?: string;
13
+ disabled?: boolean;
14
+ icon?: Icon;
15
+ image?: Image;
16
+ title: string;
17
+ onClick: () => void;
18
+ };
@@ -0,0 +1,6 @@
1
+ import { Margin } from './constants';
2
+ export type DividerRendererProps = {
3
+ type: 'divider';
4
+ control?: string;
5
+ margin: Margin;
6
+ };
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { Margin } from './constants';
3
+ export type FormRendererProps = {
4
+ type: 'form';
5
+ control?: string;
6
+ children: ReactNode;
7
+ margin: Margin;
8
+ };
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from 'react';
2
+ import { Icon } from './Icon';
3
+ import { Image } from './Image';
4
+ export type FormSectionRendererProps = {
5
+ type: 'form-section';
6
+ control?: string;
7
+ title?: string;
8
+ description?: string;
9
+ help?: string;
10
+ children: ReactNode;
11
+ icon?: Icon;
12
+ image?: Image;
13
+ };
@@ -0,0 +1,12 @@
1
+ import { Align, Margin, Size } from './constants';
2
+ /**
3
+ * Known values for "control" are: 'display'.
4
+ */
5
+ export type HeadingRendererProps = {
6
+ type: 'heading';
7
+ control?: string;
8
+ align: Align;
9
+ margin: Margin;
10
+ size: Size;
11
+ text: string;
12
+ };
@@ -0,0 +1,4 @@
1
+ export type HiddenRendererProps = {
2
+ type: 'hidden';
3
+ control?: string;
4
+ };
@@ -0,0 +1 @@
1
+ export type { Icon } from '../next';
@@ -0,0 +1 @@
1
+ export type { Image } from '../next';
@@ -0,0 +1,9 @@
1
+ import { Margin, Size } from './constants';
2
+ export type ImageRendererProps = {
3
+ type: 'image';
4
+ control?: string;
5
+ accessibilityDescription?: string;
6
+ size: Size;
7
+ margin: Margin;
8
+ url: string;
9
+ };
@@ -0,0 +1,12 @@
1
+ import { Context, Margin } from './constants';
2
+ export type InstructionsRendererProps = {
3
+ type: 'instructions';
4
+ control?: string;
5
+ items: InstructionItem[];
6
+ margin: Margin;
7
+ title?: string;
8
+ };
9
+ export type InstructionItem = {
10
+ context: Context;
11
+ text: string;
12
+ };
@@ -0,0 +1,10 @@
1
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
2
+ export type IntegerInputRendererProps = BaseInputRendererProps & {
3
+ type: 'input-integer';
4
+ value: number | null;
5
+ /** @experimental */
6
+ maximum?: number;
7
+ /** @experimental */
8
+ minimum?: number;
9
+ onChange: (value: number | null) => void;
10
+ };
@@ -0,0 +1,7 @@
1
+ import { Margin, Size } from './constants';
2
+ export type LoadingIndicatorRendererProps = {
3
+ type: 'loading-indicator';
4
+ control?: string;
5
+ margin: Margin;
6
+ size: Size;
7
+ };
@@ -0,0 +1,8 @@
1
+ import { Align, Margin } from './constants';
2
+ export type MarkdownRendererProps = {
3
+ type: 'markdown';
4
+ control?: string;
5
+ align: Align;
6
+ margin: Margin;
7
+ content: string;
8
+ };
@@ -0,0 +1,14 @@
1
+ import { ReactNode } from 'react';
2
+ import { Margin } from './constants';
3
+ export type ModalRendererProps = {
4
+ type: 'modal';
5
+ control?: string;
6
+ content: {
7
+ components: ReactNode;
8
+ title?: string;
9
+ };
10
+ margin: Margin;
11
+ trigger: {
12
+ title: string;
13
+ };
14
+ };
@@ -0,0 +1,14 @@
1
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
2
+ import { SelectInputRendererOption } from './SelectInputRendererProps';
3
+ export type MultiSelectInputRendererProps = Omit<BaseInputRendererProps, 'required'> & {
4
+ type: 'input-multi-select';
5
+ label?: string;
6
+ description?: string;
7
+ /** @experimental */
8
+ maxItems?: number;
9
+ /** @experimental */
10
+ minItems?: number;
11
+ selectedIndices: number[];
12
+ options: SelectInputRendererOption[];
13
+ onSelect: (indices: number[]) => void;
14
+ };
@@ -0,0 +1,19 @@
1
+ import { BaseInputRendererProps, ValidationResult } from './BaseInputRendererProps';
2
+ export type MultiUploadInputRendererProps = BaseInputRendererProps & {
3
+ type: 'input-upload-multi';
4
+ maxSize?: number;
5
+ minItems?: number;
6
+ maxItems?: number;
7
+ accepts?: string[];
8
+ uploadLabel?: string;
9
+ value: FileWithId[];
10
+ onUpload: (file: File, fileId: string) => Promise<void>;
11
+ onDelete: (fileId: string) => Promise<void>;
12
+ };
13
+ type FileWithId = {
14
+ id: string;
15
+ file: File;
16
+ /** @experimental */
17
+ validationState?: ValidationResult;
18
+ };
19
+ export {};
@@ -0,0 +1,10 @@
1
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
2
+ export type NumberInputRendererProps = BaseInputRendererProps & {
3
+ type: 'input-number';
4
+ value: number | null;
5
+ /** @experimental */
6
+ maximum?: number;
7
+ /** @experimental */
8
+ minimum?: number;
9
+ onChange: (value: number | null) => void;
10
+ };
@@ -0,0 +1,11 @@
1
+ import { Align, Margin } from './constants';
2
+ /**
3
+ * Known values for "control" are: 'copyable'.
4
+ */
5
+ export type ParagraphRendererProps = {
6
+ type: 'paragraph';
7
+ control?: string;
8
+ align: Align;
9
+ margin: Margin;
10
+ text: string;
11
+ };
@@ -0,0 +1,38 @@
1
+ import { AlertRendererProps } from './AlertRendererProps';
2
+ import { BooleanInputRendererProps } from './BooleanRendererProps';
3
+ import { BoxRendererProps } from './BoxRendererProps';
4
+ import { ButtonRendererProps } from './ButtonRendererProps';
5
+ import { ColumnsRendererProps } from './ColumnsRendererProps';
6
+ import { CoreContainerRendererProps } from './CoreContainerRendererProps';
7
+ import { DateInputRendererProps } from './DateInputRendererProps';
8
+ import { DecisionRendererProps } from './DecisionRendererProps';
9
+ import { DividerRendererProps } from './DividerRendererProps';
10
+ import { FormRendererProps } from './FormRendererProps';
11
+ import { FormSectionRendererProps } from './FormSectionRendererProps';
12
+ import { HeadingRendererProps } from './HeadingRendererProps';
13
+ import { HiddenRendererProps } from './HiddenRendererProps';
14
+ import { ImageRendererProps } from './ImageRendererProps';
15
+ import { InstructionsRendererProps } from './InstructionsRendererProps';
16
+ import { IntegerInputRendererProps } from './IntegerInputRendererProps';
17
+ import { LoadingIndicatorRendererProps } from './LoadingIndicatorRendererProps';
18
+ import { MarkdownRendererProps } from './MarkdownRendererProps';
19
+ import { ModalRendererProps } from './ModalRendererProps';
20
+ import { MultiSelectInputRendererProps } from './MultiSelectInputRendererProps';
21
+ import { MultiUploadInputRendererProps } from './MultiUploadInputRendererProps';
22
+ import { NumberInputRendererProps } from './NumberInputRendererProps';
23
+ import { ParagraphRendererProps } from './ParagraphRendererProps';
24
+ import { RepeatableRendererProps } from './RepeatableRendererProps';
25
+ import { ReviewRendererProps } from './ReviewRendererProps';
26
+ import { SearchRendererProps } from './SearchRendererProps';
27
+ import { SelectInputRendererProps } from './SelectInputRendererProps';
28
+ import { StatusListRendererProps } from './StatusListRendererProps';
29
+ import { StepRendererProps } from './StepRendererProps';
30
+ import { TextInputRendererProps } from './TextInputRendererProps';
31
+ import { UploadInputRendererProps } from './UploadInputRendererProps';
32
+ export type RendererProps = AlertRendererProps | BooleanInputRendererProps | BoxRendererProps | ButtonRendererProps | ColumnsRendererProps | CoreContainerRendererProps | DateInputRendererProps | DecisionRendererProps | DividerRendererProps | FormRendererProps | FormSectionRendererProps | HeadingRendererProps | HiddenRendererProps | ImageRendererProps | InstructionsRendererProps | IntegerInputRendererProps | LoadingIndicatorRendererProps | MarkdownRendererProps | ModalRendererProps | MultiSelectInputRendererProps | MultiUploadInputRendererProps | NumberInputRendererProps | ParagraphRendererProps | RepeatableRendererProps | ReviewRendererProps | SearchRendererProps | SelectInputRendererProps | StatusListRendererProps | StepRendererProps | TextInputRendererProps | UploadInputRendererProps;
33
+ export type Renderer<P extends RendererProps> = {
34
+ canRenderType: P['type'];
35
+ canRender?: (props: P) => boolean;
36
+ render: (props: P) => JSX.Element;
37
+ };
38
+ export type Renderers = readonly (Renderer<StepRendererProps> | Renderer<CoreContainerRendererProps> | Renderer<AlertRendererProps> | Renderer<BoxRendererProps> | Renderer<ColumnsRendererProps> | Renderer<DecisionRendererProps> | Renderer<DividerRendererProps> | Renderer<FormRendererProps> | Renderer<HeadingRendererProps> | Renderer<InstructionsRendererProps> | Renderer<LoadingIndicatorRendererProps> | Renderer<MarkdownRendererProps> | Renderer<ImageRendererProps> | Renderer<ModalRendererProps> | Renderer<ParagraphRendererProps> | Renderer<ReviewRendererProps> | Renderer<SearchRendererProps> | Renderer<StatusListRendererProps> | Renderer<FormSectionRendererProps> | Renderer<BooleanInputRendererProps> | Renderer<ButtonRendererProps> | Renderer<DateInputRendererProps> | Renderer<HiddenRendererProps> | Renderer<IntegerInputRendererProps> | Renderer<NumberInputRendererProps> | Renderer<RepeatableRendererProps> | Renderer<SelectInputRendererProps> | Renderer<MultiSelectInputRendererProps> | Renderer<TextInputRendererProps> | Renderer<UploadInputRendererProps> | Renderer<MultiUploadInputRendererProps>)[];
@@ -0,0 +1,38 @@
1
+ import { ReactNode } from 'react';
2
+ import { Icon } from './Icon';
3
+ import { Image } from './Image';
4
+ import { ValidationResult } from './BaseInputRendererProps';
5
+ export type RepeatableRendererProps = {
6
+ type: 'repeatable';
7
+ control?: string;
8
+ addItemTitle: string;
9
+ description?: string;
10
+ children: ReactNode[];
11
+ editableItem: ReactNode;
12
+ editItemTitle: string;
13
+ /**
14
+ * @deprecated please use the `validationState` property instead
15
+ */
16
+ error?: string;
17
+ /** @experimental */
18
+ validationState: ValidationResult | undefined;
19
+ items: RepeatableItemRendererProps[];
20
+ title: string;
21
+ /** @experimental */
22
+ maxItems?: number;
23
+ /** @experimental */
24
+ minItems?: number;
25
+ icon?: Icon;
26
+ image?: Image;
27
+ onAdd: () => void;
28
+ onEdit: (itemIndex: number) => void;
29
+ onSave: () => boolean;
30
+ onRemove: () => void;
31
+ };
32
+ export type RepeatableItemRendererProps = {
33
+ id: string;
34
+ description?: string;
35
+ icon?: Icon;
36
+ image?: Image;
37
+ title?: string;
38
+ };
@@ -0,0 +1,18 @@
1
+ import { Margin } from './constants';
2
+ export type ReviewRendererProps = {
3
+ type: 'review';
4
+ control?: string;
5
+ fields: ReviewField[];
6
+ margin: Margin;
7
+ title?: string;
8
+ callToAction?: ReviewCallToAction;
9
+ };
10
+ export type ReviewField = {
11
+ help?: string;
12
+ label: string;
13
+ value: string;
14
+ };
15
+ export type ReviewCallToAction = {
16
+ title: string;
17
+ onClick: () => void;
18
+ };
@@ -0,0 +1,33 @@
1
+ import type { SearchResult as SearchResultSpec } from '../next';
2
+ import { Margin } from './constants';
3
+ export type SearchRendererProps = {
4
+ type: 'search';
5
+ control?: string;
6
+ id: string;
7
+ isLoading: boolean;
8
+ margin: Margin;
9
+ query: string;
10
+ onChange: (query: string) => void;
11
+ state: SearchState;
12
+ title: string;
13
+ };
14
+ export type SearchState = PendingSearchState | NoResultsSearchState | ResultsSearchState | ErrorSearchState;
15
+ export type PendingSearchState = {
16
+ type: 'pending';
17
+ };
18
+ export type NoResultsSearchState = {
19
+ type: 'noResults';
20
+ message: string;
21
+ };
22
+ export type ErrorSearchState = {
23
+ type: 'error';
24
+ onRetry: () => void;
25
+ };
26
+ export type ResultsSearchState = {
27
+ type: 'results';
28
+ results: SearchResult[];
29
+ };
30
+ export type SearchResult = Pick<SearchResultSpec, 'description' | 'icon' | 'image' | 'title' | 'type'> & {
31
+ id?: string;
32
+ onClick: () => void;
33
+ };
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from 'react';
2
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
3
+ import { Icon } from './Icon';
4
+ import { Image } from './Image';
5
+ export type SelectInputRendererProps = BaseInputRendererProps & {
6
+ type: 'input-select';
7
+ children: ReactNode;
8
+ options: SelectInputRendererOption[];
9
+ selectedIndex: number | null;
10
+ onSelect: (index: number | null) => void;
11
+ };
12
+ export type SelectInputRendererOption = {
13
+ description?: string;
14
+ disabled: boolean;
15
+ icon?: Icon;
16
+ image?: Image;
17
+ keywords?: string[];
18
+ title: string;
19
+ };
@@ -0,0 +1,23 @@
1
+ import { Icon } from './Icon';
2
+ import { Margin } from './constants';
3
+ export type StatusListRendererProps = {
4
+ type: 'status-list';
5
+ control?: string;
6
+ items: StatusListItem[];
7
+ margin: Margin;
8
+ title?: string;
9
+ };
10
+ export type StatusListItem = {
11
+ description?: string;
12
+ icon: Icon;
13
+ status?: 'done' | 'not-done' | 'pending';
14
+ title: string;
15
+ callToAction?: StatusListItemCallToAction;
16
+ };
17
+ export type StatusListItemCallToAction = {
18
+ accessibilityDescription?: string;
19
+ href?: string;
20
+ title: string;
21
+ onClick: () => void;
22
+ };
23
+ export type StatusListItemStatus = 'done' | 'not-done' | 'pending';
@@ -0,0 +1,25 @@
1
+ import type { Action, Step } from '../next';
2
+ import type { ReactNode } from 'react';
3
+ export type AnalyticsEventDispatcher = (eventName: string, properties?: Record<string, unknown>) => void;
4
+ export type LoadingState = 'idle' | 'submitting' | 'refreshing';
5
+ export type StepRendererProps = {
6
+ type: 'step';
7
+ control?: string;
8
+ back?: {
9
+ title?: string;
10
+ onClick: () => void;
11
+ };
12
+ description?: string;
13
+ error?: string;
14
+ external?: {
15
+ url: string;
16
+ };
17
+ loadingState: LoadingState;
18
+ title?: string;
19
+ trackEvent: AnalyticsEventDispatcher;
20
+ /** @experimental Please do not use this property. It is only here to support a legacy camera step. */
21
+ step?: Step;
22
+ /** @experimental Please do not use this function. Calling onAction from a step renderer completely bypasses the core logic and may result in unexpected behavior. It is only here to support a legacy camera step. */
23
+ onAction?: (action: Action) => void | Promise<void>;
24
+ children: ReactNode;
25
+ };
@@ -0,0 +1,14 @@
1
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
2
+ /**
3
+ * Known values for "control" are: 'password' | 'textarea' | 'email' | 'numeric' | 'phone-number'.
4
+ */
5
+ export type TextInputRendererProps = BaseInputRendererProps & {
6
+ type: 'input-text';
7
+ displayFormat?: string;
8
+ value: string | null;
9
+ /** @experimental */
10
+ maxLength?: number;
11
+ /** @experimental */
12
+ minLength?: number;
13
+ onChange: (value: string | null) => void;
14
+ };
@@ -0,0 +1,8 @@
1
+ import { BaseInputRendererProps } from './BaseInputRendererProps';
2
+ export type UploadInputRendererProps = BaseInputRendererProps & {
3
+ type: 'input-upload';
4
+ maxSize?: number;
5
+ accepts?: string[];
6
+ value: File | null;
7
+ onUpload: (file: File | null) => Promise<void>;
8
+ };
@@ -0,0 +1,3 @@
1
+ export type Align = 'start' | 'center' | 'end';
2
+ export type Context = 'positive' | 'negative' | 'warning' | 'neutral';
3
+ export type { Margin, Size } from '../next';
@@ -1,422 +1,36 @@
1
- import type { Action, Icon as DFIcon, Margin as DFMargin, Size as DFSize, SearchResult as SearchResultSpec, Step } from '../next';
2
- import type { ReactNode } from 'react';
3
- export type Align = 'start' | 'center' | 'end';
4
- export type Bias = 'none' | 'start' | 'end';
5
- export type Context = 'positive' | 'negative' | 'warning' | 'neutral';
6
- export type Margin = DFMargin;
7
- export type Size = DFSize;
8
- export type LoadingState = 'idle' | 'submitting' | 'refreshing';
9
- export type AnalyticsEventDispatcher = (eventName: string, properties?: Record<string, unknown>) => void;
10
- export type Image = {
11
- url: string;
12
- accessibilityDescription?: string;
13
- };
14
- export type Icon = DFIcon;
15
- export type DecisionOption = {
16
- description?: string;
17
- disabled?: boolean;
18
- icon?: Icon;
19
- image?: Image;
20
- title: string;
21
- onClick: () => void;
22
- };
23
- export type InstructionItem = {
24
- context: Context;
25
- text: string;
26
- };
27
- export type ReviewCallToAction = {
28
- title: string;
29
- onClick: () => void;
30
- };
31
- export type AlertCallToActionLink = {
32
- type: 'link';
33
- accessibilityDescription?: string;
34
- href: string;
35
- title: string;
36
- };
37
- export type AlertCallToAction = {
38
- type: 'action';
39
- accessibilityDescription?: string;
40
- title: string;
41
- onClick: () => void;
42
- };
43
- export type ReviewField = {
44
- help?: string;
45
- label: string;
46
- value: string;
47
- };
48
- export type Renderer<P extends RendererProps> = {
49
- canRenderType: P['type'];
50
- canRender?: (props: P) => boolean;
51
- render: (props: P) => JSX.Element;
52
- };
53
- export interface CoreContainerRendererProps {
54
- type: 'container';
55
- children: ReactNode;
56
- }
57
- export type RendererProps = AlertRendererProps | BooleanInputRendererProps | BoxRendererProps | ButtonRendererProps | ColumnsRendererProps | CoreContainerRendererProps | DateInputRendererProps | DecisionRendererProps | DividerRendererProps | FormRendererProps | FormSectionRendererProps | HeadingRendererProps | HiddenRendererProps | ImageRendererProps | InstructionsRendererProps | IntegerInputRendererProps | LoadingIndicatorRendererProps | MarkdownRendererProps | ModalRendererProps | MultiSelectInputRendererProps | MultiUploadInputRendererProps | NumberInputRendererProps | ParagraphRendererProps | RepeatableRendererProps | ReviewRendererProps | SearchRendererProps | SelectInputRendererProps | StatusListRendererProps | StepRendererProps | TextInputRendererProps | UploadInputRendererProps;
58
- export type Renderers = readonly (Renderer<StepRendererProps> | Renderer<CoreContainerRendererProps> | Renderer<AlertRendererProps> | Renderer<BoxRendererProps> | Renderer<ColumnsRendererProps> | Renderer<DecisionRendererProps> | Renderer<DividerRendererProps> | Renderer<FormRendererProps> | Renderer<HeadingRendererProps> | Renderer<InstructionsRendererProps> | Renderer<LoadingIndicatorRendererProps> | Renderer<MarkdownRendererProps> | Renderer<ImageRendererProps> | Renderer<ModalRendererProps> | Renderer<ParagraphRendererProps> | Renderer<ReviewRendererProps> | Renderer<SearchRendererProps> | Renderer<StatusListRendererProps> | Renderer<FormSectionRendererProps> | Renderer<BooleanInputRendererProps> | Renderer<ButtonRendererProps> | Renderer<DateInputRendererProps> | Renderer<HiddenRendererProps> | Renderer<IntegerInputRendererProps> | Renderer<NumberInputRendererProps> | Renderer<RepeatableRendererProps> | Renderer<SelectInputRendererProps> | Renderer<MultiSelectInputRendererProps> | Renderer<TextInputRendererProps> | Renderer<UploadInputRendererProps> | Renderer<MultiUploadInputRendererProps>)[];
59
- export type StepRendererProps = {
60
- type: 'step';
61
- control?: string;
62
- back?: {
63
- title?: string;
64
- onClick: () => void;
65
- };
66
- description?: string;
67
- error?: string;
68
- external?: {
69
- url: string;
70
- };
71
- loadingState: LoadingState;
72
- title?: string;
73
- trackEvent: AnalyticsEventDispatcher;
74
- /** @experimental Please do not use this property. It is only here to support a legacy camera step. */
75
- step?: Step;
76
- /** @experimental Please do not use this function. Calling onAction from a step renderer completely bypasses the core logic and may result in unexpected behavior. It is only here to support a legacy camera step. */
77
- onAction?: (action: Action) => void | Promise<void>;
78
- children: ReactNode;
79
- };
80
- export type AlertRendererProps = {
81
- type: 'alert';
82
- control?: string;
83
- context: Context;
84
- margin: Margin;
85
- markdown: string;
86
- callToAction?: AlertCallToAction | AlertCallToActionLink;
87
- };
88
- export type BoxRendererProps = {
89
- type: 'box';
90
- control?: string;
91
- border: boolean;
92
- children: ReactNode;
93
- margin: Margin;
94
- width: Size;
95
- };
96
- export type ColumnsRendererProps = {
97
- type: 'columns';
98
- control?: string;
99
- bias: Bias;
100
- margin: Margin;
101
- startChildren: ReactNode;
102
- endChildren: ReactNode;
103
- };
104
- export type DecisionRendererProps = {
105
- type: 'decision';
106
- control?: string;
107
- options: DecisionOption[];
108
- margin: Margin;
109
- title?: string;
110
- };
111
- export type DividerRendererProps = {
112
- type: 'divider';
113
- control?: string;
114
- margin: Margin;
115
- };
116
- export type FormRendererProps = {
117
- type: 'form';
118
- control?: string;
119
- children: ReactNode;
120
- margin: Margin;
121
- };
122
- /**
123
- * Known values for "control" are: 'display'.
124
- */
125
- export type HeadingRendererProps = {
126
- type: 'heading';
127
- control?: string;
128
- align: Align;
129
- margin: Margin;
130
- size: Size;
131
- text: string;
132
- };
133
- export type InstructionsRendererProps = {
134
- type: 'instructions';
135
- control?: string;
136
- items: InstructionItem[];
137
- margin: Margin;
138
- title?: string;
139
- };
140
- export type LoadingIndicatorRendererProps = {
141
- type: 'loading-indicator';
142
- control?: string;
143
- margin: Margin;
144
- size: Size;
145
- };
146
- export type MarkdownRendererProps = {
147
- type: 'markdown';
148
- control?: string;
149
- align: Align;
150
- margin: Margin;
151
- content: string;
152
- };
153
- export type ImageRendererProps = {
154
- type: 'image';
155
- control?: string;
156
- accessibilityDescription?: string;
157
- size: Size;
158
- margin: Margin;
159
- url: string;
160
- };
161
- export type ModalRendererProps = {
162
- type: 'modal';
163
- control?: string;
164
- content: {
165
- components: ReactNode;
166
- title?: string;
167
- };
168
- margin: Margin;
169
- trigger: {
170
- title: string;
171
- };
172
- };
173
- /**
174
- * Known values for "control" are: 'copyable'.
175
- */
176
- export type ParagraphRendererProps = {
177
- type: 'paragraph';
178
- control?: string;
179
- align: Align;
180
- margin: Margin;
181
- text: string;
182
- };
183
- export type ReviewRendererProps = {
184
- type: 'review';
185
- control?: string;
186
- fields: ReviewField[];
187
- margin: Margin;
188
- title?: string;
189
- callToAction?: ReviewCallToAction;
190
- };
191
- export type SearchRendererProps = {
192
- type: 'search';
193
- control?: string;
194
- id: string;
195
- isLoading: boolean;
196
- margin: Margin;
197
- query: string;
198
- onChange: (query: string) => void;
199
- state: SearchState;
200
- title: string;
201
- };
202
- export type SearchState = PendingSearchState | NoResultsSearchState | ResultsSearchState | ErrorSearchState;
203
- export type PendingSearchState = {
204
- type: 'pending';
205
- };
206
- export type NoResultsSearchState = {
207
- type: 'noResults';
208
- message: string;
209
- };
210
- export type ErrorSearchState = {
211
- type: 'error';
212
- onRetry: () => void;
213
- };
214
- export type ResultsSearchState = {
215
- type: 'results';
216
- results: SearchResult[];
217
- };
218
- export type SearchResult = Pick<SearchResultSpec, 'description' | 'icon' | 'image' | 'title' | 'type'> & {
219
- id?: string;
220
- onClick: () => void;
221
- };
222
- export type StatusListRendererProps = {
223
- type: 'status-list';
224
- control?: string;
225
- items: StatusListItem[];
226
- margin: Margin;
227
- title?: string;
228
- };
229
- export type StatusListItem = {
230
- description?: string;
231
- icon: Icon;
232
- status?: 'done' | 'not-done' | 'pending';
233
- title: string;
234
- callToAction?: StatusListItemCallToAction;
235
- };
236
- export type StatusListItemCallToAction = {
237
- accessibilityDescription?: string;
238
- href?: string;
239
- title: string;
240
- onClick: () => void;
241
- };
242
- export type StatusListItemStatus = 'done' | 'not-done' | 'pending';
243
- export type FormSectionRendererProps = {
244
- type: 'form-section';
245
- control?: string;
246
- title?: string;
247
- description?: string;
248
- help?: string;
249
- children: ReactNode;
250
- };
251
- interface BaseInputRendererProps {
252
- id: string;
253
- control?: string;
254
- autoComplete: string;
255
- description?: string;
256
- disabled: boolean;
257
- /**
258
- * @deprecated please use the `validationState` property instead
259
- */
260
- error?: string;
261
- help?: string;
262
- label?: string;
263
- placeholder?: string;
264
- required: boolean;
265
- /** @experimental */
266
- validationState: ValidationResult | undefined;
267
- onBlur: () => void;
268
- onFocus: () => void;
269
- }
270
- export type ValidationResult = {
271
- status: 'valid';
272
- message?: string;
273
- } | {
274
- status: 'invalid';
275
- message: string;
276
- };
277
- export interface BooleanInputRendererProps extends BaseInputRendererProps {
278
- type: 'input-boolean';
279
- value: boolean;
280
- onChange: (value: boolean) => void;
281
- }
282
- /**
283
- * Known values for "control" are: 'primary' | 'secondary' | 'tertiary'.
284
- */
285
- export type ButtonRendererProps = {
286
- type: 'button';
287
- control?: string;
288
- context: Context;
289
- disabled: boolean;
290
- margin: Margin;
291
- pinOrder?: number;
292
- size?: Size;
293
- title: string;
294
- onClick: () => void;
295
- };
296
- /**
297
- * Known values for "control" are: 'date-lookup'.
298
- */
299
- export type DateInputRendererProps = BaseInputRendererProps & {
300
- type: 'input-date';
301
- maximumDate?: string;
302
- minimumDate?: string;
303
- value: string | null;
304
- onChange: (value: string | null) => void;
305
- };
306
- export type HiddenRendererProps = {
307
- type: 'hidden';
308
- control?: string;
309
- };
310
- export type IntegerInputRendererProps = BaseInputRendererProps & {
311
- type: 'input-integer';
312
- value: number | null;
313
- /** @experimental */
314
- maximum?: number;
315
- /** @experimental */
316
- minimum?: number;
317
- onChange: (value: number | null) => void;
318
- };
319
- export type MultiSelectInputRendererProps = Omit<BaseInputRendererProps, 'required'> & {
320
- type: 'input-multi-select';
321
- label?: string;
322
- description?: string;
323
- /** @experimental */
324
- maxItems?: number;
325
- /** @experimental */
326
- minItems?: number;
327
- selectedIndices: number[];
328
- options: SelectInputRendererOption[];
329
- onSelect: (indices: number[]) => void;
330
- };
331
- export type NumberInputRendererProps = BaseInputRendererProps & {
332
- type: 'input-number';
333
- value: number | null;
334
- /** @experimental */
335
- maximum?: number;
336
- /** @experimental */
337
- minimum?: number;
338
- onChange: (value: number | null) => void;
339
- };
340
- export type RepeatableRendererProps = {
341
- type: 'repeatable';
342
- control?: string;
343
- addItemTitle: string;
344
- description?: string;
345
- children: ReactNode[];
346
- editableItem: ReactNode;
347
- editItemTitle: string;
348
- /**
349
- * @deprecated please use the `validationState` property instead
350
- */
351
- error?: string;
352
- /** @experimental */
353
- validationState: ValidationResult | undefined;
354
- items: RepeatableItemRendererProps[];
355
- title: string;
356
- /** @experimental */
357
- maxItems?: number;
358
- /** @experimental */
359
- minItems?: number;
360
- onAdd: () => void;
361
- onEdit: (itemIndex: number) => void;
362
- onSave: () => boolean;
363
- onRemove: () => void;
364
- };
365
- export type RepeatableItemRendererProps = {
366
- id: string;
367
- description?: string;
368
- icon?: Icon;
369
- image?: Image;
370
- title?: string;
371
- };
372
- export type SelectInputRendererProps = BaseInputRendererProps & {
373
- type: 'input-select';
374
- children: ReactNode;
375
- options: SelectInputRendererOption[];
376
- selectedIndex: number | null;
377
- onSelect: (index: number | null) => void;
378
- };
379
- export type SelectInputRendererOption = {
380
- description?: string;
381
- disabled: boolean;
382
- icon?: Icon;
383
- image?: Image;
384
- keywords?: string[];
385
- title: string;
386
- };
387
- /**
388
- * Known values for "control" are: 'password' | 'textarea' | 'email' | 'numeric' | 'phone-number'.
389
- */
390
- export type TextInputRendererProps = BaseInputRendererProps & {
391
- type: 'input-text';
392
- displayFormat?: string;
393
- value: string | null;
394
- /** @experimental */
395
- maxLength?: number;
396
- /** @experimental */
397
- minLength?: number;
398
- onChange: (value: string | null) => void;
399
- };
400
- export type UploadInputRendererProps = BaseInputRendererProps & {
401
- type: 'input-upload';
402
- maxSize?: number;
403
- accepts?: string[];
404
- value: File | null;
405
- onUpload: (file: File | null) => Promise<void>;
406
- };
407
- export type MultiUploadInputRendererProps = BaseInputRendererProps & {
408
- type: 'input-upload-multi';
409
- maxSize?: number;
410
- minItems?: number;
411
- maxItems?: number;
412
- accepts?: string[];
413
- uploadLabel?: string;
414
- value: FileWithId[];
415
- onUpload: (file: File, fileId: string) => Promise<void>;
416
- onDelete: (fileId: string) => Promise<void>;
417
- };
418
- type FileWithId = {
419
- id: string;
420
- file: File;
421
- };
422
- export {};
1
+ export type { AlertRendererProps, AlertCallToAction, AlertCallToActionLink, } from './AlertRendererProps';
2
+ export type { BooleanInputRendererProps } from './BooleanRendererProps';
3
+ export type { BoxRendererProps } from './BoxRendererProps';
4
+ export type { ButtonRendererProps } from './ButtonRendererProps';
5
+ export type { ColumnsRendererProps } from './ColumnsRendererProps';
6
+ export type { CoreContainerRendererProps } from './CoreContainerRendererProps';
7
+ export type { DateInputRendererProps } from './DateInputRendererProps';
8
+ export type { DecisionRendererProps, DecisionOption } from './DecisionRendererProps';
9
+ export type { DividerRendererProps } from './DividerRendererProps';
10
+ export type { FormRendererProps } from './FormRendererProps';
11
+ export type { FormSectionRendererProps } from './FormSectionRendererProps';
12
+ export type { HeadingRendererProps } from './HeadingRendererProps';
13
+ export type { HiddenRendererProps } from './HiddenRendererProps';
14
+ export type { ImageRendererProps } from './ImageRendererProps';
15
+ export type { InstructionsRendererProps, InstructionItem } from './InstructionsRendererProps';
16
+ export type { IntegerInputRendererProps } from './IntegerInputRendererProps';
17
+ export type { LoadingIndicatorRendererProps } from './LoadingIndicatorRendererProps';
18
+ export type { MarkdownRendererProps } from './MarkdownRendererProps';
19
+ export type { ModalRendererProps } from './ModalRendererProps';
20
+ export type { MultiSelectInputRendererProps } from './MultiSelectInputRendererProps';
21
+ export type { MultiUploadInputRendererProps } from './MultiUploadInputRendererProps';
22
+ export type { NumberInputRendererProps } from './NumberInputRendererProps';
23
+ export type { ParagraphRendererProps } from './ParagraphRendererProps';
24
+ export type { RepeatableRendererProps, RepeatableItemRendererProps, } from './RepeatableRendererProps';
25
+ export type { ReviewRendererProps, ReviewField, ReviewCallToAction } from './ReviewRendererProps';
26
+ export type { SearchRendererProps, SearchResult, SearchState, ErrorSearchState, PendingSearchState, NoResultsSearchState, ResultsSearchState, } from './SearchRendererProps';
27
+ export type { SelectInputRendererProps, SelectInputRendererOption, } from './SelectInputRendererProps';
28
+ export type { StatusListRendererProps, StatusListItem, StatusListItemCallToAction, StatusListItemStatus, } from './StatusListRendererProps';
29
+ export type { StepRendererProps, AnalyticsEventDispatcher, LoadingState, } from './StepRendererProps';
30
+ export type { TextInputRendererProps } from './TextInputRendererProps';
31
+ export type { UploadInputRendererProps } from './UploadInputRendererProps';
32
+ export type { ValidationResult } from './BaseInputRendererProps';
33
+ export type { Align, Context, Margin, Size } from './constants';
34
+ export type { Icon } from './Icon';
35
+ export type { Image } from './Image';
36
+ export type { RendererProps, Renderers, Renderer } from './RendererProps';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wise/dynamic-flow-types",
3
- "version": "2.24.0",
3
+ "version": "2.25.0",
4
4
  "description": "Dynamic Flow TypeScript Types",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -23,12 +23,12 @@
23
23
  "build"
24
24
  ],
25
25
  "devDependencies": {
26
- "@formatjs/cli": "^6.2.12",
26
+ "@formatjs/cli": "^6.3.0",
27
27
  "@types/react": "18.3.11",
28
28
  "esbuild": "0.24.0",
29
- "npm-run-all2": "6.2.3",
29
+ "npm-run-all2": "6.2.4",
30
30
  "ts-to-zod": "3.6.1",
31
- "typescript": "5.6.2"
31
+ "typescript": "5.6.3"
32
32
  },
33
33
  "dependencies": {
34
34
  "zod": "3.23.8"