@ixo/editor 6.6.0 → 6.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-manifest.json +7 -7
- package/dist/{chunk-EULL3QTC.js → chunk-ABM3ZZIX.js} +442 -699
- package/dist/chunk-ABM3ZZIX.js.map +1 -0
- package/dist/{chunk-DZMEWZ5Z.js → chunk-VPMDJE6B.js} +2 -2
- package/dist/{chunk-QXSJ2QRD.js → chunk-ZE2EEZH6.js} +3013 -2467
- package/dist/chunk-ZE2EEZH6.js.map +1 -0
- package/dist/core/index.d.ts +178 -15
- package/dist/core/index.js +42 -2
- package/dist/core/index.js.map +1 -1
- package/dist/{graphql-client-D9Xzs0mM.d.ts → graphql-client-TT4tb5P6.d.ts} +1 -1
- package/dist/{index-C70b-Yd0.d.ts → index-D0S6jY7O.d.ts} +30 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/mantine/index.d.ts +28 -4
- package/dist/mantine/index.js +4 -2
- package/dist/mantine/index.js.map +1 -1
- package/dist/nodeContext-C-BsYuYi.d.ts +45 -0
- package/dist/{store-BS2HJhJR.d.ts → store-BIt_Vdjw.d.ts} +3 -5
- package/package.json +1 -1
- package/dist/chunk-EULL3QTC.js.map +0 -1
- package/dist/chunk-QXSJ2QRD.js.map +0 -1
- /package/dist/{chunk-DZMEWZ5Z.js.map → chunk-VPMDJE6B.js.map} +0 -0
package/dist/mantine/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export { q as ApiRequestBlockProps, h as ApiRequestBlockSpec, A as AuthorizationTab, d as AuthorizationTabState, B as BlockPresenceUser, i as CheckboxBlockProps, g as CheckboxBlockSpec, C as CoverImage, c as CoverImageProps, D as DevUcanGrantButton, Q as DropPosition, v as Entity, w as EntityResponse, f as EntitySigningSetup, x as EntityVariables, E as EvaluationTab, e as EvaluationTabState, N as ExternalDropZone, F as FlowPermissionsPanel, n as FlowStepRefProps, l as FlowStepRefSpec, G as GrantPermissionModal, y as GraphQLClient, M as GraphQLRequest, J as GraphQLResponse, H as HttpMethod, I as IxoEditor, b as IxoEditorProps, K as KeyValuePair, k as ListBlockProps, j as ListBlockSettings, L as ListBlockSpec, O as OverviewBlock, o as OverviewBlockProps, p as ProposalBlockProps, P as ProposalBlockSpec, t as getEntity, m as inlineContentSpecs, z as ixoGraphQLClient, r as useBlockPresence, a as useCreateCollaborativeIxoEditor, u as useCreateIxoEditor, s as useTrackBlockFocus } from '../graphql-client-
|
|
1
|
+
export { q as ApiRequestBlockProps, h as ApiRequestBlockSpec, A as AuthorizationTab, d as AuthorizationTabState, B as BlockPresenceUser, i as CheckboxBlockProps, g as CheckboxBlockSpec, C as CoverImage, c as CoverImageProps, D as DevUcanGrantButton, Q as DropPosition, v as Entity, w as EntityResponse, f as EntitySigningSetup, x as EntityVariables, E as EvaluationTab, e as EvaluationTabState, N as ExternalDropZone, F as FlowPermissionsPanel, n as FlowStepRefProps, l as FlowStepRefSpec, G as GrantPermissionModal, y as GraphQLClient, M as GraphQLRequest, J as GraphQLResponse, H as HttpMethod, I as IxoEditor, b as IxoEditorProps, K as KeyValuePair, k as ListBlockProps, j as ListBlockSettings, L as ListBlockSpec, O as OverviewBlock, o as OverviewBlockProps, p as ProposalBlockProps, P as ProposalBlockSpec, t as getEntity, m as inlineContentSpecs, z as ixoGraphQLClient, r as useBlockPresence, a as useCreateCollaborativeIxoEditor, u as useCreateIxoEditor, s as useTrackBlockFocus } from '../graphql-client-TT4tb5P6.js';
|
|
2
2
|
import React__default, { PropsWithChildren } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
export { H as Addr, A as AuthzExecActionTypes, y as BlockRequirements, x as BlocknoteContextValue, B as BlocknoteProvider, O as CosmosMsgForEmpty,
|
|
3
|
+
import { ap as IxoBlockProps, a5 as IxoEditorType, w as BlocknoteHandlers, a4 as FlowNodeRuntimeState } from '../index-D0S6jY7O.js';
|
|
4
|
+
export { H as Addr, A as AuthzExecActionTypes, y as BlockRequirements, x as BlocknoteContextValue, B as BlocknoteProvider, O as CosmosMsgForEmpty, av as DomainCardData, au as DomainCardRenderer, ar as DynamicListData, as as DynamicListDataProvider, at as DynamicListPanelRenderer, K as Expiration, Z as ImportProtocolTemplateResult, Y as ImportProtocolTemplatesToSpaceParams, p as IxoCollaborativeEditorOptions, o as IxoCollaborativeUser, n as IxoEditorConfig, l as IxoEditorOptions, m as IxoEditorTheme, R as ListProtocolDeedsWithTemplatesParams, _ as MatrixPrivacySettings, $ as MatrixRoom, a0 as MatrixSpace, a2 as MatrixSpaceStructure, a1 as MatrixSubspace, Q as ProposalAction, P as ProposalResponse, W as ProtocolDeedWithTemplates, X as ProtocolTemplateSummary, z as SingleChoiceProposal, v as StakeType, v as StakeTypeValue, L as Status, M as Threshold, T as Timestamp, J as Uint128, G as User, V as ValidatorActionType, aq as VisualizationRenderer, F as Vote, E as VoteInfo, C as VoteResponse, N as Votes, q as blockSpecs, r as getExtraSlashMenuItems, u as useBlocknoteContext, s as useBlocknoteHandlers } from '../index-D0S6jY7O.js';
|
|
5
5
|
import * as zustand from 'zustand';
|
|
6
6
|
import { SurveyModel } from '@ixo/surveys';
|
|
7
|
+
import { N as NodeContextRecord } from '../nodeContext-C-BsYuYi.js';
|
|
7
8
|
import * as _blocknote_core from '@blocknote/core';
|
|
8
9
|
export { Block, BlockNoteEditor, BlockNoteSchema, DefaultBlockSchema, DefaultInlineContentSchema, DefaultStyleSchema, PartialBlock } from '@blocknote/core';
|
|
9
10
|
import { MatrixClient } from 'matrix-js-sdk';
|
|
@@ -381,6 +382,29 @@ declare function useRegisterOpenSurvey({ id, title, source, schema, context, mod
|
|
|
381
382
|
*/
|
|
382
383
|
declare function useNodeRuntime(editor: IxoEditorType, nodeId: string): [FlowNodeRuntimeState, (updates: Partial<FlowNodeRuntimeState>) => void];
|
|
383
384
|
|
|
385
|
+
/**
|
|
386
|
+
* Reactive hook that subscribes to a single node's flow-manager context
|
|
387
|
+
* record in the top-level `nodeContext` Y.Map (keyed by block/node id),
|
|
388
|
+
* overlaid with per-field human overrides from the top-level
|
|
389
|
+
* `nodeContextOverrides` Y.Map (keyed `${nodeId}:${field}`).
|
|
390
|
+
*
|
|
391
|
+
* Usage:
|
|
392
|
+
* const [record, setHumanOverride] = useNodeContext(editor, block.id);
|
|
393
|
+
* // record?.values.theme, record?.fieldProvenance.theme, ...
|
|
394
|
+
* // setHumanOverride('theme', 'Reforestation');
|
|
395
|
+
*
|
|
396
|
+
* Malformed or missing entries read back as `undefined` — both maps are
|
|
397
|
+
* written across process boundaries, so shape is never assumed.
|
|
398
|
+
*
|
|
399
|
+
* `setHumanOverride(field, value)` writes ONLY the `${nodeId}:${field}` key
|
|
400
|
+
* into `nodeContextOverrides` — it never touches the `nodeContext` record, so
|
|
401
|
+
* a concurrent whole-record write by the flow manager can never erase the
|
|
402
|
+
* override. It works even when no record exists yet; the override becomes
|
|
403
|
+
* visible once a base record appears (overrides overlay an existing record
|
|
404
|
+
* only).
|
|
405
|
+
*/
|
|
406
|
+
declare function useNodeContext(editor: IxoEditorType, nodeId: string): [NodeContextRecord | undefined, (field: string, value: unknown) => void];
|
|
407
|
+
|
|
384
408
|
type CollapseEvent = 'collapse' | 'expand' | 'toggle';
|
|
385
409
|
type Listener = (event: CollapseEvent) => void;
|
|
386
410
|
interface ListBlocksUIContextValue {
|
|
@@ -618,4 +642,4 @@ declare function setDMNotificationRecord(runtimeMap: Map$1<any>, blockId: string
|
|
|
618
642
|
*/
|
|
619
643
|
declare function shouldNotify(state: DMNotificationState, blockId: string, currentAssignedDid: string): boolean;
|
|
620
644
|
|
|
621
|
-
export { BaseIconPicker, type BlockActionDefinition, BlocknoteHandlers, type CollapseEvent, type ColumnPosition, type DMNotificationRecord, type DMNotificationState, type DataSource, DebugButton, type DynamicListAction, type DynamicListBlockProps, DynamicListBlockSpec, type DynamicListColumn, type DynamicListPanelConfig, type FillOpenSurveyResult, FlowNodeConfigPanel, type FlowNodeConfigPanelProps, FlowNodePanel, type FlowNodePanelProps, type HookedActionInstanceConfig, type HookedActionType, type HookedActionsConfig, HookedActionsTab, IxoEditorType, type ListBlocksUIContextValue, type Listener, type OpenSurveyContext, type OpenSurveyEntry, type OpenSurveyQuestionSummary, type OpenSurveySnapshot, PageHeader, type PageHeaderMenuItem, type PageHeaderProps, PageTitle, type PageTitleProps, type PayloadField, didToMatrixUserId, fillOpenSurvey, findOrCreateDMRoom, getAllHookedActionTypes, getBlockActions, getDMNotificationState, getHomeserver, getHookedActionType, initializeHookedActions, registerBlockActions, registerBuiltInActionTypes, registerHookedActionType, sendDirectMessage, setDMNotificationRecord, shouldNotify, snapshotOpenSurvey, useHookedActions, useListBlocksUI, useListBlocksUIStore, useNodeRuntime, useOpenSurveyStore, usePanel, usePanelStore, useRegisterOpenSurvey };
|
|
645
|
+
export { BaseIconPicker, type BlockActionDefinition, BlocknoteHandlers, type CollapseEvent, type ColumnPosition, type DMNotificationRecord, type DMNotificationState, type DataSource, DebugButton, type DynamicListAction, type DynamicListBlockProps, DynamicListBlockSpec, type DynamicListColumn, type DynamicListPanelConfig, type FillOpenSurveyResult, FlowNodeConfigPanel, type FlowNodeConfigPanelProps, FlowNodePanel, type FlowNodePanelProps, type HookedActionInstanceConfig, type HookedActionType, type HookedActionsConfig, HookedActionsTab, IxoEditorType, type ListBlocksUIContextValue, type Listener, type OpenSurveyContext, type OpenSurveyEntry, type OpenSurveyQuestionSummary, type OpenSurveySnapshot, PageHeader, type PageHeaderMenuItem, type PageHeaderProps, PageTitle, type PageTitleProps, type PayloadField, didToMatrixUserId, fillOpenSurvey, findOrCreateDMRoom, getAllHookedActionTypes, getBlockActions, getDMNotificationState, getHomeserver, getHookedActionType, initializeHookedActions, registerBlockActions, registerBuiltInActionTypes, registerHookedActionType, sendDirectMessage, setDMNotificationRecord, shouldNotify, snapshotOpenSurvey, useHookedActions, useListBlocksUI, useListBlocksUIStore, useNodeContext, useNodeRuntime, useOpenSurveyStore, usePanel, usePanelStore, useRegisterOpenSurvey };
|
package/dist/mantine/index.js
CHANGED
|
@@ -77,19 +77,20 @@ import {
|
|
|
77
77
|
useHookedActions,
|
|
78
78
|
useListBlocksUI,
|
|
79
79
|
useListBlocksUIStore,
|
|
80
|
+
useNodeContext,
|
|
80
81
|
useNodeRuntime,
|
|
81
82
|
useOpenSurveyStore,
|
|
82
83
|
usePanel,
|
|
83
84
|
usePanelStore,
|
|
84
85
|
useRegisterOpenSurvey,
|
|
85
86
|
useTrackBlockFocus
|
|
86
|
-
} from "../chunk-
|
|
87
|
+
} from "../chunk-ZE2EEZH6.js";
|
|
87
88
|
import {
|
|
88
89
|
didToMatrixUserId,
|
|
89
90
|
findOrCreateDMRoom,
|
|
90
91
|
getHomeserver,
|
|
91
92
|
sendDirectMessage
|
|
92
|
-
} from "../chunk-
|
|
93
|
+
} from "../chunk-ABM3ZZIX.js";
|
|
93
94
|
|
|
94
95
|
// src/mantine/components/DebugButton.tsx
|
|
95
96
|
import React from "react";
|
|
@@ -531,6 +532,7 @@ export {
|
|
|
531
532
|
useHookedActions,
|
|
532
533
|
useListBlocksUI,
|
|
533
534
|
useListBlocksUIStore,
|
|
535
|
+
useNodeContext,
|
|
534
536
|
useNodeRuntime,
|
|
535
537
|
useOpenSurveyStore,
|
|
536
538
|
usePanel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mantine/components/DebugButton.tsx","../../src/mantine/components/PageHeader.tsx","../../src/mantine/flow/FlowNodePanel.tsx","../../src/mantine/flow/FlowNodeConfigPanel.tsx"],"sourcesContent":["import React from 'react';\nimport type { IxoEditorType } from '../../core/types';\nimport type { BlocknoteHandlers } from '../context/BlocknoteContext';\nimport { DevUcanGrantButton } from './DevUcanGrantButton';\n\nexport function DebugButton({ editor, handlers }: { editor: IxoEditorType; handlers?: BlocknoteHandlers }) {\n const yMapToObject = (map: any) => {\n if (!map) return null;\n const obj: Record<string, any> = {};\n map.forEach((value: any, key: string) => {\n // Recursively unwrap nested Y.Maps so their contents are visible in JSON\n if (value && typeof value.forEach === 'function' && typeof value.get === 'function' && !Array.isArray(value)) {\n obj[key] = yMapToObject(value);\n } else if (value && typeof value.toArray === 'function') {\n obj[key] = value.toArray();\n } else {\n obj[key] = value;\n }\n });\n return Object.keys(obj).length === 0 ? '(empty)' : obj;\n };\n\n const parseJsonProp = (raw: unknown) => {\n if (typeof raw !== 'string' || !raw) return raw;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n };\n\n const handleClick = () => {\n (window as any).__editor = editor;\n const yDoc = (editor as any)._yDoc || (editor as any)._yRuntime?.doc;\n console.log('Editor exposed as window.__editor. _yDoc?', !!yDoc);\n const dump: Record<string, any> = {};\n\n // 1. BlockNote blocks — with parsed trigger / inputs / assignment so we can\n // see exactly what the listener is subscribing to.\n dump.blocks = editor.document.map((block: any) => ({\n id: block.id,\n type: block.type,\n actionType: block?.props?.actionType,\n triggerRaw: block?.props?.trigger,\n trigger: parseJsonProp(block?.props?.trigger),\n inputs: parseJsonProp(block?.props?.inputs),\n assignment: parseJsonProp(block?.props?.assignment),\n triggerMode: block?.props?.triggerMode,\n props: block.props,\n content: block.content,\n children: block.children,\n }));\n\n // 2. Runtime state\n dump.runtime = yMapToObject(editor._yRuntime);\n dump.xeroConnection = yMapToObject((editor as any)._yXeroConnection);\n dump.xeroWorkItems = yMapToObject((editor as any)._yXeroWorkItems);\n\n // 3. Delegations\n dump.delegations = yMapToObject(editor._yDelegations);\n\n // 4. Invocations\n dump.invocations = yMapToObject(editor._yInvocations);\n\n // 5. Flow metadata\n dump.flowMetadata = editor.getFlowMetadata?.() || null;\n\n // 6. Flow array\n dump.flowArray = editor.getFlow?.() || null;\n\n // 7. Entities Y.Map (companion oracle results)\n dump.entities = yMapToObject(yDoc?.getMap('entities'));\n\n // 8. Trigger/event state — the full chain for debugging block.event.all\n // a) auditTrail: where run records (source emissions) are written\n // b) pendingInvocations: what the Invoke button reads from\n // c) barrierState: partial barrier completion for block.event.all listeners\n // d) runtimeFailures / pendingDMState: failure + notification dedup\n dump.auditTrail = yMapToObject(yDoc?.getMap('auditTrail'));\n dump.pendingInvocations = yMapToObject(yDoc?.getMap('pendingInvocations'));\n dump.barrierState = yMapToObject(yDoc?.getMap('barrierState'));\n dump.runtimeFailures = yMapToObject(yDoc?.getMap('runtimeFailures'));\n dump.dmNotifications = yMapToObject(yDoc?.getMap('dmNotifications'));\n\n const json = JSON.stringify(dump, null, 2);\n console.log('Editor Debug Dump:\\n' + json);\n };\n\n return (\n <>\n <DevUcanGrantButton editor={editor} handlers={handlers} />\n <button\n onClick={handleClick}\n style={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: 9999,\n padding: '8px 12px',\n background: '#1a1a2e',\n color: '#00ff88',\n border: '1px solid #00ff88',\n borderRadius: 6,\n fontSize: 12,\n fontFamily: 'monospace',\n cursor: 'pointer',\n opacity: 0.7,\n }}\n title=\"Debug: Log all blocks + runtime state to console\"\n >\n Debug Y.Doc\n </button>\n </>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\n\nexport interface PageHeaderMenuItem {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n disabled?: boolean;\n divider?: boolean;\n}\n\nexport interface PageHeaderProps {\n title?: string;\n icon?: React.ReactNode;\n isPrivate?: boolean;\n onPrivacyChange?: (isPrivate: boolean) => void;\n lastEdited?: string;\n onShare?: () => void;\n onFavorite?: () => void;\n isFavorited?: boolean;\n menuItems?: PageHeaderMenuItem[];\n}\n\n/**\n * PageHeader component - A Notion-style page header with title, privacy badge, and actions\n */\nexport function PageHeader({\n title = 'New page',\n icon,\n isPrivate = true,\n onPrivacyChange,\n lastEdited,\n onShare,\n onFavorite,\n isFavorited = false,\n menuItems = [],\n}: PageHeaderProps): React.ReactElement {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [isPrivacyOpen, setIsPrivacyOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const privacyRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsMenuOpen(false);\n }\n if (privacyRef.current && !privacyRef.current.contains(event.target as Node)) {\n setIsPrivacyOpen(false);\n }\n }\n\n if (isMenuOpen || isPrivacyOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isMenuOpen, isPrivacyOpen]);\n\n const handleMenuItemClick = (item: PageHeaderMenuItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsMenuOpen(false);\n }\n };\n\n return (\n <div style={styles.container}>\n <div style={styles.leftSection}>\n <span style={styles.icon}>{icon || '📄'}</span>\n <span style={styles.title}>{title}</span>\n <div style={styles.privacyContainer} ref={privacyRef}>\n <button style={styles.privacyBadge} onClick={() => onPrivacyChange && setIsPrivacyOpen(!isPrivacyOpen)}>\n <span style={styles.lockIcon}>{isPrivate ? '🔒' : '🌐'}</span>\n <span>{isPrivate ? 'Private' : 'Public'}</span>\n {onPrivacyChange && <span style={styles.chevron}>▾</span>}\n </button>\n {isPrivacyOpen && onPrivacyChange && (\n <div style={styles.dropdown}>\n <button\n style={{\n ...styles.menuItem,\n ...(isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(true);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🔒</span>\n <span>Private</span>\n </button>\n <button\n style={{\n ...styles.menuItem,\n ...(!isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(false);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🌐</span>\n <span>Public</span>\n </button>\n </div>\n )}\n </div>\n </div>\n <div style={styles.rightSection}>\n {lastEdited && <span style={styles.editedText}>{lastEdited}</span>}\n {onShare && (\n <button style={styles.shareButton} onClick={onShare}>\n Share\n </button>\n )}\n {onFavorite && (\n <button style={styles.iconButton} onClick={onFavorite}>\n {isFavorited ? '★' : '☆'}\n </button>\n )}\n {menuItems.length > 0 && (\n <div style={styles.menuContainer} ref={menuRef}>\n <button style={styles.menuButton} onClick={() => setIsMenuOpen(!isMenuOpen)} aria-label=\"Menu\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" />\n </svg>\n </button>\n {isMenuOpen && (\n <div style={styles.dropdown}>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.divider && index > 0 && <div style={styles.divider} />}\n <button\n style={{\n ...styles.menuItem,\n ...(item.disabled ? styles.menuItemDisabled : {}),\n }}\n onClick={() => handleMenuItemClick(item)}\n disabled={item.disabled}\n >\n {item.icon && <span style={styles.menuItemIcon}>{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'transparent',\n fontSize: '14px',\n minHeight: '44px',\n color: 'rgba(255, 255, 255, 0.9)',\n },\n leftSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n icon: {\n fontSize: '16px',\n },\n title: {\n fontWeight: 500,\n color: 'rgba(255, 255, 255, 0.9)',\n },\n privacyContainer: {\n position: 'relative' as const,\n },\n privacyBadge: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 6px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '12px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n lockIcon: {\n fontSize: '12px',\n },\n chevron: {\n fontSize: '10px',\n marginLeft: '2px',\n },\n rightSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n editedText: {\n color: 'rgba(255, 255, 255, 0.4)',\n fontSize: '12px',\n },\n shareButton: {\n padding: '4px 10px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n borderRadius: '3px',\n fontWeight: 500,\n },\n iconButton: {\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '16px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n menuContainer: {\n position: 'relative',\n },\n menuButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n dropdown: {\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '4px',\n minWidth: '180px',\n backgroundColor: 'rgb(37, 37, 37)',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.4)',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n padding: '4px 0',\n zIndex: 1000,\n },\n menuItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n textAlign: 'left',\n },\n menuItemDisabled: {\n color: 'rgba(255, 255, 255, 0.3)',\n cursor: 'not-allowed',\n },\n menuItemActive: {\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n },\n menuItemIcon: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '16px',\n },\n divider: {\n height: '1px',\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\n margin: '4px 0',\n },\n};\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\n\n// Panel-based blocks — these export a dedicated \"detail\" panel component that is\n// normally registered via usePanel. We render that panel content directly.\nimport { ActionFlowPanel } from '@/mantine/blocks/action/flow/FlowView';\nimport { FormPanel } from '@/mantine/blocks/form/flow/FormPanel';\nimport { FlowConfig as ProposalFlowConfig } from '@/mantine/blocks/proposal/flow/FlowConfig';\nimport { DomainCreatorSurveyPanel } from '@/mantine/blocks/domainCreator/flow/DomainCreatorSurveyPanel';\nimport { SignPanel } from '@/mantine/blocks/domainCreatorSign/flow/SignPanel';\nimport { GovernanceGroupPanel } from '@/mantine/blocks/governanceGroup/flow/GovernanceGroupPanel';\n\n// Inline-detail blocks — the FlowView itself IS the \"do-the-step\" detail UI\n// (no separate panel; they don't use usePanel for their primary content).\nimport { ClaimFlowView } from '@/mantine/blocks/claim/flow/FlowView';\nimport { EvaluatorFlowView } from '@/mantine/blocks/evaluator/flow/FlowView';\nimport { NotifyFlowView } from '@/mantine/blocks/notify/flow/FlowView';\nimport { CheckboxFlowView } from '@/mantine/blocks/checkbox/flow/FlowView';\nimport { SecretsFlowView } from '@/mantine/blocks/secrets/flow/SecretsFlowView';\nimport { SkillsFlowView } from '@/mantine/blocks/skills/flow/SkillsFlowView';\n\n// email / apiRequest keep their detail UI inside a private (non-exported)\n// PanelContent function, so we dispatch to the full FlowView card instead.\nimport { EmailFlowView } from '@/mantine/blocks/email/flow/FlowView';\nimport { ApiRequestFlowView } from '@/mantine/blocks/apiRequest/flow/FlowView';\n\nexport interface FlowNodePanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's \"do-the-step\" / detail UI. Lets a host app render the panel for any\n * selected step in its own right column without relying on the per-block\n * usePanel/registeredPanels indirection.\n *\n * NOTE: every rendered detail component reads from BlocknoteContext\n * (useBlocknoteHandlers / useBlocknoteContext throw if the provider is\n * missing). Keep <FlowNodePanel> wrapped in the app's BlocknoteProvider /\n * EditorBlocknoteProvider.\n */\nexport function FlowNodePanel(props: FlowNodePanelProps) {\n // Embedded: the host app supplies the panel header, so BaseRightPanelLayout\n // suppresses its own (no duplicate title / close).\n return (\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodePanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n );\n}\n\nfunction FlowNodePanelContent({ editor, block, isDisabled }: FlowNodePanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionFlowPanel editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'form':\n return <FormPanel editor={editor} block={block} />;\n\n case 'proposal':\n return <ProposalFlowConfig editor={editor} block={block} />;\n\n case 'domainCreator':\n return <DomainCreatorSurveyPanel editor={editor} block={block} />;\n\n case 'domainCreatorSign':\n return <SignPanel editor={editor} block={block} />;\n\n case 'governanceGroup':\n return <GovernanceGroupPanel editor={editor} block={block} />;\n\n case 'claim':\n return <ClaimFlowView editor={editor} block={block} />;\n\n case 'evaluator':\n return <EvaluatorFlowView editor={editor} block={block} />;\n\n case 'notify':\n return <NotifyFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'checkbox':\n return <CheckboxFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'secrets':\n return <SecretsFlowView editor={editor} block={block} />;\n\n case 'skills':\n return <SkillsFlowView editor={editor} block={block} />;\n\n // email / apiRequest: detail UI is a private PanelContent fn; render the\n // full FlowView card (its own onClick opens the registered panel).\n case 'email':\n return <EmailFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'apiRequest':\n return <ApiRequestFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n // enumChecklist has no flow-mode panel (renders EnumChecklistBlock in all\n // modes). Fallback to null / \"open in document\".\n case 'enumChecklist':\n default:\n return null;\n }\n}\n\nexport default FlowNodePanel;\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\n\n// Per-block TEMPLATE config panels — the authoring counterpart to FlowNodePanel.\n// Each exposes the block's rich configuration (General + the shared\n// Authorization / Assignment / Commitment / TTL / Evaluation tabs) on the same\n// BaseRightPanelLayout the runtime panels use.\nimport { TemplateConfig as ActionConfig } from '@/mantine/blocks/action/template/TemplateConfig';\nimport { TemplateConfig as ClaimConfig } from '@/mantine/blocks/claim/template/TemplateConfig';\nimport { TemplateConfig as FormConfig } from '@/mantine/blocks/form/template/TemplateConfig';\nimport { TemplateConfig as CheckboxConfig } from '@/mantine/blocks/checkbox/template/TemplateConfig';\nimport { TemplateConfig as EvaluatorConfig } from '@/mantine/blocks/evaluator/template/TemplateConfig';\nimport { TemplateConfig as NotifyConfig } from '@/mantine/blocks/notify/template/TemplateConfig';\nimport { TemplateConfig as EmailConfig } from '@/mantine/blocks/email/template/TemplateConfig';\nimport { TemplateConfig as ApiRequestConfig } from '@/mantine/blocks/apiRequest/template/TemplateConfig';\nimport { TemplateConfig as ProposalConfig } from '@/mantine/blocks/proposal/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorConfig } from '@/mantine/blocks/domainCreator/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorSignConfig } from '@/mantine/blocks/domainCreatorSign/template/TemplateConfig';\nimport { TemplateConfig as GovernanceGroupConfig } from '@/mantine/blocks/governanceGroup/template/TemplateConfig';\n\n// secrets / skills have a template VIEW rather than a tabbed config.\nimport { SecretsTemplateView } from '@/mantine/blocks/secrets/template/SecretsTemplateView';\nimport { SkillsTemplateView } from '@/mantine/blocks/skills/template/SkillsTemplateView';\n\nexport interface FlowNodeConfigPanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's TEMPLATE configuration panel — the authoring counterpart to\n * `FlowNodePanel` (which renders the runtime \"do-the-step\" UI). Lets a host app\n * render the rich config (General + Authorization/Assignment/Commitment/TTL/…)\n * for any selected step in its own right column.\n *\n * Since `addFlowNode` and the registry route every capability through the\n * generic `action` block, `action → ActionConfig` is the primary case; the\n * dedicated block types are covered for documents that use them directly.\n *\n * Wrapped in `FlowPanelEmbeddedContext` so each config's `BaseRightPanelLayout`\n * suppresses its own header/close (the host supplies those).\n */\nexport function FlowNodeConfigPanel(props: FlowNodeConfigPanelProps) {\n return (\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodeConfigPanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n );\n}\n\nfunction FlowNodeConfigPanelContent({ editor, block }: FlowNodeConfigPanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionConfig editor={editor} block={block} />;\n case 'claim':\n return <ClaimConfig editor={editor} block={block} />;\n case 'form':\n return <FormConfig editor={editor} block={block} />;\n case 'checkbox':\n return <CheckboxConfig editor={editor} block={block} />;\n case 'evaluator':\n return <EvaluatorConfig editor={editor} block={block} />;\n case 'notify':\n return <NotifyConfig editor={editor} block={block} />;\n case 'email':\n return <EmailConfig editor={editor} block={block} />;\n case 'apiRequest':\n return <ApiRequestConfig editor={editor} block={block} />;\n case 'proposal':\n return <ProposalConfig editor={editor} block={block} />;\n case 'domainCreator':\n return <DomainCreatorConfig editor={editor} block={block} />;\n case 'domainCreatorSign':\n return <DomainCreatorSignConfig editor={editor} block={block} />;\n case 'governanceGroup':\n return <GovernanceGroupConfig editor={editor} block={block} />;\n case 'secrets':\n return <SecretsTemplateView editor={editor} block={block} />;\n case 'skills':\n return <SkillsTemplateView editor={editor} block={block} />;\n default:\n return null;\n }\n}\n\nexport default FlowNodeConfigPanel;\n"],"mappings":"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","names":["React","React","React","React","React","TemplateConfig"]}
|
|
1
|
+
{"version":3,"sources":["../../src/mantine/components/DebugButton.tsx","../../src/mantine/components/PageHeader.tsx","../../src/mantine/flow/FlowNodePanel.tsx","../../src/mantine/flow/FlowNodeConfigPanel.tsx"],"sourcesContent":["import React from 'react';\nimport type { IxoEditorType } from '../../core/types';\nimport type { BlocknoteHandlers } from '../context/BlocknoteContext';\nimport { DevUcanGrantButton } from './DevUcanGrantButton';\n\nexport function DebugButton({ editor, handlers }: { editor: IxoEditorType; handlers?: BlocknoteHandlers }) {\n const yMapToObject = (map: any) => {\n if (!map) return null;\n const obj: Record<string, any> = {};\n map.forEach((value: any, key: string) => {\n // Recursively unwrap nested Y.Maps so their contents are visible in JSON\n if (value && typeof value.forEach === 'function' && typeof value.get === 'function' && !Array.isArray(value)) {\n obj[key] = yMapToObject(value);\n } else if (value && typeof value.toArray === 'function') {\n obj[key] = value.toArray();\n } else {\n obj[key] = value;\n }\n });\n return Object.keys(obj).length === 0 ? '(empty)' : obj;\n };\n\n const parseJsonProp = (raw: unknown) => {\n if (typeof raw !== 'string' || !raw) return raw;\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n };\n\n const handleClick = () => {\n (window as any).__editor = editor;\n const yDoc = (editor as any)._yDoc || (editor as any)._yRuntime?.doc;\n console.log('Editor exposed as window.__editor. _yDoc?', !!yDoc);\n const dump: Record<string, any> = {};\n\n // 1. BlockNote blocks — with parsed trigger / inputs / assignment so we can\n // see exactly what the listener is subscribing to.\n dump.blocks = editor.document.map((block: any) => ({\n id: block.id,\n type: block.type,\n actionType: block?.props?.actionType,\n triggerRaw: block?.props?.trigger,\n trigger: parseJsonProp(block?.props?.trigger),\n inputs: parseJsonProp(block?.props?.inputs),\n assignment: parseJsonProp(block?.props?.assignment),\n triggerMode: block?.props?.triggerMode,\n props: block.props,\n content: block.content,\n children: block.children,\n }));\n\n // 2. Runtime state\n dump.runtime = yMapToObject(editor._yRuntime);\n dump.xeroConnection = yMapToObject((editor as any)._yXeroConnection);\n dump.xeroWorkItems = yMapToObject((editor as any)._yXeroWorkItems);\n\n // 3. Delegations\n dump.delegations = yMapToObject(editor._yDelegations);\n\n // 4. Invocations\n dump.invocations = yMapToObject(editor._yInvocations);\n\n // 5. Flow metadata\n dump.flowMetadata = editor.getFlowMetadata?.() || null;\n\n // 6. Flow array\n dump.flowArray = editor.getFlow?.() || null;\n\n // 7. Entities Y.Map (companion oracle results)\n dump.entities = yMapToObject(yDoc?.getMap('entities'));\n\n // 8. Trigger/event state — the full chain for debugging block.event.all\n // a) auditTrail: where run records (source emissions) are written\n // b) pendingInvocations: what the Invoke button reads from\n // c) barrierState: partial barrier completion for block.event.all listeners\n // d) runtimeFailures / pendingDMState: failure + notification dedup\n dump.auditTrail = yMapToObject(yDoc?.getMap('auditTrail'));\n dump.pendingInvocations = yMapToObject(yDoc?.getMap('pendingInvocations'));\n dump.barrierState = yMapToObject(yDoc?.getMap('barrierState'));\n dump.runtimeFailures = yMapToObject(yDoc?.getMap('runtimeFailures'));\n dump.dmNotifications = yMapToObject(yDoc?.getMap('dmNotifications'));\n\n const json = JSON.stringify(dump, null, 2);\n console.log('Editor Debug Dump:\\n' + json);\n };\n\n return (\n <>\n <DevUcanGrantButton editor={editor} handlers={handlers} />\n <button\n onClick={handleClick}\n style={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: 9999,\n padding: '8px 12px',\n background: '#1a1a2e',\n color: '#00ff88',\n border: '1px solid #00ff88',\n borderRadius: 6,\n fontSize: 12,\n fontFamily: 'monospace',\n cursor: 'pointer',\n opacity: 0.7,\n }}\n title=\"Debug: Log all blocks + runtime state to console\"\n >\n Debug Y.Doc\n </button>\n </>\n );\n}\n","import React, { useState, useRef, useEffect } from 'react';\n\nexport interface PageHeaderMenuItem {\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n disabled?: boolean;\n divider?: boolean;\n}\n\nexport interface PageHeaderProps {\n title?: string;\n icon?: React.ReactNode;\n isPrivate?: boolean;\n onPrivacyChange?: (isPrivate: boolean) => void;\n lastEdited?: string;\n onShare?: () => void;\n onFavorite?: () => void;\n isFavorited?: boolean;\n menuItems?: PageHeaderMenuItem[];\n}\n\n/**\n * PageHeader component - A Notion-style page header with title, privacy badge, and actions\n */\nexport function PageHeader({\n title = 'New page',\n icon,\n isPrivate = true,\n onPrivacyChange,\n lastEdited,\n onShare,\n onFavorite,\n isFavorited = false,\n menuItems = [],\n}: PageHeaderProps): React.ReactElement {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [isPrivacyOpen, setIsPrivacyOpen] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n const privacyRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n setIsMenuOpen(false);\n }\n if (privacyRef.current && !privacyRef.current.contains(event.target as Node)) {\n setIsPrivacyOpen(false);\n }\n }\n\n if (isMenuOpen || isPrivacyOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isMenuOpen, isPrivacyOpen]);\n\n const handleMenuItemClick = (item: PageHeaderMenuItem) => {\n if (!item.disabled) {\n item.onClick();\n setIsMenuOpen(false);\n }\n };\n\n return (\n <div style={styles.container}>\n <div style={styles.leftSection}>\n <span style={styles.icon}>{icon || '📄'}</span>\n <span style={styles.title}>{title}</span>\n <div style={styles.privacyContainer} ref={privacyRef}>\n <button style={styles.privacyBadge} onClick={() => onPrivacyChange && setIsPrivacyOpen(!isPrivacyOpen)}>\n <span style={styles.lockIcon}>{isPrivate ? '🔒' : '🌐'}</span>\n <span>{isPrivate ? 'Private' : 'Public'}</span>\n {onPrivacyChange && <span style={styles.chevron}>▾</span>}\n </button>\n {isPrivacyOpen && onPrivacyChange && (\n <div style={styles.dropdown}>\n <button\n style={{\n ...styles.menuItem,\n ...(isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(true);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🔒</span>\n <span>Private</span>\n </button>\n <button\n style={{\n ...styles.menuItem,\n ...(!isPrivate ? styles.menuItemActive : {}),\n }}\n onClick={() => {\n onPrivacyChange(false);\n setIsPrivacyOpen(false);\n }}\n >\n <span style={styles.menuItemIcon}>🌐</span>\n <span>Public</span>\n </button>\n </div>\n )}\n </div>\n </div>\n <div style={styles.rightSection}>\n {lastEdited && <span style={styles.editedText}>{lastEdited}</span>}\n {onShare && (\n <button style={styles.shareButton} onClick={onShare}>\n Share\n </button>\n )}\n {onFavorite && (\n <button style={styles.iconButton} onClick={onFavorite}>\n {isFavorited ? '★' : '☆'}\n </button>\n )}\n {menuItems.length > 0 && (\n <div style={styles.menuContainer} ref={menuRef}>\n <button style={styles.menuButton} onClick={() => setIsMenuOpen(!isMenuOpen)} aria-label=\"Menu\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" />\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" />\n </svg>\n </button>\n {isMenuOpen && (\n <div style={styles.dropdown}>\n {menuItems.map((item, index) => (\n <React.Fragment key={index}>\n {item.divider && index > 0 && <div style={styles.divider} />}\n <button\n style={{\n ...styles.menuItem,\n ...(item.disabled ? styles.menuItemDisabled : {}),\n }}\n onClick={() => handleMenuItemClick(item)}\n disabled={item.disabled}\n >\n {item.icon && <span style={styles.menuItemIcon}>{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nconst styles: Record<string, React.CSSProperties> = {\n container: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n borderBottom: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'transparent',\n fontSize: '14px',\n minHeight: '44px',\n color: 'rgba(255, 255, 255, 0.9)',\n },\n leftSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n icon: {\n fontSize: '16px',\n },\n title: {\n fontWeight: 500,\n color: 'rgba(255, 255, 255, 0.9)',\n },\n privacyContainer: {\n position: 'relative' as const,\n },\n privacyBadge: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 6px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '12px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n lockIcon: {\n fontSize: '12px',\n },\n chevron: {\n fontSize: '10px',\n marginLeft: '2px',\n },\n rightSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n },\n editedText: {\n color: 'rgba(255, 255, 255, 0.4)',\n fontSize: '12px',\n },\n shareButton: {\n padding: '4px 10px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n borderRadius: '3px',\n fontWeight: 500,\n },\n iconButton: {\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n fontSize: '16px',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n menuContainer: {\n position: 'relative',\n },\n menuButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '4px 8px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.5)',\n cursor: 'pointer',\n borderRadius: '3px',\n },\n dropdown: {\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '4px',\n minWidth: '180px',\n backgroundColor: 'rgb(37, 37, 37)',\n borderRadius: '6px',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.4)',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n padding: '4px 0',\n zIndex: 1000,\n },\n menuItem: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n width: '100%',\n padding: '8px 12px',\n border: 'none',\n backgroundColor: 'transparent',\n color: 'rgba(255, 255, 255, 0.9)',\n fontSize: '14px',\n cursor: 'pointer',\n textAlign: 'left',\n },\n menuItemDisabled: {\n color: 'rgba(255, 255, 255, 0.3)',\n cursor: 'not-allowed',\n },\n menuItemActive: {\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n },\n menuItemIcon: {\n display: 'flex',\n alignItems: 'center',\n fontSize: '16px',\n },\n divider: {\n height: '1px',\n backgroundColor: 'rgba(255, 255, 255, 0.1)',\n margin: '4px 0',\n },\n};\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\n\n// Panel-based blocks — these export a dedicated \"detail\" panel component that is\n// normally registered via usePanel. We render that panel content directly.\nimport { ActionFlowPanel } from '@/mantine/blocks/action/flow/FlowView';\nimport { FormPanel } from '@/mantine/blocks/form/flow/FormPanel';\nimport { FlowConfig as ProposalFlowConfig } from '@/mantine/blocks/proposal/flow/FlowConfig';\nimport { DomainCreatorSurveyPanel } from '@/mantine/blocks/domainCreator/flow/DomainCreatorSurveyPanel';\nimport { SignPanel } from '@/mantine/blocks/domainCreatorSign/flow/SignPanel';\nimport { GovernanceGroupPanel } from '@/mantine/blocks/governanceGroup/flow/GovernanceGroupPanel';\n\n// Inline-detail blocks — the FlowView itself IS the \"do-the-step\" detail UI\n// (no separate panel; they don't use usePanel for their primary content).\nimport { ClaimFlowView } from '@/mantine/blocks/claim/flow/FlowView';\nimport { EvaluatorFlowView } from '@/mantine/blocks/evaluator/flow/FlowView';\nimport { NotifyFlowView } from '@/mantine/blocks/notify/flow/FlowView';\nimport { CheckboxFlowView } from '@/mantine/blocks/checkbox/flow/FlowView';\nimport { SecretsFlowView } from '@/mantine/blocks/secrets/flow/SecretsFlowView';\nimport { SkillsFlowView } from '@/mantine/blocks/skills/flow/SkillsFlowView';\n\n// email / apiRequest keep their detail UI inside a private (non-exported)\n// PanelContent function, so we dispatch to the full FlowView card instead.\nimport { EmailFlowView } from '@/mantine/blocks/email/flow/FlowView';\nimport { ApiRequestFlowView } from '@/mantine/blocks/apiRequest/flow/FlowView';\n\nexport interface FlowNodePanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n isDisabled?: {\n isDisabled: 'disable';\n message?: string;\n };\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's \"do-the-step\" / detail UI. Lets a host app render the panel for any\n * selected step in its own right column without relying on the per-block\n * usePanel/registeredPanels indirection.\n *\n * NOTE: every rendered detail component reads from BlocknoteContext\n * (useBlocknoteHandlers / useBlocknoteContext throw if the provider is\n * missing). Keep <FlowNodePanel> wrapped in the app's BlocknoteProvider /\n * EditorBlocknoteProvider.\n */\nexport function FlowNodePanel(props: FlowNodePanelProps) {\n // Embedded: the host app supplies the panel header, so BaseRightPanelLayout\n // suppresses its own (no duplicate title / close).\n return (\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodePanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n );\n}\n\nfunction FlowNodePanelContent({ editor, block, isDisabled }: FlowNodePanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionFlowPanel editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'form':\n return <FormPanel editor={editor} block={block} />;\n\n case 'proposal':\n return <ProposalFlowConfig editor={editor} block={block} />;\n\n case 'domainCreator':\n return <DomainCreatorSurveyPanel editor={editor} block={block} />;\n\n case 'domainCreatorSign':\n return <SignPanel editor={editor} block={block} />;\n\n case 'governanceGroup':\n return <GovernanceGroupPanel editor={editor} block={block} />;\n\n case 'claim':\n return <ClaimFlowView editor={editor} block={block} />;\n\n case 'evaluator':\n return <EvaluatorFlowView editor={editor} block={block} />;\n\n case 'notify':\n return <NotifyFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'checkbox':\n return <CheckboxFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'secrets':\n return <SecretsFlowView editor={editor} block={block} />;\n\n case 'skills':\n return <SkillsFlowView editor={editor} block={block} />;\n\n // email / apiRequest: detail UI is a private PanelContent fn; render the\n // full FlowView card (its own onClick opens the registered panel).\n case 'email':\n return <EmailFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n case 'apiRequest':\n return <ApiRequestFlowView editor={editor} block={block} isDisabled={isDisabled} />;\n\n // enumChecklist has no flow-mode panel (renders EnumChecklistBlock in all\n // modes). Fallback to null / \"open in document\".\n case 'enumChecklist':\n default:\n return null;\n }\n}\n\nexport default FlowNodePanel;\n","import React from 'react';\nimport type { IxoBlockProps } from '@/core/types';\nimport { FlowPanelEmbeddedContext } from './embeddedPanelContext';\n\n// Per-block TEMPLATE config panels — the authoring counterpart to FlowNodePanel.\n// Each exposes the block's rich configuration (General + the shared\n// Authorization / Assignment / Commitment / TTL / Evaluation tabs) on the same\n// BaseRightPanelLayout the runtime panels use.\nimport { TemplateConfig as ActionConfig } from '@/mantine/blocks/action/template/TemplateConfig';\nimport { TemplateConfig as ClaimConfig } from '@/mantine/blocks/claim/template/TemplateConfig';\nimport { TemplateConfig as FormConfig } from '@/mantine/blocks/form/template/TemplateConfig';\nimport { TemplateConfig as CheckboxConfig } from '@/mantine/blocks/checkbox/template/TemplateConfig';\nimport { TemplateConfig as EvaluatorConfig } from '@/mantine/blocks/evaluator/template/TemplateConfig';\nimport { TemplateConfig as NotifyConfig } from '@/mantine/blocks/notify/template/TemplateConfig';\nimport { TemplateConfig as EmailConfig } from '@/mantine/blocks/email/template/TemplateConfig';\nimport { TemplateConfig as ApiRequestConfig } from '@/mantine/blocks/apiRequest/template/TemplateConfig';\nimport { TemplateConfig as ProposalConfig } from '@/mantine/blocks/proposal/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorConfig } from '@/mantine/blocks/domainCreator/template/TemplateConfig';\nimport { TemplateConfig as DomainCreatorSignConfig } from '@/mantine/blocks/domainCreatorSign/template/TemplateConfig';\nimport { TemplateConfig as GovernanceGroupConfig } from '@/mantine/blocks/governanceGroup/template/TemplateConfig';\n\n// secrets / skills have a template VIEW rather than a tabbed config.\nimport { SecretsTemplateView } from '@/mantine/blocks/secrets/template/SecretsTemplateView';\nimport { SkillsTemplateView } from '@/mantine/blocks/skills/template/SkillsTemplateView';\n\nexport interface FlowNodeConfigPanelProps {\n editor: IxoBlockProps['editor'];\n block: IxoBlockProps['block'];\n}\n\n/**\n * Single dispatcher that, given a flow editor and a step block, renders that\n * block's TEMPLATE configuration panel — the authoring counterpart to\n * `FlowNodePanel` (which renders the runtime \"do-the-step\" UI). Lets a host app\n * render the rich config (General + Authorization/Assignment/Commitment/TTL/…)\n * for any selected step in its own right column.\n *\n * Since `addFlowNode` and the registry route every capability through the\n * generic `action` block, `action → ActionConfig` is the primary case; the\n * dedicated block types are covered for documents that use them directly.\n *\n * Wrapped in `FlowPanelEmbeddedContext` so each config's `BaseRightPanelLayout`\n * suppresses its own header/close (the host supplies those).\n */\nexport function FlowNodeConfigPanel(props: FlowNodeConfigPanelProps) {\n return (\n <FlowPanelEmbeddedContext.Provider value={true}>\n <FlowNodeConfigPanelContent {...props} />\n </FlowPanelEmbeddedContext.Provider>\n );\n}\n\nfunction FlowNodeConfigPanelContent({ editor, block }: FlowNodeConfigPanelProps) {\n switch (block?.type) {\n case 'action':\n return <ActionConfig editor={editor} block={block} />;\n case 'claim':\n return <ClaimConfig editor={editor} block={block} />;\n case 'form':\n return <FormConfig editor={editor} block={block} />;\n case 'checkbox':\n return <CheckboxConfig editor={editor} block={block} />;\n case 'evaluator':\n return <EvaluatorConfig editor={editor} block={block} />;\n case 'notify':\n return <NotifyConfig editor={editor} block={block} />;\n case 'email':\n return <EmailConfig editor={editor} block={block} />;\n case 'apiRequest':\n return <ApiRequestConfig editor={editor} block={block} />;\n case 'proposal':\n return <ProposalConfig editor={editor} block={block} />;\n case 'domainCreator':\n return <DomainCreatorConfig editor={editor} block={block} />;\n case 'domainCreatorSign':\n return <DomainCreatorSignConfig editor={editor} block={block} />;\n case 'governanceGroup':\n return <GovernanceGroupConfig editor={editor} block={block} />;\n case 'secrets':\n return <SecretsTemplateView editor={editor} block={block} />;\n case 'skills':\n return <SkillsTemplateView editor={editor} block={block} />;\n default:\n return null;\n }\n}\n\nexport default FlowNodeConfigPanel;\n"],"mappings":"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","names":["React","React","React","React","React","TemplateConfig"]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node context records — per-node semantic context written by the flow
|
|
3
|
+
* manager (headless orchestrator) into the top-level `nodeContext` Y.Map,
|
|
4
|
+
* keyed by block/node id. Records are plain JSON objects (no nested Y types)
|
|
5
|
+
* so they replicate atomically and read back as ordinary data.
|
|
6
|
+
*
|
|
7
|
+
* The editor treats these records as advisory input from the flow manager,
|
|
8
|
+
* with one exception: fields whose provenance is `'human'` are permanent
|
|
9
|
+
* manual overrides that the flow manager must never clobber.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Where a context field's value came from:
|
|
13
|
+
* - 'derived': mechanically extracted from node inputs.
|
|
14
|
+
* - 'inferred': produced by the flow manager's LLM classification pass.
|
|
15
|
+
* - 'human': manual override; wins and survives re-determination.
|
|
16
|
+
*/
|
|
17
|
+
type NodeContextFieldProvenance = 'derived' | 'inferred' | 'human';
|
|
18
|
+
interface NodeContextRecord {
|
|
19
|
+
kind: string;
|
|
20
|
+
shapeVersion: number;
|
|
21
|
+
sourceDigest: string;
|
|
22
|
+
values: Record<string, unknown>;
|
|
23
|
+
fieldProvenance: Record<string, NodeContextFieldProvenance>;
|
|
24
|
+
inferredAt: string;
|
|
25
|
+
model?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Top-level Y.Doc map name the flow manager writes node context records to. */
|
|
28
|
+
declare const NODE_CONTEXT_MAP_NAME = "nodeContext";
|
|
29
|
+
/**
|
|
30
|
+
* Top-level Y.Doc map name for per-field human overrides, keyed
|
|
31
|
+
* `${nodeId}:${field}` with the raw override value (JSON-serializable).
|
|
32
|
+
* Writing one key per override (instead of rewriting the whole record in
|
|
33
|
+
* `nodeContext`) makes human overrides race-free against concurrent
|
|
34
|
+
* whole-record writes by the flow manager. Readers overlay these entries on
|
|
35
|
+
* the base record at read time with `fieldProvenance[field] = 'human'`.
|
|
36
|
+
*/
|
|
37
|
+
declare const NODE_CONTEXT_OVERRIDES_MAP_NAME = "nodeContextOverrides";
|
|
38
|
+
/**
|
|
39
|
+
* Structural guard for records read out of the shared Y.Map. The map is
|
|
40
|
+
* written by a separate process (the flow manager), so never assume shape —
|
|
41
|
+
* malformed entries are treated as absent rather than crashing the UI.
|
|
42
|
+
*/
|
|
43
|
+
declare function isNodeContextRecord(value: unknown): value is NodeContextRecord;
|
|
44
|
+
|
|
45
|
+
export { type NodeContextRecord as N, type NodeContextFieldProvenance as a, NODE_CONTEXT_MAP_NAME as b, NODE_CONTEXT_OVERRIDES_MAP_NAME as c, isNodeContextRecord as i };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a7 as FlowNode, ac as FlowNodeAuthzExtension, a4 as FlowNodeRuntimeState, a5 as IxoEditorType, f as UcanService, I as InvocationStore, aa as EvaluationStatus, i as UcanCapability, U as UcanDelegationStore, S as StoredDelegation } from './index-
|
|
1
|
+
import { a7 as FlowNode, ac as FlowNodeAuthzExtension, a4 as FlowNodeRuntimeState, a5 as IxoEditorType, f as UcanService, I as InvocationStore, aa as EvaluationStatus, i as UcanCapability, U as UcanDelegationStore, S as StoredDelegation } from './index-D0S6jY7O.js';
|
|
2
2
|
import * as Y from 'yjs';
|
|
3
3
|
import { Doc, Map } from 'yjs';
|
|
4
4
|
import { MatrixClient } from 'matrix-js-sdk';
|
|
@@ -1875,10 +1875,10 @@ declare function readCompiledFlowFromYDoc(yDoc: Doc): CompiledFlow | null;
|
|
|
1875
1875
|
*/
|
|
1876
1876
|
declare function decompileToBaseUcanFlow(compiled: CompiledFlow): BaseUcanFlow;
|
|
1877
1877
|
|
|
1878
|
-
type FlowAgentPublicNodeState = 'Pending' | 'Blocked' | 'Overdue' | 'Done'
|
|
1878
|
+
type FlowAgentPublicNodeState = 'Pending' | 'Blocked' | 'Overdue' | 'Done';
|
|
1879
1879
|
type FlowAgentRunPhase = 'Running' | 'Validating' | 'Failed' | 'Archived';
|
|
1880
1880
|
type FlowAgentBlockerCause = 'missing_input' | 'failed_upstream' | 'missing_ucan' | 'stale_config' | 'service_error' | 'external_confirmation_pending' | 'validation_mismatch' | 'unverified_completion' | 'awaiting_verification' | 'unknown';
|
|
1881
|
-
type FlowAgentCommandType = 'diagnose_blocker' | 'assign_actor' | 'notify_actor' | 'execute_action' | 'validate_external_state' | '
|
|
1881
|
+
type FlowAgentCommandType = 'diagnose_blocker' | 'assign_actor' | 'notify_actor' | 'execute_action' | 'validate_external_state' | 'archive_flow' | 'propose_config_change';
|
|
1882
1882
|
type FlowAgentCommandStatus = 'queued' | 'leased' | 'running' | 'confirmed' | 'awaiting_readback' | 'failed' | 'skipped';
|
|
1883
1883
|
type FlowAgentLedgerEventType = 'agent.decision' | 'agent.command' | 'agent.validation' | 'agent.escalation' | 'agent.memory';
|
|
1884
1884
|
interface FlowAgentActor {
|
|
@@ -1969,8 +1969,6 @@ interface FlowAgentExecutor {
|
|
|
1969
1969
|
assignActor?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|
|
1970
1970
|
notifyActor?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|
|
1971
1971
|
validateExternalState?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|
|
1972
|
-
submitOracleClaim?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|
|
1973
|
-
watchOracleUdid?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|
|
1974
1972
|
archiveFlow?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|
|
1975
1973
|
proposeConfigChange?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|
|
1976
1974
|
diagnoseBlocker?: (command: FlowAgentCommand, context: FlowAgentContext) => Promise<FlowAgentCommandResult>;
|