@luckydraw/blex 0.1.2 → 0.1.3
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/blex.min.global.js +4 -4
- package/dist/blex.min.global.js.map +1 -1
- package/dist/esm/{chunk-JEYTN6MT.js → chunk-6QSZG6F7.js} +6 -3
- package/dist/esm/chunk-6QSZG6F7.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/{kanban-FLEZGRIE.js → kanban-GPGDSK7N.js} +37 -17
- package/dist/esm/kanban-GPGDSK7N.js.map +1 -0
- package/dist/esm/react/index.js +1 -1
- package/dist/esm/renderers/code.d.ts.map +1 -1
- package/dist/esm/renderers/file-tree.d.ts.map +1 -1
- package/dist/esm/renderers/kanban.d.ts +4 -0
- package/dist/esm/renderers/kanban.d.ts.map +1 -1
- package/dist/esm/renderers/table.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/esm/chunk-JEYTN6MT.js.map +0 -1
- package/dist/esm/kanban-FLEZGRIE.js.map +0 -1
|
@@ -1105,6 +1105,7 @@ var TableRenderer = class extends BaseRenderer {
|
|
|
1105
1105
|
container.appendChild(wrapper);
|
|
1106
1106
|
}
|
|
1107
1107
|
_emitSelection(block) {
|
|
1108
|
+
if (this.selectedRows.size === 0) return;
|
|
1108
1109
|
const { columns, rows } = block.data;
|
|
1109
1110
|
const selectedIndices = Array.from(this.selectedRows).sort((a, b) => a - b);
|
|
1110
1111
|
const selectedRows = selectedIndices.map((i) => rows[i]);
|
|
@@ -1251,6 +1252,7 @@ var CodeRenderer = class extends BaseRenderer {
|
|
|
1251
1252
|
}
|
|
1252
1253
|
}
|
|
1253
1254
|
_emitSelection(block, lines) {
|
|
1255
|
+
if (this.selectedLines.size === 0) return;
|
|
1254
1256
|
const { language } = block.data;
|
|
1255
1257
|
const sortedLines = Array.from(this.selectedLines).sort((a, b) => a - b);
|
|
1256
1258
|
const selectedCode = sortedLines.map((lineNum) => lines[lineNum - 1]).join("\n");
|
|
@@ -1487,6 +1489,7 @@ var FileTreeRenderer = class extends BaseRenderer {
|
|
|
1487
1489
|
return li;
|
|
1488
1490
|
}
|
|
1489
1491
|
emitSelection(block) {
|
|
1492
|
+
if (this.selectedPaths.size === 0) return;
|
|
1490
1493
|
const paths = Array.from(this.selectedPaths).sort();
|
|
1491
1494
|
const count = paths.length;
|
|
1492
1495
|
const lastPath = paths[paths.length - 1] ?? "";
|
|
@@ -1986,7 +1989,7 @@ function registerDefaults() {
|
|
|
1986
1989
|
return createChartRenderer;
|
|
1987
1990
|
});
|
|
1988
1991
|
registerLazyBlockType("kanban", async () => {
|
|
1989
|
-
const { createKanbanRenderer } = await import('./kanban-
|
|
1992
|
+
const { createKanbanRenderer } = await import('./kanban-GPGDSK7N.js');
|
|
1990
1993
|
return createKanbanRenderer;
|
|
1991
1994
|
});
|
|
1992
1995
|
registerLazyBlockType("calendar", async () => {
|
|
@@ -2025,5 +2028,5 @@ function registerDefaults() {
|
|
|
2025
2028
|
}
|
|
2026
2029
|
|
|
2027
2030
|
export { getRegisteredTypes, hasBlockType, isBuiltIn, registerBlockType, registerDefaults, registerLazyBlockType, renderBlock, unregisterBlockType };
|
|
2028
|
-
//# sourceMappingURL=chunk-
|
|
2029
|
-
//# sourceMappingURL=chunk-
|
|
2031
|
+
//# sourceMappingURL=chunk-6QSZG6F7.js.map
|
|
2032
|
+
//# sourceMappingURL=chunk-6QSZG6F7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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-6QSZG6F7.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/* ── Shared block base ── */\n.blex-confirm, .blex-poll, .blex-status, .blex-metric, .blex-image,\n.blex-mermaid, .blex-svg, .blex-form, .blex-progress, .blex-terminal,\n.blex-timeline, .blex-diff, .blex-file-tree, .blex-code {\n font-family: var(--blex-font-family);\n color: var(--blex-text);\n background: var(--blex-bg);\n border: 1px solid var(--blex-border);\n border-radius: 6px;\n padding: 12px 16px;\n line-height: 1.5;\n}\n\n/* ── Shared button styles ── */\n.blex-confirm__button, .blex-poll__submit, .blex-poll__option,\n.blex-diff__toggle, .blex-diff__apply, .blex-diff__reject,\n.blex-mermaid__btn, .blex-svg__btn, .blex-image__btn,\n.blex-terminal__toggle, .blex-terminal__copy, .blex-form__submit,\n.blex-calendar__view-btn, .blex-calendar__nav-btn, .blex-gallery__nav-btn {\n font-family: var(--blex-font-family);\n font-size: 13px;\n padding: 6px 12px;\n border: 1px solid var(--blex-border);\n border-radius: 4px;\n background: var(--blex-bg);\n color: var(--blex-text);\n cursor: pointer;\n transition: background var(--blex-animation-duration), border-color var(--blex-animation-duration);\n}\n.blex-confirm__button:hover, .blex-poll__submit:hover, .blex-poll__option:hover,\n.blex-diff__toggle:hover, .blex-mermaid__btn:hover, .blex-svg__btn:hover,\n.blex-image__btn:hover, .blex-terminal__toggle:hover, .blex-terminal__copy:hover,\n.blex-form__submit:hover, .blex-calendar__view-btn:hover, .blex-calendar__nav-btn:hover,\n.blex-gallery__nav-btn:hover {\n background: var(--blex-border);\n}\n\n/* ── confirm ── */\n.blex-confirm__message { margin: 0 0 12px; font-size: 14px; }\n.blex-confirm__buttons { display: flex; gap: 8px; flex-wrap: wrap; }\n\n/* ── poll ── */\n.blex-poll__question { margin: 0 0 12px; font-size: 14px; font-weight: 600; }\n.blex-poll__options { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; list-style: none; padding: 0; }\n.blex-poll__option { text-align: left; width: 100%; }\n.blex-poll__option--selected { background: var(--blex-accent); color: #fff; border-color: var(--blex-accent); }\n.blex-poll__option--selected:hover { background: var(--blex-accent); opacity: 0.9; }\n.blex-poll__writein {\n display: block; width: 100%; box-sizing: border-box; margin-bottom: 12px;\n padding: 8px 10px; border: 1px solid var(--blex-border); border-radius: 4px;\n font-family: var(--blex-font-family); font-size: 13px;\n background: var(--blex-bg); color: var(--blex-text);\n}\n.blex-poll__submit { background: var(--blex-accent); color: #fff; border-color: var(--blex-accent); }\n.blex-poll__submit:hover { opacity: 0.9; background: var(--blex-accent); }\n\n/* ── status ── */\n.blex-status { padding: 8px 12px; }\n.blex-status__entry {\n display: flex; align-items: center; gap: 8px;\n padding: 6px 0; border-bottom: 1px solid var(--blex-border);\n}\n.blex-status__entry:last-child { border-bottom: none; }\n.blex-status__key { font-size: 13px; font-weight: 600; min-width: 100px; }\n.blex-status__value { font-size: 13px; flex: 1; }\n.blex-status__indicator {\n width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0;\n}\n.blex-status__indicator--ok { background: var(--blex-success); }\n.blex-status__indicator--warning { background: var(--blex-warning); }\n.blex-status__indicator--error { background: var(--blex-error); }\n\n/* ── metric ── */\n.blex-metric { text-align: center; padding: 20px 16px; }\n.blex-metric__value { font-size: 36px; font-weight: 700; line-height: 1.2; }\n.blex-metric__label { font-size: 13px; opacity: 0.7; margin-top: 4px; }\n.blex-metric__trend { font-size: 14px; margin-top: 8px; font-weight: 500; }\n.blex-metric__trend--up { color: var(--blex-success); }\n.blex-metric__trend--down { color: var(--blex-error); }\n.blex-metric__trend--flat { color: var(--blex-warning); }\n\n/* ── image ── */\n.blex-image { padding: 0; overflow: hidden; text-align: center; }\n.blex-image__img { max-width: 100%; height: auto; display: block; margin: 0 auto; }\n.blex-image__caption { padding: 8px 12px; font-size: 13px; opacity: 0.8; }\n.blex-image__actions { display: flex; gap: 6px; padding: 8px 12px; justify-content: flex-end; }\n.blex-image__overlay {\n position: fixed; inset: 0; z-index: 9999;\n background: rgba(0,0,0,0.85); display: flex; align-items: center; justify-content: center; cursor: zoom-out;\n}\n.blex-image__overlay img { max-width: 95vw; max-height: 95vh; object-fit: contain; }\n\n/* ── mermaid ── */\n.blex-mermaid--loading .blex-mermaid__diagram { min-height: 100px; display: flex; align-items: center; justify-content: center; }\n.blex-mermaid__title { font-size: 14px; font-weight: 600; margin-bottom: 8px; }\n.blex-mermaid__diagram { overflow-x: auto; }\n.blex-mermaid__diagram svg { max-width: 100%; height: auto; }\n.blex-mermaid__diagram--error { color: var(--blex-error); font-size: 13px; }\n.blex-mermaid__source {\n margin-top: 8px; padding: 10px; border-radius: 4px;\n background: var(--blex-border); font-family: var(--blex-font-mono);\n font-size: 12px; white-space: pre-wrap; overflow-x: auto;\n}\n.blex-mermaid__actions { display: flex; gap: 6px; margin-top: 8px; }\n\n/* ── svg ── */\n.blex-svg__title { font-size: 14px; font-weight: 600; margin-bottom: 8px; }\n.blex-svg__content { overflow-x: auto; }\n.blex-svg__content svg { max-width: 100%; height: auto; }\n.blex-svg__actions { display: flex; gap: 6px; margin-top: 8px; }\n\n/* ── table ── */\n.blex-table { padding: 0; overflow-x: auto; }\n.blex-table table { width: 100%; border-collapse: collapse; font-size: 13px; }\n.blex-table__header { background: var(--blex-border); }\n.blex-table__header-cell {\n padding: 8px 12px; text-align: left; font-weight: 600; cursor: pointer;\n user-select: none; white-space: nowrap; border-bottom: 2px solid var(--blex-border);\n}\n.blex-table__header-cell:hover { background: rgba(0,0,0,0.05); }\n.blex-table__header-cell--sorted-asc::after { content: ' ▲'; font-size: 10px; }\n.blex-table__header-cell--sorted-desc::after { content: ' ▼'; font-size: 10px; }\n.blex-table__row { border-bottom: 1px solid var(--blex-border); cursor: pointer; }\n.blex-table__row:hover { background: rgba(0,0,0,0.03); }\n.blex-table__row--selected { background: color-mix(in srgb, var(--blex-accent) 12%, transparent); }\n.blex-table__cell { padding: 8px 12px; }\n\n/* ── chart ── */\n.blex-chart { border: 1px solid var(--blex-border); border-radius: 6px; padding: 12px; background: var(--blex-chart-bg); }\n.blex-chart canvas { width: 100% !important; height: auto !important; }\n\n/* ── code ── */\n.blex-code {\n padding: 0; margin: 0; position: relative; overflow: hidden;\n font-family: var(--blex-font-mono); font-size: 13px;\n background: var(--blex-bg); display: flex;\n}\n.blex-code__copy {\n position: absolute; top: 8px; right: 8px; z-index: 1;\n font-family: var(--blex-font-family); font-size: 12px;\n padding: 4px 8px; border: 1px solid var(--blex-border); border-radius: 4px;\n background: var(--blex-bg); color: var(--blex-text); cursor: pointer; opacity: 0.7;\n}\n.blex-code__copy:hover { opacity: 1; }\n.blex-code__gutter {\n padding: 12px 8px 12px 12px; text-align: right; user-select: none;\n color: var(--blex-text); opacity: 0.4; border-right: 1px solid var(--blex-border);\n flex-shrink: 0;\n}\n.blex-code__content { padding: 12px; overflow-x: auto; flex: 1; }\n.blex-code__line { display: block; min-height: 1.5em; padding: 0 4px; cursor: pointer; }\n.blex-code__line:hover { background: rgba(0,0,0,0.04); }\n.blex-code__line--highlighted { background: color-mix(in srgb, var(--blex-warning) 15%, transparent); }\n.blex-code__line--selected { background: color-mix(in srgb, var(--blex-accent) 15%, transparent); }\n.blex-code__line-number { display: block; min-height: 1.5em; }\n\n/* ── diff ── */\n.blex-diff__header { display: flex; gap: 8px; margin-bottom: 8px; align-items: center; flex-wrap: wrap; }\n.blex-diff__hunks { font-family: var(--blex-font-mono); font-size: 12px; overflow-x: auto; }\n.blex-diff__hunk { margin-bottom: 8px; border: 1px solid var(--blex-border); border-radius: 4px; overflow: hidden; }\n.blex-diff__hunk--selected { border-color: var(--blex-accent); }\n.blex-diff__hunk-header {\n padding: 6px 10px; background: var(--blex-border); font-size: 11px;\n cursor: pointer; user-select: none; font-weight: 600;\n}\n.blex-diff__line { display: block; padding: 1px 10px; white-space: pre-wrap; }\n.blex-diff__line--add { background: color-mix(in srgb, var(--blex-success) 15%, transparent); }\n.blex-diff__line--remove { background: color-mix(in srgb, var(--blex-error) 15%, transparent); }\n.blex-diff__line--context { }\n.blex-diff__actions { display: flex; gap: 6px; margin-top: 8px; }\n.blex-diff__apply { background: var(--blex-success); color: #fff; border-color: var(--blex-success); }\n.blex-diff__apply:hover { opacity: 0.9; background: var(--blex-success); }\n.blex-diff__reject { background: var(--blex-error); color: #fff; border-color: var(--blex-error); }\n.blex-diff__reject:hover { opacity: 0.9; background: var(--blex-error); }\n\n/* ── file-tree ── */\n.blex-file-tree { padding: 8px 0; }\n.blex-file-tree ul { list-style: none; padding: 0; margin: 0; }\n.blex-file-tree__children { padding-left: 20px; }\n.blex-file-tree__node { padding: 2px 0; }\n.blex-file-tree__label {\n display: inline-flex; align-items: center; gap: 4px; cursor: pointer;\n padding: 2px 6px; border-radius: 3px; font-size: 13px;\n}\n.blex-file-tree__label:hover { background: rgba(0,0,0,0.05); }\n.blex-file-tree__node--selected > .blex-file-tree__label { background: color-mix(in srgb, var(--blex-accent) 15%, transparent); }\n.blex-file-tree__node--directory > .blex-file-tree__label::before { content: '📁'; font-size: 14px; }\n.blex-file-tree__node--file > .blex-file-tree__label::before { content: '📄'; font-size: 14px; }\n.blex-file-tree__toggle {\n background: none; border: none; cursor: pointer; padding: 0 4px;\n font-size: 10px; color: var(--blex-text); opacity: 0.6;\n}\n.blex-file-tree__size { font-size: 11px; opacity: 0.5; margin-left: 8px; }\n\n/* ── form ── */\n.blex-form__title { font-size: 15px; font-weight: 600; margin-bottom: 12px; }\n.blex-form__field { margin-bottom: 12px; }\n.blex-form__label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 4px; }\n.blex-form__input {\n display: block; width: 100%; box-sizing: border-box;\n padding: 8px 10px; border: 1px solid var(--blex-border); border-radius: 4px;\n font-family: var(--blex-font-family); font-size: 13px;\n background: var(--blex-bg); color: var(--blex-text);\n}\n.blex-form__input:focus { outline: 2px solid var(--blex-accent); outline-offset: -1px; }\n.blex-form__checkbox { margin-right: 6px; }\n.blex-form__error { color: var(--blex-error); font-size: 12px; margin-top: 4px; }\n.blex-form__submit { margin-top: 8px; background: var(--blex-accent); color: #fff; border-color: var(--blex-accent); }\n.blex-form__submit:hover { opacity: 0.9; background: var(--blex-accent); }\n\n/* ── progress ── */\n.blex-progress__title { font-size: 14px; font-weight: 600; margin-bottom: 12px; }\n.blex-progress__steps { display: flex; flex-direction: column; gap: 0; position: relative; }\n.blex-progress__step {\n display: flex; align-items: flex-start; gap: 12px; padding: 8px 0;\n position: relative;\n}\n.blex-progress__step::before {\n content: ''; position: absolute; left: 11px; top: 28px; bottom: -8px;\n width: 2px; background: var(--blex-border);\n}\n.blex-progress__step:last-child::before { display: none; }\n.blex-progress__indicator {\n width: 24px; height: 24px; border-radius: 50%; flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n font-size: 12px; font-weight: 700; border: 2px solid var(--blex-border);\n background: var(--blex-bg); color: var(--blex-text); z-index: 1;\n}\n.blex-progress__step--completed .blex-progress__indicator {\n background: var(--blex-success); border-color: var(--blex-success); color: #fff;\n}\n.blex-progress__step--completed .blex-progress__indicator::after { content: '✓'; }\n.blex-progress__step--active .blex-progress__indicator {\n background: var(--blex-accent); border-color: var(--blex-accent); color: #fff;\n}\n.blex-progress__step--pending .blex-progress__indicator { opacity: 0.5; }\n.blex-progress__step--completed::before { background: var(--blex-success); }\n.blex-progress__content { padding-top: 2px; }\n.blex-progress__label { font-size: 14px; font-weight: 500; }\n.blex-progress__description { font-size: 12px; opacity: 0.7; margin-top: 2px; }\n\n/* ── terminal ── */\n.blex-terminal {\n background: #1e1e1e; color: #d4d4d4; font-family: var(--blex-font-mono);\n font-size: 13px; border-color: #333;\n}\n.blex-terminal__command {\n display: flex; align-items: center; gap: 8px; padding-bottom: 8px;\n border-bottom: 1px solid #333; margin-bottom: 8px;\n}\n.blex-terminal__prompt { color: var(--blex-success); font-weight: 700; user-select: none; }\n.blex-terminal__output { white-space: pre-wrap; overflow-x: auto; line-height: 1.4; }\n.blex-terminal__toggle {\n background: #2d2d2d; color: #d4d4d4; border-color: #444;\n font-family: var(--blex-font-mono); font-size: 12px;\n}\n.blex-terminal__toggle:hover { background: #3d3d3d; }\n.blex-terminal__exit-code {\n display: inline-block; padding: 2px 8px; border-radius: 3px;\n font-size: 11px; font-weight: 600; margin-top: 8px;\n}\n.blex-terminal__exit-code--success { background: color-mix(in srgb, var(--blex-success) 20%, #1e1e1e); color: var(--blex-success); }\n.blex-terminal__exit-code--error { background: color-mix(in srgb, var(--blex-error) 20%, #1e1e1e); color: var(--blex-error); }\n.blex-terminal__copy {\n background: #2d2d2d; color: #d4d4d4; border-color: #444;\n font-family: var(--blex-font-mono); font-size: 12px; margin-top: 8px;\n}\n.blex-terminal__copy:hover { background: #3d3d3d; }\n\n/* ── timeline ── */\n.blex-timeline__title { font-size: 14px; font-weight: 600; margin-bottom: 12px; }\n.blex-timeline__list { list-style: none; padding: 0; margin: 0; }\n.blex-timeline__item {\n display: flex; gap: 12px; position: relative; padding-bottom: 16px;\n}\n.blex-timeline__item::before {\n content: ''; position: absolute; left: 5px; top: 16px; bottom: 0;\n width: 2px; background: var(--blex-border);\n}\n.blex-timeline__item:last-child::before { display: none; }\n.blex-timeline__dot {\n width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0;\n background: var(--blex-accent); margin-top: 4px; z-index: 1;\n}\n.blex-timeline__content { flex: 1; }\n.blex-timeline__time { font-size: 11px; opacity: 0.6; margin-bottom: 2px; }\n.blex-timeline__event-title { font-size: 14px; font-weight: 500; }\n.blex-timeline__description { font-size: 13px; opacity: 0.8; margin-top: 2px; }\n\n/* ── layout ── */\n.blex-layout { border: none; padding: 0; background: transparent; gap: 12px; }\n.blex-layout__child { min-width: 0; }\n\n/* ── kanban ── */\n.blex-kanban {\n display: flex; gap: 12px; overflow-x: auto; padding: 12px;\n font-family: var(--blex-font-family); color: var(--blex-text);\n}\n.blex-kanban__column {\n min-width: 220px; max-width: 300px; flex-shrink: 0;\n background: var(--blex-border); border-radius: 8px; padding: 10px;\n}\n.blex-kanban__column-title {\n font-size: 13px; font-weight: 700; text-transform: uppercase;\n letter-spacing: 0.05em; padding: 4px 6px 10px; opacity: 0.7;\n}\n.blex-kanban__item {\n background: var(--blex-bg); border: 1px solid var(--blex-border);\n border-radius: 6px; padding: 10px; margin-bottom: 8px; cursor: grab;\n transition: box-shadow var(--blex-animation-duration);\n}\n.blex-kanban__item:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.1); }\n.blex-kanban__item--dragging { opacity: 0.5; }\n.blex-kanban__item-title { font-size: 14px; font-weight: 500; }\n.blex-kanban__item-subtitle { font-size: 12px; opacity: 0.7; margin-top: 4px; }\n.blex-kanban__item-tags { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 8px; }\n.blex-kanban__item-tags span {\n font-size: 11px; padding: 2px 8px; border-radius: 10px;\n background: color-mix(in srgb, var(--blex-accent) 15%, transparent);\n color: var(--blex-accent); font-weight: 500;\n}\n\n/* ── calendar ── */\n.blex-calendar {\n font-family: var(--blex-font-family); color: var(--blex-text);\n border: 1px solid var(--blex-border); border-radius: 6px; padding: 12px;\n background: var(--blex-bg);\n}\n.blex-calendar__nav { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }\n.blex-calendar__title { flex: 1; text-align: center; font-weight: 600; font-size: 15px; }\n.blex-calendar__view-toggle { display: flex; gap: 4px; margin-bottom: 12px; justify-content: center; }\n.blex-calendar__view-btn[aria-pressed=\"true\"] {\n background: var(--blex-accent); color: #fff; border-color: var(--blex-accent);\n}\n.blex-calendar__grid {\n display: grid; grid-template-columns: repeat(7, 1fr); gap: 1px;\n border: 1px solid var(--blex-border); border-radius: 4px; overflow: hidden;\n}\n.blex-calendar__day-header {\n padding: 6px 4px; text-align: center; font-size: 11px; font-weight: 600;\n text-transform: uppercase; background: var(--blex-border); letter-spacing: 0.05em;\n}\n.blex-calendar__day {\n min-height: 80px; padding: 4px; background: var(--blex-bg);\n border: 1px solid var(--blex-border); cursor: pointer; font-size: 12px;\n}\n.blex-calendar__day:hover { background: rgba(0,0,0,0.02); }\n.blex-calendar__day--filler { background: rgba(0,0,0,0.02); cursor: default; }\n.blex-calendar__day-number { font-weight: 600; font-size: 13px; margin-bottom: 4px; }\n.blex-calendar__slot {\n min-height: 40px; padding: 4px; border-bottom: 1px solid var(--blex-border);\n cursor: pointer; font-size: 12px;\n}\n.blex-calendar__slot:hover { background: rgba(0,0,0,0.02); }\n.blex-calendar__event {\n display: block; padding: 2px 6px; margin: 1px 0; border-radius: 3px;\n font-size: 11px; color: #fff; background: var(--blex-accent);\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: pointer;\n}\n\n/* ── gallery ── */\n.blex-gallery {\n font-family: var(--blex-font-family); color: var(--blex-text);\n border: 1px solid var(--blex-border); border-radius: 6px; overflow: hidden;\n background: var(--blex-bg);\n}\n.blex-gallery--grid .blex-gallery__item { display: block; }\n.blex-gallery--grid {\n display: grid;\n grid-template-columns: repeat(var(--blex-gallery-columns, 3), 1fr);\n gap: 4px; padding: 4px;\n}\n.blex-gallery--carousel { position: relative; }\n.blex-gallery__item { overflow: hidden; cursor: pointer; }\n.blex-gallery__img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.blex-gallery__caption { padding: 6px 8px; font-size: 12px; opacity: 0.8; }\n.blex-gallery__nav {\n display: flex; justify-content: center; gap: 8px; padding: 8px;\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 revertInteraction(interaction: BlockInteraction): void {\n if (renderer?.revertInteraction) {\n renderer.revertInteraction(interaction);\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 summary: `Confirmed: ${label}`,\n icon: '✓',\n immediate: true,\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 const summary = selectedLabels.length > 0\n ? `Voted: ${selectedLabels.join(', ')}${this.writeInValue ? ` + \"${this.writeInValue}\"` : ''}`\n : `Write-in: ${this.writeInValue}`;\n\n this.emit({\n blockId: block.id,\n type: 'submit',\n payload,\n serialized,\n summary,\n icon: '🗳',\n immediate: true,\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 summary: `Downloaded SVG${title ? `: ${title}` : ''}`,\n icon: '⬇',\n immediate: true,\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 summary: `Copied SVG${title ? `: ${title}` : ''}`,\n icon: '📋',\n immediate: true,\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, BlockInteraction } 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 revertInteraction(interaction: BlockInteraction): void {\n if (!this.container || !this.currentBlock) return;\n if (interaction.type !== 'select') return;\n\n // Clear all row selections and re-render\n this.selectedRows.clear();\n this.container.innerHTML = '';\n this._build(this.currentBlock);\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 // Suppress no-op: selection returned to original (empty) state\n if (this.selectedRows.size === 0) return;\n\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 const count = selectedIndices.length;\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: {\n selectedRows: selectedIndices,\n columns,\n },\n serialized,\n summary: `Selected ${count} row${count !== 1 ? 's' : ''}`,\n icon: '☐',\n immediate: false,\n revertable: true,\n });\n }\n}\n\nexport function createTableRenderer(): TableRenderer {\n return new TableRenderer();\n}\n","import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock, BlockInteraction } 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 private currentBlock: ContentBlock<CodeData> | null = null;\n\n revertInteraction(interaction: BlockInteraction): void {\n if (!this.container || !this.currentBlock) return;\n if (interaction.type !== 'select') return;\n\n // Clear all line selections and re-render\n this.selectedLines.clear();\n this.lastClickedLine = null;\n this.container.innerHTML = '';\n this._build(this.currentBlock);\n }\n\n render(block: ContentBlock<CodeData>, container: HTMLElement): void {\n this.currentBlock = block;\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 this.currentBlock = block;\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 // Suppress no-op: selection returned to original (empty) state\n if (this.selectedLines.size === 0) return;\n\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 const lineRange = sortedLines.length === 1\n ? `line ${sortedLines[0]}`\n : `lines ${sortedLines[0]}-${sortedLines[sortedLines.length - 1]}`;\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: {\n lines: sortedLines,\n ...(language !== undefined && { language }),\n },\n serialized,\n summary: `Selected ${lineRange}`,\n icon: '< >',\n immediate: false,\n revertable: true,\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 summary: `Applied diff${filename ? `: ${filename}` : ''}`,\n icon: '✅',\n immediate: true,\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 summary: `Rejected diff${filename ? `: ${filename}` : ''}`,\n icon: '❌',\n immediate: true,\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, BlockInteraction } 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 private currentBlock: ContentBlock<FileTreeData> | null = null;\n\n render(block: ContentBlock<FileTreeData>, container: HTMLElement): void {\n this.currentBlock = block;\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 revertInteraction(interaction: BlockInteraction): void {\n if (!this.container || !this.currentBlock) return;\n if (interaction.type !== 'select') return;\n\n // Clear all selections and re-render\n this.selectedPaths.clear();\n this.container.innerHTML = '';\n this.buildTree(this.currentBlock);\n }\n\n update(block: ContentBlock<FileTreeData>): void {\n if (!this.container) return;\n this.currentBlock = block;\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 // Suppress no-op: selection returned to original (empty) state\n if (this.selectedPaths.size === 0) return;\n\n const paths = Array.from(this.selectedPaths).sort();\n const count = paths.length;\n const lastPath = paths[paths.length - 1] ?? '';\n const fileName = lastPath.split('/').pop() ?? lastPath;\n this.emit({\n blockId: block.id,\n type: 'select',\n payload: { paths },\n serialized: `Selected files:\\n${paths.join('\\n')}`,\n summary: count === 1 ? `Selected ${fileName}` : `Selected ${count} files`,\n icon: '📁',\n immediate: false,\n revertable: true,\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 const fieldCount = Object.keys(this.values).length;\n this.emit({\n blockId: block.id,\n type: 'submit',\n payload: { ...this.values },\n serialized: `Form submission${title ? ` (${title})` : ''}:\\n${serializedPairs}`,\n summary: `Submitted${title ? `: ${title}` : ` form (${fieldCount} fields)`}`,\n icon: '📋',\n immediate: true,\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 summary: `Copied output${command ? `: ${command}` : ''}`,\n icon: '📋',\n immediate: true,\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"]}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { registerDefaults, hasBlockType, isBuiltIn, registerBlockType, unregisterBlockType } from './chunk-
|
|
2
|
-
export { getRegisteredTypes, hasBlockType, registerBlockType, registerLazyBlockType, renderBlock, unregisterBlockType } from './chunk-
|
|
1
|
+
import { registerDefaults, hasBlockType, isBuiltIn, registerBlockType, unregisterBlockType } from './chunk-6QSZG6F7.js';
|
|
2
|
+
export { getRegisteredTypes, hasBlockType, registerBlockType, registerLazyBlockType, renderBlock, unregisterBlockType } from './chunk-6QSZG6F7.js';
|
|
3
3
|
export { BaseRenderer } from './chunk-ODHF7VXV.js';
|
|
4
4
|
|
|
5
5
|
// src/placeholder.ts
|
|
@@ -11,11 +11,14 @@ var KanbanRenderer = class extends BaseRenderer {
|
|
|
11
11
|
this.currentBlock = null;
|
|
12
12
|
/** Local column state — mutated by drops and reverts for deferred interaction model */
|
|
13
13
|
this.localColumns = [];
|
|
14
|
+
/** Snapshot of original columns at render time — used to detect no-op interactions */
|
|
15
|
+
this.originalColumns = [];
|
|
14
16
|
}
|
|
15
17
|
render(block, container) {
|
|
16
18
|
this.container = container;
|
|
17
19
|
this.currentBlock = block;
|
|
18
20
|
this.localColumns = JSON.parse(JSON.stringify(block.data.columns));
|
|
21
|
+
this.originalColumns = JSON.parse(JSON.stringify(block.data.columns));
|
|
19
22
|
this._build(block);
|
|
20
23
|
container.setAttribute("data-blex-ready", "true");
|
|
21
24
|
}
|
|
@@ -23,6 +26,7 @@ var KanbanRenderer = class extends BaseRenderer {
|
|
|
23
26
|
if (!this.container) return;
|
|
24
27
|
this.currentBlock = block;
|
|
25
28
|
this.localColumns = JSON.parse(JSON.stringify(block.data.columns));
|
|
29
|
+
this.originalColumns = JSON.parse(JSON.stringify(block.data.columns));
|
|
26
30
|
this.container.innerHTML = "";
|
|
27
31
|
this._build(block);
|
|
28
32
|
}
|
|
@@ -106,25 +110,41 @@ var KanbanRenderer = class extends BaseRenderer {
|
|
|
106
110
|
};
|
|
107
111
|
this._build(updatedBlock);
|
|
108
112
|
}
|
|
109
|
-
this.
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
113
|
+
if (!this._columnsMatchOriginal()) {
|
|
114
|
+
this.emit({
|
|
115
|
+
blockId: block.id,
|
|
116
|
+
type: "move",
|
|
117
|
+
payload: {
|
|
118
|
+
itemId,
|
|
119
|
+
fromColumn,
|
|
120
|
+
toColumn,
|
|
121
|
+
position
|
|
122
|
+
},
|
|
123
|
+
serialized: `Moved "${itemTitle}" from ${fromColumn} to ${toColumn}`,
|
|
124
|
+
summary: `Moved "${itemTitle}" \u2192 ${toColumn}`,
|
|
125
|
+
icon: "\u229E",
|
|
126
|
+
immediate: false,
|
|
127
|
+
revertable: true
|
|
128
|
+
});
|
|
129
|
+
}
|
|
124
130
|
});
|
|
125
131
|
}
|
|
126
132
|
return colEl;
|
|
127
133
|
}
|
|
134
|
+
/** Compare current local state to original — returns true if board is back to its initial state */
|
|
135
|
+
_columnsMatchOriginal() {
|
|
136
|
+
if (this.localColumns.length !== this.originalColumns.length) return false;
|
|
137
|
+
for (let c = 0; c < this.localColumns.length; c++) {
|
|
138
|
+
const local = this.localColumns[c];
|
|
139
|
+
const orig = this.originalColumns[c];
|
|
140
|
+
if (local.id !== orig.id) return false;
|
|
141
|
+
if (local.items.length !== orig.items.length) return false;
|
|
142
|
+
for (let i = 0; i < local.items.length; i++) {
|
|
143
|
+
if (local.items[i].id !== orig.items[i].id) return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
128
148
|
_buildItem(item, colId, draggable) {
|
|
129
149
|
const itemEl = document.createElement("div");
|
|
130
150
|
itemEl.className = "blex-kanban__item";
|
|
@@ -169,5 +189,5 @@ function createKanbanRenderer() {
|
|
|
169
189
|
}
|
|
170
190
|
|
|
171
191
|
export { KanbanRenderer, createKanbanRenderer };
|
|
172
|
-
//# sourceMappingURL=kanban-
|
|
173
|
-
//# sourceMappingURL=kanban-
|
|
192
|
+
//# sourceMappingURL=kanban-GPGDSK7N.js.map
|
|
193
|
+
//# sourceMappingURL=kanban-GPGDSK7N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/renderers/kanban.ts"],"names":[],"mappings":"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","file":"kanban-GPGDSK7N.js","sourcesContent":["import { BaseRenderer } from '../base-renderer.js';\nimport type { ContentBlock, BlockInteraction } 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 private currentBlock: ContentBlock<KanbanData> | null = null;\n /** Local column state — mutated by drops and reverts for deferred interaction model */\n private localColumns: KanbanColumn[] = [];\n /** Snapshot of original columns at render time — used to detect no-op interactions */\n private originalColumns: KanbanColumn[] = [];\n\n render(block: ContentBlock<KanbanData>, container: HTMLElement): void {\n this.container = container;\n this.currentBlock = block;\n this.localColumns = JSON.parse(JSON.stringify(block.data.columns));\n this.originalColumns = JSON.parse(JSON.stringify(block.data.columns));\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.currentBlock = block;\n this.localColumns = JSON.parse(JSON.stringify(block.data.columns));\n this.originalColumns = JSON.parse(JSON.stringify(block.data.columns));\n this.container.innerHTML = '';\n this._build(block);\n }\n\n revertInteraction(interaction: BlockInteraction): void {\n if (!this.container || !this.currentBlock) return;\n if (interaction.type !== 'move') return;\n\n const { itemId, fromColumn, toColumn } = interaction.payload as {\n itemId: string; fromColumn: string; toColumn: string;\n };\n\n // Move item back in local state\n const targetCol = this.localColumns.find(c => c.id === toColumn);\n const sourceCol = this.localColumns.find(c => c.id === fromColumn);\n if (!targetCol || !sourceCol) return;\n\n const itemIdx = targetCol.items.findIndex(i => i.id === itemId);\n if (itemIdx === -1) return;\n\n const [item] = targetCol.items.splice(itemIdx, 1);\n sourceCol.items.push(item);\n\n // Re-render with local state\n this.container.innerHTML = '';\n const revertBlock = {\n ...this.currentBlock,\n data: { ...this.currentBlock.data, columns: this.localColumns },\n };\n this._build(revertBlock);\n }\n\n private _build(block: ContentBlock<KanbanData>): void {\n const container = this.container!;\n const { draggable = true } = block.data;\n const columns = this.localColumns;\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 // Update local state so the move sticks visually\n const srcCol = this.localColumns.find(c => c.id === fromColumn);\n const dstCol = this.localColumns.find(c => c.id === toColumn);\n if (srcCol && dstCol) {\n const idx = srcCol.items.findIndex(i => i.id === itemId);\n if (idx !== -1) {\n const [movedItem] = srcCol.items.splice(idx, 1);\n dstCol.items.splice(position, 0, movedItem);\n }\n }\n\n // Re-render with updated local state\n if (this.container && this.currentBlock) {\n this.container.innerHTML = '';\n const updatedBlock = {\n ...this.currentBlock,\n data: { ...this.currentBlock.data, columns: this.localColumns },\n };\n this._build(updatedBlock);\n }\n\n // Suppress no-op: board state returned to original (e.g. moved back)\n if (!this._columnsMatchOriginal()) {\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 summary: `Moved \"${itemTitle}\" → ${toColumn}`,\n icon: '⊞',\n immediate: false,\n revertable: true,\n });\n }\n });\n }\n\n return colEl;\n }\n\n /** Compare current local state to original — returns true if board is back to its initial state */\n private _columnsMatchOriginal(): boolean {\n if (this.localColumns.length !== this.originalColumns.length) return false;\n for (let c = 0; c < this.localColumns.length; c++) {\n const local = this.localColumns[c];\n const orig = this.originalColumns[c];\n if (local.id !== orig.id) return false;\n if (local.items.length !== orig.items.length) return false;\n for (let i = 0; i < local.items.length; i++) {\n if (local.items[i].id !== orig.items[i].id) return false;\n }\n }\n return true;\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"]}
|
package/dist/esm/react/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { renderBlock, registerDefaults } from '../chunk-
|
|
1
|
+
import { renderBlock, registerDefaults } from '../chunk-6QSZG6F7.js';
|
|
2
2
|
import '../chunk-ODHF7VXV.js';
|
|
3
3
|
import { useRef, useCallback, useEffect } from 'react';
|
|
4
4
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../src/renderers/code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,QAAQ,CAAC;IACtD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,YAAY,CAAuC;IAE3D,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAWtD,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI;IAOnE,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;IAgB3C,OAAO,CAAC,MAAM;IA4Fd,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../src/renderers/code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,QAAQ,CAAC;IACtD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,YAAY,CAAuC;IAE3D,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAWtD,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI;IAOnE,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;IAgB3C,OAAO,CAAC,MAAM;IA4Fd,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,cAAc;CA2BvB;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-tree.d.ts","sourceRoot":"","sources":["../../../src/renderers/file-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,YAAY,CAAC;IAC9D,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAA2C;IAE/D,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI;IAUvE,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAUtD,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI;IAO/C,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,SAAS;IAmEjB,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"file-tree.d.ts","sourceRoot":"","sources":["../../../src/renderers/file-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,qBAAa,gBAAiB,SAAQ,YAAY,CAAC,YAAY,CAAC;IAC9D,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAA2C;IAE/D,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI;IAUvE,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAUtD,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI;IAO/C,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,SAAS;IAmEjB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,UAAU;CAKnB;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|
|
@@ -22,11 +22,15 @@ export declare class KanbanRenderer extends BaseRenderer<KanbanData> {
|
|
|
22
22
|
private currentBlock;
|
|
23
23
|
/** Local column state — mutated by drops and reverts for deferred interaction model */
|
|
24
24
|
private localColumns;
|
|
25
|
+
/** Snapshot of original columns at render time — used to detect no-op interactions */
|
|
26
|
+
private originalColumns;
|
|
25
27
|
render(block: ContentBlock<KanbanData>, container: HTMLElement): void;
|
|
26
28
|
update(block: ContentBlock<KanbanData>): void;
|
|
27
29
|
revertInteraction(interaction: BlockInteraction): void;
|
|
28
30
|
private _build;
|
|
29
31
|
private _buildColumn;
|
|
32
|
+
/** Compare current local state to original — returns true if board is back to its initial state */
|
|
33
|
+
private _columnsMatchOriginal;
|
|
30
34
|
private _buildItem;
|
|
31
35
|
}
|
|
32
36
|
export declare function createKanbanRenderer(): KanbanRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kanban.d.ts","sourceRoot":"","sources":["../../../src/renderers/kanban.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,UAAU,CAAC;IAE1D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACxC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,OAAO,CAAC,YAAY,CAAyC;IAC7D,uFAAuF;IACvF,OAAO,CAAC,YAAY,CAAsB;
|
|
1
|
+
{"version":3,"file":"kanban.d.ts","sourceRoot":"","sources":["../../../src/renderers/kanban.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,UAAU,CAAC;IAE1D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACxC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvC,OAAO,CAAC,YAAY,CAAyC;IAC7D,uFAAuF;IACvF,OAAO,CAAC,YAAY,CAAsB;IAC1C,sFAAsF;IACtF,OAAO,CAAC,eAAe,CAAsB;IAE7C,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI;IASrE,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,IAAI;IAS7C,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IA4BtD,OAAO,CAAC,MAAM;IAiBd,OAAO,CAAC,YAAY;IAgGpB,mGAAmG;IACnG,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,UAAU;CAiDnB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|