UNPKG

jsx-slack

Version:

Build JSON object for Slack Block Kit surfaces from JSX

2 lines (1 loc) 1.09 kB
import{JSXSlackError as d}from"../../error.mjs";import{JSXSlack as c}from"../../jsx.mjs";import{createComponent as h}from"../../jsx-internals.mjs";import{mrkdwn as p}from"../composition/Mrkdwn.mjs";import{assignMetaFrom as i}from"../utils.mjs";const s=Symbol("EndOfContext"),k=h("Context",({blockId:f,children:u,id:x,...g})=>{const r=[];let o=[];for(const t of[...c.Children.toArray(u),s]){const n=(()=>{if(c.isValidElement(t)){if(t.$$jsxslack.type==="span")return i(t,p(t));if(t.$$jsxslack.type==="img"){const{src:e,alt:l}=t.$$jsxslack.props||{};return i(t,{type:"image",image_url:e,alt_text:l})}if(typeof t=="object"){const{type:e,text:l,image_url:m,alt_text:a}=t;if(e==="mrkdwn"&&l)return t;if(e==="image"&&m&&a)return i(t,{type:"image",image_url:m,alt_text:a})}}return null})();if(o.length>0&&(n||t===s)){const e=p(o);e.text&&r.push(e),o=[]}n?r.push(n):t!==s&&o.push(t)}if(r.length>10)throw new d(`<Context> allows containing up to 10 elements, but the number of generated elements is ${r.length}.`,g.__source);return{type:"context",block_id:f||x,elements:r}});export{k as Context};