react-blockkit 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Block.d.ts.map +1 -1
- package/dist/blocks/AdvancedBlocks.d.ts +2 -2
- package/dist/blocks/AdvancedBlocks.d.ts.map +1 -1
- package/dist/blocks/BasicBlocks.d.ts +2 -2
- package/dist/blocks/BasicBlocks.d.ts.map +1 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/elements/Elements.d.ts +6 -6
- package/dist/elements/Elements.d.ts.map +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +28 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.js +2956 -2942
- package/dist/index.js.map +1 -1
- package/dist/text/Text.d.ts +0 -2
- package/dist/text/Text.d.ts.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../../node_modules/.pnpm/@stylexjs+stylex@0.19.0/node_modules/@stylexjs/stylex/lib/es/stylex.mjs","../src/assert-never.ts","../src/context.tsx","../src/errors.ts","../src/runtime.ts","../src/safe-url.ts","../src/tokens.stylex.ts","../src/styles.ts","../src/constants.ts","../src/validation.ts","../src/text/date.ts","../src/text/emoji.ts","../src/text/RichText.tsx","../src/elements/Elements.tsx","../src/text/Mrkdwn.tsx","../src/text/Text.tsx","../src/text/Markdown.tsx","../src/blocks/BasicBlocks.tsx","../src/blocks/AdvancedBlocks.tsx","../src/blocks/Charts.tsx","../src/blocks/InteractiveBlocks.tsx","../src/Block.tsx","../src/BlockKit.tsx"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n","export function assertNever(value: never): never {\n throw new TypeError(`Unreachable value: ${JSON.stringify(value)}`);\n}\n","import { createContext, useContext, useMemo, type ReactElement, type ReactNode } from \"react\";\nimport type { BlockKitAction, BlockKitResolvers, BlockKitSurface } from \"./types.js\";\n\ninterface RenderContextValue {\n readonly onAction: ((action: BlockKitAction) => void) | undefined;\n readonly resolvers: BlockKitResolvers;\n readonly surface: BlockKitSurface;\n}\n\nconst EMPTY_RESOLVERS: BlockKitResolvers = {};\n\nconst DEFAULT_CONTEXT: RenderContextValue = {\n onAction: undefined,\n resolvers: EMPTY_RESOLVERS,\n surface: \"message\",\n};\n\nconst RenderContext = createContext<RenderContextValue>(DEFAULT_CONTEXT);\n\nexport interface BlockKitProviderProps {\n readonly children: ReactNode;\n readonly onAction?: ((action: BlockKitAction) => void) | undefined;\n readonly resolvers?: BlockKitResolvers | undefined;\n readonly surface?: BlockKitSurface | undefined;\n}\n\nexport function BlockKitProvider({\n children,\n onAction,\n resolvers = EMPTY_RESOLVERS,\n surface = \"message\",\n}: BlockKitProviderProps): ReactElement {\n const value = useMemo<RenderContextValue>(\n () => ({ onAction, resolvers, surface }),\n [onAction, resolvers, surface],\n );\n\n return <RenderContext.Provider value={value}>{children}</RenderContext.Provider>;\n}\n\nexport function useBlockKitContext(): RenderContextValue {\n return useContext(RenderContext);\n}\n","export type BlockKitInvariantCode =\n | \"invalid_json\"\n | \"invalid_type\"\n | \"missing_field\"\n | \"invalid_value\"\n | \"limit_exceeded\"\n | \"surface_mismatch\"\n | \"duplicate_id\"\n | \"unsupported_block\"\n | \"unsupported_element\";\n\nexport interface BlockKitInvariantDetails {\n readonly code: BlockKitInvariantCode;\n readonly path: string;\n}\n\nexport class BlockKitInvariantError extends Error {\n readonly code: BlockKitInvariantCode;\n readonly path: string;\n override readonly name: string;\n\n constructor(message: string, details: BlockKitInvariantDetails) {\n super(`${details.path}: ${message}`);\n this.code = details.code;\n this.path = details.path;\n this.name = \"BlockKitInvariantError\";\n }\n}\n","export type UnknownRecord = Readonly<Record<string, unknown>>;\n\nexport function isRecord(value: unknown): value is UnknownRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function discriminator(value: unknown): string | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n return typeof value[\"type\"] === \"string\" ? value[\"type\"] : undefined;\n}\n\nexport function blockIdentifier(value: unknown): string | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n return typeof value[\"block_id\"] === \"string\" ? value[\"block_id\"] : undefined;\n}\n\nexport function fallbackLabel(value: unknown, category: string): string {\n if (!isRecord(value)) {\n return `Unsupported ${category}`;\n }\n for (const key of [\"text\", \"label\", \"name\", \"id\", \"url\"] as const) {\n const candidate = value[key];\n if (typeof candidate === \"string\" && candidate.length > 0) {\n return candidate;\n }\n }\n const type = discriminator(value);\n return type === undefined ? `Unsupported ${category}` : `Unsupported ${category}: ${type}`;\n}\n","export function safeHref(href: string | undefined): string | undefined {\n return href !== undefined && /^(?:https?:|mailto:)/i.test(href) ? href : undefined;\n}\n","import * as stylex from \"@stylexjs/stylex\";\ntype TokenName = \"border\" | \"borderStrong\" | \"chartAreaFallbackOpacity\" | \"chartSeries1\" | \"chartSeries2\" | \"chartSeries3\" | \"chartSeries4\" | \"chartSeries5\" | \"chartSeries6\" | \"chartSeries7\" | \"chartSeries8\" | \"chartSeries9\" | \"chartSeries10\" | \"chartSeries11\" | \"chartSeries12\" | \"chartSeriesTint1\" | \"chartSeriesTint2\" | \"chartSeriesTint3\" | \"chartSeriesTint4\" | \"chartSeriesTint5\" | \"chartSeriesTint6\" | \"chartTickFontFamily\" | \"chartTickText\" | \"codeSurface\" | \"codeText\" | \"codeBorder\" | \"controlBorder\" | \"contextText\" | \"danger\" | \"dangerHover\" | \"fadedText\" | \"focus\" | \"fontFamily\" | \"fontSize\" | \"info\" | \"inlineCodeSurface\" | \"largeFontSize\" | \"largeLineHeight\" | \"lineHeight\" | \"link\" | \"linkHover\" | \"mentionSurface\" | \"monoFamily\" | \"outlineFaint\" | \"primary\" | \"primaryHover\" | \"quoteBar\" | \"radiusLarge\" | \"radiusMedium\" | \"radiusSmall\" | \"selectionSurface\" | \"shadow\" | \"smallFontSize\" | \"smallLineHeight\" | \"space1\" | \"space2\" | \"space3\" | \"space4\" | \"space5\" | \"space6\" | \"success\" | \"sunkenBand\" | \"surface\" | \"surfaceRaised\" | \"surfaceSunken\" | \"text\" | \"textFaint\" | \"textSecondary\" | \"warning\";\ntype TokenValues = Readonly<Record<TokenName, string>>;\nexport const tokens: stylex.VarGroup<TokenValues> = {\n surface: \"var(--xf210bc)\",\n surfaceRaised: \"var(--xop8b6t)\",\n surfaceSunken: \"var(--xajfn77)\",\n text: \"var(--x9fzz95)\",\n textSecondary: \"var(--xkl90bz)\",\n textFaint: \"var(--x1wgu5h0)\",\n fadedText: \"var(--x10ufbl0)\",\n contextText: \"var(--xvbs4la)\",\n link: \"var(--x7yxiqt)\",\n linkHover: \"var(--x1vk4vvw)\",\n border: \"var(--x1k1x5vw)\",\n borderStrong: \"var(--xvml0ot)\",\n outlineFaint: \"var(--xs7wnl2)\",\n quoteBar: \"var(--x1s0fkf6)\",\n sunkenBand: \"var(--x1q3wvl1)\",\n focus: \"var(--x1lxtqoo)\",\n primary: \"var(--x60yy18)\",\n primaryHover: \"var(--x1boqxxr)\",\n danger: \"var(--xvck1iw)\",\n dangerHover: \"var(--xuxyi6r)\",\n warning: \"var(--x1h5952)\",\n info: \"var(--x1ewt0uj)\",\n success: \"var(--x1iofpsc)\",\n codeSurface: \"var(--xosg8sf)\",\n codeText: \"var(--xixxt1k)\",\n codeBorder: \"var(--x1pl7a27)\",\n inlineCodeSurface: \"var(--xufkk4o)\",\n controlBorder: \"var(--x1sshfsp)\",\n mentionSurface: \"var(--x1fp2zh6)\",\n selectionSurface: \"var(--x1woami9)\",\n shadow: \"var(--xy8szbr)\",\n fontFamily: \"var(--xpso4pg)\",\n monoFamily: \"var(--xz0850p)\",\n fontSize: \"var(--x187q4sc)\",\n lineHeight: \"var(--xly840x)\",\n smallFontSize: \"var(--x1td96tq)\",\n smallLineHeight: \"var(--x1aku1qx)\",\n largeFontSize: \"var(--x1w2qy7r)\",\n largeLineHeight: \"var(--x1gdkpgo)\",\n radiusSmall: \"var(--xk8bvd3)\",\n radiusMedium: \"var(--xw6fjdp)\",\n radiusLarge: \"var(--x1anb6a2)\",\n space1: \"var(--xyqg4g)\",\n space2: \"var(--xce4sdd)\",\n space3: \"var(--x1aazw3)\",\n space4: \"var(--x9neswr)\",\n space5: \"var(--x2wog52)\",\n space6: \"var(--xf76y9a)\",\n chartTickText: \"var(--xp6fcxv)\",\n chartTickFontFamily: \"var(--xwcrna3)\",\n chartAreaFallbackOpacity: \"var(--x1bv6jb3)\",\n chartSeries1: \"var(--xgbw59a)\",\n chartSeries2: \"var(--x1y9reb)\",\n chartSeries3: \"var(--xtyg07v)\",\n chartSeries4: \"var(--x1efc3vk)\",\n chartSeries5: \"var(--xekxuhj)\",\n chartSeries6: \"var(--xswpqcc)\",\n chartSeries7: \"var(--x119nunw)\",\n chartSeries8: \"var(--x18hclru)\",\n chartSeries9: \"var(--x5a2rib)\",\n chartSeries10: \"var(--x1uug2l2)\",\n chartSeries11: \"var(--xlxwzi2)\",\n chartSeries12: \"var(--x14ykvsx)\",\n chartSeriesTint1: \"var(--xht6yz5)\",\n chartSeriesTint2: \"var(--x5pc1fo)\",\n chartSeriesTint3: \"var(--xsr4xjm)\",\n chartSeriesTint4: \"var(--xl5j2un)\",\n chartSeriesTint5: \"var(--x1nud87m)\",\n chartSeriesTint6: \"var(--x1t1bkho)\",\n __varGroupHash__: \"xpd22m1\"\n};\nexport const lightTheme: stylex.Theme<typeof tokens> = {\n xpd22m1: \"x1l73jb5 xpd22m1\",\n $$css: true\n};\nexport const darkTheme: stylex.Theme<typeof tokens> = {\n xpd22m1: \"xky7mqn xpd22m1\",\n $$css: true\n};","import * as stylex from \"@stylexjs/stylex\";\nimport \"./tokens.stylex.js\";\nimport { tokens } from \"./tokens.stylex.js\";\ntype StyleKey = \"accessory\" | \"accessoryImage\" | \"actions\" | \"alert\" | \"alertError\" | \"alertInfo\" | \"alertSuccess\" | \"alertWarning\" | \"block\" | \"bold\" | \"button\" | \"buttonDanger\" | \"buttonPrimary\" | \"card\" | \"cardActions\" | \"cardContent\" | \"cardHeading\" | \"cardHero\" | \"cardIcon\" | \"cardTitle\" | \"carousel\" | \"carouselCard\" | \"chartAreaFallbackFill\" | \"chartAreaFill\" | \"chartCanvas\" | \"chartCard\" | \"chartContent\" | \"chartGridline\" | \"chartLegend\" | \"chartLegendCartesian\" | \"chartLegendItem\" | \"chartLegendSwatch\" | \"chartLinePath\" | \"chartPlotArea\" | \"chartScroller\" | \"chartSvg\" | \"chartTickText\" | \"chartTitle\" | \"chartXAxisLabel\" | \"chartYAxisLabel\" | \"chartYAxisLabelText\" | \"choice\" | \"choiceGroup\" | \"colorSwatch\" | \"container\" | \"containerBody\" | \"containerHeader\" | \"containerHeaderDivider\" | \"context\" | \"contextElement\" | \"contextImage\" | \"contextText\" | \"dataTable\" | \"dataTableBand\" | \"dataTableBandUnpaginated\" | \"dataTableFilter\" | \"dataTableFilterInput\" | \"dataTableHeaderBar\" | \"dataTableIconButton\" | \"dataTablePageButton\" | \"dataTablePageButtonActive\" | \"dataTablePageChevron\" | \"dataTablePagination\" | \"dataTableRadiusBottomEnd\" | \"dataTableRadiusBottomStart\" | \"dataTableRadiusTopEnd\" | \"dataTableRadiusTopStart\" | \"dataTableTable\" | \"dataTableTd\" | \"dataTableTh\" | \"dataTableTitle\" | \"divider\" | \"fields\" | \"file\" | \"heading\" | \"heading1\" | \"heading2\" | \"heading3\" | \"heading4\" | \"iconButton\" | \"image\" | \"inlineCode\" | \"input\" | \"inputBlock\" | \"inputLabel\" | \"italic\" | \"link\" | \"list\" | \"listBullet\" | \"listBulletAlternate\" | \"listBulletSquare\" | \"listItemBullet\" | \"listItemOrdered\" | \"listOrdered\" | \"listOrderedAlpha\" | \"listOrderedRoman\" | \"markdown\" | \"mention\" | \"overflowButton\" | \"picker\" | \"pickerChevron\" | \"pickerIcon\" | \"pieSlice\" | \"plan\" | \"pre\" | \"quote\" | \"reference\" | \"required\" | \"richBorder\" | \"richSection\" | \"richText\" | \"root\" | \"rootDark\" | \"rootLight\" | \"section\" | \"sectionContent\" | \"select\" | \"smallText\" | \"strike\" | \"table\" | \"tableCell\" | \"tableCellFirstColumn\" | \"tableCellWrapped\" | \"tableHeader\" | \"tableScroller\" | \"task\" | \"taskHeading\" | \"taskStatus\" | \"text\" | \"unhandled\" | \"underline\" | \"visuallyHidden\";\nexport const styles: Readonly<Record<StyleKey, stylex.StyleXStyles>> = {\n root: {\n kWkggS: \"xfs8zev\",\n kMwMTN: \"xr3bju4\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x1rrsw0e\",\n k75w0D: \"xyg637s\",\n kLWn49: \"xtyajrp\",\n ks0D6T: \"x193iq5w\",\n k7Eaqz: \"xeuugli\",\n kHjlTd: \"x1mzt3pk\",\n kGO01o: \"xdzjq9u\",\n kJwUce: \"xfqjyog\",\n khiITx: \"xvmahel\",\n $$css: true\n },\n rootLight: {\n kQNsl9: \"x19aimcq\",\n $$css: true\n },\n rootDark: {\n kQNsl9: \"xntwwlm\",\n $$css: true\n },\n block: {\n k1K539: \"x4vbgl9\",\n k7Eaqz: \"xeuugli\",\n k8WAf4: \"x1hq2hf5\",\n $$css: true\n },\n section: {\n kGNEyG: \"x1cy8zhl\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"x1qughib\",\n k1K539: \"xqws75s\",\n keoZOQ: \"x1kadbbt\",\n k7Eaqz: \"xeuugli\",\n $$css: true\n },\n sectionContent: {\n kzQI83: \"x1iyjqo2\",\n k7Eaqz: \"xeuugli\",\n $$css: true\n },\n fields: {\n k1xSpc: \"xrvj5dj\",\n k1C7PZ: \"x180bbmo\",\n kumcoG: \"xz25sdm\",\n khm7nJ: \"xxs79tx\",\n $$css: true\n },\n accessory: {\n kmuXW: \"x2lah0s\",\n k1K539: \"xqws75s\",\n ks0D6T: \"x8jryan\",\n $$css: true\n },\n text: {\n kqGvvJ: \"x10im51j\",\n khDVqt: \"x126k92a\",\n $$css: true\n },\n smallText: {\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n kLWn49: \"x1bw88vm\",\n $$css: true\n },\n bold: {\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n italic: {\n kKX8nH: \"x1k4tb9n\",\n $$css: true\n },\n strike: {\n kMnn75: \"x5lhwog\",\n $$css: true\n },\n underline: {\n kMnn75: \"xujl8zx\",\n $$css: true\n },\n inlineCode: {\n kWkggS: \"x1e1z2ym\",\n kVAM5u: \"x1d5idl8\",\n kaIpWk: \"x18zih8k\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xdlcw9o\",\n kMv6JI: \"xmmtbmh\",\n kGuDYH: \"xfifm61\",\n kLWn49: \"xd4r4e8\",\n kGO01o: \"x1j85h84\",\n kLKAdn: \"x1nn3v0j\",\n kg3NbH: \"x3y1lgt\",\n $$css: true\n },\n link: {\n kMwMTN: \"x79zlbl xbxavls\",\n kMnn75: \"xkrqix3 x1sur9pj\",\n $$css: true\n },\n mention: {\n kWkggS: \"x1atmwd0\",\n kaIpWk: \"x18zih8k\",\n kMwMTN: \"x79zlbl\",\n kg3NbH: \"x5k8d2m\",\n $$css: true\n },\n colorSwatch: {\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x18zih8k\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x1rg5ohu\",\n kZKoxP: \"x1kpxq89\",\n k71WvV: \"x161fxfn\",\n kXLuUW: \"x19693qn\",\n kzqmXN: \"xsmyaan\",\n $$css: true\n },\n richText: {\n k1xSpc: \"x1lliihq\",\n $$css: true\n },\n richSection: {\n kAzted: \"x1a3d1is\",\n khDVqt: \"x126k92a\",\n $$css: true\n },\n list: {\n kqGvvJ: \"x10im51j\",\n kZCmMZ: \"x1c1uobl\",\n $$css: true\n },\n listItemBullet: {\n kTP8oX: \"xgaypha\",\n kgeoSG: \"x1cpjm7i\",\n kP1sEF: \"x1fhgk32\",\n kgzTxl: \"xf14d2n\",\n kgbC5f: \"x16z0v49\",\n krMjp6: \"x14uouze\",\n kiZrQH: \"x1n7jhte\",\n kJ33su: \"x3mu4kn\",\n kOlAkY: \"x1fitiw8\",\n kH6xsr: \"x3ct3a4\",\n keTefX: \"x9pbi5e\",\n $$css: true\n },\n listItemOrdered: {\n keTefX: \"xi37gm7\",\n kZCmMZ: \"x1j7nfk9\",\n $$css: true\n },\n listBullet: {\n k3DiCg: \"x14alfy\",\n kuPSpR: \"xo40evb\",\n k836YN: \"x1x74kny\",\n $$css: true\n },\n listBulletAlternate: {\n k3DiCg: \"x1ki3hy7\",\n kuPSpR: \"x1qsdrx0\",\n k836YN: \"x1eu2g3i\",\n $$css: true\n },\n listBulletSquare: {\n k3DiCg: \"xvrmgxb\",\n kuPSpR: \"xcwbexy\",\n k836YN: \"xgyhcuf\",\n $$css: true\n },\n listOrdered: {\n kH6xsr: \"x3yw8vx\",\n $$css: true\n },\n listOrderedAlpha: {\n kH6xsr: \"x1rrqm6h\",\n $$css: true\n },\n listOrderedRoman: {\n kH6xsr: \"x19k9dhg\",\n $$css: true\n },\n quote: {\n kLkRvE: \"xs55rtf\",\n kPB484: \"x17c2zl0\",\n kgeoSG: \"x1cpjm7i\",\n k5Ofw7: \"xhq5o37\",\n k96MEf: \"x1y3wzot\",\n kSJ0CW: \"x1682cnc\",\n kEoFBp: \"x1hmns74\",\n kOlAkY: \"x1eencha\",\n kMwMTN: \"xr3bju4\",\n kqGvvJ: \"x19v53j4\",\n kUOVxO: \"xrxpjvj\",\n kZCmMZ: \"x18jm10a\",\n kVAEAm: \"x1n2onr6\",\n khDVqt: \"x126k92a\",\n $$css: true\n },\n richBorder: {\n kGJrpR: \"xoih3la\",\n kVhnKS: \"x1t7ytsu\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n pre: {\n kWkggS: \"x1e1z2ym\",\n kVAM5u: \"x1d5idl8\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMv6JI: \"xmmtbmh\",\n kGuDYH: \"xfifm61\",\n kLWn49: \"xd4r4e8\",\n kqGvvJ: \"x19v53j4\",\n kXHlph: \"xw2csxc\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x17hd1w2\",\n kKi2Bq: \"x1k5ss6i\",\n khDVqt: \"x1sdyfia\",\n $$css: true\n },\n heading: {\n k63SB2: \"x1uu0p8\",\n k1K539: \"xqws75s\",\n keoZOQ: \"xcxhlts\",\n $$css: true\n },\n heading1: {\n kGuDYH: \"xlwa70p\",\n kLWn49: \"x4321kk\",\n $$css: true\n },\n heading2: {\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n $$css: true\n },\n heading3: {\n kGuDYH: \"x1rrsw0e\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"xtyajrp\",\n $$css: true\n },\n heading4: {\n kGuDYH: \"x1rrsw0e\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"xtyajrp\",\n $$css: true\n },\n divider: {\n kL6WhQ: \"x17fznl5\",\n kfdmCh: \"x1q0q8m5\",\n kt9PQ7: \"xso031l\",\n kPef9Z: \"x1ejq31n\",\n kJRH4f: \"xkgv12d\",\n k1K539: \"x81smla\",\n keoZOQ: \"xk59hdr\",\n kUOVxO: \"xrxpjvj\",\n $$css: true\n },\n image: {\n kaIpWk: \"x1hdofj4\",\n k1xSpc: \"x1lliihq\",\n kZKoxP: \"xt7dq6l\",\n kskxy: \"x2z3yb8\",\n ks0D6T: \"x193iq5w\",\n kVIFPx: \"x19kjcj4\",\n $$css: true\n },\n accessoryImage: {\n kaIpWk: \"xsqv9me\",\n kZKoxP: \"x14nwjz3\",\n keTefX: \"x34y3n0\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"x29ncy0\",\n $$css: true\n },\n context: {\n kGNEyG: \"x6s0dn4\",\n kMwMTN: \"xr3bju4\",\n k1xSpc: \"x78zum5\",\n kwnvtZ: \"x1a02dak\",\n kGuDYH: \"x1rrsw0e\",\n kOIVth: \"xxhr3t\",\n kLWn49: \"xtyajrp\",\n kqGvvJ: \"x19v53j4\",\n kAzted: \"x1a3d1is\",\n $$css: true\n },\n contextElement: {\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n k7Eaqz: \"xeuugli\",\n kwRFfy: \"x1o1cwpf\",\n $$css: true\n },\n contextText: {\n kMwMTN: \"xvuv4jf\",\n k1xSpc: \"xt0psk2\",\n kGuDYH: \"x6wetls\",\n kLWn49: \"x1bw88vm\",\n $$css: true\n },\n contextImage: {\n kaIpWk: \"x1cum3z5\",\n kZKoxP: \"x1qx5ct2\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"xw4jnvo\",\n $$css: true\n },\n actions: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kwnvtZ: \"x1a02dak\",\n kOIVth: \"x12n5c1t\",\n k1K539: \"x81smla\",\n $$css: true\n },\n button: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"x1itzlyb xb1q457\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kZKoxP: \"x1fgtraw\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"xggjnk3\",\n ks0D6T: \"x193iq5w\",\n kGO01o: \"x1j85h84\",\n kLKAdn: \"xexx8yu\",\n kg3NbH: \"x17hd1w2\",\n kMnn75: \"xkrqix3\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n buttonPrimary: {\n kWkggS: \"xt83fp8 x6oolif\",\n kMzoRj: \"xc342km\",\n kMwMTN: \"x1f7m26b\",\n $$css: true\n },\n buttonDanger: {\n kWkggS: \"x1cgfsch xrnjtfn\",\n kVAM5u: \"xo5q5bu\",\n kMwMTN: \"x1f7m26b\",\n $$css: true\n },\n overflowButton: {\n k7Eaqz: \"x17s4nb9\",\n kg3NbH: \"xlkn9b3\",\n kzqmXN: \"x1849jeq\",\n $$css: true\n },\n picker: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kkrTdU: \"x1ypdohk\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"xo1l8bm\",\n kZKoxP: \"x1fgtraw\",\n kjj79g: \"x1nhvcw1\",\n kLWn49: \"x1bw88vm\",\n k1K539: \"xqws75s\",\n kg3NbH: \"x1pbfunf\",\n kVAEAm: \"x1n2onr6\",\n kzqmXN: \"xg7gh6y\",\n $$css: true\n },\n pickerIcon: {\n kMwMTN: \"xvuv4jf\",\n kGuDYH: \"xfifm61\",\n kLqNvP: \"xuhg197\",\n kVAEAm: \"x10l6tqk\",\n $$css: true\n },\n pickerChevron: {\n kMwMTN: \"xvuv4jf\",\n kt4wiu: \"x1vikou4\",\n kVAEAm: \"x10l6tqk\",\n $$css: true\n },\n iconButton: {\n kaIpWk: \"x1hdofj4\",\n kZKoxP: \"x10w6t97\",\n kg3NbH: \"x17hd1w2\",\n $$css: true\n },\n select: {\n kysU6D: \"xjyslct\",\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"xif65rj\",\n kZKoxP: \"xc9qbxq\",\n ks0D6T: \"x193iq5w\",\n k7Eaqz: \"x5w4yej\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n choiceGroup: {\n ksu8eU: \"xng3xce\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n kogj98: \"x1ghz6dp\",\n kmVPX3: \"x1717udv\",\n $$css: true\n },\n choice: {\n kGNEyG: \"x1cy8zhl\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n inputBlock: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x17wmo0l\",\n $$css: true\n },\n inputLabel: {\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n required: {\n kMwMTN: \"xyd08hl\",\n keTefX: \"xwklpps\",\n $$css: true\n },\n input: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n kAzted: \"xu0aao5\",\n k8WAf4: \"x1t0vds8\",\n kg3NbH: \"x1r82r8e\",\n kHenm0: \"x288g5\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n tableScroller: {\n ks0D6T: \"x193iq5w\",\n kXHlph: \"xw2csxc\",\n k5wCbM: \"x1rohswg\",\n $$css: true\n },\n table: {\n kLvRdT: \"x1vathgz\",\n kheTzg: \"x1gukg7c\",\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n k8WAf4: \"x1hq2hf5\",\n $$css: true\n },\n tableCell: {\n kBCPoo: \"x1sllf4f\",\n k8ry5P: \"x18b5jzi\",\n ke9TFa: \"x1lun4ml\",\n kL6WhQ: \"x5s9v0k\",\n kfdmCh: \"x1q0q8m5\",\n kt9PQ7: \"xso031l\",\n k63SB2: \"xo1l8bm\",\n kZKoxP: \"x1fgtraw\",\n kGO01o: \"x18d9i69\",\n kLKAdn: \"x1nn3v0j\",\n kg3NbH: \"x1r82r8e\",\n k9WMMc: \"x1yc453h\",\n kXLuUW: \"x16dsc37\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n tableHeader: {\n kLZC3w: \"xmngdqm\",\n kPef9Z: \"x13fuv20\",\n kEafiO: \"x178xt8z\",\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n tableCellFirstColumn: {\n kGJrpR: \"x5xry9r\",\n kVhnKS: \"x1t7ytsu\",\n k2ei4v: \"xpilrb4\",\n $$css: true\n },\n tableCellWrapped: {\n khDVqt: \"xeaf4i8\",\n $$css: true\n },\n card: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kGVxlE: \"xmd40vq\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n k7Eaqz: \"xeuugli\",\n kVQacm: \"xb3r6kr\",\n $$css: true\n },\n cardHero: {\n kaIpWk: \"x2u8bby\",\n kskxy: \"x1xiyphd\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n cardContent: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"xzgshkr\",\n $$css: true\n },\n cardHeading: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n cardIcon: {\n kaIpWk: \"x1hdofj4\",\n kZKoxP: \"xc9qbxq\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"x14qfxbe\",\n $$css: true\n },\n cardTitle: {\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n cardActions: {\n kLZC3w: \"xawdbnq\",\n kPef9Z: \"x13fuv20\",\n kEafiO: \"x178xt8z\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"x13a6bvl\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n carousel: {\n k1xSpc: \"x78zum5\",\n kOIVth: \"xyf1f98\",\n ks0D6T: \"x193iq5w\",\n kXHlph: \"xw2csxc\",\n kGO01o: \"x1pl6tyu\",\n kc424l: \"xhfbhpw\",\n $$css: true\n },\n carouselCard: {\n kCS8Yb: \"x1a4bs9z\",\n kzQI83: \"x1c4vz4f\",\n kmuXW: \"x2lah0s\",\n k5xd4v: \"x1bhewko\",\n $$css: true\n },\n alert: {\n kGNEyG: \"x1cy8zhl\",\n kWkggS: \"x1fatxfb\",\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n alertInfo: {\n kGJrpR: \"x159hbhe\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n alertWarning: {\n kGJrpR: \"xyg2ju7\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n alertError: {\n kGJrpR: \"xrncz1v\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n alertSuccess: {\n kGJrpR: \"x1q3k51m\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n container: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kVQacm: \"xb3r6kr\",\n $$css: true\n },\n containerHeader: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"xzgshkr\",\n $$css: true\n },\n containerHeaderDivider: {\n kL6WhQ: \"x17fznl5\",\n kfdmCh: \"x1q0q8m5\",\n kt9PQ7: \"xso031l\",\n $$css: true\n },\n containerBody: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"xzgshkr\",\n $$css: true\n },\n task: {\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n taskHeading: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n k63SB2: \"x1xlr1w8\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n taskStatus: {\n kaIpWk: \"x1e6avla\",\n kGuDYH: \"x1j6dyjg\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"xd4r4e8\",\n kg3NbH: \"x17hd1w2\",\n kP9fke: \"xtvhhri\",\n $$css: true\n },\n plan: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n file: {\n kGNEyG: \"x6s0dn4\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"xyf1f98\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n markdown: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n chartScroller: {\n kqGvvJ: \"x1npninb\",\n ks0D6T: \"x193iq5w\",\n kXHlph: \"xw2csxc\",\n k5wCbM: \"x1rohswg\",\n $$css: true\n },\n chartCard: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"x1h41ylt\",\n kaIpWk: \"xegd2im\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n ks0D6T: \"xc5f494\",\n k7Eaqz: \"x13o0s5z\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n chartContent: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n chartTitle: {\n kMwMTN: \"xr3bju4\",\n kGuDYH: \"xlwa70p\",\n k63SB2: \"x1uu0p8\",\n kLWn49: \"x4321kk\",\n kqGvvJ: \"x10im51j\",\n $$css: true\n },\n chartPlotArea: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n $$css: true\n },\n chartCanvas: {\n kVAEAm: \"x1n2onr6\",\n $$css: true\n },\n chartSvg: {\n k1xSpc: \"x1lliihq\",\n kfSwDN: \"x87ps6o\",\n $$css: true\n },\n chartGridline: {\n kjVXCG: \"x1li7xbp\",\n $$css: true\n },\n chartTickText: {\n kDwRjp: \"xivj14e\",\n kMv6JI: \"x1xdnmw1\",\n kGuDYH: \"x6wetls\",\n $$css: true\n },\n chartLinePath: {\n kJdQPc: \"x1ck585c\",\n kfJifR: \"x8pzrqk\",\n $$css: true\n },\n chartAreaFill: {\n kVYP8I: \"xsn0423\",\n $$css: true\n },\n chartAreaFallbackFill: {\n kVYP8I: \"x1e57jxs\",\n $$css: true\n },\n pieSlice: {\n kjVXCG: \"x13lnj35\",\n kJdQPc: \"x1f6yumg\",\n kfJifR: \"x8pzrqk\",\n $$css: true\n },\n chartXAxisLabel: {\n kMwMTN: \"xr3bju4\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"x1bw88vm\",\n kLKAdn: \"xfja3g7\",\n kZCmMZ: \"xyuoyjg\",\n k9WMMc: \"x2b8uid\",\n $$css: true\n },\n chartYAxisLabel: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kZKoxP: \"xopl6j5\",\n k87sOh: \"xfr5jun\",\n kLqNvP: \"x1o0tod\",\n kjj79g: \"xl56j7k\",\n kVAEAm: \"x10l6tqk\",\n kzqmXN: \"x1xp8n7a\",\n $$css: true\n },\n chartYAxisLabelText: {\n kMwMTN: \"xr3bju4\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"x1bw88vm\",\n khDVqt: \"xuxw1ft\",\n kW8zPn: \"x35i7\",\n $$css: true\n },\n chartLegend: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kwnvtZ: \"x1a02dak\",\n kGuDYH: \"x6wetls\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"x1bw88vm\",\n kLKAdn: \"xfja3g7\",\n $$css: true\n },\n chartLegendCartesian: {\n kZCmMZ: \"xyuoyjg\",\n $$css: true\n },\n chartLegendItem: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n chartLegendSwatch: {\n kaIpWk: \"x10hpsqq\",\n k1xSpc: \"x1lliihq\",\n kZKoxP: \"x170jfvy\",\n kzqmXN: \"x1fsd2vl\",\n $$css: true\n },\n dataTable: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kqGvvJ: \"x19v53j4\",\n $$css: true\n },\n dataTableHeaderBar: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x1nye7i\",\n $$css: true\n },\n dataTableTitle: {\n kzQI83: \"x1iyjqo2\",\n k63SB2: \"x1uu0p8\",\n k7Eaqz: \"xeuugli\",\n kVQacm: \"xb3r6kr\",\n kg5iWk: \"xlyipyv\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n dataTableFilter: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n k1xSpc: \"x78zum5\",\n kmuXW: \"x2lah0s\",\n kGuDYH: \"x6wetls\",\n kZKoxP: \"x1fgtraw\",\n kg3NbH: \"x1nye7i\",\n kzqmXN: \"x35muul\",\n $$css: true\n },\n dataTableFilterInput: {\n kWkggS: \"xjbqb8w\",\n ksu8eU: \"xng3xce\",\n kMwMTN: \"xr3bju4\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x6wetls\",\n k7Eaqz: \"xeuugli\",\n kI3sdo: \"x1a2a7pz\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1nye7i\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n dataTableIconButton: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"xjbqb8w xb1q457\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xlx0kvv\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kmuXW: \"x2lah0s\",\n kZKoxP: \"x1fgtraw\",\n kjj79g: \"xl56j7k\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"xnjsko4\",\n kzqmXN: \"xgd8bvy\",\n $$css: true\n },\n dataTableBand: {\n kWkggS: \"xvpodxj\",\n kaIpWk: \"xegd2im\",\n kg3NbH: \"x1nye7i\",\n $$css: true\n },\n dataTableBandUnpaginated: {\n kGO01o: \"xdzjq9u\",\n $$css: true\n },\n dataTableTable: {\n kLvRdT: \"x1vathgz\",\n kheTzg: \"x1gukg7c\",\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n dataTableTh: {\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kZKoxP: \"xc9qbxq\",\n kLWn49: \"x1bw88vm\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1r82r8e\",\n k9WMMc: \"x1yc453h\",\n kXLuUW: \"xxymvpz\",\n $$css: true\n },\n dataTableTd: {\n kWkggS: \"x1itzlyb\",\n kLZC3w: \"xccwo0\",\n kPef9Z: \"x13fuv20\",\n kEafiO: \"x178xt8z\",\n kMwMTN: \"xr3bju4\",\n kZKoxP: \"xsdox4t\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1r82r8e\",\n k9WMMc: \"x1yc453h\",\n kXLuUW: \"xxymvpz\",\n $$css: true\n },\n dataTableRadiusTopStart: {\n krdFHd: \"x1kpm8pg\",\n $$css: true\n },\n dataTableRadiusTopEnd: {\n kfmiAY: \"xdd0blh\",\n $$css: true\n },\n dataTableRadiusBottomStart: {\n kVL7Gh: \"x6rc8tz\",\n $$css: true\n },\n dataTableRadiusBottomEnd: {\n kT0f0o: \"xdrwjz2\",\n $$css: true\n },\n dataTablePagination: {\n kGNEyG: \"x6s0dn4\",\n kMwMTN: \"xlx0kvv\",\n k1xSpc: \"x78zum5\",\n kGuDYH: \"x6wetls\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"x1bw88vm\",\n k8WAf4: \"x1t0vds8\",\n $$css: true\n },\n dataTablePageChevron: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"xjbqb8w\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"xng3xce\",\n kMwMTN: \"xlx0kvv\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kGuDYH: \"x1rrsw0e\",\n kZKoxP: \"x1qx5ct2\",\n kjj79g: \"xl56j7k\",\n kSiTet: \"x1hc1fzr x1lfpgzf\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"xnjsko4\",\n kzqmXN: \"xw4jnvo\",\n $$css: true\n },\n dataTablePageButton: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"xjbqb8w\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"xng3xce\",\n kMwMTN: \"x1alddev\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kGuDYH: \"x6wetls\",\n kZKoxP: \"x1qx5ct2\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"x1bw88vm\",\n keTefX: \"x34y3n0\",\n k7Eaqz: \"xt4ypqs\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1xijbu4\",\n $$css: true\n },\n dataTablePageButtonActive: {\n kWkggS: \"xt83fp8\",\n kMwMTN: \"x1f7m26b\",\n $$css: true\n },\n reference: {\n kWkggS: \"x199zixi\",\n kaIpWk: \"x18zih8k\",\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n kg3NbH: \"x1nye7i\",\n $$css: true\n },\n unhandled: {\n kWkggS: \"x1fatxfb\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n visuallyHidden: {\n kMcinP: \"xeh89do\",\n kz4h6p: \"x1hyvwdk\",\n kZKoxP: \"xjm9jq1\",\n kVQacm: \"xb3r6kr\",\n kVAEAm: \"x10l6tqk\",\n khDVqt: \"xuxw1ft\",\n kzqmXN: \"x1i1rx1s\",\n $$css: true\n }\n};\nexport interface ChartSeriesStyle {\n /** SVG fill in the series color (bars, pie slices). */\n readonly fill: stylex.StyleXStyles;\n /** SVG stroke in the series color (lines, area outlines). */\n readonly stroke: stylex.StyleXStyles;\n /** Legend swatch background in the series color. */\n readonly swatch: stylex.StyleXStyles;\n /**\n * Area fill. Indices 1-6 use the measured pastel tints; 7-12 fall back to\n * the series color (rendered at reduced opacity by the area style).\n */\n readonly tint: stylex.StyleXStyles;\n}\nconst seriesStyles = {\n fill1: {\n kDwRjp: \"xtzl89e\",\n $$css: true\n },\n fill2: {\n kDwRjp: \"xhtsb06\",\n $$css: true\n },\n fill3: {\n kDwRjp: \"x40gz2k\",\n $$css: true\n },\n fill4: {\n kDwRjp: \"x18bpcoy\",\n $$css: true\n },\n fill5: {\n kDwRjp: \"x1jfbz69\",\n $$css: true\n },\n fill6: {\n kDwRjp: \"xuvz3d1\",\n $$css: true\n },\n fill7: {\n kDwRjp: \"xgh9wk2\",\n $$css: true\n },\n fill8: {\n kDwRjp: \"xcik9sg\",\n $$css: true\n },\n fill9: {\n kDwRjp: \"x1ppuy4m\",\n $$css: true\n },\n fill10: {\n kDwRjp: \"x1kk73je\",\n $$css: true\n },\n fill11: {\n kDwRjp: \"x1grxdoe\",\n $$css: true\n },\n fill12: {\n kDwRjp: \"xn18j63\",\n $$css: true\n },\n stroke1: {\n kjVXCG: \"xr5mi3n\",\n $$css: true\n },\n stroke2: {\n kjVXCG: \"xxuc5cw\",\n $$css: true\n },\n stroke3: {\n kjVXCG: \"x2y61bw\",\n $$css: true\n },\n stroke4: {\n kjVXCG: \"x14vfwx2\",\n $$css: true\n },\n stroke5: {\n kjVXCG: \"x107q3u5\",\n $$css: true\n },\n stroke6: {\n kjVXCG: \"x15kttyg\",\n $$css: true\n },\n stroke7: {\n kjVXCG: \"xwopo54\",\n $$css: true\n },\n stroke8: {\n kjVXCG: \"x1n79cs4\",\n $$css: true\n },\n stroke9: {\n kjVXCG: \"xjwd1fr\",\n $$css: true\n },\n stroke10: {\n kjVXCG: \"xyr8hbx\",\n $$css: true\n },\n stroke11: {\n kjVXCG: \"xr5op8g\",\n $$css: true\n },\n stroke12: {\n kjVXCG: \"xiv3644\",\n $$css: true\n },\n swatch1: {\n kWkggS: \"x16spyt8\",\n $$css: true\n },\n swatch2: {\n kWkggS: \"xvqqcf1\",\n $$css: true\n },\n swatch3: {\n kWkggS: \"xanfl35\",\n $$css: true\n },\n swatch4: {\n kWkggS: \"x1uwglha\",\n $$css: true\n },\n swatch5: {\n kWkggS: \"xxdvdsm\",\n $$css: true\n },\n swatch6: {\n kWkggS: \"xp9jimw\",\n $$css: true\n },\n swatch7: {\n kWkggS: \"x1puna6j\",\n $$css: true\n },\n swatch8: {\n kWkggS: \"x1qvrrfc\",\n $$css: true\n },\n swatch9: {\n kWkggS: \"x1hpw8ye\",\n $$css: true\n },\n swatch10: {\n kWkggS: \"x1g11eq6\",\n $$css: true\n },\n swatch11: {\n kWkggS: \"x13m5t\",\n $$css: true\n },\n swatch12: {\n kWkggS: \"x1mppn65\",\n $$css: true\n },\n tint1: {\n kDwRjp: \"x1ttro82\",\n $$css: true\n },\n tint2: {\n kDwRjp: \"xqo2i6n\",\n $$css: true\n },\n tint3: {\n kDwRjp: \"x1e7csjy\",\n $$css: true\n },\n tint4: {\n kDwRjp: \"x1n92c87\",\n $$css: true\n },\n tint5: {\n kDwRjp: \"xs5yibb\",\n $$css: true\n },\n tint6: {\n kDwRjp: \"x1mnwzol\",\n $$css: true\n }\n};\nexport const defaultChartSeriesStyle: ChartSeriesStyle = {\n fill: seriesStyles.fill1,\n stroke: seriesStyles.stroke1,\n swatch: seriesStyles.swatch1,\n tint: seriesStyles.tint1\n};\nexport const chartSeriesStyles: readonly ChartSeriesStyle[] = [defaultChartSeriesStyle, {\n fill: seriesStyles.fill2,\n stroke: seriesStyles.stroke2,\n swatch: seriesStyles.swatch2,\n tint: seriesStyles.tint2\n}, {\n fill: seriesStyles.fill3,\n stroke: seriesStyles.stroke3,\n swatch: seriesStyles.swatch3,\n tint: seriesStyles.tint3\n}, {\n fill: seriesStyles.fill4,\n stroke: seriesStyles.stroke4,\n swatch: seriesStyles.swatch4,\n tint: seriesStyles.tint4\n}, {\n fill: seriesStyles.fill5,\n stroke: seriesStyles.stroke5,\n swatch: seriesStyles.swatch5,\n tint: seriesStyles.tint5\n}, {\n fill: seriesStyles.fill6,\n stroke: seriesStyles.stroke6,\n swatch: seriesStyles.swatch6,\n tint: seriesStyles.tint6\n}, {\n fill: seriesStyles.fill7,\n stroke: seriesStyles.stroke7,\n swatch: seriesStyles.swatch7,\n tint: seriesStyles.fill7\n}, {\n fill: seriesStyles.fill8,\n stroke: seriesStyles.stroke8,\n swatch: seriesStyles.swatch8,\n tint: seriesStyles.fill8\n}, {\n fill: seriesStyles.fill9,\n stroke: seriesStyles.stroke9,\n swatch: seriesStyles.swatch9,\n tint: seriesStyles.fill9\n}, {\n fill: seriesStyles.fill10,\n stroke: seriesStyles.stroke10,\n swatch: seriesStyles.swatch10,\n tint: seriesStyles.fill10\n}, {\n fill: seriesStyles.fill11,\n stroke: seriesStyles.stroke11,\n swatch: seriesStyles.swatch11,\n tint: seriesStyles.fill11\n}, {\n fill: seriesStyles.fill12,\n stroke: seriesStyles.stroke12,\n swatch: seriesStyles.swatch12,\n tint: seriesStyles.fill12\n}];\nexport function joinClassNames(generated: string | undefined, supplied: string | undefined): string | undefined {\n if (generated === undefined) {\n return supplied;\n }\n if (supplied === undefined || supplied.length === 0) {\n return generated;\n }\n return `${generated} ${supplied}`;\n}","export const BLOCK_ID_MAX_CHARS = 255;\nexport const MESSAGE_MAX_BLOCKS = 50;\nexport const VIEW_MAX_BLOCKS = 100;\n\nexport const TEXT_OBJECT_MAX_CHARS = 3000;\nexport const SECTION_TEXT_MAX_CHARS = 3000;\nexport const SECTION_FIELD_MAX_CHARS = 2000;\nexport const SECTION_FIELDS_MAX = 10;\nexport const HEADER_TEXT_MAX_CHARS = 150;\nexport const HEADER_LEVEL_MAX = 4;\nexport const IMAGE_URL_MAX_CHARS = 3000;\nexport const IMAGE_ALT_MAX_CHARS = 2000;\nexport const IMAGE_TITLE_MAX_CHARS = 2000;\nexport const CONTEXT_ELEMENTS_MAX = 10;\nexport const ACTION_ELEMENTS_MAX = 25;\nexport const CONTEXT_ACTION_ELEMENTS_MAX = 5;\nexport const MARKDOWN_CUMULATIVE_MAX_CHARS = 12_000;\n\nexport const BUTTON_TEXT_MAX_CHARS = 75;\nexport const BUTTON_URL_MAX_CHARS = 3000;\nexport const BUTTON_VALUE_MAX_CHARS = 2000;\nexport const ACTION_ID_MAX_CHARS = 255;\n\nexport const TABLE_MAX_ROWS = 100;\nexport const TABLE_MAX_COLUMNS = 20;\nexport const TABLE_MAX_CHARS = 10_000;\nexport const DATA_TABLE_MAX_ROWS = 201;\nexport const DATA_TABLE_MAX_CHARS = 20_000;\nexport const DATA_TABLE_PAGE_SIZE_MAX = 100;\n\nexport const CHART_TITLE_MAX_CHARS = 50;\nexport const CHART_SERIES_MAX = 12;\nexport const CHART_SEGMENTS_MAX = 12;\nexport const CHART_POINTS_MAX = 20;\nexport const CHART_LABEL_MAX_CHARS = 20;\nexport const CHART_AXIS_LABEL_MAX_CHARS = 50;\n\n// Chart geometry measured in the Block Kit Builder on 2026-07-21; see\n// packages/react-renderer/docs/slack-style-baseline.md (\"Chart plot\n// geometry\"). Slack draws charts at absolute pixel coordinates and reflows\n// per container width instead of scaling a viewBox.\nexport const CHART_CARD_MIN_WIDTH = 400;\nexport const CHART_CARD_MAX_WIDTH = 624;\n/** Card horizontal padding (12px × 2) plus borders (1px × 2). */\nexport const CHART_SVG_INSET = 26;\nexport const CHART_SVG_HEIGHT = 360;\n/** Left gutter reserved for y ticks and the rotated y-axis label. */\nexport const CHART_PLOT_GUTTER = 74;\nexport const CHART_PLOT_TOP = 9;\nexport const CHART_PLOT_BOTTOM = 334;\nexport const PIE_CENTER_Y = 180;\nexport const PIE_RADIUS = 144;\n\nexport const CARD_TITLE_MAX_CHARS = 150;\nexport const CARD_BODY_MAX_CHARS = 200;\nexport const CARD_ACTIONS_MAX = 3;\nexport const CAROUSEL_CARDS_MAX = 10;\nexport const ALERT_TEXT_MAX_CHARS = 200;\nexport const CONTAINER_CHILDREN_MAX = 10;\nexport const CONTAINER_TITLE_MAX_CHARS = 150;\nexport const RICH_TEXT_LIST_INDENT_MAX = 8;\n\nexport const BLOCK_TYPES = [\n \"actions\",\n \"alert\",\n \"card\",\n \"carousel\",\n \"container\",\n \"context\",\n \"context_actions\",\n \"data_table\",\n \"data_visualization\",\n \"divider\",\n \"file\",\n \"header\",\n \"image\",\n \"input\",\n \"markdown\",\n \"plan\",\n \"rich_text\",\n \"section\",\n \"table\",\n \"task_card\",\n \"video\",\n] as const;\n\nexport type BlockType = (typeof BLOCK_TYPES)[number];\n","import {\n ACTION_ELEMENTS_MAX,\n ACTION_ID_MAX_CHARS,\n ALERT_TEXT_MAX_CHARS,\n BLOCK_ID_MAX_CHARS,\n BUTTON_TEXT_MAX_CHARS,\n BUTTON_URL_MAX_CHARS,\n BUTTON_VALUE_MAX_CHARS,\n CARD_ACTIONS_MAX,\n CARD_BODY_MAX_CHARS,\n CARD_TITLE_MAX_CHARS,\n CAROUSEL_CARDS_MAX,\n CHART_AXIS_LABEL_MAX_CHARS,\n CHART_LABEL_MAX_CHARS,\n CHART_POINTS_MAX,\n CHART_SEGMENTS_MAX,\n CHART_SERIES_MAX,\n CHART_TITLE_MAX_CHARS,\n CONTAINER_CHILDREN_MAX,\n CONTAINER_TITLE_MAX_CHARS,\n CONTEXT_ACTION_ELEMENTS_MAX,\n CONTEXT_ELEMENTS_MAX,\n DATA_TABLE_MAX_CHARS,\n DATA_TABLE_MAX_ROWS,\n DATA_TABLE_PAGE_SIZE_MAX,\n HEADER_LEVEL_MAX,\n HEADER_TEXT_MAX_CHARS,\n IMAGE_ALT_MAX_CHARS,\n IMAGE_TITLE_MAX_CHARS,\n IMAGE_URL_MAX_CHARS,\n MARKDOWN_CUMULATIVE_MAX_CHARS,\n MESSAGE_MAX_BLOCKS,\n RICH_TEXT_LIST_INDENT_MAX,\n SECTION_FIELD_MAX_CHARS,\n SECTION_FIELDS_MAX,\n SECTION_TEXT_MAX_CHARS,\n TABLE_MAX_CHARS,\n TABLE_MAX_COLUMNS,\n TABLE_MAX_ROWS,\n TEXT_OBJECT_MAX_CHARS,\n VIEW_MAX_BLOCKS,\n} from \"./constants.js\";\nimport { BlockKitInvariantError } from \"./errors.js\";\nimport type { BlockKitInvariantCode } from \"./errors.js\";\nimport type {\n BlockKitData,\n BlockKitInput,\n BlockKitPayload,\n BlockKitSurface,\n RenderableBlock,\n} from \"./types.js\";\n\ntype ValidationKey =\n | \"accessibility_label\"\n | \"accessory\"\n | \"action_id\"\n | \"actions\"\n | \"align\"\n | \"alt_text\"\n | \"author_name\"\n | \"axis_config\"\n | \"block_id\"\n | \"body\"\n | \"blocks\"\n | \"caption\"\n | \"channel_id\"\n | \"categories\"\n | \"chart\"\n | \"child_blocks\"\n | \"column_settings\"\n | \"data\"\n | \"default_collapsed\"\n | \"description\"\n | \"details\"\n | \"dispatch_action\"\n | \"element\"\n | \"elements\"\n | \"emoji\"\n | \"expand\"\n | \"external_id\"\n | \"fields\"\n | \"format\"\n | \"has_header_divider\"\n | \"hero_image\"\n | \"hint\"\n | \"icon\"\n | \"id\"\n | \"image_url\"\n | \"indent\"\n | \"initial_date\"\n | \"initial_date_time\"\n | \"initial_time\"\n | \"initial_value\"\n | \"is_collapsible\"\n | \"is_decimal_allowed\"\n | \"is_wrapped\"\n | \"label\"\n | \"language\"\n | \"level\"\n | \"max_files\"\n | \"message_ts\"\n | \"min_query_length\"\n | \"multiline\"\n | \"name\"\n | \"negative_button\"\n | \"offset\"\n | \"option_groups\"\n | \"optional\"\n | \"options\"\n | \"output\"\n | \"page_size\"\n | \"placeholder\"\n | \"positive_button\"\n | \"range\"\n | \"rich_text_title\"\n | \"row_header_column_index\"\n | \"rows\"\n | \"segments\"\n | \"series\"\n | \"slack_file\"\n | \"slack_icon\"\n | \"source\"\n | \"sources\"\n | \"status\"\n | \"style\"\n | \"subtitle\"\n | \"subtext\"\n | \"task_id\"\n | \"tasks\"\n | \"team_id\"\n | \"text\"\n | \"thumbnail_url\"\n | \"time\"\n | \"timestamp\"\n | \"timezone\"\n | \"title\"\n | \"title_url\"\n | \"trigger\"\n | \"type\"\n | \"unicode\"\n | \"url\"\n | \"user_id\"\n | \"usergroup_id\"\n | \"value\"\n | \"verbatim\"\n | \"video_url\"\n | \"width\"\n | \"workflow\"\n | \"x_label\"\n | \"y_label\";\n\ntype UnknownRecord = Readonly<Record<string, unknown> & Record<ValidationKey, unknown>>;\n\ninterface StringRules {\n readonly allowEmpty?: boolean;\n readonly max?: number;\n}\n\ninterface NumberRules {\n readonly integer?: boolean;\n readonly max?: number;\n readonly min?: number;\n}\n\nfunction fail(code: BlockKitInvariantCode, path: string, message: string): never {\n throw new BlockKitInvariantError(message, { code, path });\n}\n\nfunction invariant(\n condition: boolean,\n code: BlockKitInvariantCode,\n path: string,\n message: string,\n): asserts condition {\n if (!condition) {\n fail(code, path, message);\n }\n}\n\nfunction isRecord(value: unknown): value is UnknownRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertRecord(value: unknown, path: string): asserts value is UnknownRecord {\n invariant(isRecord(value), \"invalid_type\", path, \"expected an object\");\n}\n\nfunction assertArray(value: unknown, path: string): asserts value is readonly unknown[] {\n invariant(Array.isArray(value), \"invalid_type\", path, \"expected an array\");\n}\n\nfunction assertString(\n value: unknown,\n path: string,\n rules: StringRules = {},\n): asserts value is string {\n invariant(typeof value === \"string\", \"invalid_type\", path, \"expected a string\");\n if (rules.allowEmpty !== true) {\n invariant(value.length > 0, \"invalid_value\", path, \"must not be empty\");\n }\n if (rules.max !== undefined) {\n invariant(\n value.length <= rules.max,\n \"limit_exceeded\",\n path,\n `must contain at most ${String(rules.max)} characters`,\n );\n }\n}\n\nfunction assertOptionalString(value: unknown, path: string, rules: StringRules = {}): void {\n if (value !== undefined) {\n assertString(value, path, rules);\n }\n}\n\nfunction assertNumber(\n value: unknown,\n path: string,\n rules: NumberRules = {},\n): asserts value is number {\n invariant(\n typeof value === \"number\" && Number.isFinite(value),\n \"invalid_type\",\n path,\n \"expected a finite number\",\n );\n if (rules.integer === true) {\n invariant(Number.isInteger(value), \"invalid_value\", path, \"expected an integer\");\n }\n if (rules.min !== undefined) {\n invariant(value >= rules.min, \"invalid_value\", path, `must be at least ${String(rules.min)}`);\n }\n if (rules.max !== undefined) {\n invariant(value <= rules.max, \"invalid_value\", path, `must be at most ${String(rules.max)}`);\n }\n}\n\nfunction assertOptionalBoolean(value: unknown, path: string): void {\n if (value !== undefined) {\n invariant(typeof value === \"boolean\", \"invalid_type\", path, \"expected a boolean\");\n }\n}\n\nfunction assertType(record: UnknownRecord, expected: string, path: string): void {\n invariant(record.type === expected, \"invalid_value\", `${path}.type`, `expected \"${expected}\"`);\n}\n\nfunction assertOneOf(\n value: unknown,\n allowed: readonly string[],\n path: string,\n): asserts value is string {\n assertString(value, path);\n invariant(\n allowed.includes(value),\n \"invalid_value\",\n path,\n `expected one of: ${allowed.join(\", \")}`,\n );\n}\n\nfunction assertBlockBase(record: UnknownRecord, path: string): void {\n assertString(record.type, `${path}.type`);\n assertOptionalString(record.block_id, `${path}.block_id`, { max: BLOCK_ID_MAX_CHARS });\n}\n\nfunction assertTextObject(value: unknown, path: string, max = TEXT_OBJECT_MAX_CHARS): void {\n assertRecord(value, path);\n assertOneOf(value.type, [\"plain_text\", \"mrkdwn\"], `${path}.type`);\n assertString(value.text, `${path}.text`, { max });\n if (value.type === \"plain_text\") {\n assertOptionalBoolean(value.emoji, `${path}.emoji`);\n invariant(\n value.verbatim === undefined,\n \"invalid_value\",\n `${path}.verbatim`,\n \"verbatim is only legal on mrkdwn text\",\n );\n } else {\n assertOptionalBoolean(value.verbatim, `${path}.verbatim`);\n invariant(\n value.emoji === undefined,\n \"invalid_value\",\n `${path}.emoji`,\n \"emoji is only legal on plain_text\",\n );\n }\n}\n\nexport function assertTextObjectData(\n value: unknown,\n path: string = \"text\",\n max: number = TEXT_OBJECT_MAX_CHARS,\n): void {\n assertTextObject(value, path, max);\n}\n\nfunction assertPlainText(value: unknown, path: string, max = TEXT_OBJECT_MAX_CHARS): void {\n assertTextObject(value, path, max);\n invariant(\n isRecord(value) && value.type === \"plain_text\",\n \"invalid_value\",\n `${path}.type`,\n 'expected \"plain_text\"',\n );\n}\n\nfunction assertSlackFile(value: unknown, path: string): void {\n assertRecord(value, path);\n const hasId = value.id !== undefined;\n const hasUrl = value.url !== undefined;\n invariant(hasId !== hasUrl, \"invalid_value\", path, \"must contain exactly one of id or url\");\n if (hasId) {\n assertString(value.id, `${path}.id`);\n }\n if (hasUrl) {\n assertString(value.url, `${path}.url`, { max: IMAGE_URL_MAX_CHARS });\n }\n}\n\nfunction assertImage(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"image\", path);\n assertString(value.alt_text, `${path}.alt_text`, { max: IMAGE_ALT_MAX_CHARS });\n const hasUrl = value.image_url !== undefined;\n const hasFile = value.slack_file !== undefined;\n invariant(\n hasUrl !== hasFile,\n \"invalid_value\",\n path,\n \"must contain exactly one of image_url or slack_file\",\n );\n if (hasUrl) {\n assertString(value.image_url, `${path}.image_url`, { max: IMAGE_URL_MAX_CHARS });\n }\n if (hasFile) {\n assertSlackFile(value.slack_file, `${path}.slack_file`);\n }\n}\n\nexport function assertImageElementData(value: unknown, path: string = \"element\"): void {\n assertImage(value, path);\n}\n\nfunction assertOption(value: unknown, path: string): void {\n assertRecord(value, path);\n assertTextObject(value.text, `${path}.text`, BUTTON_TEXT_MAX_CHARS);\n assertOptionalString(value.value, `${path}.value`, { max: BUTTON_TEXT_MAX_CHARS });\n assertOptionalString(value.url, `${path}.url`, { max: BUTTON_URL_MAX_CHARS });\n if (value.description !== undefined) {\n assertPlainText(value.description, `${path}.description`, BUTTON_TEXT_MAX_CHARS);\n }\n}\n\nfunction assertOptions(value: unknown, path: string, max: number): void {\n assertArray(value, path);\n invariant(value.length > 0, \"missing_field\", path, \"must contain at least one option\");\n invariant(\n value.length <= max,\n \"limit_exceeded\",\n path,\n `must contain at most ${String(max)} options`,\n );\n value.forEach((option, index) => {\n assertOption(option, `${path}[${String(index)}]`);\n });\n}\n\nfunction assertActionMetadata(record: UnknownRecord, path: string): void {\n assertOptionalString(record.action_id, `${path}.action_id`, { max: ACTION_ID_MAX_CHARS });\n}\n\nfunction assertPlaceholder(record: UnknownRecord, path: string): void {\n if (record.placeholder !== undefined) {\n assertPlainText(record.placeholder, `${path}.placeholder`, HEADER_TEXT_MAX_CHARS);\n }\n}\n\nfunction assertButton(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"button\", path);\n assertActionMetadata(value, path);\n assertPlainText(value.text, `${path}.text`, BUTTON_TEXT_MAX_CHARS);\n assertOptionalString(value.url, `${path}.url`, { max: BUTTON_URL_MAX_CHARS });\n assertOptionalString(value.value, `${path}.value`, { max: BUTTON_VALUE_MAX_CHARS });\n assertOptionalString(value.accessibility_label, `${path}.accessibility_label`, {\n max: BUTTON_TEXT_MAX_CHARS,\n });\n if (value.style !== undefined) {\n assertOneOf(value.style, [\"primary\", \"danger\"], `${path}.style`);\n }\n}\n\nfunction assertStaticSelect(record: UnknownRecord, path: string): void {\n const hasOptions = record.options !== undefined;\n const hasGroups = record.option_groups !== undefined;\n invariant(\n hasOptions !== hasGroups,\n \"invalid_value\",\n path,\n \"must contain exactly one of options or option_groups\",\n );\n if (hasOptions) {\n assertOptions(record.options, `${path}.options`, 100);\n }\n if (hasGroups) {\n assertArray(record.option_groups, `${path}.option_groups`);\n invariant(\n record.option_groups.length <= 100,\n \"limit_exceeded\",\n `${path}.option_groups`,\n \"must contain at most 100 groups\",\n );\n record.option_groups.forEach((group, index) => {\n const groupPath = `${path}.option_groups[${String(index)}]`;\n assertRecord(group, groupPath);\n assertPlainText(group.label, `${groupPath}.label`, BUTTON_TEXT_MAX_CHARS);\n assertOptions(group.options, `${groupPath}.options`, 100);\n });\n }\n}\n\nfunction assertInteractiveElement(value: unknown, path: string): void {\n assertRecord(value, path);\n assertString(value.type, `${path}.type`);\n assertActionMetadata(value, path);\n assertPlaceholder(value, path);\n\n switch (value.type) {\n case \"button\":\n assertButton(value, path);\n return;\n case \"checkboxes\":\n case \"radio_buttons\":\n assertOptions(value.options, `${path}.options`, 10);\n return;\n case \"overflow\":\n assertOptions(value.options, `${path}.options`, 5);\n return;\n case \"static_select\":\n case \"multi_static_select\":\n assertStaticSelect(value, path);\n return;\n case \"external_select\":\n case \"multi_external_select\":\n if (value.min_query_length !== undefined) {\n assertNumber(value.min_query_length, `${path}.min_query_length`, {\n integer: true,\n min: 0,\n });\n }\n return;\n case \"users_select\":\n case \"multi_users_select\":\n case \"conversations_select\":\n case \"multi_conversations_select\":\n case \"channels_select\":\n case \"multi_channels_select\":\n return;\n case \"datepicker\":\n assertOptionalString(value.initial_date, `${path}.initial_date`);\n return;\n case \"datetimepicker\":\n if (value.initial_date_time !== undefined) {\n assertNumber(value.initial_date_time, `${path}.initial_date_time`, {\n integer: true,\n min: 0,\n });\n }\n return;\n case \"timepicker\":\n assertOptionalString(value.initial_time, `${path}.initial_time`);\n assertOptionalString(value.timezone, `${path}.timezone`);\n return;\n case \"plain_text_input\":\n case \"email_text_input\":\n case \"url_text_input\":\n case \"number_input\":\n assertOptionalString(value.initial_value, `${path}.initial_value`, {\n allowEmpty: true,\n });\n if (value.type === \"plain_text_input\") {\n assertOptionalBoolean(value.multiline, `${path}.multiline`);\n }\n if (value.type === \"number_input\") {\n invariant(\n typeof value.is_decimal_allowed === \"boolean\",\n \"missing_field\",\n `${path}.is_decimal_allowed`,\n \"expected a boolean\",\n );\n }\n return;\n case \"rich_text_input\":\n if (value.initial_value !== undefined) {\n assertRichTextBlock(value.initial_value, `${path}.initial_value`);\n }\n return;\n case \"file_input\":\n if (value.max_files !== undefined) {\n assertNumber(value.max_files, `${path}.max_files`, {\n integer: true,\n min: 1,\n max: 10,\n });\n }\n return;\n case \"workflow_button\":\n assertPlainText(value.text, `${path}.text`, BUTTON_TEXT_MAX_CHARS);\n assertRecord(value.workflow, `${path}.workflow`);\n assertRecord(value.workflow.trigger, `${path}.workflow.trigger`);\n assertString(value.workflow.trigger.url, `${path}.workflow.trigger.url`);\n return;\n default:\n fail(\"unsupported_element\", `${path}.type`, `unsupported element \"${value.type}\"`);\n }\n}\n\nexport function assertInteractiveElementData(value: unknown, path: string = \"element\"): void {\n assertInteractiveElement(value, path);\n}\n\nfunction assertRichTextStyle(value: unknown, path: string): void {\n if (value === undefined) {\n return;\n }\n assertRecord(value, path);\n for (const key of [\"bold\", \"code\", \"italic\", \"strike\", \"underline\"]) {\n assertOptionalBoolean(value[key], `${path}.${key}`);\n }\n}\n\nfunction assertRichTextInline(value: unknown, path: string): void {\n assertRecord(value, path);\n assertString(value.type, `${path}.type`);\n assertRichTextStyle(value.style, `${path}.style`);\n\n switch (value.type) {\n case \"text\":\n assertString(value.text, `${path}.text`, { allowEmpty: true });\n return;\n case \"link\":\n assertString(value.url, `${path}.url`);\n assertOptionalString(value.text, `${path}.text`, { allowEmpty: true });\n return;\n case \"emoji\":\n assertString(value.name, `${path}.name`);\n assertOptionalString(value.unicode, `${path}.unicode`);\n return;\n case \"user\":\n assertString(value.user_id, `${path}.user_id`);\n return;\n case \"usergroup\":\n assertString(value.usergroup_id, `${path}.usergroup_id`);\n return;\n case \"channel\":\n assertString(value.channel_id, `${path}.channel_id`);\n return;\n case \"team\":\n assertString(value.team_id, `${path}.team_id`);\n return;\n case \"broadcast\":\n assertOneOf(value.range, [\"here\", \"channel\", \"everyone\"], `${path}.range`);\n return;\n case \"date\":\n assertNumber(value.timestamp, `${path}.timestamp`, { integer: true, min: 0 });\n assertString(value.format, `${path}.format`);\n return;\n case \"color\":\n assertString(value.value, `${path}.value`);\n invariant(\n /^#[\\da-f]{6}$/i.test(value.value),\n \"invalid_value\",\n `${path}.value`,\n \"expected a six-digit hex color\",\n );\n return;\n case \"citation\":\n assertRecord(value.details, `${path}.details`);\n assertOptionalString(value.url, `${path}.url`);\n assertOptionalString(value.text, `${path}.text`, { allowEmpty: true });\n return;\n case \"attachment_mention\":\n case \"canvas\":\n case \"canvas_message_unfurl\":\n case \"canvas_user_mention\":\n case \"file\":\n case \"list_record\":\n case \"message_mention\":\n case \"salesforce_data_field\":\n case \"tag\":\n case \"work_object_mention\":\n case \"workflow_mention\":\n invariant(\n Object.keys(value).length > 1,\n \"missing_field\",\n path,\n `${value.type} must contain its reference fields`,\n );\n return;\n default:\n fail(\"unsupported_element\", `${path}.type`, `unsupported rich text element \"${value.type}\"`);\n }\n}\n\nfunction assertRichTextInlineArray(value: unknown, path: string): void {\n assertArray(value, path);\n value.forEach((element, index) => {\n assertRichTextInline(element, `${path}[${String(index)}]`);\n });\n}\n\nfunction assertRichTextBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"rich_text\", path);\n assertBlockBase(value, path);\n assertArray(value.elements, `${path}.elements`);\n\n value.elements.forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertRecord(element, elementPath);\n assertString(element.type, `${elementPath}.type`);\n switch (element.type) {\n case \"rich_text_section\":\n case \"rich_text_quote\":\n assertRichTextInlineArray(element.elements, `${elementPath}.elements`);\n return;\n case \"rich_text_list\":\n assertOneOf(element.style, [\"bullet\", \"ordered\"], `${elementPath}.style`);\n if (element.indent !== undefined) {\n assertNumber(element.indent, `${elementPath}.indent`, {\n integer: true,\n min: 0,\n max: RICH_TEXT_LIST_INDENT_MAX,\n });\n }\n if (element.offset !== undefined) {\n assertNumber(element.offset, `${elementPath}.offset`, { integer: true, min: 0 });\n }\n assertArray(element.elements, `${elementPath}.elements`);\n element.elements.forEach((section, sectionIndex) => {\n const sectionPath = `${elementPath}.elements[${String(sectionIndex)}]`;\n assertRecord(section, sectionPath);\n assertType(section, \"rich_text_section\", sectionPath);\n assertRichTextInlineArray(section.elements, `${sectionPath}.elements`);\n });\n return;\n case \"rich_text_preformatted\":\n assertArray(element.elements, `${elementPath}.elements`);\n element.elements.forEach((inline, inlineIndex) => {\n const inlinePath = `${elementPath}.elements[${String(inlineIndex)}]`;\n assertRichTextInline(inline, inlinePath);\n assertRecord(inline, inlinePath);\n invariant(\n inline.type === \"text\" || inline.type === \"link\",\n \"invalid_value\",\n `${inlinePath}.type`,\n \"preformatted text only accepts text or link elements\",\n );\n });\n assertOptionalString(element.language, `${elementPath}.language`);\n return;\n default:\n fail(\n \"unsupported_element\",\n `${elementPath}.type`,\n `unsupported rich text container \"${element.type}\"`,\n );\n }\n });\n}\n\nexport function assertRichTextBlockData(value: unknown, path: string = \"block\"): void {\n assertRichTextBlock(value, path);\n}\n\nfunction assertSectionBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"section\", path);\n assertBlockBase(value, path);\n const hasText = value.text !== undefined;\n const hasFields = value.fields !== undefined;\n invariant(hasText || hasFields, \"missing_field\", path, \"requires text or fields\");\n if (hasText) {\n assertTextObject(value.text, `${path}.text`, SECTION_TEXT_MAX_CHARS);\n }\n if (hasFields) {\n assertArray(value.fields, `${path}.fields`);\n invariant(\n value.fields.length > 0 && value.fields.length <= SECTION_FIELDS_MAX,\n \"limit_exceeded\",\n `${path}.fields`,\n `must contain 1–${String(SECTION_FIELDS_MAX)} text objects`,\n );\n value.fields.forEach((field, index) => {\n assertTextObject(field, `${path}.fields[${String(index)}]`, SECTION_FIELD_MAX_CHARS);\n });\n }\n if (value.accessory !== undefined) {\n assertRecord(value.accessory, `${path}.accessory`);\n if (value.accessory.type === \"image\") {\n assertImage(value.accessory, `${path}.accessory`);\n } else {\n assertInteractiveElement(value.accessory, `${path}.accessory`);\n invariant(\n ![\n \"datetimepicker\",\n \"file_input\",\n \"plain_text_input\",\n \"email_text_input\",\n \"url_text_input\",\n \"number_input\",\n \"rich_text_input\",\n ].includes(String(value.accessory.type)),\n \"invalid_value\",\n `${path}.accessory.type`,\n \"element is not legal as a section accessory\",\n );\n }\n }\n assertOptionalBoolean(value.expand, `${path}.expand`);\n}\n\nfunction assertHeaderBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"header\", path);\n assertBlockBase(value, path);\n assertPlainText(value.text, `${path}.text`, HEADER_TEXT_MAX_CHARS);\n if (value.level !== undefined) {\n assertNumber(value.level, `${path}.level`, {\n integer: true,\n min: 1,\n max: HEADER_LEVEL_MAX,\n });\n }\n}\n\nfunction assertImageBlock(value: unknown, path: string): void {\n assertImage(value, path);\n assertRecord(value, path);\n assertBlockBase(value, path);\n if (value.title !== undefined) {\n assertPlainText(value.title, `${path}.title`, IMAGE_TITLE_MAX_CHARS);\n }\n}\n\nfunction assertContextBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"context\", path);\n assertBlockBase(value, path);\n assertArray(value.elements, `${path}.elements`);\n invariant(\n value.elements.length > 0 && value.elements.length <= CONTEXT_ELEMENTS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(CONTEXT_ELEMENTS_MAX)} elements`,\n );\n value.elements.forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertRecord(element, elementPath);\n if (element.type === \"image\") {\n assertImage(element, elementPath);\n } else {\n assertTextObject(element, elementPath);\n }\n });\n}\n\nfunction assertActionsBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"actions\", path);\n assertBlockBase(value, path);\n assertArray(value.elements, `${path}.elements`);\n invariant(\n value.elements.length > 0 && value.elements.length <= ACTION_ELEMENTS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(ACTION_ELEMENTS_MAX)} elements`,\n );\n value.elements.forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertInteractiveElement(element, elementPath);\n assertRecord(element, elementPath);\n invariant(\n [\n \"button\",\n \"checkboxes\",\n \"datepicker\",\n \"datetimepicker\",\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 \"static_select\",\n \"multi_static_select\",\n \"overflow\",\n \"radio_buttons\",\n \"timepicker\",\n \"workflow_button\",\n \"rich_text_input\",\n ].includes(String(element.type)),\n \"invalid_value\",\n `${elementPath}.type`,\n \"element is not legal inside an actions block\",\n );\n });\n}\n\nfunction assertInputBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"input\", path);\n assertBlockBase(value, path);\n assertPlainText(value.label, `${path}.label`, 2000);\n if (value.hint !== undefined) {\n assertPlainText(value.hint, `${path}.hint`, 2000);\n }\n assertOptionalBoolean(value.optional, `${path}.optional`);\n assertOptionalBoolean(value.dispatch_action, `${path}.dispatch_action`);\n assertInteractiveElement(value.element, `${path}.element`);\n assertRecord(value.element, `${path}.element`);\n invariant(\n ![\"button\", \"overflow\", \"workflow_button\", \"icon_button\", \"feedback_buttons\"].includes(\n String(value.element.type),\n ),\n \"invalid_value\",\n `${path}.element.type`,\n \"element is not legal inside an input block\",\n );\n invariant(\n !(value.dispatch_action === true && value.element.type === \"file_input\"),\n \"invalid_value\",\n `${path}.dispatch_action`,\n \"dispatch_action is incompatible with file_input\",\n );\n}\n\nfunction tableCellTextLength(value: unknown): number {\n if (!isRecord(value)) {\n return 0;\n }\n if (value.type === \"raw_text\") {\n return typeof value.text === \"string\" ? value.text.length : 0;\n }\n if (value.type === \"raw_number\") {\n if (typeof value.text === \"string\") {\n return value.text.length;\n }\n return typeof value.value === \"number\" ? String(value.value).length : 0;\n }\n if (value.type === \"rich_text\" && Array.isArray(value.elements)) {\n let count = 0;\n for (const container of value.elements) {\n if (!isRecord(container) || !Array.isArray(container.elements)) {\n continue;\n }\n for (const inline of container.elements) {\n if (isRecord(inline)) {\n if (typeof inline.text === \"string\") {\n count += inline.text.length;\n } else if (typeof inline.url === \"string\") {\n count += inline.url.length;\n }\n }\n }\n }\n return count;\n }\n return 0;\n}\n\nfunction assertTableCell(value: unknown, path: string, allowRichText: boolean): void {\n assertRecord(value, path);\n assertString(value.type, `${path}.type`);\n switch (value.type) {\n case \"raw_text\":\n assertString(value.text, `${path}.text`);\n return;\n case \"raw_number\":\n assertNumber(value.value, `${path}.value`);\n assertOptionalString(value.text, `${path}.text`);\n return;\n case \"rich_text\":\n invariant(allowRichText, \"invalid_value\", path, \"rich_text is not legal in this row\");\n assertRichTextBlock(value, path);\n return;\n default:\n fail(\"invalid_value\", `${path}.type`, `unsupported table cell \"${value.type}\"`);\n }\n}\n\nfunction assertRows(\n value: unknown,\n path: string,\n maxRows: number,\n maxChars: number,\n richHeader: boolean,\n): number {\n assertArray(value, path);\n invariant(value.length > 0, \"missing_field\", path, \"must contain at least one row\");\n invariant(\n value.length <= maxRows,\n \"limit_exceeded\",\n path,\n `must contain at most ${String(maxRows)} rows`,\n );\n let columnCount: number | undefined;\n let characterCount = 0;\n value.forEach((row, rowIndex) => {\n const rowPath = `${path}[${String(rowIndex)}]`;\n assertArray(row, rowPath);\n invariant(\n row.length > 0 && row.length <= TABLE_MAX_COLUMNS,\n \"limit_exceeded\",\n rowPath,\n `must contain 1–${String(TABLE_MAX_COLUMNS)} cells`,\n );\n if (columnCount === undefined) {\n columnCount = row.length;\n } else {\n invariant(\n row.length === columnCount,\n \"invalid_value\",\n rowPath,\n \"all table rows must contain the same number of cells\",\n );\n }\n row.forEach((cell, columnIndex) => {\n assertTableCell(cell, `${rowPath}[${String(columnIndex)}]`, richHeader || rowIndex !== 0);\n characterCount += tableCellTextLength(cell);\n });\n });\n invariant(\n characterCount <= maxChars,\n \"limit_exceeded\",\n path,\n `cell content must contain at most ${String(maxChars)} characters`,\n );\n return columnCount ?? 0;\n}\n\nfunction assertTableBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"table\", path);\n assertBlockBase(value, path);\n assertRows(value.rows, `${path}.rows`, TABLE_MAX_ROWS, TABLE_MAX_CHARS, true);\n if (value.column_settings !== undefined) {\n assertArray(value.column_settings, `${path}.column_settings`);\n invariant(\n value.column_settings.length <= TABLE_MAX_COLUMNS,\n \"limit_exceeded\",\n `${path}.column_settings`,\n `must contain at most ${String(TABLE_MAX_COLUMNS)} entries`,\n );\n value.column_settings.forEach((setting, index) => {\n if (setting === null) {\n return;\n }\n const settingPath = `${path}.column_settings[${String(index)}]`;\n assertRecord(setting, settingPath);\n if (setting.align !== undefined) {\n assertOneOf(setting.align, [\"left\", \"center\", \"right\"], `${settingPath}.align`);\n }\n assertOptionalBoolean(setting.is_wrapped, `${settingPath}.is_wrapped`);\n });\n }\n}\n\nfunction assertDataTableBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"data_table\", path);\n assertBlockBase(value, path);\n assertString(value.caption, `${path}.caption`);\n const columnCount = assertRows(\n value.rows,\n `${path}.rows`,\n DATA_TABLE_MAX_ROWS,\n DATA_TABLE_MAX_CHARS,\n false,\n );\n assertArray(value.rows, `${path}.rows`);\n invariant(\n value.rows.length >= 2,\n \"invalid_value\",\n `${path}.rows`,\n \"requires a header row and at least one data row\",\n );\n if (value.page_size !== undefined) {\n assertNumber(value.page_size, `${path}.page_size`, {\n integer: true,\n min: 1,\n max: DATA_TABLE_PAGE_SIZE_MAX,\n });\n }\n if (value.row_header_column_index !== undefined) {\n assertNumber(value.row_header_column_index, `${path}.row_header_column_index`, {\n integer: true,\n min: 0,\n max: columnCount - 1,\n });\n }\n}\n\nfunction assertChartBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"data_visualization\", path);\n assertBlockBase(value, path);\n assertString(value.title, `${path}.title`, { max: CHART_TITLE_MAX_CHARS });\n assertRecord(value.chart, `${path}.chart`);\n assertString(value.chart.type, `${path}.chart.type`);\n if (value.chart.type === \"pie\") {\n assertArray(value.chart.segments, `${path}.chart.segments`);\n invariant(\n value.chart.segments.length > 0 && value.chart.segments.length <= CHART_SEGMENTS_MAX,\n \"limit_exceeded\",\n `${path}.chart.segments`,\n `must contain 1–${String(CHART_SEGMENTS_MAX)} segments`,\n );\n value.chart.segments.forEach((segment, index) => {\n const segmentPath = `${path}.chart.segments[${String(index)}]`;\n assertRecord(segment, segmentPath);\n assertString(segment.label, `${segmentPath}.label`, { max: CHART_LABEL_MAX_CHARS });\n assertNumber(segment.value, `${segmentPath}.value`, { min: Number.EPSILON });\n });\n return;\n }\n assertOneOf(value.chart.type, [\"bar\", \"area\", \"line\"], `${path}.chart.type`);\n assertArray(value.chart.series, `${path}.chart.series`);\n invariant(\n value.chart.series.length > 0 && value.chart.series.length <= CHART_SERIES_MAX,\n \"limit_exceeded\",\n `${path}.chart.series`,\n `must contain 1–${String(CHART_SERIES_MAX)} series`,\n );\n assertRecord(value.chart.axis_config, `${path}.chart.axis_config`);\n assertArray(value.chart.axis_config.categories, `${path}.chart.axis_config.categories`);\n invariant(\n value.chart.axis_config.categories.length > 0 &&\n value.chart.axis_config.categories.length <= CHART_POINTS_MAX,\n \"limit_exceeded\",\n `${path}.chart.axis_config.categories`,\n `must contain 1–${String(CHART_POINTS_MAX)} categories`,\n );\n const categories = new Set<string>();\n value.chart.axis_config.categories.forEach((category, index) => {\n const categoryPath = `${path}.chart.axis_config.categories[${String(index)}]`;\n assertString(category, categoryPath, {\n max: CHART_LABEL_MAX_CHARS,\n });\n invariant(\n !categories.has(category),\n \"invalid_value\",\n categoryPath,\n \"axis categories must be unique\",\n );\n categories.add(category);\n });\n assertOptionalString(value.chart.axis_config.x_label, `${path}.chart.axis_config.x_label`, {\n max: CHART_AXIS_LABEL_MAX_CHARS,\n });\n assertOptionalString(value.chart.axis_config.y_label, `${path}.chart.axis_config.y_label`, {\n max: CHART_AXIS_LABEL_MAX_CHARS,\n });\n const names = new Set<string>();\n value.chart.series.forEach((series, seriesIndex) => {\n const seriesPath = `${path}.chart.series[${String(seriesIndex)}]`;\n assertRecord(series, seriesPath);\n assertString(series.name, `${seriesPath}.name`, { max: CHART_LABEL_MAX_CHARS });\n invariant(\n !names.has(series.name),\n \"duplicate_id\",\n `${seriesPath}.name`,\n \"series names must be unique\",\n );\n names.add(series.name);\n assertArray(series.data, `${seriesPath}.data`);\n invariant(\n series.data.length > 0 && series.data.length <= CHART_POINTS_MAX,\n \"limit_exceeded\",\n `${seriesPath}.data`,\n `must contain 1–${String(CHART_POINTS_MAX)} points`,\n );\n invariant(\n series.data.length === categories.size,\n \"invalid_value\",\n `${seriesPath}.data`,\n \"must provide exactly one point per axis category\",\n );\n const pointLabels = new Set<string>();\n series.data.forEach((point, pointIndex) => {\n const pointPath = `${seriesPath}.data[${String(pointIndex)}]`;\n assertRecord(point, pointPath);\n assertString(point.label, `${pointPath}.label`, { max: CHART_LABEL_MAX_CHARS });\n invariant(\n categories.has(point.label),\n \"invalid_value\",\n `${pointPath}.label`,\n \"must match an axis category\",\n );\n invariant(\n !pointLabels.has(point.label),\n \"invalid_value\",\n `${pointPath}.label`,\n \"point labels must be unique within a series\",\n );\n pointLabels.add(point.label);\n assertNumber(point.value, `${pointPath}.value`);\n });\n });\n}\n\nfunction assertCardBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"card\", path);\n assertBlockBase(value, path);\n invariant(\n value.hero_image !== undefined ||\n value.title !== undefined ||\n value.actions !== undefined ||\n value.body !== undefined,\n \"missing_field\",\n path,\n \"requires at least one of hero_image, title, actions, or body\",\n );\n if (value.hero_image !== undefined) {\n assertImage(value.hero_image, `${path}.hero_image`);\n }\n if (value.icon !== undefined) {\n assertImage(value.icon, `${path}.icon`);\n }\n invariant(\n !(value.icon !== undefined && value.slack_icon !== undefined),\n \"invalid_value\",\n path,\n \"icon and slack_icon are mutually exclusive\",\n );\n if (value.slack_icon !== undefined) {\n assertRecord(value.slack_icon, `${path}.slack_icon`);\n assertType(value.slack_icon, \"icon\", `${path}.slack_icon`);\n assertString(value.slack_icon.name, `${path}.slack_icon.name`);\n }\n for (const key of [\"title\", \"subtitle\"] as const) {\n if (value[key] !== undefined) {\n assertTextObject(value[key], `${path}.${key}`, CARD_TITLE_MAX_CHARS);\n }\n }\n for (const key of [\"body\", \"subtext\"] as const) {\n if (value[key] !== undefined) {\n assertTextObject(value[key], `${path}.${key}`, CARD_BODY_MAX_CHARS);\n }\n }\n if (value.actions !== undefined) {\n assertArray(value.actions, `${path}.actions`);\n invariant(\n value.actions.length > 0 && value.actions.length <= CARD_ACTIONS_MAX,\n \"limit_exceeded\",\n `${path}.actions`,\n `must contain 1–${String(CARD_ACTIONS_MAX)} buttons`,\n );\n value.actions.forEach((action, index) => {\n assertButton(action, `${path}.actions[${String(index)}]`);\n });\n }\n}\n\nfunction assertCarouselBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"carousel\", path);\n assertBlockBase(value, path);\n assertArray(value.elements, `${path}.elements`);\n invariant(\n value.elements.length > 0 && value.elements.length <= CAROUSEL_CARDS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(CAROUSEL_CARDS_MAX)} cards`,\n );\n value.elements.forEach((card, index) => {\n assertCardBlock(card, `${path}.elements[${String(index)}]`);\n });\n}\n\nfunction assertAlertBlock(value: unknown, surface: BlockKitSurface, path: string): void {\n assertRecord(value, path);\n assertType(value, \"alert\", path);\n assertBlockBase(value, path);\n invariant(\n surface === \"modal\",\n \"surface_mismatch\",\n path,\n \"alert blocks are only legal on modal surfaces\",\n );\n assertTextObject(value.text, `${path}.text`, ALERT_TEXT_MAX_CHARS);\n if (value.level !== undefined) {\n assertOneOf(value.level, [\"default\", \"info\", \"warning\", \"error\", \"success\"], `${path}.level`);\n }\n}\n\nfunction assertContextActionsBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"context_actions\", path);\n assertBlockBase(value, path);\n assertArray(value.elements, `${path}.elements`);\n invariant(\n value.elements.length > 0 && value.elements.length <= CONTEXT_ACTION_ELEMENTS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(CONTEXT_ACTION_ELEMENTS_MAX)} elements`,\n );\n value.elements.forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertRecord(element, elementPath);\n assertActionMetadata(element, elementPath);\n if (element.type === \"icon_button\") {\n assertOneOf(element.icon, [\"trash\"], `${elementPath}.icon`);\n assertPlainText(element.text, `${elementPath}.text`, BUTTON_TEXT_MAX_CHARS);\n assertOptionalString(element.value, `${elementPath}.value`, {\n max: BUTTON_VALUE_MAX_CHARS,\n });\n return;\n }\n invariant(\n element.type === \"feedback_buttons\",\n \"unsupported_element\",\n `${elementPath}.type`,\n \"context_actions only accepts icon_button or feedback_buttons\",\n );\n for (const key of [\"positive_button\", \"negative_button\"] as const) {\n const buttonPath = `${elementPath}.${key}`;\n assertRecord(element[key], buttonPath);\n assertPlainText(element[key].text, `${buttonPath}.text`, BUTTON_TEXT_MAX_CHARS);\n assertString(element[key].value, `${buttonPath}.value`, {\n max: BUTTON_VALUE_MAX_CHARS,\n });\n }\n });\n}\n\nfunction assertTaskCardBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"task_card\", path);\n assertBlockBase(value, path);\n assertString(value.task_id, `${path}.task_id`);\n assertString(value.title, `${path}.title`);\n assertOneOf(value.status, [\"pending\", \"in_progress\", \"complete\", \"error\"], `${path}.status`);\n if (value.details !== undefined) {\n assertRichTextBlock(value.details, `${path}.details`);\n }\n if (value.output !== undefined) {\n assertRichTextBlock(value.output, `${path}.output`);\n }\n if (value.sources !== undefined) {\n assertArray(value.sources, `${path}.sources`);\n value.sources.forEach((source, index) => {\n const sourcePath = `${path}.sources[${String(index)}]`;\n assertRecord(source, sourcePath);\n assertType(source, \"url\", sourcePath);\n assertString(source.url, `${sourcePath}.url`);\n assertString(source.text, `${sourcePath}.text`);\n });\n }\n}\n\nfunction assertPlanBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"plan\", path);\n assertBlockBase(value, path);\n assertString(value.title, `${path}.title`);\n if (value.tasks !== undefined) {\n assertArray(value.tasks, `${path}.tasks`);\n value.tasks.forEach((task, index) => {\n assertTaskCardBlock(task, `${path}.tasks[${String(index)}]`);\n });\n }\n}\n\nfunction assertContainerBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"container\", path);\n assertBlockBase(value, path);\n invariant(\n value.title !== undefined || value.rich_text_title !== undefined,\n \"missing_field\",\n path,\n \"requires title or rich_text_title\",\n );\n if (value.title !== undefined) {\n assertPlainText(value.title, `${path}.title`, CONTAINER_TITLE_MAX_CHARS);\n }\n if (value.rich_text_title !== undefined) {\n assertRichTextBlock(value.rich_text_title, `${path}.rich_text_title`);\n }\n if (value.subtitle !== undefined) {\n assertPlainText(value.subtitle, `${path}.subtitle`, CONTAINER_TITLE_MAX_CHARS);\n }\n if (value.icon !== undefined) {\n assertImage(value.icon, `${path}.icon`);\n }\n if (value.width !== undefined) {\n assertOneOf(value.width, [\"narrow\", \"standard\", \"wide\", \"full\"], `${path}.width`);\n }\n assertOptionalBoolean(value.is_collapsible, `${path}.is_collapsible`);\n assertOptionalBoolean(value.default_collapsed, `${path}.default_collapsed`);\n assertOptionalBoolean(value.has_header_divider, `${path}.has_header_divider`);\n invariant(\n !(value.default_collapsed === true && value.is_collapsible !== true),\n \"invalid_value\",\n `${path}.default_collapsed`,\n \"requires is_collapsible to be true\",\n );\n assertArray(value.child_blocks, `${path}.child_blocks`);\n invariant(\n value.child_blocks.length > 0 && value.child_blocks.length <= CONTAINER_CHILDREN_MAX,\n \"limit_exceeded\",\n `${path}.child_blocks`,\n `must contain 1–${String(CONTAINER_CHILDREN_MAX)} child blocks`,\n );\n const allowed = [\n \"actions\",\n \"context\",\n \"divider\",\n \"file\",\n \"header\",\n \"image\",\n \"input\",\n \"rich_text\",\n \"section\",\n \"table\",\n \"video\",\n ];\n value.child_blocks.forEach((child, index) => {\n const childPath = `${path}.child_blocks[${String(index)}]`;\n assertRecord(child, childPath);\n assertString(child.type, `${childPath}.type`);\n invariant(\n allowed.includes(child.type),\n \"invalid_value\",\n `${childPath}.type`,\n `\"${child.type}\" is not legal inside a container`,\n );\n assertRenderableBlock(child, \"message\", childPath);\n });\n}\n\nfunction assertFileBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"file\", path);\n assertBlockBase(value, path);\n invariant(value.source === \"remote\", \"invalid_value\", `${path}.source`, 'expected \"remote\"');\n assertString(value.external_id, `${path}.external_id`);\n}\n\nfunction assertVideoBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"video\", path);\n assertBlockBase(value, path);\n assertString(value.video_url, `${path}.video_url`);\n assertString(value.thumbnail_url, `${path}.thumbnail_url`);\n assertString(value.alt_text, `${path}.alt_text`, { max: IMAGE_ALT_MAX_CHARS });\n assertPlainText(value.title, `${path}.title`, 199);\n if (value.description !== undefined) {\n assertPlainText(value.description, `${path}.description`, 199);\n }\n assertOptionalString(value.author_name, `${path}.author_name`, { max: 49 });\n}\n\nfunction assertMessageOnly(surface: BlockKitSurface, path: string, type: string): void {\n invariant(\n surface === \"message\",\n \"surface_mismatch\",\n path,\n `${type} blocks are only documented for message surfaces`,\n );\n}\n\nexport function assertRenderableBlock(\n value: unknown,\n surface: BlockKitSurface = \"message\",\n path: string = \"block\",\n): asserts value is RenderableBlock {\n assertRecord(value, path);\n assertBlockBase(value, path);\n\n switch (value.type) {\n case \"actions\":\n assertActionsBlock(value, path);\n return;\n case \"alert\":\n assertAlertBlock(value, surface, path);\n return;\n case \"card\":\n assertMessageOnly(surface, path, value.type);\n assertCardBlock(value, path);\n return;\n case \"carousel\":\n assertMessageOnly(surface, path, value.type);\n assertCarouselBlock(value, path);\n return;\n case \"container\":\n assertMessageOnly(surface, path, value.type);\n assertContainerBlock(value, path);\n return;\n case \"context\":\n assertContextBlock(value, path);\n return;\n case \"context_actions\":\n assertMessageOnly(surface, path, value.type);\n assertContextActionsBlock(value, path);\n return;\n case \"data_table\":\n assertMessageOnly(surface, path, value.type);\n assertDataTableBlock(value, path);\n return;\n case \"data_visualization\":\n assertMessageOnly(surface, path, value.type);\n assertChartBlock(value, path);\n return;\n case \"divider\":\n assertType(value, \"divider\", path);\n return;\n case \"file\":\n assertMessageOnly(surface, path, value.type);\n assertFileBlock(value, path);\n return;\n case \"header\":\n assertHeaderBlock(value, path);\n return;\n case \"image\":\n assertImageBlock(value, path);\n return;\n case \"input\":\n assertInputBlock(value, path);\n return;\n case \"markdown\":\n assertMessageOnly(surface, path, value.type);\n assertString(value.text, `${path}.text`, { max: MARKDOWN_CUMULATIVE_MAX_CHARS });\n return;\n case \"plan\":\n assertMessageOnly(surface, path, value.type);\n assertPlanBlock(value, path);\n return;\n case \"rich_text\":\n assertRichTextBlock(value, path);\n return;\n case \"section\":\n assertSectionBlock(value, path);\n return;\n case \"table\":\n assertMessageOnly(surface, path, value.type);\n assertTableBlock(value, path);\n return;\n case \"task_card\":\n assertMessageOnly(surface, path, value.type);\n assertTaskCardBlock(value, path);\n return;\n case \"video\":\n assertVideoBlock(value, path);\n return;\n default:\n fail(\"unsupported_block\", `${path}.type`, `unsupported block \"${String(value.type)}\"`);\n }\n}\n\nexport function assertBlockType(\n value: unknown,\n expected: RenderableBlock[\"type\"],\n surface: BlockKitSurface = \"message\",\n path: string = \"block\",\n): void {\n assertRenderableBlock(value, surface, path);\n invariant(value.type === expected, \"invalid_value\", `${path}.type`, `expected \"${expected}\"`);\n}\n\nfunction blocksFromData(value: unknown, path: string): readonly unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n assertRecord(value, path);\n assertArray(value.blocks, `${path}.blocks`);\n return value.blocks;\n}\n\nexport function assertBlockKitData(\n value: unknown,\n surface: BlockKitSurface = \"message\",\n path: string = \"data\",\n): asserts value is BlockKitData {\n const blockListPath = Array.isArray(value) ? path : `${path}.blocks`;\n const blocks = blocksFromData(value, path);\n const maxBlocks = surface === \"message\" ? MESSAGE_MAX_BLOCKS : VIEW_MAX_BLOCKS;\n invariant(\n blocks.length <= maxBlocks,\n \"limit_exceeded\",\n blockListPath,\n `${surface} surfaces accept at most ${String(maxBlocks)} blocks`,\n );\n\n let markdownCharacters = 0;\n let tableCharacters = 0;\n let dataTableCharacters = 0;\n const blockIds = new Set<string>();\n\n blocks.forEach((block, index) => {\n const blockPath = `${blockListPath}[${String(index)}]`;\n assertRenderableBlock(block, surface, blockPath);\n if (block.block_id !== undefined) {\n invariant(\n !blockIds.has(block.block_id),\n \"duplicate_id\",\n `${blockPath}.block_id`,\n `\"${block.block_id}\" is already used in this payload`,\n );\n blockIds.add(block.block_id);\n }\n if (block.type === \"markdown\") {\n markdownCharacters += block.text.length;\n } else if (block.type === \"table\") {\n for (const row of block.rows) {\n for (const cell of row) {\n tableCharacters += tableCellTextLength(cell);\n }\n }\n } else if (block.type === \"data_table\") {\n for (const row of block.rows) {\n for (const cell of row) {\n dataTableCharacters += tableCellTextLength(cell);\n }\n }\n }\n });\n\n invariant(\n markdownCharacters <= MARKDOWN_CUMULATIVE_MAX_CHARS,\n \"limit_exceeded\",\n blockListPath,\n `markdown blocks exceed the cumulative ${String(MARKDOWN_CUMULATIVE_MAX_CHARS)} character limit`,\n );\n invariant(\n tableCharacters <= TABLE_MAX_CHARS,\n \"limit_exceeded\",\n blockListPath,\n `table cells exceed the cumulative ${String(TABLE_MAX_CHARS)} character limit`,\n );\n invariant(\n dataTableCharacters <= DATA_TABLE_MAX_CHARS,\n \"limit_exceeded\",\n blockListPath,\n `data_table cells exceed the cumulative ${String(DATA_TABLE_MAX_CHARS)} character limit`,\n );\n}\n\nexport function parseBlockKitData(\n input: BlockKitInput,\n surface: BlockKitSurface = \"message\",\n): BlockKitData {\n let value: unknown = input;\n if (typeof input === \"string\") {\n try {\n value = JSON.parse(input) as unknown;\n } catch {\n throw new BlockKitInvariantError(\"expected valid JSON\", {\n code: \"invalid_json\",\n path: \"data\",\n });\n }\n }\n assertBlockKitData(value, surface);\n return value;\n}\n\nexport function blocksOf(data: BlockKitData): readonly RenderableBlock[] {\n return isBlockKitPayload(data) ? data.blocks : data;\n}\n\nfunction isBlockKitPayload(data: BlockKitData): data is BlockKitPayload {\n return !Array.isArray(data);\n}\n","const DATE_TOKEN_RE = /\\{([a-z_]+)\\}/g;\n\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nconst SHORT_MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n] as const;\n\nconst WEEKDAYS = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n] as const;\n\nfunction pad(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\nfunction ordinal(value: number): string {\n const remainder = value % 100;\n if (remainder >= 11 && remainder <= 13) {\n return `${String(value)}th`;\n }\n switch (value % 10) {\n case 1:\n return `${String(value)}st`;\n case 2:\n return `${String(value)}nd`;\n case 3:\n return `${String(value)}rd`;\n default:\n return `${String(value)}th`;\n }\n}\n\nfunction dateToken(token: string, date: Date): string | undefined {\n const day = date.getUTCDate();\n const month = MONTHS[date.getUTCMonth()] ?? \"\";\n const shortMonth = SHORT_MONTHS[date.getUTCMonth()] ?? \"\";\n const weekday = WEEKDAYS[date.getUTCDay()] ?? \"\";\n const year = date.getUTCFullYear();\n\n switch (token) {\n case \"date_num\":\n return `${String(year)}-${pad(date.getUTCMonth() + 1)}-${pad(day)}`;\n case \"date_slash\":\n return `${pad(day)}/${pad(date.getUTCMonth() + 1)}/${String(year)}`;\n case \"date_long\":\n case \"date_long_pretty\":\n case \"day_divider_pretty\":\n return `${weekday}, ${month} ${ordinal(day)}, ${String(year)}`;\n case \"date_long_full\":\n return `${month} ${String(day)}, ${String(year)}`;\n case \"date\":\n case \"date_pretty\":\n return `${month} ${String(day)}`;\n case \"date_short\":\n case \"date_short_pretty\":\n return `${shortMonth} ${String(day)}, ${String(year)}`;\n case \"time\":\n return `${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}`;\n case \"time_secs\":\n return `${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`;\n default:\n return undefined;\n }\n}\n\n/**\n * Formats Slack date tokens deterministically in UTC. Relative tokens such as\n * `{ago}` require a clock, so they intentionally use Slack's supplied fallback.\n */\nexport function formatSlackDate(timestamp: number, format: string, fallback?: string): string {\n const date = new Date(timestamp * 1000);\n if (!Number.isFinite(timestamp) || Number.isNaN(date.getTime())) {\n return fallback ?? String(timestamp);\n }\n\n let unsupported = false;\n const formatted = format.replace(DATE_TOKEN_RE, (_match, token: string) => {\n const replacement = dateToken(token, date);\n if (replacement === undefined) {\n unsupported = true;\n return \"\";\n }\n return replacement;\n });\n\n if (format.length === 0 || unsupported) {\n return fallback ?? date.toISOString().slice(0, 10);\n }\n return formatted;\n}\n","/**\n * Unicode fallbacks for the shortcode set emitted by packages/core.\n * Workspace resolvers and explicit Slack `unicode` values still take precedence.\n */\nconst CORE_EMOJI: Readonly<Record<string, string>> = {\n \"+1\": \"👍\",\n \"-1\": \"👎\",\n \"100\": \"💯\",\n blush: \"😊\",\n bug: \"🐛\",\n bulb: \"💡\",\n check: \"✓\",\n clap: \"👏\",\n eyes: \"👀\",\n fire: \"🔥\",\n gear: \"⚙️\",\n grinning: \"😀\",\n heart: \"❤️\",\n heavy_check_mark: \"✔️\",\n joy: \"😂\",\n link: \"🔗\",\n mag: \"🔍\",\n memo: \"📝\",\n ok_hand: \"👌\",\n pray: \"🙏\",\n rocket: \"🚀\",\n smile: \"😄\",\n sob: \"😭\",\n sparkles: \"✨\",\n star: \"⭐\",\n sweat_smile: \"😅\",\n tada: \"🎉\",\n thinking_face: \"🤔\",\n thumbsdown: \"👎\",\n thumbsup: \"👍\",\n warning: \"⚠️\",\n wave: \"👋\",\n white_check_mark: \"✅\",\n wink: \"😉\",\n x: \"❌\",\n zap: \"⚡\",\n};\n\nconst UNICODE_SEQUENCE_RE = /^[0-9a-f]{1,6}(?:-[0-9a-f]{1,6})*$/i;\n\nexport function coreEmojiGlyph(name: string): string | undefined {\n return CORE_EMOJI[name];\n}\n\nexport function unicodeEmoji(unicode: string | undefined): string | undefined {\n if (unicode === undefined || !UNICODE_SEQUENCE_RE.test(unicode)) {\n return undefined;\n }\n const codePoints = unicode.split(\"-\").map((part) => Number.parseInt(part, 16));\n if (codePoints.some((point) => !Number.isFinite(point))) {\n return undefined;\n }\n try {\n return String.fromCodePoint(...codePoints);\n } catch {\n return undefined;\n }\n}\n","import * as stylex from \"@stylexjs/stylex\";\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { RichTextBlockData, RichTextBlockElementData, RichTextInlineElementData, RichTextReferenceElementData } from \"../types.js\";\nimport { formatSlackDate } from \"./date.js\";\nimport { coreEmojiGlyph, unicodeEmoji } from \"./emoji.js\";\nconst INLINE_ELEMENT_TYPES = {\n attachment_mention: true,\n broadcast: true,\n canvas: true,\n canvas_message_unfurl: true,\n canvas_user_mention: true,\n channel: true,\n citation: true,\n color: true,\n date: true,\n emoji: true,\n file: true,\n link: true,\n list_record: true,\n message_mention: true,\n salesforce_data_field: true,\n tag: true,\n team: true,\n text: true,\n user: true,\n usergroup: true,\n work_object_mention: true,\n workflow_mention: true\n} as const satisfies Readonly<Record<RichTextInlineElementData[\"type\"], true>>;\nconst CONTAINER_ELEMENT_TYPES = {\n rich_text_list: true,\n rich_text_preformatted: true,\n rich_text_quote: true,\n rich_text_section: true\n} as const satisfies Readonly<Record<RichTextBlockElementData[\"type\"], true>>;\ninterface InlineStyle {\n readonly bold?: boolean | undefined;\n readonly code?: boolean | undefined;\n readonly italic?: boolean | undefined;\n readonly strike?: boolean | undefined;\n readonly underline?: boolean | undefined;\n}\nfunction inlineStyle(element: RichTextInlineElementData): InlineStyle | undefined {\n switch (element.type) {\n case \"broadcast\":\n case \"channel\":\n case \"color\":\n case \"date\":\n case \"emoji\":\n case \"link\":\n case \"team\":\n case \"text\":\n case \"user\":\n case \"usergroup\":\n return element.style;\n case \"attachment_mention\":\n case \"canvas\":\n case \"canvas_message_unfurl\":\n case \"canvas_user_mention\":\n case \"citation\":\n case \"file\":\n case \"list_record\":\n case \"message_mention\":\n case \"salesforce_data_field\":\n case \"tag\":\n case \"work_object_mention\":\n case \"workflow_mention\":\n return undefined;\n }\n return assertNever(element);\n}\nfunction isKnownInlineElement(value: unknown): value is RichTextInlineElementData {\n const type = discriminator(value);\n if (type === undefined || !(type in INLINE_ELEMENT_TYPES) || !isRecord(value)) {\n return false;\n }\n switch (type) {\n case \"text\":\n return typeof value[\"text\"] === \"string\";\n case \"link\":\n return typeof value[\"url\"] === \"string\";\n case \"emoji\":\n return typeof value[\"name\"] === \"string\";\n case \"user\":\n return typeof value[\"user_id\"] === \"string\";\n case \"usergroup\":\n return typeof value[\"usergroup_id\"] === \"string\";\n case \"channel\":\n return typeof value[\"channel_id\"] === \"string\";\n case \"team\":\n return typeof value[\"team_id\"] === \"string\";\n case \"broadcast\":\n return typeof value[\"range\"] === \"string\";\n case \"date\":\n return typeof value[\"timestamp\"] === \"number\" && typeof value[\"format\"] === \"string\";\n case \"color\":\n return typeof value[\"value\"] === \"string\";\n default:\n return true;\n }\n}\nfunction isKnownContainerElement(value: unknown): value is RichTextBlockElementData {\n const type = discriminator(value);\n if (type === undefined || !(type in CONTAINER_ELEMENT_TYPES) || !isRecord(value) || !Array.isArray(value[\"elements\"])) {\n return false;\n }\n if (type !== \"rich_text_list\") {\n return true;\n }\n return value[\"elements\"].every(section => isRecord(section) && section[\"type\"] === \"rich_text_section\" && Array.isArray(section[\"elements\"]));\n}\nfunction styledInline(content: ReactNode, richStyle: InlineStyle | undefined): ReactNode {\n let styled = content;\n if (richStyle?.bold === true) {\n styled = <strong {...stylex.props(styles.bold)}>{styled}</strong>;\n }\n if (richStyle?.italic === true) {\n styled = <em {...stylex.props(styles.italic)}>{styled}</em>;\n }\n if (richStyle?.strike === true) {\n styled = <s {...stylex.props(styles.strike)}>{styled}</s>;\n }\n if (richStyle?.underline === true) {\n styled = <span {...stylex.props(styles.underline)}>{styled}</span>;\n }\n if (richStyle?.code === true) {\n styled = <code {...stylex.props(styles.inlineCode)}>{styled}</code>;\n }\n return styled;\n}\nfunction referenceLabel(element: RichTextReferenceElementData): string {\n return element.text ?? element.id ?? element.user_id ?? element.channel_id ?? element.team_id ?? element.file_id ?? element.canvas_id ?? element.record_id ?? element.message_ts ?? element.workflow_id ?? element.type;\n}\ninterface InlineElementProps {\n readonly element: unknown;\n}\nfunction InlineElement({\n element\n}: InlineElementProps): ReactNode {\n const {\n resolvers\n } = useBlockKitContext();\n if (!isKnownInlineElement(element)) {\n return <span {...stylex.props(styles.reference)} data-unhandled-rich-text-element={discriminator(element) ?? \"unknown\"}>\n {fallbackLabel(element, \"rich text element\")}\n </span>;\n }\n const richStyle = inlineStyle(element);\n switch (element.type) {\n case \"text\":\n return styledInline(element.text, richStyle);\n case \"link\":\n {\n const href = safeHref(element.url);\n const label = element.text ?? element.url;\n return href === undefined ? styledInline(label, richStyle) : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {styledInline(label, richStyle)}\n </a>;\n }\n case \"emoji\":\n return <span aria-label={`:${element.name}:`} role=\"img\">\n {styledInline(resolvers.emoji?.(element.name, element.unicode) ?? unicodeEmoji(element.unicode) ?? coreEmojiGlyph(element.name) ?? `:${element.name}:`, richStyle)}\n </span>;\n case \"user\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>@{resolvers.user?.(element.user_id) ?? element.user_id}</>, richStyle)}\n </span>;\n case \"usergroup\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>@{resolvers.usergroup?.(element.usergroup_id) ?? element.usergroup_id}</>, richStyle)}\n </span>;\n case \"channel\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>#{resolvers.channel?.(element.channel_id) ?? element.channel_id}</>, richStyle)}\n </span>;\n case \"team\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>@{resolvers.team?.(element.team_id) ?? element.team_id}</>, richStyle)}\n </span>;\n case \"broadcast\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(`@${element.range}`, richStyle)}\n </span>;\n case \"date\":\n {\n const content = resolvers.date?.(element.timestamp, element.format) ?? formatSlackDate(element.timestamp, element.format, element.fallback);\n const href = safeHref(element.url);\n return href === undefined ? styledInline(content, richStyle) : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {styledInline(content, richStyle)}\n </a>;\n }\n case \"color\":\n return <span>\n <span {...stylex.props(styles.colorSwatch)} aria-hidden=\"true\" style={{\n backgroundColor: element.value\n }} />\n {styledInline(element.value, richStyle)}\n </span>;\n case \"citation\":\n return <span {...stylex.props(styles.reference)}>\n [{element.index ?? element.text ?? \"source\"}]\n </span>;\n case \"attachment_mention\":\n case \"canvas\":\n case \"canvas_message_unfurl\":\n case \"canvas_user_mention\":\n case \"file\":\n case \"list_record\":\n case \"message_mention\":\n case \"salesforce_data_field\":\n case \"tag\":\n case \"work_object_mention\":\n case \"workflow_mention\":\n return <span {...stylex.props(styles.reference)}>{referenceLabel(element)}</span>;\n }\n return assertNever(element);\n}\ninterface RichContainerProps {\n readonly element: unknown;\n readonly path: string;\n}\n\n/**\n * Preformatted children render as plain code text (no styling/links per\n * Slack), but unknown runtime shapes must still surface the visible\n * fallback instead of silently dropping content.\n */\nfunction preformattedChild(inline: unknown, index: number): ReactNode {\n const kind = discriminator(inline);\n if ((kind === \"text\" || kind === \"link\") && isRecord(inline)) {\n const text = inline[\"text\"];\n if (typeof text === \"string\") {\n return text;\n }\n const url = inline[\"url\"];\n if (typeof url === \"string\") {\n return url;\n }\n }\n return <span {...stylex.props(styles.reference)} data-unhandled-rich-text-element={kind ?? \"unknown\"} key={`${kind ?? \"unknown\"}-${String(index)}`}>\n {fallbackLabel(inline, \"rich text element\")}\n </span>;\n}\n\n/** Ordered markers cycle decimal → alpha → roman by depth (applied to the list). */\nfunction orderedMarkerStyle(indent: number): stylex.StyleXStyles {\n const variant = indent % 3;\n return variant === 1 ? styles.listOrderedAlpha : variant === 2 ? styles.listOrderedRoman : styles.listOrdered;\n}\n\n/** Bullet glyphs cycle disc → circle → square by depth (applied to each item). */\nfunction bulletGlyphStyle(indent: number): stylex.StyleXStyles {\n const variant = indent % 3;\n return variant === 1 ? styles.listBulletAlternate : variant === 2 ? styles.listBulletSquare : styles.listBullet;\n}\nfunction RichContainer({\n element,\n path\n}: RichContainerProps): ReactElement {\n if (!isKnownContainerElement(element)) {\n return <div {...stylex.props(styles.unhandled)} data-unhandled-rich-text-container={discriminator(element) ?? \"unknown\"}>\n {fallbackLabel(element, \"rich text container\")}\n </div>;\n }\n switch (element.type) {\n case \"rich_text_section\":\n return <div {...stylex.props(styles.richSection)} data-rich-text-section>\n {element.elements.map((inline, index) => <InlineElement key={`${discriminator(inline) ?? \"unknown\"}-${String(index)}`} element={inline} />)}\n </div>;\n case \"rich_text_quote\":\n return <blockquote {...stylex.props(styles.quote, element.border === 1 && styles.richBorder)} data-border={element.border ?? 0}>\n {element.elements.map((inline, index) => <InlineElement key={`${discriminator(inline) ?? \"unknown\"}-${String(index)}`} element={inline} />)}\n </blockquote>;\n case \"rich_text_preformatted\":\n return <pre {...stylex.props(styles.pre, element.border === 1 && styles.richBorder)} data-border={element.border ?? 0} data-language={element.language}>\n {element.elements.map((inline, index) => preformattedChild(inline, index))}\n </pre>;\n case \"rich_text_list\":\n {\n const rawIndent = Number.isFinite(element.indent) ? Math.trunc(element.indent ?? 0) : 0;\n const indent = Math.min(8, Math.max(0, rawIndent));\n const rawOffset = Number.isFinite(element.offset) ? Math.trunc(element.offset ?? 0) : 0;\n const start = Math.max(1, rawOffset + 1);\n // Slack nests one 28px step per indent level (measured).\n const listStyle: CSSProperties = {\n marginInlineStart: indent * 28\n };\n const itemStyle = element.style === \"ordered\" ? styles.listItemOrdered : [styles.listItemBullet, bulletGlyphStyle(indent)];\n const items = element.elements.map((section, index) => <li {...stylex.props(itemStyle)} key={`${path}.elements[${String(index)}]`}>\n {section.elements.map((inline, inlineIndex) => <InlineElement key={`${discriminator(inline) ?? \"unknown\"}-${String(inlineIndex)}`} element={inline} />)}\n </li>);\n return element.style === \"ordered\" ? <ol {...stylex.props(styles.list, orderedMarkerStyle(indent), element.border === 1 && styles.richBorder)} data-border={element.border ?? 0} data-indent={indent} start={start} style={listStyle}>\n {items}\n </ol> : <ul {...stylex.props(styles.list, element.border === 1 && styles.richBorder)} data-border={element.border ?? 0} data-indent={indent} style={listStyle}>\n {items}\n </ul>;\n }\n }\n return assertNever(element);\n}\nexport interface RichTextProps {\n readonly block: RichTextBlockData;\n readonly className?: string | undefined;\n readonly path?: string | undefined;\n}\nexport function RichText({\n block,\n className,\n path = \"block\"\n}: RichTextProps): ReactElement {\n const sx = stylex.props(styles.richText);\n const value: unknown = block;\n const elements: unknown = isRecord(value) ? value[\"elements\"] : undefined;\n return <div {...sx} className={joinClassNames(sx.className, className)}>\n {Array.isArray(elements) ? elements.map((element, index) => <RichContainer key={`${discriminator(element) ?? \"unknown\"}-${String(index)}`} element={element} path={`${path}.elements[${String(index)}]`} />) : <div {...stylex.props(styles.unhandled)} data-unhandled-rich-text-block>\n {fallbackLabel(value, \"rich text block\")}\n </div>}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ChangeEvent, ReactElement } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { BlockKitInvariantError } from \"../errors.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { ButtonElementData, ImageElementData, InteractiveElementData, OptionData } from \"../types.js\";\nimport { assertInteractiveElementData } from \"../validation.js\";\nimport { RichText } from \"../text/RichText.js\";\nconst INTERACTIVE_ELEMENT_TYPES = {\n button: true,\n channels_select: true,\n checkboxes: true,\n conversations_select: true,\n datepicker: true,\n datetimepicker: true,\n email_text_input: true,\n external_select: true,\n file_input: true,\n image: true,\n multi_channels_select: true,\n multi_conversations_select: true,\n multi_external_select: true,\n multi_static_select: true,\n multi_users_select: true,\n number_input: true,\n overflow: true,\n plain_text_input: true,\n radio_buttons: true,\n rich_text_input: true,\n static_select: true,\n timepicker: true,\n url_text_input: true,\n users_select: true,\n workflow_button: true\n} as const satisfies Readonly<Record<InteractiveElementData[\"type\"], true>>;\nfunction isKnownInteractiveElement(element: unknown): element is InteractiveElementData {\n const type = discriminator(element);\n return type !== undefined && type in INTERACTIVE_ELEMENT_TYPES;\n}\nfunction imageSource(element: ImageElementData): string | undefined {\n if (!isRecord(element)) {\n return undefined;\n }\n if (\"image_url\" in element) {\n return typeof element.image_url === \"string\" ? element.image_url : undefined;\n }\n const slackFile: unknown = element.slack_file;\n if (isRecord(slackFile) && typeof slackFile[\"url\"] === \"string\") {\n return slackFile[\"url\"];\n }\n return undefined;\n}\nfunction isValidInteractiveElement(element: unknown, path: string): element is InteractiveElementData {\n try {\n assertInteractiveElementData(element, path);\n return true;\n } catch (error) {\n if (error instanceof BlockKitInvariantError) {\n return false;\n }\n throw error;\n }\n}\nfunction UnhandledElement({\n className,\n element\n}: {\n readonly className?: string | undefined;\n readonly element: unknown;\n}): ReactElement {\n const sx = stylex.props(styles.unhandled);\n return <span {...sx} className={joinClassNames(sx.className, className)} data-unhandled-element={discriminator(element) ?? \"unknown\"}>\n {fallbackLabel(element, \"Block Kit element\")}\n </span>;\n}\nexport interface ImageElementProps {\n readonly className?: string | undefined;\n readonly element: ImageElementData;\n readonly path?: string | undefined;\n readonly variant?: \"accessory\" | \"cardHero\" | \"cardIcon\" | \"context\" | undefined;\n}\nexport function ImageElement({\n className,\n element,\n variant\n}: ImageElementProps): ReactElement {\n const sx = stylex.props(styles.image, variant === \"accessory\" && styles.accessoryImage, variant === \"cardHero\" && styles.cardHero, variant === \"cardIcon\" && styles.cardIcon, variant === \"context\" && styles.contextImage);\n const value: unknown = element;\n const altText = isRecord(value) && typeof value[\"alt_text\"] === \"string\" ? value[\"alt_text\"] : fallbackLabel(value, \"image\");\n const source = imageSource(element);\n if (source === undefined) {\n return <div {...sx} aria-label={altText} className={joinClassNames(sx.className, className)} role=\"img\" />;\n }\n return <img {...sx} alt={altText} className={joinClassNames(sx.className, className)} src={source} />;\n}\ninterface ActionElementProps {\n readonly blockId?: string | undefined;\n readonly className?: string | undefined;\n readonly path?: string | undefined;\n}\nexport interface ButtonElementProps extends ActionElementProps {\n readonly element: ButtonElementData;\n}\nexport function ButtonElement({\n blockId,\n className,\n element,\n path = \"element\"\n}: ButtonElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isValidInteractiveElement(element, path)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.button, element.style === \"primary\" && styles.buttonPrimary, element.style === \"danger\" && styles.buttonDanger);\n const action = (): void => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n }),\n ...(element.value === undefined ? {} : {\n value: element.value\n })\n });\n }\n };\n const href = safeHref(element.url);\n if (href !== undefined) {\n return <a {...sx} aria-label={element.accessibility_label} className={joinClassNames(sx.className, className)} href={href} onClick={action} rel=\"noreferrer\">\n {element.text.text}\n </a>;\n }\n return <button {...sx} aria-label={element.accessibility_label} className={joinClassNames(sx.className, className)} onClick={action} type=\"button\">\n {element.text.text}\n </button>;\n}\ntype OverflowElementData = Extract<InteractiveElementData, {\n readonly type: \"overflow\";\n}>;\nexport interface OverflowElementProps extends ActionElementProps {\n readonly element: OverflowElementData;\n}\nexport function OverflowElement({\n blockId,\n className,\n element,\n path = \"element\"\n}: OverflowElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isValidInteractiveElement(element, path)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.button, styles.overflowButton);\n return <button {...sx} aria-label=\"More options\" className={joinClassNames(sx.className, className)} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n })\n });\n }\n }} type=\"button\">\n ⋯\n </button>;\n}\nfunction optionValue(option: OptionData, index: number): string {\n return option.value ?? `${option.text.text}-${String(index)}`;\n}\nfunction isSelected(option: OptionData, selected: readonly OptionData[] | undefined): boolean {\n return selected?.some(candidate => candidate.value === option.value && candidate.text.text === option.text.text) ?? false;\n}\ninterface ChoiceGroupProps extends ActionElementProps {\n readonly element: Extract<InteractiveElementData, {\n readonly type: \"checkboxes\" | \"radio_buttons\";\n }>;\n}\nexport function ChoiceGroup({\n blockId,\n className,\n element,\n path = \"element\"\n}: ChoiceGroupProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isValidInteractiveElement(element, path)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.choiceGroup);\n const selected = element.type === \"checkboxes\" ? element.initial_options : element.initial_option === undefined ? undefined : [element.initial_option];\n return <fieldset {...sx} className={joinClassNames(sx.className, className)} data-element-type={element.type}>\n {element.options.map((option, index) => {\n const value = optionValue(option, index);\n return <label {...stylex.props(styles.choice)} key={value}>\n <input defaultChecked={isSelected(option, selected)} name={element.action_id} onChange={event => {\n if (element.action_id !== undefined) {\n const values = element.type === \"checkboxes\" ? Array.from(event.currentTarget.closest(\"fieldset\")?.querySelectorAll<HTMLInputElement>('input[type=\"checkbox\"]:checked') ?? [], input => input.value) : undefined;\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n }),\n ...(values === undefined ? {\n value\n } : {\n values\n })\n });\n }\n }} type={element.type === \"checkboxes\" ? \"checkbox\" : \"radio\"} value={value} />\n <span>\n {option.text.text}\n {option.description === undefined ? null : <span {...stylex.props(styles.smallText)}> {option.description.text}</span>}\n </span>\n </label>;\n })}\n </fieldset>;\n}\nfunction selectionOptions(element: Extract<InteractiveElementData, {\n readonly type: \"multi_static_select\" | \"static_select\";\n}>): readonly OptionData[] {\n if (element.options !== undefined) {\n return element.options;\n }\n return element.option_groups?.flatMap(group => group.options) ?? [];\n}\ninterface SelectChoice {\n readonly label: string;\n readonly value: string;\n}\ntype SelectElementData = Extract<InteractiveElementData, {\n readonly type: \"channels_select\" | \"conversations_select\" | \"external_select\" | \"multi_channels_select\" | \"multi_conversations_select\" | \"multi_external_select\" | \"multi_static_select\" | \"multi_users_select\" | \"static_select\" | \"users_select\";\n}>;\nfunction optionChoices(options: readonly OptionData[]): readonly SelectChoice[] {\n return options.map((option, index) => ({\n label: option.text.text,\n value: optionValue(option, index)\n }));\n}\nfunction identifierChoices(identifiers: readonly string[]): readonly SelectChoice[] {\n return identifiers.map(identifier => ({\n label: identifier,\n value: identifier\n }));\n}\nfunction selectChoices(element: SelectElementData): readonly SelectChoice[] {\n switch (element.type) {\n case \"static_select\":\n case \"multi_static_select\":\n return optionChoices(selectionOptions(element));\n case \"external_select\":\n return element.initial_option === undefined ? [] : optionChoices([element.initial_option]);\n case \"multi_external_select\":\n return optionChoices(element.initial_options ?? []);\n case \"users_select\":\n return identifierChoices(element.initial_user === undefined ? [] : [element.initial_user]);\n case \"multi_users_select\":\n return identifierChoices(element.initial_users ?? []);\n case \"channels_select\":\n return identifierChoices(element.initial_channel === undefined ? [] : [element.initial_channel]);\n case \"multi_channels_select\":\n return identifierChoices(element.initial_channels ?? []);\n case \"conversations_select\":\n return identifierChoices(element.initial_conversation === undefined ? [] : [element.initial_conversation]);\n case \"multi_conversations_select\":\n return identifierChoices(element.initial_conversations ?? []);\n }\n return assertNever(element);\n}\nfunction selectedOptionValues(options: readonly OptionData[], selected: readonly OptionData[] | undefined): readonly string[] {\n return options.flatMap((option, index) => isSelected(option, selected) ? [optionValue(option, index)] : []);\n}\nfunction initialSelectValues(element: SelectElementData, choices: readonly SelectChoice[]): readonly string[] {\n switch (element.type) {\n case \"static_select\":\n return selectedOptionValues(selectionOptions(element), element.initial_option === undefined ? undefined : [element.initial_option]);\n case \"multi_static_select\":\n return selectedOptionValues(selectionOptions(element), element.initial_options);\n case \"external_select\":\n case \"multi_external_select\":\n case \"users_select\":\n case \"multi_users_select\":\n case \"channels_select\":\n case \"multi_channels_select\":\n case \"conversations_select\":\n case \"multi_conversations_select\":\n return choices.map(choice => choice.value);\n }\n return assertNever(element);\n}\nfunction selectLabel(element: SelectElementData): string {\n if (\"placeholder\" in element && element.placeholder !== undefined) {\n return element.placeholder.text;\n }\n switch (element.type) {\n case \"users_select\":\n case \"multi_users_select\":\n return \"Select people\";\n case \"channels_select\":\n case \"multi_channels_select\":\n return \"Select channels\";\n case \"conversations_select\":\n case \"multi_conversations_select\":\n return \"Select conversations\";\n case \"external_select\":\n case \"multi_external_select\":\n case \"multi_static_select\":\n case \"static_select\":\n return \"Select an option\";\n }\n return assertNever(element);\n}\nexport interface SelectElementProps extends ActionElementProps {\n readonly element: SelectElementData;\n}\nexport function SelectElement({\n blockId,\n className,\n element,\n path = \"element\"\n}: SelectElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isValidInteractiveElement(element, path)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.select);\n const isMulti = element.type.startsWith(\"multi_\");\n const choices = selectChoices(element);\n const initialValues = initialSelectValues(element, choices);\n const onChange = (event: ChangeEvent<HTMLSelectElement>): void => {\n if (element.action_id !== undefined) {\n const values = Array.from(event.currentTarget.selectedOptions, option => option.value);\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n }),\n ...(isMulti ? {\n values\n } : {\n value: event.currentTarget.value\n })\n });\n }\n };\n return <select {...sx} aria-label={selectLabel(element)} className={joinClassNames(sx.className, className)} defaultValue={isMulti ? initialValues : initialValues[0] ?? \"\"} multiple={isMulti} onChange={onChange}>\n <option disabled value=\"\">\n {selectLabel(element)}\n </option>\n {choices.length === 0 ? <option value=\"preview\">Preview option</option> : choices.map(choice => <option key={choice.value} value={choice.value}>\n {choice.label}\n </option>)}\n </select>;\n}\ntype InputElementData = Extract<InteractiveElementData, {\n readonly type: \"datepicker\" | \"datetimepicker\" | \"email_text_input\" | \"file_input\" | \"number_input\" | \"plain_text_input\" | \"rich_text_input\" | \"timepicker\" | \"url_text_input\";\n}>;\nexport interface InputElementProps extends ActionElementProps {\n readonly element: InputElementData;\n}\nfunction padDateTimePart(value: number): string {\n return String(value).padStart(2, \"0\");\n}\nfunction localDateValue(date: Date): string {\n return `${String(date.getFullYear())}-${padDateTimePart(date.getMonth() + 1)}-${padDateTimePart(date.getDate())}`;\n}\nfunction datePickerLabel(value: string | undefined): string {\n if (value === undefined) {\n return \"Select a date\";\n }\n if (value === localDateValue(new Date())) {\n return \"Today\";\n }\n const [year = \"\", month = \"\", day = \"\"] = value.split(\"-\");\n return `${month}/${day}/${year}`;\n}\nfunction localDateTimeValue(timestamp: number | undefined): string | undefined {\n if (timestamp === undefined) {\n return undefined;\n }\n const date = new Date(timestamp * 1000);\n if (Number.isNaN(date.getTime())) {\n return undefined;\n }\n // datetime-local semantics are local wall time: Slack's initial_date_time is\n // an absolute instant, so the control must show the viewer's local fields.\n // (Rich-text date TEXT stays UTC for SSR determinism; this input must not.)\n return `${String(date.getFullYear())}-${padDateTimePart(date.getMonth() + 1)}-${padDateTimePart(date.getDate())}T${padDateTimePart(date.getHours())}:${padDateTimePart(date.getMinutes())}`;\n}\nexport function InputElement({\n blockId,\n className,\n element,\n path = \"element\"\n}: InputElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isValidInteractiveElement(element, path)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.input);\n const emit = (value: string): void => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n value,\n ...(blockId === undefined ? {} : {\n blockId\n })\n });\n }\n };\n const onChange = (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\n emit(event.currentTarget.value);\n };\n switch (element.type) {\n case \"plain_text_input\":\n return element.multiline === true ? <textarea {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} maxLength={element.max_length} minLength={element.min_length} onChange={onChange} placeholder={element.placeholder?.text} rows={4} /> : <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} maxLength={element.max_length} minLength={element.min_length} onChange={onChange} placeholder={element.placeholder?.text} type=\"text\" />;\n case \"email_text_input\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} onChange={onChange} placeholder={element.placeholder?.text} type=\"email\" />;\n case \"url_text_input\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} onChange={onChange} placeholder={element.placeholder?.text} type=\"url\" />;\n case \"number_input\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} max={element.max_value} min={element.min_value} onChange={onChange} placeholder={element.placeholder?.text} step={element.is_decimal_allowed ? \"any\" : 1} type=\"number\" />;\n case \"datepicker\":\n {\n const pickerSx = stylex.props(styles.button, styles.picker);\n return <button {...pickerSx} aria-label=\"Date\" className={joinClassNames(pickerSx.className, className)} onClick={() => {\n emit(element.initial_date ?? \"\");\n }} type=\"button\">\n <span {...stylex.props(styles.pickerIcon)} aria-hidden=\"true\">\n ▦\n </span>\n {datePickerLabel(element.initial_date)}\n <span {...stylex.props(styles.pickerChevron)} aria-hidden=\"true\">\n ⌄\n </span>\n </button>;\n }\n case \"datetimepicker\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={localDateTimeValue(element.initial_date_time)} onChange={onChange} type=\"datetime-local\" />;\n case \"timepicker\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_time} onChange={onChange} type=\"time\" />;\n case \"file_input\":\n return <input {...sx} accept={element.filetypes?.map(type => `.${type}`).join(\",\")} className={joinClassNames(sx.className, className)} multiple={(element.max_files ?? 10) > 1} onChange={event => {\n emit(event.currentTarget.files?.[0]?.name ?? \"\");\n }} type=\"file\" />;\n case \"rich_text_input\":\n return <div {...sx} className={joinClassNames(sx.className, className)} contentEditable onInput={event => {\n emit(event.currentTarget.textContent ?? \"\");\n }} role=\"textbox\" suppressContentEditableWarning>\n {element.initial_value === undefined ? null : <RichText block={element.initial_value} path={`${path}.initial_value`} />}\n </div>;\n }\n return assertNever(element);\n}\nexport interface InteractiveElementProps extends ActionElementProps {\n readonly element: unknown;\n}\nexport function InteractiveElement({\n blockId,\n className,\n element,\n path = \"element\"\n}: InteractiveElementProps): ReactElement {\n if (!isKnownInteractiveElement(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n if (element.type === \"image\") {\n return <ImageElement className={className} element={element} path={path} />;\n }\n switch (element.type) {\n case \"button\":\n return <ButtonElement blockId={blockId} className={className} element={element} path={path} />;\n case \"checkboxes\":\n case \"radio_buttons\":\n return <ChoiceGroup blockId={blockId} className={className} element={element} path={path} />;\n case \"overflow\":\n return <OverflowElement blockId={blockId} className={className} element={element} path={path} />;\n case \"channels_select\":\n case \"conversations_select\":\n case \"external_select\":\n case \"multi_channels_select\":\n case \"multi_conversations_select\":\n case \"multi_external_select\":\n case \"multi_static_select\":\n case \"multi_users_select\":\n case \"static_select\":\n case \"users_select\":\n return <SelectElement blockId={blockId} className={className} element={element} path={path} />;\n case \"datepicker\":\n case \"datetimepicker\":\n case \"email_text_input\":\n case \"file_input\":\n case \"number_input\":\n case \"plain_text_input\":\n case \"rich_text_input\":\n case \"timepicker\":\n case \"url_text_input\":\n return <InputElement blockId={blockId} className={className} element={element} path={path} />;\n case \"workflow_button\":\n {\n if (!isValidInteractiveElement(element, path)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.button);\n return <button {...sx} className={joinClassNames(sx.className, className)} type=\"button\">\n {element.text.text}\n </button>;\n }\n }\n return assertNever(element);\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { formatSlackDate } from \"./date.js\";\nimport { coreEmojiGlyph } from \"./emoji.js\";\nexport type MrkdwnToken = {\n readonly kind: \"text\";\n readonly value: string;\n} | {\n readonly children: readonly MrkdwnToken[];\n readonly kind: \"bold\" | \"italic\" | \"strike\";\n} | {\n readonly kind: \"code\";\n readonly value: string;\n} | {\n readonly kind: \"code_block\";\n readonly value: string;\n} | {\n readonly kind: \"emoji\";\n readonly name: string;\n} | {\n readonly href: string;\n readonly kind: \"link\";\n readonly label: string;\n} | {\n readonly fallback?: string;\n readonly format?: string;\n readonly href?: string;\n readonly id: string;\n readonly kind: \"channel\" | \"date\" | \"team\" | \"user\" | \"usergroup\";\n} | {\n readonly kind: \"broadcast\";\n readonly range: string;\n};\nconst CONTROL_CHARACTERS = new Set([\"*\", \"_\", \"~\", \"`\", \"<\", \":\"]);\nconst EMOJI_NAME_RE = /^[a-z0-9_+-]{1,64}$/;\nconst WORD_CHAR_RE = /[A-Za-z0-9]/;\nfunction decodeSlackEntities(value: string): string {\n return value.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\").replaceAll(\"&\", \"&\");\n}\nfunction specialToken(contents: string): MrkdwnToken | undefined {\n const decoded = decodeSlackEntities(contents);\n if (decoded.startsWith(\"@\")) {\n return {\n id: decoded.slice(1),\n kind: \"user\"\n };\n }\n if (decoded.startsWith(\"#\")) {\n const [id = \"\", fallback] = decoded.slice(1).split(\"|\", 2);\n return {\n id,\n kind: \"channel\",\n ...(fallback === undefined ? {} : {\n fallback\n })\n };\n }\n if (decoded.startsWith(\"!subteam^\")) {\n const [id = \"\", fallback] = decoded.slice(9).split(\"|\", 2);\n return {\n id,\n kind: \"usergroup\",\n ...(fallback === undefined ? {} : {\n fallback\n })\n };\n }\n if (decoded.startsWith(\"!date^\")) {\n const [descriptor = \"\", fallback] = decoded.slice(6).split(\"|\", 2);\n const [timestamp = \"\", format = \"\", href] = descriptor.split(\"^\", 3);\n return {\n id: timestamp,\n kind: \"date\",\n format,\n ...(fallback === undefined ? {} : {\n fallback\n }),\n ...(href === undefined ? {} : {\n href\n })\n };\n }\n if (decoded === \"!here\" || decoded === \"!channel\" || decoded === \"!everyone\") {\n return {\n kind: \"broadcast\",\n range: decoded.slice(1)\n };\n }\n const separator = decoded.indexOf(\"|\");\n if (separator >= 0) {\n return {\n href: decoded.slice(0, separator),\n kind: \"link\",\n label: decoded.slice(separator + 1)\n };\n }\n if (/^(?:https?:|mailto:)/i.test(decoded)) {\n return {\n href: decoded,\n kind: \"link\",\n label: decoded\n };\n }\n return undefined;\n}\nfunction nextControl(text: string, from: number): number {\n for (let index = from; index < text.length; index += 1) {\n if (CONTROL_CHARACTERS.has(text[index] ?? \"\")) {\n return index;\n }\n }\n return text.length;\n}\nfunction tokenizeInline(text: string, depth: number): readonly MrkdwnToken[] {\n if (depth > 16) {\n return [{\n kind: \"text\",\n value: decodeSlackEntities(text)\n }];\n }\n const tokens: MrkdwnToken[] = [];\n let cursor = 0;\n while (cursor < text.length) {\n if (text.startsWith(\"```\", cursor)) {\n const end = text.indexOf(\"```\", cursor + 3);\n if (end >= 0) {\n tokens.push({\n kind: \"code_block\",\n value: decodeSlackEntities(text.slice(cursor + 3, end))\n });\n cursor = end + 3;\n continue;\n }\n }\n const character = text[cursor] ?? \"\";\n if (character === \"`\") {\n const end = text.indexOf(\"`\", cursor + 1);\n if (end > cursor + 1) {\n tokens.push({\n kind: \"code\",\n value: decodeSlackEntities(text.slice(cursor + 1, end))\n });\n cursor = end + 1;\n continue;\n }\n }\n if (character === \"*\" || character === \"_\" || character === \"~\") {\n const end = text.indexOf(character, cursor + 1);\n if (end > cursor + 1) {\n const kind = character === \"*\" ? \"bold\" : character === \"_\" ? \"italic\" : \"strike\";\n tokens.push({\n children: tokenizeInline(text.slice(cursor + 1, end), depth + 1),\n kind\n });\n cursor = end + 1;\n continue;\n }\n }\n if (character === \"<\") {\n const end = text.indexOf(\">\", cursor + 1);\n if (end >= 0) {\n const token = specialToken(text.slice(cursor + 1, end));\n if (token !== undefined) {\n tokens.push(token);\n cursor = end + 1;\n continue;\n }\n }\n }\n if (character === \":\") {\n const end = text.indexOf(\":\", cursor + 1);\n const name = end < 0 ? \"\" : text.slice(cursor + 1, end);\n // Slack shortcodes are delimited :name: tokens, not any colon-separated\n // substring: require non-word boundaries so times/ratios like 12:30:45\n // or 1:2:3 stay literal text.\n const openBoundaryOk = cursor === 0 || !WORD_CHAR_RE.test(text[cursor - 1] ?? \"\");\n const closeBoundaryOk = end < 0 || end + 1 >= text.length || !WORD_CHAR_RE.test(text[end + 1] ?? \"\");\n if (end > cursor + 1 && openBoundaryOk && closeBoundaryOk && EMOJI_NAME_RE.test(name)) {\n tokens.push({\n kind: \"emoji\",\n name\n });\n cursor = end + 1;\n continue;\n }\n }\n const end = nextControl(text, cursor + 1);\n tokens.push({\n kind: \"text\",\n value: decodeSlackEntities(text.slice(cursor, end))\n });\n cursor = end;\n }\n return tokens;\n}\nexport function tokenizeMrkdwn(text: string): readonly MrkdwnToken[] {\n return tokenizeInline(text, 0);\n}\ninterface TokenViewProps {\n readonly token: MrkdwnToken;\n}\nfunction TokenView({\n token\n}: TokenViewProps): ReactNode {\n const {\n resolvers\n } = useBlockKitContext();\n switch (token.kind) {\n case \"text\":\n return token.value;\n case \"bold\":\n return <strong {...stylex.props(styles.bold)}>\n {token.children.map((child, index) => <TokenView key={`${child.kind}-${String(index)}`} token={child} />)}\n </strong>;\n case \"italic\":\n return <em {...stylex.props(styles.italic)}>\n {token.children.map((child, index) => <TokenView key={`${child.kind}-${String(index)}`} token={child} />)}\n </em>;\n case \"strike\":\n return <s {...stylex.props(styles.strike)}>\n {token.children.map((child, index) => <TokenView key={`${child.kind}-${String(index)}`} token={child} />)}\n </s>;\n case \"code\":\n return <code {...stylex.props(styles.inlineCode)}>{token.value}</code>;\n case \"code_block\":\n return <pre {...stylex.props(styles.pre)}>{token.value}</pre>;\n case \"emoji\":\n return <span aria-label={`:${token.name}:`} role=\"img\">\n {resolvers.emoji?.(token.name) ?? coreEmojiGlyph(token.name) ?? `:${token.name}:`}\n </span>;\n case \"link\":\n {\n const href = safeHref(token.href);\n return href === undefined ? token.label : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {token.label}\n </a>;\n }\n case \"user\":\n return <span {...stylex.props(styles.mention)}>@{resolvers.user?.(token.id) ?? token.id}</span>;\n case \"channel\":\n return <span {...stylex.props(styles.mention)}>\n #{resolvers.channel?.(token.id) ?? token.fallback ?? token.id}\n </span>;\n case \"usergroup\":\n return <span {...stylex.props(styles.mention)}>\n @{resolvers.usergroup?.(token.id) ?? token.fallback ?? token.id}\n </span>;\n case \"team\":\n return <span {...stylex.props(styles.mention)}>@{resolvers.team?.(token.id) ?? token.id}</span>;\n case \"broadcast\":\n return <span {...stylex.props(styles.mention)}>@{token.range}</span>;\n case \"date\":\n {\n const seconds = Number(token.id);\n const content = Number.isFinite(seconds) ? resolvers.date?.(seconds, token.format ?? \"\") ?? formatSlackDate(seconds, token.format ?? \"\", token.fallback) : token.fallback ?? token.id;\n const href = safeHref(token.href);\n return href === undefined ? content : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {content}\n </a>;\n }\n }\n return assertNever(token);\n}\nexport interface MrkdwnProps {\n readonly className?: string | undefined;\n readonly text: string;\n}\nexport function Mrkdwn({\n className,\n text\n}: MrkdwnProps): ReactElement {\n const sx = stylex.props(styles.text);\n return <div {...sx} className={joinClassNames(sx.className, className)}>\n {tokenizeMrkdwn(text).map((token, index) => <TokenView key={`${token.kind}-${String(index)}`} token={token} />)}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement } from \"react\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { TextObjectData } from \"../types.js\";\nimport { Mrkdwn } from \"./Mrkdwn.js\";\nexport interface TextProps {\n readonly className?: string | undefined;\n readonly maxLength?: number | undefined;\n readonly path?: string | undefined;\n readonly text: TextObjectData;\n}\nexport function Text({\n className,\n text\n}: TextProps): ReactElement {\n const value: unknown = text;\n const content = isRecord(value) && typeof value[\"text\"] === \"string\" ? value[\"text\"] : fallbackLabel(value, \"text\");\n if (discriminator(value) === \"mrkdwn\") {\n return <Mrkdwn className={className} text={content} />;\n }\n const sx = stylex.props(styles.text);\n return <div {...sx} className={joinClassNames(sx.className, className)}>\n {content}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { styles } from \"../styles.js\";\nimport { Mrkdwn } from \"./Mrkdwn.js\";\ntype MarkdownBlockToken = {\n readonly kind: \"code\";\n readonly language?: string;\n readonly text: string;\n} | {\n readonly kind: \"divider\";\n} | {\n readonly kind: \"heading\";\n readonly level: number;\n readonly text: string;\n} | {\n readonly items: readonly {\n readonly checked?: boolean;\n readonly task: boolean;\n readonly text: string;\n }[];\n readonly kind: \"list\";\n readonly ordered: boolean;\n} | {\n readonly kind: \"paragraph\" | \"quote\";\n readonly text: string;\n} | {\n readonly headers: readonly string[];\n readonly kind: \"table\";\n readonly rows: readonly (readonly string[])[];\n};\nfunction isDivider(line: string): boolean {\n const trimmed = line.trim();\n return trimmed === \"---\" || trimmed === \"***\" || trimmed === \"___\";\n}\nfunction isTableDivider(line: string): boolean {\n const cells = line.trim().replace(/^\\|/, \"\").replace(/\\|$/, \"\").split(\"|\");\n return cells.length > 0 && cells.every(cell => /^:?-{3,}:?$/.test(cell.trim()));\n}\nfunction tableCells(line: string): readonly string[] {\n return line.trim().replace(/^\\|/, \"\").replace(/\\|$/, \"\").split(\"|\").map(cell => cell.trim());\n}\nfunction listItem(line: string): {\n readonly checked?: boolean;\n readonly ordered: boolean;\n readonly task: boolean;\n readonly text: string;\n} | undefined {\n const task = /^\\s*[-*+]\\s+\\[([ xX])\\]\\s+(.+)$/.exec(line);\n if (task !== null) {\n return {\n checked: (task[1] ?? \"\").toLowerCase() === \"x\",\n ordered: false,\n task: true,\n text: task[2] ?? \"\"\n };\n }\n const bullet = /^\\s*[-*+]\\s+(.+)$/.exec(line);\n if (bullet !== null) {\n return {\n ordered: false,\n task: false,\n text: bullet[1] ?? \"\"\n };\n }\n const ordered = /^\\s*\\d+[.)]\\s+(.+)$/.exec(line);\n if (ordered !== null) {\n return {\n ordered: true,\n task: false,\n text: ordered[1] ?? \"\"\n };\n }\n return undefined;\n}\nexport function tokenizeMarkdown(markdown: string): readonly MarkdownBlockToken[] {\n const lines = markdown.split(\"\\n\");\n const tokens: MarkdownBlockToken[] = [];\n let index = 0;\n while (index < lines.length) {\n const line = lines[index] ?? \"\";\n if (line.trim().length === 0) {\n index += 1;\n continue;\n }\n if (line.trimStart().startsWith(\"```\")) {\n const language = line.trim().slice(3).trim();\n const body: string[] = [];\n index += 1;\n while (index < lines.length && !(lines[index] ?? \"\").trimStart().startsWith(\"```\")) {\n body.push(lines[index] ?? \"\");\n index += 1;\n }\n index += index < lines.length ? 1 : 0;\n tokens.push({\n kind: \"code\",\n text: body.join(\"\\n\"),\n ...(language.length === 0 ? {} : {\n language\n })\n });\n continue;\n }\n if (line.includes(\"|\") && index + 1 < lines.length && isTableDivider(lines[index + 1] ?? \"\")) {\n const headers = tableCells(line);\n const rows: (readonly string[])[] = [];\n index += 2;\n while (index < lines.length && (lines[index] ?? \"\").includes(\"|\")) {\n rows.push(tableCells(lines[index] ?? \"\"));\n index += 1;\n }\n tokens.push({\n headers,\n kind: \"table\",\n rows\n });\n continue;\n }\n if (isDivider(line)) {\n tokens.push({\n kind: \"divider\"\n });\n index += 1;\n continue;\n }\n const heading = /^(#{1,6})\\s+(.+)$/.exec(line);\n if (heading !== null) {\n tokens.push({\n kind: \"heading\",\n level: (heading[1] ?? \"#\").length,\n text: heading[2] ?? \"\"\n });\n index += 1;\n continue;\n }\n const firstItem = listItem(line);\n if (firstItem !== undefined) {\n const items = [firstItem];\n index += 1;\n while (index < lines.length) {\n const next = listItem(lines[index] ?? \"\");\n if (next === undefined || next.ordered !== firstItem.ordered) {\n break;\n }\n items.push(next);\n index += 1;\n }\n tokens.push({\n items,\n kind: \"list\",\n ordered: firstItem.ordered\n });\n continue;\n }\n if (line.trimStart().startsWith(\">\")) {\n const quote: string[] = [];\n while (index < lines.length && (lines[index] ?? \"\").trimStart().startsWith(\">\")) {\n quote.push((lines[index] ?? \"\").trimStart().replace(/^>\\s?/, \"\"));\n index += 1;\n }\n tokens.push({\n kind: \"quote\",\n text: quote.join(\"\\n\")\n });\n continue;\n }\n const paragraph = [line];\n index += 1;\n while (index < lines.length && (lines[index] ?? \"\").trim().length > 0) {\n const next = lines[index] ?? \"\";\n if (next.trimStart().startsWith(\"```\") || isDivider(next) || /^(#{1,6})\\s+/.test(next) || listItem(next) !== undefined || next.trimStart().startsWith(\">\")) {\n break;\n }\n paragraph.push(next);\n index += 1;\n }\n tokens.push({\n kind: \"paragraph\",\n text: paragraph.join(\"\\n\")\n });\n }\n return tokens;\n}\nfunction gfmInlineToMrkdwn(value: string): string {\n return value.replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^)\\s]+)\\)/g, \"<$2|$1>\").replaceAll(\"**\", \"*\").replaceAll(\"__\", \"*\").replaceAll(\"~~\", \"~\");\n}\nfunction headingStyle(level: number): stylex.StyleXStyles {\n if (level <= 1) {\n return styles.heading1;\n }\n if (level === 2) {\n return styles.heading2;\n }\n if (level === 3) {\n return styles.heading3;\n }\n return styles.heading4;\n}\ninterface MarkdownTokenViewProps {\n readonly token: MarkdownBlockToken;\n}\nfunction MarkdownTokenView({\n token\n}: MarkdownTokenViewProps): ReactElement {\n switch (token.kind) {\n case \"paragraph\":\n return <Mrkdwn text={gfmInlineToMrkdwn(token.text)} />;\n case \"quote\":\n return <blockquote {...stylex.props(styles.quote)}>\n <Mrkdwn text={gfmInlineToMrkdwn(token.text)} />\n </blockquote>;\n case \"heading\":\n return <div {...stylex.props(styles.heading, headingStyle(token.level))}>\n <Mrkdwn text={gfmInlineToMrkdwn(token.text)} />\n </div>;\n case \"divider\":\n return <hr {...stylex.props(styles.divider)} />;\n case \"code\":\n return <pre {...stylex.props(styles.pre)} data-language={token.language}>\n {token.text}\n </pre>;\n case \"list\":\n {\n const itemStyle = token.ordered ? styles.listItemOrdered : [styles.listItemBullet, styles.listBullet];\n const children: ReactNode = token.items.map((item, index) => <li {...stylex.props(itemStyle)} key={`${item.text}-${String(index)}`}>\n {item.task ? <>\n <input checked={item.checked} disabled readOnly type=\"checkbox\" />{\" \"}\n </> : null}\n <Mrkdwn text={gfmInlineToMrkdwn(item.text)} />\n </li>);\n return token.ordered ? <ol {...stylex.props(styles.list, styles.listOrdered)}>{children}</ol> : <ul {...stylex.props(styles.list)}>{children}</ul>;\n }\n case \"table\":\n return <div {...stylex.props(styles.tableScroller)}>\n <table {...stylex.props(styles.table)}>\n <thead>\n <tr>\n {token.headers.map((header, index) => <th {...stylex.props(styles.tableCell, styles.tableHeader, index === 0 && styles.tableCellFirstColumn)} key={`${header}-${String(index)}`} scope=\"col\">\n <Mrkdwn text={gfmInlineToMrkdwn(header)} />\n </th>)}\n </tr>\n </thead>\n <tbody>\n {token.rows.map((row, rowIndex) => <tr key={`row-${String(rowIndex)}`}>\n {row.map((cell, cellIndex) => <td {...stylex.props(styles.tableCell, cellIndex === 0 && styles.tableCellFirstColumn)} key={`${cell}-${String(cellIndex)}`}>\n <Mrkdwn text={gfmInlineToMrkdwn(cell)} />\n </td>)}\n </tr>)}\n </tbody>\n </table>\n </div>;\n }\n return assertNever(token);\n}\nexport interface MarkdownProps {\n readonly markdown: string;\n}\nexport function Markdown({\n markdown\n}: MarkdownProps): ReactElement {\n return <div {...stylex.props(styles.markdown)}>\n {tokenizeMarkdown(markdown).map((token, index) => <MarkdownTokenView key={`${token.kind}-${String(index)}`} token={token} />)}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { ImageElement, InteractiveElement } from \"../elements/Elements.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport { Markdown } from \"../text/Markdown.js\";\nimport { RichText } from \"../text/RichText.js\";\nimport { Text } from \"../text/Text.js\";\nimport type { BlockComponentProps, ContextBlockData, DividerBlockData, FileBlockData, HeaderBlockData, ImageElementData, ImageBlockData, MarkdownBlockData, RichTextBlockData, SectionBlockData, VideoBlockData } from \"../types.js\";\nfunction isImageElementData(value: unknown): value is ImageElementData {\n return isRecord(value) && value[\"type\"] === \"image\";\n}\ninterface FrameProps {\n readonly blockId?: string | undefined;\n readonly blockType: string;\n readonly children: ReactNode;\n readonly className?: string | undefined;\n}\n\n/** Shared per-block wrapper (data attributes + base style); internal to blocks/. */\nexport function Frame({\n blockId,\n blockType,\n children,\n className\n}: FrameProps): ReactElement {\n const sx = stylex.props(styles.block);\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={blockId} data-block-type={blockType}>\n {children}\n </div>;\n}\nexport function SectionBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<SectionBlockData>): ReactElement {\n const accessory: unknown = block.accessory;\n const fields = Array.isArray(block.fields) ? block.fields : undefined;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.section)}>\n <div {...stylex.props(styles.sectionContent)}>\n {block.text === undefined ? null : <Text path={`${path}.text`} text={block.text} />}\n {fields === undefined ? null : <div {...stylex.props(styles.fields)}>\n {fields.map((field, index) => <Text key={`${discriminator(field) ?? \"unknown\"}-${String(index)}`} path={`${path}.fields[${String(index)}]`} text={field} />)}\n </div>}\n </div>\n {accessory === undefined ? null : isImageElementData(accessory) ? <div {...stylex.props(styles.accessory)}>\n <ImageElement element={accessory} path={`${path}.accessory`} variant=\"accessory\" />\n </div> : <InteractiveElement blockId={block.block_id} className={stylex.props(styles.accessory).className} element={block.accessory} path={`${path}.accessory`} />}\n </div>\n </Frame>;\n}\nexport function HeaderBlock({\n block,\n className\n}: BlockComponentProps<HeaderBlockData>): ReactElement {\n // Slack's Builder renders a header without a level as an h2 on the \"flat\"\n // scale (15px/900); explicit levels use the measured per-level scale\n // (docs/slack-style-baseline.md, \"header block levels\").\n const rawLevel = block.level === undefined ? undefined : Math.trunc(block.level);\n const level = rawLevel === undefined || Number.isNaN(rawLevel) ? undefined : Math.min(4, Math.max(1, rawLevel));\n const text: unknown = block.text;\n const content = isRecord(text) && typeof text[\"text\"] === \"string\" ? text[\"text\"] : fallbackLabel(block, \"header\");\n const headingStyles = stylex.props(styles.heading, level === 1 && styles.heading1, (level === undefined || level === 2) && styles.heading2, level === 3 && styles.heading3, level === 4 && styles.heading4);\n const heading = level === 1 ? <h1 {...headingStyles}>{content}</h1> : level === 3 ? <h3 {...headingStyles}>{content}</h3> : level === 4 ? <h4 {...headingStyles}>{content}</h4> : <h2 {...headingStyles}>{content}</h2>;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n {heading}\n </Frame>;\n}\nexport function DividerBlock({\n block,\n className\n}: BlockComponentProps<DividerBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <hr {...stylex.props(styles.divider)} />\n </Frame>;\n}\nexport function ImageBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<ImageBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <ImageElement element={block} path={path} />\n {block.title === undefined ? null : <Text className={stylex.props(styles.smallText).className} path={`${path}.title`} text={block.title} />}\n </Frame>;\n}\ntype ContextTextElementData = Extract<ContextBlockData[\"elements\"][number], {\n readonly type: \"mrkdwn\" | \"plain_text\";\n}>;\n/**\n * Runtime payloads may carry context-element shapes this renderer does not\n * know; validation no longer runs before render, so gate on the full text\n * shape instead of assuming every non-image entry is a text object.\n */\nfunction isContextTextElement(value: unknown): value is ContextTextElementData {\n return isRecord(value) && (value[\"type\"] === \"mrkdwn\" || value[\"type\"] === \"plain_text\") && typeof value[\"text\"] === \"string\";\n}\nexport function ContextBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<ContextBlockData>): ReactElement {\n const elements: unknown = block.elements;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.context)}>\n {Array.isArray(elements) ? elements.map((element, index) => {\n if (isImageElementData(element)) {\n return <ImageElement element={element} key={`${element.type}-${String(index)}`} path={`${path}.elements[${String(index)}]`} variant=\"context\" />;\n }\n if (!isContextTextElement(element)) {\n return <span {...stylex.props(styles.unhandled)} data-unhandled-element={discriminator(element) ?? \"unknown\"} key={`unhandled-${String(index)}`}>\n {fallbackLabel(element, \"context element\")}\n </span>;\n }\n return <div {...stylex.props(styles.contextElement)} key={`${element.type}-${String(index)}`}>\n <Text className={stylex.props(styles.contextText).className} path={`${path}.elements[${String(index)}]`} text={element} />\n </div>;\n }) : <span {...stylex.props(styles.unhandled)} data-unhandled-element=\"context\">\n {fallbackLabel(block, \"context block\")}\n </span>}\n </div>\n </Frame>;\n}\nexport function RichTextBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<RichTextBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <RichText block={block} path={path} />\n </Frame>;\n}\nexport function MarkdownBlock({\n block,\n className\n}: BlockComponentProps<MarkdownBlockData>): ReactElement {\n const markdown = typeof block.text === \"string\" ? block.text : fallbackLabel(block, \"markdown block\");\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <Markdown markdown={markdown} />\n </Frame>;\n}\nexport function FileBlock({\n block,\n className\n}: BlockComponentProps<FileBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.file)}>\n <span aria-hidden=\"true\">📎</span>\n <div>\n <strong>Remote file</strong>\n <div {...stylex.props(styles.smallText)}>{block.external_id}</div>\n </div>\n </div>\n </Frame>;\n}\nexport function VideoBlock({\n block,\n className\n}: BlockComponentProps<VideoBlockData>): ReactElement {\n const href = safeHref(typeof block.title_url === \"string\" ? block.title_url : typeof block.video_url === \"string\" ? block.video_url : undefined);\n const title: unknown = block.title;\n const titleText = isRecord(title) && typeof title[\"text\"] === \"string\" ? title[\"text\"] : fallbackLabel(block, \"video\");\n const description: unknown = block.description;\n const descriptionText = isRecord(description) && typeof description[\"text\"] === \"string\" ? description[\"text\"] : undefined;\n const altText = typeof block.alt_text === \"string\" ? block.alt_text : fallbackLabel(block, \"video\");\n const thumbnailUrl = typeof block.thumbnail_url === \"string\" ? block.thumbnail_url : undefined;\n const content: ReactNode = <>\n {thumbnailUrl === undefined ? null : <img {...stylex.props(styles.image, styles.cardHero)} alt={altText} src={thumbnailUrl} />}\n <div {...stylex.props(styles.cardContent)}>\n <strong>{titleText}</strong>\n {descriptionText}\n {typeof block.provider_name !== \"string\" ? null : <span {...stylex.props(styles.smallText)}>{block.provider_name}</span>}\n </div>\n </>;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n {href === undefined ? <div {...stylex.props(styles.card)} aria-label={altText}>\n {content}\n </div> : <a {...stylex.props(styles.card)} aria-label={altText} href={href} rel=\"noreferrer\">\n {content}\n </a>}\n </Frame>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport { useState, type ReactElement, type ReactNode } from \"react\";\nimport { ButtonElement, ImageElement } from \"../elements/Elements.js\";\nimport { blockIdentifier, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport { RichText } from \"../text/RichText.js\";\nimport { Text } from \"../text/Text.js\";\nimport type { AlertBlockData, BlockComponentProps, CardBlockData, CarouselBlockData, DataTableBlockData, PlanBlockData, TableBlockData, TableCellData, TaskCardBlockData } from \"../types.js\";\nimport { Frame } from \"./BasicBlocks.js\";\nexport interface TableCellProps {\n readonly align?: \"center\" | \"left\" | \"right\" | undefined;\n readonly cell: TableCellData;\n readonly className?: string | undefined;\n readonly firstColumn?: boolean | undefined;\n readonly header?: boolean | undefined;\n readonly path?: string | undefined;\n readonly scope?: \"col\" | \"row\" | undefined;\n readonly wrapped?: boolean | undefined;\n}\nexport function TableCell({\n align = \"left\",\n cell,\n className,\n firstColumn = false,\n header = false,\n path = \"cell\",\n scope = \"col\",\n wrapped = false\n}: TableCellProps): ReactElement {\n const sx = stylex.props(styles.tableCell, header && styles.tableHeader, firstColumn && styles.tableCellFirstColumn, wrapped && styles.tableCellWrapped);\n let content: ReactNode;\n const runtimeCell: unknown = cell;\n if (!isRecord(runtimeCell)) {\n content = fallbackLabel(cell, \"table cell\");\n } else {\n switch (cell.type) {\n case \"rich_text\":\n content = <RichText block={cell} path={path} />;\n break;\n case \"raw_number\":\n content = cell.text ?? String(cell.value);\n break;\n case \"raw_text\":\n content = cell.text;\n break;\n default:\n content = fallbackLabel(cell, \"table cell\");\n }\n }\n return header ? <th {...sx} className={joinClassNames(sx.className, className)} scope={scope} style={{\n textAlign: align\n }}>\n {content}\n </th> : <td {...sx} className={joinClassNames(sx.className, className)} style={{\n textAlign: align\n }}>\n {content}\n </td>;\n}\nfunction isTableRow(value: unknown): value is readonly TableCellData[] {\n return Array.isArray(value);\n}\nexport function TableBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<TableBlockData>): ReactElement {\n const rows = Array.isArray(block.rows) ? block.rows.filter(isTableRow) : [];\n const columnSettings = block.column_settings;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.tableScroller)}>\n <table {...stylex.props(styles.table)}>\n <thead>\n <tr>\n {(rows[0] ?? []).map((cell, index) => <TableCell align={columnSettings?.[index]?.align} cell={cell} firstColumn={index === 0} header key={`header-${String(index)}`} path={`${path}.rows[0][${String(index)}]`} wrapped={columnSettings?.[index]?.is_wrapped} />)}\n </tr>\n </thead>\n <tbody>\n {rows.slice(1).map((row, rowIndex) => <tr key={`row-${String(rowIndex + 1)}`}>\n {row.map((cell, cellIndex) => <TableCell align={columnSettings?.[cellIndex]?.align} cell={cell} firstColumn={cellIndex === 0} key={`cell-${String(cellIndex)}`} path={`${path}.rows[${String(rowIndex + 1)}][${String(cellIndex)}]`} wrapped={columnSettings?.[cellIndex]?.is_wrapped} />)}\n </tr>)}\n </tbody>\n </table>\n </div>\n </Frame>;\n}\ninterface DataTableCellContentProps {\n readonly cell: TableCellData;\n readonly path: string;\n}\nfunction DataTableCellContent({\n cell,\n path\n}: DataTableCellContentProps): ReactNode {\n const runtimeCell: unknown = cell;\n if (!isRecord(runtimeCell)) {\n return fallbackLabel(cell, \"table cell\");\n }\n switch (cell.type) {\n case \"rich_text\":\n return <RichText block={cell} path={path} />;\n case \"raw_number\":\n return cell.text ?? String(cell.value);\n case \"raw_text\":\n return cell.text;\n default:\n return fallbackLabel(cell, \"table cell\");\n }\n}\n\n/**\n * Plain-text projection of a cell for the client-side filter. Cells are\n * untrusted runtime payloads: every branch must return a real string or\n * the filter's `.toLowerCase()` throws on the first keystroke.\n */\nfunction cellFilterText(cell: TableCellData): string {\n const runtimeCell: unknown = cell;\n if (!isRecord(runtimeCell)) {\n return \"\";\n }\n if (cell.type === \"raw_text\") {\n const text = runtimeCell[\"text\"];\n return typeof text === \"string\" ? text : \"\";\n }\n if (cell.type === \"raw_number\") {\n const text = runtimeCell[\"text\"];\n if (typeof text === \"string\") {\n return text;\n }\n const value = runtimeCell[\"value\"];\n return typeof value === \"number\" || typeof value === \"string\" ? String(value) : \"\";\n }\n if (cell.type === \"rich_text\") {\n // JSON.stringify returns undefined for undefined input — guard it.\n const serialized = JSON.stringify(runtimeCell[\"elements\"]);\n return typeof serialized === \"string\" ? serialized : \"\";\n }\n return \"\";\n}\nexport function DataTableBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<DataTableBlockData>): ReactElement {\n const requestedPageSize = block.page_size ?? 5;\n const pageSize = Number.isFinite(requestedPageSize) && requestedPageSize > 0 ? Math.max(1, Math.trunc(requestedPageSize)) : 5;\n const rows = Array.isArray(block.rows) ? block.rows.filter(isTableRow) : [];\n const rowHeaderColumnIndex = block.row_header_column_index ?? 0;\n const caption = typeof block.caption === \"string\" ? block.caption : undefined;\n const [page, setPage] = useState(0);\n const [filter, setFilter] = useState(\"\");\n const headerRow = rows[0] ?? [];\n const trimmedFilter = filter.trim().toLowerCase();\n const dataRows = trimmedFilter === \"\" ? rows.slice(1) : rows.slice(1).filter(row => row.some(cell => cellFilterText(cell).toLowerCase().includes(trimmedFilter)));\n const pageCount = Math.max(1, Math.ceil(dataRows.length / pageSize));\n const safePage = Math.min(page, pageCount - 1);\n const visibleRows = dataRows.slice(safePage * pageSize, (safePage + 1) * pageSize);\n const lastVisibleIndex = visibleRows.length - 1;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.dataTable)}>\n <div {...stylex.props(styles.dataTableHeaderBar)}>\n <span {...stylex.props(styles.dataTableTitle)}>{caption}</span>\n <span {...stylex.props(styles.dataTableFilter)}>\n <span aria-hidden=\"true\">⌕</span>\n <input {...stylex.props(styles.dataTableFilterInput)} aria-label={caption === undefined ? \"Filter table\" : `Filter ${caption}`} onChange={event => {\n setFilter(event.target.value);\n setPage(0);\n }} placeholder=\"Filter table...\" type=\"text\" value={filter} />\n </span>\n <button {...stylex.props(styles.dataTableIconButton)} aria-label={caption === undefined ? \"Expand table\" : `View ${caption}`} type=\"button\">\n <span aria-hidden=\"true\">⤢</span>\n </button>\n <button {...stylex.props(styles.dataTableIconButton)} aria-label=\"More actions\" type=\"button\">\n <span aria-hidden=\"true\">⋮</span>\n </button>\n </div>\n <div {...stylex.props(styles.dataTableBand, pageCount <= 1 && styles.dataTableBandUnpaginated)}>\n <table {...stylex.props(styles.dataTableTable)}>\n {caption === undefined ? null : <caption {...stylex.props(styles.visuallyHidden)}>{caption}</caption>}\n <thead>\n <tr>\n {headerRow.map((cell, index) => <th {...stylex.props(styles.dataTableTh)} key={`header-${String(index)}`} scope=\"col\">\n <DataTableCellContent cell={cell} path={`${path}.rows[0][${String(index)}]`} />\n </th>)}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row, rowIndex) => {\n const sourceIndex = safePage * pageSize + rowIndex + 1;\n const lastColumnIndex = row.length - 1;\n return <tr key={`row-${String(sourceIndex)}`}>\n {row.map((cell, cellIndex) => {\n const cellSx = stylex.props(styles.dataTableTd, rowIndex === 0 && cellIndex === 0 && styles.dataTableRadiusTopStart, rowIndex === 0 && cellIndex === lastColumnIndex && styles.dataTableRadiusTopEnd, rowIndex === lastVisibleIndex && cellIndex === 0 && styles.dataTableRadiusBottomStart, rowIndex === lastVisibleIndex && cellIndex === lastColumnIndex && styles.dataTableRadiusBottomEnd);\n const content = <DataTableCellContent cell={cell} path={`${path}.rows[${String(sourceIndex)}][${String(cellIndex)}]`} />;\n return cellIndex === rowHeaderColumnIndex ? <th {...cellSx} key={`cell-${String(cellIndex)}`} scope=\"row\">\n {content}\n </th> : <td {...cellSx} key={`cell-${String(cellIndex)}`}>\n {content}\n </td>;\n })}\n </tr>;\n })}\n </tbody>\n </table>\n {pageCount <= 1 ? null : <div {...stylex.props(styles.dataTablePagination)}>\n <button {...stylex.props(styles.dataTablePageChevron)} aria-label=\"Previous\" disabled={safePage === 0} onClick={() => {\n setPage(current => Math.max(0, current - 1));\n }} type=\"button\">\n <span aria-hidden=\"true\">‹</span>\n </button>\n {Array.from({\n length: pageCount\n }, (_, pageIndex) => <button {...stylex.props(styles.dataTablePageButton, pageIndex === safePage && styles.dataTablePageButtonActive)} aria-current={pageIndex === safePage ? \"page\" : undefined} key={`page-${String(pageIndex)}`} onClick={() => {\n setPage(pageIndex);\n }} type=\"button\">\n {pageIndex + 1}\n </button>)}\n <button {...stylex.props(styles.dataTablePageChevron)} aria-label=\"Next\" disabled={safePage === pageCount - 1} onClick={() => {\n setPage(current => Math.min(pageCount - 1, current + 1));\n }} type=\"button\">\n <span aria-hidden=\"true\">›</span>\n </button>\n </div>}\n </div>\n </div>\n </Frame>;\n}\nexport function CardBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<CardBlockData>): ReactElement {\n const actions = Array.isArray(block.actions) ? block.actions : undefined;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.card)}>\n {block.hero_image === undefined ? null : <ImageElement element={block.hero_image} path={`${path}.hero_image`} variant=\"cardHero\" />}\n <div {...stylex.props(styles.cardContent)}>\n {block.icon === undefined && block.slack_icon === undefined && block.title === undefined && block.subtitle === undefined ? null : <div {...stylex.props(styles.cardHeading)}>\n {block.icon === undefined ? block.slack_icon === undefined ? null : <span aria-hidden=\"true\">◆</span> : <ImageElement element={block.icon} path={`${path}.icon`} variant=\"cardIcon\" />}\n <div>\n {block.title === undefined ? null : <Text className={stylex.props(styles.cardTitle).className} path={`${path}.title`} text={block.title} />}\n {block.subtitle === undefined ? null : <Text className={stylex.props(styles.smallText).className} path={`${path}.subtitle`} text={block.subtitle} />}\n </div>\n </div>}\n {block.body === undefined ? null : <Text path={`${path}.body`} text={block.body} />}\n {block.subtext === undefined ? null : <Text className={stylex.props(styles.smallText).className} path={`${path}.subtext`} text={block.subtext} />}\n </div>\n {actions === undefined ? null : <div {...stylex.props(styles.cardActions)}>\n {actions.map((action, index) => <ButtonElement blockId={block.block_id} element={action} key={`${isRecord(action) && typeof action[\"action_id\"] === \"string\" ? action[\"action_id\"] : \"button\"}-${String(index)}`} path={`${path}.actions[${String(index)}]`} />)}\n </div>}\n </div>\n </Frame>;\n}\nfunction isCardBlockData(value: unknown): value is CardBlockData {\n return isRecord(value) && value[\"type\"] === \"card\";\n}\nexport function CarouselBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<CarouselBlockData>): ReactElement {\n const elements: unknown = block.elements;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.carousel)}>\n {Array.isArray(elements) ? elements.map((card, index) => isCardBlockData(card) ? <CardBlock block={card} className={stylex.props(styles.carouselCard).className} key={`${blockIdentifier(card) ?? \"card\"}-${String(index)}`} path={`${path}.elements[${String(index)}]`} /> : <div {...stylex.props(styles.unhandled)} data-unhandled-block key={`unknown-${String(index)}`}>\n {fallbackLabel(card, \"carousel card\")}\n </div>) : null}\n </div>\n </Frame>;\n}\nexport function AlertBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<AlertBlockData>): ReactElement {\n const level = block.level ?? \"default\";\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.alert, level === \"info\" && styles.alertInfo, level === \"warning\" && styles.alertWarning, level === \"error\" && styles.alertError, level === \"success\" && styles.alertSuccess)}>\n <span aria-hidden=\"true\">\n {level === \"warning\" ? \"⚠\" : level === \"error\" ? \"!\" : level === \"success\" ? \"✓\" : \"i\"}\n </span>\n <Text path={`${path}.text`} text={block.text} />\n </div>\n </Frame>;\n}\nexport function TaskCardBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<TaskCardBlockData>): ReactElement {\n const sources: unknown = block.sources;\n const status = typeof block.status === \"string\" ? block.status : \"unknown\";\n const title = typeof block.title === \"string\" ? block.title : fallbackLabel(block, \"task\");\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.task)}>\n <div {...stylex.props(styles.taskHeading)}>\n <span aria-hidden=\"true\">\n {status === \"complete\" ? \"✓\" : status === \"error\" ? \"!\" : status === \"in_progress\" ? \"◌\" : \"○\"}\n </span>\n <span>{title}</span>\n <span {...stylex.props(styles.taskStatus)}>{status}</span>\n </div>\n {block.details === undefined ? null : <RichText block={block.details} path={`${path}.details`} />}\n {block.output === undefined ? null : <RichText block={block.output} path={`${path}.output`} />}\n {Array.isArray(sources) ? <div {...stylex.props(styles.context)}>\n {sources.map((source, index) => {\n if (!isRecord(source)) {\n return <span {...stylex.props(styles.unhandled)} key={`unknown-${String(index)}`}>\n {fallbackLabel(source, \"task source\")}\n </span>;\n }\n const href = safeHref(typeof source[\"url\"] === \"string\" ? source[\"url\"] : undefined);\n const text = typeof source[\"text\"] === \"string\" ? source[\"text\"] : fallbackLabel(source, \"task source\");\n const key = typeof source[\"url\"] === \"string\" ? source[\"url\"] : `source-${String(index)}`;\n const reactKey = `${key}-${String(index)}`;\n return href === undefined ? <span key={reactKey}>{text}</span> : <a {...stylex.props(styles.link)} href={href} key={reactKey} rel=\"noreferrer\">\n {text}\n </a>;\n })}\n </div> : null}\n </div>\n </Frame>;\n}\nfunction isTaskCardBlockData(value: unknown): value is TaskCardBlockData {\n return isRecord(value) && value[\"type\"] === \"task_card\";\n}\nexport function PlanBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<PlanBlockData>): ReactElement {\n const tasks: unknown = block.tasks;\n const title = typeof block.title === \"string\" ? block.title : fallbackLabel(block, \"plan\");\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.plan)}>\n <strong>{title}</strong>\n {Array.isArray(tasks) ? tasks.map((task, index) => isTaskCardBlockData(task) ? <TaskCardBlock block={task} key={`${typeof task[\"task_id\"] === \"string\" ? task[\"task_id\"] : \"task\"}-${String(index)}`} path={`${path}.tasks[${String(index)}]`} /> : <div {...stylex.props(styles.unhandled)} data-unhandled-block key={`unknown-${String(index)}`}>\n {fallbackLabel(task, \"plan task\")}\n </div>) : null}\n </div>\n </Frame>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport { useCallback, useEffect, useRef, useState, type ReactElement, type ReactNode } from \"react\";\nimport { CHART_CARD_MAX_WIDTH, CHART_CARD_MIN_WIDTH, CHART_PLOT_BOTTOM, CHART_PLOT_GUTTER, CHART_PLOT_TOP, CHART_SVG_HEIGHT, CHART_SVG_INSET, PIE_CENTER_Y, PIE_RADIUS } from \"../constants.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { chartSeriesStyles, defaultChartSeriesStyle, styles, type ChartSeriesStyle } from \"../styles.js\";\nimport type { BlockComponentProps, CartesianChartData, DataVisualizationBlockData, PieChartData } from \"../types.js\";\nimport { Frame } from \"./BasicBlocks.js\";\n\n/**\n * Slack redraws charts at absolute pixel coordinates for the current\n * container width (no SVG viewBox scaling) — measured 2026-07-21, see\n * docs/slack-style-baseline.md. The default matches the 580px Builder\n * message column: card 580 − 26 (padding + border) = 554.\n */\nconst DEFAULT_SVG_WIDTH = 554;\nfunction useChartWidth(): {\n readonly ref: (node: HTMLDivElement | null) => void;\n readonly width: number;\n} {\n const [width, setWidth] = useState(DEFAULT_SVG_WIDTH + CHART_SVG_INSET);\n const observerRef = useRef<ResizeObserver | undefined>(undefined);\n // Stable callback ref: an inline function would change identity every\n // render, making React detach/reattach it and churn the ResizeObserver.\n const ref = useCallback((node: HTMLDivElement | null): void => {\n observerRef.current?.disconnect();\n observerRef.current = undefined;\n if (node === null) {\n return;\n }\n const measure = (): void => {\n const next = node.getBoundingClientRect().width;\n if (next > 0) {\n setWidth(next);\n }\n };\n // Synchronous initial measurement — otherwise the chart renders at the\n // 580px default until the observer's first async callback.\n measure();\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n observerRef.current = observer;\n }, []);\n useEffect(() => () => observerRef.current?.disconnect(), []);\n return {\n ref,\n width\n };\n}\n\n/** d3-style tick step: 1/2/5 × 10^k targeting a given tick count. */\nfunction tickStep(span: number, count: number): number {\n const step = span / Math.max(1, count);\n const power = Math.pow(10, Math.floor(Math.log10(step)));\n const error = step / power;\n if (error >= Math.sqrt(50)) {\n return power * 10;\n }\n if (error >= Math.sqrt(10)) {\n return power * 5;\n }\n if (error >= Math.SQRT2) {\n return power * 2;\n }\n return power;\n}\n\n/**\n * Nice ticks covering [min(0, dataMin), dataMax]. The Builder showed\n * 0/20/40/60/80 for a data max of 75 with the top tick as the scale\n * maximum; extending the domain to the next tick when data exceeds the\n * last tick is inferred.\n */\nfunction niceTicks(dataMin: number, dataMax: number): readonly number[] {\n const low = Math.min(0, dataMin);\n const high = dataMax > low ? dataMax : low + 1;\n const step = tickStep(high - low, 4);\n const first = Math.floor(low / step);\n const last = Math.ceil(high / step);\n const ticks: number[] = [];\n for (let index = first; index <= last; index += 1) {\n ticks.push(index * step);\n }\n return ticks;\n}\n\n/** Slack rounds gridlines half-down to a crisp half-pixel. */\nfunction crisp(y: number): number {\n return Math.ceil(y - 0.5) + 0.5;\n}\ninterface CartesianGeometry {\n readonly plotLeft: number;\n readonly plotRight: number;\n readonly svgWidth: number;\n readonly ticks: readonly number[];\n readonly y: (value: number) => number;\n}\nfunction cartesianGeometry(svgWidth: number, values: readonly number[]): CartesianGeometry {\n let dataMin = 0;\n let dataMax = 0;\n for (const value of values) {\n dataMin = Math.min(dataMin, value);\n dataMax = Math.max(dataMax, value);\n }\n const ticks = niceTicks(dataMin, dataMax);\n const domainMin = ticks[0] ?? 0;\n const domainMax = ticks[ticks.length - 1] ?? 1;\n const range = domainMax - domainMin || 1;\n return {\n plotLeft: CHART_PLOT_GUTTER,\n plotRight: svgWidth,\n svgWidth,\n ticks,\n y: (value: number) => CHART_PLOT_BOTTOM - (value - domainMin) / range * (CHART_PLOT_BOTTOM - CHART_PLOT_TOP)\n };\n}\nfunction seriesEntry(index: number): ChartSeriesStyle {\n return chartSeriesStyles[index % chartSeriesStyles.length] ?? defaultChartSeriesStyle;\n}\ntype CartesianSeries = CartesianChartData[\"series\"][number];\ntype CartesianPoint = CartesianSeries[\"data\"][number];\nfunction pointsInCategoryOrder(series: CartesianSeries, categories: readonly string[]): readonly (CartesianPoint | undefined)[] {\n const pointsByLabel = new Map(series.data.map(point => [point.label, point]));\n return categories.map(category => pointsByLabel.get(category));\n}\n\n/**\n * Rounded-top bar path matching Slack's shape: 4px arcs on the top corners\n * only, flat bottom at the baseline.\n */\nfunction barPath(x: number, width: number, top: number, bottom: number): string {\n const radius = Math.min(4, width / 2, Math.abs(bottom - top));\n const left = x;\n const right = x + width;\n return [`M${String(left + radius)} ${String(top)}`, `L${String(right - radius)} ${String(top)}`, `A${String(radius)} ${String(radius)} 0 0 1 ${String(right)} ${String(top + radius)}`, `L${String(right)} ${String(bottom)}`, `L${String(left)} ${String(bottom)}`, `L${String(left)} ${String(top + radius)}`, `A${String(radius)} ${String(radius)} 0 0 1 ${String(left + radius)} ${String(top)}`, \"Z\"].join(\"\");\n}\ninterface XY {\n readonly x: number;\n readonly y: number;\n}\n\n/**\n * Smooth curve through the points with zeroed end tangents, approximating\n * Slack's spline (exact algorithm unidentified — see baseline doc open\n * questions). Interior tangents follow centripetal Catmull-Rom.\n */\nfunction curvePath(points: readonly XY[]): string {\n if (points.length === 0) {\n return \"\";\n }\n const first = points[0];\n if (first === undefined) {\n return \"\";\n }\n if (points.length === 1) {\n return `M${String(first.x)} ${String(first.y)}`;\n }\n const tangents: XY[] = points.map((_, index) => {\n if (index === 0 || index === points.length - 1) {\n return {\n x: 0,\n y: 0\n };\n }\n const previous = points[index - 1];\n const next = points[index + 1];\n if (previous === undefined || next === undefined) {\n return {\n x: 0,\n y: 0\n };\n }\n return {\n x: (next.x - previous.x) * 0.29,\n y: (next.y - previous.y) * 0.29\n };\n });\n const parts: string[] = [`M${String(first.x)} ${String(first.y)}`];\n for (let index = 0; index < points.length - 1; index += 1) {\n const p0 = points[index];\n const p1 = points[index + 1];\n const t0 = tangents[index];\n const t1 = tangents[index + 1];\n if (p0 === undefined || p1 === undefined || t0 === undefined || t1 === undefined) {\n continue;\n }\n const c1x = p0.x + t0.x;\n const c1y = p0.y + t0.y;\n const c2x = p1.x - t1.x;\n const c2y = p1.y - t1.y;\n parts.push(`C${String(c1x)} ${String(c1y)} ${String(c2x)} ${String(c2y)} ${String(p1.x)} ${String(p1.y)}`);\n }\n return parts.join(\"\");\n}\ninterface AxisTextProps {\n readonly geometry: CartesianGeometry;\n}\nfunction CartesianAxes({\n geometry\n}: AxisTextProps): ReactElement {\n const {\n plotLeft,\n plotRight,\n ticks,\n y\n } = geometry;\n return <>\n {ticks.map(tick => {\n const lineY = crisp(y(tick));\n return <path {...stylex.props(styles.chartGridline)} d={`M${String(plotLeft)} ${String(lineY)}L${String(plotRight)} ${String(lineY)}`} fill=\"none\" key={`grid-${String(tick)}`} />;\n })}\n {ticks.map(tick => <text {...stylex.props(styles.chartTickText)} dy=\"0.32em\" key={`tick-${String(tick)}`} textAnchor=\"end\" x={plotLeft - 8} y={y(tick)}>\n {tick}\n </text>)}\n </>;\n}\ninterface CategoryTicksProps {\n readonly categories: readonly string[];\n readonly tickX: (index: number) => number;\n}\n\n/**\n * Bar charts label band centers; line and area charts label the point\n * positions themselves (measured).\n */\nfunction CategoryTicks({\n categories,\n tickX\n}: CategoryTicksProps): ReactElement {\n return <>\n {categories.map((category, index) => <text {...stylex.props(styles.chartTickText)} key={`${category}-${String(index)}`} textAnchor=\"middle\" x={tickX(index)} y={CHART_PLOT_BOTTOM + 17}>\n {category}\n </text>)}\n </>;\n}\ninterface CartesianChartProps {\n readonly chart: CartesianChartData;\n readonly svgWidth: number;\n readonly title: string;\n}\n\n/**\n * Bar group layout fitted to Builder measurements at 1/3/6 series: gap\n * between bars is 10% of a bar; the group's outer margin per band is\n * band × clamp(0.175 − 0.02 × series, 0.075, 0.155) (interpolation\n * inferred between observed counts).\n */\nfunction barLayout(band: number, seriesCount: number): {\n readonly barWidth: number;\n readonly outer: number;\n} {\n const outerFraction = Math.min(0.155, Math.max(0.075, 0.175 - 0.02 * seriesCount));\n const outer = band * outerFraction;\n const barWidth = (band - 2 * outer) / (1.1 * seriesCount - 0.1);\n return {\n barWidth,\n outer\n };\n}\nfunction CartesianChart({\n chart,\n svgWidth,\n title\n}: CartesianChartProps): ReactElement {\n const categories = chart.axis_config.categories;\n const orderedSeries = chart.series.map(series => ({\n points: pointsInCategoryOrder(series, categories),\n series\n }));\n const values = orderedSeries.flatMap(({\n points\n }) => points.flatMap(point => point === undefined ? [] : [point.value]));\n const geometry = cartesianGeometry(svgWidth, values);\n const {\n plotLeft,\n plotRight,\n y\n } = geometry;\n let seriesShapes: ReactNode;\n let tickX: (index: number) => number;\n if (chart.type === \"bar\") {\n const band = (plotRight - plotLeft) / Math.max(1, categories.length);\n const {\n barWidth,\n outer\n } = barLayout(band, Math.max(1, chart.series.length));\n tickX = index => plotLeft + band * (index + 0.5);\n seriesShapes = orderedSeries.map(({\n points,\n series\n }, seriesIndex) => points.map((point, categoryIndex) => {\n if (point === undefined) {\n return null;\n }\n const x = plotLeft + categoryIndex * band + outer + seriesIndex * (1.1 * barWidth);\n return <path {...stylex.props(seriesEntry(seriesIndex).fill)} d={barPath(x, barWidth, y(point.value), CHART_PLOT_BOTTOM)} data-category={point.label} data-series={series.name} key={`${series.name}-${String(seriesIndex)}-${point.label}-${String(categoryIndex)}`} />;\n }));\n } else {\n const innerRight = plotRight - 13;\n const pointX = (index: number): number => categories.length <= 1 ? (plotLeft + innerRight) / 2 : plotLeft + index * (innerRight - plotLeft) / (categories.length - 1);\n tickX = pointX;\n seriesShapes = orderedSeries.map(({\n points,\n series\n }, seriesIndex) => {\n const xy = points.flatMap((point, categoryIndex) => point === undefined ? [] : [{\n x: pointX(categoryIndex),\n y: y(point.value)\n }]);\n const path = curvePath(xy);\n if (path === \"\") {\n return null;\n }\n const lastPoint = xy[xy.length - 1];\n const firstPoint = xy[0];\n return <g key={`${series.name}-${String(seriesIndex)}`}>\n {chart.type === \"area\" && firstPoint !== undefined && lastPoint !== undefined ? <path {...stylex.props(seriesEntry(seriesIndex).tint, styles.chartAreaFill, seriesIndex >= 6 && styles.chartAreaFallbackFill)} d={`${path}L${String(lastPoint.x)} ${String(CHART_PLOT_BOTTOM)}L${String(firstPoint.x)} ${String(CHART_PLOT_BOTTOM)}Z`} data-series-area={series.name} /> : null}\n <path {...stylex.props(seriesEntry(seriesIndex).stroke, styles.chartLinePath)} d={path} data-series={series.name} fill=\"none\" />\n </g>;\n });\n }\n return <svg {...stylex.props(styles.chartSvg)} aria-label={title} height={CHART_SVG_HEIGHT} role=\"img\" width={svgWidth}>\n <CartesianAxes geometry={geometry} />\n {seriesShapes}\n <CategoryTicks categories={categories} tickX={tickX} />\n </svg>;\n}\ninterface PieChartProps {\n readonly chart: PieChartData;\n readonly svgWidth: number;\n readonly title: string;\n}\nfunction polar(cx: number, cy: number, radius: number, angle: number): XY {\n return {\n x: cx + radius * Math.sin(angle),\n y: cy - radius * Math.cos(angle)\n };\n}\nfunction PieChart({\n chart,\n svgWidth,\n title\n}: PieChartProps): ReactElement {\n const values = chart.segments.map(segment => Number.isFinite(segment.value) ? Math.max(0, segment.value) : 0);\n const total = values.reduce((sum, value) => sum + value, 0);\n if (total <= 0) {\n return <div {...stylex.props(styles.unhandled)} aria-label={`${title}: no chart data`} data-empty-chart role=\"img\">\n No chart data\n </div>;\n }\n const cx = svgWidth / 2;\n let cursor = 0;\n const slices = chart.segments.map((segment, index) => {\n const fraction = (values[index] ?? 0) / total;\n const start = cursor * 2 * Math.PI;\n cursor += fraction;\n const end = cursor * 2 * Math.PI;\n const from = polar(cx, PIE_CENTER_Y, PIE_RADIUS, start);\n const to = polar(cx, PIE_CENTER_Y, PIE_RADIUS, end);\n const largeArc = end - start > Math.PI ? 1 : 0;\n const d = fraction >= 1 ?\n // A full circle cannot be a single arc command; draw two halves.\n `M${String(cx)} ${String(PIE_CENTER_Y - PIE_RADIUS)}A${String(PIE_RADIUS)} ${String(PIE_RADIUS)} 0 1 1 ${String(cx)} ${String(PIE_CENTER_Y + PIE_RADIUS)}A${String(PIE_RADIUS)} ${String(PIE_RADIUS)} 0 1 1 ${String(cx)} ${String(PIE_CENTER_Y - PIE_RADIUS)}Z` : `M${String(from.x)} ${String(from.y)}A${String(PIE_RADIUS)} ${String(PIE_RADIUS)} 0 ${String(largeArc)} 1 ${String(to.x)} ${String(to.y)}L${String(cx)} ${String(PIE_CENTER_Y)}Z`;\n return fraction <= 0 ? null : <path {...stylex.props(seriesEntry(index).fill, styles.pieSlice)} d={d} data-segment={segment.label} key={`${segment.label}-${String(index)}`} />;\n });\n return <svg {...stylex.props(styles.chartSvg)} aria-label={title} height={CHART_SVG_HEIGHT} role=\"img\" width={svgWidth}>\n {slices}\n </svg>;\n}\nconst CARTESIAN_CHART_TYPES = {\n area: true,\n bar: true,\n line: true\n} as const satisfies Readonly<Record<CartesianChartData[\"type\"], true>>;\ntype PieSegment = PieChartData[\"segments\"][number];\nfunction isPieSegment(value: unknown): value is PieSegment {\n return isRecord(value) && typeof value[\"label\"] === \"string\" && typeof value[\"value\"] === \"number\" && Number.isFinite(value[\"value\"]);\n}\nfunction isCartesianPoint(value: unknown): value is CartesianPoint {\n return isRecord(value) && typeof value[\"label\"] === \"string\" && typeof value[\"value\"] === \"number\" && Number.isFinite(value[\"value\"]);\n}\nfunction isCartesianSeries(value: unknown): value is CartesianSeries {\n return isRecord(value) && typeof value[\"name\"] === \"string\" && Array.isArray(value[\"data\"]) && value[\"data\"].every(isCartesianPoint);\n}\n\n/**\n * Runtime payloads may carry chart shapes this renderer does not know;\n * validation no longer runs before render, so gate on the fields each chart\n * component dereferences instead of assuming every non-pie chart is\n * Cartesian.\n */\nfunction isPieChart(value: unknown): value is PieChartData {\n return isRecord(value) && value[\"type\"] === \"pie\" && Array.isArray(value[\"segments\"]) && value[\"segments\"].every(isPieSegment);\n}\nfunction isCartesianChart(value: unknown): value is CartesianChartData {\n if (!isRecord(value)) {\n return false;\n }\n const type = value[\"type\"];\n if (typeof type !== \"string\" || !(type in CARTESIAN_CHART_TYPES)) {\n return false;\n }\n const axisConfig = value[\"axis_config\"];\n return Array.isArray(value[\"series\"]) && value[\"series\"].every(isCartesianSeries) && isRecord(axisConfig) && Array.isArray(axisConfig[\"categories\"]) && axisConfig[\"categories\"].every(category => typeof category === \"string\");\n}\nexport function DataVisualizationBlock({\n block,\n className\n}: BlockComponentProps<DataVisualizationBlockData>): ReactElement {\n const chart: unknown = block.chart;\n const title = typeof block.title === \"string\" ? block.title : fallbackLabel(block, \"chart\");\n const {\n ref,\n width\n } = useChartWidth();\n const cardWidth = Math.min(CHART_CARD_MAX_WIDTH, Math.max(CHART_CARD_MIN_WIDTH, width));\n const svgWidth = cardWidth - CHART_SVG_INSET;\n const cartesian = isCartesianChart(chart) ? chart : undefined;\n const pie = cartesian === undefined && isPieChart(chart) ? chart : undefined;\n let content: ReactNode;\n let legendLabels: readonly string[];\n if (pie !== undefined) {\n content = <PieChart chart={pie} svgWidth={svgWidth} title={title} />;\n legendLabels = pie.segments.map(segment => segment.label);\n } else if (cartesian !== undefined) {\n content = <CartesianChart chart={cartesian} svgWidth={svgWidth} title={title} />;\n legendLabels = cartesian.series.map(series => series.name);\n } else {\n content = <div {...stylex.props(styles.unhandled)} data-unhandled-chart-type={discriminator(chart) ?? \"unknown\"}>\n {fallbackLabel(chart, \"chart\")}\n </div>;\n legendLabels = [];\n }\n const xLabel = cartesian?.axis_config.x_label;\n const yLabel = cartesian?.axis_config.y_label;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.chartScroller)}>\n <div {...stylex.props(styles.chartCard)} ref={ref}>\n <div {...stylex.props(styles.chartContent)}>\n <h3 {...stylex.props(styles.chartTitle)}>{title}</h3>\n <div {...stylex.props(styles.chartPlotArea)}>\n <div {...stylex.props(styles.chartCanvas)}>\n {content}\n {yLabel === undefined ? null : <div {...stylex.props(styles.chartYAxisLabel)}>\n <span {...stylex.props(styles.chartYAxisLabelText)}>{yLabel}</span>\n </div>}\n </div>\n {/* Cartesian charts always reserve the 8px label strip, even\n with no x_label (measured). */}\n {cartesian === undefined ? null : <div {...stylex.props(styles.chartXAxisLabel)}>{xLabel}</div>}\n {legendLabels.length === 0 ? null : <div {...stylex.props(styles.chartLegend, cartesian !== undefined && styles.chartLegendCartesian)}>\n {legendLabels.map((label, index) => <span {...stylex.props(styles.chartLegendItem)} key={`${label}-${String(index)}`}>\n <span {...stylex.props(styles.chartLegendSwatch, seriesEntry(index).swatch)} aria-hidden=\"true\" />\n {label}\n </span>)}\n </div>}\n </div>\n </div>\n </div>\n </div>\n </Frame>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement } from \"react\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { InteractiveElement } from \"../elements/Elements.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { ActionsBlockData, BlockComponentProps, ContextActionsBlockData, InputBlockData } from \"../types.js\";\ntype FeedbackButtonsData = Extract<ContextActionsBlockData[\"elements\"][number], {\n readonly type: \"feedback_buttons\";\n}>;\ntype IconButtonData = Extract<ContextActionsBlockData[\"elements\"][number], {\n readonly type: \"icon_button\";\n}>;\nfunction hasButtonText(value: unknown): boolean {\n return isRecord(value) && isRecord(value[\"text\"]) && typeof value[\"text\"][\"text\"] === \"string\";\n}\n\n/**\n * Runtime payloads may carry context-action shapes this renderer does not\n * know; validation no longer runs before render, so gate on the full\n * feedback shape instead of assuming every non-icon entry is feedback.\n */\nfunction isFeedbackButtons(value: unknown): value is FeedbackButtonsData {\n return isRecord(value) && value[\"type\"] === \"feedback_buttons\" && hasButtonText(value[\"positive_button\"]) && hasButtonText(value[\"negative_button\"]);\n}\nfunction isIconButton(value: unknown): value is IconButtonData {\n return isRecord(value) && value[\"type\"] === \"icon_button\" && hasButtonText(value);\n}\nexport function ActionsBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<ActionsBlockData>): ReactElement {\n const sx = stylex.props(styles.block, styles.actions);\n const elements = Array.isArray(block.elements) ? block.elements : [];\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={block.block_id} data-block-type={block.type}>\n {elements.map((element, index) => <InteractiveElement blockId={block.block_id} element={element} key={`${discriminator(element) ?? \"unknown\"}-${isRecord(element) && typeof element[\"action_id\"] === \"string\" ? element[\"action_id\"] : \"action\"}-${String(index)}`} path={`${path}.elements[${String(index)}]`} />)}\n </div>;\n}\nexport function InputBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<InputBlockData>): ReactElement {\n const sx = stylex.props(styles.block, styles.inputBlock);\n const label: unknown = block.label;\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={block.block_id} data-block-type={block.type}>\n <div {...stylex.props(styles.inputLabel)}>\n {isRecord(label) && typeof label[\"text\"] === \"string\" ? label[\"text\"] : fallbackLabel(label, \"input label\")}\n {block.optional === true ? null : <span {...stylex.props(styles.required)} aria-hidden=\"true\">\n *\n </span>}\n </div>\n <InteractiveElement blockId={block.block_id} element={block.element} path={`${path}.element`} />\n {block.hint === undefined ? null : <div {...stylex.props(styles.smallText)}>\n {isRecord(block.hint) && typeof block.hint[\"text\"] === \"string\" ? block.hint[\"text\"] : fallbackLabel(block.hint, \"input hint\")}\n </div>}\n </div>;\n}\nfunction contextActionText(element: FeedbackButtonsData, polarity: \"negative\" | \"positive\"): string {\n return polarity === \"positive\" ? element.positive_button.text.text : element.negative_button.text.text;\n}\nexport function ContextActionsBlock({\n block,\n className\n}: BlockComponentProps<ContextActionsBlockData>): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n const sx = stylex.props(styles.block, styles.actions);\n const elements: unknown = block.elements;\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={block.block_id} data-block-type={block.type}>\n {Array.isArray(elements) ? elements.map((element, index) => {\n if (isIconButton(element)) {\n const buttonSx = stylex.props(styles.button, styles.iconButton);\n return <button {...buttonSx} aria-label={element.accessibility_label ?? element.text.text} key={`${element.type}-${element.action_id ?? \"button\"}-${String(index)}`} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(block.block_id === undefined ? {} : {\n blockId: block.block_id\n }),\n ...(element.value === undefined ? {} : {\n value: element.value\n })\n });\n }\n }} title={element.text.text} type=\"button\">\n {element.icon === \"trash\" ? \"⌫\" : element.icon}\n </button>;\n }\n if (!isFeedbackButtons(element)) {\n const unhandledSx = stylex.props(styles.unhandled);\n return <div {...unhandledSx} data-unhandled-element={discriminator(element) ?? \"unknown\"} key={`unhandled-${String(index)}`}>\n {fallbackLabel(element, \"context action\")}\n </div>;\n }\n return <div {...stylex.props(styles.actions)} key={`${element.type}-${element.action_id ?? \"feedback\"}-${String(index)}`}>\n <button {...stylex.props(styles.button, styles.iconButton)} aria-label={contextActionText(element, \"positive\")} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n value: element.positive_button.value,\n ...(block.block_id === undefined ? {} : {\n blockId: block.block_id\n })\n });\n }\n }} type=\"button\">\n 👍\n </button>\n <button {...stylex.props(styles.button, styles.iconButton)} aria-label={contextActionText(element, \"negative\")} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n value: element.negative_button.value,\n ...(block.block_id === undefined ? {} : {\n blockId: block.block_id\n })\n });\n }\n }} type=\"button\">\n 👎\n </button>\n </div>;\n }) : <div {...stylex.props(styles.unhandled)} data-unhandled-element=\"context_actions\">\n {fallbackLabel(block, \"context actions block\")}\n </div>}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement } from \"react\";\nimport { assertNever } from \"./assert-never.js\";\nimport { AlertBlock, CardBlock, CarouselBlock, DataTableBlock, PlanBlock, TableBlock, TaskCardBlock } from \"./blocks/AdvancedBlocks.js\";\nimport { DataVisualizationBlock } from \"./blocks/Charts.js\";\nimport { ContextBlock, DividerBlock, FileBlock, Frame, HeaderBlock, ImageBlock, MarkdownBlock, RichTextBlock, SectionBlock, VideoBlock } from \"./blocks/BasicBlocks.js\";\nimport { ActionsBlock, ContextActionsBlock, InputBlock } from \"./blocks/InteractiveBlocks.js\";\nimport { BLOCK_TYPES } from \"./constants.js\";\nimport { ImageElement } from \"./elements/Elements.js\";\nimport { blockIdentifier, discriminator, fallbackLabel, isRecord } from \"./runtime.js\";\nimport { joinClassNames, styles } from \"./styles.js\";\nimport { RichText } from \"./text/RichText.js\";\nimport type { BlockComponentProps, ContainerBlockData, RenderableBlock } from \"./types.js\";\nexport type BlockProps = BlockComponentProps<RenderableBlock>;\ninterface RuntimeBlockProps {\n readonly block: unknown;\n readonly className?: string | undefined;\n readonly path?: string | undefined;\n}\nconst BLOCK_TYPE_SET: ReadonlySet<string> = new Set(BLOCK_TYPES);\nfunction isKnownBlock(value: unknown): value is RenderableBlock {\n const type = discriminator(value);\n return type !== undefined && BLOCK_TYPE_SET.has(type);\n}\nexport function RuntimeBlock({\n block,\n className,\n path = \"block\"\n}: RuntimeBlockProps): ReactElement {\n const runtimeType = discriminator(block);\n if (!isKnownBlock(block)) {\n const sx = stylex.props(styles.block, styles.unhandled);\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-type={runtimeType ?? \"unknown\"} data-unhandled-block role=\"note\">\n {fallbackLabel(block, \"Slack block\")}\n </div>;\n }\n switch (block.type) {\n case \"actions\":\n return <ActionsBlock block={block} className={className} path={path} />;\n case \"alert\":\n return <AlertBlock block={block} className={className} path={path} />;\n case \"card\":\n return <CardBlock block={block} className={className} path={path} />;\n case \"carousel\":\n return <CarouselBlock block={block} className={className} path={path} />;\n case \"container\":\n return <ContainerBlock block={block} className={className} path={path} />;\n case \"context\":\n return <ContextBlock block={block} className={className} path={path} />;\n case \"context_actions\":\n return <ContextActionsBlock block={block} className={className} path={path} />;\n case \"data_table\":\n return <DataTableBlock block={block} className={className} path={path} />;\n case \"data_visualization\":\n return <DataVisualizationBlock block={block} className={className} path={path} />;\n case \"divider\":\n return <DividerBlock block={block} className={className} path={path} />;\n case \"file\":\n return <FileBlock block={block} className={className} path={path} />;\n case \"header\":\n return <HeaderBlock block={block} className={className} path={path} />;\n case \"image\":\n return <ImageBlock block={block} className={className} path={path} />;\n case \"input\":\n return <InputBlock block={block} className={className} path={path} />;\n case \"markdown\":\n return <MarkdownBlock block={block} className={className} path={path} />;\n case \"plan\":\n return <PlanBlock block={block} className={className} path={path} />;\n case \"rich_text\":\n return <RichTextBlock block={block} className={className} path={path} />;\n case \"section\":\n return <SectionBlock block={block} className={className} path={path} />;\n case \"table\":\n return <TableBlock block={block} className={className} path={path} />;\n case \"task_card\":\n return <TaskCardBlock block={block} className={className} path={path} />;\n case \"video\":\n return <VideoBlock block={block} className={className} path={path} />;\n default:\n return assertNever(block);\n }\n}\nexport function Block(props: BlockProps): ReactElement {\n return <RuntimeBlock {...props} />;\n}\n\n// ContainerBlock lives beside the dispatch (not in AdvancedBlocks) because its\n// legal children re-enter RuntimeBlock — anywhere else would be a cycle.\n\nconst CONTAINER_CHILD_TYPES = {\n actions: true,\n context: true,\n divider: true,\n file: true,\n header: true,\n image: true,\n input: true,\n rich_text: true,\n section: true,\n table: true,\n video: true\n} as const satisfies Readonly<Record<ContainerBlockData[\"child_blocks\"][number][\"type\"], true>>;\nfunction isContainerChildBlock(value: unknown): value is ContainerBlockData[\"child_blocks\"][number] {\n const type = discriminator(value);\n return type !== undefined && type in CONTAINER_CHILD_TYPES;\n}\nfunction ContainerHeaderContents({\n block,\n path\n}: {\n readonly block: ContainerBlockData;\n readonly path: string;\n}): ReactElement {\n const title: unknown = block.title;\n const subtitle: unknown = block.subtitle;\n return <>\n {block.icon === undefined ? null : <ImageElement element={block.icon} path={`${path}.icon`} variant=\"cardIcon\" />}\n <div>\n {block.rich_text_title === undefined ? block.title === undefined ? null : <strong>\n {isRecord(title) && typeof title[\"text\"] === \"string\" ? title[\"text\"] : fallbackLabel(title, \"container title\")}\n </strong> : <RichText block={block.rich_text_title} path={`${path}.rich_text_title`} />}\n {block.subtitle === undefined ? null : <div {...stylex.props(styles.smallText)}>\n {isRecord(subtitle) && typeof subtitle[\"text\"] === \"string\" ? subtitle[\"text\"] : fallbackLabel(subtitle, \"container subtitle\")}\n </div>}\n </div>\n </>;\n}\nfunction ContainerBody({\n block,\n path\n}: {\n readonly block: ContainerBlockData;\n readonly path: string;\n}): ReactElement {\n const children: unknown = block.child_blocks;\n return <div {...stylex.props(styles.containerBody)}>\n {Array.isArray(children) ? children.map((child, index) => isContainerChildBlock(child) ? <RuntimeBlock block={child} key={`${discriminator(child) ?? \"unknown\"}-${blockIdentifier(child) ?? \"block\"}-${String(index)}`} path={`${path}.child_blocks[${String(index)}]`} /> : <div {...stylex.props(styles.unhandled)} data-block-type={discriminator(child) ?? \"unknown\"} data-unhandled-block key={`unknown-${String(index)}`}>\n {fallbackLabel(child, \"Slack block\")}\n </div>) : null}\n </div>;\n}\nexport function ContainerBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<ContainerBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n {block.is_collapsible === true ? <details {...stylex.props(styles.container)} open={block.default_collapsed !== true}>\n <summary {...stylex.props(styles.containerHeader, block.has_header_divider === true && styles.containerHeaderDivider)}>\n <ContainerHeaderContents block={block} path={path} />\n </summary>\n <ContainerBody block={block} path={path} />\n </details> : <div {...stylex.props(styles.container)}>\n <div {...stylex.props(styles.containerHeader, block.has_header_divider === true && styles.containerHeaderDivider)}>\n <ContainerHeaderContents block={block} path={path} />\n </div>\n <ContainerBody block={block} path={path} />\n </div>}\n </Frame>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport { useMemo, type ReactElement } from \"react\";\nimport { RuntimeBlock } from \"./Block.js\";\nimport { BlockKitProvider } from \"./context.js\";\nimport { BlockKitInvariantError } from \"./errors.js\";\nimport { blockIdentifier, discriminator, isRecord } from \"./runtime.js\";\nimport { joinClassNames, styles } from \"./styles.js\";\nimport { darkTheme, lightTheme } from \"./tokens.stylex.js\";\nimport type { BlockKitAction, BlockKitInput, BlockKitResolvers, BlockKitSurface, BlockKitTheme } from \"./types.js\";\ninterface RenderInput {\n readonly blockListPath: string;\n readonly blocks: readonly unknown[];\n}\nfunction parseRenderInput(input: BlockKitInput): RenderInput {\n let value: unknown = input;\n if (typeof input === \"string\") {\n try {\n value = JSON.parse(input) as unknown;\n } catch {\n throw new BlockKitInvariantError(\"data: expected valid JSON\", {\n code: \"invalid_json\",\n path: \"data\"\n });\n }\n }\n if (Array.isArray(value)) {\n return {\n blockListPath: \"data\",\n blocks: value\n };\n }\n if (isRecord(value) && Array.isArray(value[\"blocks\"])) {\n return {\n blockListPath: \"data.blocks\",\n blocks: value[\"blocks\"]\n };\n }\n return {\n blockListPath: \"data\",\n blocks: [value]\n };\n}\nexport interface BlockKitProps {\n readonly \"aria-label\"?: string | undefined;\n readonly className?: string | undefined;\n readonly data: BlockKitInput;\n readonly onAction?: ((action: BlockKitAction) => void) | undefined;\n readonly resolvers?: BlockKitResolvers | undefined;\n readonly surface?: BlockKitSurface | undefined;\n readonly theme?: BlockKitTheme | undefined;\n}\nexport function BlockKit({\n \"aria-label\": ariaLabel = \"Slack Block Kit preview\",\n className,\n data,\n onAction,\n resolvers,\n surface = \"message\",\n theme = \"light\"\n}: BlockKitProps): ReactElement {\n const parsed = useMemo(() => parseRenderInput(data), [data]);\n const sx = stylex.props(theme === \"dark\" ? darkTheme : lightTheme, styles.root, theme === \"dark\" ? styles.rootDark : styles.rootLight);\n return <BlockKitProvider onAction={onAction} resolvers={resolvers} surface={surface}>\n <div {...sx} aria-label={ariaLabel} className={joinClassNames(sx.className, className)} data-block-kit-root data-surface={surface} data-theme={theme} role=\"article\">\n {parsed.blocks.map((block, index) => <RuntimeBlock block={block} key={`${discriminator(block) ?? \"unknown\"}-${blockIdentifier(block) ?? \"block\"}-${String(index)}`} path={`${parsed.blockListPath}[${String(index)}]`} />)}\n </div>\n </BlockKitProvider>;\n}"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../node_modules/.pnpm/@stylexjs+stylex@0.19.0/node_modules/@stylexjs/stylex/lib/es/stylex.mjs","../src/assert-never.ts","../src/context.tsx","../src/runtime.ts","../src/safe-url.ts","../src/tokens.stylex.ts","../src/styles.ts","../src/text/date.ts","../src/text/emoji.ts","../src/text/RichText.tsx","../src/elements/Elements.tsx","../src/text/Mrkdwn.tsx","../src/text/Text.tsx","../src/text/Markdown.tsx","../src/blocks/BasicBlocks.tsx","../src/blocks/AdvancedBlocks.tsx","../src/constants.ts","../src/blocks/Charts.tsx","../src/blocks/InteractiveBlocks.tsx","../src/Block.tsx","../src/errors.ts","../src/BlockKit.tsx","../src/validation.ts"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n","export function assertNever(value: never): never {\n throw new TypeError(`Unreachable value: ${JSON.stringify(value)}`);\n}\n","import { createContext, useContext, useMemo, type ReactElement, type ReactNode } from \"react\";\nimport type { BlockKitAction, BlockKitResolvers, BlockKitSurface } from \"./types.js\";\n\ninterface RenderContextValue {\n readonly onAction: ((action: BlockKitAction) => void) | undefined;\n readonly resolvers: BlockKitResolvers;\n readonly surface: BlockKitSurface;\n}\n\nconst EMPTY_RESOLVERS: BlockKitResolvers = {};\n\nconst DEFAULT_CONTEXT: RenderContextValue = {\n onAction: undefined,\n resolvers: EMPTY_RESOLVERS,\n surface: \"message\",\n};\n\nconst RenderContext = createContext<RenderContextValue>(DEFAULT_CONTEXT);\n\nexport interface BlockKitProviderProps {\n readonly children: ReactNode;\n readonly onAction?: ((action: BlockKitAction) => void) | undefined;\n readonly resolvers?: BlockKitResolvers | undefined;\n readonly surface?: BlockKitSurface | undefined;\n}\n\nexport function BlockKitProvider({\n children,\n onAction,\n resolvers = EMPTY_RESOLVERS,\n surface = \"message\",\n}: BlockKitProviderProps): ReactElement {\n const value = useMemo<RenderContextValue>(\n () => ({ onAction, resolvers, surface }),\n [onAction, resolvers, surface],\n );\n\n return <RenderContext.Provider value={value}>{children}</RenderContext.Provider>;\n}\n\nexport function useBlockKitContext(): RenderContextValue {\n return useContext(RenderContext);\n}\n","export type UnknownRecord = Readonly<Record<string, unknown>>;\n\nexport function isRecord(value: unknown): value is UnknownRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function discriminator(value: unknown): string | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n return typeof value[\"type\"] === \"string\" ? value[\"type\"] : undefined;\n}\n\nexport function blockIdentifier(value: unknown): string | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n return typeof value[\"block_id\"] === \"string\" ? value[\"block_id\"] : undefined;\n}\n\nexport function fallbackLabel(value: unknown, category: string): string {\n if (!isRecord(value)) {\n return `Unsupported ${category}`;\n }\n for (const key of [\"text\", \"label\", \"name\", \"id\", \"url\"] as const) {\n const candidate = value[key];\n if (typeof candidate === \"string\" && candidate.length > 0) {\n return candidate;\n }\n }\n const type = discriminator(value);\n return type === undefined ? `Unsupported ${category}` : `Unsupported ${category}: ${type}`;\n}\n","export function safeHref(href: string | undefined): string | undefined {\n return href !== undefined && /^(?:https?:|mailto:)/i.test(href) ? href : undefined;\n}\n","import * as stylex from \"@stylexjs/stylex\";\ntype TokenName = \"border\" | \"borderStrong\" | \"chartAreaFallbackOpacity\" | \"chartSeries1\" | \"chartSeries2\" | \"chartSeries3\" | \"chartSeries4\" | \"chartSeries5\" | \"chartSeries6\" | \"chartSeries7\" | \"chartSeries8\" | \"chartSeries9\" | \"chartSeries10\" | \"chartSeries11\" | \"chartSeries12\" | \"chartSeriesTint1\" | \"chartSeriesTint2\" | \"chartSeriesTint3\" | \"chartSeriesTint4\" | \"chartSeriesTint5\" | \"chartSeriesTint6\" | \"chartTickFontFamily\" | \"chartTickText\" | \"codeSurface\" | \"codeText\" | \"codeBorder\" | \"controlBorder\" | \"contextText\" | \"danger\" | \"dangerHover\" | \"fadedText\" | \"focus\" | \"fontFamily\" | \"fontSize\" | \"info\" | \"inlineCodeSurface\" | \"largeFontSize\" | \"largeLineHeight\" | \"lineHeight\" | \"link\" | \"linkHover\" | \"mentionSurface\" | \"monoFamily\" | \"outlineFaint\" | \"primary\" | \"primaryHover\" | \"quoteBar\" | \"radiusLarge\" | \"radiusMedium\" | \"radiusSmall\" | \"selectionSurface\" | \"shadow\" | \"smallFontSize\" | \"smallLineHeight\" | \"space1\" | \"space2\" | \"space3\" | \"space4\" | \"space5\" | \"space6\" | \"success\" | \"sunkenBand\" | \"surface\" | \"surfaceRaised\" | \"surfaceSunken\" | \"text\" | \"textFaint\" | \"textSecondary\" | \"warning\";\ntype TokenValues = Readonly<Record<TokenName, string>>;\nexport const tokens: stylex.VarGroup<TokenValues> = {\n surface: \"var(--xf210bc)\",\n surfaceRaised: \"var(--xop8b6t)\",\n surfaceSunken: \"var(--xajfn77)\",\n text: \"var(--x9fzz95)\",\n textSecondary: \"var(--xkl90bz)\",\n textFaint: \"var(--x1wgu5h0)\",\n fadedText: \"var(--x10ufbl0)\",\n contextText: \"var(--xvbs4la)\",\n link: \"var(--x7yxiqt)\",\n linkHover: \"var(--x1vk4vvw)\",\n border: \"var(--x1k1x5vw)\",\n borderStrong: \"var(--xvml0ot)\",\n outlineFaint: \"var(--xs7wnl2)\",\n quoteBar: \"var(--x1s0fkf6)\",\n sunkenBand: \"var(--x1q3wvl1)\",\n focus: \"var(--x1lxtqoo)\",\n primary: \"var(--x60yy18)\",\n primaryHover: \"var(--x1boqxxr)\",\n danger: \"var(--xvck1iw)\",\n dangerHover: \"var(--xuxyi6r)\",\n warning: \"var(--x1h5952)\",\n info: \"var(--x1ewt0uj)\",\n success: \"var(--x1iofpsc)\",\n codeSurface: \"var(--xosg8sf)\",\n codeText: \"var(--xixxt1k)\",\n codeBorder: \"var(--x1pl7a27)\",\n inlineCodeSurface: \"var(--xufkk4o)\",\n controlBorder: \"var(--x1sshfsp)\",\n mentionSurface: \"var(--x1fp2zh6)\",\n selectionSurface: \"var(--x1woami9)\",\n shadow: \"var(--xy8szbr)\",\n fontFamily: \"var(--xpso4pg)\",\n monoFamily: \"var(--xz0850p)\",\n fontSize: \"var(--x187q4sc)\",\n lineHeight: \"var(--xly840x)\",\n smallFontSize: \"var(--x1td96tq)\",\n smallLineHeight: \"var(--x1aku1qx)\",\n largeFontSize: \"var(--x1w2qy7r)\",\n largeLineHeight: \"var(--x1gdkpgo)\",\n radiusSmall: \"var(--xk8bvd3)\",\n radiusMedium: \"var(--xw6fjdp)\",\n radiusLarge: \"var(--x1anb6a2)\",\n space1: \"var(--xyqg4g)\",\n space2: \"var(--xce4sdd)\",\n space3: \"var(--x1aazw3)\",\n space4: \"var(--x9neswr)\",\n space5: \"var(--x2wog52)\",\n space6: \"var(--xf76y9a)\",\n chartTickText: \"var(--xp6fcxv)\",\n chartTickFontFamily: \"var(--xwcrna3)\",\n chartAreaFallbackOpacity: \"var(--x1bv6jb3)\",\n chartSeries1: \"var(--xgbw59a)\",\n chartSeries2: \"var(--x1y9reb)\",\n chartSeries3: \"var(--xtyg07v)\",\n chartSeries4: \"var(--x1efc3vk)\",\n chartSeries5: \"var(--xekxuhj)\",\n chartSeries6: \"var(--xswpqcc)\",\n chartSeries7: \"var(--x119nunw)\",\n chartSeries8: \"var(--x18hclru)\",\n chartSeries9: \"var(--x5a2rib)\",\n chartSeries10: \"var(--x1uug2l2)\",\n chartSeries11: \"var(--xlxwzi2)\",\n chartSeries12: \"var(--x14ykvsx)\",\n chartSeriesTint1: \"var(--xht6yz5)\",\n chartSeriesTint2: \"var(--x5pc1fo)\",\n chartSeriesTint3: \"var(--xsr4xjm)\",\n chartSeriesTint4: \"var(--xl5j2un)\",\n chartSeriesTint5: \"var(--x1nud87m)\",\n chartSeriesTint6: \"var(--x1t1bkho)\",\n __varGroupHash__: \"xpd22m1\"\n};\nexport const lightTheme: stylex.Theme<typeof tokens> = {\n xpd22m1: \"x1l73jb5 xpd22m1\",\n $$css: true\n};\nexport const darkTheme: stylex.Theme<typeof tokens> = {\n xpd22m1: \"xky7mqn xpd22m1\",\n $$css: true\n};","import * as stylex from \"@stylexjs/stylex\";\nimport \"./tokens.stylex.js\";\nimport { tokens } from \"./tokens.stylex.js\";\ntype StyleKey = \"accessory\" | \"accessoryImage\" | \"actions\" | \"alert\" | \"alertError\" | \"alertInfo\" | \"alertSuccess\" | \"alertWarning\" | \"block\" | \"bold\" | \"button\" | \"buttonDanger\" | \"buttonPrimary\" | \"card\" | \"cardActions\" | \"cardContent\" | \"cardHeading\" | \"cardHero\" | \"cardIcon\" | \"cardTitle\" | \"carousel\" | \"carouselCard\" | \"chartAreaFallbackFill\" | \"chartAreaFill\" | \"chartCanvas\" | \"chartCard\" | \"chartContent\" | \"chartGridline\" | \"chartLegend\" | \"chartLegendCartesian\" | \"chartLegendItem\" | \"chartLegendSwatch\" | \"chartLinePath\" | \"chartPlotArea\" | \"chartScroller\" | \"chartSvg\" | \"chartTickText\" | \"chartTitle\" | \"chartXAxisLabel\" | \"chartYAxisLabel\" | \"chartYAxisLabelText\" | \"choice\" | \"choiceGroup\" | \"colorSwatch\" | \"container\" | \"containerBody\" | \"containerHeader\" | \"containerHeaderDivider\" | \"context\" | \"contextElement\" | \"contextImage\" | \"contextText\" | \"dataTable\" | \"dataTableBand\" | \"dataTableBandUnpaginated\" | \"dataTableFilter\" | \"dataTableFilterInput\" | \"dataTableHeaderBar\" | \"dataTableIconButton\" | \"dataTablePageButton\" | \"dataTablePageButtonActive\" | \"dataTablePageChevron\" | \"dataTablePagination\" | \"dataTableRadiusBottomEnd\" | \"dataTableRadiusBottomStart\" | \"dataTableRadiusTopEnd\" | \"dataTableRadiusTopStart\" | \"dataTableTable\" | \"dataTableTd\" | \"dataTableTh\" | \"dataTableTitle\" | \"divider\" | \"fields\" | \"file\" | \"heading\" | \"heading1\" | \"heading2\" | \"heading3\" | \"heading4\" | \"iconButton\" | \"image\" | \"inlineCode\" | \"input\" | \"inputBlock\" | \"inputLabel\" | \"italic\" | \"link\" | \"list\" | \"listBullet\" | \"listBulletAlternate\" | \"listBulletSquare\" | \"listItemBullet\" | \"listItemOrdered\" | \"listOrdered\" | \"listOrderedAlpha\" | \"listOrderedRoman\" | \"markdown\" | \"mention\" | \"overflowButton\" | \"picker\" | \"pickerChevron\" | \"pickerIcon\" | \"pieSlice\" | \"plan\" | \"pre\" | \"quote\" | \"reference\" | \"required\" | \"richBorder\" | \"richSection\" | \"richText\" | \"root\" | \"rootDark\" | \"rootLight\" | \"section\" | \"sectionContent\" | \"select\" | \"smallText\" | \"strike\" | \"table\" | \"tableCell\" | \"tableCellFirstColumn\" | \"tableCellWrapped\" | \"tableHeader\" | \"tableScroller\" | \"task\" | \"taskHeading\" | \"taskStatus\" | \"text\" | \"unhandled\" | \"underline\" | \"visuallyHidden\";\nexport const styles: Readonly<Record<StyleKey, stylex.StyleXStyles>> = {\n root: {\n kWkggS: \"xfs8zev\",\n kMwMTN: \"xr3bju4\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x1rrsw0e\",\n k75w0D: \"xyg637s\",\n kLWn49: \"xtyajrp\",\n ks0D6T: \"x193iq5w\",\n k7Eaqz: \"xeuugli\",\n kHjlTd: \"x1mzt3pk\",\n kGO01o: \"xdzjq9u\",\n kJwUce: \"xfqjyog\",\n khiITx: \"xvmahel\",\n $$css: true\n },\n rootLight: {\n kQNsl9: \"x19aimcq\",\n $$css: true\n },\n rootDark: {\n kQNsl9: \"xntwwlm\",\n $$css: true\n },\n block: {\n k1K539: \"x4vbgl9\",\n k7Eaqz: \"xeuugli\",\n k8WAf4: \"x1hq2hf5\",\n $$css: true\n },\n section: {\n kGNEyG: \"x1cy8zhl\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"x1qughib\",\n k1K539: \"xqws75s\",\n keoZOQ: \"x1kadbbt\",\n k7Eaqz: \"xeuugli\",\n $$css: true\n },\n sectionContent: {\n kzQI83: \"x1iyjqo2\",\n k7Eaqz: \"xeuugli\",\n $$css: true\n },\n fields: {\n k1xSpc: \"xrvj5dj\",\n k1C7PZ: \"x180bbmo\",\n kumcoG: \"xz25sdm\",\n khm7nJ: \"xxs79tx\",\n $$css: true\n },\n accessory: {\n kmuXW: \"x2lah0s\",\n k1K539: \"xqws75s\",\n ks0D6T: \"x8jryan\",\n $$css: true\n },\n text: {\n kqGvvJ: \"x10im51j\",\n khDVqt: \"x126k92a\",\n $$css: true\n },\n smallText: {\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n kLWn49: \"x1bw88vm\",\n $$css: true\n },\n bold: {\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n italic: {\n kKX8nH: \"x1k4tb9n\",\n $$css: true\n },\n strike: {\n kMnn75: \"x5lhwog\",\n $$css: true\n },\n underline: {\n kMnn75: \"xujl8zx\",\n $$css: true\n },\n inlineCode: {\n kWkggS: \"x1e1z2ym\",\n kVAM5u: \"x1d5idl8\",\n kaIpWk: \"x18zih8k\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xdlcw9o\",\n kMv6JI: \"xmmtbmh\",\n kGuDYH: \"xfifm61\",\n kLWn49: \"xd4r4e8\",\n kGO01o: \"x1j85h84\",\n kLKAdn: \"x1nn3v0j\",\n kg3NbH: \"x3y1lgt\",\n $$css: true\n },\n link: {\n kMwMTN: \"x79zlbl xbxavls\",\n kMnn75: \"xkrqix3 x1sur9pj\",\n $$css: true\n },\n mention: {\n kWkggS: \"x1atmwd0\",\n kaIpWk: \"x18zih8k\",\n kMwMTN: \"x79zlbl\",\n kg3NbH: \"x5k8d2m\",\n $$css: true\n },\n colorSwatch: {\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x18zih8k\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x1rg5ohu\",\n kZKoxP: \"x1kpxq89\",\n k71WvV: \"x161fxfn\",\n kXLuUW: \"x19693qn\",\n kzqmXN: \"xsmyaan\",\n $$css: true\n },\n richText: {\n k1xSpc: \"x1lliihq\",\n $$css: true\n },\n richSection: {\n kAzted: \"x1a3d1is\",\n khDVqt: \"x126k92a\",\n $$css: true\n },\n list: {\n kqGvvJ: \"x10im51j\",\n kZCmMZ: \"x1c1uobl\",\n $$css: true\n },\n listItemBullet: {\n kTP8oX: \"xgaypha\",\n kgeoSG: \"x1cpjm7i\",\n kP1sEF: \"x1fhgk32\",\n kgzTxl: \"xf14d2n\",\n kgbC5f: \"x16z0v49\",\n krMjp6: \"x14uouze\",\n kiZrQH: \"x1n7jhte\",\n kJ33su: \"x3mu4kn\",\n kOlAkY: \"x1fitiw8\",\n kH6xsr: \"x3ct3a4\",\n keTefX: \"x9pbi5e\",\n $$css: true\n },\n listItemOrdered: {\n keTefX: \"xi37gm7\",\n kZCmMZ: \"x1j7nfk9\",\n $$css: true\n },\n listBullet: {\n k3DiCg: \"x14alfy\",\n kuPSpR: \"xo40evb\",\n k836YN: \"x1x74kny\",\n $$css: true\n },\n listBulletAlternate: {\n k3DiCg: \"x1ki3hy7\",\n kuPSpR: \"x1qsdrx0\",\n k836YN: \"x1eu2g3i\",\n $$css: true\n },\n listBulletSquare: {\n k3DiCg: \"xvrmgxb\",\n kuPSpR: \"xcwbexy\",\n k836YN: \"xgyhcuf\",\n $$css: true\n },\n listOrdered: {\n kH6xsr: \"x3yw8vx\",\n $$css: true\n },\n listOrderedAlpha: {\n kH6xsr: \"x1rrqm6h\",\n $$css: true\n },\n listOrderedRoman: {\n kH6xsr: \"x19k9dhg\",\n $$css: true\n },\n quote: {\n kLkRvE: \"xs55rtf\",\n kPB484: \"x17c2zl0\",\n kgeoSG: \"x1cpjm7i\",\n k5Ofw7: \"xhq5o37\",\n k96MEf: \"x1y3wzot\",\n kSJ0CW: \"x1682cnc\",\n kEoFBp: \"x1hmns74\",\n kOlAkY: \"x1eencha\",\n kMwMTN: \"xr3bju4\",\n kqGvvJ: \"x19v53j4\",\n kUOVxO: \"xrxpjvj\",\n kZCmMZ: \"x18jm10a\",\n kVAEAm: \"x1n2onr6\",\n khDVqt: \"x126k92a\",\n $$css: true\n },\n richBorder: {\n kGJrpR: \"xoih3la\",\n kVhnKS: \"x1t7ytsu\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n pre: {\n kWkggS: \"x1e1z2ym\",\n kVAM5u: \"x1d5idl8\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMv6JI: \"xmmtbmh\",\n kGuDYH: \"xfifm61\",\n kLWn49: \"xd4r4e8\",\n kqGvvJ: \"x19v53j4\",\n kXHlph: \"xw2csxc\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x17hd1w2\",\n kKi2Bq: \"x1k5ss6i\",\n khDVqt: \"x1sdyfia\",\n $$css: true\n },\n heading: {\n k63SB2: \"x1uu0p8\",\n k1K539: \"xqws75s\",\n keoZOQ: \"xcxhlts\",\n $$css: true\n },\n heading1: {\n kGuDYH: \"xlwa70p\",\n kLWn49: \"x4321kk\",\n $$css: true\n },\n heading2: {\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n $$css: true\n },\n heading3: {\n kGuDYH: \"x1rrsw0e\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"xtyajrp\",\n $$css: true\n },\n heading4: {\n kGuDYH: \"x1rrsw0e\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"xtyajrp\",\n $$css: true\n },\n divider: {\n kL6WhQ: \"x17fznl5\",\n kfdmCh: \"x1q0q8m5\",\n kt9PQ7: \"xso031l\",\n kPef9Z: \"x1ejq31n\",\n kJRH4f: \"xkgv12d\",\n k1K539: \"x81smla\",\n keoZOQ: \"xk59hdr\",\n kUOVxO: \"xrxpjvj\",\n $$css: true\n },\n image: {\n kaIpWk: \"x1hdofj4\",\n k1xSpc: \"x1lliihq\",\n kZKoxP: \"xt7dq6l\",\n kskxy: \"x2z3yb8\",\n ks0D6T: \"x193iq5w\",\n kVIFPx: \"x19kjcj4\",\n $$css: true\n },\n accessoryImage: {\n kaIpWk: \"xsqv9me\",\n kZKoxP: \"x14nwjz3\",\n keTefX: \"x34y3n0\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"x29ncy0\",\n $$css: true\n },\n context: {\n kGNEyG: \"x6s0dn4\",\n kMwMTN: \"xr3bju4\",\n k1xSpc: \"x78zum5\",\n kwnvtZ: \"x1a02dak\",\n kGuDYH: \"x1rrsw0e\",\n kOIVth: \"xxhr3t\",\n kLWn49: \"xtyajrp\",\n kqGvvJ: \"x19v53j4\",\n kAzted: \"x1a3d1is\",\n $$css: true\n },\n contextElement: {\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n k7Eaqz: \"xeuugli\",\n kwRFfy: \"x1o1cwpf\",\n $$css: true\n },\n contextText: {\n kMwMTN: \"xvuv4jf\",\n k1xSpc: \"xt0psk2\",\n kGuDYH: \"x6wetls\",\n kLWn49: \"x1bw88vm\",\n $$css: true\n },\n contextImage: {\n kaIpWk: \"x1cum3z5\",\n kZKoxP: \"x1qx5ct2\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"xw4jnvo\",\n $$css: true\n },\n actions: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kwnvtZ: \"x1a02dak\",\n kOIVth: \"x12n5c1t\",\n k1K539: \"x81smla\",\n $$css: true\n },\n button: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"x1itzlyb xb1q457\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kZKoxP: \"x1fgtraw\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"xggjnk3\",\n ks0D6T: \"x193iq5w\",\n kGO01o: \"x1j85h84\",\n kLKAdn: \"xexx8yu\",\n kg3NbH: \"x17hd1w2\",\n kMnn75: \"xkrqix3\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n buttonPrimary: {\n kWkggS: \"xt83fp8 x6oolif\",\n kMzoRj: \"xc342km\",\n kMwMTN: \"x1f7m26b\",\n $$css: true\n },\n buttonDanger: {\n kWkggS: \"x1cgfsch xrnjtfn\",\n kVAM5u: \"xo5q5bu\",\n kMwMTN: \"x1f7m26b\",\n $$css: true\n },\n overflowButton: {\n k7Eaqz: \"x17s4nb9\",\n kg3NbH: \"xlkn9b3\",\n kzqmXN: \"x1849jeq\",\n $$css: true\n },\n picker: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kkrTdU: \"x1ypdohk\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"xo1l8bm\",\n kZKoxP: \"x1fgtraw\",\n kjj79g: \"x1nhvcw1\",\n kLWn49: \"x1bw88vm\",\n k1K539: \"xqws75s\",\n kg3NbH: \"x1pbfunf\",\n kVAEAm: \"x1n2onr6\",\n kzqmXN: \"xg7gh6y\",\n $$css: true\n },\n pickerIcon: {\n kMwMTN: \"xvuv4jf\",\n kGuDYH: \"xfifm61\",\n kLqNvP: \"xuhg197\",\n kVAEAm: \"x10l6tqk\",\n $$css: true\n },\n pickerChevron: {\n kMwMTN: \"xvuv4jf\",\n kt4wiu: \"x1vikou4\",\n kVAEAm: \"x10l6tqk\",\n $$css: true\n },\n iconButton: {\n kaIpWk: \"x1hdofj4\",\n kZKoxP: \"x10w6t97\",\n kg3NbH: \"x17hd1w2\",\n $$css: true\n },\n select: {\n kysU6D: \"xjyslct\",\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"xif65rj\",\n kZKoxP: \"xc9qbxq\",\n ks0D6T: \"x193iq5w\",\n k7Eaqz: \"x5w4yej\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n choiceGroup: {\n ksu8eU: \"xng3xce\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n kogj98: \"x1ghz6dp\",\n kmVPX3: \"x1717udv\",\n $$css: true\n },\n choice: {\n kGNEyG: \"x1cy8zhl\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n inputBlock: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x17wmo0l\",\n $$css: true\n },\n inputLabel: {\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n required: {\n kMwMTN: \"xyd08hl\",\n keTefX: \"xwklpps\",\n $$css: true\n },\n input: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n kAzted: \"xu0aao5\",\n k8WAf4: \"x1t0vds8\",\n kg3NbH: \"x1r82r8e\",\n kHenm0: \"x288g5\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n tableScroller: {\n ks0D6T: \"x193iq5w\",\n kXHlph: \"xw2csxc\",\n k5wCbM: \"x1rohswg\",\n $$css: true\n },\n table: {\n kLvRdT: \"x1vathgz\",\n kheTzg: \"x1gukg7c\",\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n k8WAf4: \"x1hq2hf5\",\n $$css: true\n },\n tableCell: {\n kBCPoo: \"x1sllf4f\",\n k8ry5P: \"x18b5jzi\",\n ke9TFa: \"x1lun4ml\",\n kL6WhQ: \"x5s9v0k\",\n kfdmCh: \"x1q0q8m5\",\n kt9PQ7: \"xso031l\",\n k63SB2: \"xo1l8bm\",\n kZKoxP: \"x1fgtraw\",\n kGO01o: \"x18d9i69\",\n kLKAdn: \"x1nn3v0j\",\n kg3NbH: \"x1r82r8e\",\n k9WMMc: \"x1yc453h\",\n kXLuUW: \"x16dsc37\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n tableHeader: {\n kLZC3w: \"xmngdqm\",\n kPef9Z: \"x13fuv20\",\n kEafiO: \"x178xt8z\",\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n tableCellFirstColumn: {\n kGJrpR: \"x5xry9r\",\n kVhnKS: \"x1t7ytsu\",\n k2ei4v: \"xpilrb4\",\n $$css: true\n },\n tableCellWrapped: {\n khDVqt: \"xeaf4i8\",\n $$css: true\n },\n card: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kGVxlE: \"xmd40vq\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n k7Eaqz: \"xeuugli\",\n kVQacm: \"xb3r6kr\",\n $$css: true\n },\n cardHero: {\n kaIpWk: \"x2u8bby\",\n kskxy: \"x1xiyphd\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n cardContent: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"xzgshkr\",\n $$css: true\n },\n cardHeading: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n cardIcon: {\n kaIpWk: \"x1hdofj4\",\n kZKoxP: \"xc9qbxq\",\n kVIFPx: \"xl1xv1r\",\n kzqmXN: \"x14qfxbe\",\n $$css: true\n },\n cardTitle: {\n k63SB2: \"x1xlr1w8\",\n $$css: true\n },\n cardActions: {\n kLZC3w: \"xawdbnq\",\n kPef9Z: \"x13fuv20\",\n kEafiO: \"x178xt8z\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"x13a6bvl\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n carousel: {\n k1xSpc: \"x78zum5\",\n kOIVth: \"xyf1f98\",\n ks0D6T: \"x193iq5w\",\n kXHlph: \"xw2csxc\",\n kGO01o: \"x1pl6tyu\",\n kc424l: \"xhfbhpw\",\n $$css: true\n },\n carouselCard: {\n kCS8Yb: \"x1a4bs9z\",\n kzQI83: \"x1c4vz4f\",\n kmuXW: \"x2lah0s\",\n k5xd4v: \"x1bhewko\",\n $$css: true\n },\n alert: {\n kGNEyG: \"x1cy8zhl\",\n kWkggS: \"x1fatxfb\",\n kVAM5u: \"xxqpzdx\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n alertInfo: {\n kGJrpR: \"x159hbhe\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n alertWarning: {\n kGJrpR: \"xyg2ju7\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n alertError: {\n kGJrpR: \"xrncz1v\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n alertSuccess: {\n kGJrpR: \"x1q3k51m\",\n k2ei4v: \"x56jcm7\",\n $$css: true\n },\n container: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kVQacm: \"xb3r6kr\",\n $$css: true\n },\n containerHeader: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"xzgshkr\",\n $$css: true\n },\n containerHeaderDivider: {\n kL6WhQ: \"x17fznl5\",\n kfdmCh: \"x1q0q8m5\",\n kt9PQ7: \"xso031l\",\n $$css: true\n },\n containerBody: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"xzgshkr\",\n $$css: true\n },\n task: {\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n taskHeading: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n k63SB2: \"x1xlr1w8\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n taskStatus: {\n kaIpWk: \"x1e6avla\",\n kGuDYH: \"x1j6dyjg\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"xd4r4e8\",\n kg3NbH: \"x17hd1w2\",\n kP9fke: \"xtvhhri\",\n $$css: true\n },\n plan: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n file: {\n kGNEyG: \"x6s0dn4\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"xyf1f98\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n markdown: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n $$css: true\n },\n chartScroller: {\n kqGvvJ: \"x1npninb\",\n ks0D6T: \"x193iq5w\",\n kXHlph: \"xw2csxc\",\n k5wCbM: \"x1rohswg\",\n $$css: true\n },\n chartCard: {\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"x1h41ylt\",\n kaIpWk: \"xegd2im\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n ks0D6T: \"xc5f494\",\n k7Eaqz: \"x13o0s5z\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n chartContent: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"xs20w12\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n chartTitle: {\n kMwMTN: \"xr3bju4\",\n kGuDYH: \"xlwa70p\",\n k63SB2: \"x1uu0p8\",\n kLWn49: \"x4321kk\",\n kqGvvJ: \"x10im51j\",\n $$css: true\n },\n chartPlotArea: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n $$css: true\n },\n chartCanvas: {\n kVAEAm: \"x1n2onr6\",\n $$css: true\n },\n chartSvg: {\n k1xSpc: \"x1lliihq\",\n kfSwDN: \"x87ps6o\",\n $$css: true\n },\n chartGridline: {\n kjVXCG: \"x1li7xbp\",\n $$css: true\n },\n chartTickText: {\n kDwRjp: \"xivj14e\",\n kMv6JI: \"x1xdnmw1\",\n kGuDYH: \"x6wetls\",\n $$css: true\n },\n chartLinePath: {\n kJdQPc: \"x1ck585c\",\n kfJifR: \"x8pzrqk\",\n $$css: true\n },\n chartAreaFill: {\n kVYP8I: \"xsn0423\",\n $$css: true\n },\n chartAreaFallbackFill: {\n kVYP8I: \"x1e57jxs\",\n $$css: true\n },\n pieSlice: {\n kjVXCG: \"x13lnj35\",\n kJdQPc: \"x1f6yumg\",\n kfJifR: \"x8pzrqk\",\n $$css: true\n },\n chartXAxisLabel: {\n kMwMTN: \"xr3bju4\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"x1bw88vm\",\n kLKAdn: \"xfja3g7\",\n kZCmMZ: \"xyuoyjg\",\n k9WMMc: \"x2b8uid\",\n $$css: true\n },\n chartYAxisLabel: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kZKoxP: \"xopl6j5\",\n k87sOh: \"xfr5jun\",\n kLqNvP: \"x1o0tod\",\n kjj79g: \"xl56j7k\",\n kVAEAm: \"x10l6tqk\",\n kzqmXN: \"x1xp8n7a\",\n $$css: true\n },\n chartYAxisLabelText: {\n kMwMTN: \"xr3bju4\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kLWn49: \"x1bw88vm\",\n khDVqt: \"xuxw1ft\",\n kW8zPn: \"x35i7\",\n $$css: true\n },\n chartLegend: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kwnvtZ: \"x1a02dak\",\n kGuDYH: \"x6wetls\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"x1bw88vm\",\n kLKAdn: \"xfja3g7\",\n $$css: true\n },\n chartLegendCartesian: {\n kZCmMZ: \"xyuoyjg\",\n $$css: true\n },\n chartLegendItem: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n chartLegendSwatch: {\n kaIpWk: \"x10hpsqq\",\n k1xSpc: \"x1lliihq\",\n kZKoxP: \"x170jfvy\",\n kzqmXN: \"x1fsd2vl\",\n $$css: true\n },\n dataTable: {\n k1xSpc: \"x78zum5\",\n kXwgrk: \"xdt5ytf\",\n kqGvvJ: \"x19v53j4\",\n $$css: true\n },\n dataTableHeaderBar: {\n kGNEyG: \"x6s0dn4\",\n k1xSpc: \"x78zum5\",\n kOIVth: \"x12n5c1t\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x1nye7i\",\n $$css: true\n },\n dataTableTitle: {\n kzQI83: \"x1iyjqo2\",\n k63SB2: \"x1uu0p8\",\n k7Eaqz: \"xeuugli\",\n kVQacm: \"xb3r6kr\",\n kg5iWk: \"xlyipyv\",\n khDVqt: \"xuxw1ft\",\n $$css: true\n },\n dataTableFilter: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"x1itzlyb\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xr3bju4\",\n k1xSpc: \"x78zum5\",\n kmuXW: \"x2lah0s\",\n kGuDYH: \"x6wetls\",\n kZKoxP: \"x1fgtraw\",\n kg3NbH: \"x1nye7i\",\n kzqmXN: \"x35muul\",\n $$css: true\n },\n dataTableFilterInput: {\n kWkggS: \"xjbqb8w\",\n ksu8eU: \"xng3xce\",\n kMwMTN: \"xr3bju4\",\n kMv6JI: \"x1pmjkix\",\n kGuDYH: \"x6wetls\",\n k7Eaqz: \"xeuugli\",\n kI3sdo: \"x1a2a7pz\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1nye7i\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n dataTableIconButton: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"xjbqb8w xb1q457\",\n kVAM5u: \"x12ero96\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xlx0kvv\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kmuXW: \"x2lah0s\",\n kZKoxP: \"x1fgtraw\",\n kjj79g: \"xl56j7k\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"xnjsko4\",\n kzqmXN: \"xgd8bvy\",\n $$css: true\n },\n dataTableBand: {\n kWkggS: \"xvpodxj\",\n kaIpWk: \"xegd2im\",\n kg3NbH: \"x1nye7i\",\n $$css: true\n },\n dataTableBandUnpaginated: {\n kGO01o: \"xdzjq9u\",\n $$css: true\n },\n dataTableTable: {\n kLvRdT: \"x1vathgz\",\n kheTzg: \"x1gukg7c\",\n kGuDYH: \"x1rrsw0e\",\n kLWn49: \"xtyajrp\",\n kzqmXN: \"xh8yej3\",\n $$css: true\n },\n dataTableTh: {\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n k63SB2: \"x1xlr1w8\",\n kZKoxP: \"xc9qbxq\",\n kLWn49: \"x1bw88vm\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1r82r8e\",\n k9WMMc: \"x1yc453h\",\n kXLuUW: \"xxymvpz\",\n $$css: true\n },\n dataTableTd: {\n kWkggS: \"x1itzlyb\",\n kLZC3w: \"xccwo0\",\n kPef9Z: \"x13fuv20\",\n kEafiO: \"x178xt8z\",\n kMwMTN: \"xr3bju4\",\n kZKoxP: \"xsdox4t\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1r82r8e\",\n k9WMMc: \"x1yc453h\",\n kXLuUW: \"xxymvpz\",\n $$css: true\n },\n dataTableRadiusTopStart: {\n krdFHd: \"x1kpm8pg\",\n $$css: true\n },\n dataTableRadiusTopEnd: {\n kfmiAY: \"xdd0blh\",\n $$css: true\n },\n dataTableRadiusBottomStart: {\n kVL7Gh: \"x6rc8tz\",\n $$css: true\n },\n dataTableRadiusBottomEnd: {\n kT0f0o: \"xdrwjz2\",\n $$css: true\n },\n dataTablePagination: {\n kGNEyG: \"x6s0dn4\",\n kMwMTN: \"xlx0kvv\",\n k1xSpc: \"x78zum5\",\n kGuDYH: \"x6wetls\",\n kOIVth: \"x12n5c1t\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"x1bw88vm\",\n k8WAf4: \"x1t0vds8\",\n $$css: true\n },\n dataTablePageChevron: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"xjbqb8w\",\n kaIpWk: \"xsqv9me\",\n ksu8eU: \"xng3xce\",\n kMwMTN: \"xlx0kvv\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kGuDYH: \"x1rrsw0e\",\n kZKoxP: \"x1qx5ct2\",\n kjj79g: \"xl56j7k\",\n kSiTet: \"x1hc1fzr x1lfpgzf\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"xnjsko4\",\n kzqmXN: \"xw4jnvo\",\n $$css: true\n },\n dataTablePageButton: {\n kGNEyG: \"x6s0dn4\",\n kWkggS: \"xjbqb8w\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"xng3xce\",\n kMwMTN: \"x1alddev\",\n kkrTdU: \"x1ypdohk\",\n k1xSpc: \"x3nfvp2\",\n kGuDYH: \"x6wetls\",\n kZKoxP: \"x1qx5ct2\",\n kjj79g: \"xl56j7k\",\n kLWn49: \"x1bw88vm\",\n keTefX: \"x34y3n0\",\n k7Eaqz: \"xt4ypqs\",\n k8WAf4: \"xt970qd\",\n kg3NbH: \"x1xijbu4\",\n $$css: true\n },\n dataTablePageButtonActive: {\n kWkggS: \"xt83fp8\",\n kMwMTN: \"x1f7m26b\",\n $$css: true\n },\n reference: {\n kWkggS: \"x199zixi\",\n kaIpWk: \"x18zih8k\",\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n kg3NbH: \"x1nye7i\",\n $$css: true\n },\n unhandled: {\n kWkggS: \"x1fatxfb\",\n kVAM5u: \"xdwi0n9\",\n kaIpWk: \"x1hdofj4\",\n ksu8eU: \"x1y0btm7\",\n kMzoRj: \"xmkeg23\",\n kMwMTN: \"xlx0kvv\",\n kGuDYH: \"x6wetls\",\n k8WAf4: \"x10wxn1s\",\n kg3NbH: \"x1r82r8e\",\n $$css: true\n },\n visuallyHidden: {\n kMcinP: \"xeh89do\",\n kz4h6p: \"x1hyvwdk\",\n kZKoxP: \"xjm9jq1\",\n kVQacm: \"xb3r6kr\",\n kVAEAm: \"x10l6tqk\",\n khDVqt: \"xuxw1ft\",\n kzqmXN: \"x1i1rx1s\",\n $$css: true\n }\n};\nexport interface ChartSeriesStyle {\n /** SVG fill in the series color (bars, pie slices). */\n readonly fill: stylex.StyleXStyles;\n /** SVG stroke in the series color (lines, area outlines). */\n readonly stroke: stylex.StyleXStyles;\n /** Legend swatch background in the series color. */\n readonly swatch: stylex.StyleXStyles;\n /**\n * Area fill. Indices 1-6 use the measured pastel tints; 7-12 fall back to\n * the series color (rendered at reduced opacity by the area style).\n */\n readonly tint: stylex.StyleXStyles;\n}\nconst seriesStyles = {\n fill1: {\n kDwRjp: \"xtzl89e\",\n $$css: true\n },\n fill2: {\n kDwRjp: \"xhtsb06\",\n $$css: true\n },\n fill3: {\n kDwRjp: \"x40gz2k\",\n $$css: true\n },\n fill4: {\n kDwRjp: \"x18bpcoy\",\n $$css: true\n },\n fill5: {\n kDwRjp: \"x1jfbz69\",\n $$css: true\n },\n fill6: {\n kDwRjp: \"xuvz3d1\",\n $$css: true\n },\n fill7: {\n kDwRjp: \"xgh9wk2\",\n $$css: true\n },\n fill8: {\n kDwRjp: \"xcik9sg\",\n $$css: true\n },\n fill9: {\n kDwRjp: \"x1ppuy4m\",\n $$css: true\n },\n fill10: {\n kDwRjp: \"x1kk73je\",\n $$css: true\n },\n fill11: {\n kDwRjp: \"x1grxdoe\",\n $$css: true\n },\n fill12: {\n kDwRjp: \"xn18j63\",\n $$css: true\n },\n stroke1: {\n kjVXCG: \"xr5mi3n\",\n $$css: true\n },\n stroke2: {\n kjVXCG: \"xxuc5cw\",\n $$css: true\n },\n stroke3: {\n kjVXCG: \"x2y61bw\",\n $$css: true\n },\n stroke4: {\n kjVXCG: \"x14vfwx2\",\n $$css: true\n },\n stroke5: {\n kjVXCG: \"x107q3u5\",\n $$css: true\n },\n stroke6: {\n kjVXCG: \"x15kttyg\",\n $$css: true\n },\n stroke7: {\n kjVXCG: \"xwopo54\",\n $$css: true\n },\n stroke8: {\n kjVXCG: \"x1n79cs4\",\n $$css: true\n },\n stroke9: {\n kjVXCG: \"xjwd1fr\",\n $$css: true\n },\n stroke10: {\n kjVXCG: \"xyr8hbx\",\n $$css: true\n },\n stroke11: {\n kjVXCG: \"xr5op8g\",\n $$css: true\n },\n stroke12: {\n kjVXCG: \"xiv3644\",\n $$css: true\n },\n swatch1: {\n kWkggS: \"x16spyt8\",\n $$css: true\n },\n swatch2: {\n kWkggS: \"xvqqcf1\",\n $$css: true\n },\n swatch3: {\n kWkggS: \"xanfl35\",\n $$css: true\n },\n swatch4: {\n kWkggS: \"x1uwglha\",\n $$css: true\n },\n swatch5: {\n kWkggS: \"xxdvdsm\",\n $$css: true\n },\n swatch6: {\n kWkggS: \"xp9jimw\",\n $$css: true\n },\n swatch7: {\n kWkggS: \"x1puna6j\",\n $$css: true\n },\n swatch8: {\n kWkggS: \"x1qvrrfc\",\n $$css: true\n },\n swatch9: {\n kWkggS: \"x1hpw8ye\",\n $$css: true\n },\n swatch10: {\n kWkggS: \"x1g11eq6\",\n $$css: true\n },\n swatch11: {\n kWkggS: \"x13m5t\",\n $$css: true\n },\n swatch12: {\n kWkggS: \"x1mppn65\",\n $$css: true\n },\n tint1: {\n kDwRjp: \"x1ttro82\",\n $$css: true\n },\n tint2: {\n kDwRjp: \"xqo2i6n\",\n $$css: true\n },\n tint3: {\n kDwRjp: \"x1e7csjy\",\n $$css: true\n },\n tint4: {\n kDwRjp: \"x1n92c87\",\n $$css: true\n },\n tint5: {\n kDwRjp: \"xs5yibb\",\n $$css: true\n },\n tint6: {\n kDwRjp: \"x1mnwzol\",\n $$css: true\n }\n};\nexport const defaultChartSeriesStyle: ChartSeriesStyle = {\n fill: seriesStyles.fill1,\n stroke: seriesStyles.stroke1,\n swatch: seriesStyles.swatch1,\n tint: seriesStyles.tint1\n};\nexport const chartSeriesStyles: readonly ChartSeriesStyle[] = [defaultChartSeriesStyle, {\n fill: seriesStyles.fill2,\n stroke: seriesStyles.stroke2,\n swatch: seriesStyles.swatch2,\n tint: seriesStyles.tint2\n}, {\n fill: seriesStyles.fill3,\n stroke: seriesStyles.stroke3,\n swatch: seriesStyles.swatch3,\n tint: seriesStyles.tint3\n}, {\n fill: seriesStyles.fill4,\n stroke: seriesStyles.stroke4,\n swatch: seriesStyles.swatch4,\n tint: seriesStyles.tint4\n}, {\n fill: seriesStyles.fill5,\n stroke: seriesStyles.stroke5,\n swatch: seriesStyles.swatch5,\n tint: seriesStyles.tint5\n}, {\n fill: seriesStyles.fill6,\n stroke: seriesStyles.stroke6,\n swatch: seriesStyles.swatch6,\n tint: seriesStyles.tint6\n}, {\n fill: seriesStyles.fill7,\n stroke: seriesStyles.stroke7,\n swatch: seriesStyles.swatch7,\n tint: seriesStyles.fill7\n}, {\n fill: seriesStyles.fill8,\n stroke: seriesStyles.stroke8,\n swatch: seriesStyles.swatch8,\n tint: seriesStyles.fill8\n}, {\n fill: seriesStyles.fill9,\n stroke: seriesStyles.stroke9,\n swatch: seriesStyles.swatch9,\n tint: seriesStyles.fill9\n}, {\n fill: seriesStyles.fill10,\n stroke: seriesStyles.stroke10,\n swatch: seriesStyles.swatch10,\n tint: seriesStyles.fill10\n}, {\n fill: seriesStyles.fill11,\n stroke: seriesStyles.stroke11,\n swatch: seriesStyles.swatch11,\n tint: seriesStyles.fill11\n}, {\n fill: seriesStyles.fill12,\n stroke: seriesStyles.stroke12,\n swatch: seriesStyles.swatch12,\n tint: seriesStyles.fill12\n}];\nexport function joinClassNames(generated: string | undefined, supplied: string | undefined): string | undefined {\n if (generated === undefined) {\n return supplied;\n }\n if (supplied === undefined || supplied.length === 0) {\n return generated;\n }\n return `${generated} ${supplied}`;\n}","const DATE_TOKEN_RE = /\\{([a-z_]+)\\}/g;\n\nconst MONTHS = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\nconst SHORT_MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n] as const;\n\nconst WEEKDAYS = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n] as const;\n\nfunction pad(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\nfunction ordinal(value: number): string {\n const remainder = value % 100;\n if (remainder >= 11 && remainder <= 13) {\n return `${String(value)}th`;\n }\n switch (value % 10) {\n case 1:\n return `${String(value)}st`;\n case 2:\n return `${String(value)}nd`;\n case 3:\n return `${String(value)}rd`;\n default:\n return `${String(value)}th`;\n }\n}\n\nfunction dateToken(token: string, date: Date): string | undefined {\n const day = date.getUTCDate();\n const month = MONTHS[date.getUTCMonth()] ?? \"\";\n const shortMonth = SHORT_MONTHS[date.getUTCMonth()] ?? \"\";\n const weekday = WEEKDAYS[date.getUTCDay()] ?? \"\";\n const year = date.getUTCFullYear();\n\n switch (token) {\n case \"date_num\":\n return `${String(year)}-${pad(date.getUTCMonth() + 1)}-${pad(day)}`;\n case \"date_slash\":\n return `${pad(day)}/${pad(date.getUTCMonth() + 1)}/${String(year)}`;\n case \"date_long\":\n case \"date_long_pretty\":\n case \"day_divider_pretty\":\n return `${weekday}, ${month} ${ordinal(day)}, ${String(year)}`;\n case \"date_long_full\":\n return `${month} ${String(day)}, ${String(year)}`;\n case \"date\":\n case \"date_pretty\":\n return `${month} ${String(day)}`;\n case \"date_short\":\n case \"date_short_pretty\":\n return `${shortMonth} ${String(day)}, ${String(year)}`;\n case \"time\":\n return `${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}`;\n case \"time_secs\":\n return `${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`;\n default:\n return undefined;\n }\n}\n\n/**\n * Formats Slack date tokens deterministically in UTC. Relative tokens such as\n * `{ago}` require a clock, so they intentionally use Slack's supplied fallback.\n */\nexport function formatSlackDate(timestamp: number, format: string, fallback?: string): string {\n const date = new Date(timestamp * 1000);\n if (!Number.isFinite(timestamp) || Number.isNaN(date.getTime())) {\n return fallback ?? String(timestamp);\n }\n\n let unsupported = false;\n const formatted = format.replace(DATE_TOKEN_RE, (_match, token: string) => {\n const replacement = dateToken(token, date);\n if (replacement === undefined) {\n unsupported = true;\n return \"\";\n }\n return replacement;\n });\n\n if (format.length === 0 || unsupported) {\n return fallback ?? date.toISOString().slice(0, 10);\n }\n return formatted;\n}\n","/**\n * Unicode fallbacks for the shortcode set emitted by packages/core.\n * Workspace resolvers and explicit Slack `unicode` values still take precedence.\n */\nconst CORE_EMOJI: Readonly<Record<string, string>> = {\n \"+1\": \"👍\",\n \"-1\": \"👎\",\n \"100\": \"💯\",\n blush: \"😊\",\n bug: \"🐛\",\n bulb: \"💡\",\n check: \"✓\",\n clap: \"👏\",\n eyes: \"👀\",\n fire: \"🔥\",\n gear: \"⚙️\",\n grinning: \"😀\",\n heart: \"❤️\",\n heavy_check_mark: \"✔️\",\n joy: \"😂\",\n link: \"🔗\",\n mag: \"🔍\",\n memo: \"📝\",\n ok_hand: \"👌\",\n pray: \"🙏\",\n rocket: \"🚀\",\n smile: \"😄\",\n sob: \"😭\",\n sparkles: \"✨\",\n star: \"⭐\",\n sweat_smile: \"😅\",\n tada: \"🎉\",\n thinking_face: \"🤔\",\n thumbsdown: \"👎\",\n thumbsup: \"👍\",\n warning: \"⚠️\",\n wave: \"👋\",\n white_check_mark: \"✅\",\n wink: \"😉\",\n x: \"❌\",\n zap: \"⚡\",\n};\n\nconst UNICODE_SEQUENCE_RE = /^[0-9a-f]{1,6}(?:-[0-9a-f]{1,6})*$/i;\n\nexport function coreEmojiGlyph(name: string): string | undefined {\n return CORE_EMOJI[name];\n}\n\nexport function unicodeEmoji(unicode: string | undefined): string | undefined {\n if (unicode === undefined || !UNICODE_SEQUENCE_RE.test(unicode)) {\n return undefined;\n }\n const codePoints = unicode.split(\"-\").map((part) => Number.parseInt(part, 16));\n if (codePoints.some((point) => !Number.isFinite(point))) {\n return undefined;\n }\n try {\n return String.fromCodePoint(...codePoints);\n } catch {\n return undefined;\n }\n}\n","import * as stylex from \"@stylexjs/stylex\";\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { RichTextBlockData, RichTextBlockElementData, RichTextInlineElementData, RichTextReferenceElementData } from \"../types.js\";\nimport { formatSlackDate } from \"./date.js\";\nimport { coreEmojiGlyph, unicodeEmoji } from \"./emoji.js\";\nconst INLINE_ELEMENT_TYPES = {\n attachment_mention: true,\n broadcast: true,\n canvas: true,\n canvas_message_unfurl: true,\n canvas_user_mention: true,\n channel: true,\n citation: true,\n color: true,\n date: true,\n emoji: true,\n file: true,\n link: true,\n list_record: true,\n message_mention: true,\n salesforce_data_field: true,\n tag: true,\n team: true,\n text: true,\n user: true,\n usergroup: true,\n work_object_mention: true,\n workflow_mention: true\n} as const satisfies Readonly<Record<RichTextInlineElementData[\"type\"], true>>;\nconst CONTAINER_ELEMENT_TYPES = {\n rich_text_list: true,\n rich_text_preformatted: true,\n rich_text_quote: true,\n rich_text_section: true\n} as const satisfies Readonly<Record<RichTextBlockElementData[\"type\"], true>>;\ninterface InlineStyle {\n readonly bold?: boolean | undefined;\n readonly code?: boolean | undefined;\n readonly italic?: boolean | undefined;\n readonly strike?: boolean | undefined;\n readonly underline?: boolean | undefined;\n}\nfunction inlineStyle(element: RichTextInlineElementData): InlineStyle | undefined {\n switch (element.type) {\n case \"broadcast\":\n case \"channel\":\n case \"color\":\n case \"date\":\n case \"emoji\":\n case \"link\":\n case \"team\":\n case \"text\":\n case \"user\":\n case \"usergroup\":\n return element.style;\n case \"attachment_mention\":\n case \"canvas\":\n case \"canvas_message_unfurl\":\n case \"canvas_user_mention\":\n case \"citation\":\n case \"file\":\n case \"list_record\":\n case \"message_mention\":\n case \"salesforce_data_field\":\n case \"tag\":\n case \"work_object_mention\":\n case \"workflow_mention\":\n return undefined;\n }\n return assertNever(element);\n}\nfunction isKnownInlineElement(value: unknown): value is RichTextInlineElementData {\n const type = discriminator(value);\n if (type === undefined || !(type in INLINE_ELEMENT_TYPES) || !isRecord(value)) {\n return false;\n }\n switch (type) {\n case \"text\":\n return typeof value[\"text\"] === \"string\";\n case \"link\":\n return typeof value[\"url\"] === \"string\";\n case \"emoji\":\n return typeof value[\"name\"] === \"string\";\n case \"user\":\n return typeof value[\"user_id\"] === \"string\";\n case \"usergroup\":\n return typeof value[\"usergroup_id\"] === \"string\";\n case \"channel\":\n return typeof value[\"channel_id\"] === \"string\";\n case \"team\":\n return typeof value[\"team_id\"] === \"string\";\n case \"broadcast\":\n return typeof value[\"range\"] === \"string\";\n case \"date\":\n return typeof value[\"timestamp\"] === \"number\" && typeof value[\"format\"] === \"string\";\n case \"color\":\n return typeof value[\"value\"] === \"string\";\n default:\n return true;\n }\n}\nfunction isKnownContainerElement(value: unknown): value is RichTextBlockElementData {\n const type = discriminator(value);\n if (type === undefined || !(type in CONTAINER_ELEMENT_TYPES) || !isRecord(value) || !Array.isArray(value[\"elements\"])) {\n return false;\n }\n if (type !== \"rich_text_list\") {\n return true;\n }\n return value[\"elements\"].every(section => isRecord(section) && section[\"type\"] === \"rich_text_section\" && Array.isArray(section[\"elements\"]));\n}\nfunction styledInline(content: ReactNode, richStyle: InlineStyle | undefined): ReactNode {\n let styled = content;\n if (richStyle?.bold === true) {\n styled = <strong {...stylex.props(styles.bold)}>{styled}</strong>;\n }\n if (richStyle?.italic === true) {\n styled = <em {...stylex.props(styles.italic)}>{styled}</em>;\n }\n if (richStyle?.strike === true) {\n styled = <s {...stylex.props(styles.strike)}>{styled}</s>;\n }\n if (richStyle?.underline === true) {\n styled = <span {...stylex.props(styles.underline)}>{styled}</span>;\n }\n if (richStyle?.code === true) {\n styled = <code {...stylex.props(styles.inlineCode)}>{styled}</code>;\n }\n return styled;\n}\nfunction referenceLabel(element: RichTextReferenceElementData): string {\n return element.text ?? element.id ?? element.user_id ?? element.channel_id ?? element.team_id ?? element.file_id ?? element.canvas_id ?? element.record_id ?? element.message_ts ?? element.workflow_id ?? element.type;\n}\ninterface InlineElementProps {\n readonly element: unknown;\n}\nfunction InlineElement({\n element\n}: InlineElementProps): ReactNode {\n const {\n resolvers\n } = useBlockKitContext();\n if (!isKnownInlineElement(element)) {\n return <span {...stylex.props(styles.reference)} data-unhandled-rich-text-element={discriminator(element) ?? \"unknown\"}>\n {fallbackLabel(element, \"rich text element\")}\n </span>;\n }\n const richStyle = inlineStyle(element);\n switch (element.type) {\n case \"text\":\n return styledInline(element.text, richStyle);\n case \"link\":\n {\n const href = safeHref(element.url);\n const label = element.text ?? element.url;\n return href === undefined ? styledInline(label, richStyle) : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {styledInline(label, richStyle)}\n </a>;\n }\n case \"emoji\":\n return <span aria-label={`:${element.name}:`} role=\"img\">\n {styledInline(resolvers.emoji?.(element.name, element.unicode) ?? unicodeEmoji(element.unicode) ?? coreEmojiGlyph(element.name) ?? `:${element.name}:`, richStyle)}\n </span>;\n case \"user\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>@{resolvers.user?.(element.user_id) ?? element.user_id}</>, richStyle)}\n </span>;\n case \"usergroup\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>@{resolvers.usergroup?.(element.usergroup_id) ?? element.usergroup_id}</>, richStyle)}\n </span>;\n case \"channel\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>#{resolvers.channel?.(element.channel_id) ?? element.channel_id}</>, richStyle)}\n </span>;\n case \"team\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(<>@{resolvers.team?.(element.team_id) ?? element.team_id}</>, richStyle)}\n </span>;\n case \"broadcast\":\n return <span {...stylex.props(styles.mention)}>\n {styledInline(`@${element.range}`, richStyle)}\n </span>;\n case \"date\":\n {\n const content = resolvers.date?.(element.timestamp, element.format) ?? formatSlackDate(element.timestamp, element.format, element.fallback);\n const href = safeHref(element.url);\n return href === undefined ? styledInline(content, richStyle) : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {styledInline(content, richStyle)}\n </a>;\n }\n case \"color\":\n return <span>\n <span {...stylex.props(styles.colorSwatch)} aria-hidden=\"true\" style={{\n backgroundColor: element.value\n }} />\n {styledInline(element.value, richStyle)}\n </span>;\n case \"citation\":\n return <span {...stylex.props(styles.reference)}>\n [{element.index ?? element.text ?? \"source\"}]\n </span>;\n case \"attachment_mention\":\n case \"canvas\":\n case \"canvas_message_unfurl\":\n case \"canvas_user_mention\":\n case \"file\":\n case \"list_record\":\n case \"message_mention\":\n case \"salesforce_data_field\":\n case \"tag\":\n case \"work_object_mention\":\n case \"workflow_mention\":\n return <span {...stylex.props(styles.reference)}>{referenceLabel(element)}</span>;\n }\n return assertNever(element);\n}\ninterface RichContainerProps {\n readonly element: unknown;\n readonly path: string;\n}\n\n/**\n * Preformatted children render as plain code text (no styling/links per\n * Slack), but unknown runtime shapes must still surface the visible\n * fallback instead of silently dropping content.\n */\nfunction preformattedChild(inline: unknown, index: number): ReactNode {\n const kind = discriminator(inline);\n if ((kind === \"text\" || kind === \"link\") && isRecord(inline)) {\n const text = inline[\"text\"];\n if (typeof text === \"string\") {\n return text;\n }\n const url = inline[\"url\"];\n if (typeof url === \"string\") {\n return url;\n }\n }\n return <span {...stylex.props(styles.reference)} data-unhandled-rich-text-element={kind ?? \"unknown\"} key={`${kind ?? \"unknown\"}-${String(index)}`}>\n {fallbackLabel(inline, \"rich text element\")}\n </span>;\n}\n\n/** Ordered markers cycle decimal → alpha → roman by depth (applied to the list). */\nfunction orderedMarkerStyle(indent: number): stylex.StyleXStyles {\n const variant = indent % 3;\n return variant === 1 ? styles.listOrderedAlpha : variant === 2 ? styles.listOrderedRoman : styles.listOrdered;\n}\n\n/** Bullet glyphs cycle disc → circle → square by depth (applied to each item). */\nfunction bulletGlyphStyle(indent: number): stylex.StyleXStyles {\n const variant = indent % 3;\n return variant === 1 ? styles.listBulletAlternate : variant === 2 ? styles.listBulletSquare : styles.listBullet;\n}\nfunction RichContainer({\n element,\n path\n}: RichContainerProps): ReactElement {\n if (!isKnownContainerElement(element)) {\n return <div {...stylex.props(styles.unhandled)} data-unhandled-rich-text-container={discriminator(element) ?? \"unknown\"}>\n {fallbackLabel(element, \"rich text container\")}\n </div>;\n }\n switch (element.type) {\n case \"rich_text_section\":\n return <div {...stylex.props(styles.richSection)} data-rich-text-section>\n {element.elements.map((inline, index) => <InlineElement key={`${discriminator(inline) ?? \"unknown\"}-${String(index)}`} element={inline} />)}\n </div>;\n case \"rich_text_quote\":\n return <blockquote {...stylex.props(styles.quote, element.border === 1 && styles.richBorder)} data-border={element.border ?? 0}>\n {element.elements.map((inline, index) => <InlineElement key={`${discriminator(inline) ?? \"unknown\"}-${String(index)}`} element={inline} />)}\n </blockquote>;\n case \"rich_text_preformatted\":\n return <pre {...stylex.props(styles.pre, element.border === 1 && styles.richBorder)} data-border={element.border ?? 0} data-language={element.language}>\n {element.elements.map((inline, index) => preformattedChild(inline, index))}\n </pre>;\n case \"rich_text_list\":\n {\n const rawIndent = Number.isFinite(element.indent) ? Math.trunc(element.indent ?? 0) : 0;\n const indent = Math.min(8, Math.max(0, rawIndent));\n const rawOffset = Number.isFinite(element.offset) ? Math.trunc(element.offset ?? 0) : 0;\n const start = Math.max(1, rawOffset + 1);\n // Slack nests one 28px step per indent level (measured).\n const listStyle: CSSProperties = {\n marginInlineStart: indent * 28\n };\n const itemStyle = element.style === \"ordered\" ? styles.listItemOrdered : [styles.listItemBullet, bulletGlyphStyle(indent)];\n const items = element.elements.map((section, index) => <li {...stylex.props(itemStyle)} key={`${path}.elements[${String(index)}]`}>\n {section.elements.map((inline, inlineIndex) => <InlineElement key={`${discriminator(inline) ?? \"unknown\"}-${String(inlineIndex)}`} element={inline} />)}\n </li>);\n return element.style === \"ordered\" ? <ol {...stylex.props(styles.list, orderedMarkerStyle(indent), element.border === 1 && styles.richBorder)} data-border={element.border ?? 0} data-indent={indent} start={start} style={listStyle}>\n {items}\n </ol> : <ul {...stylex.props(styles.list, element.border === 1 && styles.richBorder)} data-border={element.border ?? 0} data-indent={indent} style={listStyle}>\n {items}\n </ul>;\n }\n }\n return assertNever(element);\n}\nexport interface RichTextProps {\n readonly block: RichTextBlockData;\n readonly className?: string | undefined;\n readonly path?: string | undefined;\n}\nexport function RichText({\n block,\n className,\n path = \"block\"\n}: RichTextProps): ReactElement {\n const sx = stylex.props(styles.richText);\n const value: unknown = block;\n const elements: unknown = isRecord(value) ? value[\"elements\"] : undefined;\n return <div {...sx} className={joinClassNames(sx.className, className)}>\n {Array.isArray(elements) ? elements.map((element, index) => <RichContainer key={`${discriminator(element) ?? \"unknown\"}-${String(index)}`} element={element} path={`${path}.elements[${String(index)}]`} />) : <div {...stylex.props(styles.unhandled)} data-unhandled-rich-text-block>\n {fallbackLabel(value, \"rich text block\")}\n </div>}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ChangeEvent, ReactElement } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport type { UnknownRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { ButtonElementData, ImageElementData, InteractiveElementData, OptionData } from \"../types.js\";\nimport { RichText } from \"../text/RichText.js\";\nconst INTERACTIVE_ELEMENT_TYPES = {\n button: true,\n channels_select: true,\n checkboxes: true,\n conversations_select: true,\n datepicker: true,\n datetimepicker: true,\n email_text_input: true,\n external_select: true,\n file_input: true,\n image: true,\n multi_channels_select: true,\n multi_conversations_select: true,\n multi_external_select: true,\n multi_static_select: true,\n multi_users_select: true,\n number_input: true,\n overflow: true,\n plain_text_input: true,\n radio_buttons: true,\n rich_text_input: true,\n static_select: true,\n timepicker: true,\n url_text_input: true,\n users_select: true,\n workflow_button: true\n} as const satisfies Readonly<Record<InteractiveElementData[\"type\"], true>>;\nfunction isKnownInteractiveElement(element: unknown): element is InteractiveElementData {\n const type = discriminator(element);\n return type !== undefined && type in INTERACTIVE_ELEMENT_TYPES;\n}\nfunction imageSource(element: ImageElementData): string | undefined {\n if (!isRecord(element)) {\n return undefined;\n }\n if (\"image_url\" in element) {\n return typeof element.image_url === \"string\" ? element.image_url : undefined;\n }\n const slackFile: unknown = element.slack_file;\n if (isRecord(slackFile) && typeof slackFile[\"url\"] === \"string\") {\n return slackFile[\"url\"];\n }\n return undefined;\n}\n\n/**\n * Render-path guards. Strict Slack-limit validation lives in validation.ts\n * as a standalone API and no longer runs during render (matching every\n * other component): each leaf gates only the fields it dereferences so\n * malformed runtime payloads degrade to <UnhandledElement /> instead of\n * crashing, while merely over-limit payloads still render.\n */\nfunction isPlainTextObject(value: unknown): boolean {\n return isRecord(value) && typeof value[\"text\"] === \"string\";\n}\nfunction isOptionalString(value: unknown): boolean {\n return value === undefined || typeof value === \"string\";\n}\nfunction isRenderableOption(value: unknown): boolean {\n return isRecord(value) && isPlainTextObject(value[\"text\"]) && isOptionalString(value[\"value\"]) && (value[\"description\"] === undefined || isPlainTextObject(value[\"description\"]));\n}\nfunction isOptionList(value: unknown): boolean {\n return Array.isArray(value) && value.every(isRenderableOption);\n}\nfunction isStringList(value: unknown): boolean {\n return Array.isArray(value) && value.every(entry => typeof entry === \"string\");\n}\n\n/** Buttons (and workflow buttons) render element.text.text as a text node. */\nfunction isRenderableButton(element: unknown): boolean {\n return isRecord(element) && isPlainTextObject(element[\"text\"]);\n}\n\n/** Checkboxes read initial_options; radio buttons read initial_option — mirror that split. */\nfunction isRenderableChoiceGroup(element: unknown): boolean {\n if (!isRecord(element) || !isOptionList(element[\"options\"])) {\n return false;\n }\n return discriminator(element) === \"checkboxes\" ? element[\"initial_options\"] === undefined || isOptionList(element[\"initial_options\"]) : element[\"initial_option\"] === undefined || isRenderableOption(element[\"initial_option\"]);\n}\n\n/** All select variants render placeholder.text as the label when placeholder is set. */\nfunction hasRenderablePlaceholder(element: UnknownRecord): boolean {\n return element[\"placeholder\"] === undefined || isPlainTextObject(element[\"placeholder\"]);\n}\nfunction hasRenderableStaticOptions(element: UnknownRecord): boolean {\n const optionGroups = element[\"option_groups\"];\n return (element[\"options\"] === undefined || isOptionList(element[\"options\"])) && (optionGroups === undefined || Array.isArray(optionGroups) && optionGroups.every(group => isRecord(group) && isOptionList(group[\"options\"])));\n}\n\n/**\n * Gate only the fields the matching selectChoices/initialSelectValues branch\n * dereferences; the default arm doubles as the type pin that keeps the\n * exhaustive select switches unreachable for junk.\n */\nfunction isRenderableSelect(element: unknown): boolean {\n if (!isRecord(element) || !hasRenderablePlaceholder(element)) {\n return false;\n }\n switch (discriminator(element) ?? \"\") {\n case \"static_select\":\n return hasRenderableStaticOptions(element) && (element[\"initial_option\"] === undefined || isRenderableOption(element[\"initial_option\"]));\n case \"multi_static_select\":\n return hasRenderableStaticOptions(element) && (element[\"initial_options\"] === undefined || isOptionList(element[\"initial_options\"]));\n case \"external_select\":\n return element[\"initial_option\"] === undefined || isRenderableOption(element[\"initial_option\"]);\n case \"multi_external_select\":\n return element[\"initial_options\"] === undefined || isOptionList(element[\"initial_options\"]);\n case \"users_select\":\n return isOptionalString(element[\"initial_user\"]);\n case \"multi_users_select\":\n return element[\"initial_users\"] === undefined || isStringList(element[\"initial_users\"]);\n case \"channels_select\":\n return isOptionalString(element[\"initial_channel\"]);\n case \"multi_channels_select\":\n return element[\"initial_channels\"] === undefined || isStringList(element[\"initial_channels\"]);\n case \"conversations_select\":\n return isOptionalString(element[\"initial_conversation\"]);\n case \"multi_conversations_select\":\n return element[\"initial_conversations\"] === undefined || isStringList(element[\"initial_conversations\"]);\n default:\n return false;\n }\n}\n\n/**\n * Gate only the fields the matching input branch dereferences; the default\n * arm doubles as the type pin that keeps the exhaustive input switch\n * unreachable for junk.\n */\nfunction isRenderableInput(element: unknown): boolean {\n if (!isRecord(element)) {\n return false;\n }\n switch (discriminator(element) ?? \"\") {\n case \"plain_text_input\":\n case \"email_text_input\":\n case \"url_text_input\":\n case \"number_input\":\n return hasRenderablePlaceholder(element);\n case \"datepicker\":\n return isOptionalString(element[\"initial_date\"]);\n case \"file_input\":\n return element[\"filetypes\"] === undefined || Array.isArray(element[\"filetypes\"]);\n case \"datetimepicker\":\n case \"timepicker\":\n case \"rich_text_input\":\n return true;\n default:\n return false;\n }\n}\nfunction UnhandledElement({\n className,\n element\n}: {\n readonly className?: string | undefined;\n readonly element: unknown;\n}): ReactElement {\n const sx = stylex.props(styles.unhandled);\n return <span {...sx} className={joinClassNames(sx.className, className)} data-unhandled-element={discriminator(element) ?? \"unknown\"}>\n {fallbackLabel(element, \"Block Kit element\")}\n </span>;\n}\nexport interface ImageElementProps {\n readonly className?: string | undefined;\n readonly element: ImageElementData;\n readonly variant?: \"accessory\" | \"cardHero\" | \"cardIcon\" | \"context\" | undefined;\n}\nexport function ImageElement({\n className,\n element,\n variant\n}: ImageElementProps): ReactElement {\n const sx = stylex.props(styles.image, variant === \"accessory\" && styles.accessoryImage, variant === \"cardHero\" && styles.cardHero, variant === \"cardIcon\" && styles.cardIcon, variant === \"context\" && styles.contextImage);\n const value: unknown = element;\n const altText = isRecord(value) && typeof value[\"alt_text\"] === \"string\" ? value[\"alt_text\"] : fallbackLabel(value, \"image\");\n const source = imageSource(element);\n if (source === undefined) {\n return <div {...sx} aria-label={altText} className={joinClassNames(sx.className, className)} role=\"img\" />;\n }\n return <img {...sx} alt={altText} className={joinClassNames(sx.className, className)} src={source} />;\n}\ninterface ActionElementProps {\n readonly blockId?: string | undefined;\n readonly className?: string | undefined;\n}\nexport interface ButtonElementProps extends ActionElementProps {\n readonly element: ButtonElementData;\n}\nexport function ButtonElement({\n blockId,\n className,\n element\n}: ButtonElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isRenderableButton(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.button, element.style === \"primary\" && styles.buttonPrimary, element.style === \"danger\" && styles.buttonDanger);\n const action = (): void => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n }),\n ...(element.value === undefined ? {} : {\n value: element.value\n })\n });\n }\n };\n const href = safeHref(element.url);\n if (href !== undefined) {\n return <a {...sx} aria-label={element.accessibility_label} className={joinClassNames(sx.className, className)} href={href} onClick={action} rel=\"noreferrer\">\n {element.text.text}\n </a>;\n }\n return <button {...sx} aria-label={element.accessibility_label} className={joinClassNames(sx.className, className)} onClick={action} type=\"button\">\n {element.text.text}\n </button>;\n}\ntype OverflowElementData = Extract<InteractiveElementData, {\n readonly type: \"overflow\";\n}>;\nexport interface OverflowElementProps extends ActionElementProps {\n readonly element: OverflowElementData;\n}\nexport function OverflowElement({\n blockId,\n className,\n element\n}: OverflowElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n // Render dereferences nothing beyond action_id; a record is enough.\n if (!isRecord(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.button, styles.overflowButton);\n return <button {...sx} aria-label=\"More options\" className={joinClassNames(sx.className, className)} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n })\n });\n }\n }} type=\"button\">\n ⋯\n </button>;\n}\nfunction optionValue(option: OptionData, index: number): string {\n return option.value ?? `${option.text.text}-${String(index)}`;\n}\nfunction isSelected(option: OptionData, selected: readonly OptionData[] | undefined): boolean {\n return selected?.some(candidate => candidate.value === option.value && candidate.text.text === option.text.text) ?? false;\n}\ninterface ChoiceGroupProps extends ActionElementProps {\n readonly element: Extract<InteractiveElementData, {\n readonly type: \"checkboxes\" | \"radio_buttons\";\n }>;\n}\nexport function ChoiceGroup({\n blockId,\n className,\n element\n}: ChoiceGroupProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isRenderableChoiceGroup(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.choiceGroup);\n const selected = element.type === \"checkboxes\" ? element.initial_options : element.initial_option === undefined ? undefined : [element.initial_option];\n return <fieldset {...sx} className={joinClassNames(sx.className, className)} data-element-type={element.type}>\n {element.options.map((option, index) => {\n const value = optionValue(option, index);\n return <label {...stylex.props(styles.choice)} key={value}>\n <input defaultChecked={isSelected(option, selected)} name={element.action_id} onChange={event => {\n if (element.action_id !== undefined) {\n const values = element.type === \"checkboxes\" ? Array.from(event.currentTarget.closest(\"fieldset\")?.querySelectorAll<HTMLInputElement>('input[type=\"checkbox\"]:checked') ?? [], input => input.value) : undefined;\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n }),\n ...(values === undefined ? {\n value\n } : {\n values\n })\n });\n }\n }} type={element.type === \"checkboxes\" ? \"checkbox\" : \"radio\"} value={value} />\n <span>\n {option.text.text}\n {option.description === undefined ? null : <span {...stylex.props(styles.smallText)}> {option.description.text}</span>}\n </span>\n </label>;\n })}\n </fieldset>;\n}\nfunction selectionOptions(element: Extract<InteractiveElementData, {\n readonly type: \"multi_static_select\" | \"static_select\";\n}>): readonly OptionData[] {\n if (element.options !== undefined) {\n return element.options;\n }\n return element.option_groups?.flatMap(group => group.options) ?? [];\n}\ninterface SelectChoice {\n readonly label: string;\n readonly value: string;\n}\ntype SelectElementData = Extract<InteractiveElementData, {\n readonly type: \"channels_select\" | \"conversations_select\" | \"external_select\" | \"multi_channels_select\" | \"multi_conversations_select\" | \"multi_external_select\" | \"multi_static_select\" | \"multi_users_select\" | \"static_select\" | \"users_select\";\n}>;\nfunction optionChoices(options: readonly OptionData[]): readonly SelectChoice[] {\n return options.map((option, index) => ({\n label: option.text.text,\n value: optionValue(option, index)\n }));\n}\nfunction identifierChoices(identifiers: readonly string[]): readonly SelectChoice[] {\n return identifiers.map(identifier => ({\n label: identifier,\n value: identifier\n }));\n}\nfunction selectChoices(element: SelectElementData): readonly SelectChoice[] {\n switch (element.type) {\n case \"static_select\":\n case \"multi_static_select\":\n return optionChoices(selectionOptions(element));\n case \"external_select\":\n return element.initial_option === undefined ? [] : optionChoices([element.initial_option]);\n case \"multi_external_select\":\n return optionChoices(element.initial_options ?? []);\n case \"users_select\":\n return identifierChoices(element.initial_user === undefined ? [] : [element.initial_user]);\n case \"multi_users_select\":\n return identifierChoices(element.initial_users ?? []);\n case \"channels_select\":\n return identifierChoices(element.initial_channel === undefined ? [] : [element.initial_channel]);\n case \"multi_channels_select\":\n return identifierChoices(element.initial_channels ?? []);\n case \"conversations_select\":\n return identifierChoices(element.initial_conversation === undefined ? [] : [element.initial_conversation]);\n case \"multi_conversations_select\":\n return identifierChoices(element.initial_conversations ?? []);\n }\n return assertNever(element);\n}\nfunction selectedOptionValues(options: readonly OptionData[], selected: readonly OptionData[] | undefined): readonly string[] {\n return options.flatMap((option, index) => isSelected(option, selected) ? [optionValue(option, index)] : []);\n}\nfunction initialSelectValues(element: SelectElementData, choices: readonly SelectChoice[]): readonly string[] {\n switch (element.type) {\n case \"static_select\":\n return selectedOptionValues(selectionOptions(element), element.initial_option === undefined ? undefined : [element.initial_option]);\n case \"multi_static_select\":\n return selectedOptionValues(selectionOptions(element), element.initial_options);\n case \"external_select\":\n case \"multi_external_select\":\n case \"users_select\":\n case \"multi_users_select\":\n case \"channels_select\":\n case \"multi_channels_select\":\n case \"conversations_select\":\n case \"multi_conversations_select\":\n return choices.map(choice => choice.value);\n }\n return assertNever(element);\n}\nfunction selectLabel(element: SelectElementData): string {\n if (\"placeholder\" in element && element.placeholder !== undefined) {\n return element.placeholder.text;\n }\n switch (element.type) {\n case \"users_select\":\n case \"multi_users_select\":\n return \"Select people\";\n case \"channels_select\":\n case \"multi_channels_select\":\n return \"Select channels\";\n case \"conversations_select\":\n case \"multi_conversations_select\":\n return \"Select conversations\";\n case \"external_select\":\n case \"multi_external_select\":\n case \"multi_static_select\":\n case \"static_select\":\n return \"Select an option\";\n }\n return assertNever(element);\n}\nexport interface SelectElementProps extends ActionElementProps {\n readonly element: SelectElementData;\n}\nexport function SelectElement({\n blockId,\n className,\n element\n}: SelectElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isRenderableSelect(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.select);\n const isMulti = element.type.startsWith(\"multi_\");\n const choices = selectChoices(element);\n const initialValues = initialSelectValues(element, choices);\n const onChange = (event: ChangeEvent<HTMLSelectElement>): void => {\n if (element.action_id !== undefined) {\n const values = Array.from(event.currentTarget.selectedOptions, option => option.value);\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(blockId === undefined ? {} : {\n blockId\n }),\n ...(isMulti ? {\n values\n } : {\n value: event.currentTarget.value\n })\n });\n }\n };\n return <select {...sx} aria-label={selectLabel(element)} className={joinClassNames(sx.className, className)} defaultValue={isMulti ? initialValues : initialValues[0] ?? \"\"} multiple={isMulti} onChange={onChange}>\n <option disabled value=\"\">\n {selectLabel(element)}\n </option>\n {choices.length === 0 ? <option value=\"preview\">Preview option</option> : choices.map(choice => <option key={choice.value} value={choice.value}>\n {choice.label}\n </option>)}\n </select>;\n}\ntype InputElementData = Extract<InteractiveElementData, {\n readonly type: \"datepicker\" | \"datetimepicker\" | \"email_text_input\" | \"file_input\" | \"number_input\" | \"plain_text_input\" | \"rich_text_input\" | \"timepicker\" | \"url_text_input\";\n}>;\nexport interface InputElementProps extends ActionElementProps {\n readonly element: InputElementData;\n readonly path?: string | undefined;\n}\nfunction padDateTimePart(value: number): string {\n return String(value).padStart(2, \"0\");\n}\nfunction localDateValue(date: Date): string {\n return `${String(date.getFullYear())}-${padDateTimePart(date.getMonth() + 1)}-${padDateTimePart(date.getDate())}`;\n}\nfunction datePickerLabel(value: string | undefined): string {\n if (value === undefined) {\n return \"Select a date\";\n }\n if (value === localDateValue(new Date())) {\n return \"Today\";\n }\n const [year = \"\", month = \"\", day = \"\"] = value.split(\"-\");\n return `${month}/${day}/${year}`;\n}\nfunction localDateTimeValue(timestamp: number | undefined): string | undefined {\n if (timestamp === undefined) {\n return undefined;\n }\n const date = new Date(timestamp * 1000);\n if (Number.isNaN(date.getTime())) {\n return undefined;\n }\n // datetime-local semantics are local wall time: Slack's initial_date_time is\n // an absolute instant, so the control must show the viewer's local fields.\n // (Rich-text date TEXT stays UTC for SSR determinism; this input must not.)\n return `${String(date.getFullYear())}-${padDateTimePart(date.getMonth() + 1)}-${padDateTimePart(date.getDate())}T${padDateTimePart(date.getHours())}:${padDateTimePart(date.getMinutes())}`;\n}\nexport function InputElement({\n blockId,\n className,\n element,\n path = \"element\"\n}: InputElementProps): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n if (!isRenderableInput(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.input);\n const emit = (value: string): void => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n value,\n ...(blockId === undefined ? {} : {\n blockId\n })\n });\n }\n };\n const onChange = (event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>): void => {\n emit(event.currentTarget.value);\n };\n switch (element.type) {\n case \"plain_text_input\":\n return element.multiline === true ? <textarea {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} maxLength={element.max_length} minLength={element.min_length} onChange={onChange} placeholder={element.placeholder?.text} rows={4} /> : <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} maxLength={element.max_length} minLength={element.min_length} onChange={onChange} placeholder={element.placeholder?.text} type=\"text\" />;\n case \"email_text_input\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} onChange={onChange} placeholder={element.placeholder?.text} type=\"email\" />;\n case \"url_text_input\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} onChange={onChange} placeholder={element.placeholder?.text} type=\"url\" />;\n case \"number_input\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_value} max={element.max_value} min={element.min_value} onChange={onChange} placeholder={element.placeholder?.text} step={element.is_decimal_allowed ? \"any\" : 1} type=\"number\" />;\n case \"datepicker\":\n {\n const pickerSx = stylex.props(styles.button, styles.picker);\n return <button {...pickerSx} aria-label=\"Date\" className={joinClassNames(pickerSx.className, className)} onClick={() => {\n emit(element.initial_date ?? \"\");\n }} type=\"button\">\n <span {...stylex.props(styles.pickerIcon)} aria-hidden=\"true\">\n ▦\n </span>\n {datePickerLabel(element.initial_date)}\n <span {...stylex.props(styles.pickerChevron)} aria-hidden=\"true\">\n ⌄\n </span>\n </button>;\n }\n case \"datetimepicker\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={localDateTimeValue(element.initial_date_time)} onChange={onChange} type=\"datetime-local\" />;\n case \"timepicker\":\n return <input {...sx} className={joinClassNames(sx.className, className)} defaultValue={element.initial_time} onChange={onChange} type=\"time\" />;\n case \"file_input\":\n return <input {...sx} accept={element.filetypes?.map(type => `.${type}`).join(\",\")} className={joinClassNames(sx.className, className)} multiple={(element.max_files ?? 10) > 1} onChange={event => {\n emit(event.currentTarget.files?.[0]?.name ?? \"\");\n }} type=\"file\" />;\n case \"rich_text_input\":\n return <div {...sx} className={joinClassNames(sx.className, className)} contentEditable onInput={event => {\n emit(event.currentTarget.textContent ?? \"\");\n }} role=\"textbox\" suppressContentEditableWarning>\n {element.initial_value === undefined ? null : <RichText block={element.initial_value} path={`${path}.initial_value`} />}\n </div>;\n }\n return assertNever(element);\n}\nexport interface InteractiveElementProps extends ActionElementProps {\n readonly element: unknown;\n readonly path?: string | undefined;\n}\nexport function InteractiveElement({\n blockId,\n className,\n element,\n path = \"element\"\n}: InteractiveElementProps): ReactElement {\n if (!isKnownInteractiveElement(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n if (element.type === \"image\") {\n return <ImageElement className={className} element={element} />;\n }\n switch (element.type) {\n case \"button\":\n return <ButtonElement blockId={blockId} className={className} element={element} />;\n case \"checkboxes\":\n case \"radio_buttons\":\n return <ChoiceGroup blockId={blockId} className={className} element={element} />;\n case \"overflow\":\n return <OverflowElement blockId={blockId} className={className} element={element} />;\n case \"channels_select\":\n case \"conversations_select\":\n case \"external_select\":\n case \"multi_channels_select\":\n case \"multi_conversations_select\":\n case \"multi_external_select\":\n case \"multi_static_select\":\n case \"multi_users_select\":\n case \"static_select\":\n case \"users_select\":\n return <SelectElement blockId={blockId} className={className} element={element} />;\n case \"datepicker\":\n case \"datetimepicker\":\n case \"email_text_input\":\n case \"file_input\":\n case \"number_input\":\n case \"plain_text_input\":\n case \"rich_text_input\":\n case \"timepicker\":\n case \"url_text_input\":\n return <InputElement blockId={blockId} className={className} element={element} path={path} />;\n case \"workflow_button\":\n {\n if (!isRenderableButton(element)) {\n return <UnhandledElement className={className} element={element} />;\n }\n const sx = stylex.props(styles.button);\n return <button {...sx} className={joinClassNames(sx.className, className)} type=\"button\">\n {element.text.text}\n </button>;\n }\n }\n return assertNever(element);\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { formatSlackDate } from \"./date.js\";\nimport { coreEmojiGlyph } from \"./emoji.js\";\nexport type MrkdwnToken = {\n readonly kind: \"text\";\n readonly value: string;\n} | {\n readonly children: readonly MrkdwnToken[];\n readonly kind: \"bold\" | \"italic\" | \"strike\";\n} | {\n readonly kind: \"code\";\n readonly value: string;\n} | {\n readonly kind: \"code_block\";\n readonly value: string;\n} | {\n readonly kind: \"emoji\";\n readonly name: string;\n} | {\n readonly href: string;\n readonly kind: \"link\";\n readonly label: string;\n} | {\n readonly fallback?: string;\n readonly format?: string;\n readonly href?: string;\n readonly id: string;\n readonly kind: \"channel\" | \"date\" | \"team\" | \"user\" | \"usergroup\";\n} | {\n readonly kind: \"broadcast\";\n readonly range: string;\n};\nconst CONTROL_CHARACTERS = new Set([\"*\", \"_\", \"~\", \"`\", \"<\", \":\"]);\nconst EMOJI_NAME_RE = /^[a-z0-9_+-]{1,64}$/;\nconst WORD_CHAR_RE = /[A-Za-z0-9]/;\nfunction decodeSlackEntities(value: string): string {\n return value.replaceAll(\"<\", \"<\").replaceAll(\">\", \">\").replaceAll(\"&\", \"&\");\n}\nfunction specialToken(contents: string): MrkdwnToken | undefined {\n const decoded = decodeSlackEntities(contents);\n if (decoded.startsWith(\"@\")) {\n return {\n id: decoded.slice(1),\n kind: \"user\"\n };\n }\n if (decoded.startsWith(\"#\")) {\n const [id = \"\", fallback] = decoded.slice(1).split(\"|\", 2);\n return {\n id,\n kind: \"channel\",\n ...(fallback === undefined ? {} : {\n fallback\n })\n };\n }\n if (decoded.startsWith(\"!subteam^\")) {\n const [id = \"\", fallback] = decoded.slice(9).split(\"|\", 2);\n return {\n id,\n kind: \"usergroup\",\n ...(fallback === undefined ? {} : {\n fallback\n })\n };\n }\n if (decoded.startsWith(\"!date^\")) {\n const [descriptor = \"\", fallback] = decoded.slice(6).split(\"|\", 2);\n const [timestamp = \"\", format = \"\", href] = descriptor.split(\"^\", 3);\n return {\n id: timestamp,\n kind: \"date\",\n format,\n ...(fallback === undefined ? {} : {\n fallback\n }),\n ...(href === undefined ? {} : {\n href\n })\n };\n }\n if (decoded === \"!here\" || decoded === \"!channel\" || decoded === \"!everyone\") {\n return {\n kind: \"broadcast\",\n range: decoded.slice(1)\n };\n }\n const separator = decoded.indexOf(\"|\");\n if (separator >= 0) {\n return {\n href: decoded.slice(0, separator),\n kind: \"link\",\n label: decoded.slice(separator + 1)\n };\n }\n if (/^(?:https?:|mailto:)/i.test(decoded)) {\n return {\n href: decoded,\n kind: \"link\",\n label: decoded\n };\n }\n return undefined;\n}\nfunction nextControl(text: string, from: number): number {\n for (let index = from; index < text.length; index += 1) {\n if (CONTROL_CHARACTERS.has(text[index] ?? \"\")) {\n return index;\n }\n }\n return text.length;\n}\nfunction tokenizeInline(text: string, depth: number): readonly MrkdwnToken[] {\n if (depth > 16) {\n return [{\n kind: \"text\",\n value: decodeSlackEntities(text)\n }];\n }\n const tokens: MrkdwnToken[] = [];\n let cursor = 0;\n while (cursor < text.length) {\n if (text.startsWith(\"```\", cursor)) {\n const end = text.indexOf(\"```\", cursor + 3);\n if (end >= 0) {\n tokens.push({\n kind: \"code_block\",\n value: decodeSlackEntities(text.slice(cursor + 3, end))\n });\n cursor = end + 3;\n continue;\n }\n }\n const character = text[cursor] ?? \"\";\n if (character === \"`\") {\n const end = text.indexOf(\"`\", cursor + 1);\n if (end > cursor + 1) {\n tokens.push({\n kind: \"code\",\n value: decodeSlackEntities(text.slice(cursor + 1, end))\n });\n cursor = end + 1;\n continue;\n }\n }\n if (character === \"*\" || character === \"_\" || character === \"~\") {\n const end = text.indexOf(character, cursor + 1);\n if (end > cursor + 1) {\n const kind = character === \"*\" ? \"bold\" : character === \"_\" ? \"italic\" : \"strike\";\n tokens.push({\n children: tokenizeInline(text.slice(cursor + 1, end), depth + 1),\n kind\n });\n cursor = end + 1;\n continue;\n }\n }\n if (character === \"<\") {\n const end = text.indexOf(\">\", cursor + 1);\n if (end >= 0) {\n const token = specialToken(text.slice(cursor + 1, end));\n if (token !== undefined) {\n tokens.push(token);\n cursor = end + 1;\n continue;\n }\n }\n }\n if (character === \":\") {\n const end = text.indexOf(\":\", cursor + 1);\n const name = end < 0 ? \"\" : text.slice(cursor + 1, end);\n // Slack shortcodes are delimited :name: tokens, not any colon-separated\n // substring: require non-word boundaries so times/ratios like 12:30:45\n // or 1:2:3 stay literal text.\n const openBoundaryOk = cursor === 0 || !WORD_CHAR_RE.test(text[cursor - 1] ?? \"\");\n const closeBoundaryOk = end < 0 || end + 1 >= text.length || !WORD_CHAR_RE.test(text[end + 1] ?? \"\");\n if (end > cursor + 1 && openBoundaryOk && closeBoundaryOk && EMOJI_NAME_RE.test(name)) {\n tokens.push({\n kind: \"emoji\",\n name\n });\n cursor = end + 1;\n continue;\n }\n }\n const end = nextControl(text, cursor + 1);\n tokens.push({\n kind: \"text\",\n value: decodeSlackEntities(text.slice(cursor, end))\n });\n cursor = end;\n }\n return tokens;\n}\nexport function tokenizeMrkdwn(text: string): readonly MrkdwnToken[] {\n return tokenizeInline(text, 0);\n}\ninterface TokenViewProps {\n readonly token: MrkdwnToken;\n}\nfunction TokenView({\n token\n}: TokenViewProps): ReactNode {\n const {\n resolvers\n } = useBlockKitContext();\n switch (token.kind) {\n case \"text\":\n return token.value;\n case \"bold\":\n return <strong {...stylex.props(styles.bold)}>\n {token.children.map((child, index) => <TokenView key={`${child.kind}-${String(index)}`} token={child} />)}\n </strong>;\n case \"italic\":\n return <em {...stylex.props(styles.italic)}>\n {token.children.map((child, index) => <TokenView key={`${child.kind}-${String(index)}`} token={child} />)}\n </em>;\n case \"strike\":\n return <s {...stylex.props(styles.strike)}>\n {token.children.map((child, index) => <TokenView key={`${child.kind}-${String(index)}`} token={child} />)}\n </s>;\n case \"code\":\n return <code {...stylex.props(styles.inlineCode)}>{token.value}</code>;\n case \"code_block\":\n return <pre {...stylex.props(styles.pre)}>{token.value}</pre>;\n case \"emoji\":\n return <span aria-label={`:${token.name}:`} role=\"img\">\n {resolvers.emoji?.(token.name) ?? coreEmojiGlyph(token.name) ?? `:${token.name}:`}\n </span>;\n case \"link\":\n {\n const href = safeHref(token.href);\n return href === undefined ? token.label : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {token.label}\n </a>;\n }\n case \"user\":\n return <span {...stylex.props(styles.mention)}>@{resolvers.user?.(token.id) ?? token.id}</span>;\n case \"channel\":\n return <span {...stylex.props(styles.mention)}>\n #{resolvers.channel?.(token.id) ?? token.fallback ?? token.id}\n </span>;\n case \"usergroup\":\n return <span {...stylex.props(styles.mention)}>\n @{resolvers.usergroup?.(token.id) ?? token.fallback ?? token.id}\n </span>;\n case \"team\":\n return <span {...stylex.props(styles.mention)}>@{resolvers.team?.(token.id) ?? token.id}</span>;\n case \"broadcast\":\n return <span {...stylex.props(styles.mention)}>@{token.range}</span>;\n case \"date\":\n {\n const seconds = Number(token.id);\n const content = Number.isFinite(seconds) ? resolvers.date?.(seconds, token.format ?? \"\") ?? formatSlackDate(seconds, token.format ?? \"\", token.fallback) : token.fallback ?? token.id;\n const href = safeHref(token.href);\n return href === undefined ? content : <a {...stylex.props(styles.link)} href={href} rel=\"noreferrer\">\n {content}\n </a>;\n }\n }\n return assertNever(token);\n}\nexport interface MrkdwnProps {\n readonly className?: string | undefined;\n readonly text: string;\n}\nexport function Mrkdwn({\n className,\n text\n}: MrkdwnProps): ReactElement {\n const sx = stylex.props(styles.text);\n return <div {...sx} className={joinClassNames(sx.className, className)}>\n {tokenizeMrkdwn(text).map((token, index) => <TokenView key={`${token.kind}-${String(index)}`} token={token} />)}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement } from \"react\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { TextObjectData } from \"../types.js\";\nimport { Mrkdwn } from \"./Mrkdwn.js\";\nexport interface TextProps {\n readonly className?: string | undefined;\n readonly text: TextObjectData;\n}\nexport function Text({\n className,\n text\n}: TextProps): ReactElement {\n const value: unknown = text;\n const content = isRecord(value) && typeof value[\"text\"] === \"string\" ? value[\"text\"] : fallbackLabel(value, \"text\");\n if (discriminator(value) === \"mrkdwn\") {\n return <Mrkdwn className={className} text={content} />;\n }\n const sx = stylex.props(styles.text);\n return <div {...sx} className={joinClassNames(sx.className, className)}>\n {content}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { assertNever } from \"../assert-never.js\";\nimport { styles } from \"../styles.js\";\nimport { Mrkdwn } from \"./Mrkdwn.js\";\ntype MarkdownBlockToken = {\n readonly kind: \"code\";\n readonly language?: string;\n readonly text: string;\n} | {\n readonly kind: \"divider\";\n} | {\n readonly kind: \"heading\";\n readonly level: number;\n readonly text: string;\n} | {\n readonly items: readonly {\n readonly checked?: boolean;\n readonly task: boolean;\n readonly text: string;\n }[];\n readonly kind: \"list\";\n readonly ordered: boolean;\n} | {\n readonly kind: \"paragraph\" | \"quote\";\n readonly text: string;\n} | {\n readonly headers: readonly string[];\n readonly kind: \"table\";\n readonly rows: readonly (readonly string[])[];\n};\nfunction isDivider(line: string): boolean {\n const trimmed = line.trim();\n return trimmed === \"---\" || trimmed === \"***\" || trimmed === \"___\";\n}\nfunction isTableDivider(line: string): boolean {\n const cells = line.trim().replace(/^\\|/, \"\").replace(/\\|$/, \"\").split(\"|\");\n return cells.length > 0 && cells.every(cell => /^:?-{3,}:?$/.test(cell.trim()));\n}\nfunction tableCells(line: string): readonly string[] {\n return line.trim().replace(/^\\|/, \"\").replace(/\\|$/, \"\").split(\"|\").map(cell => cell.trim());\n}\nfunction listItem(line: string): {\n readonly checked?: boolean;\n readonly ordered: boolean;\n readonly task: boolean;\n readonly text: string;\n} | undefined {\n const task = /^\\s*[-*+]\\s+\\[([ xX])\\]\\s+(.+)$/.exec(line);\n if (task !== null) {\n return {\n checked: (task[1] ?? \"\").toLowerCase() === \"x\",\n ordered: false,\n task: true,\n text: task[2] ?? \"\"\n };\n }\n const bullet = /^\\s*[-*+]\\s+(.+)$/.exec(line);\n if (bullet !== null) {\n return {\n ordered: false,\n task: false,\n text: bullet[1] ?? \"\"\n };\n }\n const ordered = /^\\s*\\d+[.)]\\s+(.+)$/.exec(line);\n if (ordered !== null) {\n return {\n ordered: true,\n task: false,\n text: ordered[1] ?? \"\"\n };\n }\n return undefined;\n}\nexport function tokenizeMarkdown(markdown: string): readonly MarkdownBlockToken[] {\n const lines = markdown.split(\"\\n\");\n const tokens: MarkdownBlockToken[] = [];\n let index = 0;\n while (index < lines.length) {\n const line = lines[index] ?? \"\";\n if (line.trim().length === 0) {\n index += 1;\n continue;\n }\n if (line.trimStart().startsWith(\"```\")) {\n const language = line.trim().slice(3).trim();\n const body: string[] = [];\n index += 1;\n while (index < lines.length && !(lines[index] ?? \"\").trimStart().startsWith(\"```\")) {\n body.push(lines[index] ?? \"\");\n index += 1;\n }\n index += index < lines.length ? 1 : 0;\n tokens.push({\n kind: \"code\",\n text: body.join(\"\\n\"),\n ...(language.length === 0 ? {} : {\n language\n })\n });\n continue;\n }\n if (line.includes(\"|\") && index + 1 < lines.length && isTableDivider(lines[index + 1] ?? \"\")) {\n const headers = tableCells(line);\n const rows: (readonly string[])[] = [];\n index += 2;\n while (index < lines.length && (lines[index] ?? \"\").includes(\"|\")) {\n rows.push(tableCells(lines[index] ?? \"\"));\n index += 1;\n }\n tokens.push({\n headers,\n kind: \"table\",\n rows\n });\n continue;\n }\n if (isDivider(line)) {\n tokens.push({\n kind: \"divider\"\n });\n index += 1;\n continue;\n }\n const heading = /^(#{1,6})\\s+(.+)$/.exec(line);\n if (heading !== null) {\n tokens.push({\n kind: \"heading\",\n level: (heading[1] ?? \"#\").length,\n text: heading[2] ?? \"\"\n });\n index += 1;\n continue;\n }\n const firstItem = listItem(line);\n if (firstItem !== undefined) {\n const items = [firstItem];\n index += 1;\n while (index < lines.length) {\n const next = listItem(lines[index] ?? \"\");\n if (next === undefined || next.ordered !== firstItem.ordered) {\n break;\n }\n items.push(next);\n index += 1;\n }\n tokens.push({\n items,\n kind: \"list\",\n ordered: firstItem.ordered\n });\n continue;\n }\n if (line.trimStart().startsWith(\">\")) {\n const quote: string[] = [];\n while (index < lines.length && (lines[index] ?? \"\").trimStart().startsWith(\">\")) {\n quote.push((lines[index] ?? \"\").trimStart().replace(/^>\\s?/, \"\"));\n index += 1;\n }\n tokens.push({\n kind: \"quote\",\n text: quote.join(\"\\n\")\n });\n continue;\n }\n const paragraph = [line];\n index += 1;\n while (index < lines.length && (lines[index] ?? \"\").trim().length > 0) {\n const next = lines[index] ?? \"\";\n if (next.trimStart().startsWith(\"```\") || isDivider(next) || /^(#{1,6})\\s+/.test(next) || listItem(next) !== undefined || next.trimStart().startsWith(\">\")) {\n break;\n }\n paragraph.push(next);\n index += 1;\n }\n tokens.push({\n kind: \"paragraph\",\n text: paragraph.join(\"\\n\")\n });\n }\n return tokens;\n}\nfunction gfmInlineToMrkdwn(value: string): string {\n return value.replace(/\\[([^\\]]+)\\]\\((https?:\\/\\/[^)\\s]+)\\)/g, \"<$2|$1>\").replaceAll(\"**\", \"*\").replaceAll(\"__\", \"*\").replaceAll(\"~~\", \"~\");\n}\nfunction headingStyle(level: number): stylex.StyleXStyles {\n if (level <= 1) {\n return styles.heading1;\n }\n if (level === 2) {\n return styles.heading2;\n }\n if (level === 3) {\n return styles.heading3;\n }\n return styles.heading4;\n}\ninterface MarkdownTokenViewProps {\n readonly token: MarkdownBlockToken;\n}\nfunction MarkdownTokenView({\n token\n}: MarkdownTokenViewProps): ReactElement {\n switch (token.kind) {\n case \"paragraph\":\n return <Mrkdwn text={gfmInlineToMrkdwn(token.text)} />;\n case \"quote\":\n return <blockquote {...stylex.props(styles.quote)}>\n <Mrkdwn text={gfmInlineToMrkdwn(token.text)} />\n </blockquote>;\n case \"heading\":\n return <div {...stylex.props(styles.heading, headingStyle(token.level))}>\n <Mrkdwn text={gfmInlineToMrkdwn(token.text)} />\n </div>;\n case \"divider\":\n return <hr {...stylex.props(styles.divider)} />;\n case \"code\":\n return <pre {...stylex.props(styles.pre)} data-language={token.language}>\n {token.text}\n </pre>;\n case \"list\":\n {\n const itemStyle = token.ordered ? styles.listItemOrdered : [styles.listItemBullet, styles.listBullet];\n const children: ReactNode = token.items.map((item, index) => <li {...stylex.props(itemStyle)} key={`${item.text}-${String(index)}`}>\n {item.task ? <>\n <input checked={item.checked} disabled readOnly type=\"checkbox\" />{\" \"}\n </> : null}\n <Mrkdwn text={gfmInlineToMrkdwn(item.text)} />\n </li>);\n return token.ordered ? <ol {...stylex.props(styles.list, styles.listOrdered)}>{children}</ol> : <ul {...stylex.props(styles.list)}>{children}</ul>;\n }\n case \"table\":\n return <div {...stylex.props(styles.tableScroller)}>\n <table {...stylex.props(styles.table)}>\n <thead>\n <tr>\n {token.headers.map((header, index) => <th {...stylex.props(styles.tableCell, styles.tableHeader, index === 0 && styles.tableCellFirstColumn)} key={`${header}-${String(index)}`} scope=\"col\">\n <Mrkdwn text={gfmInlineToMrkdwn(header)} />\n </th>)}\n </tr>\n </thead>\n <tbody>\n {token.rows.map((row, rowIndex) => <tr key={`row-${String(rowIndex)}`}>\n {row.map((cell, cellIndex) => <td {...stylex.props(styles.tableCell, cellIndex === 0 && styles.tableCellFirstColumn)} key={`${cell}-${String(cellIndex)}`}>\n <Mrkdwn text={gfmInlineToMrkdwn(cell)} />\n </td>)}\n </tr>)}\n </tbody>\n </table>\n </div>;\n }\n return assertNever(token);\n}\nexport interface MarkdownProps {\n readonly markdown: string;\n}\nexport function Markdown({\n markdown\n}: MarkdownProps): ReactElement {\n return <div {...stylex.props(styles.markdown)}>\n {tokenizeMarkdown(markdown).map((token, index) => <MarkdownTokenView key={`${token.kind}-${String(index)}`} token={token} />)}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement, ReactNode } from \"react\";\nimport { ImageElement, InteractiveElement } from \"../elements/Elements.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport { Markdown } from \"../text/Markdown.js\";\nimport { RichText } from \"../text/RichText.js\";\nimport { Text } from \"../text/Text.js\";\nimport type { BlockComponentProps, ContextBlockData, DividerBlockData, FileBlockData, HeaderBlockData, ImageElementData, ImageBlockData, MarkdownBlockData, RichTextBlockData, SectionBlockData, VideoBlockData } from \"../types.js\";\nfunction isImageElementData(value: unknown): value is ImageElementData {\n return isRecord(value) && value[\"type\"] === \"image\";\n}\ninterface FrameProps {\n readonly blockId?: string | undefined;\n readonly blockType: string;\n readonly children: ReactNode;\n readonly className?: string | undefined;\n}\n\n/** Shared per-block wrapper (data attributes + base style); internal to blocks/. */\nexport function Frame({\n blockId,\n blockType,\n children,\n className\n}: FrameProps): ReactElement {\n const sx = stylex.props(styles.block);\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={blockId} data-block-type={blockType}>\n {children}\n </div>;\n}\nexport function SectionBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<SectionBlockData>): ReactElement {\n const accessory: unknown = block.accessory;\n const fields = Array.isArray(block.fields) ? block.fields : undefined;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.section)}>\n <div {...stylex.props(styles.sectionContent)}>\n {block.text === undefined ? null : <Text text={block.text} />}\n {fields === undefined ? null : <div {...stylex.props(styles.fields)}>\n {fields.map((field, index) => <Text key={`${discriminator(field) ?? \"unknown\"}-${String(index)}`} text={field} />)}\n </div>}\n </div>\n {accessory === undefined ? null : isImageElementData(accessory) ? <div {...stylex.props(styles.accessory)}>\n <ImageElement element={accessory} variant=\"accessory\" />\n </div> : <InteractiveElement blockId={block.block_id} className={stylex.props(styles.accessory).className} element={block.accessory} path={`${path}.accessory`} />}\n </div>\n </Frame>;\n}\nexport function HeaderBlock({\n block,\n className\n}: BlockComponentProps<HeaderBlockData>): ReactElement {\n // Slack's Builder renders a header without a level as an h2 on the \"flat\"\n // scale (15px/900); explicit levels use the measured per-level scale\n // (docs/slack-style-baseline.md, \"header block levels\").\n const rawLevel = block.level === undefined ? undefined : Math.trunc(block.level);\n const level = rawLevel === undefined || Number.isNaN(rawLevel) ? undefined : Math.min(4, Math.max(1, rawLevel));\n const text: unknown = block.text;\n const content = isRecord(text) && typeof text[\"text\"] === \"string\" ? text[\"text\"] : fallbackLabel(block, \"header\");\n const headingStyles = stylex.props(styles.heading, level === 1 && styles.heading1, (level === undefined || level === 2) && styles.heading2, level === 3 && styles.heading3, level === 4 && styles.heading4);\n const heading = level === 1 ? <h1 {...headingStyles}>{content}</h1> : level === 3 ? <h3 {...headingStyles}>{content}</h3> : level === 4 ? <h4 {...headingStyles}>{content}</h4> : <h2 {...headingStyles}>{content}</h2>;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n {heading}\n </Frame>;\n}\nexport function DividerBlock({\n block,\n className\n}: BlockComponentProps<DividerBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <hr {...stylex.props(styles.divider)} />\n </Frame>;\n}\nexport function ImageBlock({\n block,\n className\n}: BlockComponentProps<ImageBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <ImageElement element={block} />\n {block.title === undefined ? null : <Text className={stylex.props(styles.smallText).className} text={block.title} />}\n </Frame>;\n}\ntype ContextTextElementData = Extract<ContextBlockData[\"elements\"][number], {\n readonly type: \"mrkdwn\" | \"plain_text\";\n}>;\n/**\n * Runtime payloads may carry context-element shapes this renderer does not\n * know; validation no longer runs before render, so gate on the full text\n * shape instead of assuming every non-image entry is a text object.\n */\nfunction isContextTextElement(value: unknown): value is ContextTextElementData {\n return isRecord(value) && (value[\"type\"] === \"mrkdwn\" || value[\"type\"] === \"plain_text\") && typeof value[\"text\"] === \"string\";\n}\nexport function ContextBlock({\n block,\n className\n}: BlockComponentProps<ContextBlockData>): ReactElement {\n const elements: unknown = block.elements;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.context)}>\n {Array.isArray(elements) ? elements.map((element, index) => {\n if (isImageElementData(element)) {\n return <ImageElement element={element} key={`${element.type}-${String(index)}`} variant=\"context\" />;\n }\n if (!isContextTextElement(element)) {\n return <span {...stylex.props(styles.unhandled)} data-unhandled-element={discriminator(element) ?? \"unknown\"} key={`unhandled-${String(index)}`}>\n {fallbackLabel(element, \"context element\")}\n </span>;\n }\n return <div {...stylex.props(styles.contextElement)} key={`${element.type}-${String(index)}`}>\n <Text className={stylex.props(styles.contextText).className} text={element} />\n </div>;\n }) : <span {...stylex.props(styles.unhandled)} data-unhandled-element=\"context\">\n {fallbackLabel(block, \"context block\")}\n </span>}\n </div>\n </Frame>;\n}\nexport function RichTextBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<RichTextBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <RichText block={block} path={path} />\n </Frame>;\n}\nexport function MarkdownBlock({\n block,\n className\n}: BlockComponentProps<MarkdownBlockData>): ReactElement {\n const markdown = typeof block.text === \"string\" ? block.text : fallbackLabel(block, \"markdown block\");\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <Markdown markdown={markdown} />\n </Frame>;\n}\nexport function FileBlock({\n block,\n className\n}: BlockComponentProps<FileBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.file)}>\n <span aria-hidden=\"true\">📎</span>\n <div>\n <strong>Remote file</strong>\n <div {...stylex.props(styles.smallText)}>{block.external_id}</div>\n </div>\n </div>\n </Frame>;\n}\nexport function VideoBlock({\n block,\n className\n}: BlockComponentProps<VideoBlockData>): ReactElement {\n const href = safeHref(typeof block.title_url === \"string\" ? block.title_url : typeof block.video_url === \"string\" ? block.video_url : undefined);\n const title: unknown = block.title;\n const titleText = isRecord(title) && typeof title[\"text\"] === \"string\" ? title[\"text\"] : fallbackLabel(block, \"video\");\n const description: unknown = block.description;\n const descriptionText = isRecord(description) && typeof description[\"text\"] === \"string\" ? description[\"text\"] : undefined;\n const altText = typeof block.alt_text === \"string\" ? block.alt_text : fallbackLabel(block, \"video\");\n const thumbnailUrl = typeof block.thumbnail_url === \"string\" ? block.thumbnail_url : undefined;\n const content: ReactNode = <>\n {thumbnailUrl === undefined ? null : <img {...stylex.props(styles.image, styles.cardHero)} alt={altText} src={thumbnailUrl} />}\n <div {...stylex.props(styles.cardContent)}>\n <strong>{titleText}</strong>\n {descriptionText}\n {typeof block.provider_name !== \"string\" ? null : <span {...stylex.props(styles.smallText)}>{block.provider_name}</span>}\n </div>\n </>;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n {href === undefined ? <div {...stylex.props(styles.card)} aria-label={altText}>\n {content}\n </div> : <a {...stylex.props(styles.card)} aria-label={altText} href={href} rel=\"noreferrer\">\n {content}\n </a>}\n </Frame>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport { useState, type ReactElement, type ReactNode } from \"react\";\nimport { ButtonElement, ImageElement } from \"../elements/Elements.js\";\nimport { blockIdentifier, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { safeHref } from \"../safe-url.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport { RichText } from \"../text/RichText.js\";\nimport { Text } from \"../text/Text.js\";\nimport type { AlertBlockData, BlockComponentProps, CardBlockData, CarouselBlockData, DataTableBlockData, PlanBlockData, TableBlockData, TableCellData, TaskCardBlockData } from \"../types.js\";\nimport { Frame } from \"./BasicBlocks.js\";\nexport interface TableCellProps {\n readonly align?: \"center\" | \"left\" | \"right\" | undefined;\n readonly cell: TableCellData;\n readonly className?: string | undefined;\n readonly firstColumn?: boolean | undefined;\n readonly header?: boolean | undefined;\n readonly path?: string | undefined;\n readonly scope?: \"col\" | \"row\" | undefined;\n readonly wrapped?: boolean | undefined;\n}\nexport function TableCell({\n align = \"left\",\n cell,\n className,\n firstColumn = false,\n header = false,\n path = \"cell\",\n scope = \"col\",\n wrapped = false\n}: TableCellProps): ReactElement {\n const sx = stylex.props(styles.tableCell, header && styles.tableHeader, firstColumn && styles.tableCellFirstColumn, wrapped && styles.tableCellWrapped);\n let content: ReactNode;\n const runtimeCell: unknown = cell;\n if (!isRecord(runtimeCell)) {\n content = fallbackLabel(cell, \"table cell\");\n } else {\n switch (cell.type) {\n case \"rich_text\":\n content = <RichText block={cell} path={path} />;\n break;\n case \"raw_number\":\n content = cell.text ?? String(cell.value);\n break;\n case \"raw_text\":\n content = cell.text;\n break;\n default:\n content = fallbackLabel(cell, \"table cell\");\n }\n }\n return header ? <th {...sx} className={joinClassNames(sx.className, className)} scope={scope} style={{\n textAlign: align\n }}>\n {content}\n </th> : <td {...sx} className={joinClassNames(sx.className, className)} style={{\n textAlign: align\n }}>\n {content}\n </td>;\n}\nfunction isTableRow(value: unknown): value is readonly TableCellData[] {\n return Array.isArray(value);\n}\nexport function TableBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<TableBlockData>): ReactElement {\n const rows = Array.isArray(block.rows) ? block.rows.filter(isTableRow) : [];\n const columnSettings = block.column_settings;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.tableScroller)}>\n <table {...stylex.props(styles.table)}>\n <thead>\n <tr>\n {(rows[0] ?? []).map((cell, index) => <TableCell align={columnSettings?.[index]?.align} cell={cell} firstColumn={index === 0} header key={`header-${String(index)}`} path={`${path}.rows[0][${String(index)}]`} wrapped={columnSettings?.[index]?.is_wrapped} />)}\n </tr>\n </thead>\n <tbody>\n {rows.slice(1).map((row, rowIndex) => <tr key={`row-${String(rowIndex + 1)}`}>\n {row.map((cell, cellIndex) => <TableCell align={columnSettings?.[cellIndex]?.align} cell={cell} firstColumn={cellIndex === 0} key={`cell-${String(cellIndex)}`} path={`${path}.rows[${String(rowIndex + 1)}][${String(cellIndex)}]`} wrapped={columnSettings?.[cellIndex]?.is_wrapped} />)}\n </tr>)}\n </tbody>\n </table>\n </div>\n </Frame>;\n}\ninterface DataTableCellContentProps {\n readonly cell: TableCellData;\n readonly path: string;\n}\nfunction DataTableCellContent({\n cell,\n path\n}: DataTableCellContentProps): ReactNode {\n const runtimeCell: unknown = cell;\n if (!isRecord(runtimeCell)) {\n return fallbackLabel(cell, \"table cell\");\n }\n switch (cell.type) {\n case \"rich_text\":\n return <RichText block={cell} path={path} />;\n case \"raw_number\":\n return cell.text ?? String(cell.value);\n case \"raw_text\":\n return cell.text;\n default:\n return fallbackLabel(cell, \"table cell\");\n }\n}\n\n/**\n * Plain-text projection of a cell for the client-side filter. Cells are\n * untrusted runtime payloads: every branch must return a real string or\n * the filter's `.toLowerCase()` throws on the first keystroke.\n */\nfunction cellFilterText(cell: TableCellData): string {\n const runtimeCell: unknown = cell;\n if (!isRecord(runtimeCell)) {\n return \"\";\n }\n if (cell.type === \"raw_text\") {\n const text = runtimeCell[\"text\"];\n return typeof text === \"string\" ? text : \"\";\n }\n if (cell.type === \"raw_number\") {\n const text = runtimeCell[\"text\"];\n if (typeof text === \"string\") {\n return text;\n }\n const value = runtimeCell[\"value\"];\n return typeof value === \"number\" || typeof value === \"string\" ? String(value) : \"\";\n }\n if (cell.type === \"rich_text\") {\n // JSON.stringify returns undefined for undefined input — guard it.\n const serialized = JSON.stringify(runtimeCell[\"elements\"]);\n return typeof serialized === \"string\" ? serialized : \"\";\n }\n return \"\";\n}\nexport function DataTableBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<DataTableBlockData>): ReactElement {\n const requestedPageSize = block.page_size ?? 5;\n const pageSize = Number.isFinite(requestedPageSize) && requestedPageSize > 0 ? Math.max(1, Math.trunc(requestedPageSize)) : 5;\n const rows = Array.isArray(block.rows) ? block.rows.filter(isTableRow) : [];\n const rowHeaderColumnIndex = block.row_header_column_index ?? 0;\n const caption = typeof block.caption === \"string\" ? block.caption : undefined;\n const [page, setPage] = useState(0);\n const [filter, setFilter] = useState(\"\");\n const headerRow = rows[0] ?? [];\n const trimmedFilter = filter.trim().toLowerCase();\n const dataRows = trimmedFilter === \"\" ? rows.slice(1) : rows.slice(1).filter(row => row.some(cell => cellFilterText(cell).toLowerCase().includes(trimmedFilter)));\n const pageCount = Math.max(1, Math.ceil(dataRows.length / pageSize));\n const safePage = Math.min(page, pageCount - 1);\n const visibleRows = dataRows.slice(safePage * pageSize, (safePage + 1) * pageSize);\n const lastVisibleIndex = visibleRows.length - 1;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.dataTable)}>\n <div {...stylex.props(styles.dataTableHeaderBar)}>\n <span {...stylex.props(styles.dataTableTitle)}>{caption}</span>\n <span {...stylex.props(styles.dataTableFilter)}>\n <span aria-hidden=\"true\">⌕</span>\n <input {...stylex.props(styles.dataTableFilterInput)} aria-label={caption === undefined ? \"Filter table\" : `Filter ${caption}`} onChange={event => {\n setFilter(event.target.value);\n setPage(0);\n }} placeholder=\"Filter table...\" type=\"text\" value={filter} />\n </span>\n <button {...stylex.props(styles.dataTableIconButton)} aria-label={caption === undefined ? \"Expand table\" : `View ${caption}`} type=\"button\">\n <span aria-hidden=\"true\">⤢</span>\n </button>\n <button {...stylex.props(styles.dataTableIconButton)} aria-label=\"More actions\" type=\"button\">\n <span aria-hidden=\"true\">⋮</span>\n </button>\n </div>\n <div {...stylex.props(styles.dataTableBand, pageCount <= 1 && styles.dataTableBandUnpaginated)}>\n <table {...stylex.props(styles.dataTableTable)}>\n {caption === undefined ? null : <caption {...stylex.props(styles.visuallyHidden)}>{caption}</caption>}\n <thead>\n <tr>\n {headerRow.map((cell, index) => <th {...stylex.props(styles.dataTableTh)} key={`header-${String(index)}`} scope=\"col\">\n <DataTableCellContent cell={cell} path={`${path}.rows[0][${String(index)}]`} />\n </th>)}\n </tr>\n </thead>\n <tbody>\n {visibleRows.map((row, rowIndex) => {\n const sourceIndex = safePage * pageSize + rowIndex + 1;\n const lastColumnIndex = row.length - 1;\n return <tr key={`row-${String(sourceIndex)}`}>\n {row.map((cell, cellIndex) => {\n const cellSx = stylex.props(styles.dataTableTd, rowIndex === 0 && cellIndex === 0 && styles.dataTableRadiusTopStart, rowIndex === 0 && cellIndex === lastColumnIndex && styles.dataTableRadiusTopEnd, rowIndex === lastVisibleIndex && cellIndex === 0 && styles.dataTableRadiusBottomStart, rowIndex === lastVisibleIndex && cellIndex === lastColumnIndex && styles.dataTableRadiusBottomEnd);\n const content = <DataTableCellContent cell={cell} path={`${path}.rows[${String(sourceIndex)}][${String(cellIndex)}]`} />;\n return cellIndex === rowHeaderColumnIndex ? <th {...cellSx} key={`cell-${String(cellIndex)}`} scope=\"row\">\n {content}\n </th> : <td {...cellSx} key={`cell-${String(cellIndex)}`}>\n {content}\n </td>;\n })}\n </tr>;\n })}\n </tbody>\n </table>\n {pageCount <= 1 ? null : <div {...stylex.props(styles.dataTablePagination)}>\n <button {...stylex.props(styles.dataTablePageChevron)} aria-label=\"Previous\" disabled={safePage === 0} onClick={() => {\n setPage(current => Math.max(0, current - 1));\n }} type=\"button\">\n <span aria-hidden=\"true\">‹</span>\n </button>\n {Array.from({\n length: pageCount\n }, (_, pageIndex) => <button {...stylex.props(styles.dataTablePageButton, pageIndex === safePage && styles.dataTablePageButtonActive)} aria-current={pageIndex === safePage ? \"page\" : undefined} key={`page-${String(pageIndex)}`} onClick={() => {\n setPage(pageIndex);\n }} type=\"button\">\n {pageIndex + 1}\n </button>)}\n <button {...stylex.props(styles.dataTablePageChevron)} aria-label=\"Next\" disabled={safePage === pageCount - 1} onClick={() => {\n setPage(current => Math.min(pageCount - 1, current + 1));\n }} type=\"button\">\n <span aria-hidden=\"true\">›</span>\n </button>\n </div>}\n </div>\n </div>\n </Frame>;\n}\nexport function CardBlock({\n block,\n className\n}: BlockComponentProps<CardBlockData>): ReactElement {\n const actions = Array.isArray(block.actions) ? block.actions : undefined;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.card)}>\n {block.hero_image === undefined ? null : <ImageElement element={block.hero_image} variant=\"cardHero\" />}\n <div {...stylex.props(styles.cardContent)}>\n {block.icon === undefined && block.slack_icon === undefined && block.title === undefined && block.subtitle === undefined ? null : <div {...stylex.props(styles.cardHeading)}>\n {block.icon === undefined ? block.slack_icon === undefined ? null : <span aria-hidden=\"true\">◆</span> : <ImageElement element={block.icon} variant=\"cardIcon\" />}\n <div>\n {block.title === undefined ? null : <Text className={stylex.props(styles.cardTitle).className} text={block.title} />}\n {block.subtitle === undefined ? null : <Text className={stylex.props(styles.smallText).className} text={block.subtitle} />}\n </div>\n </div>}\n {block.body === undefined ? null : <Text text={block.body} />}\n {block.subtext === undefined ? null : <Text className={stylex.props(styles.smallText).className} text={block.subtext} />}\n </div>\n {actions === undefined ? null : <div {...stylex.props(styles.cardActions)}>\n {actions.map((action, index) => <ButtonElement blockId={block.block_id} element={action} key={`${isRecord(action) && typeof action[\"action_id\"] === \"string\" ? action[\"action_id\"] : \"button\"}-${String(index)}`} />)}\n </div>}\n </div>\n </Frame>;\n}\nfunction isCardBlockData(value: unknown): value is CardBlockData {\n return isRecord(value) && value[\"type\"] === \"card\";\n}\nexport function CarouselBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<CarouselBlockData>): ReactElement {\n const elements: unknown = block.elements;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.carousel)}>\n {Array.isArray(elements) ? elements.map((card, index) => isCardBlockData(card) ? <CardBlock block={card} className={stylex.props(styles.carouselCard).className} key={`${blockIdentifier(card) ?? \"card\"}-${String(index)}`} path={`${path}.elements[${String(index)}]`} /> : <div {...stylex.props(styles.unhandled)} data-unhandled-block key={`unknown-${String(index)}`}>\n {fallbackLabel(card, \"carousel card\")}\n </div>) : null}\n </div>\n </Frame>;\n}\nexport function AlertBlock({\n block,\n className\n}: BlockComponentProps<AlertBlockData>): ReactElement {\n const level = block.level ?? \"default\";\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.alert, level === \"info\" && styles.alertInfo, level === \"warning\" && styles.alertWarning, level === \"error\" && styles.alertError, level === \"success\" && styles.alertSuccess)}>\n <span aria-hidden=\"true\">\n {level === \"warning\" ? \"⚠\" : level === \"error\" ? \"!\" : level === \"success\" ? \"✓\" : \"i\"}\n </span>\n <Text text={block.text} />\n </div>\n </Frame>;\n}\nexport function TaskCardBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<TaskCardBlockData>): ReactElement {\n const sources: unknown = block.sources;\n const status = typeof block.status === \"string\" ? block.status : \"unknown\";\n const title = typeof block.title === \"string\" ? block.title : fallbackLabel(block, \"task\");\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.task)}>\n <div {...stylex.props(styles.taskHeading)}>\n <span aria-hidden=\"true\">\n {status === \"complete\" ? \"✓\" : status === \"error\" ? \"!\" : status === \"in_progress\" ? \"◌\" : \"○\"}\n </span>\n <span>{title}</span>\n <span {...stylex.props(styles.taskStatus)}>{status}</span>\n </div>\n {block.details === undefined ? null : <RichText block={block.details} path={`${path}.details`} />}\n {block.output === undefined ? null : <RichText block={block.output} path={`${path}.output`} />}\n {Array.isArray(sources) ? <div {...stylex.props(styles.context)}>\n {sources.map((source, index) => {\n if (!isRecord(source)) {\n return <span {...stylex.props(styles.unhandled)} key={`unknown-${String(index)}`}>\n {fallbackLabel(source, \"task source\")}\n </span>;\n }\n const href = safeHref(typeof source[\"url\"] === \"string\" ? source[\"url\"] : undefined);\n const text = typeof source[\"text\"] === \"string\" ? source[\"text\"] : fallbackLabel(source, \"task source\");\n const key = typeof source[\"url\"] === \"string\" ? source[\"url\"] : `source-${String(index)}`;\n const reactKey = `${key}-${String(index)}`;\n return href === undefined ? <span key={reactKey}>{text}</span> : <a {...stylex.props(styles.link)} href={href} key={reactKey} rel=\"noreferrer\">\n {text}\n </a>;\n })}\n </div> : null}\n </div>\n </Frame>;\n}\nfunction isTaskCardBlockData(value: unknown): value is TaskCardBlockData {\n return isRecord(value) && value[\"type\"] === \"task_card\";\n}\nexport function PlanBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<PlanBlockData>): ReactElement {\n const tasks: unknown = block.tasks;\n const title = typeof block.title === \"string\" ? block.title : fallbackLabel(block, \"plan\");\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.plan)}>\n <strong>{title}</strong>\n {Array.isArray(tasks) ? tasks.map((task, index) => isTaskCardBlockData(task) ? <TaskCardBlock block={task} key={`${typeof task[\"task_id\"] === \"string\" ? task[\"task_id\"] : \"task\"}-${String(index)}`} path={`${path}.tasks[${String(index)}]`} /> : <div {...stylex.props(styles.unhandled)} data-unhandled-block key={`unknown-${String(index)}`}>\n {fallbackLabel(task, \"plan task\")}\n </div>) : null}\n </div>\n </Frame>;\n}","export const BLOCK_ID_MAX_CHARS = 255;\nexport const MESSAGE_MAX_BLOCKS = 50;\nexport const VIEW_MAX_BLOCKS = 100;\n\nexport const TEXT_OBJECT_MAX_CHARS = 3000;\nexport const SECTION_TEXT_MAX_CHARS = 3000;\nexport const SECTION_FIELD_MAX_CHARS = 2000;\nexport const SECTION_FIELDS_MAX = 10;\nexport const HEADER_TEXT_MAX_CHARS = 150;\nexport const HEADER_LEVEL_MAX = 4;\nexport const IMAGE_URL_MAX_CHARS = 3000;\nexport const IMAGE_ALT_MAX_CHARS = 2000;\nexport const IMAGE_TITLE_MAX_CHARS = 2000;\nexport const CONTEXT_ELEMENTS_MAX = 10;\nexport const ACTION_ELEMENTS_MAX = 25;\nexport const CONTEXT_ACTION_ELEMENTS_MAX = 5;\nexport const MARKDOWN_CUMULATIVE_MAX_CHARS = 12_000;\n\nexport const BUTTON_TEXT_MAX_CHARS = 75;\nexport const BUTTON_URL_MAX_CHARS = 3000;\nexport const BUTTON_VALUE_MAX_CHARS = 2000;\nexport const ACTION_ID_MAX_CHARS = 255;\n\nexport const TABLE_MAX_ROWS = 100;\nexport const TABLE_MAX_COLUMNS = 20;\nexport const TABLE_MAX_CHARS = 10_000;\nexport const DATA_TABLE_MAX_ROWS = 201;\nexport const DATA_TABLE_MAX_CHARS = 20_000;\nexport const DATA_TABLE_PAGE_SIZE_MAX = 100;\n\nexport const CHART_TITLE_MAX_CHARS = 50;\nexport const CHART_SERIES_MAX = 12;\nexport const CHART_SEGMENTS_MAX = 12;\nexport const CHART_POINTS_MAX = 20;\nexport const CHART_LABEL_MAX_CHARS = 20;\nexport const CHART_AXIS_LABEL_MAX_CHARS = 50;\n\n// Chart geometry measured in the Block Kit Builder on 2026-07-21; see\n// packages/react-renderer/docs/slack-style-baseline.md (\"Chart plot\n// geometry\"). Slack draws charts at absolute pixel coordinates and reflows\n// per container width instead of scaling a viewBox.\nexport const CHART_CARD_MIN_WIDTH = 400;\nexport const CHART_CARD_MAX_WIDTH = 624;\n/** Card horizontal padding (12px × 2) plus borders (1px × 2). */\nexport const CHART_SVG_INSET = 26;\nexport const CHART_SVG_HEIGHT = 360;\n/** Left gutter reserved for y ticks and the rotated y-axis label. */\nexport const CHART_PLOT_GUTTER = 74;\nexport const CHART_PLOT_TOP = 9;\nexport const CHART_PLOT_BOTTOM = 334;\nexport const PIE_CENTER_Y = 180;\nexport const PIE_RADIUS = 144;\n\nexport const CARD_TITLE_MAX_CHARS = 150;\nexport const CARD_BODY_MAX_CHARS = 200;\nexport const CARD_ACTIONS_MAX = 3;\nexport const CAROUSEL_CARDS_MAX = 10;\nexport const ALERT_TEXT_MAX_CHARS = 200;\nexport const CONTAINER_CHILDREN_MAX = 10;\nexport const CONTAINER_TITLE_MAX_CHARS = 150;\nexport const RICH_TEXT_LIST_INDENT_MAX = 8;\n\nexport const BLOCK_TYPES = [\n \"actions\",\n \"alert\",\n \"card\",\n \"carousel\",\n \"container\",\n \"context\",\n \"context_actions\",\n \"data_table\",\n \"data_visualization\",\n \"divider\",\n \"file\",\n \"header\",\n \"image\",\n \"input\",\n \"markdown\",\n \"plan\",\n \"rich_text\",\n \"section\",\n \"table\",\n \"task_card\",\n \"video\",\n] as const;\n","import * as stylex from \"@stylexjs/stylex\";\nimport { useCallback, useEffect, useRef, useState, type ReactElement, type ReactNode } from \"react\";\nimport { CHART_CARD_MAX_WIDTH, CHART_CARD_MIN_WIDTH, CHART_PLOT_BOTTOM, CHART_PLOT_GUTTER, CHART_PLOT_TOP, CHART_SVG_HEIGHT, CHART_SVG_INSET, PIE_CENTER_Y, PIE_RADIUS } from \"../constants.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { chartSeriesStyles, defaultChartSeriesStyle, styles, type ChartSeriesStyle } from \"../styles.js\";\nimport type { BlockComponentProps, CartesianChartData, DataVisualizationBlockData, PieChartData } from \"../types.js\";\nimport { Frame } from \"./BasicBlocks.js\";\n\n/**\n * Slack redraws charts at absolute pixel coordinates for the current\n * container width (no SVG viewBox scaling) — measured 2026-07-21, see\n * docs/slack-style-baseline.md. The default matches the 580px Builder\n * message column: card 580 − 26 (padding + border) = 554.\n */\nconst DEFAULT_SVG_WIDTH = 554;\nfunction useChartWidth(): {\n readonly ref: (node: HTMLDivElement | null) => void;\n readonly width: number;\n} {\n const [width, setWidth] = useState(DEFAULT_SVG_WIDTH + CHART_SVG_INSET);\n const observerRef = useRef<ResizeObserver | undefined>(undefined);\n // Stable callback ref: an inline function would change identity every\n // render, making React detach/reattach it and churn the ResizeObserver.\n const ref = useCallback((node: HTMLDivElement | null): void => {\n observerRef.current?.disconnect();\n observerRef.current = undefined;\n if (node === null) {\n return;\n }\n const measure = (): void => {\n const next = node.getBoundingClientRect().width;\n if (next > 0) {\n setWidth(next);\n }\n };\n // Synchronous initial measurement — otherwise the chart renders at the\n // 580px default until the observer's first async callback.\n measure();\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n observerRef.current = observer;\n }, []);\n useEffect(() => () => observerRef.current?.disconnect(), []);\n return {\n ref,\n width\n };\n}\n\n/** d3-style tick step: 1/2/5 × 10^k targeting a given tick count. */\nfunction tickStep(span: number, count: number): number {\n const step = span / Math.max(1, count);\n const power = Math.pow(10, Math.floor(Math.log10(step)));\n const error = step / power;\n if (error >= Math.sqrt(50)) {\n return power * 10;\n }\n if (error >= Math.sqrt(10)) {\n return power * 5;\n }\n if (error >= Math.SQRT2) {\n return power * 2;\n }\n return power;\n}\n\n/**\n * Nice ticks covering [min(0, dataMin), dataMax]. The Builder showed\n * 0/20/40/60/80 for a data max of 75 with the top tick as the scale\n * maximum; extending the domain to the next tick when data exceeds the\n * last tick is inferred.\n */\nfunction niceTicks(dataMin: number, dataMax: number): readonly number[] {\n const low = Math.min(0, dataMin);\n const high = dataMax > low ? dataMax : low + 1;\n const step = tickStep(high - low, 4);\n const first = Math.floor(low / step);\n const last = Math.ceil(high / step);\n const ticks: number[] = [];\n for (let index = first; index <= last; index += 1) {\n ticks.push(index * step);\n }\n return ticks;\n}\n\n/** Slack rounds gridlines half-down to a crisp half-pixel. */\nfunction crisp(y: number): number {\n return Math.ceil(y - 0.5) + 0.5;\n}\ninterface CartesianGeometry {\n readonly plotLeft: number;\n readonly plotRight: number;\n readonly svgWidth: number;\n readonly ticks: readonly number[];\n readonly y: (value: number) => number;\n}\nfunction cartesianGeometry(svgWidth: number, values: readonly number[]): CartesianGeometry {\n let dataMin = 0;\n let dataMax = 0;\n for (const value of values) {\n dataMin = Math.min(dataMin, value);\n dataMax = Math.max(dataMax, value);\n }\n const ticks = niceTicks(dataMin, dataMax);\n const domainMin = ticks[0] ?? 0;\n const domainMax = ticks[ticks.length - 1] ?? 1;\n const range = domainMax - domainMin || 1;\n return {\n plotLeft: CHART_PLOT_GUTTER,\n plotRight: svgWidth,\n svgWidth,\n ticks,\n y: (value: number) => CHART_PLOT_BOTTOM - (value - domainMin) / range * (CHART_PLOT_BOTTOM - CHART_PLOT_TOP)\n };\n}\nfunction seriesEntry(index: number): ChartSeriesStyle {\n return chartSeriesStyles[index % chartSeriesStyles.length] ?? defaultChartSeriesStyle;\n}\ntype CartesianSeries = CartesianChartData[\"series\"][number];\ntype CartesianPoint = CartesianSeries[\"data\"][number];\nfunction pointsInCategoryOrder(series: CartesianSeries, categories: readonly string[]): readonly (CartesianPoint | undefined)[] {\n const pointsByLabel = new Map(series.data.map(point => [point.label, point]));\n return categories.map(category => pointsByLabel.get(category));\n}\n\n/**\n * Rounded-top bar path matching Slack's shape: 4px arcs on the top corners\n * only, flat bottom at the baseline.\n */\nfunction barPath(x: number, width: number, top: number, bottom: number): string {\n const radius = Math.min(4, width / 2, Math.abs(bottom - top));\n const left = x;\n const right = x + width;\n return [`M${String(left + radius)} ${String(top)}`, `L${String(right - radius)} ${String(top)}`, `A${String(radius)} ${String(radius)} 0 0 1 ${String(right)} ${String(top + radius)}`, `L${String(right)} ${String(bottom)}`, `L${String(left)} ${String(bottom)}`, `L${String(left)} ${String(top + radius)}`, `A${String(radius)} ${String(radius)} 0 0 1 ${String(left + radius)} ${String(top)}`, \"Z\"].join(\"\");\n}\ninterface XY {\n readonly x: number;\n readonly y: number;\n}\n\n/**\n * Smooth curve through the points with zeroed end tangents, approximating\n * Slack's spline (exact algorithm unidentified — see baseline doc open\n * questions). Interior tangents follow centripetal Catmull-Rom.\n */\nfunction curvePath(points: readonly XY[]): string {\n if (points.length === 0) {\n return \"\";\n }\n const first = points[0];\n if (first === undefined) {\n return \"\";\n }\n if (points.length === 1) {\n return `M${String(first.x)} ${String(first.y)}`;\n }\n const tangents: XY[] = points.map((_, index) => {\n if (index === 0 || index === points.length - 1) {\n return {\n x: 0,\n y: 0\n };\n }\n const previous = points[index - 1];\n const next = points[index + 1];\n if (previous === undefined || next === undefined) {\n return {\n x: 0,\n y: 0\n };\n }\n return {\n x: (next.x - previous.x) * 0.29,\n y: (next.y - previous.y) * 0.29\n };\n });\n const parts: string[] = [`M${String(first.x)} ${String(first.y)}`];\n for (let index = 0; index < points.length - 1; index += 1) {\n const p0 = points[index];\n const p1 = points[index + 1];\n const t0 = tangents[index];\n const t1 = tangents[index + 1];\n if (p0 === undefined || p1 === undefined || t0 === undefined || t1 === undefined) {\n continue;\n }\n const c1x = p0.x + t0.x;\n const c1y = p0.y + t0.y;\n const c2x = p1.x - t1.x;\n const c2y = p1.y - t1.y;\n parts.push(`C${String(c1x)} ${String(c1y)} ${String(c2x)} ${String(c2y)} ${String(p1.x)} ${String(p1.y)}`);\n }\n return parts.join(\"\");\n}\ninterface AxisTextProps {\n readonly geometry: CartesianGeometry;\n}\nfunction CartesianAxes({\n geometry\n}: AxisTextProps): ReactElement {\n const {\n plotLeft,\n plotRight,\n ticks,\n y\n } = geometry;\n return <>\n {ticks.map(tick => {\n const lineY = crisp(y(tick));\n return <path {...stylex.props(styles.chartGridline)} d={`M${String(plotLeft)} ${String(lineY)}L${String(plotRight)} ${String(lineY)}`} fill=\"none\" key={`grid-${String(tick)}`} />;\n })}\n {ticks.map(tick => <text {...stylex.props(styles.chartTickText)} dy=\"0.32em\" key={`tick-${String(tick)}`} textAnchor=\"end\" x={plotLeft - 8} y={y(tick)}>\n {tick}\n </text>)}\n </>;\n}\ninterface CategoryTicksProps {\n readonly categories: readonly string[];\n readonly tickX: (index: number) => number;\n}\n\n/**\n * Bar charts label band centers; line and area charts label the point\n * positions themselves (measured).\n */\nfunction CategoryTicks({\n categories,\n tickX\n}: CategoryTicksProps): ReactElement {\n return <>\n {categories.map((category, index) => <text {...stylex.props(styles.chartTickText)} key={`${category}-${String(index)}`} textAnchor=\"middle\" x={tickX(index)} y={CHART_PLOT_BOTTOM + 17}>\n {category}\n </text>)}\n </>;\n}\ninterface CartesianChartProps {\n readonly chart: CartesianChartData;\n readonly svgWidth: number;\n readonly title: string;\n}\n\n/**\n * Bar group layout fitted to Builder measurements at 1/3/6 series: gap\n * between bars is 10% of a bar; the group's outer margin per band is\n * band × clamp(0.175 − 0.02 × series, 0.075, 0.155) (interpolation\n * inferred between observed counts).\n */\nfunction barLayout(band: number, seriesCount: number): {\n readonly barWidth: number;\n readonly outer: number;\n} {\n const outerFraction = Math.min(0.155, Math.max(0.075, 0.175 - 0.02 * seriesCount));\n const outer = band * outerFraction;\n const barWidth = (band - 2 * outer) / (1.1 * seriesCount - 0.1);\n return {\n barWidth,\n outer\n };\n}\nfunction CartesianChart({\n chart,\n svgWidth,\n title\n}: CartesianChartProps): ReactElement {\n const categories = chart.axis_config.categories;\n const orderedSeries = chart.series.map(series => ({\n points: pointsInCategoryOrder(series, categories),\n series\n }));\n const values = orderedSeries.flatMap(({\n points\n }) => points.flatMap(point => point === undefined ? [] : [point.value]));\n const geometry = cartesianGeometry(svgWidth, values);\n const {\n plotLeft,\n plotRight,\n y\n } = geometry;\n let seriesShapes: ReactNode;\n let tickX: (index: number) => number;\n if (chart.type === \"bar\") {\n const band = (plotRight - plotLeft) / Math.max(1, categories.length);\n const {\n barWidth,\n outer\n } = barLayout(band, Math.max(1, chart.series.length));\n tickX = index => plotLeft + band * (index + 0.5);\n seriesShapes = orderedSeries.map(({\n points,\n series\n }, seriesIndex) => points.map((point, categoryIndex) => {\n if (point === undefined) {\n return null;\n }\n const x = plotLeft + categoryIndex * band + outer + seriesIndex * (1.1 * barWidth);\n return <path {...stylex.props(seriesEntry(seriesIndex).fill)} d={barPath(x, barWidth, y(point.value), CHART_PLOT_BOTTOM)} data-category={point.label} data-series={series.name} key={`${series.name}-${String(seriesIndex)}-${point.label}-${String(categoryIndex)}`} />;\n }));\n } else {\n const innerRight = plotRight - 13;\n const pointX = (index: number): number => categories.length <= 1 ? (plotLeft + innerRight) / 2 : plotLeft + index * (innerRight - plotLeft) / (categories.length - 1);\n tickX = pointX;\n seriesShapes = orderedSeries.map(({\n points,\n series\n }, seriesIndex) => {\n const xy = points.flatMap((point, categoryIndex) => point === undefined ? [] : [{\n x: pointX(categoryIndex),\n y: y(point.value)\n }]);\n const path = curvePath(xy);\n if (path === \"\") {\n return null;\n }\n const lastPoint = xy[xy.length - 1];\n const firstPoint = xy[0];\n return <g key={`${series.name}-${String(seriesIndex)}`}>\n {chart.type === \"area\" && firstPoint !== undefined && lastPoint !== undefined ? <path {...stylex.props(seriesEntry(seriesIndex).tint, styles.chartAreaFill, seriesIndex >= 6 && styles.chartAreaFallbackFill)} d={`${path}L${String(lastPoint.x)} ${String(CHART_PLOT_BOTTOM)}L${String(firstPoint.x)} ${String(CHART_PLOT_BOTTOM)}Z`} data-series-area={series.name} /> : null}\n <path {...stylex.props(seriesEntry(seriesIndex).stroke, styles.chartLinePath)} d={path} data-series={series.name} fill=\"none\" />\n </g>;\n });\n }\n return <svg {...stylex.props(styles.chartSvg)} aria-label={title} height={CHART_SVG_HEIGHT} role=\"img\" width={svgWidth}>\n <CartesianAxes geometry={geometry} />\n {seriesShapes}\n <CategoryTicks categories={categories} tickX={tickX} />\n </svg>;\n}\ninterface PieChartProps {\n readonly chart: PieChartData;\n readonly svgWidth: number;\n readonly title: string;\n}\nfunction polar(cx: number, cy: number, radius: number, angle: number): XY {\n return {\n x: cx + radius * Math.sin(angle),\n y: cy - radius * Math.cos(angle)\n };\n}\nfunction PieChart({\n chart,\n svgWidth,\n title\n}: PieChartProps): ReactElement {\n const values = chart.segments.map(segment => Number.isFinite(segment.value) ? Math.max(0, segment.value) : 0);\n const total = values.reduce((sum, value) => sum + value, 0);\n if (total <= 0) {\n return <div {...stylex.props(styles.unhandled)} aria-label={`${title}: no chart data`} data-empty-chart role=\"img\">\n No chart data\n </div>;\n }\n const cx = svgWidth / 2;\n let cursor = 0;\n const slices = chart.segments.map((segment, index) => {\n const fraction = (values[index] ?? 0) / total;\n const start = cursor * 2 * Math.PI;\n cursor += fraction;\n const end = cursor * 2 * Math.PI;\n const from = polar(cx, PIE_CENTER_Y, PIE_RADIUS, start);\n const to = polar(cx, PIE_CENTER_Y, PIE_RADIUS, end);\n const largeArc = end - start > Math.PI ? 1 : 0;\n const d = fraction >= 1 ?\n // A full circle cannot be a single arc command; draw two halves.\n `M${String(cx)} ${String(PIE_CENTER_Y - PIE_RADIUS)}A${String(PIE_RADIUS)} ${String(PIE_RADIUS)} 0 1 1 ${String(cx)} ${String(PIE_CENTER_Y + PIE_RADIUS)}A${String(PIE_RADIUS)} ${String(PIE_RADIUS)} 0 1 1 ${String(cx)} ${String(PIE_CENTER_Y - PIE_RADIUS)}Z` : `M${String(from.x)} ${String(from.y)}A${String(PIE_RADIUS)} ${String(PIE_RADIUS)} 0 ${String(largeArc)} 1 ${String(to.x)} ${String(to.y)}L${String(cx)} ${String(PIE_CENTER_Y)}Z`;\n return fraction <= 0 ? null : <path {...stylex.props(seriesEntry(index).fill, styles.pieSlice)} d={d} data-segment={segment.label} key={`${segment.label}-${String(index)}`} />;\n });\n return <svg {...stylex.props(styles.chartSvg)} aria-label={title} height={CHART_SVG_HEIGHT} role=\"img\" width={svgWidth}>\n {slices}\n </svg>;\n}\nconst CARTESIAN_CHART_TYPES = {\n area: true,\n bar: true,\n line: true\n} as const satisfies Readonly<Record<CartesianChartData[\"type\"], true>>;\ntype PieSegment = PieChartData[\"segments\"][number];\nfunction isPieSegment(value: unknown): value is PieSegment {\n return isRecord(value) && typeof value[\"label\"] === \"string\" && typeof value[\"value\"] === \"number\" && Number.isFinite(value[\"value\"]);\n}\nfunction isCartesianPoint(value: unknown): value is CartesianPoint {\n return isRecord(value) && typeof value[\"label\"] === \"string\" && typeof value[\"value\"] === \"number\" && Number.isFinite(value[\"value\"]);\n}\nfunction isCartesianSeries(value: unknown): value is CartesianSeries {\n return isRecord(value) && typeof value[\"name\"] === \"string\" && Array.isArray(value[\"data\"]) && value[\"data\"].every(isCartesianPoint);\n}\n\n/**\n * Runtime payloads may carry chart shapes this renderer does not know;\n * validation no longer runs before render, so gate on the fields each chart\n * component dereferences instead of assuming every non-pie chart is\n * Cartesian.\n */\nfunction isPieChart(value: unknown): value is PieChartData {\n return isRecord(value) && value[\"type\"] === \"pie\" && Array.isArray(value[\"segments\"]) && value[\"segments\"].every(isPieSegment);\n}\nfunction isCartesianChart(value: unknown): value is CartesianChartData {\n if (!isRecord(value)) {\n return false;\n }\n const type = value[\"type\"];\n if (typeof type !== \"string\" || !(type in CARTESIAN_CHART_TYPES)) {\n return false;\n }\n const axisConfig = value[\"axis_config\"];\n return Array.isArray(value[\"series\"]) && value[\"series\"].every(isCartesianSeries) && isRecord(axisConfig) && Array.isArray(axisConfig[\"categories\"]) && axisConfig[\"categories\"].every(category => typeof category === \"string\");\n}\nexport function DataVisualizationBlock({\n block,\n className\n}: BlockComponentProps<DataVisualizationBlockData>): ReactElement {\n const chart: unknown = block.chart;\n const title = typeof block.title === \"string\" ? block.title : fallbackLabel(block, \"chart\");\n const {\n ref,\n width\n } = useChartWidth();\n const cardWidth = Math.min(CHART_CARD_MAX_WIDTH, Math.max(CHART_CARD_MIN_WIDTH, width));\n const svgWidth = cardWidth - CHART_SVG_INSET;\n const cartesian = isCartesianChart(chart) ? chart : undefined;\n const pie = cartesian === undefined && isPieChart(chart) ? chart : undefined;\n let content: ReactNode;\n let legendLabels: readonly string[];\n if (pie !== undefined) {\n content = <PieChart chart={pie} svgWidth={svgWidth} title={title} />;\n legendLabels = pie.segments.map(segment => segment.label);\n } else if (cartesian !== undefined) {\n content = <CartesianChart chart={cartesian} svgWidth={svgWidth} title={title} />;\n legendLabels = cartesian.series.map(series => series.name);\n } else {\n content = <div {...stylex.props(styles.unhandled)} data-unhandled-chart-type={discriminator(chart) ?? \"unknown\"}>\n {fallbackLabel(chart, \"chart\")}\n </div>;\n legendLabels = [];\n }\n const xLabel = cartesian?.axis_config.x_label;\n const yLabel = cartesian?.axis_config.y_label;\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n <div {...stylex.props(styles.chartScroller)}>\n <div {...stylex.props(styles.chartCard)} ref={ref}>\n <div {...stylex.props(styles.chartContent)}>\n <h3 {...stylex.props(styles.chartTitle)}>{title}</h3>\n <div {...stylex.props(styles.chartPlotArea)}>\n <div {...stylex.props(styles.chartCanvas)}>\n {content}\n {yLabel === undefined ? null : <div {...stylex.props(styles.chartYAxisLabel)}>\n <span {...stylex.props(styles.chartYAxisLabelText)}>{yLabel}</span>\n </div>}\n </div>\n {/* Cartesian charts always reserve the 8px label strip, even\n with no x_label (measured). */}\n {cartesian === undefined ? null : <div {...stylex.props(styles.chartXAxisLabel)}>{xLabel}</div>}\n {legendLabels.length === 0 ? null : <div {...stylex.props(styles.chartLegend, cartesian !== undefined && styles.chartLegendCartesian)}>\n {legendLabels.map((label, index) => <span {...stylex.props(styles.chartLegendItem)} key={`${label}-${String(index)}`}>\n <span {...stylex.props(styles.chartLegendSwatch, seriesEntry(index).swatch)} aria-hidden=\"true\" />\n {label}\n </span>)}\n </div>}\n </div>\n </div>\n </div>\n </div>\n </Frame>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement } from \"react\";\nimport { useBlockKitContext } from \"../context.js\";\nimport { InteractiveElement } from \"../elements/Elements.js\";\nimport { discriminator, fallbackLabel, isRecord } from \"../runtime.js\";\nimport { joinClassNames, styles } from \"../styles.js\";\nimport type { ActionsBlockData, BlockComponentProps, ContextActionsBlockData, InputBlockData } from \"../types.js\";\ntype FeedbackButtonsData = Extract<ContextActionsBlockData[\"elements\"][number], {\n readonly type: \"feedback_buttons\";\n}>;\ntype IconButtonData = Extract<ContextActionsBlockData[\"elements\"][number], {\n readonly type: \"icon_button\";\n}>;\nfunction hasButtonText(value: unknown): boolean {\n return isRecord(value) && isRecord(value[\"text\"]) && typeof value[\"text\"][\"text\"] === \"string\";\n}\n\n/**\n * Runtime payloads may carry context-action shapes this renderer does not\n * know; validation no longer runs before render, so gate on the full\n * feedback shape instead of assuming every non-icon entry is feedback.\n */\nfunction isFeedbackButtons(value: unknown): value is FeedbackButtonsData {\n return isRecord(value) && value[\"type\"] === \"feedback_buttons\" && hasButtonText(value[\"positive_button\"]) && hasButtonText(value[\"negative_button\"]);\n}\nfunction isIconButton(value: unknown): value is IconButtonData {\n return isRecord(value) && value[\"type\"] === \"icon_button\" && hasButtonText(value);\n}\nexport function ActionsBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<ActionsBlockData>): ReactElement {\n const sx = stylex.props(styles.block, styles.actions);\n const elements = Array.isArray(block.elements) ? block.elements : [];\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={block.block_id} data-block-type={block.type}>\n {elements.map((element, index) => <InteractiveElement blockId={block.block_id} element={element} key={`${discriminator(element) ?? \"unknown\"}-${isRecord(element) && typeof element[\"action_id\"] === \"string\" ? element[\"action_id\"] : \"action\"}-${String(index)}`} path={`${path}.elements[${String(index)}]`} />)}\n </div>;\n}\nexport function InputBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<InputBlockData>): ReactElement {\n const sx = stylex.props(styles.block, styles.inputBlock);\n const label: unknown = block.label;\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={block.block_id} data-block-type={block.type}>\n <div {...stylex.props(styles.inputLabel)}>\n {isRecord(label) && typeof label[\"text\"] === \"string\" ? label[\"text\"] : fallbackLabel(label, \"input label\")}\n {block.optional === true ? null : <span {...stylex.props(styles.required)} aria-hidden=\"true\">\n *\n </span>}\n </div>\n <InteractiveElement blockId={block.block_id} element={block.element} path={`${path}.element`} />\n {block.hint === undefined ? null : <div {...stylex.props(styles.smallText)}>\n {isRecord(block.hint) && typeof block.hint[\"text\"] === \"string\" ? block.hint[\"text\"] : fallbackLabel(block.hint, \"input hint\")}\n </div>}\n </div>;\n}\nfunction contextActionText(element: FeedbackButtonsData, polarity: \"negative\" | \"positive\"): string {\n return polarity === \"positive\" ? element.positive_button.text.text : element.negative_button.text.text;\n}\nexport function ContextActionsBlock({\n block,\n className\n}: BlockComponentProps<ContextActionsBlockData>): ReactElement {\n const {\n onAction\n } = useBlockKitContext();\n const sx = stylex.props(styles.block, styles.actions);\n const elements: unknown = block.elements;\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-id={block.block_id} data-block-type={block.type}>\n {Array.isArray(elements) ? elements.map((element, index) => {\n if (isIconButton(element)) {\n const buttonSx = stylex.props(styles.button, styles.iconButton);\n return <button {...buttonSx} aria-label={element.accessibility_label ?? element.text.text} key={`${element.type}-${element.action_id ?? \"button\"}-${String(index)}`} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n ...(block.block_id === undefined ? {} : {\n blockId: block.block_id\n }),\n ...(element.value === undefined ? {} : {\n value: element.value\n })\n });\n }\n }} title={element.text.text} type=\"button\">\n {element.icon === \"trash\" ? \"⌫\" : element.icon}\n </button>;\n }\n if (!isFeedbackButtons(element)) {\n const unhandledSx = stylex.props(styles.unhandled);\n return <div {...unhandledSx} data-unhandled-element={discriminator(element) ?? \"unknown\"} key={`unhandled-${String(index)}`}>\n {fallbackLabel(element, \"context action\")}\n </div>;\n }\n return <div {...stylex.props(styles.actions)} key={`${element.type}-${element.action_id ?? \"feedback\"}-${String(index)}`}>\n <button {...stylex.props(styles.button, styles.iconButton)} aria-label={contextActionText(element, \"positive\")} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n value: element.positive_button.value,\n ...(block.block_id === undefined ? {} : {\n blockId: block.block_id\n })\n });\n }\n }} type=\"button\">\n 👍\n </button>\n <button {...stylex.props(styles.button, styles.iconButton)} aria-label={contextActionText(element, \"negative\")} onClick={() => {\n if (element.action_id !== undefined) {\n onAction?.({\n actionId: element.action_id,\n type: element.type,\n value: element.negative_button.value,\n ...(block.block_id === undefined ? {} : {\n blockId: block.block_id\n })\n });\n }\n }} type=\"button\">\n 👎\n </button>\n </div>;\n }) : <div {...stylex.props(styles.unhandled)} data-unhandled-element=\"context_actions\">\n {fallbackLabel(block, \"context actions block\")}\n </div>}\n </div>;\n}","import * as stylex from \"@stylexjs/stylex\";\nimport type { ReactElement } from \"react\";\nimport { assertNever } from \"./assert-never.js\";\nimport { AlertBlock, CardBlock, CarouselBlock, DataTableBlock, PlanBlock, TableBlock, TaskCardBlock } from \"./blocks/AdvancedBlocks.js\";\nimport { DataVisualizationBlock } from \"./blocks/Charts.js\";\nimport { ContextBlock, DividerBlock, FileBlock, Frame, HeaderBlock, ImageBlock, MarkdownBlock, RichTextBlock, SectionBlock, VideoBlock } from \"./blocks/BasicBlocks.js\";\nimport { ActionsBlock, ContextActionsBlock, InputBlock } from \"./blocks/InteractiveBlocks.js\";\nimport { BLOCK_TYPES } from \"./constants.js\";\nimport { ImageElement } from \"./elements/Elements.js\";\nimport { blockIdentifier, discriminator, fallbackLabel, isRecord } from \"./runtime.js\";\nimport { joinClassNames, styles } from \"./styles.js\";\nimport { RichText } from \"./text/RichText.js\";\nimport type { BlockComponentProps, ContainerBlockData, RenderableBlock } from \"./types.js\";\nexport type BlockProps = BlockComponentProps<RenderableBlock>;\ninterface RuntimeBlockProps {\n readonly block: unknown;\n readonly className?: string | undefined;\n readonly path?: string | undefined;\n}\nconst BLOCK_TYPE_SET: ReadonlySet<string> = new Set(BLOCK_TYPES);\nfunction isKnownBlock(value: unknown): value is RenderableBlock {\n const type = discriminator(value);\n return type !== undefined && BLOCK_TYPE_SET.has(type);\n}\nexport function RuntimeBlock({\n block,\n className,\n path = \"block\"\n}: RuntimeBlockProps): ReactElement {\n const runtimeType = discriminator(block);\n if (!isKnownBlock(block)) {\n const sx = stylex.props(styles.block, styles.unhandled);\n return <div {...sx} className={joinClassNames(sx.className, className)} data-block-type={runtimeType ?? \"unknown\"} data-unhandled-block role=\"note\">\n {fallbackLabel(block, \"Slack block\")}\n </div>;\n }\n switch (block.type) {\n case \"actions\":\n return <ActionsBlock block={block} className={className} path={path} />;\n case \"alert\":\n return <AlertBlock block={block} className={className} path={path} />;\n case \"card\":\n return <CardBlock block={block} className={className} path={path} />;\n case \"carousel\":\n return <CarouselBlock block={block} className={className} path={path} />;\n case \"container\":\n return <ContainerBlock block={block} className={className} path={path} />;\n case \"context\":\n return <ContextBlock block={block} className={className} path={path} />;\n case \"context_actions\":\n return <ContextActionsBlock block={block} className={className} path={path} />;\n case \"data_table\":\n return <DataTableBlock block={block} className={className} path={path} />;\n case \"data_visualization\":\n return <DataVisualizationBlock block={block} className={className} path={path} />;\n case \"divider\":\n return <DividerBlock block={block} className={className} path={path} />;\n case \"file\":\n return <FileBlock block={block} className={className} path={path} />;\n case \"header\":\n return <HeaderBlock block={block} className={className} path={path} />;\n case \"image\":\n return <ImageBlock block={block} className={className} path={path} />;\n case \"input\":\n return <InputBlock block={block} className={className} path={path} />;\n case \"markdown\":\n return <MarkdownBlock block={block} className={className} path={path} />;\n case \"plan\":\n return <PlanBlock block={block} className={className} path={path} />;\n case \"rich_text\":\n return <RichTextBlock block={block} className={className} path={path} />;\n case \"section\":\n return <SectionBlock block={block} className={className} path={path} />;\n case \"table\":\n return <TableBlock block={block} className={className} path={path} />;\n case \"task_card\":\n return <TaskCardBlock block={block} className={className} path={path} />;\n case \"video\":\n return <VideoBlock block={block} className={className} path={path} />;\n default:\n return assertNever(block);\n }\n}\nexport function Block(props: BlockProps): ReactElement {\n return <RuntimeBlock {...props} />;\n}\n\n// ContainerBlock lives beside the dispatch (not in AdvancedBlocks) because its\n// legal children re-enter RuntimeBlock — anywhere else would be a cycle.\n\nconst CONTAINER_CHILD_TYPES = {\n actions: true,\n context: true,\n divider: true,\n file: true,\n header: true,\n image: true,\n input: true,\n rich_text: true,\n section: true,\n table: true,\n video: true\n} as const satisfies Readonly<Record<ContainerBlockData[\"child_blocks\"][number][\"type\"], true>>;\nfunction isContainerChildBlock(value: unknown): value is ContainerBlockData[\"child_blocks\"][number] {\n const type = discriminator(value);\n return type !== undefined && type in CONTAINER_CHILD_TYPES;\n}\nfunction ContainerHeaderContents({\n block,\n path\n}: {\n readonly block: ContainerBlockData;\n readonly path: string;\n}): ReactElement {\n const title: unknown = block.title;\n const subtitle: unknown = block.subtitle;\n return <>\n {block.icon === undefined ? null : <ImageElement element={block.icon} variant=\"cardIcon\" />}\n <div>\n {block.rich_text_title === undefined ? block.title === undefined ? null : <strong>\n {isRecord(title) && typeof title[\"text\"] === \"string\" ? title[\"text\"] : fallbackLabel(title, \"container title\")}\n </strong> : <RichText block={block.rich_text_title} path={`${path}.rich_text_title`} />}\n {block.subtitle === undefined ? null : <div {...stylex.props(styles.smallText)}>\n {isRecord(subtitle) && typeof subtitle[\"text\"] === \"string\" ? subtitle[\"text\"] : fallbackLabel(subtitle, \"container subtitle\")}\n </div>}\n </div>\n </>;\n}\nfunction ContainerBody({\n block,\n path\n}: {\n readonly block: ContainerBlockData;\n readonly path: string;\n}): ReactElement {\n const children: unknown = block.child_blocks;\n return <div {...stylex.props(styles.containerBody)}>\n {Array.isArray(children) ? children.map((child, index) => isContainerChildBlock(child) ? <RuntimeBlock block={child} key={`${discriminator(child) ?? \"unknown\"}-${blockIdentifier(child) ?? \"block\"}-${String(index)}`} path={`${path}.child_blocks[${String(index)}]`} /> : <div {...stylex.props(styles.unhandled)} data-block-type={discriminator(child) ?? \"unknown\"} data-unhandled-block key={`unknown-${String(index)}`}>\n {fallbackLabel(child, \"Slack block\")}\n </div>) : null}\n </div>;\n}\nexport function ContainerBlock({\n block,\n className,\n path = \"block\"\n}: BlockComponentProps<ContainerBlockData>): ReactElement {\n return <Frame blockId={block.block_id} blockType={block.type} className={className}>\n {block.is_collapsible === true ? <details {...stylex.props(styles.container)} open={block.default_collapsed !== true}>\n <summary {...stylex.props(styles.containerHeader, block.has_header_divider === true && styles.containerHeaderDivider)}>\n <ContainerHeaderContents block={block} path={path} />\n </summary>\n <ContainerBody block={block} path={path} />\n </details> : <div {...stylex.props(styles.container)}>\n <div {...stylex.props(styles.containerHeader, block.has_header_divider === true && styles.containerHeaderDivider)}>\n <ContainerHeaderContents block={block} path={path} />\n </div>\n <ContainerBody block={block} path={path} />\n </div>}\n </Frame>;\n}","export type BlockKitInvariantCode =\n | \"invalid_json\"\n | \"invalid_type\"\n | \"missing_field\"\n | \"invalid_value\"\n | \"limit_exceeded\"\n | \"surface_mismatch\"\n | \"duplicate_id\"\n | \"unsupported_block\"\n | \"unsupported_element\";\n\nexport interface BlockKitInvariantDetails {\n readonly code: BlockKitInvariantCode;\n readonly path: string;\n}\n\nexport class BlockKitInvariantError extends Error {\n readonly code: BlockKitInvariantCode;\n readonly path: string;\n override readonly name: string;\n\n constructor(message: string, details: BlockKitInvariantDetails) {\n super(`${details.path}: ${message}`);\n this.code = details.code;\n this.path = details.path;\n this.name = \"BlockKitInvariantError\";\n }\n}\n","import * as stylex from \"@stylexjs/stylex\";\nimport { useMemo, type ReactElement } from \"react\";\nimport { RuntimeBlock } from \"./Block.js\";\nimport { BlockKitProvider } from \"./context.js\";\nimport { BlockKitInvariantError } from \"./errors.js\";\nimport { blockIdentifier, discriminator, isRecord } from \"./runtime.js\";\nimport { joinClassNames, styles } from \"./styles.js\";\nimport { darkTheme, lightTheme } from \"./tokens.stylex.js\";\nimport type { BlockKitAction, BlockKitInput, BlockKitResolvers, BlockKitSurface, BlockKitTheme } from \"./types.js\";\ninterface RenderInput {\n readonly blockListPath: string;\n readonly blocks: readonly unknown[];\n}\nfunction parseRenderInput(input: BlockKitInput): RenderInput {\n let value: unknown = input;\n if (typeof input === \"string\") {\n try {\n value = JSON.parse(input) as unknown;\n } catch {\n throw new BlockKitInvariantError(\"data: expected valid JSON\", {\n code: \"invalid_json\",\n path: \"data\"\n });\n }\n }\n if (Array.isArray(value)) {\n return {\n blockListPath: \"data\",\n blocks: value\n };\n }\n if (isRecord(value) && Array.isArray(value[\"blocks\"])) {\n return {\n blockListPath: \"data.blocks\",\n blocks: value[\"blocks\"]\n };\n }\n return {\n blockListPath: \"data\",\n blocks: [value]\n };\n}\nexport interface BlockKitProps {\n readonly \"aria-label\"?: string | undefined;\n readonly className?: string | undefined;\n readonly data: BlockKitInput;\n readonly onAction?: ((action: BlockKitAction) => void) | undefined;\n readonly resolvers?: BlockKitResolvers | undefined;\n readonly surface?: BlockKitSurface | undefined;\n readonly theme?: BlockKitTheme | undefined;\n}\nexport function BlockKit({\n \"aria-label\": ariaLabel = \"Slack Block Kit preview\",\n className,\n data,\n onAction,\n resolvers,\n surface = \"message\",\n theme = \"light\"\n}: BlockKitProps): ReactElement {\n const parsed = useMemo(() => parseRenderInput(data), [data]);\n const sx = stylex.props(theme === \"dark\" ? darkTheme : lightTheme, styles.root, theme === \"dark\" ? styles.rootDark : styles.rootLight);\n return <BlockKitProvider onAction={onAction} resolvers={resolvers} surface={surface}>\n <div {...sx} aria-label={ariaLabel} className={joinClassNames(sx.className, className)} data-block-kit-root data-surface={surface} data-theme={theme} role=\"article\">\n {parsed.blocks.map((block, index) => <RuntimeBlock block={block} key={`${discriminator(block) ?? \"unknown\"}-${blockIdentifier(block) ?? \"block\"}-${String(index)}`} path={`${parsed.blockListPath}[${String(index)}]`} />)}\n </div>\n </BlockKitProvider>;\n}","import {\n ACTION_ELEMENTS_MAX,\n ACTION_ID_MAX_CHARS,\n ALERT_TEXT_MAX_CHARS,\n BLOCK_ID_MAX_CHARS,\n BUTTON_TEXT_MAX_CHARS,\n BUTTON_URL_MAX_CHARS,\n BUTTON_VALUE_MAX_CHARS,\n CARD_ACTIONS_MAX,\n CARD_BODY_MAX_CHARS,\n CARD_TITLE_MAX_CHARS,\n CAROUSEL_CARDS_MAX,\n CHART_AXIS_LABEL_MAX_CHARS,\n CHART_LABEL_MAX_CHARS,\n CHART_POINTS_MAX,\n CHART_SEGMENTS_MAX,\n CHART_SERIES_MAX,\n CHART_TITLE_MAX_CHARS,\n CONTAINER_CHILDREN_MAX,\n CONTAINER_TITLE_MAX_CHARS,\n CONTEXT_ACTION_ELEMENTS_MAX,\n CONTEXT_ELEMENTS_MAX,\n DATA_TABLE_MAX_CHARS,\n DATA_TABLE_MAX_ROWS,\n DATA_TABLE_PAGE_SIZE_MAX,\n HEADER_LEVEL_MAX,\n HEADER_TEXT_MAX_CHARS,\n IMAGE_ALT_MAX_CHARS,\n IMAGE_TITLE_MAX_CHARS,\n IMAGE_URL_MAX_CHARS,\n MARKDOWN_CUMULATIVE_MAX_CHARS,\n MESSAGE_MAX_BLOCKS,\n RICH_TEXT_LIST_INDENT_MAX,\n SECTION_FIELD_MAX_CHARS,\n SECTION_FIELDS_MAX,\n SECTION_TEXT_MAX_CHARS,\n TABLE_MAX_CHARS,\n TABLE_MAX_COLUMNS,\n TABLE_MAX_ROWS,\n TEXT_OBJECT_MAX_CHARS,\n VIEW_MAX_BLOCKS,\n} from \"./constants.js\";\nimport { BlockKitInvariantError } from \"./errors.js\";\nimport type { BlockKitInvariantCode } from \"./errors.js\";\nimport { isRecord } from \"./runtime.js\";\nimport type { UnknownRecord } from \"./runtime.js\";\nimport type {\n BlockKitData,\n BlockKitInput,\n BlockKitPayload,\n BlockKitSurface,\n RenderableBlock,\n} from \"./types.js\";\n\ninterface StringRules {\n readonly allowEmpty?: boolean;\n readonly max?: number;\n}\n\ninterface NumberRules {\n readonly integer?: boolean;\n readonly max?: number;\n readonly min?: number;\n}\n\nfunction fail(code: BlockKitInvariantCode, path: string, message: string): never {\n throw new BlockKitInvariantError(message, { code, path });\n}\n\nfunction invariant(\n condition: boolean,\n code: BlockKitInvariantCode,\n path: string,\n message: string,\n): asserts condition {\n if (!condition) {\n fail(code, path, message);\n }\n}\n\nfunction assertRecord(value: unknown, path: string): asserts value is UnknownRecord {\n invariant(isRecord(value), \"invalid_type\", path, \"expected an object\");\n}\n\nfunction assertArray(value: unknown, path: string): asserts value is readonly unknown[] {\n invariant(Array.isArray(value), \"invalid_type\", path, \"expected an array\");\n}\n\nfunction assertString(\n value: unknown,\n path: string,\n rules: StringRules = {},\n): asserts value is string {\n invariant(typeof value === \"string\", \"invalid_type\", path, \"expected a string\");\n if (rules.allowEmpty !== true) {\n invariant(value.length > 0, \"invalid_value\", path, \"must not be empty\");\n }\n if (rules.max !== undefined) {\n invariant(\n value.length <= rules.max,\n \"limit_exceeded\",\n path,\n `must contain at most ${String(rules.max)} characters`,\n );\n }\n}\n\nfunction assertOptionalString(value: unknown, path: string, rules: StringRules = {}): void {\n if (value !== undefined) {\n assertString(value, path, rules);\n }\n}\n\nfunction assertNumber(\n value: unknown,\n path: string,\n rules: NumberRules = {},\n): asserts value is number {\n invariant(\n typeof value === \"number\" && Number.isFinite(value),\n \"invalid_type\",\n path,\n \"expected a finite number\",\n );\n if (rules.integer === true) {\n invariant(Number.isInteger(value), \"invalid_value\", path, \"expected an integer\");\n }\n if (rules.min !== undefined) {\n invariant(value >= rules.min, \"invalid_value\", path, `must be at least ${String(rules.min)}`);\n }\n if (rules.max !== undefined) {\n invariant(value <= rules.max, \"invalid_value\", path, `must be at most ${String(rules.max)}`);\n }\n}\n\nfunction assertOptionalBoolean(value: unknown, path: string): void {\n if (value !== undefined) {\n invariant(typeof value === \"boolean\", \"invalid_type\", path, \"expected a boolean\");\n }\n}\n\nfunction assertType(record: UnknownRecord, expected: string, path: string): void {\n invariant(record[\"type\"] === expected, \"invalid_value\", `${path}.type`, `expected \"${expected}\"`);\n}\n\nfunction assertOneOf(\n value: unknown,\n allowed: readonly string[],\n path: string,\n): asserts value is string {\n assertString(value, path);\n invariant(\n allowed.includes(value),\n \"invalid_value\",\n path,\n `expected one of: ${allowed.join(\", \")}`,\n );\n}\n\nfunction assertBlockBase(record: UnknownRecord, path: string): void {\n assertString(record[\"type\"], `${path}.type`);\n assertOptionalString(record[\"block_id\"], `${path}.block_id`, { max: BLOCK_ID_MAX_CHARS });\n}\n\nfunction assertTextObject(value: unknown, path: string, max = TEXT_OBJECT_MAX_CHARS): void {\n assertRecord(value, path);\n assertOneOf(value[\"type\"], [\"plain_text\", \"mrkdwn\"], `${path}.type`);\n assertString(value[\"text\"], `${path}.text`, { max });\n if (value[\"type\"] === \"plain_text\") {\n assertOptionalBoolean(value[\"emoji\"], `${path}.emoji`);\n invariant(\n value[\"verbatim\"] === undefined,\n \"invalid_value\",\n `${path}.verbatim`,\n \"verbatim is only legal on mrkdwn text\",\n );\n } else {\n assertOptionalBoolean(value[\"verbatim\"], `${path}.verbatim`);\n invariant(\n value[\"emoji\"] === undefined,\n \"invalid_value\",\n `${path}.emoji`,\n \"emoji is only legal on plain_text\",\n );\n }\n}\n\nexport function assertTextObjectData(\n value: unknown,\n path: string = \"text\",\n max: number = TEXT_OBJECT_MAX_CHARS,\n): void {\n assertTextObject(value, path, max);\n}\n\nfunction assertPlainText(value: unknown, path: string, max = TEXT_OBJECT_MAX_CHARS): void {\n assertTextObject(value, path, max);\n invariant(\n isRecord(value) && value[\"type\"] === \"plain_text\",\n \"invalid_value\",\n `${path}.type`,\n 'expected \"plain_text\"',\n );\n}\n\nfunction assertSlackFile(value: unknown, path: string): void {\n assertRecord(value, path);\n const hasId = value[\"id\"] !== undefined;\n const hasUrl = value[\"url\"] !== undefined;\n invariant(hasId !== hasUrl, \"invalid_value\", path, \"must contain exactly one of id or url\");\n if (hasId) {\n assertString(value[\"id\"], `${path}.id`);\n }\n if (hasUrl) {\n assertString(value[\"url\"], `${path}.url`, { max: IMAGE_URL_MAX_CHARS });\n }\n}\n\nfunction assertImage(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"image\", path);\n assertString(value[\"alt_text\"], `${path}.alt_text`, { max: IMAGE_ALT_MAX_CHARS });\n const hasUrl = value[\"image_url\"] !== undefined;\n const hasFile = value[\"slack_file\"] !== undefined;\n invariant(\n hasUrl !== hasFile,\n \"invalid_value\",\n path,\n \"must contain exactly one of image_url or slack_file\",\n );\n if (hasUrl) {\n assertString(value[\"image_url\"], `${path}.image_url`, { max: IMAGE_URL_MAX_CHARS });\n }\n if (hasFile) {\n assertSlackFile(value[\"slack_file\"], `${path}.slack_file`);\n }\n}\n\nexport function assertImageElementData(value: unknown, path: string = \"element\"): void {\n assertImage(value, path);\n}\n\nfunction assertOption(value: unknown, path: string): void {\n assertRecord(value, path);\n assertTextObject(value[\"text\"], `${path}.text`, BUTTON_TEXT_MAX_CHARS);\n assertOptionalString(value[\"value\"], `${path}.value`, { max: BUTTON_TEXT_MAX_CHARS });\n assertOptionalString(value[\"url\"], `${path}.url`, { max: BUTTON_URL_MAX_CHARS });\n if (value[\"description\"] !== undefined) {\n assertPlainText(value[\"description\"], `${path}.description`, BUTTON_TEXT_MAX_CHARS);\n }\n}\n\nfunction assertOptions(value: unknown, path: string, max: number): void {\n assertArray(value, path);\n invariant(value.length > 0, \"missing_field\", path, \"must contain at least one option\");\n invariant(\n value.length <= max,\n \"limit_exceeded\",\n path,\n `must contain at most ${String(max)} options`,\n );\n value.forEach((option, index) => {\n assertOption(option, `${path}[${String(index)}]`);\n });\n}\n\nfunction assertActionMetadata(record: UnknownRecord, path: string): void {\n assertOptionalString(record[\"action_id\"], `${path}.action_id`, { max: ACTION_ID_MAX_CHARS });\n}\n\nfunction assertPlaceholder(record: UnknownRecord, path: string): void {\n if (record[\"placeholder\"] !== undefined) {\n assertPlainText(record[\"placeholder\"], `${path}.placeholder`, HEADER_TEXT_MAX_CHARS);\n }\n}\n\nfunction assertButton(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"button\", path);\n assertActionMetadata(value, path);\n assertPlainText(value[\"text\"], `${path}.text`, BUTTON_TEXT_MAX_CHARS);\n assertOptionalString(value[\"url\"], `${path}.url`, { max: BUTTON_URL_MAX_CHARS });\n assertOptionalString(value[\"value\"], `${path}.value`, { max: BUTTON_VALUE_MAX_CHARS });\n assertOptionalString(value[\"accessibility_label\"], `${path}.accessibility_label`, {\n max: BUTTON_TEXT_MAX_CHARS,\n });\n if (value[\"style\"] !== undefined) {\n assertOneOf(value[\"style\"], [\"primary\", \"danger\"], `${path}.style`);\n }\n}\n\nfunction assertStaticSelect(record: UnknownRecord, path: string): void {\n const hasOptions = record[\"options\"] !== undefined;\n const hasGroups = record[\"option_groups\"] !== undefined;\n invariant(\n hasOptions !== hasGroups,\n \"invalid_value\",\n path,\n \"must contain exactly one of options or option_groups\",\n );\n if (hasOptions) {\n assertOptions(record[\"options\"], `${path}.options`, 100);\n }\n if (hasGroups) {\n assertArray(record[\"option_groups\"], `${path}.option_groups`);\n invariant(\n record[\"option_groups\"].length <= 100,\n \"limit_exceeded\",\n `${path}.option_groups`,\n \"must contain at most 100 groups\",\n );\n record[\"option_groups\"].forEach((group, index) => {\n const groupPath = `${path}.option_groups[${String(index)}]`;\n assertRecord(group, groupPath);\n assertPlainText(group[\"label\"], `${groupPath}.label`, BUTTON_TEXT_MAX_CHARS);\n assertOptions(group[\"options\"], `${groupPath}.options`, 100);\n });\n }\n}\n\nfunction assertInteractiveElement(value: unknown, path: string): void {\n assertRecord(value, path);\n assertString(value[\"type\"], `${path}.type`);\n assertActionMetadata(value, path);\n assertPlaceholder(value, path);\n\n switch (value[\"type\"]) {\n case \"button\":\n assertButton(value, path);\n return;\n case \"checkboxes\":\n case \"radio_buttons\":\n assertOptions(value[\"options\"], `${path}.options`, 10);\n return;\n case \"overflow\":\n assertOptions(value[\"options\"], `${path}.options`, 5);\n return;\n case \"static_select\":\n case \"multi_static_select\":\n assertStaticSelect(value, path);\n return;\n case \"external_select\":\n case \"multi_external_select\":\n if (value[\"min_query_length\"] !== undefined) {\n assertNumber(value[\"min_query_length\"], `${path}.min_query_length`, {\n integer: true,\n min: 0,\n });\n }\n return;\n case \"users_select\":\n case \"multi_users_select\":\n case \"conversations_select\":\n case \"multi_conversations_select\":\n case \"channels_select\":\n case \"multi_channels_select\":\n return;\n case \"datepicker\":\n assertOptionalString(value[\"initial_date\"], `${path}.initial_date`);\n return;\n case \"datetimepicker\":\n if (value[\"initial_date_time\"] !== undefined) {\n assertNumber(value[\"initial_date_time\"], `${path}.initial_date_time`, {\n integer: true,\n min: 0,\n });\n }\n return;\n case \"timepicker\":\n assertOptionalString(value[\"initial_time\"], `${path}.initial_time`);\n assertOptionalString(value[\"timezone\"], `${path}.timezone`);\n return;\n case \"plain_text_input\":\n case \"email_text_input\":\n case \"url_text_input\":\n case \"number_input\":\n assertOptionalString(value[\"initial_value\"], `${path}.initial_value`, {\n allowEmpty: true,\n });\n if (value[\"type\"] === \"plain_text_input\") {\n assertOptionalBoolean(value[\"multiline\"], `${path}.multiline`);\n }\n if (value[\"type\"] === \"number_input\") {\n invariant(\n typeof value[\"is_decimal_allowed\"] === \"boolean\",\n \"missing_field\",\n `${path}.is_decimal_allowed`,\n \"expected a boolean\",\n );\n }\n return;\n case \"rich_text_input\":\n if (value[\"initial_value\"] !== undefined) {\n assertRichTextBlock(value[\"initial_value\"], `${path}.initial_value`);\n }\n return;\n case \"file_input\":\n if (value[\"max_files\"] !== undefined) {\n assertNumber(value[\"max_files\"], `${path}.max_files`, {\n integer: true,\n min: 1,\n max: 10,\n });\n }\n return;\n case \"workflow_button\":\n assertPlainText(value[\"text\"], `${path}.text`, BUTTON_TEXT_MAX_CHARS);\n assertRecord(value[\"workflow\"], `${path}.workflow`);\n assertRecord(value[\"workflow\"][\"trigger\"], `${path}.workflow.trigger`);\n assertString(value[\"workflow\"][\"trigger\"][\"url\"], `${path}.workflow.trigger.url`);\n return;\n default:\n fail(\"unsupported_element\", `${path}.type`, `unsupported element \"${value[\"type\"]}\"`);\n }\n}\n\nexport function assertInteractiveElementData(value: unknown, path: string = \"element\"): void {\n assertInteractiveElement(value, path);\n}\n\nfunction assertRichTextStyle(value: unknown, path: string): void {\n if (value === undefined) {\n return;\n }\n assertRecord(value, path);\n for (const key of [\"bold\", \"code\", \"italic\", \"strike\", \"underline\"]) {\n assertOptionalBoolean(value[key], `${path}.${key}`);\n }\n}\n\nfunction assertRichTextInline(value: unknown, path: string): void {\n assertRecord(value, path);\n assertString(value[\"type\"], `${path}.type`);\n assertRichTextStyle(value[\"style\"], `${path}.style`);\n\n switch (value[\"type\"]) {\n case \"text\":\n assertString(value[\"text\"], `${path}.text`, { allowEmpty: true });\n return;\n case \"link\":\n assertString(value[\"url\"], `${path}.url`);\n assertOptionalString(value[\"text\"], `${path}.text`, { allowEmpty: true });\n return;\n case \"emoji\":\n assertString(value[\"name\"], `${path}.name`);\n assertOptionalString(value[\"unicode\"], `${path}.unicode`);\n return;\n case \"user\":\n assertString(value[\"user_id\"], `${path}.user_id`);\n return;\n case \"usergroup\":\n assertString(value[\"usergroup_id\"], `${path}.usergroup_id`);\n return;\n case \"channel\":\n assertString(value[\"channel_id\"], `${path}.channel_id`);\n return;\n case \"team\":\n assertString(value[\"team_id\"], `${path}.team_id`);\n return;\n case \"broadcast\":\n assertOneOf(value[\"range\"], [\"here\", \"channel\", \"everyone\"], `${path}.range`);\n return;\n case \"date\":\n assertNumber(value[\"timestamp\"], `${path}.timestamp`, { integer: true, min: 0 });\n assertString(value[\"format\"], `${path}.format`);\n return;\n case \"color\":\n assertString(value[\"value\"], `${path}.value`);\n invariant(\n /^#[\\da-f]{6}$/i.test(value[\"value\"]),\n \"invalid_value\",\n `${path}.value`,\n \"expected a six-digit hex color\",\n );\n return;\n case \"citation\":\n assertRecord(value[\"details\"], `${path}.details`);\n assertOptionalString(value[\"url\"], `${path}.url`);\n assertOptionalString(value[\"text\"], `${path}.text`, { allowEmpty: true });\n return;\n case \"attachment_mention\":\n case \"canvas\":\n case \"canvas_message_unfurl\":\n case \"canvas_user_mention\":\n case \"file\":\n case \"list_record\":\n case \"message_mention\":\n case \"salesforce_data_field\":\n case \"tag\":\n case \"work_object_mention\":\n case \"workflow_mention\":\n invariant(\n Object.keys(value).length > 1,\n \"missing_field\",\n path,\n `${value[\"type\"]} must contain its reference fields`,\n );\n return;\n default:\n fail(\n \"unsupported_element\",\n `${path}.type`,\n `unsupported rich text element \"${value[\"type\"]}\"`,\n );\n }\n}\n\nfunction assertRichTextInlineArray(value: unknown, path: string): void {\n assertArray(value, path);\n value.forEach((element, index) => {\n assertRichTextInline(element, `${path}[${String(index)}]`);\n });\n}\n\nfunction assertRichTextBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"rich_text\", path);\n assertBlockBase(value, path);\n assertArray(value[\"elements\"], `${path}.elements`);\n\n value[\"elements\"].forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertRecord(element, elementPath);\n assertString(element[\"type\"], `${elementPath}.type`);\n switch (element[\"type\"]) {\n case \"rich_text_section\":\n case \"rich_text_quote\":\n assertRichTextInlineArray(element[\"elements\"], `${elementPath}.elements`);\n return;\n case \"rich_text_list\":\n assertOneOf(element[\"style\"], [\"bullet\", \"ordered\"], `${elementPath}.style`);\n if (element[\"indent\"] !== undefined) {\n assertNumber(element[\"indent\"], `${elementPath}.indent`, {\n integer: true,\n min: 0,\n max: RICH_TEXT_LIST_INDENT_MAX,\n });\n }\n if (element[\"offset\"] !== undefined) {\n assertNumber(element[\"offset\"], `${elementPath}.offset`, { integer: true, min: 0 });\n }\n assertArray(element[\"elements\"], `${elementPath}.elements`);\n element[\"elements\"].forEach((section, sectionIndex) => {\n const sectionPath = `${elementPath}.elements[${String(sectionIndex)}]`;\n assertRecord(section, sectionPath);\n assertType(section, \"rich_text_section\", sectionPath);\n assertRichTextInlineArray(section[\"elements\"], `${sectionPath}.elements`);\n });\n return;\n case \"rich_text_preformatted\":\n assertArray(element[\"elements\"], `${elementPath}.elements`);\n element[\"elements\"].forEach((inline, inlineIndex) => {\n const inlinePath = `${elementPath}.elements[${String(inlineIndex)}]`;\n assertRichTextInline(inline, inlinePath);\n assertRecord(inline, inlinePath);\n invariant(\n inline[\"type\"] === \"text\" || inline[\"type\"] === \"link\",\n \"invalid_value\",\n `${inlinePath}.type`,\n \"preformatted text only accepts text or link elements\",\n );\n });\n assertOptionalString(element[\"language\"], `${elementPath}.language`);\n return;\n default:\n fail(\n \"unsupported_element\",\n `${elementPath}.type`,\n `unsupported rich text container \"${element[\"type\"]}\"`,\n );\n }\n });\n}\n\nexport function assertRichTextBlockData(value: unknown, path: string = \"block\"): void {\n assertRichTextBlock(value, path);\n}\n\nfunction assertSectionBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"section\", path);\n assertBlockBase(value, path);\n const hasText = value[\"text\"] !== undefined;\n const hasFields = value[\"fields\"] !== undefined;\n invariant(hasText || hasFields, \"missing_field\", path, \"requires text or fields\");\n if (hasText) {\n assertTextObject(value[\"text\"], `${path}.text`, SECTION_TEXT_MAX_CHARS);\n }\n if (hasFields) {\n assertArray(value[\"fields\"], `${path}.fields`);\n invariant(\n value[\"fields\"].length > 0 && value[\"fields\"].length <= SECTION_FIELDS_MAX,\n \"limit_exceeded\",\n `${path}.fields`,\n `must contain 1–${String(SECTION_FIELDS_MAX)} text objects`,\n );\n value[\"fields\"].forEach((field, index) => {\n assertTextObject(field, `${path}.fields[${String(index)}]`, SECTION_FIELD_MAX_CHARS);\n });\n }\n if (value[\"accessory\"] !== undefined) {\n assertRecord(value[\"accessory\"], `${path}.accessory`);\n if (value[\"accessory\"][\"type\"] === \"image\") {\n assertImage(value[\"accessory\"], `${path}.accessory`);\n } else {\n assertInteractiveElement(value[\"accessory\"], `${path}.accessory`);\n invariant(\n ![\n \"datetimepicker\",\n \"file_input\",\n \"plain_text_input\",\n \"email_text_input\",\n \"url_text_input\",\n \"number_input\",\n \"rich_text_input\",\n ].includes(String(value[\"accessory\"][\"type\"])),\n \"invalid_value\",\n `${path}.accessory.type`,\n \"element is not legal as a section accessory\",\n );\n }\n }\n assertOptionalBoolean(value[\"expand\"], `${path}.expand`);\n}\n\nfunction assertHeaderBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"header\", path);\n assertBlockBase(value, path);\n assertPlainText(value[\"text\"], `${path}.text`, HEADER_TEXT_MAX_CHARS);\n if (value[\"level\"] !== undefined) {\n assertNumber(value[\"level\"], `${path}.level`, {\n integer: true,\n min: 1,\n max: HEADER_LEVEL_MAX,\n });\n }\n}\n\nfunction assertImageBlock(value: unknown, path: string): void {\n assertImage(value, path);\n assertRecord(value, path);\n assertBlockBase(value, path);\n if (value[\"title\"] !== undefined) {\n assertPlainText(value[\"title\"], `${path}.title`, IMAGE_TITLE_MAX_CHARS);\n }\n}\n\nfunction assertContextBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"context\", path);\n assertBlockBase(value, path);\n assertArray(value[\"elements\"], `${path}.elements`);\n invariant(\n value[\"elements\"].length > 0 && value[\"elements\"].length <= CONTEXT_ELEMENTS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(CONTEXT_ELEMENTS_MAX)} elements`,\n );\n value[\"elements\"].forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertRecord(element, elementPath);\n if (element[\"type\"] === \"image\") {\n assertImage(element, elementPath);\n } else {\n assertTextObject(element, elementPath);\n }\n });\n}\n\nfunction assertActionsBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"actions\", path);\n assertBlockBase(value, path);\n assertArray(value[\"elements\"], `${path}.elements`);\n invariant(\n value[\"elements\"].length > 0 && value[\"elements\"].length <= ACTION_ELEMENTS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(ACTION_ELEMENTS_MAX)} elements`,\n );\n value[\"elements\"].forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertInteractiveElement(element, elementPath);\n assertRecord(element, elementPath);\n invariant(\n [\n \"button\",\n \"checkboxes\",\n \"datepicker\",\n \"datetimepicker\",\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 \"static_select\",\n \"multi_static_select\",\n \"overflow\",\n \"radio_buttons\",\n \"timepicker\",\n \"workflow_button\",\n \"rich_text_input\",\n ].includes(String(element[\"type\"])),\n \"invalid_value\",\n `${elementPath}.type`,\n \"element is not legal inside an actions block\",\n );\n });\n}\n\nfunction assertInputBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"input\", path);\n assertBlockBase(value, path);\n assertPlainText(value[\"label\"], `${path}.label`, 2000);\n if (value[\"hint\"] !== undefined) {\n assertPlainText(value[\"hint\"], `${path}.hint`, 2000);\n }\n assertOptionalBoolean(value[\"optional\"], `${path}.optional`);\n assertOptionalBoolean(value[\"dispatch_action\"], `${path}.dispatch_action`);\n assertInteractiveElement(value[\"element\"], `${path}.element`);\n assertRecord(value[\"element\"], `${path}.element`);\n invariant(\n ![\"button\", \"overflow\", \"workflow_button\", \"icon_button\", \"feedback_buttons\"].includes(\n String(value[\"element\"][\"type\"]),\n ),\n \"invalid_value\",\n `${path}.element.type`,\n \"element is not legal inside an input block\",\n );\n invariant(\n !(value[\"dispatch_action\"] === true && value[\"element\"][\"type\"] === \"file_input\"),\n \"invalid_value\",\n `${path}.dispatch_action`,\n \"dispatch_action is incompatible with file_input\",\n );\n}\n\nfunction tableCellTextLength(value: unknown): number {\n if (!isRecord(value)) {\n return 0;\n }\n if (value[\"type\"] === \"raw_text\") {\n return typeof value[\"text\"] === \"string\" ? value[\"text\"].length : 0;\n }\n if (value[\"type\"] === \"raw_number\") {\n if (typeof value[\"text\"] === \"string\") {\n return value[\"text\"].length;\n }\n return typeof value[\"value\"] === \"number\" ? String(value[\"value\"]).length : 0;\n }\n if (value[\"type\"] === \"rich_text\" && Array.isArray(value[\"elements\"])) {\n let count = 0;\n for (const container of value[\"elements\"]) {\n if (!isRecord(container) || !Array.isArray(container[\"elements\"])) {\n continue;\n }\n for (const inline of container[\"elements\"]) {\n if (isRecord(inline)) {\n if (typeof inline[\"text\"] === \"string\") {\n count += inline[\"text\"].length;\n } else if (typeof inline[\"url\"] === \"string\") {\n count += inline[\"url\"].length;\n }\n }\n }\n }\n return count;\n }\n return 0;\n}\n\nfunction assertTableCell(value: unknown, path: string, allowRichText: boolean): void {\n assertRecord(value, path);\n assertString(value[\"type\"], `${path}.type`);\n switch (value[\"type\"]) {\n case \"raw_text\":\n assertString(value[\"text\"], `${path}.text`);\n return;\n case \"raw_number\":\n assertNumber(value[\"value\"], `${path}.value`);\n assertOptionalString(value[\"text\"], `${path}.text`);\n return;\n case \"rich_text\":\n invariant(allowRichText, \"invalid_value\", path, \"rich_text is not legal in this row\");\n assertRichTextBlock(value, path);\n return;\n default:\n fail(\"invalid_value\", `${path}.type`, `unsupported table cell \"${value[\"type\"]}\"`);\n }\n}\n\nfunction assertRows(\n value: unknown,\n path: string,\n maxRows: number,\n maxChars: number,\n richHeader: boolean,\n): number {\n assertArray(value, path);\n invariant(value.length > 0, \"missing_field\", path, \"must contain at least one row\");\n invariant(\n value.length <= maxRows,\n \"limit_exceeded\",\n path,\n `must contain at most ${String(maxRows)} rows`,\n );\n let columnCount: number | undefined;\n let characterCount = 0;\n value.forEach((row, rowIndex) => {\n const rowPath = `${path}[${String(rowIndex)}]`;\n assertArray(row, rowPath);\n invariant(\n row.length > 0 && row.length <= TABLE_MAX_COLUMNS,\n \"limit_exceeded\",\n rowPath,\n `must contain 1–${String(TABLE_MAX_COLUMNS)} cells`,\n );\n if (columnCount === undefined) {\n columnCount = row.length;\n } else {\n invariant(\n row.length === columnCount,\n \"invalid_value\",\n rowPath,\n \"all table rows must contain the same number of cells\",\n );\n }\n row.forEach((cell, columnIndex) => {\n assertTableCell(cell, `${rowPath}[${String(columnIndex)}]`, richHeader || rowIndex !== 0);\n characterCount += tableCellTextLength(cell);\n });\n });\n invariant(\n characterCount <= maxChars,\n \"limit_exceeded\",\n path,\n `cell content must contain at most ${String(maxChars)} characters`,\n );\n return columnCount ?? 0;\n}\n\nfunction assertTableBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"table\", path);\n assertBlockBase(value, path);\n assertRows(value[\"rows\"], `${path}.rows`, TABLE_MAX_ROWS, TABLE_MAX_CHARS, true);\n if (value[\"column_settings\"] !== undefined) {\n assertArray(value[\"column_settings\"], `${path}.column_settings`);\n invariant(\n value[\"column_settings\"].length <= TABLE_MAX_COLUMNS,\n \"limit_exceeded\",\n `${path}.column_settings`,\n `must contain at most ${String(TABLE_MAX_COLUMNS)} entries`,\n );\n value[\"column_settings\"].forEach((setting, index) => {\n if (setting === null) {\n return;\n }\n const settingPath = `${path}.column_settings[${String(index)}]`;\n assertRecord(setting, settingPath);\n if (setting[\"align\"] !== undefined) {\n assertOneOf(setting[\"align\"], [\"left\", \"center\", \"right\"], `${settingPath}.align`);\n }\n assertOptionalBoolean(setting[\"is_wrapped\"], `${settingPath}.is_wrapped`);\n });\n }\n}\n\nfunction assertDataTableBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"data_table\", path);\n assertBlockBase(value, path);\n assertString(value[\"caption\"], `${path}.caption`);\n const columnCount = assertRows(\n value[\"rows\"],\n `${path}.rows`,\n DATA_TABLE_MAX_ROWS,\n DATA_TABLE_MAX_CHARS,\n false,\n );\n assertArray(value[\"rows\"], `${path}.rows`);\n invariant(\n value[\"rows\"].length >= 2,\n \"invalid_value\",\n `${path}.rows`,\n \"requires a header row and at least one data row\",\n );\n if (value[\"page_size\"] !== undefined) {\n assertNumber(value[\"page_size\"], `${path}.page_size`, {\n integer: true,\n min: 1,\n max: DATA_TABLE_PAGE_SIZE_MAX,\n });\n }\n if (value[\"row_header_column_index\"] !== undefined) {\n assertNumber(value[\"row_header_column_index\"], `${path}.row_header_column_index`, {\n integer: true,\n min: 0,\n max: columnCount - 1,\n });\n }\n}\n\nfunction assertChartBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"data_visualization\", path);\n assertBlockBase(value, path);\n assertString(value[\"title\"], `${path}.title`, { max: CHART_TITLE_MAX_CHARS });\n assertRecord(value[\"chart\"], `${path}.chart`);\n assertString(value[\"chart\"][\"type\"], `${path}.chart.type`);\n if (value[\"chart\"][\"type\"] === \"pie\") {\n assertArray(value[\"chart\"][\"segments\"], `${path}.chart.segments`);\n invariant(\n value[\"chart\"][\"segments\"].length > 0 &&\n value[\"chart\"][\"segments\"].length <= CHART_SEGMENTS_MAX,\n \"limit_exceeded\",\n `${path}.chart.segments`,\n `must contain 1–${String(CHART_SEGMENTS_MAX)} segments`,\n );\n value[\"chart\"][\"segments\"].forEach((segment, index) => {\n const segmentPath = `${path}.chart.segments[${String(index)}]`;\n assertRecord(segment, segmentPath);\n assertString(segment[\"label\"], `${segmentPath}.label`, { max: CHART_LABEL_MAX_CHARS });\n assertNumber(segment[\"value\"], `${segmentPath}.value`, { min: Number.EPSILON });\n });\n return;\n }\n assertOneOf(value[\"chart\"][\"type\"], [\"bar\", \"area\", \"line\"], `${path}.chart.type`);\n assertArray(value[\"chart\"][\"series\"], `${path}.chart.series`);\n invariant(\n value[\"chart\"][\"series\"].length > 0 && value[\"chart\"][\"series\"].length <= CHART_SERIES_MAX,\n \"limit_exceeded\",\n `${path}.chart.series`,\n `must contain 1–${String(CHART_SERIES_MAX)} series`,\n );\n assertRecord(value[\"chart\"][\"axis_config\"], `${path}.chart.axis_config`);\n assertArray(value[\"chart\"][\"axis_config\"][\"categories\"], `${path}.chart.axis_config.categories`);\n invariant(\n value[\"chart\"][\"axis_config\"][\"categories\"].length > 0 &&\n value[\"chart\"][\"axis_config\"][\"categories\"].length <= CHART_POINTS_MAX,\n \"limit_exceeded\",\n `${path}.chart.axis_config.categories`,\n `must contain 1–${String(CHART_POINTS_MAX)} categories`,\n );\n const categories = new Set<string>();\n value[\"chart\"][\"axis_config\"][\"categories\"].forEach((category, index) => {\n const categoryPath = `${path}.chart.axis_config.categories[${String(index)}]`;\n assertString(category, categoryPath, {\n max: CHART_LABEL_MAX_CHARS,\n });\n invariant(\n !categories.has(category),\n \"invalid_value\",\n categoryPath,\n \"axis categories must be unique\",\n );\n categories.add(category);\n });\n assertOptionalString(\n value[\"chart\"][\"axis_config\"][\"x_label\"],\n `${path}.chart.axis_config.x_label`,\n {\n max: CHART_AXIS_LABEL_MAX_CHARS,\n },\n );\n assertOptionalString(\n value[\"chart\"][\"axis_config\"][\"y_label\"],\n `${path}.chart.axis_config.y_label`,\n {\n max: CHART_AXIS_LABEL_MAX_CHARS,\n },\n );\n const names = new Set<string>();\n value[\"chart\"][\"series\"].forEach((series, seriesIndex) => {\n const seriesPath = `${path}.chart.series[${String(seriesIndex)}]`;\n assertRecord(series, seriesPath);\n assertString(series[\"name\"], `${seriesPath}.name`, { max: CHART_LABEL_MAX_CHARS });\n invariant(\n !names.has(series[\"name\"]),\n \"duplicate_id\",\n `${seriesPath}.name`,\n \"series names must be unique\",\n );\n names.add(series[\"name\"]);\n assertArray(series[\"data\"], `${seriesPath}.data`);\n invariant(\n series[\"data\"].length > 0 && series[\"data\"].length <= CHART_POINTS_MAX,\n \"limit_exceeded\",\n `${seriesPath}.data`,\n `must contain 1–${String(CHART_POINTS_MAX)} points`,\n );\n invariant(\n series[\"data\"].length === categories.size,\n \"invalid_value\",\n `${seriesPath}.data`,\n \"must provide exactly one point per axis category\",\n );\n const pointLabels = new Set<string>();\n series[\"data\"].forEach((point, pointIndex) => {\n const pointPath = `${seriesPath}.data[${String(pointIndex)}]`;\n assertRecord(point, pointPath);\n assertString(point[\"label\"], `${pointPath}.label`, { max: CHART_LABEL_MAX_CHARS });\n invariant(\n categories.has(point[\"label\"]),\n \"invalid_value\",\n `${pointPath}.label`,\n \"must match an axis category\",\n );\n invariant(\n !pointLabels.has(point[\"label\"]),\n \"invalid_value\",\n `${pointPath}.label`,\n \"point labels must be unique within a series\",\n );\n pointLabels.add(point[\"label\"]);\n assertNumber(point[\"value\"], `${pointPath}.value`);\n });\n });\n}\n\nfunction assertCardBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"card\", path);\n assertBlockBase(value, path);\n invariant(\n value[\"hero_image\"] !== undefined ||\n value[\"title\"] !== undefined ||\n value[\"actions\"] !== undefined ||\n value[\"body\"] !== undefined,\n \"missing_field\",\n path,\n \"requires at least one of hero_image, title, actions, or body\",\n );\n if (value[\"hero_image\"] !== undefined) {\n assertImage(value[\"hero_image\"], `${path}.hero_image`);\n }\n if (value[\"icon\"] !== undefined) {\n assertImage(value[\"icon\"], `${path}.icon`);\n }\n invariant(\n !(value[\"icon\"] !== undefined && value[\"slack_icon\"] !== undefined),\n \"invalid_value\",\n path,\n \"icon and slack_icon are mutually exclusive\",\n );\n if (value[\"slack_icon\"] !== undefined) {\n assertRecord(value[\"slack_icon\"], `${path}.slack_icon`);\n assertType(value[\"slack_icon\"], \"icon\", `${path}.slack_icon`);\n assertString(value[\"slack_icon\"][\"name\"], `${path}.slack_icon.name`);\n }\n for (const key of [\"title\", \"subtitle\"] as const) {\n if (value[key] !== undefined) {\n assertTextObject(value[key], `${path}.${key}`, CARD_TITLE_MAX_CHARS);\n }\n }\n for (const key of [\"body\", \"subtext\"] as const) {\n if (value[key] !== undefined) {\n assertTextObject(value[key], `${path}.${key}`, CARD_BODY_MAX_CHARS);\n }\n }\n if (value[\"actions\"] !== undefined) {\n assertArray(value[\"actions\"], `${path}.actions`);\n invariant(\n value[\"actions\"].length > 0 && value[\"actions\"].length <= CARD_ACTIONS_MAX,\n \"limit_exceeded\",\n `${path}.actions`,\n `must contain 1–${String(CARD_ACTIONS_MAX)} buttons`,\n );\n value[\"actions\"].forEach((action, index) => {\n assertButton(action, `${path}.actions[${String(index)}]`);\n });\n }\n}\n\nfunction assertCarouselBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"carousel\", path);\n assertBlockBase(value, path);\n assertArray(value[\"elements\"], `${path}.elements`);\n invariant(\n value[\"elements\"].length > 0 && value[\"elements\"].length <= CAROUSEL_CARDS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(CAROUSEL_CARDS_MAX)} cards`,\n );\n value[\"elements\"].forEach((card, index) => {\n assertCardBlock(card, `${path}.elements[${String(index)}]`);\n });\n}\n\nfunction assertAlertBlock(value: unknown, surface: BlockKitSurface, path: string): void {\n assertRecord(value, path);\n assertType(value, \"alert\", path);\n assertBlockBase(value, path);\n invariant(\n surface === \"modal\",\n \"surface_mismatch\",\n path,\n \"alert blocks are only legal on modal surfaces\",\n );\n assertTextObject(value[\"text\"], `${path}.text`, ALERT_TEXT_MAX_CHARS);\n if (value[\"level\"] !== undefined) {\n assertOneOf(\n value[\"level\"],\n [\"default\", \"info\", \"warning\", \"error\", \"success\"],\n `${path}.level`,\n );\n }\n}\n\nfunction assertContextActionsBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"context_actions\", path);\n assertBlockBase(value, path);\n assertArray(value[\"elements\"], `${path}.elements`);\n invariant(\n value[\"elements\"].length > 0 && value[\"elements\"].length <= CONTEXT_ACTION_ELEMENTS_MAX,\n \"limit_exceeded\",\n `${path}.elements`,\n `must contain 1–${String(CONTEXT_ACTION_ELEMENTS_MAX)} elements`,\n );\n value[\"elements\"].forEach((element, index) => {\n const elementPath = `${path}.elements[${String(index)}]`;\n assertRecord(element, elementPath);\n assertActionMetadata(element, elementPath);\n if (element[\"type\"] === \"icon_button\") {\n assertOneOf(element[\"icon\"], [\"trash\"], `${elementPath}.icon`);\n assertPlainText(element[\"text\"], `${elementPath}.text`, BUTTON_TEXT_MAX_CHARS);\n assertOptionalString(element[\"value\"], `${elementPath}.value`, {\n max: BUTTON_VALUE_MAX_CHARS,\n });\n return;\n }\n invariant(\n element[\"type\"] === \"feedback_buttons\",\n \"unsupported_element\",\n `${elementPath}.type`,\n \"context_actions only accepts icon_button or feedback_buttons\",\n );\n for (const key of [\"positive_button\", \"negative_button\"] as const) {\n const buttonPath = `${elementPath}.${key}`;\n assertRecord(element[key], buttonPath);\n assertPlainText(element[key][\"text\"], `${buttonPath}.text`, BUTTON_TEXT_MAX_CHARS);\n assertString(element[key][\"value\"], `${buttonPath}.value`, {\n max: BUTTON_VALUE_MAX_CHARS,\n });\n }\n });\n}\n\nfunction assertTaskCardBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"task_card\", path);\n assertBlockBase(value, path);\n assertString(value[\"task_id\"], `${path}.task_id`);\n assertString(value[\"title\"], `${path}.title`);\n assertOneOf(value[\"status\"], [\"pending\", \"in_progress\", \"complete\", \"error\"], `${path}.status`);\n if (value[\"details\"] !== undefined) {\n assertRichTextBlock(value[\"details\"], `${path}.details`);\n }\n if (value[\"output\"] !== undefined) {\n assertRichTextBlock(value[\"output\"], `${path}.output`);\n }\n if (value[\"sources\"] !== undefined) {\n assertArray(value[\"sources\"], `${path}.sources`);\n value[\"sources\"].forEach((source, index) => {\n const sourcePath = `${path}.sources[${String(index)}]`;\n assertRecord(source, sourcePath);\n assertType(source, \"url\", sourcePath);\n assertString(source[\"url\"], `${sourcePath}.url`);\n assertString(source[\"text\"], `${sourcePath}.text`);\n });\n }\n}\n\nfunction assertPlanBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"plan\", path);\n assertBlockBase(value, path);\n assertString(value[\"title\"], `${path}.title`);\n if (value[\"tasks\"] !== undefined) {\n assertArray(value[\"tasks\"], `${path}.tasks`);\n value[\"tasks\"].forEach((task, index) => {\n assertTaskCardBlock(task, `${path}.tasks[${String(index)}]`);\n });\n }\n}\n\nfunction assertContainerBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"container\", path);\n assertBlockBase(value, path);\n invariant(\n value[\"title\"] !== undefined || value[\"rich_text_title\"] !== undefined,\n \"missing_field\",\n path,\n \"requires title or rich_text_title\",\n );\n if (value[\"title\"] !== undefined) {\n assertPlainText(value[\"title\"], `${path}.title`, CONTAINER_TITLE_MAX_CHARS);\n }\n if (value[\"rich_text_title\"] !== undefined) {\n assertRichTextBlock(value[\"rich_text_title\"], `${path}.rich_text_title`);\n }\n if (value[\"subtitle\"] !== undefined) {\n assertPlainText(value[\"subtitle\"], `${path}.subtitle`, CONTAINER_TITLE_MAX_CHARS);\n }\n if (value[\"icon\"] !== undefined) {\n assertImage(value[\"icon\"], `${path}.icon`);\n }\n if (value[\"width\"] !== undefined) {\n assertOneOf(value[\"width\"], [\"narrow\", \"standard\", \"wide\", \"full\"], `${path}.width`);\n }\n assertOptionalBoolean(value[\"is_collapsible\"], `${path}.is_collapsible`);\n assertOptionalBoolean(value[\"default_collapsed\"], `${path}.default_collapsed`);\n assertOptionalBoolean(value[\"has_header_divider\"], `${path}.has_header_divider`);\n invariant(\n !(value[\"default_collapsed\"] === true && value[\"is_collapsible\"] !== true),\n \"invalid_value\",\n `${path}.default_collapsed`,\n \"requires is_collapsible to be true\",\n );\n assertArray(value[\"child_blocks\"], `${path}.child_blocks`);\n invariant(\n value[\"child_blocks\"].length > 0 && value[\"child_blocks\"].length <= CONTAINER_CHILDREN_MAX,\n \"limit_exceeded\",\n `${path}.child_blocks`,\n `must contain 1–${String(CONTAINER_CHILDREN_MAX)} child blocks`,\n );\n const allowed = [\n \"actions\",\n \"context\",\n \"divider\",\n \"file\",\n \"header\",\n \"image\",\n \"input\",\n \"rich_text\",\n \"section\",\n \"table\",\n \"video\",\n ];\n value[\"child_blocks\"].forEach((child, index) => {\n const childPath = `${path}.child_blocks[${String(index)}]`;\n assertRecord(child, childPath);\n assertString(child[\"type\"], `${childPath}.type`);\n invariant(\n allowed.includes(child[\"type\"]),\n \"invalid_value\",\n `${childPath}.type`,\n `\"${child[\"type\"]}\" is not legal inside a container`,\n );\n assertRenderableBlock(child, \"message\", childPath);\n });\n}\n\nfunction assertFileBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"file\", path);\n assertBlockBase(value, path);\n invariant(value[\"source\"] === \"remote\", \"invalid_value\", `${path}.source`, 'expected \"remote\"');\n assertString(value[\"external_id\"], `${path}.external_id`);\n}\n\nfunction assertVideoBlock(value: unknown, path: string): void {\n assertRecord(value, path);\n assertType(value, \"video\", path);\n assertBlockBase(value, path);\n assertString(value[\"video_url\"], `${path}.video_url`);\n assertString(value[\"thumbnail_url\"], `${path}.thumbnail_url`);\n assertString(value[\"alt_text\"], `${path}.alt_text`, { max: IMAGE_ALT_MAX_CHARS });\n assertPlainText(value[\"title\"], `${path}.title`, 199);\n if (value[\"description\"] !== undefined) {\n assertPlainText(value[\"description\"], `${path}.description`, 199);\n }\n assertOptionalString(value[\"author_name\"], `${path}.author_name`, { max: 49 });\n}\n\nfunction assertMessageOnly(surface: BlockKitSurface, path: string, type: string): void {\n invariant(\n surface === \"message\",\n \"surface_mismatch\",\n path,\n `${type} blocks are only documented for message surfaces`,\n );\n}\n\nexport function assertRenderableBlock(\n value: unknown,\n surface: BlockKitSurface = \"message\",\n path: string = \"block\",\n): asserts value is RenderableBlock {\n assertRecord(value, path);\n assertBlockBase(value, path);\n\n switch (value[\"type\"]) {\n case \"actions\":\n assertActionsBlock(value, path);\n return;\n case \"alert\":\n assertAlertBlock(value, surface, path);\n return;\n case \"card\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertCardBlock(value, path);\n return;\n case \"carousel\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertCarouselBlock(value, path);\n return;\n case \"container\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertContainerBlock(value, path);\n return;\n case \"context\":\n assertContextBlock(value, path);\n return;\n case \"context_actions\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertContextActionsBlock(value, path);\n return;\n case \"data_table\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertDataTableBlock(value, path);\n return;\n case \"data_visualization\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertChartBlock(value, path);\n return;\n case \"divider\":\n assertType(value, \"divider\", path);\n return;\n case \"file\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertFileBlock(value, path);\n return;\n case \"header\":\n assertHeaderBlock(value, path);\n return;\n case \"image\":\n assertImageBlock(value, path);\n return;\n case \"input\":\n assertInputBlock(value, path);\n return;\n case \"markdown\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertString(value[\"text\"], `${path}.text`, { max: MARKDOWN_CUMULATIVE_MAX_CHARS });\n return;\n case \"plan\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertPlanBlock(value, path);\n return;\n case \"rich_text\":\n assertRichTextBlock(value, path);\n return;\n case \"section\":\n assertSectionBlock(value, path);\n return;\n case \"table\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertTableBlock(value, path);\n return;\n case \"task_card\":\n assertMessageOnly(surface, path, value[\"type\"]);\n assertTaskCardBlock(value, path);\n return;\n case \"video\":\n assertVideoBlock(value, path);\n return;\n default:\n fail(\"unsupported_block\", `${path}.type`, `unsupported block \"${String(value[\"type\"])}\"`);\n }\n}\n\nexport function assertBlockType(\n value: unknown,\n expected: RenderableBlock[\"type\"],\n surface: BlockKitSurface = \"message\",\n path: string = \"block\",\n): void {\n assertRenderableBlock(value, surface, path);\n invariant(value.type === expected, \"invalid_value\", `${path}.type`, `expected \"${expected}\"`);\n}\n\nfunction blocksFromData(value: unknown, path: string): readonly unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n assertRecord(value, path);\n assertArray(value[\"blocks\"], `${path}.blocks`);\n return value[\"blocks\"];\n}\n\nexport function assertBlockKitData(\n value: unknown,\n surface: BlockKitSurface = \"message\",\n path: string = \"data\",\n): asserts value is BlockKitData {\n const blockListPath = Array.isArray(value) ? path : `${path}.blocks`;\n const blocks = blocksFromData(value, path);\n const maxBlocks = surface === \"message\" ? MESSAGE_MAX_BLOCKS : VIEW_MAX_BLOCKS;\n invariant(\n blocks.length <= maxBlocks,\n \"limit_exceeded\",\n blockListPath,\n `${surface} surfaces accept at most ${String(maxBlocks)} blocks`,\n );\n\n let markdownCharacters = 0;\n let tableCharacters = 0;\n let dataTableCharacters = 0;\n const blockIds = new Set<string>();\n\n blocks.forEach((block, index) => {\n const blockPath = `${blockListPath}[${String(index)}]`;\n assertRenderableBlock(block, surface, blockPath);\n if (block.block_id !== undefined) {\n invariant(\n !blockIds.has(block.block_id),\n \"duplicate_id\",\n `${blockPath}.block_id`,\n `\"${block.block_id}\" is already used in this payload`,\n );\n blockIds.add(block.block_id);\n }\n if (block.type === \"markdown\") {\n markdownCharacters += block.text.length;\n } else if (block.type === \"table\") {\n for (const row of block.rows) {\n for (const cell of row) {\n tableCharacters += tableCellTextLength(cell);\n }\n }\n } else if (block.type === \"data_table\") {\n for (const row of block.rows) {\n for (const cell of row) {\n dataTableCharacters += tableCellTextLength(cell);\n }\n }\n }\n });\n\n invariant(\n markdownCharacters <= MARKDOWN_CUMULATIVE_MAX_CHARS,\n \"limit_exceeded\",\n blockListPath,\n `markdown blocks exceed the cumulative ${String(MARKDOWN_CUMULATIVE_MAX_CHARS)} character limit`,\n );\n invariant(\n tableCharacters <= TABLE_MAX_CHARS,\n \"limit_exceeded\",\n blockListPath,\n `table cells exceed the cumulative ${String(TABLE_MAX_CHARS)} character limit`,\n );\n invariant(\n dataTableCharacters <= DATA_TABLE_MAX_CHARS,\n \"limit_exceeded\",\n blockListPath,\n `data_table cells exceed the cumulative ${String(DATA_TABLE_MAX_CHARS)} character limit`,\n );\n}\n\nexport function parseBlockKitData(\n input: BlockKitInput,\n surface: BlockKitSurface = \"message\",\n): BlockKitData {\n let value: unknown = input;\n if (typeof input === \"string\") {\n try {\n value = JSON.parse(input) as unknown;\n } catch {\n throw new BlockKitInvariantError(\"expected valid JSON\", {\n code: \"invalid_json\",\n path: \"data\",\n });\n }\n }\n assertBlockKitData(value, surface);\n return value;\n}\n\nexport function blocksOf(data: BlockKitData): readonly RenderableBlock[] {\n return isBlockKitPayload(data) ? data.blocks : data;\n}\n\nfunction isBlockKitPayload(data: BlockKitData): data is BlockKitPayload {\n return !Array.isArray(data);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|