slackblock 1.1.0 → 2.0.0-beta.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.
@@ -1 +1 @@
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":"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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"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/utils/validation-context.ts","../src/utils/validation.ts","../src/transformers/block/text.ts","../src/utils/get-type.ts","../src/transformers/registry.ts","../src/transformers/transform.ts","../src/components/block/text.tsx","../src/constants/limits.ts","../src/jsx-runtime.ts","../src/transformers/block/confirmation.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/components/input/select.tsx","../src/transformers/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","../src/utils/escape-mrkdwn.ts","../src/utils/block-kit-builder.ts"],"sourcesContent":["\nexport {default} from './renderer';\nexport {type RenderOptions} from './renderer';\nexport {renderToBlocks, renderToMessage} from './renderer';\nexport {type ValidationMode} from './utils/validation-context';\nexport {SlackblockValidationError} from './errors';\nexport {escapeMrkdwn} from './utils/escape-mrkdwn';\nexport {blockKitBuilderUrl} from './utils/block-kit-builder';\n","/**\n * Error thrown by `render()` / `renderToBlocks()` when `validate: 'strict'`\n * is set and a validation rule is violated.\n *\n * @example\n * ```ts\n * import { SlackblockValidationError } from 'slackblock';\n *\n * try {\n * render(<Message>...</Message>, { validate: 'strict' });\n * } catch (err) {\n * if (err instanceof SlackblockValidationError) {\n * console.error(err.message); // \"Message > Header: Header text exceeds 150 characters.\"\n * console.error(err.path); // \"Message > Header\"\n * console.error(err.rule); // \"too-long\"\n * }\n * }\n * ```\n */\nexport class SlackblockValidationError extends Error {\n readonly path: string;\n readonly rule: string;\n constructor(message: string, path: string, rule: string) {\n super(`${path}: ${message}`);\n this.name = 'SlackblockValidationError';\n this.path = path;\n this.rule = rule;\n }\n}\n","import {SlackblockValidationError} from '../errors';\n\n/**\n * Controls how SlackBlock handles validation violations during rendering.\n *\n * - `'warn'` — emit `console.warn` messages (default)\n * - `'strict'` — throw `SlackblockValidationError`\n * - `'off'` — suppress all validation\n */\nexport type ValidationMode = 'off' | 'warn' | 'strict';\n\ntype ValidationContext = {\n mode: ValidationMode;\n path: string[];\n};\n\nconst context: ValidationContext = {\n mode: 'warn',\n path: [],\n};\n\nexport const initContext = (mode: ValidationMode): void => {\n context.mode = mode;\n context.path = [];\n};\n\nexport const pushPath = (segment: string): void => {\n context.path.push(segment);\n};\n\nexport const popPath = (): void => {\n context.path.pop();\n};\n\nconst getPath = (): string => context.path.join(' > ');\n\nexport const report = (message: string, rule: string): void => {\n if (context.mode === 'off') {\n return;\n }\n\n const path = getPath();\n\n if (context.mode === 'warn') {\n console.warn(`[slackblock] ${path}: ${message}`);\n return;\n }\n\n throw new SlackblockValidationError(message, path, rule);\n};\n","import {report} from './validation-context';\n\nconst toKebab = (name: string): string => name.replaceAll(/([A-Z])/g, '-$1').toLowerCase();\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 report(`${name} exceeds ${max} characters.`, 'value-too-long');\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 report(`${name} exceeds ${max} items.`, 'too-many-items');\n }\n};\n\nexport const requireField = (fieldName: string, value: unknown): void => {\n if (value === undefined || value === null || value === '') {\n report(`${fieldName} is required.`, `${toKebab(fieldName)}-required`);\n }\n};\n","import {type Element} from '../../constants/types';\nimport {type Props as TextProps} from '../../components/block/text';\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 {plainText, children, emoji, verbatim} = element.props as TextProps;\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 {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 unknown 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';\nimport {pushPath, popPath, report} from '../utils/validation-context';\n\nimport Transformers from './registry';\n\nexport const transform = (element: Element): unknown => {\n const type = getType(element);\n\n if (!Transformers[type]) {\n report(`No transformer for component type '${type}'.`, 'unknown-type');\n return {};\n }\n\n pushPath(type);\n try {\n return Transformers[type](element);\n } finally {\n popPath();\n }\n};\n","\nexport type Props = {\n children: string;\n plainText?: boolean;\n emoji?: boolean;\n verbatim?: boolean;\n};\n\n/**\n * A text object — renders as `mrkdwn` (default) or `plain_text`.\n *\n * Used as the `text` prop on `<Section>`, `<Header>`, inside `<Context>`,\n * and as a child of `<Section>` for fields.\n *\n * @example\n * ```tsx\n * <Text>Hello *world*</Text>\n * <Text plainText emoji>Hello :wave:</Text>\n * ```\n */\nexport default class Text {\n static slackType = 'Text';\n declare props: Props;\n}\n","export const MAX_BLOCKS = 50;\nexport const MAX_HEADER_TEXT = 150;\nexport const MAX_SECTION_FIELDS = 10;\nexport const MAX_SECTION_FIELD_TEXT = 2000;\nexport const MAX_ACTIONS_ELEMENTS = 25;\nexport const MAX_CONTEXT_ELEMENTS = 10;\nexport const MAX_CONFIRM_TITLE = 100;\nexport const MAX_CONFIRM_TEXT = 300;\nexport const MAX_BUTTON_TEXT = 75;\nexport const MAX_BUTTON_VALUE = 2000;\nexport const MAX_OPTION_TEXT = 75;\nexport const MAX_OPTION_VALUE = 150;\nexport const MAX_OPTION_DESCRIPTION = 75;\nexport const MAX_OPTION_URL = 3000;\nexport const MAX_OPTION_GROUP_LABEL = 75;\nexport const MAX_OPTION_GROUP_OPTIONS = 100;\nexport const MAX_IMAGE_URL = 3000;\nexport const MAX_IMAGE_ALT_TEXT = 2000;\nexport const MAX_IMAGE_TITLE = 2000;\nexport const MAX_VIDEO_DESCRIPTION = 200;\nexport const MAX_BLOCK_ID_LENGTH = 255;\nexport const MAX_MESSAGE_TEXT = 40_000;\nexport const RECOMMENDED_MESSAGE_TEXT = 4000;\nexport const MAX_ACTION_ID_LENGTH = 255;\nexport const MAX_PLACEHOLDER_LENGTH = 150;\n","type ComponentType = string | ((...parameters: unknown[]) => unknown) | (new (...parameters: unknown[]) => unknown);\n\nexport function jsx(type: ComponentType, props: Record<string, unknown>) {\n const {children} = props;\n\n return {\n type,\n props,\n children: Array.isArray(children) ? children : (children === undefined ? [] : [children]),\n };\n}\n\nexport function jsxs(type: ComponentType, props: Record<string, unknown>) {\n return jsx(type, props);\n}\n\nexport const Fragment = 'fragment';\n","\nimport {type Element} from '../../constants/types';\nimport {transform} from '../transform';\nimport {type ConfirmationProps} from '../../components/block/confirmation';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong} from '../../utils/validation';\nimport {MAX_CONFIRM_TITLE, MAX_CONFIRM_TEXT} from '../../constants/limits';\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} = child.props as ConfirmationProps;\n\n warnIfTooLong('Confirm title', title, MAX_CONFIRM_TITLE);\n\n const text = transform(children) as TextType;\n warnIfTooLong('Confirm text', text.text, MAX_CONFIRM_TEXT);\n\n const res: ConfirmationType = {\n title: transform(<Text plainText>{title}</Text>) as TextType,\n text,\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","\nimport {type Element} from '../../constants/types';\nimport {type ButtonProps} from '../../components/block/button';\nimport {transform} from '../transform';\nimport Text from '../../components/block/text';\nimport {warnIfTooLong, requireField} from '../../utils/validation';\nimport {MAX_ACTION_ID_LENGTH, MAX_BUTTON_TEXT, MAX_BUTTON_VALUE} from '../../constants/limits';\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} = child.props as ButtonProps;\n\n requireField('actionId', actionId);\n warnIfTooLong('Button action_id', actionId, MAX_ACTION_ID_LENGTH);\n if (typeof children === 'string') {\n warnIfTooLong('Button text', children, MAX_BUTTON_TEXT);\n }\n\n warnIfTooLong('Button value', value, MAX_BUTTON_VALUE);\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} = child.props as ImageProperties;\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} = child.props as ContainerProperties;\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 Props as SectionComponentProps} from '../../components/layout/section';\nimport {type TextType as Text} from '../block/text';\nimport {transform} from '../transform';\nimport {warnIfTooLong, warnIfTooMany} from '../../utils/validation';\nimport {MAX_BLOCK_ID_LENGTH, MAX_SECTION_FIELD_TEXT, MAX_SECTION_FIELDS} from '../../constants/limits';\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 {text, blockId, children, accessory} = element.props as SectionComponentProps;\n\n warnIfTooLong('block_id', blockId, MAX_BLOCK_ID_LENGTH);\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) as Text;\n warnIfTooLong('Section field text', t.text, MAX_SECTION_FIELD_TEXT);\n res.fields.push(t);\n }\n }\n\n warnIfTooMany('Section fields', res.fields, MAX_SECTION_FIELDS);\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';\nimport {MAX_BLOCK_ID_LENGTH, MAX_ACTIONS_ELEMENTS} from '../../constants/limits';\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} = child.props as ActionProperties;\n\n warnIfTooLong('block_id', blockId, MAX_BLOCK_ID_LENGTH);\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, MAX_ACTIONS_ELEMENTS);\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';\nimport {MAX_BLOCK_ID_LENGTH, MAX_CONTEXT_ELEMENTS} from '../../constants/limits';\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} = child.props as ContextProperties;\n\n warnIfTooLong('block_id', blockId, MAX_BLOCK_ID_LENGTH);\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[], MAX_CONTEXT_ELEMENTS);\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} = child.props as DividerProperties;\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} = child.props as FileProperties;\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","\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, requireField} from '../../utils/validation';\nimport {MAX_HEADER_TEXT, MAX_BLOCK_ID_LENGTH} from '../../constants/limits';\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} = child.props as HeaderProperties;\n\n requireField('text', text);\n warnIfTooLong('Header text', text, MAX_HEADER_TEXT);\n warnIfTooLong('block_id', blockId, MAX_BLOCK_ID_LENGTH);\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","\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';\nimport {\n MAX_IMAGE_URL, MAX_IMAGE_ALT_TEXT, MAX_IMAGE_TITLE, MAX_BLOCK_ID_LENGTH,\n} from '../../constants/limits';\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} = child.props as ImageProperties;\n\n warnIfTooLong('Image image_url', url, MAX_IMAGE_URL);\n warnIfTooLong('Image alt_text', alt, MAX_IMAGE_ALT_TEXT);\n warnIfTooLong('block_id', blockId, MAX_BLOCK_ID_LENGTH);\n\n const res: ImageType = {\n type: 'image',\n image_url: url,\n alt_text: alt,\n };\n\n if (title) {\n warnIfTooLong('Image title', title, MAX_IMAGE_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","\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} = child.props as InputProperties;\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\nconst 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} = child.props as RichTextProperties;\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","\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';\nimport {MAX_BLOCK_ID_LENGTH, MAX_VIDEO_DESCRIPTION} from '../../constants/limits';\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 } = child.props as VideoProperties;\n\n warnIfTooLong('block_id', blockId, MAX_BLOCK_ID_LENGTH);\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 warnIfTooLong('Video description', description, MAX_VIDEO_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","\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 } = child.props as TextInputProperties;\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, requireField} from '../../utils/validation';\nimport {MAX_ACTION_ID_LENGTH} from '../../constants/limits';\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} = child.props as DateTimePickerProperties;\n\n requireField('actionId', actionId);\n warnIfTooLong('DateTimePicker action_id', actionId, MAX_ACTION_ID_LENGTH);\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","\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, requireField} from '../../utils/validation';\nimport {report} from '../../utils/validation-context';\nimport {MAX_ACTION_ID_LENGTH, MAX_PLACEHOLDER_LENGTH} from '../../constants/limits';\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} = child.props as DatePickerProperties;\n\n requireField('actionId', actionId);\n warnIfTooLong('DatePicker action_id', actionId, MAX_ACTION_ID_LENGTH);\n if (placeholder) {\n warnIfTooLong('DatePicker placeholder', placeholder, MAX_PLACEHOLDER_LENGTH);\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 report('Date must be valid and in format YYYY-MM-DD.', 'invalid-date-format');\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, requireField} from '../../utils/validation';\nimport {MAX_ACTION_ID_LENGTH} from '../../constants/limits';\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} = child.props as CheckboxesProperties;\n\n requireField('actionId', actionId);\n warnIfTooLong('Checkboxes action_id', actionId, MAX_ACTION_ID_LENGTH);\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","\nimport {type SingleOrArray} from '../../utils/type-helpers';\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<JSX.Element>;\n initialOptions?: JSX.Element[];\n confirm?: JSX.Element;\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\n/**\n * A select menu — supports static options, external data sources, and user /\n * channel / conversation lists. Can be single or multi-select.\n *\n * Use the `type` prop to switch data sources (default: `'static'`).\n * Pass `<Option>` or `<OptionGroup>` children for static selects.\n *\n * @example\n * ```tsx\n * // Static single-select\n * <Select placeholder=\"Pick one\" actionId=\"color\">\n * <Option value=\"red\">Red</Option>\n * <Option value=\"blue\">Blue</Option>\n * </Select>\n *\n * // User multi-select\n * <Select type=\"user\" multi placeholder=\"Pick users\" actionId=\"mentions\" />\n * ```\n */\nexport default class Select {\n static slackType = 'Select';\n declare props: Props;\n}\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 Text from '../../components/block/text';\nimport {transform} from '../transform';\nimport getType from '../../utils/get-type';\nimport {warnIfTooLong, requireField} from '../../utils/validation';\nimport {MAX_ACTION_ID_LENGTH, MAX_PLACEHOLDER_LENGTH} from '../../constants/limits';\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']): JSX.Element[] => {\n if (!elements) {\n return [];\n }\n\n return Array.isArray(elements) ? elements : [elements];\n};\n\nconst assignStaticOptions = (elements: JSX.Element[], 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 result.options = elements.map(element => transform(element as Element)) as OptionType[];\n } else if (elementType === OPTION_GROUP) {\n result.option_groups = elements.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?: JSX.Element[];\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 } = child.props as SelectProperties;\n\n const type: SelectionType = typeProperty ?? selectTypes.STATIC;\n const typeString = `${multi ? MULTI_PREFIX : ''}${types[type]}` as ValidSelectType;\n\n requireField('actionId', actionId);\n requireField('placeholder', placeholder);\n warnIfTooLong('Select action_id', actionId, MAX_ACTION_ID_LENGTH);\n warnIfTooLong('Select placeholder', placeholder, MAX_PLACEHOLDER_LENGTH);\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","\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, requireField} from '../../utils/validation';\nimport {\n MAX_OPTION_TEXT, MAX_OPTION_VALUE, MAX_OPTION_DESCRIPTION, MAX_OPTION_URL,\n} from '../../constants/limits';\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} = child.props as OptionProperties;\n\n requireField('value', value);\n warnIfTooLong('Option text', text, MAX_OPTION_TEXT);\n warnIfTooLong('Option value', value, MAX_OPTION_VALUE);\n warnIfTooLong('Option description', description, MAX_OPTION_DESCRIPTION);\n warnIfTooLong('Option url', url, MAX_OPTION_URL);\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","\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, warnIfTooMany} from '../../utils/validation';\nimport {MAX_OPTION_GROUP_LABEL, MAX_OPTION_GROUP_OPTIONS} from '../../constants/limits';\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} = child.props as OptionGroupProperties;\n\n warnIfTooLong('OptionGroup label', label, MAX_OPTION_GROUP_LABEL);\n\n let options = children;\n if (!Array.isArray(options)) {\n options = [options];\n }\n\n warnIfTooMany('OptionGroup options', options, MAX_OPTION_GROUP_OPTIONS);\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} = child.props as OverflowProperties;\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, requireField} from '../../utils/validation';\nimport {MAX_ACTION_ID_LENGTH} from '../../constants/limits';\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} = child.props as RadioGroupProperties;\n\n requireField('actionId', actionId);\n warnIfTooLong('RadioGroup action_id', actionId, MAX_ACTION_ID_LENGTH);\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","\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, requireField} from '../../utils/validation';\nimport {report} from '../../utils/validation-context';\nimport {MAX_ACTION_ID_LENGTH, MAX_PLACEHOLDER_LENGTH} from '../../constants/limits';\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} = child.props as TimePickerProperties;\n\n requireField('actionId', actionId);\n warnIfTooLong('TimePicker action_id', actionId, MAX_ACTION_ID_LENGTH);\n if (placeholder) {\n warnIfTooLong('TimePicker placeholder', placeholder, MAX_PLACEHOLDER_LENGTH);\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 report('Time must be valid and in format HH:MM.', 'invalid-time-format');\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\ntype RichTextSectionType = {\n type: 'rich_text_section';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextSection = (child: Element): RichTextSectionType => {\n const {children} = child.props as RichTextSectionProperties;\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\ntype 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} = child.props as RichTextListProperties;\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\ntype RichTextQuoteType = {\n type: 'rich_text_quote';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextQuote = (child: Element): RichTextQuoteType => {\n const {children} = child.props as RichTextQuoteProperties;\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\ntype RichTextPreformattedType = {\n type: 'rich_text_preformatted';\n elements: Array<Record<string, unknown>>;\n};\n\nconst transformRichTextPreformatted = (child: Element): RichTextPreformattedType => {\n const {children} = child.props as RichTextPreformattedProperties;\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\ntype RichTextTextType = {\n type: 'text';\n text: string;\n style?: RichTextStyle;\n};\n\nconst transformRichTextText = (child: Element): RichTextTextType => {\n const {children, style} = child.props as RichTextTextProperties;\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\ntype 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} = child.props as RichTextLinkProperties;\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\ntype RichTextUserType = {\n type: 'user';\n user_id: string;\n};\n\nconst transformRichTextUser = (child: Element): RichTextUserType => {\n const {userId} = child.props as RichTextUserProperties;\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\ntype RichTextChannelType = {\n type: 'channel';\n channel_id: string;\n};\n\nconst transformRichTextChannel = (child: Element): RichTextChannelType => {\n const {channelId} = child.props as RichTextChannelProperties;\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\ntype RichTextEmojiType = {\n type: 'emoji';\n name: string;\n};\n\nconst transformRichTextEmoji = (child: Element): RichTextEmojiType => {\n const {name} = child.props as RichTextEmojiProperties;\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\ntype RichTextDateType = {\n type: 'date';\n timestamp: number;\n format: string;\n fallback: string;\n};\n\nconst transformRichTextDate = (child: Element): RichTextDateType => {\n const {timestamp, format, fallback} = child.props as RichTextDateProperties;\n\n return {\n type: 'date',\n timestamp,\n format,\n fallback,\n };\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\ntype RichTextBroadcastType = {\n type: 'broadcast';\n range: RichTextBroadcastRange;\n};\n\nconst transformRichTextBroadcast = (child: Element): RichTextBroadcastType => {\n const {range} = child.props as RichTextBroadcastProperties;\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\ntype RichTextUserGroupType = {\n type: 'usergroup';\n usergroup_id: string;\n};\n\nconst transformRichTextUserGroup = (child: Element): RichTextUserGroupType => {\n const {usergroupId} = child.props as RichTextUserGroupProperties;\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","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';\nimport {pushPath, popPath, report} from '../utils/validation-context';\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 pushPath(type);\n try {\n appendTransformed(transformer(child), transformedBlocks);\n } finally {\n popPath();\n }\n } else if (type !== 'null') {\n report(`No transformer for component type '${type}'.`, 'unknown-type');\n }\n }\n\n if (transformedBlocks.length === 0) {\n return {blocks: []};\n }\n\n return {blocks: transformedBlocks};\n};\n\nexport default parseChildren;\n","import {\n type SlackMessage, type SlackMessageDraft, type Element, type Block, type Child,\n} from '../constants/types';\nimport {type Properties as MessageProperties} from '../components/message';\nimport parser from '../parser';\nimport getType from '../utils/get-type';\nimport {warnIfTooMany, warnIfTooLong} from '../utils/validation';\nimport {\n initContext, pushPath, popPath, type ValidationMode,\n} from '../utils/validation-context';\nimport {MAX_BLOCKS, MAX_MESSAGE_TEXT, RECOMMENDED_MESSAGE_TEXT} from '../constants/limits';\n\n/**\n * Options passed to `render()`, `renderToMessage()`, and `renderToBlocks()`.\n *\n * @property validate - Validation mode. Defaults to `'warn'`.\n * - `'warn'` — log warnings via `console.warn` (default)\n * - `'strict'` — throw `SlackblockValidationError` on any violation\n * - `'off'` — disable validation entirely\n */\nexport type RenderOptions = {validate?: ValidationMode};\n\n/**\n * Renders JSX children directly to a `Block[]` array, without requiring a\n * `<Message>` wrapper. Useful for modals, home tabs, and other surfaces that\n * accept a blocks array rather than a full message payload.\n */\nexport const renderToBlocks = (element: Child, options?: RenderOptions): Block[] => {\n initContext(options?.validate ?? 'warn');\n // Unwrap top-level fragments so the parser receives their children directly.\n const child: Child\n = typeof element === 'object'\n && element !== null\n && !Array.isArray(element)\n && (element).type === 'fragment'\n ? (element).props.children as Child\n : element;\n const result = parser(child);\n return result.blocks ?? [];\n};\n\nconst applyMessageMetadata = (json: SlackMessageDraft, properties: MessageProperties): void => {\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\n/**\n * Renders a `<Message>` JSX tree to a full Slack message payload.\n *\n * The result is a plain object ready to spread into `chat.postMessage`.\n * The top-level element must be a `<Message>` — a `TypeError` is thrown otherwise.\n *\n * @example\n * ```tsx\n * import render from 'slackblock';\n * import { Message, Header } from 'slackblock/block';\n *\n * const message = render(\n * <Message text=\"Hello\">\n * <Header text=\"Hello world\" />\n * </Message>\n * );\n *\n * await slackClient.chat.postMessage({ channel: '#general', ...message });\n * ```\n */\nconst render = (element: Element, options?: RenderOptions): SlackMessage => {\n initContext(options?.validate ?? 'warn');\n\n const properties = element.props as MessageProperties;\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 pushPath('Message');\n let json: SlackMessageDraft;\n try {\n json = {...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.text && properties.text.length > MAX_MESSAGE_TEXT) {\n warnIfTooLong(`Message text (Slack will truncate beyond ${MAX_MESSAGE_TEXT} chars)`, properties.text, MAX_MESSAGE_TEXT);\n } else if (properties.text) {\n warnIfTooLong('Message text (recommended max for best results)', properties.text, RECOMMENDED_MESSAGE_TEXT);\n }\n\n applyMessageMetadata(json, properties);\n\n if (properties.color && json.blocks) {\n json.attachments = [\n {\n fallback: json.text,\n color: properties.color,\n blocks: json.blocks,\n },\n ];\n\n delete json.blocks;\n }\n\n if (json.blocks) {\n warnIfTooMany('Message blocks', json.blocks, MAX_BLOCKS);\n }\n } finally {\n popPath();\n }\n\n return json as SlackMessage;\n};\n\nexport default render;\n\n/**\n * Named alias for {@link render}. Produces a full Slack message payload\n * (including `text`, `blocks`, and optional `attachments` when `color` is set).\n */\nexport {render as renderToMessage};\n","/**\n * Escapes Slack mrkdwn special characters in a string to prevent unintended\n * formatting. Use this when inserting untrusted user content into mrkdwn fields.\n *\n * Escapes: `&` `<` `>` `*` `_` `~` `` ` ``\n *\n * @example\n * ```ts\n * import { escapeMrkdwn } from 'slackblock';\n *\n * const safe = escapeMrkdwn('Hello *world* <script>');\n * // → \"Hello \\u200B*world\\u200B* &lt;script&gt;\"\n * ```\n */\nexport const escapeMrkdwn = (text: string): string =>\n text\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll(/[*_~`]/g, '\\u200B$&');\n","import {type Block} from '../constants/types';\n\n/**\n * Returns a Slack Block Kit Builder URL for previewing the given blocks.\n * Open the URL in a browser to inspect layout and interactivity.\n */\nexport const blockKitBuilderUrl = (blocks: Block[]): string =>\n `https://app.slack.com/block-kit-builder#${JSON.stringify({blocks})}`;\n"],"mappings":"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","names":["image_default","text_default","section_default","text_default","image_default","text_default","section_default"]}
@@ -0,0 +1,22 @@
1
+ import { E as Element, S as SlackMessage, C as Child, B as Block } from './types.d-BHoTwZUO.cjs';
2
+ import '@slack/types';
3
+
4
+ type ValidationMode = 'off' | 'warn' | 'strict';
5
+
6
+ type RenderOptions = {
7
+ validate?: ValidationMode;
8
+ };
9
+ declare const renderToBlocks: (element: Child, options?: RenderOptions) => Block[];
10
+ declare const render: (element: Element, options?: RenderOptions) => SlackMessage;
11
+
12
+ declare class SlackblockValidationError extends Error {
13
+ readonly path: string;
14
+ readonly rule: string;
15
+ constructor(message: string, path: string, rule: string);
16
+ }
17
+
18
+ declare const escapeMrkdwn: (text: string) => string;
19
+
20
+ declare const blockKitBuilderUrl: (blocks: Block[]) => string;
21
+
22
+ export { type RenderOptions, SlackblockValidationError, type ValidationMode, blockKitBuilderUrl, render as default, escapeMrkdwn, renderToBlocks, render as renderToMessage };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,22 @@
1
- import { E as Element, S as SlackMessage } from './types.d-0WEt-h92.js';
2
- import 'react';
1
+ import { E as Element, S as SlackMessage, C as Child, B as Block } from './types.d-BHoTwZUO.js';
3
2
  import '@slack/types';
4
3
 
5
- declare const render: (element: Element) => SlackMessage;
4
+ type ValidationMode = 'off' | 'warn' | 'strict';
6
5
 
7
- export { render as default };
6
+ type RenderOptions = {
7
+ validate?: ValidationMode;
8
+ };
9
+ declare const renderToBlocks: (element: Child, options?: RenderOptions) => Block[];
10
+ declare const render: (element: Element, options?: RenderOptions) => SlackMessage;
11
+
12
+ declare class SlackblockValidationError extends Error {
13
+ readonly path: string;
14
+ readonly rule: string;
15
+ constructor(message: string, path: string, rule: string);
16
+ }
17
+
18
+ declare const escapeMrkdwn: (text: string) => string;
19
+
20
+ declare const blockKitBuilderUrl: (blocks: Block[]) => string;
21
+
22
+ export { type RenderOptions, SlackblockValidationError, type ValidationMode, blockKitBuilderUrl, render as default, escapeMrkdwn, renderToBlocks, render as renderToMessage };