@cadraos/sdk 0.3.13 → 0.3.14-p102.1
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/board-host/index.cjs +217 -129
- package/dist/board-host/index.cjs.map +1 -1
- package/dist/board-host/index.d.cts +268 -3
- package/dist/board-host/index.d.ts +268 -3
- package/dist/board-host/index.js +218 -131
- package/dist/board-host/index.js.map +1 -1
- package/dist/board-host/server/index.d.cts +218 -2
- package/dist/board-host/server/index.d.ts +218 -2
- package/dist/chat/index.cjs +4 -1
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +29 -0
- package/dist/chat/index.d.ts +29 -0
- package/dist/chat/index.js +4 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/index.d.cts +27 -0
- package/dist/index.d.ts +27 -0
- package/dist/kanban/engine/index.cjs +1515 -436
- package/dist/kanban/engine/index.cjs.map +1 -1
- package/dist/kanban/engine/index.d.cts +628 -6
- package/dist/kanban/engine/index.d.ts +628 -6
- package/dist/kanban/engine/index.js +1500 -437
- package/dist/kanban/engine/index.js.map +1 -1
- package/dist/kanban/index.cjs +298 -22
- package/dist/kanban/index.cjs.map +1 -1
- package/dist/kanban/index.d.cts +555 -9
- package/dist/kanban/index.d.ts +555 -9
- package/dist/kanban/index.js +294 -23
- package/dist/kanban/index.js.map +1 -1
- package/dist/teams/index.d.cts +27 -0
- package/dist/teams/index.d.ts +27 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/board-host/widget/BoardHostMappingProvider.tsx","../../src/board-host/widget/grammar.ts","../../src/board-host/widget/refs.ts","../../src/board-host/widget/BoardHostMapping.tsx"],"names":["useMemo","jsx"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\n/**\n * BoardHostMappingProvider — supplies the injected\n * {@link BoardHostMappingAdapter} to `<BoardHostMapping/>` via React context.\n *\n * Mirrors the chat surface's `ChatConfigProvider`, with ONE deliberate\n * difference (spec §7, R1 #7): there is NO `apiKey`/`config` — the host injects\n * a fully-built, SESSION-AUTHED adapter. The widget never sees a key.\n *\n * @module @cadraos/sdk/board-host\n */\n\nimport * as React from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\nimport type { BoardHostMappingAdapter } from \"./adapter.js\";\n\ninterface BoardHostMappingContextValue {\n adapter: BoardHostMappingAdapter;\n}\n\nconst BoardHostMappingContext =\n createContext<BoardHostMappingContextValue | null>(null);\n\nexport interface BoardHostMappingProviderProps {\n /**\n * The session-authed adapter the host injects (wraps the §6b endpoints with\n * the host's session/CSRF). NO `apiKey` — see {@link BoardHostMappingAdapter}.\n */\n adapter: BoardHostMappingAdapter;\n children: React.ReactNode;\n}\n\n/**\n * Provide the adapter to all child `<BoardHostMapping/>` widgets.\n *\n * @example\n * ```tsx\n * <BoardHostMappingProvider adapter={hostMappingAdapter}>\n * <BoardHostMapping boardConfigUuid={uuid} onSaved={…} />\n * </BoardHostMappingProvider>\n * ```\n */\nexport function BoardHostMappingProvider({\n adapter,\n children,\n}: BoardHostMappingProviderProps) {\n const value = useMemo(() => ({ adapter }), [adapter]);\n return (\n <BoardHostMappingContext.Provider value={value}>\n {children}\n </BoardHostMappingContext.Provider>\n );\n}\n\n/**\n * Read the injected adapter from context. The widget also accepts an `adapter`\n * prop directly (which takes precedence), so this throws ONLY when neither a\n * provider nor a prop supplied one.\n */\nexport function useBoardHostMappingAdapter(): BoardHostMappingAdapter {\n const ctx = useContext(BoardHostMappingContext);\n if (!ctx) {\n throw new Error(\n \"useBoardHostMappingAdapter must be used within a \" +\n \"<BoardHostMappingProvider> or pass an `adapter` prop to <BoardHostMapping>.\"\n );\n }\n return ctx.adapter;\n}\n\n/** Optional variant — returns `null` instead of throwing when absent. */\nexport function useBoardHostMappingAdapterOptional(): BoardHostMappingAdapter | null {\n return useContext(BoardHostMappingContext)?.adapter ?? null;\n}\n","/**\n * @cadraos/sdk/board-host (client) — client-side identifier grammar check.\n *\n * The widget grammar-checks typed SQL identifiers (`entity`, `column`, `table`,\n * `via`, each json `path` segment, predicate `name`) live, showing an inline\n * error before the user can save. This MIRRORS the server-side\n * {@link IDENTIFIER_PATTERN} in `server/identifiers.ts` (spec §5):\n *\n * `^[A-Za-z_][A-Za-z0-9_]{0,62}$` (single identifier, ≤63 chars, no dots)\n *\n * The pattern is duplicated (not imported) ON PURPOSE: the client surface is\n * zero-dep and must never pull the server kit into the browser bundle. The\n * server RE-CHECKS on save (the client check is UX, never the security gate).\n *\n * @module @cadraos/sdk/board-host\n */\n\n/** The SQL identifier grammar (kept in lockstep with `server/identifiers.ts`). */\nexport const WIDGET_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]{0,62}$/;\n\n/** `true` iff `value` is a single, grammar-valid SQL identifier. */\nexport function isValidIdentifier(value: string): boolean {\n return WIDGET_IDENTIFIER_PATTERN.test(value);\n}\n\n/**\n * Validate a json `path` (one-or-more dot-separated identifier segments, e.g.\n * `\"a.b.c\"`). Empty, or any non-identifier segment → invalid.\n */\nexport function isValidJsonPath(path: string): boolean {\n if (path.length === 0) return false;\n return path.split(\".\").every((seg) => isValidIdentifier(seg));\n}\n\n/** A human inline-error message for an out-of-grammar identifier. */\nexport function identifierError(value: string): string | null {\n if (value.length === 0) return \"required\";\n if (!isValidIdentifier(value)) {\n return \"must match [A-Za-z_][A-Za-z0-9_]{0,62} (one identifier, no dots/spaces)\";\n }\n return null;\n}\n","/**\n * @cadraos/sdk/board-host (client) — dueRule ref extraction for the field map.\n *\n * The field-map section (③) must show one binding row per dueRule `ref` the\n * board's scheduled lanes use. This walks the board's lanes' `dueRule`s and\n * collects the distinct refs (+ whether a ref MUST be a `predicate`-kind\n * binding, so the widget can pre-pick the kind). MIRRORS the server validator's\n * `collectDueRefs` (server/validate.ts) — kept client-local so the browser\n * bundle never imports the server kit.\n *\n * @module @cadraos/sdk/board-host\n */\n\nimport type { DueRule } from \"../../kanban/types.js\";\nimport type { KanbanLane } from \"../../kanban/types.js\";\n\n/** A dueRule ref the field map must offer a binding for. */\nexport interface DueRef {\n /** The field `ref` (matches a `fields[].ref`). */\n ref: string;\n /** `true` when the ref came from a `predicate` dueRule (must bind a predicate). */\n requiresPredicate: boolean;\n}\n\n/** Recursively collect the refs one dueRule depends on. */\nfunction collect(rule: DueRule | undefined, out: DueRef[]): void {\n if (!rule) return;\n switch (rule.kind) {\n case \"field_due\":\n out.push({ ref: rule.field, requiresPredicate: false });\n return;\n case \"predicate\":\n out.push({ ref: rule.ref, requiresPredicate: true });\n return;\n case \"and\":\n for (const r of rule.rules) collect(r, out);\n return;\n // \"always\" / \"backlog\" (and any unknown) contribute no refs.\n default:\n return;\n }\n}\n\n/**\n * Collect the DISTINCT dueRule refs across a board's lanes, in first-seen order.\n * A ref that appears as a predicate anywhere is reported `requiresPredicate`.\n */\nexport function collectDueRefs(lanes: KanbanLane[]): DueRef[] {\n const raw: DueRef[] = [];\n for (const lane of lanes) collect(lane.dueRule, raw);\n\n const byRef = new Map<string, DueRef>();\n for (const dr of raw) {\n const existing = byRef.get(dr.ref);\n if (!existing) {\n byRef.set(dr.ref, { ...dr });\n } else if (dr.requiresPredicate) {\n existing.requiresPredicate = true;\n }\n }\n return Array.from(byRef.values());\n}\n","\"use client\";\n\n/**\n * `<BoardHostMapping/>` — the SDK widget a system user uses to TYPE a board-host\n * mapping (spec §7). Four sections, mirroring `mockup.html`:\n *\n * ① Binding — board picker + typed entity / orgColumn / stateColumn + scope.\n * ② Lane map — board stages ↔ typed host states (auto-matched by name;\n * `createIfMissing`; unmapped lanes flagged).\n * ③ Field map — per dueRule `ref` a kind selector (column/json/fk/predicate)\n * + typed, grammar-checked identifier inputs; predicate names\n * come from `listPredicates()`.\n * ④ Validate — `validate()` → on `valid` enable Save; `invalid` shows the\n * per-ref/lane errors; `stale` shows the revalidate banner.\n * **Save is disabled unless status === \"valid\".**\n *\n * Zero runtime deps; React + react-dom are peers. Plain inline styles (no\n * Tailwind runtime needed) so the widget renders standalone in any host.\n * Session-authed adapter (no `apiKey` prop) — see {@link BoardHostMappingAdapter}.\n *\n * @module @cadraos/sdk/board-host\n */\n\nimport * as React from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { BoardHostMapping as Mapping, FieldBinding } from \"../types.js\";\nimport type { ResolvedBoardConfig } from \"../../kanban/config-client.js\";\nimport type { KanbanLane } from \"../../kanban/types.js\";\nimport type {\n BoardSummary,\n ValidationResult,\n ValidationError,\n} from \"../server/contract.js\";\nimport type { BoardHostMappingAdapter } from \"./adapter.js\";\nimport { useBoardHostMappingAdapterOptional } from \"./BoardHostMappingProvider.js\";\nimport { identifierError, isValidIdentifier, isValidJsonPath } from \"./grammar.js\";\nimport { collectDueRefs } from \"./refs.js\";\n\n// =============================================================================\n// PROPS\n// =============================================================================\n\nexport interface BoardHostMappingProps {\n /** Pre-select this board on mount (else the user picks from the list). */\n boardConfigUuid?: string;\n /**\n * Adapter override — takes precedence over the provider. Lets the widget be\n * used without a provider (e.g. tests). NO `apiKey`: session-authed.\n */\n adapter?: BoardHostMappingAdapter;\n /** Fired after a successful save with the persisted mapping. */\n onSaved?: (mapping: Mapping) => void;\n /** Fired on any adapter/validation error. */\n onError?: (error: Error) => void;\n}\n\n// =============================================================================\n// FIELD-BINDING EDITOR STATE (a per-ref row, kept loose so half-typed kinds are\n// representable; assembled into a `FieldBinding` only when complete + valid)\n// =============================================================================\n\ntype FieldKind = FieldBinding[\"kind\"];\n\ninterface FieldRowState {\n ref: string;\n kind: FieldKind;\n /** column / json / fk identifier inputs (kind-specific subsets used). */\n column: string;\n path: string;\n via: string;\n table: string;\n /** predicate name. */\n name: string;\n /** locked to predicate (came from a predicate dueRule). */\n predicateOnly: boolean;\n}\n\nconst DEFAULT_ORG_COLUMN = \"org_id\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/** Lane identity for keying/reading (`id ?? key`, mirrors the engine). */\nfunction laneStageId(lane: KanbanLane): string {\n return lane.id ?? lane.key;\n}\n\n/** Auto-suggest a host state for a lane by its display label (mockup behavior). */\nfunction suggestHostState(lane: KanbanLane): string {\n return lane.label ?? lane.key ?? \"\";\n}\n\n/** Build a fresh field row from a dueRule ref. */\nfunction freshFieldRow(ref: string, requiresPredicate: boolean): FieldRowState {\n return {\n ref,\n kind: requiresPredicate ? \"predicate\" : \"column\",\n column: \"\",\n path: \"\",\n via: \"\",\n table: \"\",\n name: \"\",\n predicateOnly: requiresPredicate,\n };\n}\n\n/** Hydrate a field row from an already-stored binding (re-opening a mapping). */\nfunction fieldRowFromBinding(b: FieldBinding, requiresPredicate: boolean): FieldRowState {\n const base = freshFieldRow(b.ref, requiresPredicate);\n switch (b.kind) {\n case \"column\":\n return { ...base, kind: \"column\", column: b.column };\n case \"json\":\n return { ...base, kind: \"json\", column: b.column, path: b.path };\n case \"fk\":\n return { ...base, kind: \"fk\", via: b.via, table: b.table, column: b.column };\n case \"predicate\":\n return { ...base, kind: \"predicate\", name: b.name };\n default:\n return base;\n }\n}\n\n/** Per-row grammar error (the inline message shown under a field row). */\nfunction fieldRowError(row: FieldRowState): string | null {\n switch (row.kind) {\n case \"column\":\n return identifierError(row.column) && `column ${identifierError(row.column)}`;\n case \"json\": {\n const colErr = identifierError(row.column);\n if (colErr) return `column ${colErr}`;\n if (!isValidJsonPath(row.path))\n return \"path must be dot-separated identifiers\";\n return null;\n }\n case \"fk\": {\n const viaErr = identifierError(row.via);\n if (viaErr) return `via ${viaErr}`;\n const tableErr = identifierError(row.table);\n if (tableErr) return `table ${tableErr}`;\n const colErr = identifierError(row.column);\n if (colErr) return `column ${colErr}`;\n return null;\n }\n case \"predicate\":\n return row.name.length === 0\n ? \"pick a predicate\"\n : !isValidIdentifier(row.name)\n ? \"predicate name must be a single identifier\"\n : null;\n default:\n return \"unknown kind\";\n }\n}\n\n/** Assemble a `FieldBinding` from a (assumed-valid) row. */\nfunction rowToBinding(row: FieldRowState): FieldBinding {\n switch (row.kind) {\n case \"column\":\n return { ref: row.ref, kind: \"column\", column: row.column };\n case \"json\":\n return { ref: row.ref, kind: \"json\", column: row.column, path: row.path };\n case \"fk\":\n return {\n ref: row.ref,\n kind: \"fk\",\n via: row.via,\n table: row.table,\n column: row.column,\n };\n case \"predicate\":\n return { ref: row.ref, kind: \"predicate\", name: row.name };\n default:\n return { ref: row.ref, kind: \"column\", column: \"\" };\n }\n}\n\n// =============================================================================\n// STYLES (inline — keeps the widget zero-dep + framework-agnostic)\n// =============================================================================\n\nconst S = {\n card: {\n background: \"#fff\",\n border: \"1px solid #e5e8ee\",\n borderRadius: 14,\n overflow: \"hidden\",\n maxWidth: 760,\n font: '14px/1.5 -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif',\n color: \"#11151c\",\n } as React.CSSProperties,\n head: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n padding: \"16px 20px\",\n borderBottom: \"1px solid #eef1f5\",\n } as React.CSSProperties,\n sec: { padding: \"16px 20px\", borderBottom: \"1px solid #eef1f5\" } as React.CSSProperties,\n lbl: { display: \"flex\", alignItems: \"center\", gap: 9, marginBottom: 12 } as React.CSSProperties,\n num: {\n width: 20,\n height: 20,\n borderRadius: 6,\n background: \"#eeeefb\",\n color: \"#5b5bd6\",\n fontSize: 11,\n fontWeight: 700,\n display: \"grid\",\n placeItems: \"center\",\n } as React.CSSProperties,\n ttl: { fontWeight: 650, fontSize: 13.5 } as React.CSSProperties,\n row: { display: \"flex\", alignItems: \"center\", gap: 10, margin: \"9px 0\", flexWrap: \"wrap\" } as React.CSSProperties,\n k: { width: 130, color: \"#6b7480\", fontSize: 13 } as React.CSSProperties,\n input: {\n border: \"1px solid #e5e8ee\",\n background: \"#fff\",\n borderRadius: 8,\n padding: \"6px 11px\",\n font: \"inherit\",\n fontSize: 13,\n color: \"#11151c\",\n minWidth: 150,\n } as React.CSSProperties,\n inputErr: { border: \"1px solid #dc2626\", background: \"#fdecec\" } as React.CSSProperties,\n errText: { color: \"#dc2626\", fontSize: 11.5, marginLeft: 4 } as React.CSSProperties,\n lane: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 22px 1fr 90px\",\n alignItems: \"center\",\n gap: 10,\n padding: \"7px 0\",\n borderTop: \"1px dashed #eef1f5\",\n } as React.CSSProperties,\n fieldRow: { borderTop: \"1px dashed #eef1f5\", padding: \"8px 0\" } as React.CSSProperties,\n st: { fontSize: 12, fontWeight: 600 } as React.CSSProperties,\n vpanel: { borderRadius: 10, padding: \"12px 14px\", marginBottom: 14 } as React.CSSProperties,\n vline: { display: \"flex\", gap: 9, alignItems: \"flex-start\", fontSize: 13, padding: \"2px 0\" } as React.CSSProperties,\n actions: { display: \"flex\", gap: 10, justifyContent: \"flex-end\" } as React.CSSProperties,\n btn: {\n border: \"1px solid #e5e8ee\",\n background: \"#fff\",\n borderRadius: 8,\n padding: \"8px 15px\",\n font: \"inherit\",\n fontSize: 13,\n fontWeight: 600,\n cursor: \"pointer\",\n } as React.CSSProperties,\n btnPrimary: { background: \"#5b5bd6\", borderColor: \"#5b5bd6\", color: \"#fff\" } as React.CSSProperties,\n btnDisabled: { opacity: 0.45, cursor: \"not-allowed\" } as React.CSSProperties,\n pill: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 12,\n fontWeight: 600,\n padding: \"4px 10px\",\n borderRadius: 999,\n } as React.CSSProperties,\n} as const;\n\nfunction statusColors(status: \"valid\" | \"stale\" | \"invalid\" | \"none\"): {\n bg: string;\n fg: string;\n} {\n switch (status) {\n case \"valid\":\n return { bg: \"#e9f7ee\", fg: \"#16a34a\" };\n case \"stale\":\n return { bg: \"#fdf2e3\", fg: \"#c2710c\" };\n case \"invalid\":\n return { bg: \"#fdecec\", fg: \"#dc2626\" };\n default:\n return { bg: \"#f1f3f7\", fg: \"#6b7480\" };\n }\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function BoardHostMapping({\n boardConfigUuid,\n adapter: adapterProp,\n onSaved,\n onError,\n}: BoardHostMappingProps) {\n const adapterCtx = useBoardHostMappingAdapterOptional();\n const adapter = adapterProp ?? adapterCtx;\n if (!adapter) {\n throw new Error(\n \"<BoardHostMapping> requires an `adapter` prop or a parent <BoardHostMappingProvider>.\"\n );\n }\n\n // ── board list + selection ────────────────────────────────────────────────\n const [boards, setBoards] = useState<BoardSummary[]>([]);\n const [selectedUuid, setSelectedUuid] = useState<string>(boardConfigUuid ?? \"\");\n const [board, setBoard] = useState<ResolvedBoardConfig | null>(null);\n const [predicates, setPredicates] = useState<string[]>([]);\n\n // ── typed binding (①) ───────────────────────────────────────────────────────\n const [entity, setEntity] = useState(\"\");\n const [orgColumn, setOrgColumn] = useState(DEFAULT_ORG_COLUMN);\n const [stateColumn, setStateColumn] = useState(\"\");\n const [scopeField, setScopeField] = useState(\"\");\n const [scopeValue, setScopeValue] = useState(\"\");\n\n // ── lane map (②) ─ keyed by stageKey ────────────────────────────────────────\n const [laneStates, setLaneStates] = useState<Record<string, string>>({});\n const [laneCreate, setLaneCreate] = useState<Record<string, boolean>>({});\n\n // ── field map (③) ─ keyed by ref ─────────────────────────────────────────────\n const [fieldRows, setFieldRows] = useState<FieldRowState[]>([]);\n\n // ── validate (④) ─────────────────────────────────────────────────────────────\n const [validation, setValidation] = useState<ValidationResult | null>(null);\n\n // ── async UI ─────────────────────────────────────────────────────────────────\n const [loading, setLoading] = useState(false);\n const [validating, setValidating] = useState(false);\n const [saving, setSaving] = useState(false);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n const reportError = useCallback(\n (err: unknown) => {\n const e = err instanceof Error ? err : new Error(String(err));\n setLoadError(e.message);\n onError?.(e);\n },\n [onError]\n );\n\n // The board's lanes (display order) drive sections ② + ③.\n const lanes = useMemo<KanbanLane[]>(() => board?.board.lanes ?? [], [board]);\n const dueRefs = useMemo(() => collectDueRefs(lanes), [lanes]);\n\n // Load the board list + predicates once on mount.\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const [list, preds] = await Promise.all([\n adapter.listBoardDefs(),\n adapter.listPredicates(),\n ]);\n if (cancelled) return;\n setBoards(list.boards);\n setPredicates(preds);\n } catch (err) {\n if (!cancelled) reportError(err);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [adapter, reportError]);\n\n // Seed the editor from a resolved board def + any stored mapping.\n const loadBoard = useCallback(\n async (uuid: string) => {\n if (!uuid) return;\n setLoading(true);\n setLoadError(null);\n setValidation(null);\n try {\n const [def, stored] = await Promise.all([\n adapter.getBoardDef(uuid),\n adapter.getMapping(uuid),\n ]);\n setBoard(def);\n\n const m = stored.mapping;\n const defLanes = def.board.lanes ?? [];\n\n // ① binding\n setEntity(m?.entity ?? \"\");\n setOrgColumn(m?.orgColumn ?? DEFAULT_ORG_COLUMN);\n setStateColumn(m?.stateColumn ?? \"\");\n setScopeField(m?.scope.field ?? \"\");\n setScopeValue(m?.scope.value != null ? String(m.scope.value) : \"\");\n\n // ② lanes — restore stored host states, else auto-suggest by name.\n const storedLaneByKey = new Map(\n (m?.lanes ?? []).map((l) => [l.stageKey, l] as const)\n );\n const states: Record<string, string> = {};\n const creates: Record<string, boolean> = {};\n for (const lane of defLanes) {\n const sl = storedLaneByKey.get(lane.key);\n states[lane.key] = sl?.hostState ?? suggestHostState(lane);\n creates[lane.key] = sl?.createIfMissing ?? false;\n }\n setLaneStates(states);\n setLaneCreate(creates);\n\n // ③ fields — one row per dueRule ref, hydrated from stored bindings.\n const refs = collectDueRefs(defLanes);\n const storedFieldByRef = new Map(\n (m?.fields ?? []).map((f) => [f.ref, f] as const)\n );\n setFieldRows(\n refs.map(({ ref, requiresPredicate }) => {\n const sf = storedFieldByRef.get(ref);\n return sf\n ? fieldRowFromBinding(sf, requiresPredicate)\n : freshFieldRow(ref, requiresPredicate);\n })\n );\n\n // If we re-opened a stored mapping, surface its current status.\n if (stored.validationStatus) {\n setValidation({ status: stored.validationStatus, errors: [] });\n }\n } catch (err) {\n reportError(err);\n } finally {\n setLoading(false);\n }\n },\n [adapter, reportError]\n );\n\n // Auto-load a pre-selected board.\n useEffect(() => {\n if (boardConfigUuid) {\n setSelectedUuid(boardConfigUuid);\n void loadBoard(boardConfigUuid);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardConfigUuid]);\n\n const onPickBoard = useCallback(\n (uuid: string) => {\n setSelectedUuid(uuid);\n void loadBoard(uuid);\n },\n [loadBoard]\n );\n\n // Assemble the current typed mapping (used for validate + save).\n const buildMapping = useCallback((): Mapping | null => {\n if (!board) return null;\n const activeVersion = board.version;\n const laneBindings = lanes\n .filter((lane) => (laneStates[lane.key] ?? \"\").trim().length > 0)\n .map((lane) => ({\n stageKey: lane.key,\n stageId: laneStageId(lane),\n hostState: laneStates[lane.key]!,\n createIfMissing: laneCreate[lane.key] ?? false,\n }));\n const fields: FieldBinding[] = fieldRows.map(rowToBinding);\n return {\n boardConfigUuid: selectedUuid,\n configVersion: activeVersion,\n entity,\n orgColumn,\n stateColumn,\n scope: {\n field: scopeField,\n // Numeric scope values round-trip as numbers (the §4 contract allows\n // string | number); everything else stays a string.\n value: /^-?\\d+$/.test(scopeValue) ? Number(scopeValue) : scopeValue,\n },\n lanes: laneBindings,\n fields,\n };\n }, [\n board,\n lanes,\n laneStates,\n laneCreate,\n fieldRows,\n selectedUuid,\n entity,\n orgColumn,\n stateColumn,\n scopeField,\n scopeValue,\n ]);\n\n // Client-side gate: every binding identifier passes the grammar + no lane is\n // unmapped + the binding fields are filled. (The server RE-CHECKS on save.)\n const unmappedLaneKeys = useMemo(\n () => lanes.filter((l) => (laneStates[l.key] ?? \"\").trim().length === 0).map((l) => l.key),\n [lanes, laneStates]\n );\n\n const fieldRowErrors = useMemo(\n () => fieldRows.map((r) => fieldRowError(r)),\n [fieldRows]\n );\n\n const bindingGrammarOk = useMemo(() => {\n if (!isValidIdentifier(entity)) return false;\n if (!isValidIdentifier(orgColumn)) return false;\n if (!isValidIdentifier(stateColumn)) return false;\n if (!isValidIdentifier(scopeField)) return false;\n if (fieldRowErrors.some((e) => e != null)) return false;\n return true;\n }, [entity, orgColumn, stateColumn, scopeField, fieldRowErrors]);\n\n const canValidate =\n !!board && bindingGrammarOk && unmappedLaneKeys.length === 0 && !validating;\n\n // Save is enabled ONLY when the last validation said \"valid\".\n const saveEnabled = validation?.status === \"valid\" && !saving && !!board;\n\n const handleValidate = useCallback(async () => {\n const mapping = buildMapping();\n if (!mapping) return;\n setValidating(true);\n setLoadError(null);\n try {\n const result = await adapter.validate(selectedUuid, mapping);\n setValidation(result);\n } catch (err) {\n reportError(err);\n } finally {\n setValidating(false);\n }\n }, [adapter, buildMapping, selectedUuid, reportError]);\n\n const handleSave = useCallback(async () => {\n const mapping = buildMapping();\n if (!mapping) return;\n setSaving(true);\n setLoadError(null);\n try {\n const res = await adapter.saveMapping(selectedUuid, mapping);\n if (res.saved) {\n setValidation(res.result);\n onSaved?.(mapping);\n } else {\n setValidation(res.result);\n }\n } catch (err) {\n reportError(err);\n } finally {\n setSaving(false);\n }\n }, [adapter, buildMapping, selectedUuid, onSaved, reportError]);\n\n // ── render helpers ────────────────────────────────────────────────────────\n const status: \"valid\" | \"stale\" | \"invalid\" | \"none\" = validation?.status ?? \"none\";\n const sc = statusColors(status);\n const isStale = status === \"stale\";\n\n function updateField(idx: number, patch: Partial<FieldRowState>) {\n setFieldRows((rows) => rows.map((r, i) => (i === idx ? { ...r, ...patch } : r)));\n // any edit invalidates the prior validation (must re-validate to enable save)\n setValidation(null);\n }\n\n function inputStyle(invalid: boolean): React.CSSProperties {\n return invalid ? { ...S.input, ...S.inputErr } : S.input;\n }\n\n return (\n <div style={S.card} data-testid=\"board-host-mapping\">\n {/* header: board picker + status pill */}\n <div style={S.head}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10, fontWeight: 600 }}>\n <span>Cadra board</span>\n <select\n aria-label=\"Cadra board\"\n value={selectedUuid}\n onChange={(e) => onPickBoard(e.target.value)}\n style={S.input}\n >\n <option value=\"\">— pick a board —</option>\n {boards.map((b) => (\n <option key={b.uuid} value={b.uuid}>\n {b.name ?? b.slug ?? b.uuid}\n </option>\n ))}\n </select>\n </div>\n <span style={{ ...S.pill, background: sc.bg, color: sc.fg }}>\n {status === \"none\" ? \"not validated\" : status}\n </span>\n </div>\n\n {loadError && (\n <div style={{ ...S.sec, color: \"#dc2626\" }} role=\"alert\">\n {loadError}\n </div>\n )}\n\n {loading && (\n <div style={S.sec} data-testid=\"board-host-loading\">\n Loading board…\n </div>\n )}\n\n {board && !loading && (\n <>\n {/* ① Binding */}\n <section style={S.sec} aria-label=\"Binding\">\n <div style={S.lbl}>\n <span style={S.num}>1</span>\n <span style={S.ttl}>Binding</span>\n </div>\n <div style={S.row}>\n <span style={S.k}>Host entity</span>\n <div>\n <input\n aria-label=\"Host entity\"\n value={entity}\n placeholder=\"leads\"\n onChange={(e) => {\n setEntity(e.target.value);\n setValidation(null);\n }}\n style={inputStyle(entity.length > 0 && !isValidIdentifier(entity))}\n />\n {entity.length > 0 && !isValidIdentifier(entity) && (\n <span style={S.errText} role=\"alert\">\n {identifierError(entity)}\n </span>\n )}\n </div>\n </div>\n <div style={S.row}>\n <span style={S.k}>Org column</span>\n <input\n aria-label=\"Org column\"\n value={orgColumn}\n onChange={(e) => {\n setOrgColumn(e.target.value);\n setValidation(null);\n }}\n style={inputStyle(orgColumn.length > 0 && !isValidIdentifier(orgColumn))}\n />\n </div>\n <div style={S.row}>\n <span style={S.k}>State column</span>\n <input\n aria-label=\"State column\"\n value={stateColumn}\n placeholder=\"standard_stage\"\n onChange={(e) => {\n setStateColumn(e.target.value);\n setValidation(null);\n }}\n style={inputStyle(stateColumn.length > 0 && !isValidIdentifier(stateColumn))}\n />\n </div>\n <div style={S.row}>\n <span style={S.k}>Membership</span>\n <span style={{ color: \"#6b7480\" }}>\n cards = <code>{entity || \"<entity>\"}</code> where\n </span>\n <input\n aria-label=\"Scope field\"\n value={scopeField}\n placeholder=\"lifecycle_id\"\n onChange={(e) => {\n setScopeField(e.target.value);\n setValidation(null);\n }}\n style={{\n ...inputStyle(scopeField.length > 0 && !isValidIdentifier(scopeField)),\n minWidth: 120,\n }}\n />\n <span style={{ color: \"#6b7480\" }}>=</span>\n <input\n aria-label=\"Scope value\"\n value={scopeValue}\n placeholder=\"42\"\n onChange={(e) => {\n setScopeValue(e.target.value);\n setValidation(null);\n }}\n style={{ ...S.input, minWidth: 100 }}\n />\n </div>\n </section>\n\n {/* ② Lane map */}\n <section style={S.sec} aria-label=\"Lane map\">\n <div style={S.lbl}>\n <span style={S.num}>2</span>\n <span style={S.ttl}>Lane map</span>\n <span style={{ marginLeft: \"auto\", fontSize: 11, color: \"#98a1ad\" }}>\n auto-matched by name\n </span>\n </div>\n {lanes.map((lane) => {\n const mapped = (laneStates[lane.key] ?? \"\").trim().length > 0;\n return (\n <div style={S.lane} key={lane.key}>\n <span>\n {lane.label}\n <small style={{ display: \"block\", color: \"#98a1ad\", fontSize: 11 }}>\n {laneStageId(lane)}\n </small>\n </span>\n <span style={{ color: \"#98a1ad\", textAlign: \"center\" }}>→</span>\n <input\n aria-label={`Host state for ${lane.label}`}\n value={laneStates[lane.key] ?? \"\"}\n placeholder=\"— host state —\"\n onChange={(e) => {\n setLaneStates((s) => ({ ...s, [lane.key]: e.target.value }));\n setValidation(null);\n }}\n style={{ ...S.input, minWidth: 0, width: \"100%\" }}\n />\n <label\n style={{ display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 11.5, color: \"#6b7480\" }}\n >\n <input\n type=\"checkbox\"\n aria-label={`Create lane ${lane.label} if missing`}\n checked={laneCreate[lane.key] ?? false}\n onChange={(e) => {\n setLaneCreate((c) => ({ ...c, [lane.key]: e.target.checked }));\n setValidation(null);\n }}\n />\n create\n </label>\n <span\n style={{ ...S.st, color: mapped ? \"#16a34a\" : \"#c2710c\", gridColumn: \"1 / -1\", marginTop: 2 }}\n >\n {mapped ? \"✓ mapped\" : \"⚠ gap — unmapped lane\"}\n </span>\n </div>\n );\n })}\n </section>\n\n {/* ③ Field map */}\n <section style={S.sec} aria-label=\"Field map\">\n <div style={S.lbl}>\n <span style={S.num}>3</span>\n <span style={S.ttl}>Field map</span>\n <span style={{ marginLeft: \"auto\", fontSize: 11, color: \"#98a1ad\" }}>\n per dueRule ref\n </span>\n </div>\n {dueRefs.length === 0 && (\n <div style={{ color: \"#98a1ad\", fontSize: 12.5 }}>\n No scheduled dueRules on this board — nothing to map.\n </div>\n )}\n {fieldRows.map((row, idx) => {\n const err = fieldRowErrors[idx];\n return (\n <div style={S.fieldRow} key={row.ref}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10, flexWrap: \"wrap\" }}>\n <code style={{ fontWeight: 600, minWidth: 130 }}>{row.ref}</code>\n <select\n aria-label={`Kind for ${row.ref}`}\n value={row.kind}\n disabled={row.predicateOnly}\n onChange={(e) => updateField(idx, { kind: e.target.value as FieldKind })}\n style={S.input}\n >\n {row.predicateOnly ? (\n <option value=\"predicate\">predicate</option>\n ) : (\n <>\n <option value=\"column\">column</option>\n <option value=\"json\">json</option>\n <option value=\"fk\">fk</option>\n <option value=\"predicate\">predicate</option>\n </>\n )}\n </select>\n\n {row.kind === \"column\" && (\n <input\n aria-label={`Column for ${row.ref}`}\n value={row.column}\n placeholder=\"column\"\n onChange={(e) => updateField(idx, { column: e.target.value })}\n style={inputStyle(!!err)}\n />\n )}\n\n {row.kind === \"json\" && (\n <>\n <input\n aria-label={`Json column for ${row.ref}`}\n value={row.column}\n placeholder=\"custom_data\"\n onChange={(e) => updateField(idx, { column: e.target.value })}\n style={inputStyle(!!err)}\n />\n <input\n aria-label={`Json path for ${row.ref}`}\n value={row.path}\n placeholder=\"score\"\n onChange={(e) => updateField(idx, { path: e.target.value })}\n style={inputStyle(!!err)}\n />\n </>\n )}\n\n {row.kind === \"fk\" && (\n <>\n <input\n aria-label={`Fk via for ${row.ref}`}\n value={row.via}\n placeholder=\"gtm_campaign_id\"\n onChange={(e) => updateField(idx, { via: e.target.value })}\n style={inputStyle(!!err)}\n />\n <input\n aria-label={`Fk table for ${row.ref}`}\n value={row.table}\n placeholder=\"gtm_campaigns\"\n onChange={(e) => updateField(idx, { table: e.target.value })}\n style={inputStyle(!!err)}\n />\n <input\n aria-label={`Fk column for ${row.ref}`}\n value={row.column}\n placeholder=\"status\"\n onChange={(e) => updateField(idx, { column: e.target.value })}\n style={inputStyle(!!err)}\n />\n </>\n )}\n\n {row.kind === \"predicate\" && (\n <select\n aria-label={`Predicate for ${row.ref}`}\n value={row.name}\n onChange={(e) => updateField(idx, { name: e.target.value })}\n style={inputStyle(!!err)}\n >\n <option value=\"\">— pick predicate —</option>\n {predicates.map((p) => (\n <option key={p} value={p}>\n {p}\n </option>\n ))}\n </select>\n )}\n </div>\n {err && (\n <div style={S.errText} role=\"alert\">\n {err}\n </div>\n )}\n </div>\n );\n })}\n </section>\n\n {/* ④ Validate */}\n <section style={S.sec} aria-label=\"Validate\">\n <div style={S.lbl}>\n <span style={S.num}>4</span>\n <span style={S.ttl}>Validate</span>\n </div>\n\n {isStale && (\n <div\n style={{ ...S.vpanel, background: \"#fdf2e3\" }}\n role=\"status\"\n data-testid=\"stale-banner\"\n >\n <div style={{ ...S.vline, color: \"#c2710c\" }}>\n <span style={{ fontWeight: 700 }}>!</span>\n <div>\n Board version changed — revalidate. The mapping was validated\n against an older board version; re-validate against the active\n version before saving.\n </div>\n </div>\n </div>\n )}\n\n {validation && status === \"valid\" && (\n <div style={{ ...S.vpanel, background: \"#e9f7ee\" }} role=\"status\">\n <div style={{ ...S.vline, color: \"#16a34a\" }}>\n <span style={{ fontWeight: 700 }}>✓</span>\n <div>Mapping is valid for the active board version — ready to save.</div>\n </div>\n </div>\n )}\n\n {validation && status === \"invalid\" && (\n <div style={{ ...S.vpanel, background: \"#fdecec\" }} role=\"alert\" data-testid=\"invalid-panel\">\n {validation.errors.length === 0 ? (\n <div style={{ ...S.vline, color: \"#dc2626\" }}>\n <span style={{ fontWeight: 700 }}>✕</span>\n <div>Mapping is invalid for this board.</div>\n </div>\n ) : (\n validation.errors.map((e: ValidationError, i) => (\n <div style={{ ...S.vline, color: \"#dc2626\" }} key={i}>\n <span style={{ fontWeight: 700 }}>✕</span>\n <div>\n {e.ref && <code>{e.ref}</code>}\n {e.lane?.stageKey && <code>lane {e.lane.stageKey}</code>}{\" \"}\n {e.message}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n\n <div style={S.actions}>\n <button\n type=\"button\"\n style={{ ...S.btn, ...(canValidate ? {} : S.btnDisabled) }}\n disabled={!canValidate}\n onClick={() => void handleValidate()}\n >\n {validating ? \"Validating…\" : \"Re-validate\"}\n </button>\n <button\n type=\"button\"\n style={{ ...S.btn, ...S.btnPrimary, ...(saveEnabled ? {} : S.btnDisabled) }}\n disabled={!saveEnabled}\n onClick={() => void handleSave()}\n >\n {saving ? \"Saving…\" : \"Save mapping\"}\n </button>\n </div>\n </section>\n </>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/board-host/widget/BoardHostMappingProvider.tsx","../../src/board-host/widget/grammar.ts","../../src/board-host/widget/refs.ts","../../src/board-host/widget/styles.ts","../../src/board-host/widget/LaneMapStep.tsx","../../src/board-host/widget/BoardHostMapping.tsx"],"names":["jsx","useMemo","jsxs","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\n/**\n * BoardHostMappingProvider — supplies the injected\n * {@link BoardHostMappingAdapter} to `<BoardHostMapping/>` via React context.\n *\n * Mirrors the chat surface's `ChatConfigProvider`, with ONE deliberate\n * difference (spec §7, R1 #7): there is NO `apiKey`/`config` — the host injects\n * a fully-built, SESSION-AUTHED adapter. The widget never sees a key.\n *\n * @module @cadraos/sdk/board-host\n */\n\nimport * as React from \"react\";\nimport { createContext, useContext, useMemo } from \"react\";\nimport type { BoardHostMappingAdapter } from \"./adapter.js\";\n\ninterface BoardHostMappingContextValue {\n adapter: BoardHostMappingAdapter;\n}\n\nconst BoardHostMappingContext =\n createContext<BoardHostMappingContextValue | null>(null);\n\nexport interface BoardHostMappingProviderProps {\n /**\n * The session-authed adapter the host injects (wraps the §6b endpoints with\n * the host's session/CSRF). NO `apiKey` — see {@link BoardHostMappingAdapter}.\n */\n adapter: BoardHostMappingAdapter;\n children: React.ReactNode;\n}\n\n/**\n * Provide the adapter to all child `<BoardHostMapping/>` widgets.\n *\n * @example\n * ```tsx\n * <BoardHostMappingProvider adapter={hostMappingAdapter}>\n * <BoardHostMapping boardConfigUuid={uuid} onSaved={…} />\n * </BoardHostMappingProvider>\n * ```\n */\nexport function BoardHostMappingProvider({\n adapter,\n children,\n}: BoardHostMappingProviderProps) {\n const value = useMemo(() => ({ adapter }), [adapter]);\n return (\n <BoardHostMappingContext.Provider value={value}>\n {children}\n </BoardHostMappingContext.Provider>\n );\n}\n\n/**\n * Read the injected adapter from context. The widget also accepts an `adapter`\n * prop directly (which takes precedence), so this throws ONLY when neither a\n * provider nor a prop supplied one.\n */\nexport function useBoardHostMappingAdapter(): BoardHostMappingAdapter {\n const ctx = useContext(BoardHostMappingContext);\n if (!ctx) {\n throw new Error(\n \"useBoardHostMappingAdapter must be used within a \" +\n \"<BoardHostMappingProvider> or pass an `adapter` prop to <BoardHostMapping>.\"\n );\n }\n return ctx.adapter;\n}\n\n/** Optional variant — returns `null` instead of throwing when absent. */\nexport function useBoardHostMappingAdapterOptional(): BoardHostMappingAdapter | null {\n return useContext(BoardHostMappingContext)?.adapter ?? null;\n}\n","/**\n * @cadraos/sdk/board-host (client) — client-side identifier grammar check.\n *\n * The widget grammar-checks typed SQL identifiers (`entity`, `column`, `table`,\n * `via`, each json `path` segment, predicate `name`) live, showing an inline\n * error before the user can save. This MIRRORS the server-side\n * {@link IDENTIFIER_PATTERN} in `server/identifiers.ts` (spec §5):\n *\n * `^[A-Za-z_][A-Za-z0-9_]{0,62}$` (single identifier, ≤63 chars, no dots)\n *\n * The pattern is duplicated (not imported) ON PURPOSE: the client surface is\n * zero-dep and must never pull the server kit into the browser bundle. The\n * server RE-CHECKS on save (the client check is UX, never the security gate).\n *\n * @module @cadraos/sdk/board-host\n */\n\n/** The SQL identifier grammar (kept in lockstep with `server/identifiers.ts`). */\nexport const WIDGET_IDENTIFIER_PATTERN = /^[A-Za-z_][A-Za-z0-9_]{0,62}$/;\n\n/** `true` iff `value` is a single, grammar-valid SQL identifier. */\nexport function isValidIdentifier(value: string): boolean {\n return WIDGET_IDENTIFIER_PATTERN.test(value);\n}\n\n/**\n * Validate a json `path` (one-or-more dot-separated identifier segments, e.g.\n * `\"a.b.c\"`). Empty, or any non-identifier segment → invalid.\n */\nexport function isValidJsonPath(path: string): boolean {\n if (path.length === 0) return false;\n return path.split(\".\").every((seg) => isValidIdentifier(seg));\n}\n\n/** A human inline-error message for an out-of-grammar identifier. */\nexport function identifierError(value: string): string | null {\n if (value.length === 0) return \"required\";\n if (!isValidIdentifier(value)) {\n return \"must match [A-Za-z_][A-Za-z0-9_]{0,62} (one identifier, no dots/spaces)\";\n }\n return null;\n}\n","/**\n * @cadraos/sdk/board-host (client) — dueRule ref extraction for the field map.\n *\n * The field-map section (③) must show one binding row per dueRule `ref` the\n * board's scheduled lanes use. This walks the board's lanes' `dueRule`s and\n * collects the distinct refs (+ whether a ref MUST be a `predicate`-kind\n * binding, so the widget can pre-pick the kind). MIRRORS the server validator's\n * `collectDueRefs` (server/validate.ts) — kept client-local so the browser\n * bundle never imports the server kit.\n *\n * @module @cadraos/sdk/board-host\n */\n\nimport type { DueRule } from \"../../kanban/types.js\";\nimport type { KanbanLane } from \"../../kanban/types.js\";\n\n/** A dueRule ref the field map must offer a binding for. */\nexport interface DueRef {\n /** The field `ref` (matches a `fields[].ref`). */\n ref: string;\n /** `true` when the ref came from a `predicate` dueRule (must bind a predicate). */\n requiresPredicate: boolean;\n}\n\n/** Recursively collect the refs one dueRule depends on. */\nfunction collect(rule: DueRule | undefined, out: DueRef[]): void {\n if (!rule) return;\n switch (rule.kind) {\n case \"field_due\":\n out.push({ ref: rule.field, requiresPredicate: false });\n return;\n case \"predicate\":\n out.push({ ref: rule.ref, requiresPredicate: true });\n return;\n case \"and\":\n for (const r of rule.rules) collect(r, out);\n return;\n // \"always\" / \"backlog\" (and any unknown) contribute no refs.\n default:\n return;\n }\n}\n\n/**\n * Collect the DISTINCT dueRule refs across a board's lanes, in first-seen order.\n * A ref that appears as a predicate anywhere is reported `requiresPredicate`.\n */\nexport function collectDueRefs(lanes: KanbanLane[]): DueRef[] {\n const raw: DueRef[] = [];\n for (const lane of lanes) collect(lane.dueRule, raw);\n\n const byRef = new Map<string, DueRef>();\n for (const dr of raw) {\n const existing = byRef.get(dr.ref);\n if (!existing) {\n byRef.set(dr.ref, { ...dr });\n } else if (dr.requiresPredicate) {\n existing.requiresPredicate = true;\n }\n }\n return Array.from(byRef.values());\n}\n","/**\n * Inline styles shared by `<BoardHostMapping/>` and `<LaneMapStep/>` (zero-dep,\n * framework-agnostic). Moved verbatim out of `BoardHostMapping.tsx` (P46-002-1).\n */\n\nimport type * as React from \"react\";\n\n// =============================================================================\n// STYLES (inline — keeps the widget zero-dep + framework-agnostic)\n// =============================================================================\n\nexport const S = {\n card: {\n background: \"#fff\",\n border: \"1px solid #e5e8ee\",\n borderRadius: 14,\n overflow: \"hidden\",\n maxWidth: 760,\n font: '14px/1.5 -apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,sans-serif',\n color: \"#11151c\",\n } as React.CSSProperties,\n head: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n padding: \"16px 20px\",\n borderBottom: \"1px solid #eef1f5\",\n } as React.CSSProperties,\n sec: { padding: \"16px 20px\", borderBottom: \"1px solid #eef1f5\" } as React.CSSProperties,\n lbl: { display: \"flex\", alignItems: \"center\", gap: 9, marginBottom: 12 } as React.CSSProperties,\n num: {\n width: 20,\n height: 20,\n borderRadius: 6,\n background: \"#eeeefb\",\n color: \"#5b5bd6\",\n fontSize: 11,\n fontWeight: 700,\n display: \"grid\",\n placeItems: \"center\",\n } as React.CSSProperties,\n ttl: { fontWeight: 650, fontSize: 13.5 } as React.CSSProperties,\n row: { display: \"flex\", alignItems: \"center\", gap: 10, margin: \"9px 0\", flexWrap: \"wrap\" } as React.CSSProperties,\n k: { width: 130, color: \"#6b7480\", fontSize: 13 } as React.CSSProperties,\n input: {\n border: \"1px solid #e5e8ee\",\n background: \"#fff\",\n borderRadius: 8,\n padding: \"6px 11px\",\n font: \"inherit\",\n fontSize: 13,\n color: \"#11151c\",\n minWidth: 150,\n } as React.CSSProperties,\n inputErr: { border: \"1px solid #dc2626\", background: \"#fdecec\" } as React.CSSProperties,\n errText: { color: \"#dc2626\", fontSize: 11.5, marginLeft: 4 } as React.CSSProperties,\n lane: {\n display: \"grid\",\n gridTemplateColumns: \"1fr 22px 1fr 90px\",\n alignItems: \"center\",\n gap: 10,\n padding: \"7px 0\",\n borderTop: \"1px dashed #eef1f5\",\n } as React.CSSProperties,\n fieldRow: { borderTop: \"1px dashed #eef1f5\", padding: \"8px 0\" } as React.CSSProperties,\n st: { fontSize: 12, fontWeight: 600 } as React.CSSProperties,\n vpanel: { borderRadius: 10, padding: \"12px 14px\", marginBottom: 14 } as React.CSSProperties,\n vline: { display: \"flex\", gap: 9, alignItems: \"flex-start\", fontSize: 13, padding: \"2px 0\" } as React.CSSProperties,\n actions: { display: \"flex\", gap: 10, justifyContent: \"flex-end\" } as React.CSSProperties,\n btn: {\n border: \"1px solid #e5e8ee\",\n background: \"#fff\",\n borderRadius: 8,\n padding: \"8px 15px\",\n font: \"inherit\",\n fontSize: 13,\n fontWeight: 600,\n cursor: \"pointer\",\n } as React.CSSProperties,\n btnPrimary: { background: \"#5b5bd6\", borderColor: \"#5b5bd6\", color: \"#fff\" } as React.CSSProperties,\n btnDisabled: { opacity: 0.45, cursor: \"not-allowed\" } as React.CSSProperties,\n pill: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 12,\n fontWeight: 600,\n padding: \"4px 10px\",\n borderRadius: 999,\n } as React.CSSProperties,\n} as const;\n","\"use client\";\n\n/**\n * `<LaneMapStep/>` — the lane-map rows (board stage → host state), extracted\n * from `<BoardHostMapping/>` ② (P46-002-1) so a hosted host (the Jira link\n * page) reuses the same step.\n *\n * - WITHOUT `hostStates`: today's free-text host-state input per lane — the\n * crm/yobo `<BoardHostMapping/>` path, DOM unchanged.\n * - WITH `hostStates` (e.g. a Jira board's column statuses): a `<select>` per\n * lane plus an \"Also accepts\" multi-select (D17: inbound, any of\n * `[hostState, ...alsoFrom]` maps to the lane; outbound writes `hostState`).\n *\n * Controlled: `value` in, the whole next map out via `onChange`. Zero runtime\n * deps; plain inline styles.\n *\n * @module @cadraos/sdk/board-host\n */\n\nimport * as React from \"react\";\nimport type { KanbanLane } from \"../../kanban/types.js\";\nimport { S } from \"./styles.js\";\n\n/** One lane's host-state binding (`LaneBinding` minus the stage identity). */\nexport interface LaneMapEntry {\n /** The host state a move INTO this lane writes (and reads). */\n hostState: string;\n /** Extra host states that also map INTO this lane (inbound only, D17). */\n alsoFrom?: string[];\n}\n\n/** Lane map keyed by stage `key`. */\nexport type LaneMapValue = Record<string, LaneMapEntry>;\n\n/** A host state the host offers (e.g. a Jira status: id + display name). */\nexport interface HostStateOption {\n value: string;\n label: string;\n}\n\nexport interface LaneMapStepProps {\n /** Board lanes, in order. */\n lanes: KanbanLane[];\n /** Current map (keyed by stage key). */\n value: LaneMapValue;\n /** Receives the WHOLE next map. */\n onChange: (next: LaneMapValue) => void;\n /** Offered host states → `<select>` mode; absent → free-text mode. */\n hostStates?: HostStateOption[];\n /**\n * Optional per-lane \"create if missing\" checkbox (the p34 crm/yobo mapping).\n * Absent → no checkbox.\n */\n createIfMissing?: {\n value: Record<string, boolean>;\n onChange: (stageKey: string, checked: boolean) => void;\n };\n}\n\n/** Lane identity for keying/reading (`id ?? key`, mirrors the engine). */\nexport function laneStageId(lane: KanbanLane): string {\n return lane.id ?? lane.key;\n}\n\n/** Offered options, plus any stored value no longer offered (never silently dropped). */\nfunction withStale(offered: HostStateOption[], extra: string[]): HostStateOption[] {\n const known = new Set(offered.map((o) => o.value));\n const stale = extra\n .filter((v) => v && !known.has(v))\n .map((v) => ({ value: v, label: `${v} (not on the board)` }));\n return [...offered, ...stale];\n}\n\nexport function LaneMapStep({\n lanes,\n value,\n onChange,\n hostStates,\n createIfMissing,\n}: LaneMapStepProps): React.ReactElement {\n function setEntry(key: string, entry: LaneMapEntry) {\n onChange({ ...value, [key]: entry });\n }\n\n return (\n <>\n {lanes.map((lane) => {\n const entry = value[lane.key];\n const hostState = entry?.hostState ?? \"\";\n const alsoFrom = entry?.alsoFrom ?? [];\n const mapped = hostState.trim().length > 0;\n return (\n <div style={S.lane} key={lane.key}>\n <span>\n {lane.label}\n <small style={{ display: \"block\", color: \"#98a1ad\", fontSize: 11 }}>\n {laneStageId(lane)}\n </small>\n </span>\n <span style={{ color: \"#98a1ad\", textAlign: \"center\" }}>→</span>\n {hostStates ? (\n <select\n aria-label={`Host state for ${lane.label}`}\n value={hostState}\n onChange={(e) => {\n const next = e.target.value;\n setEntry(lane.key, {\n hostState: next,\n alsoFrom: alsoFrom.filter((s) => s !== next),\n });\n }}\n style={{ ...S.input, minWidth: 0, width: \"100%\" }}\n >\n <option value=\"\">— host state —</option>\n {withStale(hostStates, [hostState]).map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n aria-label={`Host state for ${lane.label}`}\n value={hostState}\n placeholder=\"— host state —\"\n onChange={(e) => {\n setEntry(lane.key, { ...entry, hostState: e.target.value });\n }}\n style={{ ...S.input, minWidth: 0, width: \"100%\" }}\n />\n )}\n {createIfMissing ? (\n <label\n style={{ display: \"flex\", alignItems: \"center\", gap: 6, fontSize: 11.5, color: \"#6b7480\" }}\n >\n <input\n type=\"checkbox\"\n aria-label={`Create lane ${lane.label} if missing`}\n checked={createIfMissing.value[lane.key] ?? false}\n onChange={(e) => createIfMissing.onChange(lane.key, e.target.checked)}\n />\n create\n </label>\n ) : (\n <span />\n )}\n {hostStates && (\n <label\n style={{\n gridColumn: \"1 / -1\",\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 8,\n fontSize: 11.5,\n color: \"#6b7480\",\n }}\n >\n Also accepts\n <select\n multiple\n aria-label={`Also accepts for ${lane.label}`}\n value={alsoFrom}\n onChange={(e) => {\n const picked = Array.from(e.target.options)\n .filter((o) => o.selected)\n .map((o) => o.value);\n setEntry(lane.key, { hostState, alsoFrom: picked });\n }}\n style={{ ...S.input, minWidth: 0, flex: 1 }}\n >\n {withStale(hostStates, alsoFrom)\n .filter((o) => o.value !== hostState)\n .map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n </label>\n )}\n <span\n style={{ ...S.st, color: mapped ? \"#16a34a\" : \"#c2710c\", gridColumn: \"1 / -1\", marginTop: 2 }}\n >\n {mapped ? \"✓ mapped\" : \"⚠ gap — unmapped lane\"}\n </span>\n </div>\n );\n })}\n </>\n );\n}\n","\"use client\";\n\n/**\n * `<BoardHostMapping/>` — the SDK widget a system user uses to TYPE a board-host\n * mapping (spec §7). Four sections, mirroring `mockup.html`:\n *\n * ① Binding — board picker + typed entity / orgColumn / stateColumn + scope.\n * ② Lane map — board stages ↔ typed host states (auto-matched by name;\n * `createIfMissing`; unmapped lanes flagged).\n * ③ Field map — per dueRule `ref` a kind selector (column/json/fk/predicate)\n * + typed, grammar-checked identifier inputs; predicate names\n * come from `listPredicates()`.\n * ④ Validate — `validate()` → on `valid` enable Save; `invalid` shows the\n * per-ref/lane errors; `stale` shows the revalidate banner.\n * **Save is disabled unless status === \"valid\".**\n *\n * Zero runtime deps; React + react-dom are peers. Plain inline styles (no\n * Tailwind runtime needed) so the widget renders standalone in any host.\n * Session-authed adapter (no `apiKey` prop) — see {@link BoardHostMappingAdapter}.\n *\n * @module @cadraos/sdk/board-host\n */\n\nimport * as React from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { BoardHostMapping as Mapping, FieldBinding } from \"../types.js\";\nimport type { ResolvedBoardConfig } from \"../../kanban/config-client.js\";\nimport type { KanbanLane } from \"../../kanban/types.js\";\nimport type {\n BoardSummary,\n ValidationResult,\n ValidationError,\n} from \"../server/contract.js\";\nimport type { BoardHostMappingAdapter } from \"./adapter.js\";\nimport { useBoardHostMappingAdapterOptional } from \"./BoardHostMappingProvider.js\";\nimport { identifierError, isValidIdentifier, isValidJsonPath } from \"./grammar.js\";\nimport { collectDueRefs } from \"./refs.js\";\nimport { LaneMapStep, laneStageId } from \"./LaneMapStep.js\";\nimport { S } from \"./styles.js\";\n\n// =============================================================================\n// PROPS\n// =============================================================================\n\nexport interface BoardHostMappingProps {\n /** Pre-select this board on mount (else the user picks from the list). */\n boardConfigUuid?: string;\n /**\n * Adapter override — takes precedence over the provider. Lets the widget be\n * used without a provider (e.g. tests). NO `apiKey`: session-authed.\n */\n adapter?: BoardHostMappingAdapter;\n /** Fired after a successful save with the persisted mapping. */\n onSaved?: (mapping: Mapping) => void;\n /** Fired on any adapter/validation error. */\n onError?: (error: Error) => void;\n}\n\n// =============================================================================\n// FIELD-BINDING EDITOR STATE (a per-ref row, kept loose so half-typed kinds are\n// representable; assembled into a `FieldBinding` only when complete + valid)\n// =============================================================================\n\ntype FieldKind = FieldBinding[\"kind\"];\n\ninterface FieldRowState {\n ref: string;\n kind: FieldKind;\n /** column / json / fk identifier inputs (kind-specific subsets used). */\n column: string;\n path: string;\n via: string;\n table: string;\n /** predicate name. */\n name: string;\n /** locked to predicate (came from a predicate dueRule). */\n predicateOnly: boolean;\n}\n\nconst DEFAULT_ORG_COLUMN = \"org_id\";\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\n/** Auto-suggest a host state for a lane by its display label (mockup behavior). */\nfunction suggestHostState(lane: KanbanLane): string {\n return lane.label ?? lane.key ?? \"\";\n}\n\n/** Build a fresh field row from a dueRule ref. */\nfunction freshFieldRow(ref: string, requiresPredicate: boolean): FieldRowState {\n return {\n ref,\n kind: requiresPredicate ? \"predicate\" : \"column\",\n column: \"\",\n path: \"\",\n via: \"\",\n table: \"\",\n name: \"\",\n predicateOnly: requiresPredicate,\n };\n}\n\n/** Hydrate a field row from an already-stored binding (re-opening a mapping). */\nfunction fieldRowFromBinding(b: FieldBinding, requiresPredicate: boolean): FieldRowState {\n const base = freshFieldRow(b.ref, requiresPredicate);\n switch (b.kind) {\n case \"column\":\n return { ...base, kind: \"column\", column: b.column };\n case \"json\":\n return { ...base, kind: \"json\", column: b.column, path: b.path };\n case \"fk\":\n return { ...base, kind: \"fk\", via: b.via, table: b.table, column: b.column };\n case \"predicate\":\n return { ...base, kind: \"predicate\", name: b.name };\n default:\n return base;\n }\n}\n\n/** Per-row grammar error (the inline message shown under a field row). */\nfunction fieldRowError(row: FieldRowState): string | null {\n switch (row.kind) {\n case \"column\":\n return identifierError(row.column) && `column ${identifierError(row.column)}`;\n case \"json\": {\n const colErr = identifierError(row.column);\n if (colErr) return `column ${colErr}`;\n if (!isValidJsonPath(row.path))\n return \"path must be dot-separated identifiers\";\n return null;\n }\n case \"fk\": {\n const viaErr = identifierError(row.via);\n if (viaErr) return `via ${viaErr}`;\n const tableErr = identifierError(row.table);\n if (tableErr) return `table ${tableErr}`;\n const colErr = identifierError(row.column);\n if (colErr) return `column ${colErr}`;\n return null;\n }\n case \"predicate\":\n return row.name.length === 0\n ? \"pick a predicate\"\n : !isValidIdentifier(row.name)\n ? \"predicate name must be a single identifier\"\n : null;\n default:\n return \"unknown kind\";\n }\n}\n\n/** Assemble a `FieldBinding` from a (assumed-valid) row. */\nfunction rowToBinding(row: FieldRowState): FieldBinding {\n switch (row.kind) {\n case \"column\":\n return { ref: row.ref, kind: \"column\", column: row.column };\n case \"json\":\n return { ref: row.ref, kind: \"json\", column: row.column, path: row.path };\n case \"fk\":\n return {\n ref: row.ref,\n kind: \"fk\",\n via: row.via,\n table: row.table,\n column: row.column,\n };\n case \"predicate\":\n return { ref: row.ref, kind: \"predicate\", name: row.name };\n default:\n return { ref: row.ref, kind: \"column\", column: \"\" };\n }\n}\n\n// Styles live in ./styles.ts (shared with <LaneMapStep/>).\n\nfunction statusColors(status: \"valid\" | \"stale\" | \"invalid\" | \"none\"): {\n bg: string;\n fg: string;\n} {\n switch (status) {\n case \"valid\":\n return { bg: \"#e9f7ee\", fg: \"#16a34a\" };\n case \"stale\":\n return { bg: \"#fdf2e3\", fg: \"#c2710c\" };\n case \"invalid\":\n return { bg: \"#fdecec\", fg: \"#dc2626\" };\n default:\n return { bg: \"#f1f3f7\", fg: \"#6b7480\" };\n }\n}\n\n// =============================================================================\n// COMPONENT\n// =============================================================================\n\nexport function BoardHostMapping({\n boardConfigUuid,\n adapter: adapterProp,\n onSaved,\n onError,\n}: BoardHostMappingProps) {\n const adapterCtx = useBoardHostMappingAdapterOptional();\n const adapter = adapterProp ?? adapterCtx;\n if (!adapter) {\n throw new Error(\n \"<BoardHostMapping> requires an `adapter` prop or a parent <BoardHostMappingProvider>.\"\n );\n }\n\n // ── board list + selection ────────────────────────────────────────────────\n const [boards, setBoards] = useState<BoardSummary[]>([]);\n const [selectedUuid, setSelectedUuid] = useState<string>(boardConfigUuid ?? \"\");\n const [board, setBoard] = useState<ResolvedBoardConfig | null>(null);\n const [predicates, setPredicates] = useState<string[]>([]);\n\n // ── typed binding (①) ───────────────────────────────────────────────────────\n const [entity, setEntity] = useState(\"\");\n const [orgColumn, setOrgColumn] = useState(DEFAULT_ORG_COLUMN);\n const [stateColumn, setStateColumn] = useState(\"\");\n const [scopeField, setScopeField] = useState(\"\");\n const [scopeValue, setScopeValue] = useState(\"\");\n\n // ── lane map (②) ─ keyed by stageKey ────────────────────────────────────────\n const [laneStates, setLaneStates] = useState<Record<string, string>>({});\n const [laneCreate, setLaneCreate] = useState<Record<string, boolean>>({});\n\n // ── field map (③) ─ keyed by ref ─────────────────────────────────────────────\n const [fieldRows, setFieldRows] = useState<FieldRowState[]>([]);\n\n // ── validate (④) ─────────────────────────────────────────────────────────────\n const [validation, setValidation] = useState<ValidationResult | null>(null);\n\n // ── async UI ─────────────────────────────────────────────────────────────────\n const [loading, setLoading] = useState(false);\n const [validating, setValidating] = useState(false);\n const [saving, setSaving] = useState(false);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n const reportError = useCallback(\n (err: unknown) => {\n const e = err instanceof Error ? err : new Error(String(err));\n setLoadError(e.message);\n onError?.(e);\n },\n [onError]\n );\n\n // The board's lanes (display order) drive sections ② + ③.\n const lanes = useMemo<KanbanLane[]>(() => board?.board.lanes ?? [], [board]);\n const dueRefs = useMemo(() => collectDueRefs(lanes), [lanes]);\n\n // Load the board list + predicates once on mount.\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const [list, preds] = await Promise.all([\n adapter.listBoardDefs(),\n adapter.listPredicates(),\n ]);\n if (cancelled) return;\n setBoards(list.boards);\n setPredicates(preds);\n } catch (err) {\n if (!cancelled) reportError(err);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [adapter, reportError]);\n\n // Seed the editor from a resolved board def + any stored mapping.\n const loadBoard = useCallback(\n async (uuid: string) => {\n if (!uuid) return;\n setLoading(true);\n setLoadError(null);\n setValidation(null);\n try {\n const [def, stored] = await Promise.all([\n adapter.getBoardDef(uuid),\n adapter.getMapping(uuid),\n ]);\n setBoard(def);\n\n const m = stored.mapping;\n const defLanes = def.board.lanes ?? [];\n\n // ① binding\n setEntity(m?.entity ?? \"\");\n setOrgColumn(m?.orgColumn ?? DEFAULT_ORG_COLUMN);\n setStateColumn(m?.stateColumn ?? \"\");\n setScopeField(m?.scope.field ?? \"\");\n setScopeValue(m?.scope.value != null ? String(m.scope.value) : \"\");\n\n // ② lanes — restore stored host states, else auto-suggest by name.\n const storedLaneByKey = new Map(\n (m?.lanes ?? []).map((l) => [l.stageKey, l] as const)\n );\n const states: Record<string, string> = {};\n const creates: Record<string, boolean> = {};\n for (const lane of defLanes) {\n const sl = storedLaneByKey.get(lane.key);\n states[lane.key] = sl?.hostState ?? suggestHostState(lane);\n creates[lane.key] = sl?.createIfMissing ?? false;\n }\n setLaneStates(states);\n setLaneCreate(creates);\n\n // ③ fields — one row per dueRule ref, hydrated from stored bindings.\n const refs = collectDueRefs(defLanes);\n const storedFieldByRef = new Map(\n (m?.fields ?? []).map((f) => [f.ref, f] as const)\n );\n setFieldRows(\n refs.map(({ ref, requiresPredicate }) => {\n const sf = storedFieldByRef.get(ref);\n return sf\n ? fieldRowFromBinding(sf, requiresPredicate)\n : freshFieldRow(ref, requiresPredicate);\n })\n );\n\n // If we re-opened a stored mapping, surface its current status.\n if (stored.validationStatus) {\n setValidation({ status: stored.validationStatus, errors: [] });\n }\n } catch (err) {\n reportError(err);\n } finally {\n setLoading(false);\n }\n },\n [adapter, reportError]\n );\n\n // Auto-load a pre-selected board.\n useEffect(() => {\n if (boardConfigUuid) {\n setSelectedUuid(boardConfigUuid);\n void loadBoard(boardConfigUuid);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardConfigUuid]);\n\n const onPickBoard = useCallback(\n (uuid: string) => {\n setSelectedUuid(uuid);\n void loadBoard(uuid);\n },\n [loadBoard]\n );\n\n // Assemble the current typed mapping (used for validate + save).\n const buildMapping = useCallback((): Mapping | null => {\n if (!board) return null;\n const activeVersion = board.version;\n const laneBindings = lanes\n .filter((lane) => (laneStates[lane.key] ?? \"\").trim().length > 0)\n .map((lane) => ({\n stageKey: lane.key,\n stageId: laneStageId(lane),\n hostState: laneStates[lane.key]!,\n createIfMissing: laneCreate[lane.key] ?? false,\n }));\n const fields: FieldBinding[] = fieldRows.map(rowToBinding);\n return {\n boardConfigUuid: selectedUuid,\n configVersion: activeVersion,\n entity,\n orgColumn,\n stateColumn,\n scope: {\n field: scopeField,\n // Numeric scope values round-trip as numbers (the §4 contract allows\n // string | number); everything else stays a string.\n value: /^-?\\d+$/.test(scopeValue) ? Number(scopeValue) : scopeValue,\n },\n lanes: laneBindings,\n fields,\n };\n }, [\n board,\n lanes,\n laneStates,\n laneCreate,\n fieldRows,\n selectedUuid,\n entity,\n orgColumn,\n stateColumn,\n scopeField,\n scopeValue,\n ]);\n\n // Client-side gate: every binding identifier passes the grammar + no lane is\n // unmapped + the binding fields are filled. (The server RE-CHECKS on save.)\n const unmappedLaneKeys = useMemo(\n () => lanes.filter((l) => (laneStates[l.key] ?? \"\").trim().length === 0).map((l) => l.key),\n [lanes, laneStates]\n );\n\n const fieldRowErrors = useMemo(\n () => fieldRows.map((r) => fieldRowError(r)),\n [fieldRows]\n );\n\n const bindingGrammarOk = useMemo(() => {\n if (!isValidIdentifier(entity)) return false;\n if (!isValidIdentifier(orgColumn)) return false;\n if (!isValidIdentifier(stateColumn)) return false;\n if (!isValidIdentifier(scopeField)) return false;\n if (fieldRowErrors.some((e) => e != null)) return false;\n return true;\n }, [entity, orgColumn, stateColumn, scopeField, fieldRowErrors]);\n\n const canValidate =\n !!board && bindingGrammarOk && unmappedLaneKeys.length === 0 && !validating;\n\n // Save is enabled ONLY when the last validation said \"valid\".\n const saveEnabled = validation?.status === \"valid\" && !saving && !!board;\n\n const handleValidate = useCallback(async () => {\n const mapping = buildMapping();\n if (!mapping) return;\n setValidating(true);\n setLoadError(null);\n try {\n const result = await adapter.validate(selectedUuid, mapping);\n setValidation(result);\n } catch (err) {\n reportError(err);\n } finally {\n setValidating(false);\n }\n }, [adapter, buildMapping, selectedUuid, reportError]);\n\n const handleSave = useCallback(async () => {\n const mapping = buildMapping();\n if (!mapping) return;\n setSaving(true);\n setLoadError(null);\n try {\n const res = await adapter.saveMapping(selectedUuid, mapping);\n if (res.saved) {\n setValidation(res.result);\n onSaved?.(mapping);\n } else {\n setValidation(res.result);\n }\n } catch (err) {\n reportError(err);\n } finally {\n setSaving(false);\n }\n }, [adapter, buildMapping, selectedUuid, onSaved, reportError]);\n\n // ── render helpers ────────────────────────────────────────────────────────\n const status: \"valid\" | \"stale\" | \"invalid\" | \"none\" = validation?.status ?? \"none\";\n const sc = statusColors(status);\n const isStale = status === \"stale\";\n\n function updateField(idx: number, patch: Partial<FieldRowState>) {\n setFieldRows((rows) => rows.map((r, i) => (i === idx ? { ...r, ...patch } : r)));\n // any edit invalidates the prior validation (must re-validate to enable save)\n setValidation(null);\n }\n\n function inputStyle(invalid: boolean): React.CSSProperties {\n return invalid ? { ...S.input, ...S.inputErr } : S.input;\n }\n\n return (\n <div style={S.card} data-testid=\"board-host-mapping\">\n {/* header: board picker + status pill */}\n <div style={S.head}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10, fontWeight: 600 }}>\n <span>Cadra board</span>\n <select\n aria-label=\"Cadra board\"\n value={selectedUuid}\n onChange={(e) => onPickBoard(e.target.value)}\n style={S.input}\n >\n <option value=\"\">— pick a board —</option>\n {boards.map((b) => (\n <option key={b.uuid} value={b.uuid}>\n {b.name ?? b.slug ?? b.uuid}\n </option>\n ))}\n </select>\n </div>\n <span style={{ ...S.pill, background: sc.bg, color: sc.fg }}>\n {status === \"none\" ? \"not validated\" : status}\n </span>\n </div>\n\n {loadError && (\n <div style={{ ...S.sec, color: \"#dc2626\" }} role=\"alert\">\n {loadError}\n </div>\n )}\n\n {loading && (\n <div style={S.sec} data-testid=\"board-host-loading\">\n Loading board…\n </div>\n )}\n\n {board && !loading && (\n <>\n {/* ① Binding */}\n <section style={S.sec} aria-label=\"Binding\">\n <div style={S.lbl}>\n <span style={S.num}>1</span>\n <span style={S.ttl}>Binding</span>\n </div>\n <div style={S.row}>\n <span style={S.k}>Host entity</span>\n <div>\n <input\n aria-label=\"Host entity\"\n value={entity}\n placeholder=\"leads\"\n onChange={(e) => {\n setEntity(e.target.value);\n setValidation(null);\n }}\n style={inputStyle(entity.length > 0 && !isValidIdentifier(entity))}\n />\n {entity.length > 0 && !isValidIdentifier(entity) && (\n <span style={S.errText} role=\"alert\">\n {identifierError(entity)}\n </span>\n )}\n </div>\n </div>\n <div style={S.row}>\n <span style={S.k}>Org column</span>\n <input\n aria-label=\"Org column\"\n value={orgColumn}\n onChange={(e) => {\n setOrgColumn(e.target.value);\n setValidation(null);\n }}\n style={inputStyle(orgColumn.length > 0 && !isValidIdentifier(orgColumn))}\n />\n </div>\n <div style={S.row}>\n <span style={S.k}>State column</span>\n <input\n aria-label=\"State column\"\n value={stateColumn}\n placeholder=\"standard_stage\"\n onChange={(e) => {\n setStateColumn(e.target.value);\n setValidation(null);\n }}\n style={inputStyle(stateColumn.length > 0 && !isValidIdentifier(stateColumn))}\n />\n </div>\n <div style={S.row}>\n <span style={S.k}>Membership</span>\n <span style={{ color: \"#6b7480\" }}>\n cards = <code>{entity || \"<entity>\"}</code> where\n </span>\n <input\n aria-label=\"Scope field\"\n value={scopeField}\n placeholder=\"lifecycle_id\"\n onChange={(e) => {\n setScopeField(e.target.value);\n setValidation(null);\n }}\n style={{\n ...inputStyle(scopeField.length > 0 && !isValidIdentifier(scopeField)),\n minWidth: 120,\n }}\n />\n <span style={{ color: \"#6b7480\" }}>=</span>\n <input\n aria-label=\"Scope value\"\n value={scopeValue}\n placeholder=\"42\"\n onChange={(e) => {\n setScopeValue(e.target.value);\n setValidation(null);\n }}\n style={{ ...S.input, minWidth: 100 }}\n />\n </div>\n </section>\n\n {/* ② Lane map */}\n <section style={S.sec} aria-label=\"Lane map\">\n <div style={S.lbl}>\n <span style={S.num}>2</span>\n <span style={S.ttl}>Lane map</span>\n <span style={{ marginLeft: \"auto\", fontSize: 11, color: \"#98a1ad\" }}>\n auto-matched by name\n </span>\n </div>\n <LaneMapStep\n lanes={lanes}\n value={Object.fromEntries(\n Object.entries(laneStates).map(([k, hostState]) => [k, { hostState }])\n )}\n onChange={(next) => {\n setLaneStates(\n Object.fromEntries(Object.entries(next).map(([k, e]) => [k, e.hostState]))\n );\n setValidation(null);\n }}\n createIfMissing={{\n value: laneCreate,\n onChange: (key, checked) => {\n setLaneCreate((c) => ({ ...c, [key]: checked }));\n setValidation(null);\n },\n }}\n />\n </section>\n\n {/* ③ Field map */}\n <section style={S.sec} aria-label=\"Field map\">\n <div style={S.lbl}>\n <span style={S.num}>3</span>\n <span style={S.ttl}>Field map</span>\n <span style={{ marginLeft: \"auto\", fontSize: 11, color: \"#98a1ad\" }}>\n per dueRule ref\n </span>\n </div>\n {dueRefs.length === 0 && (\n <div style={{ color: \"#98a1ad\", fontSize: 12.5 }}>\n No scheduled dueRules on this board — nothing to map.\n </div>\n )}\n {fieldRows.map((row, idx) => {\n const err = fieldRowErrors[idx];\n return (\n <div style={S.fieldRow} key={row.ref}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10, flexWrap: \"wrap\" }}>\n <code style={{ fontWeight: 600, minWidth: 130 }}>{row.ref}</code>\n <select\n aria-label={`Kind for ${row.ref}`}\n value={row.kind}\n disabled={row.predicateOnly}\n onChange={(e) => updateField(idx, { kind: e.target.value as FieldKind })}\n style={S.input}\n >\n {row.predicateOnly ? (\n <option value=\"predicate\">predicate</option>\n ) : (\n <>\n <option value=\"column\">column</option>\n <option value=\"json\">json</option>\n <option value=\"fk\">fk</option>\n <option value=\"predicate\">predicate</option>\n </>\n )}\n </select>\n\n {row.kind === \"column\" && (\n <input\n aria-label={`Column for ${row.ref}`}\n value={row.column}\n placeholder=\"column\"\n onChange={(e) => updateField(idx, { column: e.target.value })}\n style={inputStyle(!!err)}\n />\n )}\n\n {row.kind === \"json\" && (\n <>\n <input\n aria-label={`Json column for ${row.ref}`}\n value={row.column}\n placeholder=\"custom_data\"\n onChange={(e) => updateField(idx, { column: e.target.value })}\n style={inputStyle(!!err)}\n />\n <input\n aria-label={`Json path for ${row.ref}`}\n value={row.path}\n placeholder=\"score\"\n onChange={(e) => updateField(idx, { path: e.target.value })}\n style={inputStyle(!!err)}\n />\n </>\n )}\n\n {row.kind === \"fk\" && (\n <>\n <input\n aria-label={`Fk via for ${row.ref}`}\n value={row.via}\n placeholder=\"gtm_campaign_id\"\n onChange={(e) => updateField(idx, { via: e.target.value })}\n style={inputStyle(!!err)}\n />\n <input\n aria-label={`Fk table for ${row.ref}`}\n value={row.table}\n placeholder=\"gtm_campaigns\"\n onChange={(e) => updateField(idx, { table: e.target.value })}\n style={inputStyle(!!err)}\n />\n <input\n aria-label={`Fk column for ${row.ref}`}\n value={row.column}\n placeholder=\"status\"\n onChange={(e) => updateField(idx, { column: e.target.value })}\n style={inputStyle(!!err)}\n />\n </>\n )}\n\n {row.kind === \"predicate\" && (\n <select\n aria-label={`Predicate for ${row.ref}`}\n value={row.name}\n onChange={(e) => updateField(idx, { name: e.target.value })}\n style={inputStyle(!!err)}\n >\n <option value=\"\">— pick predicate —</option>\n {predicates.map((p) => (\n <option key={p} value={p}>\n {p}\n </option>\n ))}\n </select>\n )}\n </div>\n {err && (\n <div style={S.errText} role=\"alert\">\n {err}\n </div>\n )}\n </div>\n );\n })}\n </section>\n\n {/* ④ Validate */}\n <section style={S.sec} aria-label=\"Validate\">\n <div style={S.lbl}>\n <span style={S.num}>4</span>\n <span style={S.ttl}>Validate</span>\n </div>\n\n {isStale && (\n <div\n style={{ ...S.vpanel, background: \"#fdf2e3\" }}\n role=\"status\"\n data-testid=\"stale-banner\"\n >\n <div style={{ ...S.vline, color: \"#c2710c\" }}>\n <span style={{ fontWeight: 700 }}>!</span>\n <div>\n Board version changed — revalidate. The mapping was validated\n against an older board version; re-validate against the active\n version before saving.\n </div>\n </div>\n </div>\n )}\n\n {validation && status === \"valid\" && (\n <div style={{ ...S.vpanel, background: \"#e9f7ee\" }} role=\"status\">\n <div style={{ ...S.vline, color: \"#16a34a\" }}>\n <span style={{ fontWeight: 700 }}>✓</span>\n <div>Mapping is valid for the active board version — ready to save.</div>\n </div>\n </div>\n )}\n\n {validation && status === \"invalid\" && (\n <div style={{ ...S.vpanel, background: \"#fdecec\" }} role=\"alert\" data-testid=\"invalid-panel\">\n {validation.errors.length === 0 ? (\n <div style={{ ...S.vline, color: \"#dc2626\" }}>\n <span style={{ fontWeight: 700 }}>✕</span>\n <div>Mapping is invalid for this board.</div>\n </div>\n ) : (\n validation.errors.map((e: ValidationError, i) => (\n <div style={{ ...S.vline, color: \"#dc2626\" }} key={i}>\n <span style={{ fontWeight: 700 }}>✕</span>\n <div>\n {e.ref && <code>{e.ref}</code>}\n {e.lane?.stageKey && <code>lane {e.lane.stageKey}</code>}{\" \"}\n {e.message}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n\n <div style={S.actions}>\n <button\n type=\"button\"\n style={{ ...S.btn, ...(canValidate ? {} : S.btnDisabled) }}\n disabled={!canValidate}\n onClick={() => void handleValidate()}\n >\n {validating ? \"Validating…\" : \"Re-validate\"}\n </button>\n <button\n type=\"button\"\n style={{ ...S.btn, ...S.btnPrimary, ...(saveEnabled ? {} : S.btnDisabled) }}\n disabled={!saveEnabled}\n onClick={() => void handleSave()}\n >\n {saving ? \"Saving…\" : \"Save mapping\"}\n </button>\n </div>\n </section>\n </>\n )}\n </div>\n );\n}\n"]}
|