@trycourier/react-designer 0.0.0-canary-20251211163746 → 0.0.0-canary-20251229151230
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 +244 -2
- package/dist/cjs/index.js +71 -56
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/styles.css +292 -161
- package/dist/components/BrandEditor/Editor/Editor.d.ts +16 -1
- package/dist/components/Providers/api/template.d.ts +28 -1
- package/dist/components/Providers/store.d.ts +6 -0
- package/dist/components/Providers/useBrandActions.d.ts +1 -1
- package/dist/components/Providers/useTemplateActions.d.ts +6 -4
- package/dist/components/TemplateEditor/Channels/Email/Email.d.ts +3 -2
- package/dist/components/TemplateEditor/Channels/Email/EmailEditor.d.ts +2 -1
- package/dist/components/TemplateEditor/Channels/Email/EmailLayout.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/Email/SideBar/SideBar.d.ts +6 -3
- package/dist/components/TemplateEditor/Channels/Inbox/Inbox.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/Inbox/InboxLayout.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/MSTeams/MSTeams.d.ts +3 -2
- package/dist/components/TemplateEditor/Channels/MSTeams/MSTeamsLayout.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/MSTeams/SideBar/SideBar.d.ts +2 -3
- package/dist/components/TemplateEditor/Channels/Push/Push.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/Push/PushLayout.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/SMS/SMS.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/SMS/SMSLayout.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/Slack/SideBar/SideBar.d.ts +2 -3
- package/dist/components/TemplateEditor/Channels/Slack/Slack.d.ts +3 -2
- package/dist/components/TemplateEditor/Channels/Slack/SlackLayout.d.ts +1 -1
- package/dist/components/TemplateEditor/Channels/useChannels.d.ts +8 -0
- package/dist/components/TemplateEditor/TemplateEditor.d.ts +16 -1
- package/dist/components/TemplateEditor/hooks/usePragmaticDnd.d.ts +3 -2
- package/dist/components/TemplateEditor/hooks/useSyncEditorItems.d.ts +2 -1
- package/dist/components/TemplateEditor/index.d.ts +2 -14
- package/dist/components/TemplateEditor/store.d.ts +131 -0
- package/dist/components/extensions/Blockquote/Blockquote.types.d.ts +2 -2
- package/dist/components/extensions/Button/Button.types.d.ts +12 -12
- package/dist/components/extensions/Column/Column.types.d.ts +6 -6
- package/dist/components/extensions/Divider/Divider.types.d.ts +1 -1
- package/dist/components/extensions/ImageBlock/ImageBlock.types.d.ts +4 -4
- package/dist/components/extensions/List/List.d.ts +15 -0
- package/dist/components/extensions/List/List.types.d.ts +9 -0
- package/dist/components/extensions/List/ListComponent.d.ts +9 -0
- package/dist/components/extensions/List/ListForm.d.ts +8 -0
- package/dist/components/extensions/List/index.d.ts +3 -0
- package/dist/components/extensions/ListItem/ListItem.d.ts +34 -0
- package/dist/components/extensions/ListItem/ListItem.types.d.ts +7 -0
- package/dist/components/extensions/ListItem/ListItemComponent.d.ts +7 -0
- package/dist/components/extensions/ListItem/index.d.ts +2 -0
- package/dist/components/extensions/TextBlock/TextBlock.types.d.ts +4 -4
- package/dist/components/extensions/Variable/Variable.d.ts +14 -1
- package/dist/components/extensions/Variable/Variable.types.d.ts +37 -0
- package/dist/components/extensions/Variable/VariableSuggestions.d.ts +7 -0
- package/dist/components/extensions/Variable/index.d.ts +1 -0
- package/dist/components/extensions/Variable/suggestion.d.ts +2 -0
- package/dist/components/extensions/extension-kit.d.ts +7 -2
- package/dist/components/extensions/index.d.ts +3 -1
- package/dist/components/hooks/index.d.ts +1 -0
- package/dist/components/hooks/useBlockConfig.d.ts +110 -0
- package/dist/components/ui/Blocks/CustomCodeBlock/index.d.ts +1 -1
- package/dist/components/ui/Blocks/ListBlock/ListBlock.d.ts +3 -0
- package/dist/components/ui/Blocks/ListBlock/index.d.ts +1 -0
- package/dist/components/ui/Blocks/index.d.ts +1 -0
- package/dist/components/ui/FormHeader/FormHeader.d.ts +1 -1
- package/dist/components/ui/VariableEditor/VariableAutocomplete.d.ts +16 -0
- package/dist/components/ui/VariableEditor/VariableChipBase.d.ts +2 -0
- package/dist/components/ui/VariableEditor/VariableEditorToolbar.d.ts +15 -0
- package/dist/components/ui/VariableEditor/VariableInput.d.ts +2 -0
- package/dist/components/ui/VariableEditor/VariableTextarea.d.ts +2 -0
- package/dist/components/ui/VariableEditor/index.d.ts +2 -0
- package/dist/esm/index.js +71 -56
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/styles.css +292 -161
- package/dist/index.d.ts +14 -0
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/styles.css +292 -161
- package/dist/types/elemental.schema.d.ts +3 -3
- package/dist/types/elemental.types.d.ts +4 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/validation.types.d.ts +53 -0
- package/package.json +1 -1
|
@@ -1,11 +1,26 @@
|
|
|
1
|
+
import type { VariableValidationConfig } from "@/types/validation.types";
|
|
1
2
|
import type { BrandEditorFormValues } from "../BrandEditor.types";
|
|
2
3
|
export interface EditorProps {
|
|
3
4
|
hidePublish?: boolean;
|
|
4
5
|
autoSaveDebounce?: number;
|
|
5
6
|
autoSave?: boolean;
|
|
6
7
|
templateEditor?: boolean;
|
|
7
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Variables available for autocomplete suggestions.
|
|
10
|
+
* When provided, typing {{ will show a dropdown with matching variables.
|
|
11
|
+
*/
|
|
8
12
|
variables?: Record<string, unknown>;
|
|
13
|
+
/**
|
|
14
|
+
* When true, disables variable autocomplete and allows users to type any variable name.
|
|
15
|
+
* When false (default), shows autocomplete dropdown with variables from the `variables` prop.
|
|
16
|
+
* @default false
|
|
17
|
+
*/
|
|
18
|
+
disableVariablesAutocomplete?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Configuration for custom variable validation.
|
|
21
|
+
* Allows restricting which variable names are allowed and defining behavior on validation failure.
|
|
22
|
+
*/
|
|
23
|
+
variableValidation?: VariableValidationConfig;
|
|
9
24
|
value?: BrandEditorFormValues;
|
|
10
25
|
}
|
|
11
26
|
export declare const Editor: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<EditorProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
@@ -4,9 +4,36 @@ export interface SaveTemplateOptions {
|
|
|
4
4
|
routing?: MessageRouting;
|
|
5
5
|
content?: ElementalContent;
|
|
6
6
|
}
|
|
7
|
-
export
|
|
7
|
+
export interface DuplicateTemplateOptions {
|
|
8
|
+
/** The ID for the new duplicated template. If not provided, uses "{currentTemplateId}-copy" */
|
|
9
|
+
targetTemplateId?: string;
|
|
10
|
+
/** Optional: Override the content to duplicate (defaults to current editor content) */
|
|
11
|
+
content?: ElementalContent;
|
|
12
|
+
/** Optional: Custom name for the new template (defaults to targetTemplateId) */
|
|
13
|
+
name?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface DuplicateTemplateResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
templateId: string;
|
|
18
|
+
version?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Saves the current template to the backend.
|
|
22
|
+
*
|
|
23
|
+
* @param options - Optional save configuration
|
|
24
|
+
* @param options.content - Content to save (defaults to current editor content)
|
|
25
|
+
* @param options.routing - Routing configuration (defaults to value from TemplateEditor's routing prop)
|
|
26
|
+
*
|
|
27
|
+
* @deprecated Passing routing as an argument is deprecated.
|
|
28
|
+
* The routing is now automatically synced from TemplateEditor's routing prop.
|
|
29
|
+
* If you need to override routing, pass it as options.routing, but this should rarely be needed.
|
|
30
|
+
*/
|
|
31
|
+
export declare const saveTemplateAtom: import("jotai").WritableAtom<null, [options?: SaveTemplateOptions | MessageRouting | undefined], Promise<any>> & {
|
|
8
32
|
init: null;
|
|
9
33
|
};
|
|
10
34
|
export declare const publishTemplateAtom: import("jotai").WritableAtom<null, [], Promise<any>> & {
|
|
11
35
|
init: null;
|
|
12
36
|
};
|
|
37
|
+
export declare const duplicateTemplateAtom: import("jotai").WritableAtom<null, [options?: DuplicateTemplateOptions | undefined], Promise<DuplicateTemplateResult | undefined>> & {
|
|
38
|
+
init: null;
|
|
39
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ElementalContent } from "@/types/elemental.types";
|
|
2
2
|
import type { TemplateError } from "@/lib/utils/errors";
|
|
3
3
|
import type { ContentTransformer } from "../TemplateEditor/store";
|
|
4
|
+
import type { DuplicateTemplateOptions, DuplicateTemplateResult } from "./api/template";
|
|
4
5
|
export type MessageRoutingMethod = "all" | "single";
|
|
5
6
|
export type MessageRoutingChannel = string | MessageRouting;
|
|
6
7
|
export interface MessageRouting {
|
|
@@ -73,6 +74,7 @@ export interface TenantData {
|
|
|
73
74
|
};
|
|
74
75
|
[key: string]: unknown;
|
|
75
76
|
}
|
|
77
|
+
export declare const DEFAULT_ROUTING: MessageRouting;
|
|
76
78
|
export declare const apiUrlAtom: import("jotai").PrimitiveAtom<string> & {
|
|
77
79
|
init: string;
|
|
78
80
|
};
|
|
@@ -85,6 +87,9 @@ export declare const tenantIdAtom: import("jotai").PrimitiveAtom<string> & {
|
|
|
85
87
|
export declare const templateIdAtom: import("jotai").PrimitiveAtom<string> & {
|
|
86
88
|
init: string;
|
|
87
89
|
};
|
|
90
|
+
export declare const routingAtom: import("jotai").PrimitiveAtom<MessageRouting> & {
|
|
91
|
+
init: MessageRouting;
|
|
92
|
+
};
|
|
88
93
|
export declare const templateDataAtom: import("jotai").PrimitiveAtom<TenantData | null> & {
|
|
89
94
|
init: TenantData | null;
|
|
90
95
|
};
|
|
@@ -109,6 +114,7 @@ export interface TemplateActions {
|
|
|
109
114
|
}) => Promise<void>;
|
|
110
115
|
saveTemplate: (options?: MessageRouting) => Promise<void>;
|
|
111
116
|
publishTemplate: () => Promise<unknown>;
|
|
117
|
+
duplicateTemplate: (options?: DuplicateTemplateOptions) => Promise<DuplicateTemplateResult | undefined>;
|
|
112
118
|
isTemplateLoading: boolean | null;
|
|
113
119
|
setIsTemplateLoading: (loading: boolean | null) => void;
|
|
114
120
|
isTemplateSaving: boolean | null;
|
|
@@ -3,7 +3,7 @@ export declare function useBrandActions(): {
|
|
|
3
3
|
getTemplate: (options?: {
|
|
4
4
|
includeBrand?: boolean;
|
|
5
5
|
} | undefined) => Promise<void>;
|
|
6
|
-
saveTemplate: (options?: import("./
|
|
6
|
+
saveTemplate: (options?: import("./api").SaveTemplateOptions | import("./store").MessageRouting | undefined) => Promise<any>;
|
|
7
7
|
saveBrand: (settings?: Record<string, unknown> | undefined) => Promise<any>;
|
|
8
8
|
publishBrand: () => Promise<any>;
|
|
9
9
|
isTemplateLoading: boolean | null;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { type ContentTransformer } from "../TemplateEditor/store";
|
|
2
2
|
import { type TemplateError } from "@/lib/utils/errors";
|
|
3
|
-
|
|
3
|
+
import { type DuplicateTemplateOptions, type DuplicateTemplateResult } from "./api";
|
|
4
|
+
export type { ContentTransformer, DuplicateTemplateOptions, DuplicateTemplateResult };
|
|
4
5
|
export declare function useTemplateActions(): {
|
|
5
6
|
getTemplate: (options?: {
|
|
6
7
|
includeBrand?: boolean;
|
|
7
8
|
} | undefined) => Promise<void>;
|
|
8
|
-
saveTemplate: (options?: import("./
|
|
9
|
+
saveTemplate: (options?: import("./api").SaveTemplateOptions | import("./store").MessageRouting | undefined) => Promise<any>;
|
|
9
10
|
publishTemplate: () => Promise<any>;
|
|
11
|
+
duplicateTemplate: (options?: DuplicateTemplateOptions | undefined) => Promise<DuplicateTemplateResult | undefined>;
|
|
10
12
|
isTemplateLoading: boolean | null;
|
|
11
13
|
setIsTemplateLoading: (args_0: boolean | ((prev: boolean | null) => boolean | null) | null) => void;
|
|
12
14
|
isTemplateSaving: boolean | null;
|
|
@@ -17,8 +19,8 @@ export declare function useTemplateActions(): {
|
|
|
17
19
|
setTemplateError: (error: string | TemplateError | null) => void;
|
|
18
20
|
templateData: import("./store").TenantData | null;
|
|
19
21
|
setTemplateData: (args_0: import("./store").TenantData | ((prev: import("./store").TenantData | null) => import("./store").TenantData | null) | null) => void;
|
|
20
|
-
templateEditorContent: import("
|
|
21
|
-
setTemplateEditorContent: (content: import("
|
|
22
|
+
templateEditorContent: import("../..").ElementalContent | null | undefined;
|
|
23
|
+
setTemplateEditorContent: (content: import("../..").ElementalContent | null | undefined) => void;
|
|
22
24
|
createCustomError: (message: string, toastProps?: import("sonner").ExternalToast) => TemplateError;
|
|
23
25
|
convertLegacyError: (error: string | TemplateError) => TemplateError;
|
|
24
26
|
/**
|
|
@@ -5,6 +5,7 @@ import type { Node } from "@tiptap/pm/model";
|
|
|
5
5
|
import type { Editor } from "@tiptap/react";
|
|
6
6
|
import type { HTMLAttributes } from "react";
|
|
7
7
|
import type { MessageRouting, TenantData } from "../../../Providers/store";
|
|
8
|
+
import { type VisibleBlockItem } from "../../store";
|
|
8
9
|
import type { TemplateEditorProps } from "../../TemplateEditor";
|
|
9
10
|
interface BrandSettingsData {
|
|
10
11
|
brandColor?: string;
|
|
@@ -19,7 +20,7 @@ interface BrandSettingsData {
|
|
|
19
20
|
mediumLink?: string;
|
|
20
21
|
xLink?: string;
|
|
21
22
|
}
|
|
22
|
-
export interface EmailProps extends Pick<TemplateEditorProps, "hidePublish" | "brandEditor" | "channels" | "variables" | "theme" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
23
|
+
export interface EmailProps extends Pick<TemplateEditorProps, "hidePublish" | "brandEditor" | "channels" | "variables" | "disableVariablesAutocomplete" | "theme" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
23
24
|
isLoading?: boolean;
|
|
24
25
|
headerRenderer?: ({ hidePublish, channels, routing, }: {
|
|
25
26
|
hidePublish?: boolean;
|
|
@@ -49,7 +50,7 @@ export interface EmailProps extends Pick<TemplateEditorProps, "hidePublish" | "b
|
|
|
49
50
|
type UniqueIdentifier = string | number;
|
|
50
51
|
interface Items {
|
|
51
52
|
Editor: UniqueIdentifier[];
|
|
52
|
-
Sidebar:
|
|
53
|
+
Sidebar: VisibleBlockItem[];
|
|
53
54
|
}
|
|
54
55
|
export declare const defaultEmailContent: ElementalNode[];
|
|
55
56
|
export declare const Email: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<EmailProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
@@ -5,8 +5,9 @@ export interface EmailEditorProps {
|
|
|
5
5
|
readOnly?: boolean;
|
|
6
6
|
subject?: string | null;
|
|
7
7
|
variables?: Record<string, unknown>;
|
|
8
|
+
disableVariablesAutocomplete?: boolean;
|
|
8
9
|
onDestroy?: () => void;
|
|
9
10
|
onUpdate?: (editor: Editor) => void;
|
|
10
11
|
}
|
|
11
|
-
declare const EmailEditor: ({ value, readOnly, onDestroy, onUpdate, subject: propSubject, }: EmailEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
declare const EmailEditor: ({ value, readOnly, onDestroy, onUpdate, subject: propSubject, variables, disableVariablesAutocomplete, }: EmailEditorProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export default EmailEditor;
|
|
@@ -6,4 +6,4 @@ export declare const EmailEditorMain: import("react").ForwardRefExoticComponent<
|
|
|
6
6
|
} & import("react").RefAttributes<HTMLDivElement>>;
|
|
7
7
|
export interface EmailLayoutProps extends EmailProps {
|
|
8
8
|
}
|
|
9
|
-
export declare const EmailLayout: ({ variables, theme, isLoading, hidePublish, channels, brandEditor, routing, colorScheme, ...rest }: EmailLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare const EmailLayout: ({ variables, disableVariablesAutocomplete, theme, isLoading, hidePublish, channels, brandEditor, routing, colorScheme, ...rest }: EmailLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { type VisibleBlockItem } from "../../../store";
|
|
1
2
|
import type { Editor } from "@tiptap/react";
|
|
2
|
-
type UniqueIdentifier = string | number;
|
|
3
3
|
export interface SideBarProps {
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Optional items to display. If not provided, uses visibleBlocksAtom.
|
|
6
|
+
* @deprecated Use useBlockConfig().setVisibleBlocks() instead
|
|
7
|
+
*/
|
|
8
|
+
items?: VisibleBlockItem[];
|
|
5
9
|
brandEditor?: boolean;
|
|
6
10
|
label?: string;
|
|
7
11
|
editor?: Editor;
|
|
8
12
|
}
|
|
9
13
|
export declare const SideBar: ({ items, brandEditor, label, editor }: SideBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
-
export {};
|
|
@@ -21,7 +21,7 @@ export interface InboxRenderProps {
|
|
|
21
21
|
editor: Editor;
|
|
22
22
|
}) => void;
|
|
23
23
|
}
|
|
24
|
-
export interface InboxProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
24
|
+
export interface InboxProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "disableVariablesAutocomplete" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
25
25
|
readOnly?: boolean;
|
|
26
26
|
headerRenderer?: ({ hidePublish, channels, routing, }: {
|
|
27
27
|
hidePublish?: boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { InboxProps } from "./Inbox";
|
|
2
2
|
export interface InboxLayoutProps extends InboxProps {
|
|
3
3
|
}
|
|
4
|
-
export declare const InboxLayout: ({ hidePublish, theme, variables, channels, routing, colorScheme, ...rest }: InboxLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare const InboxLayout: ({ hidePublish, theme, variables, disableVariablesAutocomplete, channels, routing, colorScheme, ...rest }: InboxLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { MessageRouting } from "@/components/Providers/store";
|
|
2
|
+
import { type VisibleBlockItem } from "@/components/TemplateEditor/store";
|
|
2
3
|
import type { TextMenuConfig } from "@/components/ui/TextMenu/config";
|
|
3
4
|
import type { TiptapDoc } from "@/lib/utils";
|
|
4
5
|
import type { ChannelType } from "@/store";
|
|
@@ -21,13 +22,13 @@ export interface MSTeamsRenderProps {
|
|
|
21
22
|
editor: Editor;
|
|
22
23
|
}) => void;
|
|
23
24
|
items: {
|
|
24
|
-
Sidebar:
|
|
25
|
+
Sidebar: VisibleBlockItem[];
|
|
25
26
|
Editor: UniqueIdentifier[];
|
|
26
27
|
};
|
|
27
28
|
selectedNode: Node | null;
|
|
28
29
|
msteamsEditor: Editor | null;
|
|
29
30
|
}
|
|
30
|
-
export interface MSTeamsProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
31
|
+
export interface MSTeamsProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "disableVariablesAutocomplete" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
31
32
|
readOnly?: boolean;
|
|
32
33
|
headerRenderer?: ({ hidePublish, channels, routing, }: {
|
|
33
34
|
hidePublish?: boolean;
|
|
@@ -4,4 +4,4 @@ export interface MSTeamsLayoutProps extends MSTeamsProps {
|
|
|
4
4
|
}
|
|
5
5
|
export declare const MSTeamsEditorContainer: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
|
|
6
6
|
export declare const MSTeamsEditorMain: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
|
|
7
|
-
export declare const MSTeamsLayout: ({ hidePublish, theme, variables, channels, routing, colorScheme, }: MSTeamsLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare const MSTeamsLayout: ({ hidePublish, theme, variables, disableVariablesAutocomplete, channels, routing, colorScheme, }: MSTeamsLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Editor } from "@tiptap/react";
|
|
2
|
-
type
|
|
2
|
+
import { type VisibleBlockItem } from "@/components/TemplateEditor/store";
|
|
3
3
|
export interface MSTeamsSideBarProps {
|
|
4
|
-
items:
|
|
4
|
+
items: VisibleBlockItem[];
|
|
5
5
|
label?: string;
|
|
6
6
|
editor?: Editor;
|
|
7
7
|
}
|
|
8
8
|
export declare const MSTeamsSideBar: ({ items, label, editor }: MSTeamsSideBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
-
export {};
|
|
@@ -18,7 +18,7 @@ export interface PushRenderProps {
|
|
|
18
18
|
editor: Editor;
|
|
19
19
|
}) => void;
|
|
20
20
|
}
|
|
21
|
-
export interface PushProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
21
|
+
export interface PushProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "disableVariablesAutocomplete" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
22
22
|
readOnly?: boolean;
|
|
23
23
|
headerRenderer?: ({ hidePublish, channels, routing, }: {
|
|
24
24
|
hidePublish?: boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { PushProps } from "./Push";
|
|
2
2
|
export interface PushLayoutProps extends PushProps {
|
|
3
3
|
}
|
|
4
|
-
export declare const PushLayout: ({ hidePublish, theme, variables, channels, routing, ...rest }: PushLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare const PushLayout: ({ hidePublish, theme, variables, disableVariablesAutocomplete, channels, routing, ...rest }: PushLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -19,7 +19,7 @@ export interface SMSRenderProps {
|
|
|
19
19
|
editor: Editor;
|
|
20
20
|
}) => void;
|
|
21
21
|
}
|
|
22
|
-
export interface SMSProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
22
|
+
export interface SMSProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "disableVariablesAutocomplete" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
23
23
|
readOnly?: boolean;
|
|
24
24
|
headerRenderer?: ({ hidePublish, channels, routing, }: {
|
|
25
25
|
hidePublish?: boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { SMSProps } from "./SMS";
|
|
2
2
|
export interface SMSLayoutProps extends SMSProps {
|
|
3
3
|
}
|
|
4
|
-
export declare const SMSLayout: ({ hidePublish, theme, variables, channels, routing, colorScheme, ...rest }: SMSLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare const SMSLayout: ({ hidePublish, theme, variables, disableVariablesAutocomplete, channels, routing, colorScheme, ...rest }: SMSLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Editor } from "@tiptap/react";
|
|
2
|
-
type
|
|
2
|
+
import { type VisibleBlockItem } from "@/components/TemplateEditor/store";
|
|
3
3
|
export interface SlackSideBarProps {
|
|
4
|
-
items:
|
|
4
|
+
items: VisibleBlockItem[];
|
|
5
5
|
label?: string;
|
|
6
6
|
editor?: Editor;
|
|
7
7
|
}
|
|
8
8
|
export declare const SlackSideBar: ({ items, label, editor }: SlackSideBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
-
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { MessageRouting } from "@/components/Providers/store";
|
|
2
|
+
import { type VisibleBlockItem } from "@/components/TemplateEditor/store";
|
|
2
3
|
import type { TextMenuConfig } from "@/components/ui/TextMenu/config";
|
|
3
4
|
import type { TiptapDoc } from "@/lib/utils";
|
|
4
5
|
import type { ChannelType } from "@/store";
|
|
@@ -21,13 +22,13 @@ export interface SlackRenderProps {
|
|
|
21
22
|
editor: Editor;
|
|
22
23
|
}) => void;
|
|
23
24
|
items: {
|
|
24
|
-
Sidebar:
|
|
25
|
+
Sidebar: VisibleBlockItem[];
|
|
25
26
|
Editor: UniqueIdentifier[];
|
|
26
27
|
};
|
|
27
28
|
selectedNode: Node | null;
|
|
28
29
|
slackEditor: Editor | null;
|
|
29
30
|
}
|
|
30
|
-
export interface SlackProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
31
|
+
export interface SlackProps extends Pick<TemplateEditorProps, "hidePublish" | "theme" | "variables" | "disableVariablesAutocomplete" | "channels" | "routing" | "value" | "colorScheme">, Omit<HTMLAttributes<HTMLDivElement>, "value" | "onChange"> {
|
|
31
32
|
readOnly?: boolean;
|
|
32
33
|
headerRenderer?: ({ hidePublish, channels, routing, }: {
|
|
33
34
|
hidePublish?: boolean;
|
|
@@ -4,4 +4,4 @@ export interface SlackLayoutProps extends SlackProps {
|
|
|
4
4
|
}
|
|
5
5
|
export declare const SlackEditorContainer: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
|
|
6
6
|
export declare const SlackEditorMain: import("react").ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & import("react").RefAttributes<HTMLDivElement>>;
|
|
7
|
-
export declare const SlackLayout: ({ hidePublish, theme, variables, channels, routing, colorScheme, }: SlackLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare const SlackLayout: ({ hidePublish, theme, variables, disableVariablesAutocomplete, channels, routing, colorScheme, }: SlackLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { type Channel, type ChannelType } from "@/store";
|
|
2
|
+
import type { ElementalNode } from "@/types/elemental.types";
|
|
2
3
|
import type { TemplateEditorProps } from "../TemplateEditor";
|
|
4
|
+
export declare const getChannelDefaults: (type: ChannelType) => {
|
|
5
|
+
elements: ElementalNode[];
|
|
6
|
+
raw?: {
|
|
7
|
+
title?: string;
|
|
8
|
+
text?: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
3
11
|
export declare const useChannels: ({ channels, routing, }: {
|
|
4
12
|
/** @deprecated Use routing.channels instead. Will be removed in a future version. */
|
|
5
13
|
channels?: ChannelType[];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ElementalContent } from "@/types/elemental.types";
|
|
2
|
+
import type { VariableValidationConfig } from "@/types/validation.types";
|
|
2
3
|
import type { HTMLAttributes } from "react";
|
|
3
4
|
import type { ChannelType } from "../../store";
|
|
4
5
|
import type { BrandEditorProps } from "../BrandEditor";
|
|
@@ -8,8 +9,22 @@ export interface TemplateEditorProps extends Omit<HTMLAttributes<HTMLDivElement>
|
|
|
8
9
|
theme?: Theme | string;
|
|
9
10
|
value?: ElementalContent | null;
|
|
10
11
|
onChange?: (value: ElementalContent) => void;
|
|
11
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Variables available for autocomplete suggestions.
|
|
14
|
+
* When provided, typing {{ will show a dropdown with matching variables.
|
|
15
|
+
*/
|
|
12
16
|
variables?: Record<string, unknown>;
|
|
17
|
+
/**
|
|
18
|
+
* When true, disables variable autocomplete and allows users to type any variable name.
|
|
19
|
+
* When false (default), shows autocomplete dropdown with variables from the `variables` prop.
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
disableVariablesAutocomplete?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Configuration for custom variable validation.
|
|
25
|
+
* Allows restricting which variable names are allowed and defining behavior on validation failure.
|
|
26
|
+
*/
|
|
27
|
+
variableValidation?: VariableValidationConfig;
|
|
13
28
|
hidePublish?: boolean;
|
|
14
29
|
autoSave?: boolean;
|
|
15
30
|
autoSaveDebounce?: number;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { Editor } from "@tiptap/react";
|
|
2
|
+
import { type VisibleBlockItem } from "../store";
|
|
2
3
|
type UniqueIdentifier = string | number;
|
|
3
4
|
interface UsePragmaticDndProps {
|
|
4
5
|
items: {
|
|
5
|
-
Sidebar:
|
|
6
|
+
Sidebar: VisibleBlockItem[];
|
|
6
7
|
Editor: UniqueIdentifier[];
|
|
7
8
|
};
|
|
8
9
|
setItems: React.Dispatch<React.SetStateAction<{
|
|
9
|
-
Sidebar:
|
|
10
|
+
Sidebar: VisibleBlockItem[];
|
|
10
11
|
Editor: UniqueIdentifier[];
|
|
11
12
|
}>>;
|
|
12
13
|
editor?: Editor | null;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Editor } from "@tiptap/react";
|
|
2
|
+
import { type VisibleBlockItem } from "../store";
|
|
2
3
|
type UniqueIdentifier = string | number;
|
|
3
4
|
interface UseSyncEditorItemsProps {
|
|
4
5
|
setItems: React.Dispatch<React.SetStateAction<{
|
|
5
|
-
Sidebar:
|
|
6
|
+
Sidebar: VisibleBlockItem[];
|
|
6
7
|
Editor: UniqueIdentifier[];
|
|
7
8
|
}>>;
|
|
8
9
|
rafId: React.MutableRefObject<number | null>;
|
|
@@ -1,30 +1,18 @@
|
|
|
1
1
|
export { BrandFooter } from "@/components/BrandEditor/Editor/BrandFooter";
|
|
2
|
-
export {
|
|
3
|
-
export { TextMenu } from "@/components/ui/TextMenu";
|
|
4
|
-
export { cn, convertElementalToTiptap, convertTiptapToElemental } from "@/lib/utils";
|
|
5
|
-
export { VariableInput, VariableTextarea } from "@/components/ui/VariableEditor";
|
|
6
|
-
export { getFlattenedVariables } from "@/components/utils/getFlattenedVariables";
|
|
7
|
-
export { useChannels } from "./Channels";
|
|
2
|
+
export { useChannels, getChannelDefaults } from "./Channels";
|
|
8
3
|
export { default as EmailEditor } from "./Channels/Email/EmailEditor";
|
|
9
4
|
export * from "./TemplateEditor";
|
|
10
5
|
export { SideBar as EmailSideBar, SideBarItemDetails as EmailSideBarItemDetails, } from "./Channels/Email/SideBar";
|
|
11
6
|
export { SideBar as InboxSideBar } from "./Channels/Inbox/SideBar";
|
|
12
7
|
export { MSTeamsSideBar } from "./Channels/MSTeams/SideBar";
|
|
13
8
|
export { SlackSideBar, SlackSideBarItemDetails } from "./Channels/Slack/SideBar";
|
|
9
|
+
export { EmailEditorContainer, EmailEditorMain, type EmailEditorProps, type InboxEditorProps, type MSTeamsEditorProps, type PushEditorProps, type SlackEditorProps, type SMSEditorProps, } from "./Channels";
|
|
14
10
|
export declare const EmailChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").EmailProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
15
11
|
export declare const SMSChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").SMSProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
16
12
|
export declare const PushChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").PushProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
17
13
|
export declare const InboxChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").InboxProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
18
14
|
export declare const MSTeamsChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").MSTeamsProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
19
15
|
export declare const SlackChannel: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<import("./Channels").SlackProps & import("react").RefAttributes<HTMLDivElement>>>;
|
|
20
|
-
export { EmailEditorContainer, EmailEditorMain, type EmailEditorProps, type InboxEditorProps, type MSTeamsEditorProps, type PushEditorProps, type SlackEditorProps, type SMSEditorProps, } from "./Channels";
|
|
21
|
-
export { CHANNELS } from "@/channels";
|
|
22
|
-
export type { ChannelType } from "@/store";
|
|
23
|
-
export type { ElementalContent } from "@/types";
|
|
24
16
|
export { ChannelRootContainer, EditorSidebar } from "./Layout";
|
|
25
17
|
export { InboxEditor, MSTeamsEditor, PushEditor, SlackEditor, SMSEditor } from "./Channels";
|
|
26
|
-
export { useAutoSave } from "@/hooks/useAutoSave";
|
|
27
18
|
export { useDebouncedFlush } from "./hooks/useDebouncedFlush";
|
|
28
|
-
export { Status as TemplateStatus } from "@/components/ui/Status";
|
|
29
|
-
export { MonacoCodeEditor } from "@/components/extensions/CustomCode/MonacoCodeEditor";
|
|
30
|
-
export { ToggleGroup } from "@/components/ui-kit";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ElementalContent } from "@/types/elemental.types";
|
|
2
|
+
import type { VariableValidationConfig } from "@/types/validation.types";
|
|
2
3
|
import type { Editor } from "@tiptap/react";
|
|
3
4
|
export declare const subjectAtom: import("jotai").PrimitiveAtom<string | null> & {
|
|
4
5
|
init: string | null;
|
|
@@ -29,6 +30,15 @@ export declare const isSidebarExpandedAtom: import("jotai").PrimitiveAtom<boolea
|
|
|
29
30
|
export declare const variableValuesAtom: import("jotai").PrimitiveAtom<Record<string, string>> & {
|
|
30
31
|
init: Record<string, string>;
|
|
31
32
|
};
|
|
33
|
+
export declare const availableVariablesAtom: import("jotai").PrimitiveAtom<Record<string, unknown>> & {
|
|
34
|
+
init: Record<string, unknown>;
|
|
35
|
+
};
|
|
36
|
+
export declare const disableVariablesAutocompleteAtom: import("jotai").PrimitiveAtom<boolean> & {
|
|
37
|
+
init: boolean;
|
|
38
|
+
};
|
|
39
|
+
export declare const variableValidationAtom: import("jotai").PrimitiveAtom<VariableValidationConfig | undefined> & {
|
|
40
|
+
init: VariableValidationConfig | undefined;
|
|
41
|
+
};
|
|
32
42
|
export declare const isDraggingAtom: import("jotai").PrimitiveAtom<boolean> & {
|
|
33
43
|
init: boolean;
|
|
34
44
|
};
|
|
@@ -45,3 +55,124 @@ export declare const flushFunctionsAtom: import("jotai").WritableAtom<Map<string
|
|
|
45
55
|
fn?: FlushFunction;
|
|
46
56
|
}], void>;
|
|
47
57
|
export declare const flushAllPendingUpdates: (flushFunctions: Map<string, FlushFunction>) => void;
|
|
58
|
+
/**
|
|
59
|
+
* Available block element types that can be used in the sidebar
|
|
60
|
+
*/
|
|
61
|
+
export type BlockElementType = "heading" | "text" | "image" | "spacer" | "divider" | "button" | "customCode" | "column" | "blockquote" | "list";
|
|
62
|
+
/**
|
|
63
|
+
* Attributes that can be set as defaults or in presets for blocks.
|
|
64
|
+
* Types match the actual TipTap node attribute types for each extension.
|
|
65
|
+
*/
|
|
66
|
+
export interface BlockAttributes {
|
|
67
|
+
/** Background color (string, e.g., "#ffffff" or "transparent") */
|
|
68
|
+
backgroundColor?: string;
|
|
69
|
+
/** Border color */
|
|
70
|
+
borderColor?: string;
|
|
71
|
+
/** Border width in pixels */
|
|
72
|
+
borderWidth?: number;
|
|
73
|
+
/** Border radius in pixels */
|
|
74
|
+
borderRadius?: number;
|
|
75
|
+
/** Vertical padding in pixels */
|
|
76
|
+
paddingVertical?: number;
|
|
77
|
+
/** Horizontal padding in pixels */
|
|
78
|
+
paddingHorizontal?: number;
|
|
79
|
+
/** Text alignment */
|
|
80
|
+
textAlign?: "left" | "center" | "right" | "justify";
|
|
81
|
+
/** Button label text */
|
|
82
|
+
label?: string;
|
|
83
|
+
/** Button link URL */
|
|
84
|
+
link?: string;
|
|
85
|
+
/** Button alignment */
|
|
86
|
+
alignment?: "left" | "center" | "right";
|
|
87
|
+
/** Button padding in pixels */
|
|
88
|
+
padding?: number;
|
|
89
|
+
/** Font weight */
|
|
90
|
+
fontWeight?: "normal" | "bold";
|
|
91
|
+
/** Font style */
|
|
92
|
+
fontStyle?: "normal" | "italic";
|
|
93
|
+
/** Underline text */
|
|
94
|
+
isUnderline?: boolean;
|
|
95
|
+
/** Strikethrough text */
|
|
96
|
+
isStrike?: boolean;
|
|
97
|
+
/** @deprecated Text color - legacy property */
|
|
98
|
+
textColor?: string;
|
|
99
|
+
/** Divider color */
|
|
100
|
+
color?: string;
|
|
101
|
+
/** Divider line thickness in pixels */
|
|
102
|
+
size?: number;
|
|
103
|
+
/** Divider corner radius */
|
|
104
|
+
radius?: number;
|
|
105
|
+
/** Divider variant type */
|
|
106
|
+
variant?: "divider" | "spacer";
|
|
107
|
+
/** Image source path/URL */
|
|
108
|
+
sourcePath?: string;
|
|
109
|
+
/** Image alt text */
|
|
110
|
+
alt?: string;
|
|
111
|
+
/** Image width as ratio (0-1, where 1 = 100%) */
|
|
112
|
+
width?: number;
|
|
113
|
+
/** HTML code content */
|
|
114
|
+
code?: string;
|
|
115
|
+
/** Number of columns (1-4) */
|
|
116
|
+
columnsCount?: number;
|
|
117
|
+
/** Left border width for blockquote */
|
|
118
|
+
borderLeftWidth?: number;
|
|
119
|
+
[key: string]: unknown;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A block preset is a pre-configured variant of an existing block type.
|
|
123
|
+
* For example, a "Portal Button" preset is a button with specific href and label.
|
|
124
|
+
*/
|
|
125
|
+
export interface BlockPreset {
|
|
126
|
+
/** The base block type this preset is built on */
|
|
127
|
+
type: BlockElementType;
|
|
128
|
+
/** Unique identifier for this preset */
|
|
129
|
+
key: string;
|
|
130
|
+
/** Display label in the sidebar */
|
|
131
|
+
label: string;
|
|
132
|
+
/** Optional custom icon (React node) */
|
|
133
|
+
icon?: React.ReactNode;
|
|
134
|
+
/** Pre-configured attributes for this preset */
|
|
135
|
+
attributes: BlockAttributes;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* A reference to a preset in the visible blocks list
|
|
139
|
+
*/
|
|
140
|
+
export interface PresetReference {
|
|
141
|
+
/** The base block type */
|
|
142
|
+
type: BlockElementType;
|
|
143
|
+
/** The preset key */
|
|
144
|
+
preset: string;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* A visible block item can be either:
|
|
148
|
+
* - A built-in block type string (e.g., "text", "button")
|
|
149
|
+
* - A preset reference (e.g., { type: "button", preset: "portal" })
|
|
150
|
+
*/
|
|
151
|
+
export type VisibleBlockItem = BlockElementType | PresetReference;
|
|
152
|
+
/**
|
|
153
|
+
* Type guard to check if a VisibleBlockItem is a PresetReference
|
|
154
|
+
*/
|
|
155
|
+
export declare const isPresetReference: (item: VisibleBlockItem) => item is PresetReference;
|
|
156
|
+
/**
|
|
157
|
+
* Default block elements available in the sidebar
|
|
158
|
+
*/
|
|
159
|
+
export declare const DEFAULT_VISIBLE_BLOCKS: VisibleBlockItem[];
|
|
160
|
+
/**
|
|
161
|
+
* Atom to store visible blocks in the sidebar (and their order)
|
|
162
|
+
*/
|
|
163
|
+
export declare const visibleBlocksAtom: import("jotai").PrimitiveAtom<VisibleBlockItem[]> & {
|
|
164
|
+
init: VisibleBlockItem[];
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Atom to store default attributes for each block type
|
|
168
|
+
* When a new block is created, these defaults are applied
|
|
169
|
+
*/
|
|
170
|
+
export declare const blockDefaultsAtom: import("jotai").PrimitiveAtom<Partial<Record<BlockElementType, BlockAttributes>>> & {
|
|
171
|
+
init: Partial<Record<BlockElementType, BlockAttributes>>;
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Atom to store registered block presets
|
|
175
|
+
*/
|
|
176
|
+
export declare const blockPresetsAtom: import("jotai").PrimitiveAtom<BlockPreset[]> & {
|
|
177
|
+
init: BlockPreset[];
|
|
178
|
+
};
|
|
@@ -8,16 +8,16 @@ export declare const blockquoteSchema: z.ZodObject<{
|
|
|
8
8
|
id: z.ZodOptional<z.ZodString>;
|
|
9
9
|
}, "strip", z.ZodTypeAny, {
|
|
10
10
|
backgroundColor: string;
|
|
11
|
+
borderColor: string;
|
|
11
12
|
paddingVertical: number;
|
|
12
13
|
paddingHorizontal: number;
|
|
13
|
-
borderColor: string;
|
|
14
14
|
borderLeftWidth: number;
|
|
15
15
|
id?: string | undefined;
|
|
16
16
|
}, {
|
|
17
17
|
backgroundColor: string;
|
|
18
|
+
borderColor: string;
|
|
18
19
|
paddingVertical: number;
|
|
19
20
|
paddingHorizontal: number;
|
|
20
|
-
borderColor: string;
|
|
21
21
|
borderLeftWidth: number;
|
|
22
22
|
id?: string | undefined;
|
|
23
23
|
}>;
|