slackblock 1.0.0 → 1.1.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.
- package/CHANGELOG.md +17 -0
- package/README.md +1 -1
- package/dist/block.d.mts +2 -3
- package/dist/block.d.ts +2 -3
- package/dist/index.cjs +42 -50
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.mjs +42 -50
- package/dist/index.mjs.map +1 -1
- package/dist/types.d-0WEt-h92.d.mts +124 -0
- package/dist/types.d-0WEt-h92.d.ts +124 -0
- package/package.json +24 -15
- package/dist/types.d-uPVIHLKj.d.mts +0 -57
- package/dist/types.d-uPVIHLKj.d.ts +0 -57
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
### 1.1.0
|
|
4
|
+
- Drop `@slack/web-api` runtime dependency; types replicated locally
|
|
5
|
+
- Lower Node engine requirement to `>=20` (from `>=24`)
|
|
6
|
+
- Add CI matrix for Node 20, 22, and 24
|
|
7
|
+
- Break circular transformer import via mutable registry pattern
|
|
8
|
+
- Extract shared `normalizeChildren` utility
|
|
9
|
+
- Add `"sideEffects": false` for bundler tree-shaking
|
|
10
|
+
- Add end-to-end pipeline tests covering all major block/input/rich-text types
|
|
11
|
+
- Fix publish hygiene: delete `.npmignore`, rename `prepublish` → `prepublishOnly`
|
|
12
|
+
|
|
13
|
+
### 1.0.1
|
|
14
|
+
- Upgrade `@slack/web-api` to 7.14.1 (resolves CVE-2026-25639 via axios upgrade)
|
|
15
|
+
- Bump `rollup` to 4.59.0 (resolves CVE-2026-27606)
|
|
16
|
+
- Bump `minimatch` to 10.2.3+ (resolves CVE-2026-27904, CVE-2026-27903, CVE-2026-26996)
|
|
17
|
+
- Resolve CVE-2025-69873 via ajv 6.14.0 (already latest in range)
|
|
18
|
+
- Resolve CVE-2026-25547 via minimatch 10.2.3+ (replaces @isaacs/brace-expansion)
|
|
19
|
+
|
|
3
20
|
### 1.0.0
|
|
4
21
|
- Modernize tooling (Node 24, pnpm, tsup, Vitest, XO, Husky + lint-staged)
|
|
5
22
|
- Stabilize parser/transformer routing and align output types to serialized JSON
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# SlackBlock
|
|
2
2
|
JSX-based Slack message renderer
|
|
3
3
|
|
|
4
|
-
[](https://github.com/kolyaventuri/block/actions/workflows/ci.yml)
|
|
5
5
|
|
|
6
6
|
## What
|
|
7
7
|
A message builder for Slack bots, using JSX with a React-compatible API. Generally follows the [Block Kit](https://api.slack.com/block-kit) naming and options.
|
package/dist/block.d.mts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { C as Child, I as InteractiveBlockElement, a as InputBlockElement, B as BlockElement } from './types.d-
|
|
3
|
-
import '@slack/
|
|
4
|
-
import '@slack/web-api/dist/types/request/chat';
|
|
2
|
+
import { C as Child, I as InteractiveBlockElement, a as InputBlockElement, B as BlockElement } from './types.d-0WEt-h92.mjs';
|
|
3
|
+
import '@slack/types';
|
|
5
4
|
|
|
6
5
|
type Properties$2 = {
|
|
7
6
|
children: Child;
|
package/dist/block.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { C as Child, I as InteractiveBlockElement, a as InputBlockElement, B as BlockElement } from './types.d-
|
|
3
|
-
import '@slack/
|
|
4
|
-
import '@slack/web-api/dist/types/request/chat';
|
|
2
|
+
import { C as Child, I as InteractiveBlockElement, a as InputBlockElement, B as BlockElement } from './types.d-0WEt-h92.js';
|
|
3
|
+
import '@slack/types';
|
|
5
4
|
|
|
6
5
|
type Properties$2 = {
|
|
7
6
|
children: Child;
|
package/dist/index.cjs
CHANGED
|
@@ -33,26 +33,6 @@ __export(src_exports, {
|
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(src_exports);
|
|
35
35
|
|
|
36
|
-
// src/utils/get-type.ts
|
|
37
|
-
var getType = (element) => {
|
|
38
|
-
if (typeof element === "string") {
|
|
39
|
-
return "string";
|
|
40
|
-
}
|
|
41
|
-
if (element === null || element === void 0 || typeof element === "boolean") {
|
|
42
|
-
return "null";
|
|
43
|
-
}
|
|
44
|
-
if (Array.isArray(element)) {
|
|
45
|
-
throw new TypeError("Cannot type arrays");
|
|
46
|
-
}
|
|
47
|
-
const { type } = element;
|
|
48
|
-
if (typeof type === "string") {
|
|
49
|
-
return type;
|
|
50
|
-
}
|
|
51
|
-
const { slackType, displayName, name } = type;
|
|
52
|
-
return slackType || displayName || name || type;
|
|
53
|
-
};
|
|
54
|
-
var get_type_default = getType;
|
|
55
|
-
|
|
56
36
|
// src/utils/validation.ts
|
|
57
37
|
var warn = (message) => {
|
|
58
38
|
console.warn(message);
|
|
@@ -104,6 +84,39 @@ var text_default = transformText;
|
|
|
104
84
|
// src/transformers/block/confirmation.tsx
|
|
105
85
|
var import_react2 = __toESM(require("react"));
|
|
106
86
|
|
|
87
|
+
// src/utils/get-type.ts
|
|
88
|
+
var getType = (element) => {
|
|
89
|
+
if (typeof element === "string") {
|
|
90
|
+
return "string";
|
|
91
|
+
}
|
|
92
|
+
if (element === null || element === void 0 || typeof element === "boolean") {
|
|
93
|
+
return "null";
|
|
94
|
+
}
|
|
95
|
+
if (Array.isArray(element)) {
|
|
96
|
+
throw new TypeError("Cannot type arrays");
|
|
97
|
+
}
|
|
98
|
+
const { type } = element;
|
|
99
|
+
if (typeof type === "string") {
|
|
100
|
+
return type;
|
|
101
|
+
}
|
|
102
|
+
const { slackType, displayName, name } = type;
|
|
103
|
+
return slackType || displayName || name || type;
|
|
104
|
+
};
|
|
105
|
+
var get_type_default = getType;
|
|
106
|
+
|
|
107
|
+
// src/transformers/registry.ts
|
|
108
|
+
var Transformers = {};
|
|
109
|
+
var registry_default = Transformers;
|
|
110
|
+
|
|
111
|
+
// src/transformers/transform.ts
|
|
112
|
+
var transform = (element) => {
|
|
113
|
+
const type = get_type_default(element);
|
|
114
|
+
if (!registry_default[type]) {
|
|
115
|
+
throw new Error(`No transformer exists for type '${type}'`);
|
|
116
|
+
}
|
|
117
|
+
return registry_default[type](element);
|
|
118
|
+
};
|
|
119
|
+
|
|
107
120
|
// src/components/block/text.tsx
|
|
108
121
|
var import_react = __toESM(require("react"));
|
|
109
122
|
var Text = class extends import_react.default.Component {
|
|
@@ -167,7 +180,7 @@ var transformImage = (child) => {
|
|
|
167
180
|
};
|
|
168
181
|
var image_default = transformImage;
|
|
169
182
|
|
|
170
|
-
// src/
|
|
183
|
+
// src/utils/normalize-children.ts
|
|
171
184
|
var normalizeChildren = (children) => {
|
|
172
185
|
const result = [];
|
|
173
186
|
const stack = Array.isArray(children) ? [...children] : [children];
|
|
@@ -184,9 +197,12 @@ var normalizeChildren = (children) => {
|
|
|
184
197
|
}
|
|
185
198
|
return result;
|
|
186
199
|
};
|
|
200
|
+
var normalize_children_default = normalizeChildren;
|
|
201
|
+
|
|
202
|
+
// src/transformers/layout/container.ts
|
|
187
203
|
var transformContainer = (child) => {
|
|
188
204
|
const { children } = child.props;
|
|
189
|
-
const elements =
|
|
205
|
+
const elements = normalize_children_default(children);
|
|
190
206
|
return elements.map((element) => transform(element));
|
|
191
207
|
};
|
|
192
208
|
var container_default = transformContainer;
|
|
@@ -1043,7 +1059,7 @@ var transformRichTextUserGroup = (child) => {
|
|
|
1043
1059
|
var user_group_default = transformRichTextUserGroup;
|
|
1044
1060
|
|
|
1045
1061
|
// src/transformers/index.ts
|
|
1046
|
-
|
|
1062
|
+
Object.assign(registry_default, {
|
|
1047
1063
|
Container: container_default,
|
|
1048
1064
|
Section: section_default,
|
|
1049
1065
|
Actions: actions_default,
|
|
@@ -1081,33 +1097,9 @@ var Transformers = {
|
|
|
1081
1097
|
RichTextDate: date_default,
|
|
1082
1098
|
RichTextBroadcast: broadcast_default,
|
|
1083
1099
|
RichTextUserGroup: user_group_default
|
|
1084
|
-
};
|
|
1085
|
-
var transformers_default = Transformers;
|
|
1086
|
-
var transform = (element) => {
|
|
1087
|
-
const type = get_type_default(element);
|
|
1088
|
-
if (!Transformers[type]) {
|
|
1089
|
-
throw new Error(`No transformer exists for type '${type}'`);
|
|
1090
|
-
}
|
|
1091
|
-
return Transformers[type](element);
|
|
1092
|
-
};
|
|
1100
|
+
});
|
|
1093
1101
|
|
|
1094
1102
|
// src/parser/index.ts
|
|
1095
|
-
var normalizeChildren2 = (children) => {
|
|
1096
|
-
const result = [];
|
|
1097
|
-
const stack = Array.isArray(children) ? [...children] : [children];
|
|
1098
|
-
while (stack.length > 0) {
|
|
1099
|
-
const child = stack.shift();
|
|
1100
|
-
if (child === null || child === void 0 || typeof child === "boolean") {
|
|
1101
|
-
continue;
|
|
1102
|
-
}
|
|
1103
|
-
if (Array.isArray(child)) {
|
|
1104
|
-
stack.unshift(...child);
|
|
1105
|
-
continue;
|
|
1106
|
-
}
|
|
1107
|
-
result.push(child);
|
|
1108
|
-
}
|
|
1109
|
-
return result;
|
|
1110
|
-
};
|
|
1111
1103
|
var appendTransformed = (value, blocks) => {
|
|
1112
1104
|
if (value === null || value === void 0 || typeof value === "boolean") {
|
|
1113
1105
|
return;
|
|
@@ -1124,11 +1116,11 @@ var parseChildren = (children) => {
|
|
|
1124
1116
|
if (typeof children === "string") {
|
|
1125
1117
|
return { text: children };
|
|
1126
1118
|
}
|
|
1127
|
-
const normalizedChildren =
|
|
1119
|
+
const normalizedChildren = normalize_children_default(children);
|
|
1128
1120
|
const transformedBlocks = [];
|
|
1129
1121
|
for (const child of normalizedChildren) {
|
|
1130
1122
|
const type = get_type_default(child);
|
|
1131
|
-
const transformer =
|
|
1123
|
+
const transformer = registry_default[type];
|
|
1132
1124
|
if (transformer) {
|
|
1133
1125
|
appendTransformed(transformer(child), transformedBlocks);
|
|
1134
1126
|
} else if (type !== "null") {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/get-type.ts","../src/utils/validation.ts","../src/transformers/block/text.ts","../src/transformers/block/confirmation.tsx","../src/components/block/text.tsx","../src/transformers/block/button.tsx","../src/transformers/block/image.ts","../src/transformers/layout/container.ts","../src/transformers/layout/section.ts","../src/transformers/layout/actions.ts","../src/transformers/layout/context.ts","../src/transformers/layout/divider.ts","../src/transformers/layout/file.ts","../src/transformers/layout/header.tsx","../src/transformers/layout/image.tsx","../src/transformers/layout/input.tsx","../src/transformers/rich-text/utils.ts","../src/transformers/layout/rich-text.ts","../src/transformers/layout/video.tsx","../src/transformers/input/text.tsx","../src/transformers/input/date-time-picker.ts","../src/transformers/input/date-picker.tsx","../src/transformers/input/checkboxes.ts","../src/transformers/input/select.tsx","../src/components/input/select.tsx","../src/transformers/input/option.tsx","../src/transformers/input/option-group.tsx","../src/transformers/input/overflow.ts","../src/transformers/input/radio-group.ts","../src/transformers/input/time-picker.tsx","../src/transformers/rich-text/section.ts","../src/transformers/rich-text/list.ts","../src/transformers/rich-text/quote.ts","../src/transformers/rich-text/preformatted.ts","../src/transformers/rich-text/text.ts","../src/transformers/rich-text/link.ts","../src/transformers/rich-text/user.ts","../src/transformers/rich-text/channel.ts","../src/transformers/rich-text/emoji.ts","../src/transformers/rich-text/date.ts","../src/transformers/rich-text/broadcast.ts","../src/transformers/rich-text/user-group.ts","../src/transformers/index.ts","../src/parser/index.ts","../src/renderer/index.ts"],"sourcesContent":["\nexport {default} from './renderer';\n","import {type Child} from '../constants/types';\n\nconst getType = (element: Child): string => {\n if (typeof element === 'string') {\n return 'string';\n }\n\n if (element === null || element === undefined || typeof element === 'boolean') {\n return 'null';\n }\n\n if (Array.isArray(element)) {\n throw new TypeError('Cannot type arrays');\n }\n\n const {type} = element;\n\n if (typeof type === 'string') {\n return type;\n }\n\n const {slackType, displayName, name} = type as {\n slackType?: string;\n displayName?: string;\n name?: string;\n };\n\n return slackType || displayName || name || (type as string);\n};\n\nexport default getType;\n","const warn = (message: string): void => {\n console.warn(message);\n};\n\nexport const warnIfTooLong = (name: string, value: string | undefined, max: number): void => {\n if (!value) {\n return;\n }\n\n if (value.length > max) {\n warn(`${name} exceeds ${max} characters.`);\n }\n};\n\nexport const warnIfTooMany = (name: string, values: unknown[] | undefined, max: number): void => {\n if (!values) {\n return;\n }\n\n if (values.length > max) {\n warn(`${name} exceeds ${max} items.`);\n }\n};\n","import {type Element} from '../../constants/types';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type TextType = {\n type: 'plain_text' | 'mrkdwn';\n text: string;\n emoji?: boolean;\n verbatim?: boolean;\n};\n\nconst transformText = (element: Element): TextType => {\n const {\n props: {\n plainText,\n children,\n emoji,\n verbatim,\n },\n } = element;\n\n const res: TextType = {\n type: plainText ? 'plain_text' : 'mrkdwn',\n text: children,\n };\n\n if (typeof children === 'string') {\n warnIfTooLong('Text', children, 3000);\n }\n\n if (emoji) {\n res.emoji = true;\n }\n\n if (verbatim) {\n res.verbatim = true;\n }\n\n return res;\n};\n\nexport default transformText;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {transform} from '..';\nimport {type ConfirmationProps} from '../../components/block/confirmation';\nimport Text from '../../components/block/text';\n\nimport {type TextType} from './text';\n\nexport type ConfirmationType = {\n title: TextType;\n text: TextType;\n confirm: TextType;\n deny: TextType;\n};\n\nconst transformConfirmation = (child: Element): ConfirmationType => {\n const {title, confirm, deny, children}: ConfirmationProps = child.props;\n\n const res: ConfirmationType = {\n title: transform(<Text plainText>{title}</Text>) as TextType,\n text: transform(children) as TextType,\n confirm: transform(<Text plainText>{confirm}</Text>) as TextType,\n deny: transform(<Text plainText>{deny}</Text>) as TextType,\n };\n\n return res;\n};\n\nexport default transformConfirmation;\n","import React from 'react';\n\nexport type Props = {\n children: string;\n plainText?: boolean;\n emoji?: boolean;\n verbatim?: boolean;\n};\n\nexport default class Text extends React.Component<Props> {\n static slackType = 'Text';\n}\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type ButtonProps} from '../../components/block/button';\nimport {transform} from '..';\nimport Text from '../../components/block/text';\nimport Confirmation from '../../components/block/confirmation';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type ConfirmationType} from './confirmation';\nimport {type TextType} from './text';\n\nexport type ButtonType = {\n type: 'button';\n text: TextType;\n action_id: string;\n url?: string;\n value?: string;\n style?: 'primary' | 'danger';\n confirm?: ConfirmationType;\n accessibility_label?: string;\n};\n\nconst transformButton = (child: Element): ButtonType => {\n const {actionId, children, url, value, style, confirm, accessibilityLabel}: ButtonProps = child.props;\n\n warnIfTooLong('Button action_id', actionId, 255);\n if (typeof children === 'string') {\n warnIfTooLong('Button text', children, 75);\n }\n\n warnIfTooLong('Button value', value, 2000);\n\n const res: ButtonType = {\n type: 'button',\n text: transform(<Text plainText>{children}</Text>) as TextType,\n action_id: actionId,\n };\n\n if (url) {\n res.url = url;\n }\n\n if (value) {\n res.value = value;\n }\n\n if (style) {\n res.style = style;\n }\n\n if (confirm) {\n res.confirm = transform(confirm) as ConfirmationType;\n }\n\n if (accessibilityLabel) {\n res.accessibility_label = accessibilityLabel;\n }\n\n return res;\n};\n\nexport default transformButton;\n","import {type Element} from '../../constants/types';\nimport {type Props as ImageProperties} from '../../components/block/image';\n\nexport type ImageType = {\n type: 'image';\n image_url: string;\n alt_text: string;\n};\n\nconst transformImage = (child: Element): ImageType => {\n const {url, alt}: ImageProperties = child.props;\n\n return {\n type: 'image',\n image_url: url,\n alt_text: alt,\n };\n};\n\nexport default transformImage;\n","import {type Props as ContainerProperties} from '../../components/layout/container';\nimport {type Element, type Child} from '../../constants/types';\nimport {transform} from '..';\n\ntype ContainerType = Child[];\n\nconst normalizeChildren = (children: Child): Child[] => {\n const result: Child[] = [];\n const stack = Array.isArray(children) ? [...children] : [children];\n\n while (stack.length > 0) {\n const child = stack.shift();\n\n if (child === null || child === undefined || typeof child === 'boolean') {\n continue;\n }\n\n if (Array.isArray(child)) {\n stack.unshift(...child);\n continue;\n }\n\n result.push(child);\n }\n\n return result;\n};\n\nconst transformContainer = (child: Element): ContainerType => {\n const {children}: ContainerProperties = child.props;\n const elements = normalizeChildren(children);\n\n return (elements as Element[]).map(element => transform(element)) as Child[];\n};\n\nexport default transformContainer;\n","import {type Element, type SerializedBlockElement} from '../../constants/types';\nimport {type TextType as Text} from '../block/text';\nimport {transform} from '..';\nimport {warnIfTooLong, warnIfTooMany} from '../../utils/validation';\n\nexport type SectionType = {\n type: 'section';\n text: Text;\n block_id?: string;\n fields?: Text[];\n accessory?: SerializedBlockElement;\n};\n\nconst transformSection = (element: Element): SectionType => {\n const {\n props: {\n text,\n blockId,\n children,\n accessory,\n },\n } = element;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: SectionType = {\n type: 'section',\n text: transform(text as Element) as Text,\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n if (accessory) {\n res.accessory = transform(accessory) as SerializedBlockElement;\n }\n\n if (children) {\n res.fields = [];\n let fields = children;\n if (!Array.isArray(fields)) {\n fields = [fields];\n }\n\n for (const field of fields) {\n if (field) {\n const t = transform(field as Element);\n res.fields.push(t as Text);\n }\n }\n\n warnIfTooMany('Section fields', res.fields, 10);\n }\n\n return res;\n};\n\nexport default transformSection;\n","import {type Element, type SerializedInteractiveBlockElement, type InteractiveBlockElement} from '../../constants/types';\nimport {type Props as ActionProperties} from '../../components/layout/actions';\nimport {transform} from '..';\nimport {warnIfTooLong, warnIfTooMany} from '../../utils/validation';\n\nexport type ActionType = {\n type: 'actions';\n elements: SerializedInteractiveBlockElement[];\n block_id?: string;\n};\n\nconst transformActions = (child: Element): ActionType => {\n const {children, blockId}: ActionProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements] as InteractiveBlockElement[];\n }\n\n const res: ActionType = {\n type: 'actions',\n elements: elements.map(element => transform(element as Element) as SerializedInteractiveBlockElement),\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n warnIfTooMany('Actions elements', res.elements, 25);\n\n return res;\n};\n\nexport default transformActions;\n","import {type Element} from '../../constants/types';\nimport {type Props as ContextProperties, type ImageOrText as ImageOrTextElement} from '../../components/layout/context';\nimport {type TextType} from '../block/text';\nimport {type ImageType} from '../block/image';\nimport {transform} from '..';\nimport {warnIfTooLong, warnIfTooMany} from '../../utils/validation';\n\ntype ImageOrText = ImageType | TextType;\ntype ImageOrTextElementSet = ImageOrTextElement | ImageOrTextElement[];\n\nexport type ContextType = {\n type: 'context';\n elements: ImageOrText | ImageOrText[];\n block_id?: string;\n};\n\nconst transformContext = (child: Element): ContextType => {\n const {children, blockId}: ContextProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n let elements = children as ImageOrTextElementSet;\n if (!Array.isArray(elements)) {\n elements = [elements] as ImageOrTextElement[];\n }\n\n const res: ContextType = {\n type: 'context',\n elements: elements.map(element => transform(element as Element) as ImageOrText),\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n warnIfTooMany('Context elements', res.elements as ImageOrText[], 10);\n\n return res;\n};\n\nexport default transformContext;\n","import {type Element} from '../../constants/types';\nimport {type Props as DividerProperties} from '../../components/layout/divider';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type DividerType = {\n type: 'divider';\n block_id?: string;\n};\n\nconst transformDivider = (child: Element): DividerType => {\n const {blockId}: DividerProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: DividerType = {type: 'divider'};\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformDivider;\n","import {type Element} from '../../constants/types';\nimport {type Props as FileProperties} from '../../components/layout/file';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type FileType = {\n type: 'file';\n source: 'remote';\n external_id: string;\n block_id?: string;\n};\n\nconst transformFile = (child: Element): FileType => {\n const {externalId, blockId}: FileProperties = child.props;\n warnIfTooLong('block_id', blockId, 255);\n const res: FileType = {\n type: 'file',\n source: 'remote',\n external_id: externalId,\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformFile;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type Props as HeaderProperties} from '../../components/layout/header';\nimport {type TextType} from '../block/text';\nimport {transform} from '..';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type HeaderType = {\n type: 'header';\n text: TextType;\n block_id?: string;\n};\n\nconst transformHeader = (child: Element): HeaderType => {\n const {text, blockId, emoji}: HeaderProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: HeaderType = {\n type: 'header',\n text: transform(<Text plainText emoji={emoji}>{text}</Text>) as TextType,\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformHeader;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type Props as ImageProperties} from '../../components/layout/image';\nimport {transform} from '..';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type ImageType = {\n type: 'image';\n image_url: string;\n alt_text: string;\n title?: TextType;\n block_id?: string;\n};\n\nconst transformImageLayout = (child: Element): ImageType => {\n const {url, alt, title, blockId}: ImageProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: ImageType = {\n type: 'image',\n image_url: url,\n alt_text: alt,\n };\n\n if (title) {\n res.title = transform(<Text plainText>{title}</Text>) as TextType;\n }\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformImageLayout;\n","import React from 'react';\n\nimport {type Element, type SerializedInputBlockElement} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type Props as InputProperties} from '../../components/layout/input';\nimport {transform} from '..';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type InputType = {\n type: 'input';\n label: TextType;\n element: SerializedInputBlockElement;\n hint?: TextType;\n optional?: boolean;\n block_id?: string;\n};\n\nconst transformInput = (child: Element): InputType => {\n const {label, element, hint, optional, blockId}: InputProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: InputType = {\n type: 'input',\n label: transform(<Text plainText>{label}</Text>) as TextType,\n element: transform(element as Element) as SerializedInputBlockElement,\n };\n\n if (hint) {\n res.hint = transform(<Text plainText>{hint}</Text>) as TextType;\n }\n\n if (optional) {\n res.optional = true;\n }\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformInput;\n","import {type Element} from '../../constants/types';\nimport {transform} from '..';\n\ntype RichTextChild = Element | string;\n\nexport const normalizeRichTextChildren = (children: unknown): RichTextChild[] => {\n const result: RichTextChild[] = [];\n const stack = Array.isArray(children) ? [...children] : [children];\n\n while (stack.length > 0) {\n const child = stack.shift();\n\n if (child === null || child === undefined || typeof child === 'boolean') {\n continue;\n }\n\n if (Array.isArray(child)) {\n stack.unshift(...child);\n continue;\n }\n\n result.push(child as RichTextChild);\n }\n\n return result;\n};\n\nexport const toInlineElements = (children: unknown): Array<Record<string, unknown>> => {\n const items = normalizeRichTextChildren(children);\n\n return items.map(item => {\n if (typeof item === 'string') {\n return {type: 'text', text: item};\n }\n\n return transform(item) as Record<string, unknown>;\n });\n};\n\nexport const toBlockElements = (children: unknown): Array<Record<string, unknown>> => {\n const items = normalizeRichTextChildren(children);\n\n return items.map(item => {\n if (typeof item === 'string') {\n return {\n type: 'rich_text_section',\n elements: [{type: 'text', text: item}],\n };\n }\n\n return transform(item) as Record<string, unknown>;\n });\n};\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextProperties} from '../../components/layout/rich-text';\nimport {toBlockElements} from '../rich-text/utils';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type RichTextType = {\n type: 'rich_text';\n elements: Array<Record<string, unknown>>;\n block_id?: string;\n};\n\nconst transformRichText = (child: Element): RichTextType => {\n const {elements, children, blockId}: RichTextProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: RichTextType = {\n type: 'rich_text',\n elements: elements ?? toBlockElements(children),\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformRichText;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type Props as VideoProperties} from '../../components/layout/video';\nimport {type TextType} from '../block/text';\nimport {transform} from '..';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type VideoType = {\n type: 'video';\n title: TextType;\n video_url: string;\n thumbnail_url: string;\n alt_text: string;\n title_url?: string;\n description?: TextType;\n author_name?: string;\n provider_name?: string;\n provider_icon_url?: string;\n block_id?: string;\n};\n\nconst transformVideo = (child: Element): VideoType => {\n const {\n title,\n videoUrl,\n thumbnailUrl,\n altText,\n titleUrl,\n description,\n authorName,\n providerName,\n providerIconUrl,\n blockId,\n }: VideoProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: VideoType = {\n type: 'video',\n title: transform(<Text plainText>{title}</Text>) as TextType,\n video_url: videoUrl,\n thumbnail_url: thumbnailUrl,\n alt_text: altText,\n };\n\n if (titleUrl) {\n res.title_url = titleUrl;\n }\n\n if (description) {\n res.description = transform(<Text plainText>{description}</Text>) as TextType;\n }\n\n if (authorName) {\n res.author_name = authorName;\n }\n\n if (providerName) {\n res.provider_name = providerName;\n }\n\n if (providerIconUrl) {\n res.provider_icon_url = providerIconUrl;\n }\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformVideo;\n","import React from 'react';\n\nimport Text from '../../components/block/text';\nimport {type Props as TextInputProperties} from '../../components/input/text';\nimport {type TextType as TextProperties} from '../block/text';\nimport {type Element} from '../../constants/types';\nimport {transform} from '..';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type TextType = {\n type: 'plain_text_input';\n action_id: string;\n placeholder?: TextProperties;\n initial_value?: string;\n multiline?: boolean;\n min_length?: number;\n max_length?: number;\n focus_on_load?: boolean;\n dispatch_action_config?: {\n trigger_actions_on: Array<'on_enter_pressed' | 'on_character_entered'>;\n };\n};\n\nconst transformTextInput = (child: Element): TextType => {\n const {\n actionId,\n placeholder,\n initial,\n multiline,\n minLength,\n maxLength,\n focusOnLoad,\n dispatchActionConfig,\n }: TextInputProperties = child.props;\n\n warnIfTooLong('TextInput action_id', actionId, 255);\n if (placeholder) {\n warnIfTooLong('TextInput placeholder', placeholder, 150);\n }\n\n const res: TextType = {\n type: 'plain_text_input',\n action_id: actionId,\n };\n\n if (placeholder) {\n res.placeholder = transform(<Text plainText>{placeholder}</Text>) as TextProperties;\n }\n\n if (initial) {\n res.initial_value = initial;\n }\n\n if (multiline) {\n res.multiline = true;\n }\n\n if (minLength) {\n res.min_length = minLength;\n }\n\n if (maxLength) {\n res.max_length = maxLength;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n if (dispatchActionConfig && dispatchActionConfig.triggerActionsOn.length > 0) {\n res.dispatch_action_config = {\n trigger_actions_on: dispatchActionConfig.triggerActionsOn,\n };\n }\n\n return res;\n};\n\nexport default transformTextInput;\n","import {type Element} from '../../constants/types';\nimport {type Props as DateTimePickerProperties} from '../../components/input/date-time-picker';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '..';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type DateTimePickerType = {\n type: 'datetimepicker';\n action_id: string;\n initial_date_time?: number;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst transformDateTimePicker = (child: Element): DateTimePickerType => {\n const {actionId, initialDateTime, confirm, focusOnLoad}: DateTimePickerProperties = child.props;\n\n warnIfTooLong('DateTimePicker action_id', actionId, 255);\n\n const res: DateTimePickerType = {\n type: 'datetimepicker',\n action_id: actionId,\n };\n\n if (initialDateTime !== undefined) {\n if (!Number.isInteger(initialDateTime)) {\n throw new TypeError('DateTime must be a unix timestamp in seconds.');\n }\n\n res.initial_date_time = initialDateTime;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformDateTimePicker;\n","import React from 'react';\n\nimport {type Props as DatePickerProperties} from '../../components/input/date-picker';\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '..';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type DatePickerType = {\n type: 'datepicker';\n action_id: string;\n placeholder?: TextType;\n initial_date?: string;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst isValidDateString = (value: string): boolean => {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) {\n return false;\n }\n\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n\n if (month < 1 || month > 12) {\n return false;\n }\n\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year\n && date.getUTCMonth() === month - 1\n && date.getUTCDate() === day;\n};\n\nconst transformDatePicker = (child: Element): DatePickerType => {\n const {actionId, placeholder, initialDate, confirm, focusOnLoad}: DatePickerProperties = child.props;\n\n warnIfTooLong('DatePicker action_id', actionId, 255);\n if (placeholder) {\n warnIfTooLong('DatePicker placeholder', placeholder, 150);\n }\n\n const res: DatePickerType = {\n type: 'datepicker',\n action_id: actionId,\n };\n\n if (placeholder) {\n res.placeholder = transform(<Text plainText>{placeholder}</Text>) as TextType;\n }\n\n if (initialDate) {\n if (!isValidDateString(initialDate)) {\n throw new Error('Date must be valid and in format YYYY-MM-DD.');\n }\n\n res.initial_date = initialDate;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformDatePicker;\n","import {type Element} from '../../constants/types';\nimport {type Props as CheckboxesProperties} from '../../components/input/checkboxes';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '..';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type CheckboxesType = {\n type: 'checkboxes';\n action_id: string;\n options: OptionType[];\n initial_options?: OptionType[];\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst transformCheckboxes = (child: Element): CheckboxesType => {\n const {actionId, children, initialOptions, confirm, focusOnLoad}: CheckboxesProperties = child.props;\n\n warnIfTooLong('Checkboxes action_id', actionId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n const res: CheckboxesType = {\n type: 'checkboxes',\n action_id: actionId,\n options: elements.map(element => transform(element as Element)) as OptionType[],\n };\n\n if (initialOptions && initialOptions.length > 0) {\n res.initial_options = initialOptions.map(option => transform(option as Element)) as OptionType[];\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformCheckboxes;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {type Props as SelectProperties, selectTypes} from '../../components/input/select';\nimport type Option from '../../components/input/option';\nimport Text from '../../components/block/text';\nimport {transform} from '..';\nimport getType from '../../utils/get-type';\nimport type OptionGroup from '../../components/input/option-group';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionGroupType} from './option-group';\nimport {type OptionType} from './option';\n\ntype ValidSelectType =\n 'static_select' |\n 'multi_static_select' |\n 'external_select' |\n 'multi_external_select' |\n 'users_select' |\n 'multi_users_select' |\n 'conversations_select' |\n 'multi_conversations_select' |\n 'channels_select' |\n 'multi_channels_select';\n\ntype SelectionType = NonNullable<SelectProperties['type']>;\n\nexport type SelectType = {\n type: ValidSelectType;\n placeholder: TextType;\n action_id: string;\n options?: OptionType[];\n option_groups?: OptionGroupType[];\n initial_option?: OptionType;\n initial_options?: OptionType[];\n confirm?: ConfirmationType;\n max_selected_items?: number;\n min_query_length?: number;\n focus_on_load?: boolean;\n initial_user?: string;\n initial_users?: string[];\n initial_conversation?: string;\n initial_conversations?: string[];\n initial_channel?: string;\n initial_channels?: string[];\n default_to_current_conversation?: boolean;\n response_url_enabled?: boolean;\n filter?: {\n include?: Array<'im' | 'mpim' | 'private' | 'public'>;\n exclude_external_shared_channels?: boolean;\n exclude_bot_users?: boolean;\n };\n};\n\nconst OPTION = 'Option';\nconst OPTION_GROUP = 'OptionGroup';\n\nconst types = {\n [selectTypes.STATIC]: 'static_select',\n [selectTypes.EXTERNAL]: 'external_select',\n [selectTypes.USER]: 'users_select',\n [selectTypes.CONVERSATION]: 'conversations_select',\n [selectTypes.CHANNEL]: 'channels_select',\n};\nconst MULTI_PREFIX = 'multi_';\n\nconst normalizeElements = (elements?: SelectProperties['children']): React.ReactElement[] => {\n if (!elements) {\n return [];\n }\n\n return Array.isArray(elements) ? elements : [elements];\n};\n\nconst assignStaticOptions = (elements: React.ReactElement[], result: SelectType): void => {\n const elementType = getType(elements[0] as Element);\n if (elements.some(element => getType(element as Element) !== elementType)) {\n if (elementType === OPTION && elements.some(element => getType(element as Element) !== OPTION_GROUP)) {\n throw new TypeError('You cannot mix OptionGroup types with Option types in a Select block.');\n } else if (elementType === OPTION_GROUP && elements.some(element => getType(element as Element) !== OPTION)) {\n throw new TypeError('You cannot mix OptionGroup types with Option types in a Select block.');\n }\n\n throw new TypeError('Only allowed types are Option OR OptionGroup');\n }\n\n if (elementType === OPTION) {\n const options = elements as Array<React.ReactElement<Option>>;\n result.options = options.map(element => transform(element as Element)) as OptionType[];\n } else if (elementType === OPTION_GROUP) {\n const optionGroups = elements as Array<React.ReactElement<OptionGroup>>;\n result.option_groups = optionGroups.map(element => transform(element as Element)) as OptionGroupType[];\n }\n};\n\nconst applyInitialSelections = (\n type: SelectionType,\n isMulti: boolean,\n result: SelectType,\n initialValues: {\n initialOptions?: Array<React.ReactElement<Option>>;\n initialUsers?: string[];\n initialConversations?: string[];\n initialChannels?: string[];\n },\n): void => {\n const {initialOptions, initialUsers, initialConversations, initialChannels} = initialValues;\n\n switch (type) {\n case selectTypes.USER: {\n if (initialUsers && initialUsers.length > 0) {\n if (isMulti) {\n result.initial_users = initialUsers;\n } else {\n result.initial_user = initialUsers[0];\n }\n }\n\n break;\n }\n\n case selectTypes.CONVERSATION: {\n if (initialConversations && initialConversations.length > 0) {\n if (isMulti) {\n result.initial_conversations = initialConversations;\n } else {\n result.initial_conversation = initialConversations[0];\n }\n }\n\n break;\n }\n\n case selectTypes.CHANNEL: {\n if (initialChannels && initialChannels.length > 0) {\n if (isMulti) {\n result.initial_channels = initialChannels;\n } else {\n result.initial_channel = initialChannels[0];\n }\n }\n\n break;\n }\n\n case selectTypes.STATIC:\n case selectTypes.EXTERNAL: {\n if (initialOptions && initialOptions.length > 0) {\n const transformedOptions = initialOptions.map(element => transform(element as Element)) as OptionType[];\n\n if (isMulti) {\n result.initial_options = transformedOptions;\n } else {\n result.initial_option = transformedOptions[0];\n }\n }\n\n break;\n }\n }\n};\n\nconst transformSelect = (child: Element): SelectType => {\n const {\n placeholder,\n actionId,\n multi,\n children,\n initialOptions,\n confirm,\n maxSelectedItems,\n type: typeProperty,\n initialUsers,\n initialConversations,\n initialChannels,\n minQueryLength,\n focusOnLoad,\n defaultToCurrentConversation,\n responseUrlEnabled,\n filter,\n }: SelectProperties = child.props;\n\n const type: SelectionType = typeProperty ?? selectTypes.STATIC;\n const typeString = `${multi ? MULTI_PREFIX : ''}${types[type]}` as ValidSelectType;\n\n warnIfTooLong('Select action_id', actionId, 255);\n warnIfTooLong('Select placeholder', placeholder, 150);\n\n const result: SelectType = {\n type: typeString,\n placeholder: transform(<Text plainText>{placeholder}</Text>) as TextType,\n action_id: actionId,\n };\n\n const elements = normalizeElements(children);\n\n if (type === selectTypes.STATIC) {\n assignStaticOptions(elements, result);\n }\n\n if (confirm) {\n result.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n applyInitialSelections(type, Boolean(multi), result, {\n initialOptions,\n initialUsers,\n initialConversations,\n initialChannels,\n });\n\n if (maxSelectedItems) {\n result.max_selected_items = maxSelectedItems;\n }\n\n if (focusOnLoad !== undefined) {\n result.focus_on_load = focusOnLoad;\n }\n\n if (type === selectTypes.EXTERNAL && minQueryLength !== undefined) {\n result.min_query_length = minQueryLength;\n }\n\n if (type === selectTypes.CONVERSATION) {\n if (defaultToCurrentConversation !== undefined) {\n result.default_to_current_conversation = defaultToCurrentConversation;\n }\n\n if (responseUrlEnabled !== undefined) {\n result.response_url_enabled = responseUrlEnabled;\n }\n\n if (filter) {\n const filterValue: SelectType['filter'] = {};\n\n if (filter.include && filter.include.length > 0) {\n filterValue.include = filter.include;\n }\n\n if (filter.excludeExternalSharedChannels !== undefined) {\n filterValue.exclude_external_shared_channels = filter.excludeExternalSharedChannels;\n }\n\n if (filter.excludeBotUsers !== undefined) {\n filterValue.exclude_bot_users = filter.excludeBotUsers;\n }\n\n if (Object.keys(filterValue).length > 0) {\n result.filter = filterValue;\n }\n }\n }\n\n return result;\n};\n\nexport default transformSelect;\n","import React from 'react';\n\nimport type Confirmation from '../block/confirmation';\nimport {type SingleOrArray} from '../../utils/type-helpers';\n\nimport type Option from './option';\nimport type OptionGroup from './option-group';\n\nexport const selectTypes = {\n STATIC: 'static',\n EXTERNAL: 'external',\n USER: 'user',\n CONVERSATION: 'conversation',\n CHANNEL: 'channel',\n} as const;\n\ntype SelectType = typeof selectTypes[keyof typeof selectTypes];\n\ntype ConversationFilter = {\n include?: Array<'im' | 'mpim' | 'private' | 'public'>;\n excludeExternalSharedChannels?: boolean;\n excludeBotUsers?: boolean;\n};\n\nexport type Props = {\n placeholder: string;\n actionId: string;\n type?: SelectType;\n multi?: boolean;\n children?: SingleOrArray<React.ReactElement<Option>> | SingleOrArray<React.ReactElement<OptionGroup>>;\n initialOptions?: Array<React.ReactElement<Option>>;\n confirm?: React.ReactElement<Confirmation>;\n maxSelectedItems?: number;\n minQueryLength?: number;\n focusOnLoad?: boolean;\n initialUsers?: string[];\n initialConversations?: string[];\n initialChannels?: string[];\n defaultToCurrentConversation?: boolean;\n responseUrlEnabled?: boolean;\n filter?: ConversationFilter;\n};\n\nexport default class Select extends React.Component<Props> {\n static slackType = 'Select';\n}\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport Text from '../../components/block/text';\nimport {type Props as OptionProperties} from '../../components/input/option';\nimport {transform} from '..';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type OptionType = {\n text: TextType;\n value: string;\n description?: TextType;\n url?: string;\n};\n\nconst transformOption = (child: Element): OptionType => {\n const {children: text, value, url, description}: OptionProperties = child.props;\n\n warnIfTooLong('Option text', text, 75);\n warnIfTooLong('Option value', value, 75);\n warnIfTooLong('Option description', description, 75);\n\n const res: OptionType = {\n text: transform(<Text plainText>{text}</Text>) as TextType,\n value,\n };\n\n if (description) {\n res.description = transform(<Text plainText>{description}</Text>) as TextType;\n }\n\n if (url) {\n res.url = url;\n }\n\n return res;\n};\n\nexport default transformOption;\n","import React from 'react';\n\nimport Text from '../../components/block/text';\nimport {type Props as OptionGroupProperties} from '../../components/input/option-group';\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {transform} from '..';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type OptionGroupType = {\n label: TextType;\n options: OptionType[];\n};\n\nconst transformOptionGroup = (child: Element): OptionGroupType => {\n const {label, children}: OptionGroupProperties = child.props;\n\n warnIfTooLong('OptionGroup label', label, 75);\n\n let options = children;\n if (!Array.isArray(options)) {\n options = [options];\n }\n\n return {\n label: transform(<Text plainText>{label}</Text>) as TextType,\n options: options.map(option => transform(option as Element)) as OptionType[],\n };\n};\n\nexport default transformOptionGroup;\n","import {type Element} from '../../constants/types';\nimport {type Props as OverflowProperties} from '../../components/input/overflow';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '..';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type OverflowType = {\n type: 'overflow';\n action_id: string;\n options: OptionType[];\n confirm?: ConfirmationType;\n};\n\nconst transformOverflow = (child: Element): OverflowType => {\n const {actionId, children, confirm}: OverflowProperties = child.props;\n\n warnIfTooLong('Overflow action_id', actionId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n const res: OverflowType = {\n type: 'overflow',\n action_id: actionId,\n options: elements.map(element => transform(element as Element)) as OptionType[],\n };\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n return res;\n};\n\nexport default transformOverflow;\n","import {type Element} from '../../constants/types';\nimport {type Props as RadioGroupProperties} from '../../components/input/radio-group';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '..';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type RadioGroupType = {\n type: 'radio_buttons';\n action_id: string;\n options: OptionType[];\n initial_option?: OptionType;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst transformRadioGroup = (child: Element): RadioGroupType => {\n const {actionId, children, initialOption, confirm, focusOnLoad}: RadioGroupProperties = child.props;\n\n warnIfTooLong('RadioGroup action_id', actionId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n const res: RadioGroupType = {\n type: 'radio_buttons',\n action_id: actionId,\n options: elements.map(element => transform(element as Element)) as OptionType[],\n };\n\n if (initialOption) {\n res.initial_option = transform(initialOption as Element) as OptionType;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformRadioGroup;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {type Props as TimePickerProperties} from '../../components/input/time-picker';\nimport {transform} from '..';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type TimePickerType = {\n type: 'timepicker';\n action_id: string;\n placeholder?: TextType;\n initial_time?: string;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst isValidTimeString = (value: string): boolean => {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value);\n if (!match) {\n return false;\n }\n\n const hours = Number(match[1]);\n const minutes = Number(match[2]);\n\n return hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59;\n};\n\nconst transformTimePicker = (child: Element): TimePickerType => {\n const {actionId, placeholder, initialTime, confirm, focusOnLoad}: TimePickerProperties = child.props;\n\n warnIfTooLong('TimePicker action_id', actionId, 255);\n if (placeholder) {\n warnIfTooLong('TimePicker placeholder', placeholder, 150);\n }\n\n const res: TimePickerType = {\n type: 'timepicker',\n action_id: actionId,\n };\n\n if (placeholder) {\n res.placeholder = transform(<Text plainText>{placeholder}</Text>) as TextType;\n }\n\n if (initialTime) {\n if (!isValidTimeString(initialTime)) {\n throw new Error('Time must be valid and in format HH:MM.');\n }\n\n res.initial_time = initialTime;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformTimePicker;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextSectionProperties} from '../../components/rich-text/section';\n\nimport {toInlineElements} from './utils';\n\nexport type RichTextSectionType = {\n type: 'rich_text_section';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextSection = (child: Element): RichTextSectionType => {\n const {children}: RichTextSectionProperties = child.props;\n\n return {\n type: 'rich_text_section',\n elements: toInlineElements(children),\n };\n};\n\nexport default transformRichTextSection;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextListProperties} from '../../components/rich-text/list';\nimport {type RichTextListStyle} from '../../components/rich-text/types';\n\nimport {toBlockElements} from './utils';\n\nexport type RichTextListType = {\n type: 'rich_text_list';\n style: RichTextListStyle;\n elements: Array<Record<string, unknown>>;\n indent?: number;\n border?: number;\n};\n\nconst transformRichTextList = (child: Element): RichTextListType => {\n const {style, children, indent, border}: RichTextListProperties = child.props;\n\n const res: RichTextListType = {\n type: 'rich_text_list',\n style,\n elements: toBlockElements(children),\n };\n\n if (indent !== undefined) {\n res.indent = indent;\n }\n\n if (border !== undefined) {\n res.border = border;\n }\n\n return res;\n};\n\nexport default transformRichTextList;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextQuoteProperties} from '../../components/rich-text/quote';\n\nimport {toInlineElements} from './utils';\n\nexport type RichTextQuoteType = {\n type: 'rich_text_quote';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextQuote = (child: Element): RichTextQuoteType => {\n const {children}: RichTextQuoteProperties = child.props;\n\n return {\n type: 'rich_text_quote',\n elements: toInlineElements(children),\n };\n};\n\nexport default transformRichTextQuote;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextPreformattedProperties} from '../../components/rich-text/preformatted';\n\nimport {toInlineElements} from './utils';\n\nexport type RichTextPreformattedType = {\n type: 'rich_text_preformatted';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextPreformatted = (child: Element): RichTextPreformattedType => {\n const {children}: RichTextPreformattedProperties = child.props;\n\n return {\n type: 'rich_text_preformatted',\n elements: toInlineElements(children),\n };\n};\n\nexport default transformRichTextPreformatted;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextTextProperties} from '../../components/rich-text/text';\nimport {type RichTextStyle} from '../../components/rich-text/types';\n\nexport type RichTextTextType = {\n type: 'text';\n text: string;\n style?: RichTextStyle;\n};\n\nconst transformRichTextText = (child: Element): RichTextTextType => {\n const {children, style}: RichTextTextProperties = child.props;\n\n const res: RichTextTextType = {\n type: 'text',\n text: children,\n };\n\n if (style) {\n res.style = style;\n }\n\n return res;\n};\n\nexport default transformRichTextText;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextLinkProperties} from '../../components/rich-text/link';\nimport {type RichTextStyle} from '../../components/rich-text/types';\n\nexport type RichTextLinkType = {\n type: 'link';\n url: string;\n text?: string;\n style?: RichTextStyle;\n};\n\nconst transformRichTextLink = (child: Element): RichTextLinkType => {\n const {url, children, style}: RichTextLinkProperties = child.props;\n\n const res: RichTextLinkType = {\n type: 'link',\n url,\n };\n\n if (children) {\n res.text = children;\n }\n\n if (style) {\n res.style = style;\n }\n\n return res;\n};\n\nexport default transformRichTextLink;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextUserProperties} from '../../components/rich-text/user';\n\nexport type RichTextUserType = {\n type: 'user';\n user_id: string;\n};\n\nconst transformRichTextUser = (child: Element): RichTextUserType => {\n const {userId}: RichTextUserProperties = child.props;\n\n return {\n type: 'user',\n user_id: userId,\n };\n};\n\nexport default transformRichTextUser;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextChannelProperties} from '../../components/rich-text/channel';\n\nexport type RichTextChannelType = {\n type: 'channel';\n channel_id: string;\n};\n\nconst transformRichTextChannel = (child: Element): RichTextChannelType => {\n const {channelId}: RichTextChannelProperties = child.props;\n\n return {\n type: 'channel',\n channel_id: channelId,\n };\n};\n\nexport default transformRichTextChannel;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextEmojiProperties} from '../../components/rich-text/emoji';\n\nexport type RichTextEmojiType = {\n type: 'emoji';\n name: string;\n};\n\nconst transformRichTextEmoji = (child: Element): RichTextEmojiType => {\n const {name}: RichTextEmojiProperties = child.props;\n\n return {\n type: 'emoji',\n name,\n };\n};\n\nexport default transformRichTextEmoji;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextDateProperties} from '../../components/rich-text/date';\n\nexport type RichTextDateType = {\n type: 'date';\n timestamp: number;\n format: string;\n fallback: string;\n link?: string;\n};\n\nconst transformRichTextDate = (child: Element): RichTextDateType => {\n const {timestamp, format, fallback, link}: RichTextDateProperties = child.props;\n\n const res: RichTextDateType = {\n type: 'date',\n timestamp,\n format,\n fallback,\n };\n\n if (link) {\n res.link = link;\n }\n\n return res;\n};\n\nexport default transformRichTextDate;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextBroadcastProperties} from '../../components/rich-text/broadcast';\nimport {type RichTextBroadcastRange} from '../../components/rich-text/types';\n\nexport type RichTextBroadcastType = {\n type: 'broadcast';\n range: RichTextBroadcastRange;\n};\n\nconst transformRichTextBroadcast = (child: Element): RichTextBroadcastType => {\n const {range}: RichTextBroadcastProperties = child.props;\n\n return {\n type: 'broadcast',\n range,\n };\n};\n\nexport default transformRichTextBroadcast;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextUserGroupProperties} from '../../components/rich-text/user-group';\n\nexport type RichTextUserGroupType = {\n type: 'usergroup';\n usergroup_id: string;\n};\n\nconst transformRichTextUserGroup = (child: Element): RichTextUserGroupType => {\n const {usergroupId}: RichTextUserGroupProperties = child.props;\n\n return {\n type: 'usergroup',\n usergroup_id: usergroupId,\n };\n};\n\nexport default transformRichTextUserGroup;\n","import {type Child, type Element} from '../constants/types';\nimport getType from '../utils/get-type';\n\nimport Text from './block/text';\nimport Confirmation from './block/confirmation';\nimport Button from './block/button';\nimport Image from './block/image';\nimport Container from './layout/container';\nimport Section from './layout/section';\nimport Actions from './layout/actions';\nimport Context from './layout/context';\nimport Divider from './layout/divider';\nimport File from './layout/file';\nimport Header from './layout/header';\nimport ImageLayout from './layout/image';\nimport Input from './layout/input';\nimport RichText from './layout/rich-text';\nimport Video from './layout/video';\nimport TextInput from './input/text';\nimport DateTimePicker from './input/date-time-picker';\nimport DatePicker from './input/date-picker';\nimport Checkboxes from './input/checkboxes';\nimport Select from './input/select';\nimport Option from './input/option';\nimport OptionGroup from './input/option-group';\nimport Overflow from './input/overflow';\nimport RadioGroup from './input/radio-group';\nimport TimePicker from './input/time-picker';\nimport RichTextSection from './rich-text/section';\nimport RichTextList from './rich-text/list';\nimport RichTextQuote from './rich-text/quote';\nimport RichTextPreformatted from './rich-text/preformatted';\nimport RichTextText from './rich-text/text';\nimport RichTextLink from './rich-text/link';\nimport RichTextUser from './rich-text/user';\nimport RichTextChannel from './rich-text/channel';\nimport RichTextEmoji from './rich-text/emoji';\nimport RichTextDate from './rich-text/date';\nimport RichTextBroadcast from './rich-text/broadcast';\nimport RichTextUserGroup from './rich-text/user-group';\n\ntype TransformersType = Record<string, (child: Child) => unknown>;\n\nconst Transformers: TransformersType = {\n Container,\n Section,\n Actions,\n Context,\n Divider,\n File,\n Header,\n ImageLayout,\n Input,\n RichText,\n Video,\n\n Text,\n Confirmation,\n Button,\n Image,\n\n TextInput,\n DateTimePicker,\n DatePicker,\n Checkboxes,\n Select,\n Overflow,\n RadioGroup,\n TimePicker,\n\n Option,\n OptionGroup,\n\n RichTextSection,\n RichTextList,\n RichTextQuote,\n RichTextPreformatted,\n RichTextText,\n RichTextLink,\n RichTextUser,\n RichTextChannel,\n RichTextEmoji,\n RichTextDate,\n RichTextBroadcast,\n RichTextUserGroup,\n};\n\nexport default Transformers;\n\nexport const transform = (element: Element): Record<string, any> => {\n const type = getType(element);\n\n if (!Transformers[type]) {\n throw new Error(`No transformer exists for type '${type}'`);\n }\n\n return Transformers[type](element);\n};\n","import {type Child, type Block, type SlackMessageDraft} from '../constants/types';\nimport transformers from '../transformers';\nimport getType from '../utils/get-type';\n\nconst normalizeChildren = (children: Child): Child[] => {\n const result: Child[] = [];\n const stack = Array.isArray(children) ? [...children] : [children];\n\n while (stack.length > 0) {\n const child = stack.shift();\n\n if (child === null || child === undefined || typeof child === 'boolean') {\n continue;\n }\n\n if (Array.isArray(child)) {\n stack.unshift(...child);\n continue;\n }\n\n result.push(child);\n }\n\n return result;\n};\n\nconst appendTransformed = (value: unknown, blocks: Block[]): void => {\n if (value === null || value === undefined || typeof value === 'boolean') {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendTransformed(item, blocks);\n }\n\n return;\n }\n\n blocks.push(value as Block);\n};\n\nconst parseChildren = (children: Child): SlackMessageDraft => {\n if (typeof children === 'string') {\n return {text: children};\n }\n\n const normalizedChildren = normalizeChildren(children);\n\n const transformedBlocks: Block[] = [];\n for (const child of normalizedChildren) {\n const type = getType(child);\n const transformer = transformers[type];\n\n if (transformer) {\n appendTransformed(transformer(child), transformedBlocks);\n } else if (type !== 'null') {\n console.warn(`No transformer for child type '${type}' exists and will be ignored.`);\n }\n }\n\n if (transformedBlocks.length === 0) {\n return {blocks: []};\n }\n\n return {blocks: transformedBlocks};\n};\n\nexport default parseChildren;\n","import {type SlackMessage, type SlackMessageDraft, type Element} from '../constants/types';\nimport parser from '../parser';\nimport getType from '../utils/get-type';\nimport {warnIfTooMany} from '../utils/validation';\n\nconst render = (element: Element): SlackMessage => {\n const {props: properties = {}} = element || {};\n\n const typeName = getType(element);\n if (typeName !== 'Message') {\n throw new TypeError('Provided top-level element must be a Message type.');\n }\n\n if (!properties.children) {\n throw new Error('Cannot render a Message with no children.');\n }\n\n const json: SlackMessageDraft = {...parser(properties.children)};\n\n if (properties.replyTo) {\n json.thread_ts = properties.replyTo;\n }\n\n if (properties.markdown !== undefined) {\n json.mrkdwn = properties.markdown;\n }\n\n json.text = properties.text || '';\n\n if (properties.iconEmoji) {\n json.icon_emoji = properties.iconEmoji;\n }\n\n if (properties.iconUrl) {\n json.icon_url = properties.iconUrl;\n }\n\n if (properties.parse) {\n json.parse = properties.parse;\n }\n\n if (properties.username) {\n json.username = properties.username;\n }\n\n if (properties.asUser) {\n json.as_user = properties.asUser;\n }\n\n if (properties.replyBroadcast) {\n json.reply_broadcast = properties.replyBroadcast;\n }\n\n if (properties.unfurlLinks) {\n json.unfurl_links = properties.unfurlLinks;\n }\n\n if (properties.unfurlMedia !== undefined) {\n json.unfurl_media = properties.unfurlMedia;\n }\n\n if (properties.color && json.blocks) {\n json.attachments = [\n {\n fallback: json.text,\n color: properties.color as string,\n blocks: json.blocks,\n },\n ];\n\n delete json.blocks;\n }\n\n if (json.blocks) {\n warnIfTooMany('Message blocks', json.blocks, 50);\n }\n\n return json as SlackMessage;\n};\n\nexport default render;\n"],"mappings":"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","names":["import_react","React","React","import_react","React","import_react","React","import_react","React","image_default","import_react","React","import_react","React","import_react","React","text_default","import_react","React","import_react","import_react","React","React","import_react","React","import_react","React","import_react","React","section_default","text_default","image_default","text_default","section_default","normalizeChildren"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/validation.ts","../src/transformers/block/text.ts","../src/transformers/block/confirmation.tsx","../src/utils/get-type.ts","../src/transformers/registry.ts","../src/transformers/transform.ts","../src/components/block/text.tsx","../src/transformers/block/button.tsx","../src/transformers/block/image.ts","../src/utils/normalize-children.ts","../src/transformers/layout/container.ts","../src/transformers/layout/section.ts","../src/transformers/layout/actions.ts","../src/transformers/layout/context.ts","../src/transformers/layout/divider.ts","../src/transformers/layout/file.ts","../src/transformers/layout/header.tsx","../src/transformers/layout/image.tsx","../src/transformers/layout/input.tsx","../src/transformers/rich-text/utils.ts","../src/transformers/layout/rich-text.ts","../src/transformers/layout/video.tsx","../src/transformers/input/text.tsx","../src/transformers/input/date-time-picker.ts","../src/transformers/input/date-picker.tsx","../src/transformers/input/checkboxes.ts","../src/transformers/input/select.tsx","../src/components/input/select.tsx","../src/transformers/input/option.tsx","../src/transformers/input/option-group.tsx","../src/transformers/input/overflow.ts","../src/transformers/input/radio-group.ts","../src/transformers/input/time-picker.tsx","../src/transformers/rich-text/section.ts","../src/transformers/rich-text/list.ts","../src/transformers/rich-text/quote.ts","../src/transformers/rich-text/preformatted.ts","../src/transformers/rich-text/text.ts","../src/transformers/rich-text/link.ts","../src/transformers/rich-text/user.ts","../src/transformers/rich-text/channel.ts","../src/transformers/rich-text/emoji.ts","../src/transformers/rich-text/date.ts","../src/transformers/rich-text/broadcast.ts","../src/transformers/rich-text/user-group.ts","../src/transformers/index.ts","../src/parser/index.ts","../src/renderer/index.ts"],"sourcesContent":["\nexport {default} from './renderer';\n","const warn = (message: string): void => {\n console.warn(message);\n};\n\nexport const warnIfTooLong = (name: string, value: string | undefined, max: number): void => {\n if (!value) {\n return;\n }\n\n if (value.length > max) {\n warn(`${name} exceeds ${max} characters.`);\n }\n};\n\nexport const warnIfTooMany = (name: string, values: unknown[] | undefined, max: number): void => {\n if (!values) {\n return;\n }\n\n if (values.length > max) {\n warn(`${name} exceeds ${max} items.`);\n }\n};\n","import {type Element} from '../../constants/types';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type TextType = {\n type: 'plain_text' | 'mrkdwn';\n text: string;\n emoji?: boolean;\n verbatim?: boolean;\n};\n\nconst transformText = (element: Element): TextType => {\n const {\n props: {\n plainText,\n children,\n emoji,\n verbatim,\n },\n } = element;\n\n const res: TextType = {\n type: plainText ? 'plain_text' : 'mrkdwn',\n text: children,\n };\n\n if (typeof children === 'string') {\n warnIfTooLong('Text', children, 3000);\n }\n\n if (emoji) {\n res.emoji = true;\n }\n\n if (verbatim) {\n res.verbatim = true;\n }\n\n return res;\n};\n\nexport default transformText;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {transform} from '../transform';\nimport {type ConfirmationProps} from '../../components/block/confirmation';\nimport Text from '../../components/block/text';\n\nimport {type TextType} from './text';\n\nexport type ConfirmationType = {\n title: TextType;\n text: TextType;\n confirm: TextType;\n deny: TextType;\n};\n\nconst transformConfirmation = (child: Element): ConfirmationType => {\n const {title, confirm, deny, children}: ConfirmationProps = child.props;\n\n const res: ConfirmationType = {\n title: transform(<Text plainText>{title}</Text>) as TextType,\n text: transform(children) as TextType,\n confirm: transform(<Text plainText>{confirm}</Text>) as TextType,\n deny: transform(<Text plainText>{deny}</Text>) as TextType,\n };\n\n return res;\n};\n\nexport default transformConfirmation;\n","import {type Child} from '../constants/types';\n\nconst getType = (element: Child): string => {\n if (typeof element === 'string') {\n return 'string';\n }\n\n if (element === null || element === undefined || typeof element === 'boolean') {\n return 'null';\n }\n\n if (Array.isArray(element)) {\n throw new TypeError('Cannot type arrays');\n }\n\n const {type} = element;\n\n if (typeof type === 'string') {\n return type;\n }\n\n const {slackType, displayName, name} = type as {\n slackType?: string;\n displayName?: string;\n name?: string;\n };\n\n return slackType || displayName || name || (type as string);\n};\n\nexport default getType;\n","import {type Child} from '../constants/types';\n\ntype TransformersType = Record<string, (child: Child) => unknown>;\n\n// Mutable registry populated by index.ts at module init time.\n// transform.ts imports this directly to avoid a circular dependency.\nconst Transformers: TransformersType = {};\n\nexport default Transformers;\n","import {type Element} from '../constants/types';\nimport getType from '../utils/get-type';\n\nimport Transformers from './registry';\n\nexport const transform = (element: Element): Record<string, any> => {\n const type = getType(element);\n\n if (!Transformers[type]) {\n throw new Error(`No transformer exists for type '${type}'`);\n }\n\n return Transformers[type](element) as Record<string, any>;\n};\n","import React from 'react';\n\nexport type Props = {\n children: string;\n plainText?: boolean;\n emoji?: boolean;\n verbatim?: boolean;\n};\n\nexport default class Text extends React.Component<Props> {\n static slackType = 'Text';\n}\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type ButtonProps} from '../../components/block/button';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport Confirmation from '../../components/block/confirmation';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type ConfirmationType} from './confirmation';\nimport {type TextType} from './text';\n\nexport type ButtonType = {\n type: 'button';\n text: TextType;\n action_id: string;\n url?: string;\n value?: string;\n style?: 'primary' | 'danger';\n confirm?: ConfirmationType;\n accessibility_label?: string;\n};\n\nconst transformButton = (child: Element): ButtonType => {\n const {actionId, children, url, value, style, confirm, accessibilityLabel}: ButtonProps = child.props;\n\n warnIfTooLong('Button action_id', actionId, 255);\n if (typeof children === 'string') {\n warnIfTooLong('Button text', children, 75);\n }\n\n warnIfTooLong('Button value', value, 2000);\n\n const res: ButtonType = {\n type: 'button',\n text: transform(<Text plainText>{children}</Text>) as TextType,\n action_id: actionId,\n };\n\n if (url) {\n res.url = url;\n }\n\n if (value) {\n res.value = value;\n }\n\n if (style) {\n res.style = style;\n }\n\n if (confirm) {\n res.confirm = transform(confirm) as ConfirmationType;\n }\n\n if (accessibilityLabel) {\n res.accessibility_label = accessibilityLabel;\n }\n\n return res;\n};\n\nexport default transformButton;\n","import {type Element} from '../../constants/types';\nimport {type Props as ImageProperties} from '../../components/block/image';\n\nexport type ImageType = {\n type: 'image';\n image_url: string;\n alt_text: string;\n};\n\nconst transformImage = (child: Element): ImageType => {\n const {url, alt}: ImageProperties = child.props;\n\n return {\n type: 'image',\n image_url: url,\n alt_text: alt,\n };\n};\n\nexport default transformImage;\n","import {type Child} from '../constants/types';\n\nconst normalizeChildren = (children: Child): Child[] => {\n const result: Child[] = [];\n const stack = Array.isArray(children) ? [...children] : [children];\n\n while (stack.length > 0) {\n const child = stack.shift();\n\n if (child === null || child === undefined || typeof child === 'boolean') {\n continue;\n }\n\n if (Array.isArray(child)) {\n stack.unshift(...child);\n continue;\n }\n\n result.push(child);\n }\n\n return result;\n};\n\nexport default normalizeChildren;\n","import {type Props as ContainerProperties} from '../../components/layout/container';\nimport {type Element, type Child} from '../../constants/types';\nimport {transform} from '../transform';\nimport normalizeChildren from '../../utils/normalize-children';\n\ntype ContainerType = Child[];\n\nconst transformContainer = (child: Element): ContainerType => {\n const {children}: ContainerProperties = child.props;\n const elements = normalizeChildren(children);\n\n return (elements as Element[]).map(element => transform(element)) as Child[];\n};\n\nexport default transformContainer;\n","import {type Element, type SerializedBlockElement} from '../../constants/types';\nimport {type TextType as Text} from '../block/text';\nimport {transform} from '../transform';\nimport {warnIfTooLong, warnIfTooMany} from '../../utils/validation';\n\nexport type SectionType = {\n type: 'section';\n text: Text;\n block_id?: string;\n fields?: Text[];\n accessory?: SerializedBlockElement;\n};\n\nconst transformSection = (element: Element): SectionType => {\n const {\n props: {\n text,\n blockId,\n children,\n accessory,\n },\n } = element;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: SectionType = {\n type: 'section',\n text: transform(text as Element) as Text,\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n if (accessory) {\n res.accessory = transform(accessory) as SerializedBlockElement;\n }\n\n if (children) {\n res.fields = [];\n let fields = children;\n if (!Array.isArray(fields)) {\n fields = [fields];\n }\n\n for (const field of fields) {\n if (field) {\n const t = transform(field as Element);\n res.fields.push(t as Text);\n }\n }\n\n warnIfTooMany('Section fields', res.fields, 10);\n }\n\n return res;\n};\n\nexport default transformSection;\n","import {type Element, type SerializedInteractiveBlockElement, type InteractiveBlockElement} from '../../constants/types';\nimport {type Props as ActionProperties} from '../../components/layout/actions';\nimport {transform} from '../transform';\nimport {warnIfTooLong, warnIfTooMany} from '../../utils/validation';\n\nexport type ActionType = {\n type: 'actions';\n elements: SerializedInteractiveBlockElement[];\n block_id?: string;\n};\n\nconst transformActions = (child: Element): ActionType => {\n const {children, blockId}: ActionProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements] as InteractiveBlockElement[];\n }\n\n const res: ActionType = {\n type: 'actions',\n elements: elements.map(element => transform(element as Element) as SerializedInteractiveBlockElement),\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n warnIfTooMany('Actions elements', res.elements, 25);\n\n return res;\n};\n\nexport default transformActions;\n","import {type Element} from '../../constants/types';\nimport {type Props as ContextProperties, type ImageOrText as ImageOrTextElement} from '../../components/layout/context';\nimport {type TextType} from '../block/text';\nimport {type ImageType} from '../block/image';\nimport {transform} from '../transform';\nimport {warnIfTooLong, warnIfTooMany} from '../../utils/validation';\n\ntype ImageOrText = ImageType | TextType;\ntype ImageOrTextElementSet = ImageOrTextElement | ImageOrTextElement[];\n\nexport type ContextType = {\n type: 'context';\n elements: ImageOrText | ImageOrText[];\n block_id?: string;\n};\n\nconst transformContext = (child: Element): ContextType => {\n const {children, blockId}: ContextProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n let elements = children as ImageOrTextElementSet;\n if (!Array.isArray(elements)) {\n elements = [elements] as ImageOrTextElement[];\n }\n\n const res: ContextType = {\n type: 'context',\n elements: elements.map(element => transform(element as Element) as ImageOrText),\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n warnIfTooMany('Context elements', res.elements as ImageOrText[], 10);\n\n return res;\n};\n\nexport default transformContext;\n","import {type Element} from '../../constants/types';\nimport {type Props as DividerProperties} from '../../components/layout/divider';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type DividerType = {\n type: 'divider';\n block_id?: string;\n};\n\nconst transformDivider = (child: Element): DividerType => {\n const {blockId}: DividerProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: DividerType = {type: 'divider'};\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformDivider;\n","import {type Element} from '../../constants/types';\nimport {type Props as FileProperties} from '../../components/layout/file';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type FileType = {\n type: 'file';\n source: 'remote';\n external_id: string;\n block_id?: string;\n};\n\nconst transformFile = (child: Element): FileType => {\n const {externalId, blockId}: FileProperties = child.props;\n warnIfTooLong('block_id', blockId, 255);\n const res: FileType = {\n type: 'file',\n source: 'remote',\n external_id: externalId,\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformFile;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type Props as HeaderProperties} from '../../components/layout/header';\nimport {type TextType} from '../block/text';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type HeaderType = {\n type: 'header';\n text: TextType;\n block_id?: string;\n};\n\nconst transformHeader = (child: Element): HeaderType => {\n const {text, blockId, emoji}: HeaderProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: HeaderType = {\n type: 'header',\n text: transform(<Text plainText emoji={emoji}>{text}</Text>) as TextType,\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformHeader;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type Props as ImageProperties} from '../../components/layout/image';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type ImageType = {\n type: 'image';\n image_url: string;\n alt_text: string;\n title?: TextType;\n block_id?: string;\n};\n\nconst transformImageLayout = (child: Element): ImageType => {\n const {url, alt, title, blockId}: ImageProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: ImageType = {\n type: 'image',\n image_url: url,\n alt_text: alt,\n };\n\n if (title) {\n res.title = transform(<Text plainText>{title}</Text>) as TextType;\n }\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformImageLayout;\n","import React from 'react';\n\nimport {type Element, type SerializedInputBlockElement} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type Props as InputProperties} from '../../components/layout/input';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type InputType = {\n type: 'input';\n label: TextType;\n element: SerializedInputBlockElement;\n hint?: TextType;\n optional?: boolean;\n block_id?: string;\n};\n\nconst transformInput = (child: Element): InputType => {\n const {label, element, hint, optional, blockId}: InputProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: InputType = {\n type: 'input',\n label: transform(<Text plainText>{label}</Text>) as TextType,\n element: transform(element as Element) as SerializedInputBlockElement,\n };\n\n if (hint) {\n res.hint = transform(<Text plainText>{hint}</Text>) as TextType;\n }\n\n if (optional) {\n res.optional = true;\n }\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformInput;\n","import {type Element} from '../../constants/types';\nimport {transform} from '../transform';\n\ntype RichTextChild = Element | string;\n\nexport const normalizeRichTextChildren = (children: unknown): RichTextChild[] => {\n const result: RichTextChild[] = [];\n const stack = Array.isArray(children) ? [...children] : [children];\n\n while (stack.length > 0) {\n const child = stack.shift();\n\n if (child === null || child === undefined || typeof child === 'boolean') {\n continue;\n }\n\n if (Array.isArray(child)) {\n stack.unshift(...child);\n continue;\n }\n\n result.push(child as RichTextChild);\n }\n\n return result;\n};\n\nexport const toInlineElements = (children: unknown): Array<Record<string, unknown>> => {\n const items = normalizeRichTextChildren(children);\n\n return items.map(item => {\n if (typeof item === 'string') {\n return {type: 'text', text: item};\n }\n\n return transform(item) as Record<string, unknown>;\n });\n};\n\nexport const toBlockElements = (children: unknown): Array<Record<string, unknown>> => {\n const items = normalizeRichTextChildren(children);\n\n return items.map(item => {\n if (typeof item === 'string') {\n return {\n type: 'rich_text_section',\n elements: [{type: 'text', text: item}],\n };\n }\n\n return transform(item) as Record<string, unknown>;\n });\n};\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextProperties} from '../../components/layout/rich-text';\nimport {toBlockElements} from '../rich-text/utils';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type RichTextType = {\n type: 'rich_text';\n elements: Array<Record<string, unknown>>;\n block_id?: string;\n};\n\nconst transformRichText = (child: Element): RichTextType => {\n const {elements, children, blockId}: RichTextProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: RichTextType = {\n type: 'rich_text',\n elements: elements ?? toBlockElements(children),\n };\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformRichText;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type Props as VideoProperties} from '../../components/layout/video';\nimport {type TextType} from '../block/text';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type VideoType = {\n type: 'video';\n title: TextType;\n video_url: string;\n thumbnail_url: string;\n alt_text: string;\n title_url?: string;\n description?: TextType;\n author_name?: string;\n provider_name?: string;\n provider_icon_url?: string;\n block_id?: string;\n};\n\nconst transformVideo = (child: Element): VideoType => {\n const {\n title,\n videoUrl,\n thumbnailUrl,\n altText,\n titleUrl,\n description,\n authorName,\n providerName,\n providerIconUrl,\n blockId,\n }: VideoProperties = child.props;\n\n warnIfTooLong('block_id', blockId, 255);\n\n const res: VideoType = {\n type: 'video',\n title: transform(<Text plainText>{title}</Text>) as TextType,\n video_url: videoUrl,\n thumbnail_url: thumbnailUrl,\n alt_text: altText,\n };\n\n if (titleUrl) {\n res.title_url = titleUrl;\n }\n\n if (description) {\n res.description = transform(<Text plainText>{description}</Text>) as TextType;\n }\n\n if (authorName) {\n res.author_name = authorName;\n }\n\n if (providerName) {\n res.provider_name = providerName;\n }\n\n if (providerIconUrl) {\n res.provider_icon_url = providerIconUrl;\n }\n\n if (blockId) {\n res.block_id = blockId;\n }\n\n return res;\n};\n\nexport default transformVideo;\n","import React from 'react';\n\nimport Text from '../../components/block/text';\nimport {type Props as TextInputProperties} from '../../components/input/text';\nimport {type TextType as TextProperties} from '../block/text';\nimport {type Element} from '../../constants/types';\nimport {transform} from '../transform';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type TextType = {\n type: 'plain_text_input';\n action_id: string;\n placeholder?: TextProperties;\n initial_value?: string;\n multiline?: boolean;\n min_length?: number;\n max_length?: number;\n focus_on_load?: boolean;\n dispatch_action_config?: {\n trigger_actions_on: Array<'on_enter_pressed' | 'on_character_entered'>;\n };\n};\n\nconst transformTextInput = (child: Element): TextType => {\n const {\n actionId,\n placeholder,\n initial,\n multiline,\n minLength,\n maxLength,\n focusOnLoad,\n dispatchActionConfig,\n }: TextInputProperties = child.props;\n\n warnIfTooLong('TextInput action_id', actionId, 255);\n if (placeholder) {\n warnIfTooLong('TextInput placeholder', placeholder, 150);\n }\n\n const res: TextType = {\n type: 'plain_text_input',\n action_id: actionId,\n };\n\n if (placeholder) {\n res.placeholder = transform(<Text plainText>{placeholder}</Text>) as TextProperties;\n }\n\n if (initial) {\n res.initial_value = initial;\n }\n\n if (multiline) {\n res.multiline = true;\n }\n\n if (minLength) {\n res.min_length = minLength;\n }\n\n if (maxLength) {\n res.max_length = maxLength;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n if (dispatchActionConfig && dispatchActionConfig.triggerActionsOn.length > 0) {\n res.dispatch_action_config = {\n trigger_actions_on: dispatchActionConfig.triggerActionsOn,\n };\n }\n\n return res;\n};\n\nexport default transformTextInput;\n","import {type Element} from '../../constants/types';\nimport {type Props as DateTimePickerProperties} from '../../components/input/date-time-picker';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '../transform';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type DateTimePickerType = {\n type: 'datetimepicker';\n action_id: string;\n initial_date_time?: number;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst transformDateTimePicker = (child: Element): DateTimePickerType => {\n const {actionId, initialDateTime, confirm, focusOnLoad}: DateTimePickerProperties = child.props;\n\n warnIfTooLong('DateTimePicker action_id', actionId, 255);\n\n const res: DateTimePickerType = {\n type: 'datetimepicker',\n action_id: actionId,\n };\n\n if (initialDateTime !== undefined) {\n if (!Number.isInteger(initialDateTime)) {\n throw new TypeError('DateTime must be a unix timestamp in seconds.');\n }\n\n res.initial_date_time = initialDateTime;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformDateTimePicker;\n","import React from 'react';\n\nimport {type Props as DatePickerProperties} from '../../components/input/date-picker';\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type DatePickerType = {\n type: 'datepicker';\n action_id: string;\n placeholder?: TextType;\n initial_date?: string;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst isValidDateString = (value: string): boolean => {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value);\n if (!match) {\n return false;\n }\n\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n\n if (month < 1 || month > 12) {\n return false;\n }\n\n const date = new Date(Date.UTC(year, month - 1, day));\n return date.getUTCFullYear() === year\n && date.getUTCMonth() === month - 1\n && date.getUTCDate() === day;\n};\n\nconst transformDatePicker = (child: Element): DatePickerType => {\n const {actionId, placeholder, initialDate, confirm, focusOnLoad}: DatePickerProperties = child.props;\n\n warnIfTooLong('DatePicker action_id', actionId, 255);\n if (placeholder) {\n warnIfTooLong('DatePicker placeholder', placeholder, 150);\n }\n\n const res: DatePickerType = {\n type: 'datepicker',\n action_id: actionId,\n };\n\n if (placeholder) {\n res.placeholder = transform(<Text plainText>{placeholder}</Text>) as TextType;\n }\n\n if (initialDate) {\n if (!isValidDateString(initialDate)) {\n throw new Error('Date must be valid and in format YYYY-MM-DD.');\n }\n\n res.initial_date = initialDate;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformDatePicker;\n","import {type Element} from '../../constants/types';\nimport {type Props as CheckboxesProperties} from '../../components/input/checkboxes';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '../transform';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type CheckboxesType = {\n type: 'checkboxes';\n action_id: string;\n options: OptionType[];\n initial_options?: OptionType[];\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst transformCheckboxes = (child: Element): CheckboxesType => {\n const {actionId, children, initialOptions, confirm, focusOnLoad}: CheckboxesProperties = child.props;\n\n warnIfTooLong('Checkboxes action_id', actionId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n const res: CheckboxesType = {\n type: 'checkboxes',\n action_id: actionId,\n options: elements.map(element => transform(element as Element)) as OptionType[],\n };\n\n if (initialOptions && initialOptions.length > 0) {\n res.initial_options = initialOptions.map(option => transform(option as Element)) as OptionType[];\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformCheckboxes;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {type Props as SelectProperties, selectTypes} from '../../components/input/select';\nimport type Option from '../../components/input/option';\nimport Text from '../../components/block/text';\nimport {transform} from '../transform';\nimport getType from '../../utils/get-type';\nimport type OptionGroup from '../../components/input/option-group';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionGroupType} from './option-group';\nimport {type OptionType} from './option';\n\ntype ValidSelectType =\n 'static_select' |\n 'multi_static_select' |\n 'external_select' |\n 'multi_external_select' |\n 'users_select' |\n 'multi_users_select' |\n 'conversations_select' |\n 'multi_conversations_select' |\n 'channels_select' |\n 'multi_channels_select';\n\ntype SelectionType = NonNullable<SelectProperties['type']>;\n\nexport type SelectType = {\n type: ValidSelectType;\n placeholder: TextType;\n action_id: string;\n options?: OptionType[];\n option_groups?: OptionGroupType[];\n initial_option?: OptionType;\n initial_options?: OptionType[];\n confirm?: ConfirmationType;\n max_selected_items?: number;\n min_query_length?: number;\n focus_on_load?: boolean;\n initial_user?: string;\n initial_users?: string[];\n initial_conversation?: string;\n initial_conversations?: string[];\n initial_channel?: string;\n initial_channels?: string[];\n default_to_current_conversation?: boolean;\n response_url_enabled?: boolean;\n filter?: {\n include?: Array<'im' | 'mpim' | 'private' | 'public'>;\n exclude_external_shared_channels?: boolean;\n exclude_bot_users?: boolean;\n };\n};\n\nconst OPTION = 'Option';\nconst OPTION_GROUP = 'OptionGroup';\n\nconst types = {\n [selectTypes.STATIC]: 'static_select',\n [selectTypes.EXTERNAL]: 'external_select',\n [selectTypes.USER]: 'users_select',\n [selectTypes.CONVERSATION]: 'conversations_select',\n [selectTypes.CHANNEL]: 'channels_select',\n};\nconst MULTI_PREFIX = 'multi_';\n\nconst normalizeElements = (elements?: SelectProperties['children']): React.ReactElement[] => {\n if (!elements) {\n return [];\n }\n\n return Array.isArray(elements) ? elements : [elements];\n};\n\nconst assignStaticOptions = (elements: React.ReactElement[], result: SelectType): void => {\n const elementType = getType(elements[0] as Element);\n if (elements.some(element => getType(element as Element) !== elementType)) {\n if (elementType === OPTION && elements.some(element => getType(element as Element) !== OPTION_GROUP)) {\n throw new TypeError('You cannot mix OptionGroup types with Option types in a Select block.');\n } else if (elementType === OPTION_GROUP && elements.some(element => getType(element as Element) !== OPTION)) {\n throw new TypeError('You cannot mix OptionGroup types with Option types in a Select block.');\n }\n\n throw new TypeError('Only allowed types are Option OR OptionGroup');\n }\n\n if (elementType === OPTION) {\n const options = elements as Array<React.ReactElement<Option>>;\n result.options = options.map(element => transform(element as Element)) as OptionType[];\n } else if (elementType === OPTION_GROUP) {\n const optionGroups = elements as Array<React.ReactElement<OptionGroup>>;\n result.option_groups = optionGroups.map(element => transform(element as Element)) as OptionGroupType[];\n }\n};\n\nconst applyInitialSelections = (\n type: SelectionType,\n isMulti: boolean,\n result: SelectType,\n initialValues: {\n initialOptions?: Array<React.ReactElement<Option>>;\n initialUsers?: string[];\n initialConversations?: string[];\n initialChannels?: string[];\n },\n): void => {\n const {initialOptions, initialUsers, initialConversations, initialChannels} = initialValues;\n\n switch (type) {\n case selectTypes.USER: {\n if (initialUsers && initialUsers.length > 0) {\n if (isMulti) {\n result.initial_users = initialUsers;\n } else {\n result.initial_user = initialUsers[0];\n }\n }\n\n break;\n }\n\n case selectTypes.CONVERSATION: {\n if (initialConversations && initialConversations.length > 0) {\n if (isMulti) {\n result.initial_conversations = initialConversations;\n } else {\n result.initial_conversation = initialConversations[0];\n }\n }\n\n break;\n }\n\n case selectTypes.CHANNEL: {\n if (initialChannels && initialChannels.length > 0) {\n if (isMulti) {\n result.initial_channels = initialChannels;\n } else {\n result.initial_channel = initialChannels[0];\n }\n }\n\n break;\n }\n\n case selectTypes.STATIC:\n case selectTypes.EXTERNAL: {\n if (initialOptions && initialOptions.length > 0) {\n const transformedOptions = initialOptions.map(element => transform(element as Element)) as OptionType[];\n\n if (isMulti) {\n result.initial_options = transformedOptions;\n } else {\n result.initial_option = transformedOptions[0];\n }\n }\n\n break;\n }\n }\n};\n\nconst transformSelect = (child: Element): SelectType => {\n const {\n placeholder,\n actionId,\n multi,\n children,\n initialOptions,\n confirm,\n maxSelectedItems,\n type: typeProperty,\n initialUsers,\n initialConversations,\n initialChannels,\n minQueryLength,\n focusOnLoad,\n defaultToCurrentConversation,\n responseUrlEnabled,\n filter,\n }: SelectProperties = child.props;\n\n const type: SelectionType = typeProperty ?? selectTypes.STATIC;\n const typeString = `${multi ? MULTI_PREFIX : ''}${types[type]}` as ValidSelectType;\n\n warnIfTooLong('Select action_id', actionId, 255);\n warnIfTooLong('Select placeholder', placeholder, 150);\n\n const result: SelectType = {\n type: typeString,\n placeholder: transform(<Text plainText>{placeholder}</Text>) as TextType,\n action_id: actionId,\n };\n\n const elements = normalizeElements(children);\n\n if (type === selectTypes.STATIC) {\n assignStaticOptions(elements, result);\n }\n\n if (confirm) {\n result.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n applyInitialSelections(type, Boolean(multi), result, {\n initialOptions,\n initialUsers,\n initialConversations,\n initialChannels,\n });\n\n if (maxSelectedItems) {\n result.max_selected_items = maxSelectedItems;\n }\n\n if (focusOnLoad !== undefined) {\n result.focus_on_load = focusOnLoad;\n }\n\n if (type === selectTypes.EXTERNAL && minQueryLength !== undefined) {\n result.min_query_length = minQueryLength;\n }\n\n if (type === selectTypes.CONVERSATION) {\n if (defaultToCurrentConversation !== undefined) {\n result.default_to_current_conversation = defaultToCurrentConversation;\n }\n\n if (responseUrlEnabled !== undefined) {\n result.response_url_enabled = responseUrlEnabled;\n }\n\n if (filter) {\n const filterValue: SelectType['filter'] = {};\n\n if (filter.include && filter.include.length > 0) {\n filterValue.include = filter.include;\n }\n\n if (filter.excludeExternalSharedChannels !== undefined) {\n filterValue.exclude_external_shared_channels = filter.excludeExternalSharedChannels;\n }\n\n if (filter.excludeBotUsers !== undefined) {\n filterValue.exclude_bot_users = filter.excludeBotUsers;\n }\n\n if (Object.keys(filterValue).length > 0) {\n result.filter = filterValue;\n }\n }\n }\n\n return result;\n};\n\nexport default transformSelect;\n","import React from 'react';\n\nimport type Confirmation from '../block/confirmation';\nimport {type SingleOrArray} from '../../utils/type-helpers';\n\nimport type Option from './option';\nimport type OptionGroup from './option-group';\n\nexport const selectTypes = {\n STATIC: 'static',\n EXTERNAL: 'external',\n USER: 'user',\n CONVERSATION: 'conversation',\n CHANNEL: 'channel',\n} as const;\n\ntype SelectType = typeof selectTypes[keyof typeof selectTypes];\n\ntype ConversationFilter = {\n include?: Array<'im' | 'mpim' | 'private' | 'public'>;\n excludeExternalSharedChannels?: boolean;\n excludeBotUsers?: boolean;\n};\n\nexport type Props = {\n placeholder: string;\n actionId: string;\n type?: SelectType;\n multi?: boolean;\n children?: SingleOrArray<React.ReactElement<Option>> | SingleOrArray<React.ReactElement<OptionGroup>>;\n initialOptions?: Array<React.ReactElement<Option>>;\n confirm?: React.ReactElement<Confirmation>;\n maxSelectedItems?: number;\n minQueryLength?: number;\n focusOnLoad?: boolean;\n initialUsers?: string[];\n initialConversations?: string[];\n initialChannels?: string[];\n defaultToCurrentConversation?: boolean;\n responseUrlEnabled?: boolean;\n filter?: ConversationFilter;\n};\n\nexport default class Select extends React.Component<Props> {\n static slackType = 'Select';\n}\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport Text from '../../components/block/text';\nimport {type Props as OptionProperties} from '../../components/input/option';\nimport {transform} from '../transform';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type OptionType = {\n text: TextType;\n value: string;\n description?: TextType;\n url?: string;\n};\n\nconst transformOption = (child: Element): OptionType => {\n const {children: text, value, url, description}: OptionProperties = child.props;\n\n warnIfTooLong('Option text', text, 75);\n warnIfTooLong('Option value', value, 75);\n warnIfTooLong('Option description', description, 75);\n\n const res: OptionType = {\n text: transform(<Text plainText>{text}</Text>) as TextType,\n value,\n };\n\n if (description) {\n res.description = transform(<Text plainText>{description}</Text>) as TextType;\n }\n\n if (url) {\n res.url = url;\n }\n\n return res;\n};\n\nexport default transformOption;\n","import React from 'react';\n\nimport Text from '../../components/block/text';\nimport {type Props as OptionGroupProperties} from '../../components/input/option-group';\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {transform} from '../transform';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type OptionGroupType = {\n label: TextType;\n options: OptionType[];\n};\n\nconst transformOptionGroup = (child: Element): OptionGroupType => {\n const {label, children}: OptionGroupProperties = child.props;\n\n warnIfTooLong('OptionGroup label', label, 75);\n\n let options = children;\n if (!Array.isArray(options)) {\n options = [options];\n }\n\n return {\n label: transform(<Text plainText>{label}</Text>) as TextType,\n options: options.map(option => transform(option as Element)) as OptionType[],\n };\n};\n\nexport default transformOptionGroup;\n","import {type Element} from '../../constants/types';\nimport {type Props as OverflowProperties} from '../../components/input/overflow';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '../transform';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type OverflowType = {\n type: 'overflow';\n action_id: string;\n options: OptionType[];\n confirm?: ConfirmationType;\n};\n\nconst transformOverflow = (child: Element): OverflowType => {\n const {actionId, children, confirm}: OverflowProperties = child.props;\n\n warnIfTooLong('Overflow action_id', actionId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n const res: OverflowType = {\n type: 'overflow',\n action_id: actionId,\n options: elements.map(element => transform(element as Element)) as OptionType[],\n };\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n return res;\n};\n\nexport default transformOverflow;\n","import {type Element} from '../../constants/types';\nimport {type Props as RadioGroupProperties} from '../../components/input/radio-group';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {transform} from '../transform';\nimport {warnIfTooLong} from '../../utils/validation';\n\nimport {type OptionType} from './option';\n\nexport type RadioGroupType = {\n type: 'radio_buttons';\n action_id: string;\n options: OptionType[];\n initial_option?: OptionType;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst transformRadioGroup = (child: Element): RadioGroupType => {\n const {actionId, children, initialOption, confirm, focusOnLoad}: RadioGroupProperties = child.props;\n\n warnIfTooLong('RadioGroup action_id', actionId, 255);\n\n let elements = children;\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n const res: RadioGroupType = {\n type: 'radio_buttons',\n action_id: actionId,\n options: elements.map(element => transform(element as Element)) as OptionType[],\n };\n\n if (initialOption) {\n res.initial_option = transform(initialOption as Element) as OptionType;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformRadioGroup;\n","import React from 'react';\n\nimport {type Element} from '../../constants/types';\nimport {type TextType} from '../block/text';\nimport {type ConfirmationType} from '../block/confirmation';\nimport {type Props as TimePickerProperties} from '../../components/input/time-picker';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\n\nexport type TimePickerType = {\n type: 'timepicker';\n action_id: string;\n placeholder?: TextType;\n initial_time?: string;\n confirm?: ConfirmationType;\n focus_on_load?: boolean;\n};\n\nconst isValidTimeString = (value: string): boolean => {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value);\n if (!match) {\n return false;\n }\n\n const hours = Number(match[1]);\n const minutes = Number(match[2]);\n\n return hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59;\n};\n\nconst transformTimePicker = (child: Element): TimePickerType => {\n const {actionId, placeholder, initialTime, confirm, focusOnLoad}: TimePickerProperties = child.props;\n\n warnIfTooLong('TimePicker action_id', actionId, 255);\n if (placeholder) {\n warnIfTooLong('TimePicker placeholder', placeholder, 150);\n }\n\n const res: TimePickerType = {\n type: 'timepicker',\n action_id: actionId,\n };\n\n if (placeholder) {\n res.placeholder = transform(<Text plainText>{placeholder}</Text>) as TextType;\n }\n\n if (initialTime) {\n if (!isValidTimeString(initialTime)) {\n throw new Error('Time must be valid and in format HH:MM.');\n }\n\n res.initial_time = initialTime;\n }\n\n if (confirm) {\n res.confirm = transform(confirm as Element) as ConfirmationType;\n }\n\n if (focusOnLoad !== undefined) {\n res.focus_on_load = focusOnLoad;\n }\n\n return res;\n};\n\nexport default transformTimePicker;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextSectionProperties} from '../../components/rich-text/section';\n\nimport {toInlineElements} from './utils';\n\nexport type RichTextSectionType = {\n type: 'rich_text_section';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextSection = (child: Element): RichTextSectionType => {\n const {children}: RichTextSectionProperties = child.props;\n\n return {\n type: 'rich_text_section',\n elements: toInlineElements(children),\n };\n};\n\nexport default transformRichTextSection;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextListProperties} from '../../components/rich-text/list';\nimport {type RichTextListStyle} from '../../components/rich-text/types';\n\nimport {toBlockElements} from './utils';\n\nexport type RichTextListType = {\n type: 'rich_text_list';\n style: RichTextListStyle;\n elements: Array<Record<string, unknown>>;\n indent?: number;\n border?: number;\n};\n\nconst transformRichTextList = (child: Element): RichTextListType => {\n const {style, children, indent, border}: RichTextListProperties = child.props;\n\n const res: RichTextListType = {\n type: 'rich_text_list',\n style,\n elements: toBlockElements(children),\n };\n\n if (indent !== undefined) {\n res.indent = indent;\n }\n\n if (border !== undefined) {\n res.border = border;\n }\n\n return res;\n};\n\nexport default transformRichTextList;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextQuoteProperties} from '../../components/rich-text/quote';\n\nimport {toInlineElements} from './utils';\n\nexport type RichTextQuoteType = {\n type: 'rich_text_quote';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextQuote = (child: Element): RichTextQuoteType => {\n const {children}: RichTextQuoteProperties = child.props;\n\n return {\n type: 'rich_text_quote',\n elements: toInlineElements(children),\n };\n};\n\nexport default transformRichTextQuote;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextPreformattedProperties} from '../../components/rich-text/preformatted';\n\nimport {toInlineElements} from './utils';\n\nexport type RichTextPreformattedType = {\n type: 'rich_text_preformatted';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextPreformatted = (child: Element): RichTextPreformattedType => {\n const {children}: RichTextPreformattedProperties = child.props;\n\n return {\n type: 'rich_text_preformatted',\n elements: toInlineElements(children),\n };\n};\n\nexport default transformRichTextPreformatted;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextTextProperties} from '../../components/rich-text/text';\nimport {type RichTextStyle} from '../../components/rich-text/types';\n\nexport type RichTextTextType = {\n type: 'text';\n text: string;\n style?: RichTextStyle;\n};\n\nconst transformRichTextText = (child: Element): RichTextTextType => {\n const {children, style}: RichTextTextProperties = child.props;\n\n const res: RichTextTextType = {\n type: 'text',\n text: children,\n };\n\n if (style) {\n res.style = style;\n }\n\n return res;\n};\n\nexport default transformRichTextText;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextLinkProperties} from '../../components/rich-text/link';\nimport {type RichTextStyle} from '../../components/rich-text/types';\n\nexport type RichTextLinkType = {\n type: 'link';\n url: string;\n text?: string;\n style?: RichTextStyle;\n};\n\nconst transformRichTextLink = (child: Element): RichTextLinkType => {\n const {url, children, style}: RichTextLinkProperties = child.props;\n\n const res: RichTextLinkType = {\n type: 'link',\n url,\n };\n\n if (children) {\n res.text = children;\n }\n\n if (style) {\n res.style = style;\n }\n\n return res;\n};\n\nexport default transformRichTextLink;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextUserProperties} from '../../components/rich-text/user';\n\nexport type RichTextUserType = {\n type: 'user';\n user_id: string;\n};\n\nconst transformRichTextUser = (child: Element): RichTextUserType => {\n const {userId}: RichTextUserProperties = child.props;\n\n return {\n type: 'user',\n user_id: userId,\n };\n};\n\nexport default transformRichTextUser;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextChannelProperties} from '../../components/rich-text/channel';\n\nexport type RichTextChannelType = {\n type: 'channel';\n channel_id: string;\n};\n\nconst transformRichTextChannel = (child: Element): RichTextChannelType => {\n const {channelId}: RichTextChannelProperties = child.props;\n\n return {\n type: 'channel',\n channel_id: channelId,\n };\n};\n\nexport default transformRichTextChannel;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextEmojiProperties} from '../../components/rich-text/emoji';\n\nexport type RichTextEmojiType = {\n type: 'emoji';\n name: string;\n};\n\nconst transformRichTextEmoji = (child: Element): RichTextEmojiType => {\n const {name}: RichTextEmojiProperties = child.props;\n\n return {\n type: 'emoji',\n name,\n };\n};\n\nexport default transformRichTextEmoji;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextDateProperties} from '../../components/rich-text/date';\n\nexport type RichTextDateType = {\n type: 'date';\n timestamp: number;\n format: string;\n fallback: string;\n link?: string;\n};\n\nconst transformRichTextDate = (child: Element): RichTextDateType => {\n const {timestamp, format, fallback, link}: RichTextDateProperties = child.props;\n\n const res: RichTextDateType = {\n type: 'date',\n timestamp,\n format,\n fallback,\n };\n\n if (link) {\n res.link = link;\n }\n\n return res;\n};\n\nexport default transformRichTextDate;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextBroadcastProperties} from '../../components/rich-text/broadcast';\nimport {type RichTextBroadcastRange} from '../../components/rich-text/types';\n\nexport type RichTextBroadcastType = {\n type: 'broadcast';\n range: RichTextBroadcastRange;\n};\n\nconst transformRichTextBroadcast = (child: Element): RichTextBroadcastType => {\n const {range}: RichTextBroadcastProperties = child.props;\n\n return {\n type: 'broadcast',\n range,\n };\n};\n\nexport default transformRichTextBroadcast;\n","import {type Element} from '../../constants/types';\nimport {type Props as RichTextUserGroupProperties} from '../../components/rich-text/user-group';\n\nexport type RichTextUserGroupType = {\n type: 'usergroup';\n usergroup_id: string;\n};\n\nconst transformRichTextUserGroup = (child: Element): RichTextUserGroupType => {\n const {usergroupId}: RichTextUserGroupProperties = child.props;\n\n return {\n type: 'usergroup',\n usergroup_id: usergroupId,\n };\n};\n\nexport default transformRichTextUserGroup;\n","import Text from './block/text';\nimport Confirmation from './block/confirmation';\nimport Button from './block/button';\nimport Image from './block/image';\nimport Container from './layout/container';\nimport Section from './layout/section';\nimport Actions from './layout/actions';\nimport Context from './layout/context';\nimport Divider from './layout/divider';\nimport File from './layout/file';\nimport Header from './layout/header';\nimport ImageLayout from './layout/image';\nimport Input from './layout/input';\nimport RichText from './layout/rich-text';\nimport Video from './layout/video';\nimport TextInput from './input/text';\nimport DateTimePicker from './input/date-time-picker';\nimport DatePicker from './input/date-picker';\nimport Checkboxes from './input/checkboxes';\nimport Select from './input/select';\nimport Option from './input/option';\nimport OptionGroup from './input/option-group';\nimport Overflow from './input/overflow';\nimport RadioGroup from './input/radio-group';\nimport TimePicker from './input/time-picker';\nimport RichTextSection from './rich-text/section';\nimport RichTextList from './rich-text/list';\nimport RichTextQuote from './rich-text/quote';\nimport RichTextPreformatted from './rich-text/preformatted';\nimport RichTextText from './rich-text/text';\nimport RichTextLink from './rich-text/link';\nimport RichTextUser from './rich-text/user';\nimport RichTextChannel from './rich-text/channel';\nimport RichTextEmoji from './rich-text/emoji';\nimport RichTextDate from './rich-text/date';\nimport RichTextBroadcast from './rich-text/broadcast';\nimport RichTextUserGroup from './rich-text/user-group';\nimport Transformers from './registry';\n\nObject.assign(Transformers, {\n Container,\n Section,\n Actions,\n Context,\n Divider,\n File,\n Header,\n ImageLayout,\n Input,\n RichText,\n Video,\n Text,\n Confirmation,\n Button,\n Image,\n TextInput,\n DateTimePicker,\n DatePicker,\n Checkboxes,\n Select,\n Overflow,\n RadioGroup,\n TimePicker,\n Option,\n OptionGroup,\n RichTextSection,\n RichTextList,\n RichTextQuote,\n RichTextPreformatted,\n RichTextText,\n RichTextLink,\n RichTextUser,\n RichTextChannel,\n RichTextEmoji,\n RichTextDate,\n RichTextBroadcast,\n RichTextUserGroup,\n});\n\nexport {default} from './registry';\n\nexport {transform} from './transform';\n","import {type Child, type Block, type SlackMessageDraft} from '../constants/types';\nimport transformers from '../transformers';\nimport getType from '../utils/get-type';\nimport normalizeChildren from '../utils/normalize-children';\n\nconst appendTransformed = (value: unknown, blocks: Block[]): void => {\n if (value === null || value === undefined || typeof value === 'boolean') {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n appendTransformed(item, blocks);\n }\n\n return;\n }\n\n blocks.push(value as Block);\n};\n\nconst parseChildren = (children: Child): SlackMessageDraft => {\n if (typeof children === 'string') {\n return {text: children};\n }\n\n const normalizedChildren = normalizeChildren(children);\n\n const transformedBlocks: Block[] = [];\n for (const child of normalizedChildren) {\n const type = getType(child);\n const transformer = transformers[type];\n\n if (transformer) {\n appendTransformed(transformer(child), transformedBlocks);\n } else if (type !== 'null') {\n console.warn(`No transformer for child type '${type}' exists and will be ignored.`);\n }\n }\n\n if (transformedBlocks.length === 0) {\n return {blocks: []};\n }\n\n return {blocks: transformedBlocks};\n};\n\nexport default parseChildren;\n","import {type SlackMessage, type SlackMessageDraft, type Element} from '../constants/types';\nimport parser from '../parser';\nimport getType from '../utils/get-type';\nimport {warnIfTooMany} from '../utils/validation';\n\nconst render = (element: Element): SlackMessage => {\n const {props: properties = {}} = element || {};\n\n const typeName = getType(element);\n if (typeName !== 'Message') {\n throw new TypeError('Provided top-level element must be a Message type.');\n }\n\n if (!properties.children) {\n throw new Error('Cannot render a Message with no children.');\n }\n\n const json: SlackMessageDraft = {...parser(properties.children)};\n\n if (properties.replyTo) {\n json.thread_ts = properties.replyTo;\n }\n\n if (properties.markdown !== undefined) {\n json.mrkdwn = properties.markdown;\n }\n\n json.text = properties.text || '';\n\n if (properties.iconEmoji) {\n json.icon_emoji = properties.iconEmoji;\n }\n\n if (properties.iconUrl) {\n json.icon_url = properties.iconUrl;\n }\n\n if (properties.parse) {\n json.parse = properties.parse;\n }\n\n if (properties.username) {\n json.username = properties.username;\n }\n\n if (properties.asUser) {\n json.as_user = properties.asUser;\n }\n\n if (properties.replyBroadcast) {\n json.reply_broadcast = properties.replyBroadcast;\n }\n\n if (properties.unfurlLinks) {\n json.unfurl_links = properties.unfurlLinks;\n }\n\n if (properties.unfurlMedia !== undefined) {\n json.unfurl_media = properties.unfurlMedia;\n }\n\n if (properties.color && json.blocks) {\n json.attachments = [\n {\n fallback: json.text,\n color: properties.color as string,\n blocks: json.blocks,\n },\n ];\n\n delete json.blocks;\n }\n\n if (json.blocks) {\n warnIfTooMany('Message blocks', json.blocks, 50);\n }\n\n return json as SlackMessage;\n};\n\nexport default render;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAM,OAAO,CAAC,YAA0B;AACtC,UAAQ,KAAK,OAAO;AACtB;AAEO,IAAM,gBAAgB,CAAC,MAAc,OAA2B,QAAsB;AAC3F,MAAI,CAAC,OAAO;AACV;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,KAAK;AACtB,SAAK,GAAG,IAAI,YAAY,GAAG,cAAc;AAAA,EAC3C;AACF;AAEO,IAAM,gBAAgB,CAAC,MAAc,QAA+B,QAAsB;AAC/F,MAAI,CAAC,QAAQ;AACX;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,KAAK;AACvB,SAAK,GAAG,IAAI,YAAY,GAAG,SAAS;AAAA,EACtC;AACF;;;ACZA,IAAM,gBAAgB,CAAC,YAA+B;AACpD,QAAM;AAAA,IACJ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,IAAI;AAEJ,QAAM,MAAgB;AAAA,IACpB,MAAM,YAAY,eAAe;AAAA,IACjC,MAAM;AAAA,EACR;AAEA,MAAI,OAAO,aAAa,UAAU;AAChC,kBAAc,QAAQ,UAAU,GAAI;AAAA,EACtC;AAEA,MAAI,OAAO;AACT,QAAI,QAAQ;AAAA,EACd;AAEA,MAAI,UAAU;AACZ,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAO,eAAQ;;;ACxCf,IAAAA,gBAAkB;;;ACElB,IAAM,UAAU,CAAC,YAA2B;AAC1C,MAAI,OAAO,YAAY,UAAU;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,QAAQ,YAAY,UAAa,OAAO,YAAY,WAAW;AAC7E,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,UAAM,IAAI,UAAU,oBAAoB;AAAA,EAC1C;AAEA,QAAM,EAAC,KAAI,IAAI;AAEf,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,EAAC,WAAW,aAAa,KAAI,IAAI;AAMvC,SAAO,aAAa,eAAe,QAAS;AAC9C;AAEA,IAAO,mBAAQ;;;ACxBf,IAAM,eAAiC,CAAC;AAExC,IAAO,mBAAQ;;;ACHR,IAAM,YAAY,CAAC,YAA0C;AAClE,QAAM,OAAO,iBAAQ,OAAO;AAE5B,MAAI,CAAC,iBAAa,IAAI,GAAG;AACvB,UAAM,IAAI,MAAM,mCAAmC,IAAI,GAAG;AAAA,EAC5D;AAEA,SAAO,iBAAa,IAAI,EAAE,OAAO;AACnC;;;ACbA,mBAAkB;AASlB,IAAqB,OAArB,cAAkC,aAAAC,QAAM,UAAiB;AAEzD;AAFqB,KACZ,YAAY;;;AJMrB,IAAM,wBAAwB,CAAC,UAAqC;AAClE,QAAM,EAAC,OAAO,SAAS,MAAM,SAAQ,IAAuB,MAAM;AAElE,QAAM,MAAwB;AAAA,IAC5B,OAAO,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,KAAM,CAAO;AAAA,IAC/C,MAAM,UAAU,QAAQ;AAAA,IACxB,SAAS,UAAU,8BAAAA,QAAA,cAAC,QAAK,WAAS,QAAE,OAAQ,CAAO;AAAA,IACnD,MAAM,UAAU,8BAAAA,QAAA,cAAC,QAAK,WAAS,QAAE,IAAK,CAAO;AAAA,EAC/C;AAEA,SAAO;AACT;AAEA,IAAO,uBAAQ;;;AK7Bf,IAAAC,gBAAkB;AAuBlB,IAAM,kBAAkB,CAAC,UAA+B;AACtD,QAAM,EAAC,UAAU,UAAU,KAAK,OAAO,OAAO,SAAS,mBAAkB,IAAiB,MAAM;AAEhG,gBAAc,oBAAoB,UAAU,GAAG;AAC/C,MAAI,OAAO,aAAa,UAAU;AAChC,kBAAc,eAAe,UAAU,EAAE;AAAA,EAC3C;AAEA,gBAAc,gBAAgB,OAAO,GAAI;AAEzC,QAAM,MAAkB;AAAA,IACtB,MAAM;AAAA,IACN,MAAM,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,QAAS,CAAO;AAAA,IACjD,WAAW;AAAA,EACb;AAEA,MAAI,KAAK;AACP,QAAI,MAAM;AAAA,EACZ;AAEA,MAAI,OAAO;AACT,QAAI,QAAQ;AAAA,EACd;AAEA,MAAI,OAAO;AACT,QAAI,QAAQ;AAAA,EACd;AAEA,MAAI,SAAS;AACX,QAAI,UAAU,UAAU,OAAO;AAAA,EACjC;AAEA,MAAI,oBAAoB;AACtB,QAAI,sBAAsB;AAAA,EAC5B;AAEA,SAAO;AACT;AAEA,IAAO,iBAAQ;;;ACrDf,IAAM,iBAAiB,CAAC,UAA8B;AACpD,QAAM,EAAC,KAAK,IAAG,IAAqB,MAAM;AAE1C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AACF;AAEA,IAAO,gBAAQ;;;ACjBf,IAAM,oBAAoB,CAAC,aAA6B;AACtD,QAAM,SAAkB,CAAC;AACzB,QAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,QAAQ;AAEjE,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,QAAQ,MAAM,MAAM;AAE1B,QAAI,UAAU,QAAQ,UAAU,UAAa,OAAO,UAAU,WAAW;AACvE;AAAA,IACF;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,GAAG,KAAK;AACtB;AAAA,IACF;AAEA,WAAO,KAAK,KAAK;AAAA,EACnB;AAEA,SAAO;AACT;AAEA,IAAO,6BAAQ;;;ACjBf,IAAM,qBAAqB,CAAC,UAAkC;AAC5D,QAAM,EAAC,SAAQ,IAAyB,MAAM;AAC9C,QAAM,WAAW,2BAAkB,QAAQ;AAE3C,SAAQ,SAAuB,IAAI,aAAW,UAAU,OAAO,CAAC;AAClE;AAEA,IAAO,oBAAQ;;;ACDf,IAAM,mBAAmB,CAAC,YAAkC;AAC1D,QAAM;AAAA,IACJ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,IAAI;AAEJ,gBAAc,YAAY,SAAS,GAAG;AAEtC,QAAM,MAAmB;AAAA,IACvB,MAAM;AAAA,IACN,MAAM,UAAU,IAAe;AAAA,EACjC;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,MAAI,WAAW;AACb,QAAI,YAAY,UAAU,SAAS;AAAA,EACrC;AAEA,MAAI,UAAU;AACZ,QAAI,SAAS,CAAC;AACd,QAAI,SAAS;AACb,QAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,eAAS,CAAC,MAAM;AAAA,IAClB;AAEA,eAAW,SAAS,QAAQ;AAC1B,UAAI,OAAO;AACT,cAAM,IAAI,UAAU,KAAgB;AACpC,YAAI,OAAO,KAAK,CAAS;AAAA,MAC3B;AAAA,IACF;AAEA,kBAAc,kBAAkB,IAAI,QAAQ,EAAE;AAAA,EAChD;AAEA,SAAO;AACT;AAEA,IAAO,kBAAQ;;;AC/Cf,IAAM,mBAAmB,CAAC,UAA+B;AACvD,QAAM,EAAC,UAAU,QAAO,IAAsB,MAAM;AAEpD,gBAAc,YAAY,SAAS,GAAG;AAEtC,MAAI,WAAW;AACf,MAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,eAAW,CAAC,QAAQ;AAAA,EACtB;AAEA,QAAM,MAAkB;AAAA,IACtB,MAAM;AAAA,IACN,UAAU,SAAS,IAAI,aAAW,UAAU,OAAkB,CAAsC;AAAA,EACtG;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,gBAAc,oBAAoB,IAAI,UAAU,EAAE;AAElD,SAAO;AACT;AAEA,IAAO,kBAAQ;;;ACnBf,IAAM,mBAAmB,CAAC,UAAgC;AACxD,QAAM,EAAC,UAAU,QAAO,IAAuB,MAAM;AAErD,gBAAc,YAAY,SAAS,GAAG;AAEtC,MAAI,WAAW;AACf,MAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,eAAW,CAAC,QAAQ;AAAA,EACtB;AAEA,QAAM,MAAmB;AAAA,IACvB,MAAM;AAAA,IACN,UAAU,SAAS,IAAI,aAAW,UAAU,OAAkB,CAAgB;AAAA,EAChF;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,gBAAc,oBAAoB,IAAI,UAA2B,EAAE;AAEnE,SAAO;AACT;AAEA,IAAO,kBAAQ;;;AC/Bf,IAAM,mBAAmB,CAAC,UAAgC;AACxD,QAAM,EAAC,QAAO,IAAuB,MAAM;AAE3C,gBAAc,YAAY,SAAS,GAAG;AAEtC,QAAM,MAAmB,EAAC,MAAM,UAAS;AAEzC,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAO,kBAAQ;;;ACZf,IAAM,gBAAgB,CAAC,UAA6B;AAClD,QAAM,EAAC,YAAY,QAAO,IAAoB,MAAM;AACpD,gBAAc,YAAY,SAAS,GAAG;AACtC,QAAM,MAAgB;AAAA,IACpB,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAO,eAAQ;;;AC3Bf,IAAAC,gBAAkB;AAelB,IAAM,kBAAkB,CAAC,UAA+B;AACtD,QAAM,EAAC,MAAM,SAAS,MAAK,IAAsB,MAAM;AAEvD,gBAAc,YAAY,SAAS,GAAG;AAEtC,QAAM,MAAkB;AAAA,IACtB,MAAM;AAAA,IACN,MAAM,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,MAAC,SAAe,IAAK,CAAO;AAAA,EAC7D;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAO,iBAAQ;;;AChCf,IAAAC,gBAAkB;AAiBlB,IAAM,uBAAuB,CAAC,UAA8B;AAC1D,QAAM,EAAC,KAAK,KAAK,OAAO,QAAO,IAAqB,MAAM;AAE1D,gBAAc,YAAY,SAAS,GAAG;AAEtC,QAAM,MAAiB;AAAA,IACrB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AAEA,MAAI,OAAO;AACT,QAAI,QAAQ,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,KAAM,CAAO;AAAA,EACtD;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAOC,iBAAQ;;;ACvCf,IAAAC,gBAAkB;AAkBlB,IAAM,iBAAiB,CAAC,UAA8B;AACpD,QAAM,EAAC,OAAO,SAAS,MAAM,UAAU,QAAO,IAAqB,MAAM;AAEzE,gBAAc,YAAY,SAAS,GAAG;AAEtC,QAAM,MAAiB;AAAA,IACrB,MAAM;AAAA,IACN,OAAO,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,KAAM,CAAO;AAAA,IAC/C,SAAS,UAAU,OAAkB;AAAA,EACvC;AAEA,MAAI,MAAM;AACR,QAAI,OAAO,UAAU,8BAAAA,QAAA,cAAC,QAAK,WAAS,QAAE,IAAK,CAAO;AAAA,EACpD;AAEA,MAAI,UAAU;AACZ,QAAI,WAAW;AAAA,EACjB;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAO,gBAAQ;;;ACvCR,IAAM,4BAA4B,CAAC,aAAuC;AAC/E,QAAM,SAA0B,CAAC;AACjC,QAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,QAAQ;AAEjE,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,QAAQ,MAAM,MAAM;AAE1B,QAAI,UAAU,QAAQ,UAAU,UAAa,OAAO,UAAU,WAAW;AACvE;AAAA,IACF;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,GAAG,KAAK;AACtB;AAAA,IACF;AAEA,WAAO,KAAK,KAAsB;AAAA,EACpC;AAEA,SAAO;AACT;AAEO,IAAM,mBAAmB,CAAC,aAAsD;AACrF,QAAM,QAAQ,0BAA0B,QAAQ;AAEhD,SAAO,MAAM,IAAI,UAAQ;AACvB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,EAAC,MAAM,QAAQ,MAAM,KAAI;AAAA,IAClC;AAEA,WAAO,UAAU,IAAI;AAAA,EACvB,CAAC;AACH;AAEO,IAAM,kBAAkB,CAAC,aAAsD;AACpF,QAAM,QAAQ,0BAA0B,QAAQ;AAEhD,SAAO,MAAM,IAAI,UAAQ;AACvB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,CAAC,EAAC,MAAM,QAAQ,MAAM,KAAI,CAAC;AAAA,MACvC;AAAA,IACF;AAEA,WAAO,UAAU,IAAI;AAAA,EACvB,CAAC;AACH;;;ACzCA,IAAM,oBAAoB,CAAC,UAAiC;AAC1D,QAAM,EAAC,UAAU,UAAU,QAAO,IAAwB,MAAM;AAEhE,gBAAc,YAAY,SAAS,GAAG;AAEtC,QAAM,MAAoB;AAAA,IACxB,MAAM;AAAA,IACN,UAAU,8BAAY,gBAAgB,QAAQ;AAAA,EAChD;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAO,oBAAQ;;;AC5Bf,IAAAC,gBAAkB;AAuBlB,IAAM,iBAAiB,CAAC,UAA8B;AACpD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAqB,MAAM;AAE3B,gBAAc,YAAY,SAAS,GAAG;AAEtC,QAAM,MAAiB;AAAA,IACrB,MAAM;AAAA,IACN,OAAO,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,KAAM,CAAO;AAAA,IAC/C,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU;AAAA,EACZ;AAEA,MAAI,UAAU;AACZ,QAAI,YAAY;AAAA,EAClB;AAEA,MAAI,aAAa;AACf,QAAI,cAAc,UAAU,8BAAAA,QAAA,cAAC,QAAK,WAAS,QAAE,WAAY,CAAO;AAAA,EAClE;AAEA,MAAI,YAAY;AACd,QAAI,cAAc;AAAA,EACpB;AAEA,MAAI,cAAc;AAChB,QAAI,gBAAgB;AAAA,EACtB;AAEA,MAAI,iBAAiB;AACnB,QAAI,oBAAoB;AAAA,EAC1B;AAEA,MAAI,SAAS;AACX,QAAI,WAAW;AAAA,EACjB;AAEA,SAAO;AACT;AAEA,IAAO,gBAAQ;;;AC1Ef,IAAAC,gBAAkB;AAuBlB,IAAM,qBAAqB,CAAC,UAA6B;AACvD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAyB,MAAM;AAE/B,gBAAc,uBAAuB,UAAU,GAAG;AAClD,MAAI,aAAa;AACf,kBAAc,yBAAyB,aAAa,GAAG;AAAA,EACzD;AAEA,QAAM,MAAgB;AAAA,IACpB,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAEA,MAAI,aAAa;AACf,QAAI,cAAc,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,WAAY,CAAO;AAAA,EAClE;AAEA,MAAI,SAAS;AACX,QAAI,gBAAgB;AAAA,EACtB;AAEA,MAAI,WAAW;AACb,QAAI,YAAY;AAAA,EAClB;AAEA,MAAI,WAAW;AACb,QAAI,aAAa;AAAA,EACnB;AAEA,MAAI,WAAW;AACb,QAAI,aAAa;AAAA,EACnB;AAEA,MAAI,gBAAgB,QAAW;AAC7B,QAAI,gBAAgB;AAAA,EACtB;AAEA,MAAI,wBAAwB,qBAAqB,iBAAiB,SAAS,GAAG;AAC5E,QAAI,yBAAyB;AAAA,MAC3B,oBAAoB,qBAAqB;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAOC,gBAAQ;;;AChEf,IAAM,0BAA0B,CAAC,UAAuC;AACtE,QAAM,EAAC,UAAU,iBAAiB,SAAS,YAAW,IAA8B,MAAM;AAE1F,gBAAc,4BAA4B,UAAU,GAAG;AAEvD,QAAM,MAA0B;AAAA,IAC9B,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAEA,MAAI,oBAAoB,QAAW;AACjC,QAAI,CAAC,OAAO,UAAU,eAAe,GAAG;AACtC,YAAM,IAAI,UAAU,+CAA+C;AAAA,IACrE;AAEA,QAAI,oBAAoB;AAAA,EAC1B;AAEA,MAAI,SAAS;AACX,QAAI,UAAU,UAAU,OAAkB;AAAA,EAC5C;AAEA,MAAI,gBAAgB,QAAW;AAC7B,QAAI,gBAAgB;AAAA,EACtB;AAEA,SAAO;AACT;AAEA,IAAO,2BAAQ;;;AC3Cf,IAAAC,gBAAkB;AAmBlB,IAAM,oBAAoB,CAAC,UAA2B;AACpD,QAAM,QAAQ,4BAA4B,KAAK,KAAK;AACpD,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC7B,QAAM,MAAM,OAAO,MAAM,CAAC,CAAC;AAE3B,MAAI,QAAQ,KAAK,QAAQ,IAAI;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AACpD,SAAO,KAAK,eAAe,MAAM,QAC5B,KAAK,YAAY,MAAM,QAAQ,KAC/B,KAAK,WAAW,MAAM;AAC7B;AAEA,IAAM,sBAAsB,CAAC,UAAmC;AAC9D,QAAM,EAAC,UAAU,aAAa,aAAa,SAAS,YAAW,IAA0B,MAAM;AAE/F,gBAAc,wBAAwB,UAAU,GAAG;AACnD,MAAI,aAAa;AACf,kBAAc,0BAA0B,aAAa,GAAG;AAAA,EAC1D;AAEA,QAAM,MAAsB;AAAA,IAC1B,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAEA,MAAI,aAAa;AACf,QAAI,cAAc,UAAU,8BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,WAAY,CAAO;AAAA,EAClE;AAEA,MAAI,aAAa;AACf,QAAI,CAAC,kBAAkB,WAAW,GAAG;AACnC,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AAEA,QAAI,eAAe;AAAA,EACrB;AAEA,MAAI,SAAS;AACX,QAAI,UAAU,UAAU,OAAkB;AAAA,EAC5C;AAEA,MAAI,gBAAgB,QAAW;AAC7B,QAAI,gBAAgB;AAAA,EACtB;AAEA,SAAO;AACT;AAEA,IAAO,sBAAQ;;;AC1Df,IAAM,sBAAsB,CAAC,UAAmC;AAC9D,QAAM,EAAC,UAAU,UAAU,gBAAgB,SAAS,YAAW,IAA0B,MAAM;AAE/F,gBAAc,wBAAwB,UAAU,GAAG;AAEnD,MAAI,WAAW;AACf,MAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,eAAW,CAAC,QAAQ;AAAA,EACtB;AAEA,QAAM,MAAsB;AAAA,IAC1B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS,SAAS,IAAI,aAAW,UAAU,OAAkB,CAAC;AAAA,EAChE;AAEA,MAAI,kBAAkB,eAAe,SAAS,GAAG;AAC/C,QAAI,kBAAkB,eAAe,IAAI,YAAU,UAAU,MAAiB,CAAC;AAAA,EACjF;AAEA,MAAI,SAAS;AACX,QAAI,UAAU,UAAU,OAAkB;AAAA,EAC5C;AAEA,MAAI,gBAAgB,QAAW;AAC7B,QAAI,gBAAgB;AAAA,EACtB;AAEA,SAAO;AACT;AAEA,IAAO,qBAAQ;;;AChDf,IAAAC,iBAAkB;;;ACAlB,IAAAC,iBAAkB;AAQX,IAAM,cAAc;AAAA,EACzB,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,cAAc;AAAA,EACd,SAAS;AACX;AA6BA,IAAqB,SAArB,cAAoC,eAAAC,QAAM,UAAiB;AAE3D;AAFqB,OACZ,YAAY;;;ADarB,IAAM,SAAS;AACf,IAAM,eAAe;AAErB,IAAM,QAAQ;AAAA,EACZ,CAAC,YAAY,MAAM,GAAG;AAAA,EACtB,CAAC,YAAY,QAAQ,GAAG;AAAA,EACxB,CAAC,YAAY,IAAI,GAAG;AAAA,EACpB,CAAC,YAAY,YAAY,GAAG;AAAA,EAC5B,CAAC,YAAY,OAAO,GAAG;AACzB;AACA,IAAM,eAAe;AAErB,IAAM,oBAAoB,CAAC,aAAkE;AAC3F,MAAI,CAAC,UAAU;AACb,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AACvD;AAEA,IAAM,sBAAsB,CAAC,UAAgC,WAA6B;AACxF,QAAM,cAAc,iBAAQ,SAAS,CAAC,CAAY;AAClD,MAAI,SAAS,KAAK,aAAW,iBAAQ,OAAkB,MAAM,WAAW,GAAG;AACzE,QAAI,gBAAgB,UAAU,SAAS,KAAK,aAAW,iBAAQ,OAAkB,MAAM,YAAY,GAAG;AACpG,YAAM,IAAI,UAAU,uEAAuE;AAAA,IAC7F,WAAW,gBAAgB,gBAAgB,SAAS,KAAK,aAAW,iBAAQ,OAAkB,MAAM,MAAM,GAAG;AAC3G,YAAM,IAAI,UAAU,uEAAuE;AAAA,IAC7F;AAEA,UAAM,IAAI,UAAU,8CAA8C;AAAA,EACpE;AAEA,MAAI,gBAAgB,QAAQ;AAC1B,UAAM,UAAU;AAChB,WAAO,UAAU,QAAQ,IAAI,aAAW,UAAU,OAAkB,CAAC;AAAA,EACvE,WAAW,gBAAgB,cAAc;AACvC,UAAM,eAAe;AACrB,WAAO,gBAAgB,aAAa,IAAI,aAAW,UAAU,OAAkB,CAAC;AAAA,EAClF;AACF;AAEA,IAAM,yBAAyB,CAC7B,MACA,SACA,QACA,kBAMS;AACT,QAAM,EAAC,gBAAgB,cAAc,sBAAsB,gBAAe,IAAI;AAE9E,UAAQ,MAAM;AAAA,IACZ,KAAK,YAAY,MAAM;AACrB,UAAI,gBAAgB,aAAa,SAAS,GAAG;AAC3C,YAAI,SAAS;AACX,iBAAO,gBAAgB;AAAA,QACzB,OAAO;AACL,iBAAO,eAAe,aAAa,CAAC;AAAA,QACtC;AAAA,MACF;AAEA;AAAA,IACF;AAAA,IAEA,KAAK,YAAY,cAAc;AAC7B,UAAI,wBAAwB,qBAAqB,SAAS,GAAG;AAC3D,YAAI,SAAS;AACX,iBAAO,wBAAwB;AAAA,QACjC,OAAO;AACL,iBAAO,uBAAuB,qBAAqB,CAAC;AAAA,QACtD;AAAA,MACF;AAEA;AAAA,IACF;AAAA,IAEA,KAAK,YAAY,SAAS;AACxB,UAAI,mBAAmB,gBAAgB,SAAS,GAAG;AACjD,YAAI,SAAS;AACX,iBAAO,mBAAmB;AAAA,QAC5B,OAAO;AACL,iBAAO,kBAAkB,gBAAgB,CAAC;AAAA,QAC5C;AAAA,MACF;AAEA;AAAA,IACF;AAAA,IAEA,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY,UAAU;AACzB,UAAI,kBAAkB,eAAe,SAAS,GAAG;AAC/C,cAAM,qBAAqB,eAAe,IAAI,aAAW,UAAU,OAAkB,CAAC;AAEtF,YAAI,SAAS;AACX,iBAAO,kBAAkB;AAAA,QAC3B,OAAO;AACL,iBAAO,iBAAiB,mBAAmB,CAAC;AAAA,QAC9C;AAAA,MACF;AAEA;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,kBAAkB,CAAC,UAA+B;AACtD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAsB,MAAM;AAE5B,QAAM,OAAsB,sCAAgB,YAAY;AACxD,QAAM,aAAa,GAAG,QAAQ,eAAe,EAAE,GAAG,MAAM,IAAI,CAAC;AAE7D,gBAAc,oBAAoB,UAAU,GAAG;AAC/C,gBAAc,sBAAsB,aAAa,GAAG;AAEpD,QAAM,SAAqB;AAAA,IACzB,MAAM;AAAA,IACN,aAAa,UAAU,+BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,WAAY,CAAO;AAAA,IAC3D,WAAW;AAAA,EACb;AAEA,QAAM,WAAW,kBAAkB,QAAQ;AAE3C,MAAI,SAAS,YAAY,QAAQ;AAC/B,wBAAoB,UAAU,MAAM;AAAA,EACtC;AAEA,MAAI,SAAS;AACX,WAAO,UAAU,UAAU,OAAkB;AAAA,EAC/C;AAEA,yBAAuB,MAAM,QAAQ,KAAK,GAAG,QAAQ;AAAA,IACnD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,kBAAkB;AACpB,WAAO,qBAAqB;AAAA,EAC9B;AAEA,MAAI,gBAAgB,QAAW;AAC7B,WAAO,gBAAgB;AAAA,EACzB;AAEA,MAAI,SAAS,YAAY,YAAY,mBAAmB,QAAW;AACjE,WAAO,mBAAmB;AAAA,EAC5B;AAEA,MAAI,SAAS,YAAY,cAAc;AACrC,QAAI,iCAAiC,QAAW;AAC9C,aAAO,kCAAkC;AAAA,IAC3C;AAEA,QAAI,uBAAuB,QAAW;AACpC,aAAO,uBAAuB;AAAA,IAChC;AAEA,QAAI,QAAQ;AACV,YAAM,cAAoC,CAAC;AAE3C,UAAI,OAAO,WAAW,OAAO,QAAQ,SAAS,GAAG;AAC/C,oBAAY,UAAU,OAAO;AAAA,MAC/B;AAEA,UAAI,OAAO,kCAAkC,QAAW;AACtD,oBAAY,mCAAmC,OAAO;AAAA,MACxD;AAEA,UAAI,OAAO,oBAAoB,QAAW;AACxC,oBAAY,oBAAoB,OAAO;AAAA,MACzC;AAEA,UAAI,OAAO,KAAK,WAAW,EAAE,SAAS,GAAG;AACvC,eAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAO,iBAAQ;;;AEnQf,IAAAC,iBAAkB;AAgBlB,IAAM,kBAAkB,CAAC,UAA+B;AACtD,QAAM,EAAC,UAAU,MAAM,OAAO,KAAK,YAAW,IAAsB,MAAM;AAE1E,gBAAc,eAAe,MAAM,EAAE;AACrC,gBAAc,gBAAgB,OAAO,EAAE;AACvC,gBAAc,sBAAsB,aAAa,EAAE;AAEnD,QAAM,MAAkB;AAAA,IACtB,MAAM,UAAU,+BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,IAAK,CAAO;AAAA,IAC7C;AAAA,EACF;AAEA,MAAI,aAAa;AACf,QAAI,cAAc,UAAU,+BAAAA,QAAA,cAAC,QAAK,WAAS,QAAE,WAAY,CAAO;AAAA,EAClE;AAEA,MAAI,KAAK;AACP,QAAI,MAAM;AAAA,EACZ;AAEA,SAAO;AACT;AAEA,IAAO,iBAAQ;;;ACvCf,IAAAC,iBAAkB;AAgBlB,IAAM,uBAAuB,CAAC,UAAoC;AAChE,QAAM,EAAC,OAAO,SAAQ,IAA2B,MAAM;AAEvD,gBAAc,qBAAqB,OAAO,EAAE;AAE5C,MAAI,UAAU;AACd,MAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,cAAU,CAAC,OAAO;AAAA,EACpB;AAEA,SAAO;AAAA,IACL,OAAO,UAAU,+BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,KAAM,CAAO;AAAA,IAC/C,SAAS,QAAQ,IAAI,YAAU,UAAU,MAAiB,CAAC;AAAA,EAC7D;AACF;AAEA,IAAO,uBAAQ;;;ACjBf,IAAM,oBAAoB,CAAC,UAAiC;AAC1D,QAAM,EAAC,UAAU,UAAU,QAAO,IAAwB,MAAM;AAEhE,gBAAc,sBAAsB,UAAU,GAAG;AAEjD,MAAI,WAAW;AACf,MAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,eAAW,CAAC,QAAQ;AAAA,EACtB;AAEA,QAAM,MAAoB;AAAA,IACxB,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS,SAAS,IAAI,aAAW,UAAU,OAAkB,CAAC;AAAA,EAChE;AAEA,MAAI,SAAS;AACX,QAAI,UAAU,UAAU,OAAkB;AAAA,EAC5C;AAEA,SAAO;AACT;AAEA,IAAO,mBAAQ;;;ACrBf,IAAM,sBAAsB,CAAC,UAAmC;AAC9D,QAAM,EAAC,UAAU,UAAU,eAAe,SAAS,YAAW,IAA0B,MAAM;AAE9F,gBAAc,wBAAwB,UAAU,GAAG;AAEnD,MAAI,WAAW;AACf,MAAI,CAAC,MAAM,QAAQ,QAAQ,GAAG;AAC5B,eAAW,CAAC,QAAQ;AAAA,EACtB;AAEA,QAAM,MAAsB;AAAA,IAC1B,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS,SAAS,IAAI,aAAW,UAAU,OAAkB,CAAC;AAAA,EAChE;AAEA,MAAI,eAAe;AACjB,QAAI,iBAAiB,UAAU,aAAwB;AAAA,EACzD;AAEA,MAAI,SAAS;AACX,QAAI,UAAU,UAAU,OAAkB;AAAA,EAC5C;AAEA,MAAI,gBAAgB,QAAW;AAC7B,QAAI,gBAAgB;AAAA,EACtB;AAEA,SAAO;AACT;AAEA,IAAO,sBAAQ;;;AChDf,IAAAC,iBAAkB;AAmBlB,IAAM,oBAAoB,CAAC,UAA2B;AACpD,QAAM,QAAQ,oBAAoB,KAAK,KAAK;AAC5C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC7B,QAAM,UAAU,OAAO,MAAM,CAAC,CAAC;AAE/B,SAAO,SAAS,KAAK,SAAS,MAAM,WAAW,KAAK,WAAW;AACjE;AAEA,IAAM,sBAAsB,CAAC,UAAmC;AAC9D,QAAM,EAAC,UAAU,aAAa,aAAa,SAAS,YAAW,IAA0B,MAAM;AAE/F,gBAAc,wBAAwB,UAAU,GAAG;AACnD,MAAI,aAAa;AACf,kBAAc,0BAA0B,aAAa,GAAG;AAAA,EAC1D;AAEA,QAAM,MAAsB;AAAA,IAC1B,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAEA,MAAI,aAAa;AACf,QAAI,cAAc,UAAU,+BAAAC,QAAA,cAAC,QAAK,WAAS,QAAE,WAAY,CAAO;AAAA,EAClE;AAEA,MAAI,aAAa;AACf,QAAI,CAAC,kBAAkB,WAAW,GAAG;AACnC,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAEA,QAAI,eAAe;AAAA,EACrB;AAEA,MAAI,SAAS;AACX,QAAI,UAAU,UAAU,OAAkB;AAAA,EAC5C;AAEA,MAAI,gBAAgB,QAAW;AAC7B,QAAI,gBAAgB;AAAA,EACtB;AAEA,SAAO;AACT;AAEA,IAAO,sBAAQ;;;ACzDf,IAAM,2BAA2B,CAAC,UAAwC;AACxE,QAAM,EAAC,SAAQ,IAA+B,MAAM;AAEpD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,iBAAiB,QAAQ;AAAA,EACrC;AACF;AAEA,IAAOC,mBAAQ;;;ACLf,IAAM,wBAAwB,CAAC,UAAqC;AAClE,QAAM,EAAC,OAAO,UAAU,QAAQ,OAAM,IAA4B,MAAM;AAExE,QAAM,MAAwB;AAAA,IAC5B,MAAM;AAAA,IACN;AAAA,IACA,UAAU,gBAAgB,QAAQ;AAAA,EACpC;AAEA,MAAI,WAAW,QAAW;AACxB,QAAI,SAAS;AAAA,EACf;AAEA,MAAI,WAAW,QAAW;AACxB,QAAI,SAAS;AAAA,EACf;AAEA,SAAO;AACT;AAEA,IAAO,eAAQ;;;ACxBf,IAAM,yBAAyB,CAAC,UAAsC;AACpE,QAAM,EAAC,SAAQ,IAA6B,MAAM;AAElD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,iBAAiB,QAAQ;AAAA,EACrC;AACF;AAEA,IAAO,gBAAQ;;;ACTf,IAAM,gCAAgC,CAAC,UAA6C;AAClF,QAAM,EAAC,SAAQ,IAAoC,MAAM;AAEzD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU,iBAAiB,QAAQ;AAAA,EACrC;AACF;AAEA,IAAO,uBAAQ;;;ACTf,IAAM,wBAAwB,CAAC,UAAqC;AAClE,QAAM,EAAC,UAAU,MAAK,IAA4B,MAAM;AAExD,QAAM,MAAwB;AAAA,IAC5B,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAEA,MAAI,OAAO;AACT,QAAI,QAAQ;AAAA,EACd;AAEA,SAAO;AACT;AAEA,IAAOC,gBAAQ;;;ACdf,IAAM,wBAAwB,CAAC,UAAqC;AAClE,QAAM,EAAC,KAAK,UAAU,MAAK,IAA4B,MAAM;AAE7D,QAAM,MAAwB;AAAA,IAC5B,MAAM;AAAA,IACN;AAAA,EACF;AAEA,MAAI,UAAU;AACZ,QAAI,OAAO;AAAA,EACb;AAEA,MAAI,OAAO;AACT,QAAI,QAAQ;AAAA,EACd;AAEA,SAAO;AACT;AAEA,IAAO,eAAQ;;;ACtBf,IAAM,wBAAwB,CAAC,UAAqC;AAClE,QAAM,EAAC,OAAM,IAA4B,MAAM;AAE/C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAEA,IAAO,eAAQ;;;ACTf,IAAM,2BAA2B,CAAC,UAAwC;AACxE,QAAM,EAAC,UAAS,IAA+B,MAAM;AAErD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,EACd;AACF;AAEA,IAAO,kBAAQ;;;ACTf,IAAM,yBAAyB,CAAC,UAAsC;AACpE,QAAM,EAAC,KAAI,IAA6B,MAAM;AAE9C,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAEA,IAAO,gBAAQ;;;ACNf,IAAM,wBAAwB,CAAC,UAAqC;AAClE,QAAM,EAAC,WAAW,QAAQ,UAAU,KAAI,IAA4B,MAAM;AAE1E,QAAM,MAAwB;AAAA,IAC5B,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,MAAM;AACR,QAAI,OAAO;AAAA,EACb;AAEA,SAAO;AACT;AAEA,IAAO,eAAQ;;;ACnBf,IAAM,6BAA6B,CAAC,UAA0C;AAC5E,QAAM,EAAC,MAAK,IAAiC,MAAM;AAEnD,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAEA,IAAO,oBAAQ;;;ACVf,IAAM,6BAA6B,CAAC,UAA0C;AAC5E,QAAM,EAAC,YAAW,IAAiC,MAAM;AAEzD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,cAAc;AAAA,EAChB;AACF;AAEA,IAAO,qBAAQ;;;ACsBf,OAAO,OAAO,kBAAc;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAAD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACxED,IAAM,oBAAoB,CAAC,OAAgB,WAA0B;AACnE,MAAI,UAAU,QAAQ,UAAU,UAAa,OAAO,UAAU,WAAW;AACvE;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAW,QAAQ,OAAO;AACxB,wBAAkB,MAAM,MAAM;AAAA,IAChC;AAEA;AAAA,EACF;AAEA,SAAO,KAAK,KAAc;AAC5B;AAEA,IAAM,gBAAgB,CAAC,aAAuC;AAC5D,MAAI,OAAO,aAAa,UAAU;AAChC,WAAO,EAAC,MAAM,SAAQ;AAAA,EACxB;AAEA,QAAM,qBAAqB,2BAAkB,QAAQ;AAErD,QAAM,oBAA6B,CAAC;AACpC,aAAW,SAAS,oBAAoB;AACtC,UAAM,OAAO,iBAAQ,KAAK;AAC1B,UAAM,cAAc,iBAAa,IAAI;AAErC,QAAI,aAAa;AACf,wBAAkB,YAAY,KAAK,GAAG,iBAAiB;AAAA,IACzD,WAAW,SAAS,QAAQ;AAC1B,cAAQ,KAAK,kCAAkC,IAAI,+BAA+B;AAAA,IACpF;AAAA,EACF;AAEA,MAAI,kBAAkB,WAAW,GAAG;AAClC,WAAO,EAAC,QAAQ,CAAC,EAAC;AAAA,EACpB;AAEA,SAAO,EAAC,QAAQ,kBAAiB;AACnC;AAEA,IAAO,iBAAQ;;;AC1Cf,IAAM,SAAS,CAAC,YAAmC;AACjD,QAAM,EAAC,OAAO,aAAa,CAAC,EAAC,IAAI,WAAW,CAAC;AAE7C,QAAM,WAAW,iBAAQ,OAAO;AAChC,MAAI,aAAa,WAAW;AAC1B,UAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AAEA,MAAI,CAAC,WAAW,UAAU;AACxB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,QAAM,OAA0B,EAAC,GAAG,eAAO,WAAW,QAAQ,EAAC;AAE/D,MAAI,WAAW,SAAS;AACtB,SAAK,YAAY,WAAW;AAAA,EAC9B;AAEA,MAAI,WAAW,aAAa,QAAW;AACrC,SAAK,SAAS,WAAW;AAAA,EAC3B;AAEA,OAAK,OAAO,WAAW,QAAQ;AAE/B,MAAI,WAAW,WAAW;AACxB,SAAK,aAAa,WAAW;AAAA,EAC/B;AAEA,MAAI,WAAW,SAAS;AACtB,SAAK,WAAW,WAAW;AAAA,EAC7B;AAEA,MAAI,WAAW,OAAO;AACpB,SAAK,QAAQ,WAAW;AAAA,EAC1B;AAEA,MAAI,WAAW,UAAU;AACvB,SAAK,WAAW,WAAW;AAAA,EAC7B;AAEA,MAAI,WAAW,QAAQ;AACrB,SAAK,UAAU,WAAW;AAAA,EAC5B;AAEA,MAAI,WAAW,gBAAgB;AAC7B,SAAK,kBAAkB,WAAW;AAAA,EACpC;AAEA,MAAI,WAAW,aAAa;AAC1B,SAAK,eAAe,WAAW;AAAA,EACjC;AAEA,MAAI,WAAW,gBAAgB,QAAW;AACxC,SAAK,eAAe,WAAW;AAAA,EACjC;AAEA,MAAI,WAAW,SAAS,KAAK,QAAQ;AACnC,SAAK,cAAc;AAAA,MACjB;AAAA,QACE,UAAU,KAAK;AAAA,QACf,OAAO,WAAW;AAAA,QAClB,QAAQ,KAAK;AAAA,MACf;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,KAAK,QAAQ;AACf,kBAAc,kBAAkB,KAAK,QAAQ,EAAE;AAAA,EACjD;AAEA,SAAO;AACT;AAEA,IAAO,mBAAQ;","names":["import_react","React","React","import_react","React","import_react","React","import_react","React","image_default","import_react","React","import_react","React","import_react","React","text_default","import_react","React","import_react","import_react","React","React","import_react","React","import_react","React","import_react","React","section_default","text_default","image_default","text_default","section_default"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { E as Element, S as SlackMessage } from './types.d-
|
|
1
|
+
import { E as Element, S as SlackMessage } from './types.d-0WEt-h92.mjs';
|
|
2
2
|
import 'react';
|
|
3
|
-
import '@slack/
|
|
4
|
-
import '@slack/web-api/dist/types/request/chat';
|
|
3
|
+
import '@slack/types';
|
|
5
4
|
|
|
6
5
|
declare const render: (element: Element) => SlackMessage;
|
|
7
6
|
|