@memberjunction/ng-whiteboard 0.0.1 → 5.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +302 -28
  2. package/dist/lib/whiteboard-agent-sees-popover.component.d.ts +31 -0
  3. package/dist/lib/whiteboard-agent-sees-popover.component.d.ts.map +1 -0
  4. package/dist/lib/whiteboard-agent-sees-popover.component.js +132 -0
  5. package/dist/lib/whiteboard-agent-sees-popover.component.js.map +1 -0
  6. package/dist/lib/whiteboard-board.component.d.ts +458 -0
  7. package/dist/lib/whiteboard-board.component.d.ts.map +1 -0
  8. package/dist/lib/whiteboard-board.component.js +2357 -0
  9. package/dist/lib/whiteboard-board.component.js.map +1 -0
  10. package/dist/lib/whiteboard-context-menu.d.ts +57 -0
  11. package/dist/lib/whiteboard-context-menu.d.ts.map +1 -0
  12. package/dist/lib/whiteboard-context-menu.js +69 -0
  13. package/dist/lib/whiteboard-context-menu.js.map +1 -0
  14. package/dist/lib/whiteboard-export.d.ts +94 -0
  15. package/dist/lib/whiteboard-export.d.ts.map +1 -0
  16. package/dist/lib/whiteboard-export.js +592 -0
  17. package/dist/lib/whiteboard-export.js.map +1 -0
  18. package/dist/lib/whiteboard-host.component.d.ts +174 -0
  19. package/dist/lib/whiteboard-host.component.d.ts.map +1 -0
  20. package/dist/lib/whiteboard-host.component.js +758 -0
  21. package/dist/lib/whiteboard-host.component.js.map +1 -0
  22. package/dist/lib/whiteboard-pages.component.d.ts +83 -0
  23. package/dist/lib/whiteboard-pages.component.d.ts.map +1 -0
  24. package/dist/lib/whiteboard-pages.component.js +211 -0
  25. package/dist/lib/whiteboard-pages.component.js.map +1 -0
  26. package/dist/lib/whiteboard-snapshot.component.d.ts +30 -0
  27. package/dist/lib/whiteboard-snapshot.component.d.ts.map +1 -0
  28. package/dist/lib/whiteboard-snapshot.component.js +91 -0
  29. package/dist/lib/whiteboard-snapshot.component.js.map +1 -0
  30. package/dist/lib/whiteboard-srcdoc.pipe.d.ts +60 -0
  31. package/dist/lib/whiteboard-srcdoc.pipe.d.ts.map +1 -0
  32. package/dist/lib/whiteboard-srcdoc.pipe.js +75 -0
  33. package/dist/lib/whiteboard-srcdoc.pipe.js.map +1 -0
  34. package/dist/lib/whiteboard-state.d.ts +1113 -0
  35. package/dist/lib/whiteboard-state.d.ts.map +1 -0
  36. package/dist/lib/whiteboard-state.js +1396 -0
  37. package/dist/lib/whiteboard-state.js.map +1 -0
  38. package/dist/lib/whiteboard-toolbar.component.d.ts +95 -0
  39. package/dist/lib/whiteboard-toolbar.component.d.ts.map +1 -0
  40. package/dist/lib/whiteboard-toolbar.component.js +344 -0
  41. package/dist/lib/whiteboard-toolbar.component.js.map +1 -0
  42. package/dist/lib/whiteboard-tools.d.ts +103 -0
  43. package/dist/lib/whiteboard-tools.d.ts.map +1 -0
  44. package/dist/lib/whiteboard-tools.js +748 -0
  45. package/dist/lib/whiteboard-tools.js.map +1 -0
  46. package/dist/lib/whiteboard-widget-bridge.d.ts +217 -0
  47. package/dist/lib/whiteboard-widget-bridge.d.ts.map +1 -0
  48. package/dist/lib/whiteboard-widget-bridge.js +254 -0
  49. package/dist/lib/whiteboard-widget-bridge.js.map +1 -0
  50. package/dist/lib/whiteboard-zoom.component.d.ts +55 -0
  51. package/dist/lib/whiteboard-zoom.component.d.ts.map +1 -0
  52. package/dist/lib/whiteboard-zoom.component.js +139 -0
  53. package/dist/lib/whiteboard-zoom.component.js.map +1 -0
  54. package/dist/lib/whiteboard.module.d.ts +29 -0
  55. package/dist/lib/whiteboard.module.d.ts.map +1 -0
  56. package/dist/lib/whiteboard.module.js +78 -0
  57. package/dist/lib/whiteboard.module.js.map +1 -0
  58. package/dist/public-api.d.ts +49 -0
  59. package/dist/public-api.d.ts.map +1 -0
  60. package/dist/public-api.js +59 -0
  61. package/dist/public-api.js.map +1 -0
  62. package/package.json +43 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whiteboard-tools.js","sourceRoot":"","sources":["../../src/lib/whiteboard-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n WHITEBOARD_FONT_SIZES, WhiteboardBounds, WhiteboardFontFamily, WhiteboardItem,\n WhiteboardItemPatch, WhiteboardPoint, WhiteboardShapeKind, WhiteboardState\n} from './whiteboard-state';\n\n/**\n * WHITEBOARD — the programmatic (agent-facing) mutation tool surface.\n *\n * Angular-free on purpose: `ApplyWhiteboardAgentTool` is the pure round-trip the host\n * component delegates to (the host adds the UI garnish — violet pop-in, toast, presence\n * cursor). The integration layer registers {@link WHITEBOARD_TOOL_DEFINITIONS} with its\n * agent/automation runtime so a co-author can call `Whiteboard_AddNote` etc.; tool-call\n * frames are routed back through {@link ApplyWhiteboardAgentTool}, which returns the JSON\n * result string fed back to the caller (e.g. as a realtime model's `tool_response`).\n */\n\n/**\n * Any JSON-serializable value (the building block of {@link WhiteboardToolJSONObject}).\n * Structurally identical to `JSONValue` from `@memberjunction/ai` — re-declared locally\n * so this generic package carries no AI-framework dependency.\n */\nexport type WhiteboardToolJSONValue =\n | string\n | number\n | boolean\n | null\n | WhiteboardToolJSONValue[]\n | { [key: string]: WhiteboardToolJSONValue };\n\n/** A JSON object (string-keyed map of {@link WhiteboardToolJSONValue}). */\nexport type WhiteboardToolJSONObject = { [key: string]: WhiteboardToolJSONValue };\n\n/**\n * One JSON-described programmatic whiteboard tool: a name, a model-facing description,\n * and a JSON-schema parameter object. Structurally identical to (mutually assignable\n * with) `RealtimeToolDefinition` from `@memberjunction/ai`, re-declared locally so the\n * package stays dependency-light — consumers integrating with the MJ realtime stack can\n * pass {@link WHITEBOARD_TOOL_DEFINITIONS} straight into APIs typed against\n * `RealtimeToolDefinition[]`.\n */\nexport interface WhiteboardToolDefinition {\n /** The tool's name, used to match tool-call frames back to {@link ApplyWhiteboardAgentTool}. */\n Name: string;\n /** Human/model-readable description of what the tool does (drives when it gets called). */\n Description: string;\n /** A JSON-schema object describing the tool's parameters. */\n ParametersSchema: WhiteboardToolJSONObject;\n}\n\n/** Result payload (serialized to JSON) returned from every whiteboard tool call. */\nexport interface WhiteboardToolResult {\n success: boolean;\n /** ID of the item the tool created / mutated (when applicable). */\n itemId?: string;\n /** ID of the page the tool created / switched to / renamed (page tools only). */\n pageId?: string;\n /** Human summary the model can narrate (\"Added a sticky note …\"). */\n summary?: string;\n /** Error description when `success` is false. */\n error?: string;\n}\n\n/**\n * The shared name prefix of every whiteboard tool — the key an integration layer uses to\n * route all `Whiteboard_*` tool calls locally to {@link ApplyWhiteboardAgentTool} (e.g.\n * MJ's realtime sessions register it with `RealtimeSessionService.RegisterClientToolHandler`\n * so calls execute in the browser instead of the server relay).\n */\nexport const WHITEBOARD_TOOL_PREFIX = 'Whiteboard_';\n\n/** Names of the whiteboard tools, as registered with the agent/automation runtime. */\nexport const WHITEBOARD_TOOL_NAMES = {\n AddNote: 'Whiteboard_AddNote',\n AddShape: 'Whiteboard_AddShape',\n AddText: 'Whiteboard_AddText',\n AddMarkdown: 'Whiteboard_AddMarkdown',\n AddHtml: 'Whiteboard_AddHtml',\n UpdateContent: 'Whiteboard_UpdateContent',\n DrawConnector: 'Whiteboard_DrawConnector',\n Highlight: 'Whiteboard_Highlight',\n MoveItem: 'Whiteboard_MoveItem',\n RemoveItem: 'Whiteboard_RemoveItem',\n StyleItem: 'Whiteboard_StyleItem',\n AddPage: 'Whiteboard_AddPage',\n SwitchPage: 'Whiteboard_SwitchPage',\n RenamePage: 'Whiteboard_RenamePage'\n} as const;\n\n/** Max markdown source length accepted by AddMarkdown / UpdateContent (chars). */\nexport const WHITEBOARD_MARKDOWN_MAX_CHARS = 32_000;\n/** Max HTML source length accepted by AddHtml / UpdateContent (chars). */\nexport const WHITEBOARD_HTML_MAX_CHARS = 64_000;\n\n/**\n * The PAGE-level tools (they navigate/manage pages rather than items, so the shared\n * \"targets the ACTIVE page\" item-tool sentence is not appended to their descriptions).\n */\nconst WHITEBOARD_PAGE_TOOL_NAMES: ReadonlySet<string> = new Set<string>([\n WHITEBOARD_TOOL_NAMES.AddPage,\n WHITEBOARD_TOOL_NAMES.SwitchPage,\n WHITEBOARD_TOOL_NAMES.RenamePage\n]);\n\n/**\n * The shared sentence appended (once, programmatically — see\n * {@link WHITEBOARD_TOOL_DEFINITIONS}) to every ITEM tool's description, so the model\n * always knows item operations are scoped to the page that is currently active.\n */\nexport const WHITEBOARD_ACTIVE_PAGE_NOTE =\n ' This tool targets the ACTIVE page only — use Whiteboard_SwitchPage first to work with items on another page.';\n\n/** The raw tool definitions, before the shared active-page sentence is appended. */\nconst RAW_WHITEBOARD_TOOL_DEFINITIONS: WhiteboardToolDefinition[] = [\n {\n Name: WHITEBOARD_TOOL_NAMES.AddNote,\n Description: 'Add a sticky note to the shared whiteboard. Your notes render in your reserved violet style so the user always knows they came from you.',\n ParametersSchema: {\n type: 'object',\n properties: {\n text: { type: 'string', description: 'The note text. Keep it short — sticky-note sized.' },\n x: { type: 'number', description: 'Left position in board coordinates. Omit to auto-place near existing content.' },\n y: { type: 'number', description: 'Top position in board coordinates. Omit to auto-place near existing content.' },\n fontSize: { type: 'number', enum: [...WHITEBOARD_FONT_SIZES], description: 'Optional note font size in px (curated steps).' }\n },\n required: ['text']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.AddShape,\n Description: 'Add a labeled shape box (rect, ellipse or diamond) to the whiteboard — for process steps, tracks, groupings.',\n ParametersSchema: {\n type: 'object',\n properties: {\n label: { type: 'string', description: 'Main label rendered inside the shape.' },\n sub: { type: 'string', description: 'Optional smaller sub-label under the main label.' },\n shape: { type: 'string', enum: ['rect', 'ellipse', 'diamond'], description: 'Shape geometry. Defaults to rect.' },\n x: { type: 'number', description: 'Left position in board coordinates.' },\n y: { type: 'number', description: 'Top position in board coordinates.' },\n w: { type: 'number', description: 'Width in px. Defaults to 172.' },\n h: { type: 'number', description: 'Height in px. Defaults to 56.' }\n },\n required: ['label']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.AddText,\n Description: 'Add a small free-floating text label to the whiteboard — for annotating the user\\'s diagram without covering it.',\n ParametersSchema: {\n type: 'object',\n properties: {\n text: { type: 'string', description: 'The label text.' },\n x: { type: 'number', description: 'Left position in board coordinates.' },\n y: { type: 'number', description: 'Top position in board coordinates.' },\n w: { type: 'number', description: 'Optional wrap width in px (60-800). Long text wraps at this width — use for sentences/paragraphs; omit for short labels.' },\n fontSize: { type: 'number', enum: [...WHITEBOARD_FONT_SIZES], description: 'Optional label font size in px (curated steps).' },\n fontFamily: { type: 'string', enum: ['sans', 'serif', 'mono'], description: 'Optional font family. Defaults to sans.' },\n bold: { type: 'boolean', description: 'Optional bold weight. Labels render bold by default.' }\n },\n required: ['text']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.AddMarkdown,\n Description: 'Add a rendered MARKDOWN panel to the whiteboard — headings, lists, code blocks and links, for richer illustrative content than a sticky note. The source is rendered safely (sanitized; raw HTML in the markdown is NOT executed). Renders in your reserved violet chrome.',\n ParametersSchema: {\n type: 'object',\n properties: {\n markdown: { type: 'string', description: `The markdown source (max ${WHITEBOARD_MARKDOWN_MAX_CHARS} chars).` },\n x: { type: 'number', description: 'Left position in board coordinates. Omit to auto-place near existing content.' },\n y: { type: 'number', description: 'Top position in board coordinates.' },\n w: { type: 'number', description: 'Panel width in px (160-800). Defaults to 280.' },\n h: { type: 'number', description: 'Optional max height in px (80-800); content beyond it is clipped. Omit for content-driven height.' }\n },\n required: ['markdown']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.AddHtml,\n Description: 'Add an interactive HTML widget to the whiteboard — a self-contained HTML document (inline CSS/JS allowed) rendered in a STRICTLY SANDBOXED iframe with an opaque origin: scripts run isolated with NO access to the app, its session, cookies or storage, and network access is not guaranteed — make the widget fully self-contained (no external scripts, styles or data). USE WIDGETS TO TEACH AND GET USER INPUT: inline SVG diagrams and explainers, CSS concept animations, micro-quizzes and micro-forms. To collect input, have a button/form handler call MJWhiteboard.submit(data) — the host injects that helper into every widget automatically, and the submitted data (JSON-serialized, max 8000 chars) reaches you as a \"[whiteboard] the user submitted input…\" context note. Example: a one-question quiz whose Submit button calls MJWhiteboard.submit({question:\"…\",answer:picked}). PASSIVE FORMS NEED NO SCRIPTING: button/select/typing activity inside the widget reaches you automatically as ambient \"[whiteboard]\" background context notes — reserve MJWhiteboard.submit for explicit submissions.',\n ParametersSchema: {\n type: 'object',\n properties: {\n html: { type: 'string', description: `The widget's full HTML source (max ${WHITEBOARD_HTML_MAX_CHARS} chars). Self-contained — inline everything.` },\n title: { type: 'string', description: 'Optional short title shown on the widget header bar.' },\n x: { type: 'number', description: 'Left position in board coordinates. Omit to auto-place near existing content.' },\n y: { type: 'number', description: 'Top position in board coordinates.' },\n w: { type: 'number', description: 'Widget width in px (200-960). Defaults to 360.' },\n h: { type: 'number', description: 'Widget height in px (120-800). Defaults to 240.' }\n },\n required: ['html']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.UpdateContent,\n Description: 'Replace the CONTENT of an existing whiteboard item: pass exactly one of \"markdown\" (for a markdown panel), \"html\" (for an HTML widget — re-renders its sandboxed iframe), or \"text\" (for a sticky note or text label). The field must match the item\\'s kind.',\n ParametersSchema: {\n type: 'object',\n properties: {\n itemId: { type: 'string', description: 'ID of the item to update (from a scene delta), e.g. \"markdown-3\".' },\n markdown: { type: 'string', description: `New markdown source — markdown panels only (max ${WHITEBOARD_MARKDOWN_MAX_CHARS} chars).` },\n html: { type: 'string', description: `New HTML source — HTML widgets only (max ${WHITEBOARD_HTML_MAX_CHARS} chars). Still rendered sandboxed.` },\n text: { type: 'string', description: 'New text — sticky notes and text labels only.' },\n title: { type: 'string', description: 'Optional new header title — HTML widgets only (alongside \"html\", or alone).' }\n },\n required: ['itemId']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.DrawConnector,\n Description: 'Draw an arrow connector between two whiteboard items (by item id), or between two absolute points.',\n ParametersSchema: {\n type: 'object',\n properties: {\n fromId: { type: 'string', description: 'ID of the source item (from a scene delta), e.g. \"shape-2\".' },\n toId: { type: 'string', description: 'ID of the target item.' },\n fromX: { type: 'number', description: 'Source X when not anchoring to an item.' },\n fromY: { type: 'number', description: 'Source Y when not anchoring to an item.' },\n toX: { type: 'number', description: 'Target X when not anchoring to an item.' },\n toY: { type: 'number', description: 'Target Y when not anchoring to an item.' }\n }\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.Highlight,\n Description: 'Pulse a highlight region on the whiteboard while you narrate — pointing without touching the user\\'s work. Pass itemIds to highlight around existing items, or an explicit x/y/w/h region. The user dismisses it with a click.',\n ParametersSchema: {\n type: 'object',\n properties: {\n itemIds: { type: 'array', items: { type: 'string' }, description: 'IDs of items to highlight around (bounding box + padding).' },\n x: { type: 'number', description: 'Region left (when not using itemIds).' },\n y: { type: 'number', description: 'Region top.' },\n w: { type: 'number', description: 'Region width.' },\n h: { type: 'number', description: 'Region height.' },\n label: { type: 'string', description: 'Optional tag shown on the region edge.' }\n }\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.MoveItem,\n Description: 'Move and/or RESIZE a whiteboard item: provide x+y to reposition (board coordinates of the top-left corner), w and/or h to resize (pixels, min 24), or all of them together.',\n ParametersSchema: {\n type: 'object',\n properties: {\n itemId: { type: 'string', description: 'ID of the item to move/resize.' },\n x: { type: 'number', description: 'New left position (provide together with y to move).' },\n y: { type: 'number', description: 'New top position (provide together with x to move).' },\n w: { type: 'number', description: 'New width in pixels (resize; min 24).' },\n h: { type: 'number', description: 'New height in pixels (resize; min 24).' }\n },\n required: ['itemId']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.RemoveItem,\n Description: 'Remove an item from the whiteboard. Prefer removing only your own items unless the user asks.',\n ParametersSchema: {\n type: 'object',\n properties: {\n itemId: { type: 'string', description: 'ID of the item to remove.' }\n },\n required: ['itemId']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.StyleItem,\n Description: 'Restyle the text of an existing sticky note or text label — font size, family, bold, and (text labels only) color. Pass at least one style field.',\n ParametersSchema: {\n type: 'object',\n properties: {\n itemId: { type: 'string', description: 'ID of the sticky note or text label to restyle.' },\n fontSize: { type: 'number', enum: [...WHITEBOARD_FONT_SIZES], description: 'New font size in px (curated steps).' },\n fontFamily: { type: 'string', enum: ['sans', 'serif', 'mono'], description: 'New font family.' },\n bold: { type: 'boolean', description: 'Bold on/off.' },\n color: { type: 'string', description: 'Hex text color, e.g. \"#fbbf24\" (text labels only — violet is already yours).' }\n },\n required: ['itemId']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.AddPage,\n Description: 'Create a NEW PAGE on the whiteboard and switch to it. Start a new page for a new topic, exercise or diagram instead of crowding the current board — pages keep prior work intact and the user can flip back any time. All item tools (notes, shapes, widgets, …) always target the page that is currently active.',\n ParametersSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Optional page name (e.g. \"Practice problems\"). Omit to auto-name it \"Page N\".' }\n }\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.SwitchPage,\n Description: 'Switch the whiteboard to another existing page (by page name, case-insensitive, or page id). Use it to return to earlier work — the page list (with the active page marked) is included in every scene update you receive. Item tools only see the active page, so switch before editing items that live elsewhere.',\n ParametersSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'The target page\\'s name (case-insensitive) or its id, e.g. \"Page 2\" or \"page-2\".' }\n },\n required: ['name']\n }\n },\n {\n Name: WHITEBOARD_TOOL_NAMES.RenamePage,\n Description: 'Rename an existing whiteboard page — give pages meaningful names (\"Warm-up\", \"Final design\") so the user can navigate them. Identify the page by its current name (case-insensitive) or id.',\n ParametersSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'The page\\'s CURRENT name (case-insensitive) or its id.' },\n newName: { type: 'string', description: 'The new page name. Keep it short — it renders on a tab chip.' }\n },\n required: ['name', 'newName']\n }\n }\n];\n\n/**\n * The full `Whiteboard_*` tool set, ready for registration with an agent/automation\n * runtime (shape-compatible with `RealtimeToolDefinition` from `@memberjunction/ai`).\n *\n * Every ITEM tool's description carries the shared {@link WHITEBOARD_ACTIVE_PAGE_NOTE}\n * sentence (appended programmatically here — ONE mechanism, not eleven hand edits);\n * the three page tools keep their page-navigation descriptions unmodified.\n */\nexport const WHITEBOARD_TOOL_DEFINITIONS: WhiteboardToolDefinition[] =\n RAW_WHITEBOARD_TOOL_DEFINITIONS.map((def) =>\n WHITEBOARD_PAGE_TOOL_NAMES.has(def.Name)\n ? def\n : { ...def, Description: `${def.Description}${WHITEBOARD_ACTIVE_PAGE_NOTE}` });\n\n/** Padding added around item bounds when highlighting by itemIds. */\nconst HIGHLIGHT_PAD = 18;\n\n/** The font family keys accepted by the style tool params. */\nconst WHITEBOARD_FONT_FAMILIES: readonly WhiteboardFontFamily[] = ['sans', 'serif', 'mono'];\n\n/** Hex colors accepted for text color (\"#abc\" / \"#aabbcc\"). */\nconst HEX_COLOR = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\n\nfunction ok(itemId: string | undefined, summary: string): string {\n const result: WhiteboardToolResult = { success: true, itemId, summary };\n return JSON.stringify(result);\n}\n\nfunction fail(error: string): string {\n const result: WhiteboardToolResult = { success: false, error };\n return JSON.stringify(result);\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\n/**\n * Extract + validate the optional text-style args shared by AddNote / AddText / StyleItem\n * into an {@link WhiteboardItemPatch}. `allowColor` is true only for text labels — sticky\n * tints are categorical and agent violet comes from authorship, never from `Color`.\n */\nfunction textStylePatch(args: Record<string, unknown>, allowColor: boolean): { patch: WhiteboardItemPatch } | { error: string } {\n const patch: WhiteboardItemPatch = {};\n if (args['fontSize'] !== undefined) {\n const size = asNumber(args['fontSize']);\n if (size === undefined || !WHITEBOARD_FONT_SIZES.includes(size)) {\n return { error: `\"fontSize\" must be one of ${WHITEBOARD_FONT_SIZES.join(', ')}.` };\n }\n patch.FontSize = size;\n }\n if (args['fontFamily'] !== undefined) {\n const family = args['fontFamily'];\n if (typeof family !== 'string' || !(WHITEBOARD_FONT_FAMILIES as readonly string[]).includes(family)) {\n return { error: `\"fontFamily\" must be one of ${WHITEBOARD_FONT_FAMILIES.join(', ')}.` };\n }\n patch.FontFamily = family as WhiteboardFontFamily;\n }\n if (args['bold'] !== undefined) {\n if (typeof args['bold'] !== 'boolean') {\n return { error: '\"bold\" must be a boolean.' };\n }\n patch.FontWeight = args['bold'] ? 700 : 400;\n }\n if (args['color'] !== undefined) {\n if (!allowColor) {\n return { error: '\"color\" only applies to text labels.' };\n }\n const color = args['color'];\n if (typeof color !== 'string' || !HEX_COLOR.test(color)) {\n return { error: '\"color\" must be a hex color like \"#fbbf24\".' };\n }\n patch.Color = color;\n }\n return { patch };\n}\n\n/** Auto-placement when the agent omits coordinates: just right of existing content. */\nfunction autoPlace(state: WhiteboardState): WhiteboardPoint {\n const bounds = state.ContentBounds();\n if (!bounds) {\n return { X: 120, Y: 100 };\n }\n return { X: bounds.X + bounds.W + 40, Y: bounds.Y + 20 };\n}\n\nfunction unionBounds(state: WhiteboardState, items: WhiteboardItem[]): WhiteboardBounds {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n for (const item of items) {\n const b = state.ItemBounds(item);\n minX = Math.min(minX, b.X);\n minY = Math.min(minY, b.Y);\n maxX = Math.max(maxX, b.X + b.W);\n maxY = Math.max(maxY, b.Y + b.H);\n }\n return { X: minX, Y: minY, W: maxX - minX, H: maxY - minY };\n}\n\n/**\n * Execute one agent whiteboard tool against the state engine (author `'agent'`, one undo\n * batch per call) and return the JSON result string for the tool round-trip.\n *\n * Never throws: malformed args / unknown tools / unknown item IDs return a\n * `{ success: false, error }` payload so the model can self-correct conversationally.\n */\nexport function ApplyWhiteboardAgentTool(state: WhiteboardState, toolName: string, argsJson: string): string {\n let args: Record<string, unknown>;\n try {\n const parsed: unknown = argsJson.trim().length === 0 ? {} : JSON.parse(argsJson);\n if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n return fail('Tool arguments must be a JSON object.');\n }\n args = parsed as Record<string, unknown>;\n }\n catch {\n return fail('Tool arguments are not valid JSON.');\n }\n\n switch (toolName) {\n case WHITEBOARD_TOOL_NAMES.AddNote: return addNote(state, args);\n case WHITEBOARD_TOOL_NAMES.AddShape: return addShape(state, args);\n case WHITEBOARD_TOOL_NAMES.AddText: return addText(state, args);\n case WHITEBOARD_TOOL_NAMES.AddMarkdown: return addMarkdown(state, args);\n case WHITEBOARD_TOOL_NAMES.AddHtml: return addHtml(state, args);\n case WHITEBOARD_TOOL_NAMES.UpdateContent: return updateContent(state, args);\n case WHITEBOARD_TOOL_NAMES.DrawConnector: return drawConnector(state, args);\n case WHITEBOARD_TOOL_NAMES.Highlight: return highlight(state, args);\n case WHITEBOARD_TOOL_NAMES.MoveItem: return moveItem(state, args);\n case WHITEBOARD_TOOL_NAMES.RemoveItem: return removeItem(state, args);\n case WHITEBOARD_TOOL_NAMES.StyleItem: return styleItem(state, args);\n case WHITEBOARD_TOOL_NAMES.AddPage: return addPage(state, args);\n case WHITEBOARD_TOOL_NAMES.SwitchPage: return switchPage(state, args);\n case WHITEBOARD_TOOL_NAMES.RenamePage: return renamePage(state, args);\n default:\n return fail(`Unknown whiteboard tool \"${toolName}\".`);\n }\n}\n\n/** Success payload for the page tools (carries `pageId` instead of `itemId`). */\nfunction okPage(pageId: string, summary: string): string {\n const result: WhiteboardToolResult = { success: true, pageId, summary };\n return JSON.stringify(result);\n}\n\n/** The page list rendered into not-found errors so the model can self-correct. */\nfunction pageListText(state: WhiteboardState): string {\n return state.Pages.map((p) => `\"${p.Name}\"${p.Active ? ' (active)' : ''}`).join(', ');\n}\n\nfunction addPage(state: WhiteboardState, args: Record<string, unknown>): string {\n if (args['name'] !== undefined && typeof args['name'] !== 'string') {\n return fail('AddPage: \"name\" must be a string when provided.');\n }\n const page = state.AddPage(asString(args['name']), 'agent');\n if (!page) {\n return fail('The host application canceled this operation.');\n }\n return okPage(page.ID, `Created page \"${page.Name}\" and switched to it — new items will land on this page.`);\n}\n\nfunction switchPage(state: WhiteboardState, args: Record<string, unknown>): string {\n const name = asString(args['name']);\n if (!name) {\n return fail('SwitchPage requires a non-empty \"name\" (the page\\'s name or id).');\n }\n const page = state.FindPage(name);\n if (!page) {\n return fail(`SwitchPage: no page named \"${name}\". Pages: ${pageListText(state)}.`);\n }\n if (!state.SwitchPage(page.ID, 'agent')) {\n return fail('The host application canceled this operation.');\n }\n return okPage(page.ID, `Switched to page \"${page.Name}\" (${page.ItemCount} items).`);\n}\n\nfunction renamePage(state: WhiteboardState, args: Record<string, unknown>): string {\n const name = asString(args['name']);\n const newName = asString(args['newName']);\n if (!name || !newName) {\n return fail('RenamePage requires a non-empty \"name\" (current name or id) and \"newName\".');\n }\n const page = state.FindPage(name);\n if (!page) {\n return fail(`RenamePage: no page named \"${name}\". Pages: ${pageListText(state)}.`);\n }\n if (!state.RenamePage(page.ID, newName, 'agent')) {\n return fail('The host application canceled this operation.');\n }\n return okPage(page.ID, `Renamed page \"${page.Name}\" to \"${newName.trim()}\".`);\n}\n\nfunction addNote(state: WhiteboardState, args: Record<string, unknown>): string {\n const text = asString(args['text']);\n if (!text) {\n return fail('AddNote requires a non-empty \"text\".');\n }\n const style = textStylePatch(args, false);\n if ('error' in style) {\n return fail(`AddNote: ${style.error}`);\n }\n const place = autoPlace(state);\n const x = asNumber(args['x']) ?? place.X;\n const y = asNumber(args['y']) ?? place.Y;\n const item = state.RunBatch(() =>\n state.AddItem({ Kind: 'sticky', X: x, Y: y, Text: text, Rotation: 1.2, ...style.patch }, 'agent'));\n if (!item) {\n return fail('The host application canceled this operation.');\n }\n return ok(item.ID, `Added sticky note \"${text}\" at (${Math.round(x)}, ${Math.round(y)}).`);\n}\n\nfunction addShape(state: WhiteboardState, args: Record<string, unknown>): string {\n const label = asString(args['label']);\n if (!label) {\n return fail('AddShape requires a non-empty \"label\".');\n }\n const shapeRaw = asString(args['shape']) ?? 'rect';\n if (shapeRaw !== 'rect' && shapeRaw !== 'ellipse' && shapeRaw !== 'diamond') {\n return fail(`AddShape \"shape\" must be rect, ellipse or diamond (got \"${shapeRaw}\").`);\n }\n const shape: WhiteboardShapeKind = shapeRaw;\n const place = autoPlace(state);\n const x = asNumber(args['x']) ?? place.X;\n const y = asNumber(args['y']) ?? place.Y;\n const w = asNumber(args['w']) ?? 172;\n const h = asNumber(args['h']) ?? 56;\n const item = state.RunBatch(() =>\n state.AddItem({ Kind: 'shape', Shape: shape, X: x, Y: y, W: w, H: h, Label: label, Sub: asString(args['sub']) }, 'agent'));\n if (!item) {\n return fail('The host application canceled this operation.');\n }\n return ok(item.ID, `Added ${shape} \"${label}\" at (${Math.round(x)}, ${Math.round(y)}).`);\n}\n\nfunction addText(state: WhiteboardState, args: Record<string, unknown>): string {\n const text = asString(args['text']);\n if (!text) {\n return fail('AddText requires a non-empty \"text\".');\n }\n const style = textStylePatch(args, false);\n if ('error' in style) {\n return fail(`AddText: ${style.error}`);\n }\n const place = autoPlace(state);\n const x = asNumber(args['x']) ?? place.X;\n const y = asNumber(args['y']) ?? place.Y;\n const wRaw = asNumber(args['w']);\n const w = wRaw !== undefined ? Math.min(800, Math.max(60, Math.round(wRaw))) : undefined;\n const item = state.RunBatch(() => state.AddItem({ Kind: 'text', X: x, Y: y, Text: text, ...(w !== undefined ? { W: w } : {}), ...style.patch }, 'agent'));\n if (!item) {\n return fail('The host application canceled this operation.');\n }\n return ok(item.ID, `Added text label \"${text}\".`);\n}\n\n/** Clamp an optional numeric arg into [min, max], or return the default when omitted. */\nfunction clampedNumber(value: unknown, min: number, max: number, fallback: number | undefined): number | undefined {\n const raw = asNumber(value);\n if (raw === undefined) {\n return fallback;\n }\n return Math.min(max, Math.max(min, Math.round(raw)));\n}\n\nfunction addMarkdown(state: WhiteboardState, args: Record<string, unknown>): string {\n const markdown = asString(args['markdown']);\n if (!markdown) {\n return fail('AddMarkdown requires a non-empty \"markdown\".');\n }\n if (markdown.length > WHITEBOARD_MARKDOWN_MAX_CHARS) {\n return fail(`AddMarkdown: \"markdown\" exceeds the ${WHITEBOARD_MARKDOWN_MAX_CHARS}-character limit (got ${markdown.length}).`);\n }\n const place = autoPlace(state);\n const x = asNumber(args['x']) ?? place.X;\n const y = asNumber(args['y']) ?? place.Y;\n const w = clampedNumber(args['w'], 160, 800, 280) as number;\n const h = clampedNumber(args['h'], 80, 800, undefined);\n const item = state.RunBatch(() =>\n state.AddItem({ Kind: 'markdown', X: x, Y: y, W: w, ...(h !== undefined ? { H: h } : {}), Markdown: markdown }, 'agent'));\n if (!item) {\n return fail('The host application canceled this operation.');\n }\n return ok(item.ID, `Added a markdown panel at (${Math.round(x)}, ${Math.round(y)}).`);\n}\n\nfunction addHtml(state: WhiteboardState, args: Record<string, unknown>): string {\n const html = asString(args['html']);\n if (!html) {\n return fail('AddHtml requires a non-empty \"html\".');\n }\n if (html.length > WHITEBOARD_HTML_MAX_CHARS) {\n return fail(`AddHtml: \"html\" exceeds the ${WHITEBOARD_HTML_MAX_CHARS}-character limit (got ${html.length}).`);\n }\n const title = asString(args['title']);\n const place = autoPlace(state);\n const x = asNumber(args['x']) ?? place.X;\n const y = asNumber(args['y']) ?? place.Y;\n const w = clampedNumber(args['w'], 200, 960, 360) as number;\n const h = clampedNumber(args['h'], 120, 800, 240) as number;\n const item = state.RunBatch(() =>\n state.AddItem({ Kind: 'html', X: x, Y: y, W: w, H: h, Html: html, Title: title }, 'agent'));\n if (!item) {\n return fail('The host application canceled this operation.');\n }\n return ok(item.ID, `Added an HTML widget${title ? ` \"${title}\"` : ''} at (${Math.round(x)}, ${Math.round(y)}) — rendered sandboxed.`);\n}\n\n/** Validate one UpdateContent content field against the target item's kind. Returns the patch or an error. */\nfunction contentPatchFor(item: WhiteboardItem, args: Record<string, unknown>): { patch: WhiteboardItemPatch } | { error: string } {\n if (args['text'] !== undefined && typeof args['text'] !== 'string') {\n return { error: '\"text\" must be a string.' };\n }\n const markdown = asString(args['markdown']);\n const html = asString(args['html']);\n const text = args['text'] as string | undefined;\n const title = asString(args['title']);\n const contentFields = [markdown, html, text].filter((v) => v !== undefined).length;\n if (contentFields > 1) {\n return { error: 'pass exactly ONE of \"markdown\", \"html\" or \"text\".' };\n }\n if (contentFields === 0 && title === undefined) {\n return { error: 'pass one of \"markdown\", \"html\", \"text\" (or \"title\" for an HTML widget).' };\n }\n if (markdown !== undefined) {\n if (item.Kind !== 'markdown') {\n return { error: `\"markdown\" only applies to markdown panels (item ${item.ID} is a ${item.Kind}).` };\n }\n if (markdown.length > WHITEBOARD_MARKDOWN_MAX_CHARS) {\n return { error: `\"markdown\" exceeds the ${WHITEBOARD_MARKDOWN_MAX_CHARS}-character limit (got ${markdown.length}).` };\n }\n return { patch: { Markdown: markdown } };\n }\n if (html !== undefined || title !== undefined) {\n if (item.Kind !== 'html') {\n return { error: `\"html\"/\"title\" only apply to HTML widgets (item ${item.ID} is a ${item.Kind}).` };\n }\n if (html !== undefined && html.length > WHITEBOARD_HTML_MAX_CHARS) {\n return { error: `\"html\" exceeds the ${WHITEBOARD_HTML_MAX_CHARS}-character limit (got ${html.length}).` };\n }\n const patch: WhiteboardItemPatch = {};\n if (html !== undefined) {\n patch.Html = html;\n }\n if (title !== undefined) {\n patch.Title = title;\n }\n return { patch };\n }\n // text — sticky notes and free text labels\n if (item.Kind !== 'sticky' && item.Kind !== 'text') {\n return { error: `\"text\" only applies to sticky notes and text labels (item ${item.ID} is a ${item.Kind}).` };\n }\n if (!text || text.trim().length === 0) {\n return { error: '\"text\" must be a non-empty string.' };\n }\n return { patch: { Text: text } };\n}\n\nfunction updateContent(state: WhiteboardState, args: Record<string, unknown>): string {\n const itemId = asString(args['itemId']);\n if (!itemId) {\n return fail('UpdateContent requires \"itemId\".');\n }\n const item = state.GetItem(itemId);\n if (!item) {\n return fail(`UpdateContent: no item with id \"${itemId}\".`);\n }\n const result = contentPatchFor(item, args);\n if ('error' in result) {\n return fail(`UpdateContent: ${result.error}`);\n }\n // ONE UpdateItem in ONE batch — single undo step, single journal entry.\n const applied = state.RunBatch(() => state.UpdateItem(itemId, result.patch, 'agent'));\n if (!applied) {\n return fail('The host application canceled this operation.');\n }\n return ok(itemId, `Updated the content of ${itemId}.`);\n}\n\nfunction drawConnector(state: WhiteboardState, args: Record<string, unknown>): string {\n const fromId = asString(args['fromId']);\n const toId = asString(args['toId']);\n const fromX = asNumber(args['fromX']);\n const fromY = asNumber(args['fromY']);\n const toX = asNumber(args['toX']);\n const toY = asNumber(args['toY']);\n\n if (fromId && !state.GetItem(fromId)) {\n return fail(`DrawConnector: no item with id \"${fromId}\".`);\n }\n if (toId && !state.GetItem(toId)) {\n return fail(`DrawConnector: no item with id \"${toId}\".`);\n }\n const hasFrom = !!fromId || (fromX !== undefined && fromY !== undefined);\n const hasTo = !!toId || (toX !== undefined && toY !== undefined);\n if (!hasFrom || !hasTo) {\n return fail('DrawConnector requires both endpoints: fromId or fromX/fromY, and toId or toX/toY.');\n }\n const item = state.RunBatch(() =>\n state.AddItem({\n Kind: 'connector',\n FromItemID: fromId ?? null,\n ToItemID: toId ?? null,\n FromPoint: fromId ? null : { X: fromX as number, Y: fromY as number },\n ToPoint: toId ? null : { X: toX as number, Y: toY as number }\n }, 'agent'));\n if (!item) {\n return fail('The host application canceled this operation.');\n }\n return ok(item.ID, `Drew a connector ${fromId ?? '(point)'} → ${toId ?? '(point)'}.`);\n}\n\nfunction highlight(state: WhiteboardState, args: Record<string, unknown>): string {\n const label = asString(args['label']);\n const idsRaw = args['itemIds'];\n if (Array.isArray(idsRaw) && idsRaw.length > 0) {\n const items: WhiteboardItem[] = [];\n for (const raw of idsRaw) {\n const id = asString(raw);\n const item = id ? state.GetItem(id) : undefined;\n if (!item) {\n return fail(`Highlight: no item with id \"${String(raw)}\".`);\n }\n items.push(item);\n }\n const b = unionBounds(state, items);\n const region = state.RunBatch(() =>\n state.Highlight(b.X - HIGHLIGHT_PAD, b.Y - HIGHLIGHT_PAD, b.W + HIGHLIGHT_PAD * 2, b.H + HIGHLIGHT_PAD * 2, label, 'agent'));\n if (!region) {\n return fail('The host application canceled this operation.');\n }\n return ok(region.ID, `Highlighted ${items.length} item(s).`);\n }\n const x = asNumber(args['x']);\n const y = asNumber(args['y']);\n const w = asNumber(args['w']);\n const h = asNumber(args['h']);\n if (x === undefined || y === undefined || w === undefined || h === undefined) {\n return fail('Highlight requires itemIds, or an explicit x/y/w/h region.');\n }\n const region = state.RunBatch(() => state.Highlight(x, y, w, h, label, 'agent'));\n if (!region) {\n return fail('The host application canceled this operation.');\n }\n return ok(region.ID, `Highlighted the region at (${Math.round(x)}, ${Math.round(y)}).`);\n}\n\nfunction moveItem(state: WhiteboardState, args: Record<string, unknown>): string {\n const itemId = asString(args['itemId']);\n const x = asNumber(args['x']);\n const y = asNumber(args['y']);\n const w = asNumber(args['w']);\n const h = asNumber(args['h']);\n const moving = x !== undefined && y !== undefined;\n const resizing = w !== undefined || h !== undefined;\n if (!itemId || (!moving && !resizing)) {\n return fail('MoveItem requires \"itemId\" plus \"x\"+\"y\" (move), \"w\"/\"h\" (resize), or both.');\n }\n if (!state.GetItem(itemId)) {\n // Self-correction context: the id may be mistyped — or the item may live on\n // another PAGE (item lookups are scoped to the active page).\n const ids = state.Items.slice(0, 20).map((i) => i.ID).join(', ') || '(none)';\n return fail(\n `MoveItem: no item with id \"${itemId}\" on the active page \"${state.ActivePageName}\". ` +\n `Items here: ${ids}. If it lives on another page, switch first with ${WHITEBOARD_TOOL_NAMES.SwitchPage}.`);\n }\n const applied = state.RunBatch(() => {\n let okAll = true;\n if (moving) {\n okAll = state.MoveItem(itemId, x, y, 'agent') && okAll;\n }\n if (resizing) {\n const patch: WhiteboardItemPatch = {};\n if (w !== undefined) {\n patch.W = Math.max(24, w);\n }\n if (h !== undefined) {\n patch.H = Math.max(24, h);\n }\n okAll = state.UpdateItem(itemId, patch, 'agent') && okAll;\n }\n return okAll;\n });\n if (!applied) {\n return fail('The host application canceled this operation.');\n }\n const parts: string[] = [];\n if (moving) {\n parts.push(`moved to (${Math.round(x)}, ${Math.round(y)})`);\n }\n if (resizing) {\n parts.push(`resized to ${w !== undefined ? Math.round(Math.max(24, w)) : '(unchanged)'}×${h !== undefined ? Math.round(Math.max(24, h)) : '(unchanged)'}`);\n }\n return ok(itemId, `${itemId} ${parts.join(' and ')}.`);\n}\n\nfunction removeItem(state: WhiteboardState, args: Record<string, unknown>): string {\n const itemId = asString(args['itemId']);\n if (!itemId) {\n return fail('RemoveItem requires \"itemId\".');\n }\n if (!state.GetItem(itemId)) {\n return fail(`RemoveItem: no item with id \"${itemId}\".`);\n }\n const removed = state.RunBatch(() => state.RemoveItem(itemId, 'agent'));\n if (!removed) {\n return fail('The host application canceled this operation.');\n }\n return ok(itemId, `Removed ${itemId}.`);\n}\n\nfunction styleItem(state: WhiteboardState, args: Record<string, unknown>): string {\n const itemId = asString(args['itemId']);\n if (!itemId) {\n return fail('StyleItem requires \"itemId\".');\n }\n const item = state.GetItem(itemId);\n if (!item) {\n return fail(`StyleItem: no item with id \"${itemId}\".`);\n }\n if (item.Kind !== 'sticky' && item.Kind !== 'text') {\n return fail(`StyleItem only styles sticky notes and text labels (got a ${item.Kind}).`);\n }\n const style = textStylePatch(args, item.Kind === 'text');\n if ('error' in style) {\n return fail(`StyleItem: ${style.error}`);\n }\n if (Object.keys(style.patch).length === 0) {\n return fail('StyleItem requires at least one of \"fontSize\", \"fontFamily\", \"bold\" or \"color\".');\n }\n // ONE UpdateItem inside ONE batch — a single undo step and a single journal entry,\n // so the toast Undo reverts it whole and the perception feed sees one update.\n const styled = state.RunBatch(() => state.UpdateItem(itemId, style.patch, 'agent'));\n if (!styled) {\n return fail('The host application canceled this operation.');\n }\n return ok(itemId, `Restyled ${itemId}.`);\n}\n"]}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * LIVE WHITEBOARD — the HTML-widget INPUT BRIDGE (`MJWhiteboard.submit`) and the AMBIENT
3
+ * INTERACTION RECORDER.
4
+ *
5
+ * HTML widgets are tutoring-style "illustrate a concept and GET USER INPUT" chunks —
6
+ * micro-forms, HTML+SVG explainers, concept animations, one-question quizzes. They render
7
+ * inside a strictly sandboxed iframe (`sandbox="allow-scripts"` only, opaque origin), so
8
+ * the ONLY way data can flow out is `postMessage`. This module is the Angular-free half of
9
+ * that bridge:
10
+ *
11
+ * - {@link InjectWhiteboardSubmitHelper} prepends ONE helper script to every widget's
12
+ * `srcdoc` (exactly once) that defines BOTH halves of the bridge:
13
+ * 1. `window.MJWhiteboard.submit(data)` — the EXPLICIT input path; the widget calls
14
+ * it from a button / form handler and the helper posts the payload to the parent.
15
+ * 2. The AMBIENT interaction recorder — passive document-level listeners (click /
16
+ * change / debounced input / focusin / focusout) that observe form activity the
17
+ * widget author wrote NO script for, batch it, and post it to the parent as a
18
+ * `__mjWhiteboardInteraction` message. Password / hidden inputs are skipped
19
+ * entirely; every value is truncated client-side. The recorder is defensive:
20
+ * every handler is wrapped in try/catch so it can never break widget code.
21
+ * The helper targets `'*'` deliberately: the frame runs in an OPAQUE origin, so there is
22
+ * no concrete origin to name; the HOST side validates the message instead.
23
+ * - {@link EvaluateWidgetSubmitMessage} / {@link EvaluateWidgetInteractionMessage} are
24
+ * that host-side validation: the marker property must be present, the `event.source`
25
+ * must resolve to a TRACKED widget iframe (anything else is dropped), the payload is
26
+ * size-capped (oversize → warn + drop), and interaction batches are shape-checked.
27
+ * - {@link SummarizeWidgetInteractions} compresses one validated interaction batch into a
28
+ * compact human line (`clicked "Playful pink"; changed "vibe" to "pink"; typing in
29
+ * "email"`) — what the channel plugin forwards to the live agent.
30
+ *
31
+ * The board component owns the single `window` 'message' listener and emits accepted
32
+ * submissions as {@link WhiteboardWidgetSubmitEvent} and accepted ambient batches as
33
+ * {@link WhiteboardWidgetInteractionEvent}; the channel plugin forwards them to the live
34
+ * agent context as `[whiteboard]` notes (interaction notes throttled per widget).
35
+ */
36
+ /** Marker property carried on every explicit-submit bridge postMessage payload. */
37
+ export declare const WHITEBOARD_SUBMIT_MARKER = "__mjWhiteboardSubmit";
38
+ /** Marker property carried on every ambient-interaction bridge postMessage payload. */
39
+ export declare const WHITEBOARD_INTERACTION_MARKER = "__mjWhiteboardInteraction";
40
+ /** Max chars an in-widget recorded VALUE keeps (recorder-side truncation, defensive re-clip host-side). */
41
+ export declare const WHITEBOARD_INTERACTION_VALUE_MAX_CHARS = 120;
42
+ /** Max chars a recorded element LABEL keeps. */
43
+ export declare const WHITEBOARD_INTERACTION_LABEL_MAX_CHARS = 40;
44
+ /** Recorder batch flush interval (ms). */
45
+ export declare const WHITEBOARD_INTERACTION_FLUSH_MS = 1500;
46
+ /** Recorder batch flushes immediately at this queue depth. */
47
+ export declare const WHITEBOARD_INTERACTION_FLUSH_AT = 12;
48
+ /** Per-field typing debounce inside the recorder (ms). */
49
+ export declare const WHITEBOARD_INTERACTION_TYPE_DEBOUNCE_MS = 800;
50
+ /**
51
+ * The ONE helper script prepended to every widget `srcdoc` — defines `MJWhiteboard.submit`
52
+ * (explicit input path) AND installs the passive ambient-interaction recorder.
53
+ * `'*'` as the target origin is acceptable here: the sandboxed frame has an opaque origin
54
+ * (there is nothing else to address), and the HOST validates marker + `event.source`.
55
+ *
56
+ * The recorder, in widget-side terms:
57
+ * - `click` — buttons / links / labels / role=button / aria-labeled elements only
58
+ * (body/div noise without a label is ignored); records the tag + best label
59
+ * (aria-label || name || id || trimmed textContent, ≤40 chars).
60
+ * - `change` — select / radio / checkbox / text fields: field label + new value
61
+ * (checkbox → 'checked'/'unchecked').
62
+ * - `input` — debounced per-field (800 ms): field label + current value.
63
+ * - `focusin` / `focusout` — field label only.
64
+ * - PRIVACY: `type="password"` / `type="hidden"` fields are skipped entirely; every
65
+ * recorded value is truncated to 120 chars BEFORE leaving the frame.
66
+ * - BATCHING: events queue and flush via postMessage every 1500 ms or at 12 queued.
67
+ * - RESILIENCE: every handler body is try/catch-wrapped — recorder errors never leak
68
+ * into widget code.
69
+ *
70
+ * AUTO-SUBMIT FALLBACK: agent-generated widgets don't always wire
71
+ * `MJWhiteboard.submit` — a plain `<form>` submit would NAVIGATE the sandboxed frame
72
+ * (blanking the widget) and an inert Submit button goes nowhere. The helper therefore:
73
+ * - intercepts every `submit` event (preventDefault — the frame never navigates) and
74
+ * forwards the form's serialized fields as `{ __auto: true, fields }`;
75
+ * - watches clicks on submit-ish buttons (type=submit, or labeled submit/send/done/…)
76
+ * and, shortly after, forwards the nearest form's (or document's) fields the same way;
77
+ * - DEDUPES: an explicit `MJWhiteboard.submit` (or a prior auto-forward) within 600 ms
78
+ * suppresses the fallback, so well-built widgets never double-submit.
79
+ * - Serialization respects the recorder's privacy rules (password/hidden skipped,
80
+ * values clipped) and only checked radios/checkboxes contribute.
81
+ */
82
+ export declare const WHITEBOARD_SUBMIT_HELPER = "<script>window.MJWhiteboard={__lastSubmitAt:0,submit:function(data){window.MJWhiteboard.__lastSubmitAt=Date.now();parent.postMessage({__mjWhiteboardSubmit:true,data:data},'*');}};\n(function(){\nvar VALUE_MAX=120,LABEL_MAX=40,FLUSH_MS=1500,FLUSH_AT=12,TYPE_MS=800;\nvar queue=[],flushTimer=null,typeTimers={};\nfunction flush(){flushTimer=null;if(!queue.length){return;}var batch=queue;queue=[];try{parent.postMessage({__mjWhiteboardInteraction:true,events:batch},'*');}catch(e){}}\nfunction push(ev){queue.push(ev);if(queue.length>=FLUSH_AT){if(flushTimer){clearTimeout(flushTimer);flushTimer=null;}flush();return;}if(!flushTimer){flushTimer=setTimeout(flush,FLUSH_MS);}}\nfunction clip(v,max){v=String(v==null?'':v);return v.length>max?v.slice(0,max):v;}\nfunction isPrivate(el){var t=(el&&el.type?String(el.type):'').toLowerCase();return t==='password'||t==='hidden';}\nfunction labelOf(el){if(!el||!el.getAttribute){return '';}var v=el.getAttribute('aria-label')||el.getAttribute('name')||el.id;if(v){return clip(v,LABEL_MAX);}var t=(el.textContent||'').replace(/\\s+/g,' ').trim();return t?clip(t,LABEL_MAX):'';}\nfunction fieldLabel(el){var own=labelOf(el);if(own){return own;}try{if(el.labels&&el.labels.length){var lt=(el.labels[0].textContent||'').replace(/\\s+/g,' ').trim();if(lt){return clip(lt,LABEL_MAX);}}var wrap=el.closest?el.closest('label'):null;if(wrap){var wt=(wrap.textContent||'').replace(/\\s+/g,' ').trim();if(wt){return clip(wt,LABEL_MAX);}}}catch(e){}return el.tagName?el.tagName.toLowerCase():'field';}\nfunction isField(el){var t=el&&el.tagName?el.tagName.toUpperCase():'';return t==='INPUT'||t==='TEXTAREA'||t==='SELECT';}\nfunction fieldValue(el){if(el.type==='checkbox'){return el.checked?'checked':'unchecked';}return clip(el.value,VALUE_MAX);}\ndocument.addEventListener('click',function(e){try{var el=e.target&&e.target.closest?e.target.closest('button,a,label,input[type=\"button\"],input[type=\"submit\"],[role=\"button\"],[aria-label]'):null;if(!el){return;}var lbl=labelOf(el);if(!lbl){return;}push({kind:'click',target:lbl,tag:el.tagName.toLowerCase()});}catch(err){}},true);\ndocument.addEventListener('change',function(e){try{var el=e.target;if(!isField(el)||isPrivate(el)){return;}var name=fieldLabel(el);if(typeTimers[name]){clearTimeout(typeTimers[name]);delete typeTimers[name];}push({kind:'change',target:name,value:fieldValue(el)});}catch(err){}},true);\ndocument.addEventListener('input',function(e){try{var el=e.target;if(!isField(el)||isPrivate(el)){return;}var t=(el.type||'').toLowerCase();if(t==='checkbox'||t==='radio'){return;}var name=fieldLabel(el);if(typeTimers[name]){clearTimeout(typeTimers[name]);}typeTimers[name]=setTimeout(function(){delete typeTimers[name];try{push({kind:'input',target:name,value:clip(el.value,VALUE_MAX)});}catch(e2){}},TYPE_MS);}catch(err){}},true);\ndocument.addEventListener('focusin',function(e){try{var el=e.target;if(!isField(el)||isPrivate(el)){return;}push({kind:'focus',target:fieldLabel(el)});}catch(err){}});\ndocument.addEventListener('focusout',function(e){try{var el=e.target;if(!isField(el)||isPrivate(el)){return;}push({kind:'blur',target:fieldLabel(el)});}catch(err){}});\nvar AUTO_DEDUPE_MS=600;\nfunction collectFields(scope){var out={},els=(scope&&scope.querySelectorAll?scope:document).querySelectorAll('input,select,textarea');for(var i=0;i<els.length;i++){var el=els[i];if(isPrivate(el)){continue;}var t=(el.type||'').toLowerCase();if((t==='radio'||t==='checkbox')&&!el.checked){continue;}var name=fieldLabel(el);if(t==='checkbox'){out[name]='checked';}else{out[name]=clip(el.value,VALUE_MAX);}}return out;}\nfunction autoSubmit(scope,trigger){try{var last=window.MJWhiteboard.__lastSubmitAt||0;if(Date.now()-last<AUTO_DEDUPE_MS){return;}var fields=collectFields(scope);var payload={__auto:true,trigger:clip(trigger||'submit',LABEL_MAX),fields:fields};window.MJWhiteboard.submit(payload);}catch(err){}}\ndocument.addEventListener('submit',function(e){try{e.preventDefault();autoSubmit(e.target,'form');}catch(err){}},true);\ndocument.addEventListener('click',function(e){try{var b=e.target&&e.target.closest?e.target.closest('button,input[type=\"submit\"],input[type=\"button\"]'):null;if(!b){return;}var label=(labelOf(b)||'')+' '+(b.type||'');if(!/submit|send|done|go\\b|answer|check/i.test(label)){return;}setTimeout(function(){autoSubmit(b.form||document,labelOf(b)||'button');},150);}catch(err){}},true);\n})();</script>";
83
+ /** Max serialized payload size (chars) accepted from one `MJWhiteboard.submit` call. */
84
+ export declare const WHITEBOARD_WIDGET_SUBMIT_MAX_CHARS = 8000;
85
+ /** One accepted widget submission, surfaced by the board/host `WidgetSubmitted` output. */
86
+ export interface WhiteboardWidgetSubmitEvent {
87
+ /** The submitting widget's board item ID (e.g. `html-2`). */
88
+ ItemID: string;
89
+ /** The widget's header title ('' when untitled — consumers fall back to {@link ItemID}). */
90
+ Title: string;
91
+ /** The submitted payload, JSON-serialized (capped at {@link WHITEBOARD_WIDGET_SUBMIT_MAX_CHARS}). */
92
+ DataJson: string;
93
+ }
94
+ /**
95
+ * BEFORE-event args for the board/host `WidgetSubmitting` output — raised after a
96
+ * widget's `MJWhiteboard.submit` payload passed validation (marker + tracked source +
97
+ * size cap) but BEFORE it is surfaced through `WidgetSubmitted`. Handlers run
98
+ * synchronously; set {@link Cancel} to `true` to drop the submission (no `WidgetSubmitted`
99
+ * fires and nothing reaches the agent/consumer).
100
+ */
101
+ export interface WhiteboardWidgetSubmittingEventArgs {
102
+ /** The validated submission about to be surfaced. */
103
+ Event: WhiteboardWidgetSubmitEvent;
104
+ /** Set to `true` (in a synchronous handler) to drop the submission. */
105
+ Cancel: boolean;
106
+ }
107
+ /** Why an incoming 'message' event was NOT surfaced as a widget submission. */
108
+ export type WhiteboardWidgetSubmitDropReason =
109
+ /** Not a bridge message at all (no marker) — other postMessage traffic, ignore silently. */
110
+ 'not-submit'
111
+ /** Marker present but `event.source` is not a tracked widget iframe — spoof/stale, drop. */
112
+ | 'unknown-source'
113
+ /** Payload serialized beyond the cap — warn + drop. */
114
+ | 'oversize'
115
+ /** Payload could not be JSON-serialized (e.g. `undefined` / function) — drop. */
116
+ | 'unserializable';
117
+ /** Outcome of evaluating one window 'message' event against the bridge contract. */
118
+ export type WhiteboardWidgetSubmitOutcome = {
119
+ Kind: 'submit';
120
+ Event: WhiteboardWidgetSubmitEvent;
121
+ } | {
122
+ Kind: 'dropped';
123
+ Reason: WhiteboardWidgetSubmitDropReason;
124
+ };
125
+ /**
126
+ * Prepend the `MJWhiteboard.submit` helper to a widget's HTML source — EXACTLY once.
127
+ * Idempotent: when the helper is already present (re-render of an injected source) the
128
+ * input is returned unchanged, so memoized srcdocs never accumulate duplicate helpers.
129
+ */
130
+ export declare function InjectWhiteboardSubmitHelper(html: string): string;
131
+ /**
132
+ * Host-side validation of one window 'message' event:
133
+ *
134
+ * 1. the payload must carry the {@link WHITEBOARD_SUBMIT_MARKER} (anything else is
135
+ * unrelated postMessage traffic — dropped silently as `'not-submit'`);
136
+ * 2. `sourceWidget` is the caller's resolution of `event.source` against its tracked
137
+ * widget iframes (window → item map) — `null` means the sender is NOT one of the
138
+ * board's widgets and the message is dropped (`'unknown-source'`);
139
+ * 3. the submitted data is JSON-serialized and capped at
140
+ * {@link WHITEBOARD_WIDGET_SUBMIT_MAX_CHARS} (`'oversize'` beyond it).
141
+ */
142
+ export declare function EvaluateWidgetSubmitMessage(messageData: unknown, sourceWidget: {
143
+ ItemID: string;
144
+ Title?: string;
145
+ } | null): WhiteboardWidgetSubmitOutcome;
146
+ /** Max serialized size (chars) accepted for one ambient interaction BATCH. */
147
+ export declare const WHITEBOARD_WIDGET_INTERACTION_MAX_CHARS = 6000;
148
+ /** Max length of one summarized interaction line (see {@link SummarizeWidgetInteractions}). */
149
+ export declare const WHITEBOARD_INTERACTION_SUMMARY_MAX_CHARS = 300;
150
+ /** The event kinds the in-widget recorder emits. */
151
+ export type WhiteboardWidgetInteractionKind = 'click' | 'change' | 'input' | 'focus' | 'blur';
152
+ /** One recorded in-widget interaction, as posted by the injected recorder. */
153
+ export interface WhiteboardWidgetInteractionRecord {
154
+ /** What happened. */
155
+ kind: WhiteboardWidgetInteractionKind;
156
+ /** Best label of the interacted element (aria-label || name || id || text, ≤40 chars). */
157
+ target: string;
158
+ /** The field's value after the event (change/input only; checkbox → 'checked'/'unchecked'). */
159
+ value?: string;
160
+ /** The clicked element's tag name (click only). */
161
+ tag?: string;
162
+ }
163
+ /**
164
+ * One accepted ambient-interaction batch, surfaced by the board/host `WidgetInteraction`
165
+ * output. `Summary` is the compact human line built by {@link SummarizeWidgetInteractions}
166
+ * — what integration layers forward to their agent runtime.
167
+ */
168
+ export interface WhiteboardWidgetInteractionEvent {
169
+ /** The widget's board item ID (e.g. `html-2`). */
170
+ ItemID: string;
171
+ /** The widget's header title ('' when untitled — consumers fall back to {@link ItemID}). */
172
+ Title: string;
173
+ /** Compact human summary of the batch (≤{@link WHITEBOARD_INTERACTION_SUMMARY_MAX_CHARS} chars). */
174
+ Summary: string;
175
+ }
176
+ /** Why an incoming 'message' event was NOT surfaced as an ambient interaction batch. */
177
+ export type WhiteboardWidgetInteractionDropReason =
178
+ /** Not an interaction message at all (no marker) — other postMessage traffic, ignore silently. */
179
+ 'not-interaction'
180
+ /** Marker present but `event.source` is not a tracked widget iframe — spoof/stale, drop. */
181
+ | 'unknown-source'
182
+ /** Serialized batch beyond {@link WHITEBOARD_WIDGET_INTERACTION_MAX_CHARS} — warn + drop. */
183
+ | 'oversize'
184
+ /** `events` missing / empty / not the documented record shape — warn + drop. */
185
+ | 'bad-shape';
186
+ /** Outcome of evaluating one window 'message' event against the interaction contract. */
187
+ export type WhiteboardWidgetInteractionOutcome = {
188
+ Kind: 'interaction';
189
+ Event: WhiteboardWidgetInteractionEvent;
190
+ } | {
191
+ Kind: 'dropped';
192
+ Reason: WhiteboardWidgetInteractionDropReason;
193
+ };
194
+ /**
195
+ * Host-side validation of one ambient-interaction 'message' event — mirrors the submit
196
+ * path: marker required (`'not-interaction'` otherwise), `sourceWidget` must resolve to a
197
+ * tracked widget iframe (`'unknown-source'`), the `events` array must be a non-empty list
198
+ * of well-shaped {@link WhiteboardWidgetInteractionRecord}s (`'bad-shape'`), and the
199
+ * serialized batch is capped at {@link WHITEBOARD_WIDGET_INTERACTION_MAX_CHARS}
200
+ * (`'oversize'`). Accepted batches come back pre-summarized (via
201
+ * {@link SummarizeWidgetInteractions}) as a {@link WhiteboardWidgetInteractionEvent}.
202
+ */
203
+ export declare function EvaluateWidgetInteractionMessage(messageData: unknown, sourceWidget: {
204
+ ItemID: string;
205
+ Title?: string;
206
+ } | null): WhiteboardWidgetInteractionOutcome;
207
+ /**
208
+ * Compress one validated interaction batch into a compact human line, e.g.
209
+ * `clicked "Playful pink"; changed "vibe" to "pink"; typing in "email"`.
210
+ *
211
+ * Pure: consecutive same-field `input` (typing) records are deduped (the LAST wins —
212
+ * matching the recorder's latest-value semantics), values are defensively re-truncated to
213
+ * {@link WHITEBOARD_INTERACTION_VALUE_MAX_CHARS}, and the whole line is capped at
214
+ * {@link WHITEBOARD_INTERACTION_SUMMARY_MAX_CHARS} chars (ellipsized).
215
+ */
216
+ export declare function SummarizeWidgetInteractions(events: WhiteboardWidgetInteractionRecord[]): string;
217
+ //# sourceMappingURL=whiteboard-widget-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whiteboard-widget-bridge.d.ts","sourceRoot":"","sources":["../../src/lib/whiteboard-widget-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,uFAAuF;AACvF,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AAEzE,2GAA2G;AAC3G,eAAO,MAAM,sCAAsC,MAAM,CAAC;AAE1D,gDAAgD;AAChD,eAAO,MAAM,sCAAsC,KAAK,CAAC;AAEzD,0CAA0C;AAC1C,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,8DAA8D;AAC9D,eAAO,MAAM,+BAA+B,KAAK,CAAC;AAElD,0DAA0D;AAC1D,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,wBAAwB,s1IAuBtB,CAAC;AAEhB,wFAAwF;AACxF,eAAO,MAAM,kCAAkC,OAAO,CAAC;AAEvD,2FAA2F;AAC3F,MAAM,WAAW,2BAA2B;IAC1C,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,qGAAqG;IACrG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mCAAmC;IAClD,qDAAqD;IACrD,KAAK,EAAE,2BAA2B,CAAC;IACnC,uEAAuE;IACvE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,MAAM,gCAAgC;AAC1C,4FAA4F;AAC1F,YAAY;AACd,4FAA4F;GAC1F,gBAAgB;AAClB,uDAAuD;GACrD,UAAU;AACZ,iFAAiF;GAC/E,gBAAgB,CAAC;AAErB,oFAAoF;AACpF,MAAM,MAAM,6BAA6B,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,2BAA2B,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,gCAAgC,CAAA;CAAE,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACtD,6BAA6B,CAyB/B;AAID,8EAA8E;AAC9E,eAAO,MAAM,uCAAuC,OAAO,CAAC;AAE5D,+FAA+F;AAC/F,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAE5D,oDAAoD;AACpD,MAAM,MAAM,+BAA+B,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9F,8EAA8E;AAC9E,MAAM,WAAW,iCAAiC;IAChD,qBAAqB;IACrB,IAAI,EAAE,+BAA+B,CAAC;IACtC,0FAA0F;IAC1F,MAAM,EAAE,MAAM,CAAC;IACf,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,gCAAgC;IAC/C,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wFAAwF;AACxF,MAAM,MAAM,qCAAqC;AAC/C,kGAAkG;AAChG,iBAAiB;AACnB,4FAA4F;GAC1F,gBAAgB;AAClB,6FAA6F;GAC3F,UAAU;AACZ,gFAAgF;GAC9E,WAAW,CAAC;AAEhB,yFAAyF;AACzF,MAAM,MAAM,kCAAkC,GAC1C;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,gCAAgC,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,qCAAqC,CAAA;CAAE,CAAC;AAgBvE;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GACtD,kCAAkC,CAuBpC;AA2BD;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iCAAiC,EAAE,GAAG,MAAM,CAgB/F"}