@luckydraw/blex 0.1.0 → 0.1.2

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.
Files changed (40) hide show
  1. package/dist/blex.min.global.js +391 -11
  2. package/dist/blex.min.global.js.map +1 -1
  3. package/dist/esm/{calendar-HUZDQQN2.js → calendar-PNRNENA4.js} +24 -6
  4. package/dist/esm/calendar-PNRNENA4.js.map +1 -0
  5. package/dist/esm/{chunk-ZKSJGHJI.js → chunk-JEYTN6MT.js} +472 -16
  6. package/dist/esm/chunk-JEYTN6MT.js.map +1 -0
  7. package/dist/esm/{gallery-ISM7FZA3.js → gallery-FCVFZFE7.js} +9 -3
  8. package/dist/esm/gallery-FCVFZFE7.js.map +1 -0
  9. package/dist/esm/index.js +2 -2
  10. package/dist/esm/{kanban-XUXVTRX2.js → kanban-FLEZGRIE.js} +51 -4
  11. package/dist/esm/kanban-FLEZGRIE.js.map +1 -0
  12. package/dist/esm/react/index.js +1 -1
  13. package/dist/esm/render.d.ts.map +1 -1
  14. package/dist/esm/renderers/calendar.d.ts +2 -1
  15. package/dist/esm/renderers/calendar.d.ts.map +1 -1
  16. package/dist/esm/renderers/code.d.ts +3 -1
  17. package/dist/esm/renderers/code.d.ts.map +1 -1
  18. package/dist/esm/renderers/confirm.d.ts.map +1 -1
  19. package/dist/esm/renderers/diff.d.ts.map +1 -1
  20. package/dist/esm/renderers/file-tree.d.ts +3 -1
  21. package/dist/esm/renderers/file-tree.d.ts.map +1 -1
  22. package/dist/esm/renderers/form.d.ts.map +1 -1
  23. package/dist/esm/renderers/gallery.d.ts +2 -1
  24. package/dist/esm/renderers/gallery.d.ts.map +1 -1
  25. package/dist/esm/renderers/kanban.d.ts +5 -1
  26. package/dist/esm/renderers/kanban.d.ts.map +1 -1
  27. package/dist/esm/renderers/poll.d.ts.map +1 -1
  28. package/dist/esm/renderers/svg.d.ts.map +1 -1
  29. package/dist/esm/renderers/table.d.ts +2 -1
  30. package/dist/esm/renderers/table.d.ts.map +1 -1
  31. package/dist/esm/renderers/terminal.d.ts.map +1 -1
  32. package/dist/esm/theme.d.ts.map +1 -1
  33. package/dist/esm/{types-C42V92x6.d.ts → types-CUQTmRQn.d.ts} +15 -0
  34. package/dist/esm/types.d.ts +15 -0
  35. package/dist/esm/types.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/esm/calendar-HUZDQQN2.js.map +0 -1
  38. package/dist/esm/chunk-ZKSJGHJI.js.map +0 -1
  39. package/dist/esm/gallery-ISM7FZA3.js.map +0 -1
  40. package/dist/esm/kanban-XUXVTRX2.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/registry.ts","../../src/fallback.ts","../../src/theme.ts","../../src/render.ts","../../src/renderers/confirm.ts","../../src/renderers/poll.ts","../../src/renderers/status.ts","../../src/renderers/metric.ts","../../src/renderers/image.ts","../../src/renderers/svg.ts","../../src/renderers/table.ts","../../src/renderers/code.ts","../../src/renderers/diff.ts","../../src/renderers/file-tree.ts","../../src/renderers/form.ts","../../src/renderers/progress.ts","../../src/renderers/terminal.ts","../../src/renderers/timeline.ts","../../src/renderers/layout.ts","../../src/defaults.ts"],"names":["DOMPurify","input"],"mappings":"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","file":"chunk-ZKSJGHJI.js","sourcesContent":["import type { BlockRenderer, BlockRendererFactory, RegistryEntry } from './types.js';\n\nconst registry = new Map<string, RegistryEntry>();\nconst builtInTypes = new Set<string>();\n\n/**\n * Register a block type with a synchronous factory.\n * Overrides any existing registration for the same type.\n */\nexport function registerBlockType(type: string, factory: BlockRendererFactory): void {\n registry.set(type, { factory });\n}\n\n/**\n * Mark a type as built-in. Built-in types cannot be overridden by plugins\n * unless force is used.\n */\nexport function markBuiltIn(type: string): void {\n builtInTypes.add(type);\n}\n\n/**\n * Check if a type is a built-in block type.\n */\nexport function isBuiltIn(type: string): boolean {\n return builtInTypes.has(type);\n}\n\n/**\n * Remove a block type from the registry.\n * Returns true if the type was removed, false if it wasn't registered.\n */\nexport function unregisterBlockType(type: string, options?: { force?: boolean }): boolean {\n if (!registry.has(type)) return false;\n if (builtInTypes.has(type) && !options?.force) {\n throw new Error(`Cannot unregister built-in block type \"${type}\" without force: true`);\n }\n registry.delete(type);\n builtInTypes.delete(type);\n return true;\n}\n\n/**\n * Register a block type with a lazy loader.\n * The loader is called once on first use; subsequent calls use the cached factory.\n */\nexport function registerLazyBlockType(type: string, loader: () => Promise<BlockRendererFactory>): void {\n registry.set(type, { loader });\n}\n\n/**\n * Resolve a block type to a renderer instance.\n * For lazy-loaded types, loads the module on first use and caches the factory.\n * Returns null if the type is not registered.\n */\nexport async function resolveRenderer(type: string): Promise<BlockRenderer | null> {\n const entry = registry.get(type);\n if (!entry) return null;\n\n if (entry.factory) {\n return entry.factory();\n }\n\n if (entry.loader) {\n const factory = await entry.loader();\n // Cache the factory for future use\n entry.factory = factory;\n entry.loader = undefined;\n return factory();\n }\n\n return null;\n}\n\n/**\n * Check if a block type is registered.\n */\nexport function hasBlockType(type: string): boolean {\n return registry.has(type);\n}\n\n/**\n * Get all registered block type names.\n */\nexport function getRegisteredTypes(): string[] {\n return Array.from(registry.keys());\n}\n\n/**\n * Clear the registry. Used for testing.\n */\nexport function clearRegistry(): void {\n registry.clear();\n}\n","import { BaseRenderer } from './base-renderer.js';\nimport type { ContentBlock } from './types.js';\n\n/**\n * Fallback renderer for unknown block types.\n * Renders the raw JSON data in a collapsible <details> element.\n */\nexport class FallbackRenderer extends BaseRenderer {\n render(block: ContentBlock, container: HTMLElement): void {\n this.container = container;\n\n const details = document.createElement('details');\n details.setAttribute('data-testid', `blex-fallback-${block.id}`);\n\n const summary = document.createElement('summary');\n summary.textContent = `Unknown block type: ${block.type}`;\n summary.setAttribute('data-testid', `blex-fallback-summary-${block.id}`);\n details.appendChild(summary);\n\n const pre = document.createElement('pre');\n const code = document.createElement('code');\n code.textContent = JSON.stringify(block.data, null, 2);\n pre.appendChild(code);\n details.appendChild(pre);\n\n container.appendChild(details);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock): void {\n if (!this.container) return;\n const code = this.container.querySelector('code');\n if (code) {\n code.textContent = JSON.stringify(block.data, null, 2);\n }\n }\n}\n","/**\n * Default CSS custom properties for blex theming.\n * Injected once on first renderBlock() call.\n */\n\nconst THEME_ID = 'blex-theme-defaults';\n\nconst DEFAULT_STYLES = `\n:root {\n --blex-bg: #ffffff;\n --blex-text: #1a1a1a;\n --blex-border: #e5e5e5;\n --blex-accent: #3b82f6;\n --blex-success: #22c55e;\n --blex-warning: #f59e0b;\n --blex-error: #ef4444;\n --blex-chart-bg: var(--blex-bg);\n --blex-chart-text: var(--blex-text);\n --blex-animation-duration: 200ms;\n --blex-font-family: system-ui, -apple-system, sans-serif;\n --blex-font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, monospace;\n}\n\n[data-theme=\"dark\"] {\n --blex-bg: #1a1a1a;\n --blex-text: #e5e5e5;\n --blex-border: #333333;\n --blex-accent: #60a5fa;\n --blex-success: #4ade80;\n --blex-warning: #fbbf24;\n --blex-error: #f87171;\n}\n\n[data-test-mode=\"true\"] *,\n[data-test-mode=\"true\"] *::before,\n[data-test-mode=\"true\"] *::after {\n animation-duration: 0.001ms !important;\n transition-duration: 0.001ms !important;\n}\n\n.blex-placeholder {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border: 1px solid var(--blex-border);\n border-radius: 6px;\n background: var(--blex-bg);\n color: var(--blex-text);\n font-family: var(--blex-font-family);\n}\n\n.blex-placeholder__label {\n font-size: 12px;\n opacity: 0.6;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.blex-placeholder__pulse {\n width: 100%;\n height: 20px;\n background: linear-gradient(90deg, var(--blex-border) 25%, transparent 50%, var(--blex-border) 75%);\n background-size: 200% 100%;\n animation: blex-pulse var(--blex-animation-duration, 200ms) ease-in-out infinite;\n animation-duration: 1.5s;\n border-radius: 4px;\n}\n\n@keyframes blex-pulse {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n`;\n\nlet injected = false;\n\n/**\n * Inject default theme styles into the document head.\n * Called once on first renderBlock(). Safe to call multiple times.\n */\nexport function ensureTheme(): void {\n if (injected) return;\n if (typeof document === 'undefined') return;\n if (document.getElementById(THEME_ID)) {\n injected = true;\n return;\n }\n\n const style = document.createElement('style');\n style.id = THEME_ID;\n style.textContent = DEFAULT_STYLES;\n document.head.appendChild(style);\n injected = true;\n}\n","import type { ContentBlock, BlockHandle, BlockInteraction, RenderOptions } from './types.js';\nimport { resolveRenderer } from './registry.js';\nimport { FallbackRenderer } from './fallback.js';\nimport { ensureTheme } from './theme.js';\n\n/**\n * Render a content block into a container element.\n *\n * 1. Injects theme defaults (once)\n * 2. Resolves block type from registry (falls back to FallbackRenderer)\n * 3. Loads renderer (lazy if needed)\n * 4. Calls renderer.render()\n * 5. Wires up interaction callbacks\n * 6. Returns a BlockHandle for updates, interactions, and cleanup\n */\nexport async function renderBlock(\n block: ContentBlock,\n container: HTMLElement,\n options?: RenderOptions\n): Promise<BlockHandle> {\n ensureTheme();\n\n // Clear any existing content (e.g., streaming placeholder)\n container.innerHTML = '';\n\n container.setAttribute('data-blex-type', block.type);\n container.setAttribute('data-blex-id', block.id);\n\n let renderer = await resolveRenderer(block.type);\n\n if (!renderer) {\n renderer = new FallbackRenderer();\n }\n\n renderer.render(block, container);\n\n // Signal render complete\n container.setAttribute('data-blex-ready', 'true');\n\n if (options?.onReady) {\n options.onReady();\n }\n\n const handle: BlockHandle = {\n update(updatedBlock: ContentBlock): void {\n if (renderer?.update) {\n renderer.update(updatedBlock);\n }\n },\n\n onInteraction(callback: (interaction: BlockInteraction) => void): void {\n if (renderer?.onInteraction) {\n renderer.onInteraction(callback);\n }\n },\n\n destroy(): void {\n renderer?.destroy();\n renderer = null;\n container.removeAttribute('data-blex-type');\n container.removeAttribute('data-blex-id');\n container.removeAttribute('data-blex-ready');\n },\n };\n\n return handle;\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface ConfirmData {\n message: string;\n buttons?: string[];\n}\n\nconst DEFAULT_BUTTONS = ['Yes', 'No', 'Cancel'];\n\nexport class ConfirmRenderer extends BaseRenderer<ConfirmData> {\n render(block: ContentBlock<ConfirmData>, container: HTMLElement): void {\n this.container = container;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<ConfirmData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _build(block: ContentBlock<ConfirmData>): void {\n const container = this.container!;\n const data = block.data;\n const buttons = data.buttons ?? DEFAULT_BUTTONS;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-confirm';\n wrapper.setAttribute('data-testid', `blex-confirm-${block.id}`);\n\n const msg = document.createElement('p');\n msg.className = 'blex-confirm__message';\n msg.setAttribute('data-testid', `blex-confirm-message-${block.id}`);\n msg.textContent = data.message;\n wrapper.appendChild(msg);\n\n const btnGroup = document.createElement('div');\n btnGroup.className = 'blex-confirm__buttons';\n\n for (const label of buttons) {\n const btn = document.createElement('button');\n btn.className = 'blex-confirm__button';\n btn.textContent = label;\n btn.setAttribute('data-testid', `blex-confirm-btn-${label.toLowerCase()}`);\n\n this.addListener(btn, 'click', () => {\n this.emit({\n blockId: block.id,\n type: 'click',\n payload: { button: label },\n serialized: `User confirmed: ${data.message} → ${label}`,\n });\n });\n\n btnGroup.appendChild(btn);\n }\n\n wrapper.appendChild(btnGroup);\n container.appendChild(wrapper);\n }\n}\n\nexport function createConfirmRenderer(): ConfirmRenderer {\n return new ConfirmRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface PollData {\n question: string;\n options: string[];\n multiSelect?: boolean;\n writeIn?: boolean;\n}\n\nexport class PollRenderer extends BaseRenderer<PollData> {\n private selected = new Set<number>();\n private writeInValue = '';\n\n render(block: ContentBlock<PollData>, container: HTMLElement): void {\n this.container = container;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<PollData>): void {\n if (!this.container) return;\n\n // Preserve selection indices that are still valid for the new options list\n const newOptionCount = block.data.options.length;\n for (const idx of Array.from(this.selected)) {\n if (idx >= newOptionCount) this.selected.delete(idx);\n }\n\n // Re-render, keeping current writeInValue\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _build(block: ContentBlock<PollData>): void {\n const container = this.container!;\n const { question, options, multiSelect, writeIn } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-poll';\n wrapper.setAttribute('data-testid', `blex-poll-${block.id}`);\n\n // Question\n const q = document.createElement('p');\n q.className = 'blex-poll__question';\n q.textContent = question;\n wrapper.appendChild(q);\n\n // Options list\n const optionsList = document.createElement('div');\n optionsList.className = 'blex-poll__options';\n\n options.forEach((opt, i) => {\n const btn = document.createElement('button');\n btn.className = 'blex-poll__option';\n if (this.selected.has(i)) {\n btn.classList.add('blex-poll__option--selected');\n }\n btn.setAttribute('data-testid', `blex-poll-option-${i}`);\n btn.textContent = opt;\n\n this.addListener(btn, 'click', () => {\n if (multiSelect) {\n // Toggle selection\n if (this.selected.has(i)) {\n this.selected.delete(i);\n btn.classList.remove('blex-poll__option--selected');\n } else {\n this.selected.add(i);\n btn.classList.add('blex-poll__option--selected');\n }\n } else {\n // Single select: deselect all others, select this one\n const allOptionBtns = optionsList.querySelectorAll<HTMLButtonElement>('.blex-poll__option');\n allOptionBtns.forEach((b) => b.classList.remove('blex-poll__option--selected'));\n this.selected.clear();\n this.selected.add(i);\n btn.classList.add('blex-poll__option--selected');\n }\n });\n\n optionsList.appendChild(btn);\n });\n\n wrapper.appendChild(optionsList);\n\n // Write-in input\n if (writeIn) {\n const writeInInput = document.createElement('input');\n writeInInput.type = 'text';\n writeInInput.className = 'blex-poll__writein';\n writeInInput.placeholder = 'Other...';\n writeInInput.setAttribute('data-testid', `blex-poll-writein-${block.id}`);\n writeInInput.value = this.writeInValue;\n\n this.addListener(writeInInput, 'input', () => {\n this.writeInValue = writeInInput.value;\n });\n\n wrapper.appendChild(writeInInput);\n }\n\n // Submit button\n const submitBtn = document.createElement('button');\n submitBtn.className = 'blex-poll__submit';\n submitBtn.textContent = 'Submit';\n submitBtn.setAttribute('data-testid', `blex-poll-submit-${block.id}`);\n\n this.addListener(submitBtn, 'click', () => {\n const selectedLabels = Array.from(this.selected)\n .sort((a, b) => a - b)\n .map((i) => options[i]);\n\n const payload: { selected: string[]; writeIn?: string } = {\n selected: selectedLabels,\n };\n\n let serialized = `Poll response: ${question}\\nSelected: ${selectedLabels.join(', ')}`;\n\n if (this.writeInValue) {\n payload.writeIn = this.writeInValue;\n serialized += `\\nWrite-in: ${this.writeInValue}`;\n }\n\n this.emit({\n blockId: block.id,\n type: 'submit',\n payload,\n serialized,\n });\n });\n\n wrapper.appendChild(submitBtn);\n container.appendChild(wrapper);\n }\n}\n\nexport function createPollRenderer(): PollRenderer {\n return new PollRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface StatusEntry {\n key: string;\n value: string;\n status?: 'ok' | 'warning' | 'error';\n}\n\nexport interface StatusData {\n entries: StatusEntry[];\n}\n\nexport class StatusRenderer extends BaseRenderer<StatusData> {\n render(block: ContentBlock<StatusData>, container: HTMLElement): void {\n this.container = container;\n this.renderContent(block);\n }\n\n update(block: ContentBlock<StatusData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.renderContent(block);\n }\n\n private renderContent(block: ContentBlock<StatusData>): void {\n const container = this.container!;\n const { entries } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-status';\n wrapper.setAttribute('data-testid', `blex-status-${block.id}`);\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n\n const row = document.createElement('div');\n row.className = 'blex-status__entry';\n row.setAttribute('data-testid', `blex-status-entry-${i}`);\n\n const keyEl = document.createElement('span');\n keyEl.className = 'blex-status__key';\n keyEl.textContent = entry.key;\n row.appendChild(keyEl);\n\n const valueEl = document.createElement('span');\n valueEl.className = 'blex-status__value';\n valueEl.textContent = entry.value;\n row.appendChild(valueEl);\n\n if (entry.status) {\n const dot = document.createElement('span');\n dot.className = `blex-status__indicator blex-status__indicator--${entry.status}`;\n row.appendChild(dot);\n }\n\n wrapper.appendChild(row);\n }\n\n container.appendChild(wrapper);\n container.setAttribute('data-blex-ready', 'true');\n }\n}\n\nexport function createStatusRenderer(): StatusRenderer {\n return new StatusRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface MetricData {\n value: string;\n label: string;\n trend?: string;\n trendDirection?: 'up' | 'down' | 'flat';\n icon?: string;\n}\n\nconst TREND_ARROWS: Record<'up' | 'down' | 'flat', string> = {\n up: '↑',\n down: '↓',\n flat: '→',\n};\n\nexport class MetricRenderer extends BaseRenderer<MetricData> {\n render(block: ContentBlock<MetricData>, container: HTMLElement): void {\n this.container = container;\n this.renderContent(block);\n }\n\n update(block: ContentBlock<MetricData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.renderContent(block);\n }\n\n private renderContent(block: ContentBlock<MetricData>): void {\n const container = this.container!;\n const { value, label, trend, trendDirection } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-metric';\n wrapper.setAttribute('data-testid', `blex-metric-${block.id}`);\n\n const valueEl = document.createElement('div');\n valueEl.className = 'blex-metric__value';\n valueEl.setAttribute('data-testid', `blex-metric-value-${block.id}`);\n valueEl.textContent = value;\n wrapper.appendChild(valueEl);\n\n const labelEl = document.createElement('div');\n labelEl.className = 'blex-metric__label';\n labelEl.setAttribute('data-testid', `blex-metric-label-${block.id}`);\n labelEl.textContent = label;\n wrapper.appendChild(labelEl);\n\n if (trend !== undefined) {\n const trendEl = document.createElement('div');\n const arrow = trendDirection ? TREND_ARROWS[trendDirection] : '';\n const directionClass = trendDirection ? ` blex-metric__trend--${trendDirection}` : '';\n trendEl.className = `blex-metric__trend${directionClass}`;\n trendEl.setAttribute('data-testid', `blex-metric-trend-${block.id}`);\n trendEl.textContent = arrow ? `${arrow} ${trend}` : trend;\n wrapper.appendChild(trendEl);\n }\n\n container.appendChild(wrapper);\n container.setAttribute('data-blex-ready', 'true');\n }\n}\n\nexport function createMetricRenderer(): MetricRenderer {\n return new MetricRenderer();\n}\n","import DOMPurify from 'dompurify';\nimport { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface ImageData {\n src: string;\n alt?: string;\n caption?: string;\n width?: number;\n height?: number;\n}\n\nexport class ImageRenderer extends BaseRenderer<ImageData> {\n render(block: ContentBlock<ImageData>, container: HTMLElement): void {\n this.container = container;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<ImageData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _build(block: ContentBlock<ImageData>): void {\n const container = this.container!;\n const { src, alt, caption, width, height } = block.data;\n\n const wrapper = document.createElement('figure');\n wrapper.className = 'blex-image';\n wrapper.setAttribute('data-testid', `blex-image-${block.id}`);\n\n // Image element\n const img = document.createElement('img');\n img.src = src;\n img.alt = alt ?? '';\n img.className = 'blex-image__img';\n img.setAttribute('data-testid', `blex-image-img-${block.id}`);\n if (width !== undefined) img.width = width;\n if (height !== undefined) img.height = height;\n\n // Clicking the image opens the zoom overlay\n this.addListener(img, 'click', () => this._openOverlay(src, alt));\n wrapper.appendChild(img);\n\n // Optional caption (sanitized)\n if (caption) {\n const cap = document.createElement('figcaption');\n cap.className = 'blex-image__caption';\n cap.setAttribute('data-testid', `blex-image-caption-${block.id}`);\n cap.innerHTML = DOMPurify.sanitize(caption);\n wrapper.appendChild(cap);\n }\n\n // Action buttons\n const actions = document.createElement('div');\n actions.className = 'blex-image__actions';\n\n // Zoom button\n const zoomBtn = document.createElement('button');\n zoomBtn.className = 'blex-image__btn';\n zoomBtn.textContent = 'Zoom';\n zoomBtn.setAttribute('data-testid', `blex-image-zoom-${block.id}`);\n this.addListener(zoomBtn, 'click', () => this._openOverlay(src, alt));\n actions.appendChild(zoomBtn);\n\n // Download button\n const downloadBtn = document.createElement('button');\n downloadBtn.className = 'blex-image__btn';\n downloadBtn.textContent = 'Download';\n downloadBtn.setAttribute('data-testid', `blex-image-download-${block.id}`);\n this.addListener(downloadBtn, 'click', () => {\n const a = document.createElement('a');\n a.href = src;\n a.download = alt ?? 'image';\n a.click();\n });\n actions.appendChild(downloadBtn);\n\n wrapper.appendChild(actions);\n container.appendChild(wrapper);\n }\n\n private _openOverlay(src: string, alt?: string): void {\n const overlay = document.createElement('div');\n overlay.className = 'blex-image__overlay';\n\n const img = document.createElement('img');\n img.src = src;\n img.alt = alt ?? '';\n overlay.appendChild(img);\n\n const closeOverlay = () => {\n overlay.remove();\n document.removeEventListener('keydown', onKeyDown);\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') closeOverlay();\n };\n\n this.addListener(overlay, 'click', closeOverlay as EventListener);\n document.addEventListener('keydown', onKeyDown);\n\n document.body.appendChild(overlay);\n }\n}\n\nexport function createImageRenderer(): ImageRenderer {\n return new ImageRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\nimport DOMPurify from 'dompurify';\n\nexport interface SvgData {\n svg: string;\n title?: string;\n}\n\nexport class SvgRenderer extends BaseRenderer<SvgData> {\n render(block: ContentBlock<SvgData>, container: HTMLElement): void {\n this.container = container;\n this.renderContent(block);\n }\n\n update(block: ContentBlock<SvgData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.renderContent(block);\n }\n\n private renderContent(block: ContentBlock<SvgData>): void {\n const container = this.container!;\n const { svg, title } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-svg';\n wrapper.setAttribute('data-testid', `blex-svg-${block.id}`);\n\n if (title) {\n const titleEl = document.createElement('div');\n titleEl.className = 'blex-svg__title';\n titleEl.textContent = title;\n wrapper.appendChild(titleEl);\n }\n\n const svgContainer = document.createElement('div');\n svgContainer.className = 'blex-svg__content';\n svgContainer.setAttribute('data-testid', `blex-svg-content-${block.id}`);\n svgContainer.innerHTML = DOMPurify.sanitize(svg, { USE_PROFILES: { svg: true } });\n wrapper.appendChild(svgContainer);\n\n const actions = document.createElement('div');\n actions.className = 'blex-svg__actions';\n\n const downloadBtn = document.createElement('button');\n downloadBtn.className = 'blex-svg__btn';\n downloadBtn.textContent = 'Download SVG';\n downloadBtn.setAttribute('data-testid', `blex-svg-download-${block.id}`);\n this.addListener(downloadBtn, 'click', () => {\n const blob = new Blob([svg], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `${title ?? 'image'}.svg`;\n a.click();\n URL.revokeObjectURL(url);\n this.emit({\n blockId: block.id,\n type: 'click',\n payload: { action: 'download' },\n serialized: `Downloaded SVG${title ? `: ${title}` : ''}`,\n });\n });\n actions.appendChild(downloadBtn);\n\n const copyBtn = document.createElement('button');\n copyBtn.className = 'blex-svg__btn';\n copyBtn.textContent = 'Copy SVG';\n copyBtn.setAttribute('data-testid', `blex-svg-copy-${block.id}`);\n this.addListener(copyBtn, 'click', () => {\n navigator.clipboard?.writeText(svg);\n this.emit({\n blockId: block.id,\n type: 'click',\n payload: { action: 'copy' },\n serialized: `Copied SVG${title ? `: ${title}` : ''}`,\n });\n });\n actions.appendChild(copyBtn);\n\n wrapper.appendChild(actions);\n container.appendChild(wrapper);\n container.setAttribute('data-blex-ready', 'true');\n }\n}\n\nexport function createSvgRenderer(): SvgRenderer {\n return new SvgRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface TableData {\n columns: string[];\n rows: Array<Record<string, string | number>>;\n sortable?: boolean;\n}\n\ntype SortDirection = 'asc' | 'desc';\n\nexport class TableRenderer extends BaseRenderer<TableData> {\n private selectedRows = new Set<number>();\n private sortColumn: string | null = null;\n private sortDirection: SortDirection = 'asc';\n private currentBlock: ContentBlock<TableData> | null = null;\n\n render(block: ContentBlock<TableData>, container: HTMLElement): void {\n this.container = container;\n this.currentBlock = block;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<TableData>): void {\n if (!this.container) return;\n this.currentBlock = block;\n this.selectedRows.clear();\n this.sortColumn = null;\n this.sortDirection = 'asc';\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _getSortedRows(rows: Array<Record<string, string | number>>): Array<{ row: Record<string, string | number>; originalIndex: number }> {\n const indexed = rows.map((row, i) => ({ row, originalIndex: i }));\n if (!this.sortColumn) return indexed;\n\n const col = this.sortColumn;\n const dir = this.sortDirection;\n\n return indexed.slice().sort((a, b) => {\n const av = a.row[col] ?? '';\n const bv = b.row[col] ?? '';\n\n let cmp: number;\n if (typeof av === 'number' && typeof bv === 'number') {\n cmp = av - bv;\n } else {\n cmp = String(av).localeCompare(String(bv));\n }\n\n return dir === 'asc' ? cmp : -cmp;\n });\n }\n\n private _build(block: ContentBlock<TableData>): void {\n const container = this.container!;\n const { columns, rows, sortable } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-table';\n wrapper.setAttribute('data-testid', `blex-table-${block.id}`);\n\n const table = document.createElement('table');\n\n // Header\n const thead = document.createElement('thead');\n const headerRow = document.createElement('tr');\n headerRow.className = 'blex-table__header';\n\n for (const col of columns) {\n const th = document.createElement('th');\n th.className = 'blex-table__header-cell';\n th.setAttribute('data-testid', `blex-table-header-${col}`);\n th.textContent = col;\n\n if (this.sortColumn === col) {\n th.classList.add(\n this.sortDirection === 'asc'\n ? 'blex-table__header-cell--sorted-asc'\n : 'blex-table__header-cell--sorted-desc'\n );\n }\n\n if (sortable) {\n this.addListener(th, 'click', () => {\n if (this.sortColumn === col) {\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n } else {\n this.sortColumn = col;\n this.sortDirection = 'asc';\n }\n // Re-render keeping selection\n container.innerHTML = '';\n this._build(this.currentBlock!);\n });\n }\n\n headerRow.appendChild(th);\n }\n\n thead.appendChild(headerRow);\n table.appendChild(thead);\n\n // Body\n const tbody = document.createElement('tbody');\n const sortedRows = this._getSortedRows(rows);\n\n for (const { row, originalIndex } of sortedRows) {\n const tr = document.createElement('tr');\n tr.className = 'blex-table__row';\n tr.setAttribute('data-testid', `blex-table-row-${originalIndex}`);\n\n if (this.selectedRows.has(originalIndex)) {\n tr.classList.add('blex-table__row--selected');\n }\n\n this.addListener(tr, 'click', () => {\n if (this.selectedRows.has(originalIndex)) {\n this.selectedRows.delete(originalIndex);\n tr.classList.remove('blex-table__row--selected');\n } else {\n this.selectedRows.add(originalIndex);\n tr.classList.add('blex-table__row--selected');\n }\n this._emitSelection(block);\n });\n\n for (const col of columns) {\n const td = document.createElement('td');\n td.className = 'blex-table__cell';\n td.setAttribute('data-testid', `blex-table-cell-${originalIndex}-${col}`);\n td.textContent = String(row[col] ?? '');\n tr.appendChild(td);\n }\n\n tbody.appendChild(tr);\n }\n\n table.appendChild(tbody);\n wrapper.appendChild(table);\n container.appendChild(wrapper);\n }\n\n private _emitSelection(block: ContentBlock<TableData>): void {\n const { columns, rows } = block.data;\n const selectedIndices = Array.from(this.selectedRows).sort((a, b) => a - b);\n const selectedRows = selectedIndices.map((i) => rows[i]);\n\n // Build markdown table of selected rows\n const headerLine = `| ${columns.join(' | ')} |`;\n const separatorLine = `| ${columns.map(() => '---').join(' | ')} |`;\n const dataLines = selectedRows.map(\n (row) => `| ${columns.map((col) => String(row[col] ?? '')).join(' | ')} |`\n );\n\n const serialized = [\n 'Selected from table:',\n headerLine,\n separatorLine,\n ...dataLines,\n ].join('\\n');\n\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: {\n selectedRows: selectedIndices,\n columns,\n },\n serialized,\n });\n }\n}\n\nexport function createTableRenderer(): TableRenderer {\n return new TableRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface CodeData {\n code: string;\n language?: string;\n lineNumbers?: boolean;\n highlightLines?: number[];\n}\n\nexport class CodeRenderer extends BaseRenderer<CodeData> {\n private selectedLines = new Set<number>();\n private lastClickedLine: number | null = null;\n\n render(block: ContentBlock<CodeData>, container: HTMLElement): void {\n this.container = container;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<CodeData>): void {\n if (!this.container) return;\n\n // Re-render the code content while preserving selection state\n const lines = block.data.code.split('\\n');\n\n // Remove selections that are now out of range\n for (const lineNum of Array.from(this.selectedLines)) {\n if (lineNum > lines.length) this.selectedLines.delete(lineNum);\n }\n\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _build(block: ContentBlock<CodeData>): void {\n const container = this.container!;\n const { code, language, highlightLines = [] } = block.data;\n const lineNumbersEnabled = block.data.lineNumbers !== false;\n const lines = code.split('\\n');\n\n const pre = document.createElement('pre');\n pre.className = 'blex-code';\n if (language) pre.setAttribute('data-language', language);\n pre.setAttribute('data-testid', `blex-code-${block.id}`);\n\n // Copy button\n const copyBtn = document.createElement('button');\n copyBtn.className = 'blex-code__copy';\n copyBtn.setAttribute('data-testid', `blex-code-copy-${block.id}`);\n copyBtn.textContent = 'Copy';\n\n this.addListener(copyBtn, 'click', () => {\n navigator.clipboard.writeText(code);\n });\n\n pre.appendChild(copyBtn);\n\n // Gutter (line numbers)\n let gutter: HTMLElement | null = null;\n if (lineNumbersEnabled) {\n gutter = document.createElement('div');\n gutter.className = 'blex-code__gutter';\n pre.appendChild(gutter);\n }\n\n // Code content\n const codeEl = document.createElement('code');\n codeEl.className = 'blex-code__content';\n if (language) codeEl.className += ` language-${language}`;\n\n lines.forEach((lineText, i) => {\n const lineNum = i + 1;\n\n // Line number in gutter\n if (lineNumbersEnabled && gutter) {\n const lineNumberEl = document.createElement('span');\n lineNumberEl.className = 'blex-code__line-number';\n lineNumberEl.textContent = String(lineNum);\n\n this.addListener(lineNumberEl, 'click', (e: Event) => {\n const mouseEvent = e as MouseEvent;\n if (mouseEvent.shiftKey && this.lastClickedLine !== null) {\n // Range selection\n const start = Math.min(this.lastClickedLine, lineNum);\n const end = Math.max(this.lastClickedLine, lineNum);\n for (let l = start; l <= end; l++) {\n this.selectedLines.add(l);\n }\n } else {\n // Single line selection toggle\n if (this.selectedLines.has(lineNum)) {\n this.selectedLines.delete(lineNum);\n } else {\n this.selectedLines.add(lineNum);\n }\n this.lastClickedLine = lineNum;\n }\n\n this._updateSelectionClasses(codeEl, lines.length);\n this._emitSelection(block, lines);\n });\n\n gutter.appendChild(lineNumberEl);\n }\n\n // Line content\n const lineEl = document.createElement('div');\n lineEl.className = 'blex-code__line';\n lineEl.setAttribute('data-testid', `blex-code-line-${lineNum}`);\n lineEl.textContent = lineText;\n\n if (highlightLines.includes(lineNum)) {\n lineEl.classList.add('blex-code__line--highlighted');\n }\n\n if (this.selectedLines.has(lineNum)) {\n lineEl.classList.add('blex-code__line--selected');\n }\n\n codeEl.appendChild(lineEl);\n });\n\n pre.appendChild(codeEl);\n container.appendChild(pre);\n }\n\n private _updateSelectionClasses(codeEl: HTMLElement, totalLines: number): void {\n for (let lineNum = 1; lineNum <= totalLines; lineNum++) {\n const lineEl = codeEl.querySelector(`[data-testid=\"blex-code-line-${lineNum}\"]`);\n if (!lineEl) continue;\n if (this.selectedLines.has(lineNum)) {\n lineEl.classList.add('blex-code__line--selected');\n } else {\n lineEl.classList.remove('blex-code__line--selected');\n }\n }\n }\n\n private _emitSelection(block: ContentBlock<CodeData>, lines: string[]): void {\n const { language } = block.data;\n const sortedLines = Array.from(this.selectedLines).sort((a, b) => a - b);\n const selectedCode = sortedLines.map((lineNum) => lines[lineNum - 1]).join('\\n');\n const langTag = language ?? '';\n const serialized = `\\`\\`\\`${langTag}\\n${selectedCode}\\n\\`\\`\\``;\n\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: {\n lines: sortedLines,\n ...(language !== undefined && { language }),\n },\n serialized,\n });\n }\n}\n\nexport function createCodeRenderer(): CodeRenderer {\n return new CodeRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface DiffLine {\n type: 'add' | 'remove' | 'context';\n content: string;\n}\n\nexport interface DiffHunk {\n header: string;\n lines: DiffLine[];\n}\n\nexport interface DiffData {\n hunks: DiffHunk[];\n filename?: string;\n language?: string;\n}\n\ntype ViewMode = 'unified' | 'side-by-side';\n\nexport class DiffRenderer extends BaseRenderer<DiffData> {\n private viewMode: ViewMode = 'unified';\n private selectedHunks = new Set<number>();\n\n render(block: ContentBlock<DiffData>, container: HTMLElement): void {\n this.container = container;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<DiffData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _build(block: ContentBlock<DiffData>): void {\n const container = this.container!;\n const { hunks, filename } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = `blex-diff blex-diff--${this.viewMode}`;\n wrapper.setAttribute('data-testid', `blex-diff-${block.id}`);\n\n // Header\n const header = document.createElement('div');\n header.className = 'blex-diff__header';\n if (filename) {\n header.textContent = filename;\n }\n wrapper.appendChild(header);\n\n // Hunks container\n const hunksContainer = document.createElement('div');\n hunksContainer.className = 'blex-diff__hunks';\n\n hunks.forEach((hunk, index) => {\n const hunkEl = document.createElement('div');\n hunkEl.className = 'blex-diff__hunk';\n if (this.selectedHunks.has(index)) {\n hunkEl.classList.add('blex-diff__hunk--selected');\n }\n\n // Hunk header line\n const hunkHeader = document.createElement('div');\n hunkHeader.className = 'blex-diff__hunk-header';\n hunkHeader.setAttribute('data-testid', `blex-diff-hunk-${index}`);\n hunkHeader.textContent = hunk.header;\n\n this.addListener(hunkHeader, 'click', () => {\n if (this.selectedHunks.has(index)) {\n this.selectedHunks.delete(index);\n hunkEl.classList.remove('blex-diff__hunk--selected');\n } else {\n this.selectedHunks.add(index);\n hunkEl.classList.add('blex-diff__hunk--selected');\n }\n });\n\n hunkEl.appendChild(hunkHeader);\n\n // Lines\n for (const line of hunk.lines) {\n const lineEl = document.createElement('div');\n lineEl.className = `blex-diff__line blex-diff__line--${line.type}`;\n lineEl.textContent = line.content;\n hunkEl.appendChild(lineEl);\n }\n\n hunksContainer.appendChild(hunkEl);\n });\n\n wrapper.appendChild(hunksContainer);\n\n // Actions bar\n const actions = document.createElement('div');\n actions.className = 'blex-diff__actions';\n\n // Toggle button\n const toggleBtn = document.createElement('button');\n toggleBtn.className = 'blex-diff__toggle';\n toggleBtn.setAttribute('data-testid', `blex-diff-toggle-${block.id}`);\n toggleBtn.textContent = this.viewMode === 'unified' ? 'Side by side' : 'Unified';\n\n this.addListener(toggleBtn, 'click', () => {\n this.viewMode = this.viewMode === 'unified' ? 'side-by-side' : 'unified';\n wrapper.className = `blex-diff blex-diff--${this.viewMode}`;\n toggleBtn.textContent = this.viewMode === 'unified' ? 'Side by side' : 'Unified';\n });\n\n actions.appendChild(toggleBtn);\n\n // Apply button\n const applyBtn = document.createElement('button');\n applyBtn.className = 'blex-diff__apply';\n applyBtn.setAttribute('data-testid', `blex-diff-apply-${block.id}`);\n applyBtn.textContent = 'Apply';\n\n this.addListener(applyBtn, 'click', () => {\n this.emit({\n blockId: block.id,\n type: 'apply',\n payload: { hunks },\n serialized: `Applied diff to ${filename ?? 'file'}`,\n });\n });\n\n actions.appendChild(applyBtn);\n\n // Reject button\n const rejectBtn = document.createElement('button');\n rejectBtn.className = 'blex-diff__reject';\n rejectBtn.setAttribute('data-testid', `blex-diff-reject-${block.id}`);\n rejectBtn.textContent = 'Reject';\n\n this.addListener(rejectBtn, 'click', () => {\n this.emit({\n blockId: block.id,\n type: 'reject',\n payload: { hunks },\n serialized: `Rejected diff to ${filename ?? 'file'}`,\n });\n });\n\n actions.appendChild(rejectBtn);\n\n wrapper.appendChild(actions);\n container.appendChild(wrapper);\n }\n}\n\nexport function createDiffRenderer(): DiffRenderer {\n return new DiffRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface FileTreeNode {\n name: string;\n type: 'file' | 'directory';\n size?: number;\n children?: FileTreeNode[];\n}\n\nexport interface FileTreeData {\n root: FileTreeNode;\n expanded?: string[];\n}\n\nexport class FileTreeRenderer extends BaseRenderer<FileTreeData> {\n private expandedPaths = new Set<string>();\n private selectedPaths = new Set<string>();\n\n render(block: ContentBlock<FileTreeData>, container: HTMLElement): void {\n this.container = container;\n if (block.data.expanded) {\n for (const p of block.data.expanded) this.expandedPaths.add(p);\n }\n this.buildTree(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<FileTreeData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.buildTree(block);\n }\n\n private buildTree(block: ContentBlock<FileTreeData>): void {\n const container = this.container!;\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-file-tree';\n wrapper.setAttribute('data-testid', `blex-file-tree-${block.id}`);\n\n const ul = this.buildNode(block.data.root, '', block);\n wrapper.appendChild(ul);\n container.appendChild(wrapper);\n }\n\n private buildNode(node: FileTreeNode, parentPath: string, block: ContentBlock<FileTreeData>): HTMLElement {\n const path = parentPath ? `${parentPath}/${node.name}` : node.name;\n const li = document.createElement('div');\n li.className = `blex-file-tree__node blex-file-tree__node--${node.type}`;\n li.setAttribute('data-testid', `blex-file-tree-node-${path.replace(/\\//g, '-')}`);\n\n if (this.selectedPaths.has(path)) {\n li.classList.add('blex-file-tree__node--selected');\n }\n\n const label = document.createElement('span');\n label.className = 'blex-file-tree__label';\n label.textContent = node.name;\n\n if (node.type === 'directory') {\n const isExpanded = this.expandedPaths.has(path);\n const toggle = document.createElement('span');\n toggle.className = 'blex-file-tree__toggle';\n toggle.textContent = isExpanded ? '▼' : '▶';\n\n this.addListener(toggle, 'click', (e) => {\n e.stopPropagation();\n if (this.expandedPaths.has(path)) {\n this.expandedPaths.delete(path);\n } else {\n this.expandedPaths.add(path);\n }\n this.container!.innerHTML = '';\n this.buildTree(block);\n });\n\n li.appendChild(toggle);\n li.appendChild(label);\n\n if (isExpanded && node.children) {\n const childContainer = document.createElement('div');\n childContainer.className = 'blex-file-tree__children';\n for (const child of node.children) {\n childContainer.appendChild(this.buildNode(child, path, block));\n }\n li.appendChild(childContainer);\n }\n } else {\n li.appendChild(label);\n if (node.size !== undefined) {\n const sizeEl = document.createElement('span');\n sizeEl.className = 'blex-file-tree__size';\n sizeEl.textContent = this.formatSize(node.size);\n li.appendChild(sizeEl);\n }\n }\n\n // Click to select/deselect\n this.addListener(label, 'click', () => {\n if (this.selectedPaths.has(path)) {\n this.selectedPaths.delete(path);\n li.classList.remove('blex-file-tree__node--selected');\n } else {\n this.selectedPaths.add(path);\n li.classList.add('blex-file-tree__node--selected');\n }\n this.emitSelection(block);\n });\n\n return li;\n }\n\n private emitSelection(block: ContentBlock<FileTreeData>): void {\n const paths = Array.from(this.selectedPaths).sort();\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: { paths },\n serialized: `Selected files:\\n${paths.join('\\n')}`,\n });\n }\n\n private formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1048576) return `${(bytes / 1024).toFixed(1)}KB`;\n return `${(bytes / 1048576).toFixed(1)}MB`;\n }\n}\n\nexport function createFileTreeRenderer(): FileTreeRenderer {\n return new FileTreeRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface FormField {\n name: string;\n label: string;\n type: 'text' | 'number' | 'email' | 'textarea' | 'select' | 'checkbox' | 'date';\n required?: boolean;\n placeholder?: string;\n options?: string[];\n defaultValue?: string | number | boolean;\n}\n\nexport interface FormData {\n title?: string;\n fields: FormField[];\n submitLabel?: string;\n}\n\nexport class FormRenderer extends BaseRenderer<FormData> {\n private values: Record<string, unknown> = {};\n private errors: Record<string, string> = {};\n\n render(block: ContentBlock<FormData>, container: HTMLElement): void {\n this.container = container;\n // Initialize defaults\n for (const field of block.data.fields) {\n if (field.defaultValue !== undefined) {\n this.values[field.name] = field.defaultValue;\n }\n }\n this.buildForm(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<FormData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.buildForm(block);\n }\n\n private buildForm(block: ContentBlock<FormData>): void {\n const container = this.container!;\n const { title, fields, submitLabel } = block.data;\n\n const form = document.createElement('form');\n form.className = 'blex-form';\n form.setAttribute('data-testid', `blex-form-${block.id}`);\n\n this.addListener(form, 'submit', (e) => {\n e.preventDefault();\n if (this.validate(fields)) {\n const serializedPairs = Object.entries(this.values)\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n\n this.emit({\n blockId: block.id,\n type: 'submit',\n payload: { ...this.values },\n serialized: `Form submission${title ? ` (${title})` : ''}:\\n${serializedPairs}`,\n });\n } else {\n this.container!.innerHTML = '';\n this.buildForm(block);\n }\n });\n\n if (title) {\n const titleEl = document.createElement('div');\n titleEl.className = 'blex-form__title';\n titleEl.textContent = title;\n form.appendChild(titleEl);\n }\n\n for (const field of fields) {\n const group = document.createElement('div');\n group.className = 'blex-form__field';\n\n const label = document.createElement('label');\n label.className = 'blex-form__label';\n label.textContent = field.label + (field.required ? ' *' : '');\n group.appendChild(label);\n\n const input = this.createInput(field);\n group.appendChild(input);\n\n if (this.errors[field.name]) {\n const error = document.createElement('span');\n error.className = 'blex-form__error';\n error.textContent = this.errors[field.name];\n group.appendChild(error);\n }\n\n form.appendChild(group);\n }\n\n const submit = document.createElement('button');\n submit.type = 'submit';\n submit.className = 'blex-form__submit';\n submit.textContent = submitLabel ?? 'Submit';\n submit.setAttribute('data-testid', `blex-form-submit-${block.id}`);\n form.appendChild(submit);\n\n container.appendChild(form);\n }\n\n private createInput(field: FormField): HTMLElement {\n const testId = `blex-form-field-${field.name}`;\n\n if (field.type === 'textarea') {\n const textarea = document.createElement('textarea');\n textarea.className = 'blex-form__input';\n textarea.name = field.name;\n textarea.placeholder = field.placeholder ?? '';\n textarea.required = field.required ?? false;\n textarea.value = String(this.values[field.name] ?? '');\n textarea.setAttribute('data-testid', testId);\n this.addListener(textarea, 'input', () => {\n this.values[field.name] = textarea.value;\n });\n return textarea;\n }\n\n if (field.type === 'select') {\n const select = document.createElement('select');\n select.className = 'blex-form__input';\n select.name = field.name;\n select.required = field.required ?? false;\n select.setAttribute('data-testid', testId);\n\n const emptyOpt = document.createElement('option');\n emptyOpt.value = '';\n emptyOpt.textContent = field.placeholder ?? 'Select...';\n select.appendChild(emptyOpt);\n\n for (const opt of field.options ?? []) {\n const optEl = document.createElement('option');\n optEl.value = opt;\n optEl.textContent = opt;\n if (this.values[field.name] === opt) optEl.selected = true;\n select.appendChild(optEl);\n }\n\n this.addListener(select, 'change', () => {\n this.values[field.name] = select.value;\n });\n return select;\n }\n\n if (field.type === 'checkbox') {\n const input = document.createElement('input');\n input.type = 'checkbox';\n input.className = 'blex-form__checkbox';\n input.name = field.name;\n input.checked = Boolean(this.values[field.name]);\n input.setAttribute('data-testid', testId);\n this.addListener(input, 'change', () => {\n this.values[field.name] = input.checked;\n });\n return input;\n }\n\n const input = document.createElement('input');\n input.type = field.type;\n input.className = 'blex-form__input';\n input.name = field.name;\n input.placeholder = field.placeholder ?? '';\n input.required = field.required ?? false;\n input.value = String(this.values[field.name] ?? '');\n input.setAttribute('data-testid', testId);\n this.addListener(input, 'input', () => {\n this.values[field.name] = field.type === 'number' ? Number(input.value) : input.value;\n });\n return input;\n }\n\n private validate(fields: FormField[]): boolean {\n this.errors = {};\n let valid = true;\n for (const field of fields) {\n if (field.required) {\n const val = this.values[field.name];\n if (val === undefined || val === '' || val === null) {\n this.errors[field.name] = `${field.label} is required`;\n valid = false;\n }\n }\n }\n return valid;\n }\n}\n\nexport function createFormRenderer(): FormRenderer {\n return new FormRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface ProgressStep {\n label: string;\n status: 'completed' | 'active' | 'pending';\n description?: string;\n}\n\nexport interface ProgressData {\n title?: string;\n steps: ProgressStep[];\n}\n\nexport class ProgressRenderer extends BaseRenderer<ProgressData> {\n render(block: ContentBlock<ProgressData>, container: HTMLElement): void {\n this.container = container;\n this.renderContent(block);\n }\n\n update(block: ContentBlock<ProgressData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.renderContent(block);\n }\n\n private renderContent(block: ContentBlock<ProgressData>): void {\n const container = this.container!;\n const { title, steps } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-progress';\n wrapper.setAttribute('data-testid', `blex-progress-${block.id}`);\n\n if (title) {\n const titleEl = document.createElement('div');\n titleEl.className = 'blex-progress__title';\n titleEl.textContent = title;\n wrapper.appendChild(titleEl);\n }\n\n const stepsEl = document.createElement('div');\n stepsEl.className = 'blex-progress__steps';\n\n steps.forEach((step, i) => {\n const stepEl = document.createElement('div');\n stepEl.className = `blex-progress__step blex-progress__step--${step.status}`;\n stepEl.setAttribute('data-testid', `blex-progress-step-${i}`);\n\n const indicator = document.createElement('span');\n indicator.className = 'blex-progress__indicator';\n if (step.status === 'completed') {\n indicator.textContent = '✓';\n } else if (step.status === 'active') {\n indicator.textContent = '●';\n } else {\n indicator.textContent = '○';\n }\n stepEl.appendChild(indicator);\n\n const content = document.createElement('div');\n content.className = 'blex-progress__content';\n\n const labelEl = document.createElement('span');\n labelEl.className = 'blex-progress__label';\n labelEl.textContent = step.label;\n content.appendChild(labelEl);\n\n if (step.description) {\n const desc = document.createElement('span');\n desc.className = 'blex-progress__description';\n desc.textContent = step.description;\n content.appendChild(desc);\n }\n\n stepEl.appendChild(content);\n stepsEl.appendChild(stepEl);\n });\n\n wrapper.appendChild(stepsEl);\n container.appendChild(wrapper);\n container.setAttribute('data-blex-ready', 'true');\n }\n}\n\nexport function createProgressRenderer(): ProgressRenderer {\n return new ProgressRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface TerminalData {\n command?: string;\n output: string;\n exitCode?: number;\n collapsed?: boolean;\n}\n\n// Basic ANSI color code mapping\nconst ANSI_COLORS: Record<string, string> = {\n '30': 'color: #1a1a1a', '31': 'color: #ef4444', '32': 'color: #22c55e',\n '33': 'color: #f59e0b', '34': 'color: #3b82f6', '35': 'color: #a855f7',\n '36': 'color: #06b6d4', '37': 'color: #e5e5e5',\n '1': 'font-weight: bold', '0': '',\n};\n\nexport class TerminalRenderer extends BaseRenderer<TerminalData> {\n render(block: ContentBlock<TerminalData>, container: HTMLElement): void {\n this.container = container;\n this.renderContent(block);\n }\n\n update(block: ContentBlock<TerminalData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.renderContent(block);\n }\n\n private renderContent(block: ContentBlock<TerminalData>): void {\n const container = this.container!;\n const { command, output, exitCode, collapsed } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-terminal';\n wrapper.setAttribute('data-testid', `blex-terminal-${block.id}`);\n\n if (exitCode !== undefined) {\n wrapper.setAttribute('data-exit-code', String(exitCode));\n }\n\n // Command header\n if (command) {\n const cmdEl = document.createElement('div');\n cmdEl.className = 'blex-terminal__command';\n cmdEl.setAttribute('data-testid', `blex-terminal-command-${block.id}`);\n\n const prompt = document.createElement('span');\n prompt.className = 'blex-terminal__prompt';\n prompt.textContent = '$ ';\n cmdEl.appendChild(prompt);\n\n const cmdText = document.createElement('span');\n cmdText.textContent = command;\n cmdEl.appendChild(cmdText);\n\n wrapper.appendChild(cmdEl);\n }\n\n // Output (collapsible)\n const outputEl = document.createElement('pre');\n outputEl.className = 'blex-terminal__output';\n outputEl.setAttribute('data-testid', `blex-terminal-output-${block.id}`);\n outputEl.innerHTML = this.parseAnsi(output);\n\n if (collapsed) {\n outputEl.style.display = 'none';\n const toggleBtn = document.createElement('button');\n toggleBtn.className = 'blex-terminal__toggle';\n toggleBtn.textContent = 'Show output';\n toggleBtn.setAttribute('data-testid', `blex-terminal-toggle-${block.id}`);\n this.addListener(toggleBtn, 'click', () => {\n const isHidden = outputEl.style.display === 'none';\n outputEl.style.display = isHidden ? 'block' : 'none';\n toggleBtn.textContent = isHidden ? 'Hide output' : 'Show output';\n });\n wrapper.appendChild(toggleBtn);\n }\n\n wrapper.appendChild(outputEl);\n\n // Exit code badge\n if (exitCode !== undefined) {\n const badge = document.createElement('span');\n badge.className = `blex-terminal__exit-code blex-terminal__exit-code--${exitCode === 0 ? 'success' : 'error'}`;\n badge.textContent = `exit ${exitCode}`;\n badge.setAttribute('data-testid', `blex-terminal-exit-${block.id}`);\n wrapper.appendChild(badge);\n }\n\n // Copy button\n const copyBtn = document.createElement('button');\n copyBtn.className = 'blex-terminal__copy';\n copyBtn.textContent = 'Copy';\n copyBtn.setAttribute('data-testid', `blex-terminal-copy-${block.id}`);\n this.addListener(copyBtn, 'click', () => {\n navigator.clipboard?.writeText(output);\n this.emit({\n blockId: block.id,\n type: 'click',\n payload: { action: 'copy' },\n serialized: `Copied terminal output${command ? ` from: ${command}` : ''}`,\n });\n });\n wrapper.appendChild(copyBtn);\n\n container.appendChild(wrapper);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n private parseAnsi(text: string): string {\n // Replace ANSI escape codes with span elements\n return text.replace(/\\x1b\\[([0-9;]*)m/g, (_match, codes: string) => {\n if (codes === '0' || codes === '') return '</span>';\n const styles = codes.split(';')\n .map((c: string) => ANSI_COLORS[c] || '')\n .filter(Boolean)\n .join('; ');\n return styles ? `<span style=\"${styles}\">` : '';\n });\n }\n}\n\nexport function createTerminalRenderer(): TerminalRenderer {\n return new TerminalRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface TimelineEvent {\n timestamp: string;\n title: string;\n description?: string;\n icon?: string;\n color?: string;\n}\n\nexport interface TimelineData {\n events: TimelineEvent[];\n title?: string;\n}\n\nexport class TimelineRenderer extends BaseRenderer<TimelineData> {\n render(block: ContentBlock<TimelineData>, container: HTMLElement): void {\n this.container = container;\n this.renderContent(block);\n }\n\n update(block: ContentBlock<TimelineData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this.renderContent(block);\n }\n\n private renderContent(block: ContentBlock<TimelineData>): void {\n const container = this.container!;\n const { events, title } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-timeline';\n wrapper.setAttribute('data-testid', `blex-timeline-${block.id}`);\n\n if (title) {\n const titleEl = document.createElement('div');\n titleEl.className = 'blex-timeline__title';\n titleEl.textContent = title;\n wrapper.appendChild(titleEl);\n }\n\n const list = document.createElement('div');\n list.className = 'blex-timeline__list';\n\n events.forEach((event, i) => {\n const item = document.createElement('div');\n item.className = 'blex-timeline__item';\n item.setAttribute('data-testid', `blex-timeline-item-${i}`);\n\n const dot = document.createElement('span');\n dot.className = 'blex-timeline__dot';\n if (event.color) {\n dot.style.backgroundColor = event.color;\n }\n if (event.icon) {\n dot.textContent = event.icon;\n }\n item.appendChild(dot);\n\n const content = document.createElement('div');\n content.className = 'blex-timeline__content';\n\n const time = document.createElement('time');\n time.className = 'blex-timeline__time';\n time.textContent = event.timestamp;\n content.appendChild(time);\n\n const eventTitle = document.createElement('div');\n eventTitle.className = 'blex-timeline__event-title';\n eventTitle.textContent = event.title;\n content.appendChild(eventTitle);\n\n if (event.description) {\n const desc = document.createElement('div');\n desc.className = 'blex-timeline__description';\n desc.textContent = event.description;\n content.appendChild(desc);\n }\n\n item.appendChild(content);\n list.appendChild(item);\n });\n\n wrapper.appendChild(list);\n container.appendChild(wrapper);\n container.setAttribute('data-blex-ready', 'true');\n }\n}\n\nexport function createTimelineRenderer(): TimelineRenderer {\n return new TimelineRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\nimport { renderBlock } from '../render.js';\nimport type { BlockHandle } from '../types.js';\n\nexport interface LayoutData {\n type: 'grid' | 'columns';\n columns?: number;\n gap?: string;\n children: ContentBlock[];\n}\n\nexport class LayoutRenderer extends BaseRenderer<LayoutData> {\n private childHandles: BlockHandle[] = [];\n\n render(block: ContentBlock<LayoutData>, container: HTMLElement): void {\n this.container = container;\n this.buildLayout(block);\n }\n\n update(block: ContentBlock<LayoutData>): void {\n if (!this.container) return;\n // Destroy old children first\n for (const handle of this.childHandles) {\n handle.destroy();\n }\n this.childHandles = [];\n this.container.innerHTML = '';\n this.buildLayout(block);\n }\n\n private async buildLayout(block: ContentBlock<LayoutData>): Promise<void> {\n const container = this.container!;\n const { type, columns, gap, children } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = 'blex-layout';\n wrapper.setAttribute('data-testid', `blex-layout-${block.id}`);\n\n if (type === 'grid') {\n wrapper.style.display = 'grid';\n wrapper.style.gridTemplateColumns = `repeat(${columns ?? 2}, 1fr)`;\n } else {\n wrapper.style.display = 'flex';\n }\n\n if (gap) {\n wrapper.style.gap = gap;\n }\n\n container.appendChild(wrapper);\n\n // Render each child block into its own container\n for (const child of children) {\n const childContainer = document.createElement('div');\n childContainer.className = 'blex-layout__child';\n wrapper.appendChild(childContainer);\n\n const handle = await renderBlock(child, childContainer);\n this.childHandles.push(handle);\n }\n\n container.setAttribute('data-blex-ready', 'true');\n }\n\n destroy(): void {\n for (const handle of this.childHandles) {\n handle.destroy();\n }\n this.childHandles = [];\n super.destroy();\n }\n}\n\nexport function createLayoutRenderer(): LayoutRenderer {\n return new LayoutRenderer();\n}\n","import { registerBlockType, registerLazyBlockType, markBuiltIn } from './registry.js';\nimport { createConfirmRenderer } from './renderers/confirm.js';\nimport { createPollRenderer } from './renderers/poll.js';\nimport { createStatusRenderer } from './renderers/status.js';\nimport { createMetricRenderer } from './renderers/metric.js';\nimport { createImageRenderer } from './renderers/image.js';\nimport { createSvgRenderer } from './renderers/svg.js';\nimport { createTableRenderer } from './renderers/table.js';\nimport { createCodeRenderer } from './renderers/code.js';\nimport { createDiffRenderer } from './renderers/diff.js';\nimport { createFileTreeRenderer } from './renderers/file-tree.js';\nimport { createFormRenderer } from './renderers/form.js';\nimport { createProgressRenderer } from './renderers/progress.js';\nimport { createTerminalRenderer } from './renderers/terminal.js';\nimport { createTimelineRenderer } from './renderers/timeline.js';\nimport { createLayoutRenderer } from './renderers/layout.js';\n\n/**\n * Register all built-in block types.\n * Called once on first import of the main entry point.\n */\nexport function registerDefaults(): void {\n // Phase 2: Core blocks — bundled inline\n registerBlockType('confirm', createConfirmRenderer);\n registerBlockType('poll', createPollRenderer);\n registerBlockType('status', createStatusRenderer);\n registerBlockType('metric', createMetricRenderer);\n registerBlockType('image', createImageRenderer);\n registerBlockType('svg', createSvgRenderer);\n registerBlockType('table', createTableRenderer);\n registerBlockType('code', createCodeRenderer);\n registerBlockType('diff', createDiffRenderer);\n\n // Phase 3: Extended blocks — bundled inline\n registerBlockType('file-tree', createFileTreeRenderer);\n registerBlockType('form', createFormRenderer);\n registerBlockType('progress', createProgressRenderer);\n registerBlockType('terminal', createTerminalRenderer);\n registerBlockType('timeline', createTimelineRenderer);\n registerBlockType('layout', createLayoutRenderer);\n\n // Lazy-loaded blocks — loaded on first use\n registerLazyBlockType('mermaid', async () => {\n const { createMermaidRenderer } = await import('./renderers/mermaid.js');\n return createMermaidRenderer;\n });\n\n registerLazyBlockType('chart', async () => {\n const { createChartRenderer } = await import('./renderers/chart.js');\n return createChartRenderer;\n });\n\n // Phase 5: Application blocks — lazy-loaded\n registerLazyBlockType('kanban', async () => {\n const { createKanbanRenderer } = await import('./renderers/kanban.js');\n return createKanbanRenderer;\n });\n\n registerLazyBlockType('calendar', async () => {\n const { createCalendarRenderer } = await import('./renderers/calendar.js');\n return createCalendarRenderer;\n });\n\n registerLazyBlockType('gallery', async () => {\n const { createGalleryRenderer } = await import('./renderers/gallery.js');\n return createGalleryRenderer;\n });\n\n // Mark all built-in types as protected\n const builtIns = [\n 'confirm', 'poll', 'status', 'metric', 'image', 'svg', 'table', 'code', 'diff',\n 'file-tree', 'form', 'progress', 'terminal', 'timeline', 'layout',\n 'mermaid', 'chart', 'kanban', 'calendar', 'gallery',\n ];\n for (const type of builtIns) {\n markBuiltIn(type);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/renderers/gallery.ts"],"names":[],"mappings":"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","file":"gallery-ISM7FZA3.js","sourcesContent":["import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface GalleryImage {\n url: string;\n alt?: string;\n caption?: string;\n}\n\nexport interface GalleryData {\n images: GalleryImage[];\n layout?: 'grid' | 'carousel';\n columns?: number;\n}\n\nexport class GalleryRenderer extends BaseRenderer<GalleryData> {\n private currentIndex = 0;\n\n render(block: ContentBlock<GalleryData>, container: HTMLElement): void {\n this.container = container;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<GalleryData>): void {\n if (!this.container) return;\n this.currentIndex = 0;\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _build(block: ContentBlock<GalleryData>): void {\n const container = this.container!;\n const { images, layout = 'grid', columns = 3 } = block.data;\n\n const wrapper = document.createElement('div');\n wrapper.className = `blex-gallery blex-gallery--${layout}`;\n wrapper.setAttribute('data-testid', `blex-gallery-${block.id}`);\n\n if (layout === 'carousel') {\n this._buildCarousel(wrapper, block, images);\n } else {\n this._buildGrid(wrapper, block, images, columns);\n }\n\n container.appendChild(wrapper);\n }\n\n private _buildGrid(\n wrapper: HTMLElement,\n block: ContentBlock<GalleryData>,\n images: GalleryImage[],\n columns: number,\n ): void {\n wrapper.style.setProperty('--blex-gallery-columns', String(columns));\n\n images.forEach((image, index) => {\n const item = this._createItem(block, image, index);\n wrapper.appendChild(item);\n });\n\n // IntersectionObserver for lazy loading in grid layout\n if (typeof IntersectionObserver !== 'undefined') {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n const img = entry.target as HTMLImageElement;\n const lazySrc = img.getAttribute('data-lazy-src');\n if (lazySrc) {\n img.src = lazySrc;\n img.removeAttribute('data-lazy-src');\n observer.unobserve(img);\n }\n }\n }\n });\n\n this.trackObserver(observer);\n\n wrapper.querySelectorAll<HTMLImageElement>('.blex-gallery__img').forEach((img) => {\n observer.observe(img);\n });\n }\n }\n\n private _buildCarousel(\n wrapper: HTMLElement,\n block: ContentBlock<GalleryData>,\n images: GalleryImage[],\n ): void {\n // Render all items; visibility is managed via CSS/aria\n images.forEach((image, index) => {\n const item = this._createItem(block, image, index);\n if (index !== this.currentIndex) {\n item.style.display = 'none';\n }\n wrapper.appendChild(item);\n });\n\n // Navigation bar\n const nav = document.createElement('div');\n nav.className = 'blex-gallery__nav';\n\n const prevBtn = document.createElement('button');\n prevBtn.className = 'blex-gallery__nav-btn';\n prevBtn.textContent = 'Previous';\n prevBtn.setAttribute('data-testid', `blex-gallery-prev-${block.id}`);\n\n const nextBtn = document.createElement('button');\n nextBtn.className = 'blex-gallery__nav-btn';\n nextBtn.textContent = 'Next';\n nextBtn.setAttribute('data-testid', `blex-gallery-next-${block.id}`);\n\n this.addListener(prevBtn, 'click', () => {\n this._showCarouselItem(wrapper, images, this.currentIndex - 1);\n });\n\n this.addListener(nextBtn, 'click', () => {\n this._showCarouselItem(wrapper, images, this.currentIndex + 1);\n });\n\n nav.appendChild(prevBtn);\n nav.appendChild(nextBtn);\n wrapper.appendChild(nav);\n }\n\n private _showCarouselItem(\n wrapper: HTMLElement,\n images: GalleryImage[],\n newIndex: number,\n ): void {\n const clamped = Math.max(0, Math.min(images.length - 1, newIndex));\n if (clamped === this.currentIndex) return;\n\n const items = wrapper.querySelectorAll<HTMLElement>('.blex-gallery__item');\n const current = items[this.currentIndex];\n const next = items[clamped];\n\n if (current) current.style.display = 'none';\n if (next) next.style.display = '';\n\n this.currentIndex = clamped;\n }\n\n private _createItem(\n block: ContentBlock<GalleryData>,\n image: GalleryImage,\n index: number,\n ): HTMLElement {\n const item = document.createElement('figure');\n item.className = 'blex-gallery__item';\n item.setAttribute('data-testid', `blex-gallery-item-${index}`);\n\n const img = document.createElement('img');\n img.className = 'blex-gallery__img';\n img.alt = image.alt ?? '';\n img.loading = 'lazy';\n img.src = image.url;\n\n this.addListener(img, 'click', () => {\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: { imageIndex: index, url: image.url },\n serialized: `Selected image ${index + 1}: ${image.caption ?? image.url}`,\n });\n });\n\n item.appendChild(img);\n\n if (image.caption) {\n const caption = document.createElement('figcaption');\n caption.className = 'blex-gallery__caption';\n caption.textContent = image.caption;\n item.appendChild(caption);\n }\n\n return item;\n }\n}\n\nexport function createGalleryRenderer(): GalleryRenderer {\n return new GalleryRenderer();\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/renderers/kanban.ts"],"names":[],"mappings":"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","file":"kanban-XUXVTRX2.js","sourcesContent":["import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock } from '../types.js';\n\nexport interface KanbanItem {\n id: string;\n title: string;\n subtitle?: string;\n tags?: string[];\n}\n\nexport interface KanbanColumn {\n id: string;\n title: string;\n items: KanbanItem[];\n}\n\nexport interface KanbanData {\n columns: KanbanColumn[];\n draggable?: boolean;\n}\n\nexport class KanbanRenderer extends BaseRenderer<KanbanData> {\n // Class fields for drag state — dataTransfer is unreliable in jsdom\n draggedItemId: string | null = null;\n draggedFromColumn: string | null = null;\n draggedItemTitle: string | null = null;\n\n render(block: ContentBlock<KanbanData>, container: HTMLElement): void {\n this.container = container;\n this._build(block);\n container.setAttribute('data-blex-ready', 'true');\n }\n\n update(block: ContentBlock<KanbanData>): void {\n if (!this.container) return;\n this.container.innerHTML = '';\n this._build(block);\n }\n\n private _build(block: ContentBlock<KanbanData>): void {\n const container = this.container!;\n const { columns, draggable = true } = block.data;\n\n const board = document.createElement('div');\n board.className = 'blex-kanban';\n board.setAttribute('data-testid', `blex-kanban-${block.id}`);\n\n for (const col of columns) {\n const colEl = this._buildColumn(col, draggable, block);\n board.appendChild(colEl);\n }\n\n container.appendChild(board);\n }\n\n private _buildColumn(\n col: KanbanColumn,\n draggable: boolean,\n block: ContentBlock<KanbanData>,\n ): HTMLElement {\n const colEl = document.createElement('div');\n colEl.className = 'blex-kanban__column';\n colEl.setAttribute('data-testid', `blex-kanban-col-${col.id}`);\n\n const titleEl = document.createElement('div');\n titleEl.className = 'blex-kanban__column-title';\n titleEl.textContent = col.title;\n colEl.appendChild(titleEl);\n\n for (const item of col.items) {\n const itemEl = this._buildItem(item, col.id, draggable);\n colEl.appendChild(itemEl);\n }\n\n if (draggable) {\n this.addListener(colEl, 'dragover', (e) => {\n e.preventDefault();\n });\n\n this.addListener(colEl, 'drop', (e) => {\n e.preventDefault();\n\n if (\n this.draggedItemId === null ||\n this.draggedFromColumn === null ||\n this.draggedItemTitle === null\n ) {\n return;\n }\n\n // Count non-dragging items currently in this column to get drop position\n const existingItems = Array.from(\n colEl.querySelectorAll('.blex-kanban__item'),\n ).filter((el) => !el.classList.contains('blex-kanban__item--dragging'));\n const position = existingItems.length;\n\n const itemId = this.draggedItemId;\n const fromColumn = this.draggedFromColumn;\n const itemTitle = this.draggedItemTitle;\n const toColumn = col.id;\n\n // Reset drag state before emitting so re-entrant handlers see clean state\n this.draggedItemId = null;\n this.draggedFromColumn = null;\n this.draggedItemTitle = null;\n\n this.emit({\n blockId: block.id,\n type: 'move',\n payload: {\n itemId,\n fromColumn,\n toColumn,\n position,\n },\n serialized: `Moved \"${itemTitle}\" from ${fromColumn} to ${toColumn}`,\n });\n });\n }\n\n return colEl;\n }\n\n private _buildItem(\n item: KanbanItem,\n colId: string,\n draggable: boolean,\n ): HTMLElement {\n const itemEl = document.createElement('div');\n itemEl.className = 'blex-kanban__item';\n itemEl.setAttribute('data-testid', `blex-kanban-item-${item.id}`);\n\n if (draggable) {\n itemEl.setAttribute('draggable', 'true');\n\n this.addListener(itemEl, 'dragstart', () => {\n this.draggedItemId = item.id;\n this.draggedFromColumn = colId;\n this.draggedItemTitle = item.title;\n itemEl.classList.add('blex-kanban__item--dragging');\n });\n\n this.addListener(itemEl, 'dragend', () => {\n itemEl.classList.remove('blex-kanban__item--dragging');\n });\n }\n\n const titleEl = document.createElement('div');\n titleEl.className = 'blex-kanban__item-title';\n titleEl.textContent = item.title;\n itemEl.appendChild(titleEl);\n\n if (item.subtitle) {\n const subtitleEl = document.createElement('div');\n subtitleEl.className = 'blex-kanban__item-subtitle';\n subtitleEl.textContent = item.subtitle;\n itemEl.appendChild(subtitleEl);\n }\n\n if (item.tags && item.tags.length > 0) {\n const tagsEl = document.createElement('div');\n tagsEl.className = 'blex-kanban__item-tags';\n for (const tag of item.tags) {\n const tagEl = document.createElement('span');\n tagEl.textContent = tag;\n tagsEl.appendChild(tagEl);\n }\n itemEl.appendChild(tagsEl);\n }\n\n return itemEl;\n }\n}\n\nexport function createKanbanRenderer(): KanbanRenderer {\n return new KanbanRenderer();\n}\n"]}