@pilotiq/pilotiq 0.18.0 → 0.19.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/.turbo/turbo-build.log +2 -2
- package/CHANGELOG.md +50 -0
- package/dist/react/fields/FieldShell.d.ts.map +1 -1
- package/dist/react/fields/FieldShell.js +25 -1
- package/dist/react/fields/FieldShell.js.map +1 -1
- package/dist/react/fields/TextLikeInput.d.ts.map +1 -1
- package/dist/react/fields/TextLikeInput.js +14 -1
- package/dist/react/fields/TextLikeInput.js.map +1 -1
- package/package.json +1 -1
- package/src/react/fields/FieldShell.tsx +26 -1
- package/src/react/fields/TextLikeInput.tsx +14 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @pilotiq/pilotiq@0.
|
|
2
|
+
> @pilotiq/pilotiq@0.19.0 build /home/runner/work/pilotiq/pilotiq/packages/pilotiq
|
|
3
3
|
> tsc -p tsconfig.build.json && pnpm run copy-assets
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @pilotiq/pilotiq@0.
|
|
6
|
+
> @pilotiq/pilotiq@0.19.0 copy-assets /home/runner/work/pilotiq/pilotiq/packages/pilotiq
|
|
7
7
|
> mkdir -p dist/styles && cp -R src/styles/*.css dist/styles/
|
|
8
8
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# @pilotiq/pilotiq
|
|
2
2
|
|
|
3
|
+
## 0.19.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- adc0ce0: feat(pilotiq, tiptap): auto-upgrade `TextField` / `TextareaField` to the Tiptap-backed editor when AI agents are attached (no collab required)
|
|
8
|
+
|
|
9
|
+
Previously, the Tiptap-backed renderer (`CollabTextRenderer` in `@pilotiq/tiptap`) only mounted when a `<RecordCollabRoom>` was active — so AI suggestions on plain (non-collab) `TextField` / `TextareaField` fell back to the legacy DOM-write overlay, with no inline-diff chip widget.
|
|
10
|
+
|
|
11
|
+
The rule is now: a text-like field gets the Tiptap surface if **any one of**:
|
|
12
|
+
|
|
13
|
+
1. A collab room is active (existing behavior — cursor preservation under concurrent edits).
|
|
14
|
+
2. AI agents are attached via `field.ai([…])` (new — the inline-diff chip needs a ProseMirror surface to render).
|
|
15
|
+
3. The field is a `MarkdownField` (existing — always Tiptap).
|
|
16
|
+
|
|
17
|
+
`TextLikeInput` widens its routing gate from `room && collabRenderer …` to `(room || hasAi) && collabRenderer …`. `FieldShell` mirrors the widening so its legacy overlay + DOM-write applier stay out of the way when the Tiptap bridge owns the surface. `CollabTextRenderer` already handles `useCollabRoom() === null` — it just mounts the editor without the Yjs Collaboration extension, so this widening doesn't force a collab room.
|
|
18
|
+
|
|
19
|
+
No new public API. Users get the auto-upgrade for free by attaching agents — exactly what they already do to opt into AI features on a field.
|
|
20
|
+
|
|
21
|
+
**`@pilotiq/tiptap` follow-on:**
|
|
22
|
+
|
|
23
|
+
- `CollabTextRenderer` now sets `immediatelyRender: false` on the editor config. Pre-rule-#2 the host's `TextLikeInput` gated on a live collab room (client-only state), so SSR fell through to the native input and the editor never constructed server-side. With AI-attached fields now SSR-rendering Tiptap, `useEditor` would throw `"Tiptap Error: SSR has been detected, please set immediatelyRender explicitly to false"` on the first direct-navigation request. The flag defers construction to the first React effect — empty shell on SSR, live editor on hydration.
|
|
24
|
+
- Build script no longer ships `dist/markdownExtension.js.map`. The bundled file is 371 KB of inlined `tiptap-markdown` + `markdown-it` chain; the sourcemap from `tsc` only described the original ~20-line wrapper, leaving Vite to log a `Sourcemap … points to missing source files` warning on every consumer dev boot.
|
|
25
|
+
|
|
26
|
+
**Inline-diff chip visualization extended to MarkdownEditor + TiptapEditor.** Both now opt into `synthesizeWholeFieldRange` so chat-driven whole-field suggestions (`update_form_state`'s `set_value`) render the chip widget over the whole doc. The bridge tracks synthesized ids in a separate set: on Approve, _producer-supplied_ range hits the editor's `approveAiSuggestion` (text-node replace, surgical), while _synthesized_ whole-doc range delegates to the renderer's `onApplyWholeField` (`setContent(...)`) and clears the chip with a no-op reject. Without this split, approving a synthesized chip on richtext / markdown would do a plain-text replace and clobber all formatting; without the synthesis, the user saw no visualization at all on richtext / markdown.
|
|
27
|
+
|
|
28
|
+
- 644939b: fix(pilotiq, tiptap): route AI suggestions through the Tiptap bridge for collab-on / markdown / richtext fields — fixes chat-driven `update_form_state` no-op
|
|
29
|
+
|
|
30
|
+
Two cooperating bugs left chat-sidebar Approve doing nothing on Tiptap-backed fields:
|
|
31
|
+
|
|
32
|
+
1. **`FieldShell` overlay shadowed the bridge.** The gate `isRichText = fieldType === 'richtext'` ran the legacy overlay UI on `markdown` / `text` / `textarea`, _and_ registered a generic DOM-write applier that overwrote the Tiptap bridge's applier in the registry (parent effect runs after children). Approve set the hidden `<input>`'s `.value`, which the Tiptap editor never observes, so the visible content never changed.
|
|
33
|
+
|
|
34
|
+
2. **Bridge skipped whole-field suggestions.** `useAiSuggestionBridge` only pushed entries with `meta.editorRange = { from, to }` into the editor. Chat-agent producers like `@pilotiq-pro/ai`'s `update_form_state` tool target the whole field — no range — so suggestions sat in the queue with no chip widget and no applier path.
|
|
35
|
+
|
|
36
|
+
Fix:
|
|
37
|
+
|
|
38
|
+
- **`@pilotiq/pilotiq`** — `FieldShell` widens `isRichText` to `isTiptapMounted`: `richtext` always, `markdown` when a `MarkdownEditor` is registered, `text` / `textarea` when both a `CollabTextRenderer` is registered and `useCollabRoom()` resolves a room. Hides the legacy overlay and skips DOM-write applier registration so the bridge's editor-driven applier owns the surface.
|
|
39
|
+
|
|
40
|
+
- **`@pilotiq/tiptap`** — `useAiSuggestionBridge` accepts a new `onApplyWholeField(value)` option. When Approve fires for a non-bridge-pushed id, the bridge calls this callback instead of no-op'ing. Each renderer passes its own implementation:
|
|
41
|
+
- `CollabTextRenderer` → `editor.commands.setContent(plainTextToDoc(value, multiline))` — y-prosemirror syncs the resulting transaction to peers when collab is on.
|
|
42
|
+
- `MarkdownEditor` → `editor.commands.setContent(value)` — the Markdown extension parses the raw source.
|
|
43
|
+
- `TiptapEditor` (RichTextField) → `editor.commands.setContent(value)` — HTML / JSON.
|
|
44
|
+
|
|
45
|
+
After the fix every chat-driven `update_form_state` set-value lands on the visible editor surface across all three Tiptap mounts. Range-anchored suggestions (existing chip-widget path) keep their original behavior unchanged.
|
|
46
|
+
|
|
47
|
+
**Plus inline-diff visualization for whole-field suggestions.** Two follow-on improvements in `@pilotiq/tiptap`:
|
|
48
|
+
|
|
49
|
+
- `useAiSuggestionBridge` accepts `synthesizeWholeFieldRange(editor, suggestion) => { from, to } | undefined`. When opted in, whole-field suggestions get a synthesized range and the inline-diff chip widget renders BEFORE the user approves (red strikethrough on the current value + green chip with the suggested text + ✓/✕ buttons). `CollabTextRenderer` opts in with `{ from: 0, to: editor.state.doc.content.size }` — its plain-text schema accepts the extension's text-node replacement on Approve cleanly. `MarkdownEditor` and `TiptapEditor` abstain (they'd lose formatting on the chip-driven approve) and continue to use the silent `onApplyWholeField` fallback.
|
|
50
|
+
|
|
51
|
+
- `AiSuggestionExtension` injects minimal default styles into `<head>` on first mount (idempotent via a `data-pilotiq-ai-suggestion-styles` sentinel). Consumers no longer need to wire CSS for the chip — they see the visualization out of the box. User stylesheets still override since they cascade after the injected `<style>` block, and the class names (`pilotiq-ai-suggestion-original` / `-chip` / `-replacement` / `-accept` / `-reject`) stay the documented surface for customization.
|
|
52
|
+
|
|
3
53
|
## 0.18.0
|
|
4
54
|
|
|
5
55
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldShell.d.ts","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwC,MAAM,OAAO,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"FieldShell.d.ts","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwC,MAAM,OAAO,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAiC1D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAS,WAAW,CAAA;IACtB,IAAI,EAAO,MAAM,CAAA;IACjB,KAAK,EAAM,MAAM,CAAA;IACjB,QAAQ,EAAG,OAAO,CAAA;IAClB,QAAQ,EAAG,KAAK,CAAC,SAAS,CAAA;IAC1B;;;0DAGsD;IACtD,MAAM,CAAC,EAAI,KAAK,CAAC,SAAS,CAAA;IAC1B;0EACsE;IACtE,KAAK,CAAC,EAAK,KAAK,CAAC,SAAS,CAAA;IAC1B;gEAC4D;IAC5D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAuMjI"}
|
|
@@ -7,6 +7,9 @@ import { registerPendingSuggestionApplier } from '../PendingSuggestionApplierReg
|
|
|
7
7
|
import { FormIdContext, useFieldState } from '../FormStateContext.js';
|
|
8
8
|
import { getFieldPresenceComponent } from '../FieldPresenceRegistry.js';
|
|
9
9
|
import { getFieldFocusReporter } from '../FieldFocusReporterRegistry.js';
|
|
10
|
+
import { useCollabRoom } from '../CollabRoomContext.js';
|
|
11
|
+
import { getCollabTextRenderer } from '../CollabTextRendererRegistry.js';
|
|
12
|
+
import { getMarkdownEditor } from '../MarkdownEditorRegistry.js';
|
|
10
13
|
/**
|
|
11
14
|
* Field types whose visible state is driven by React (not by a matching
|
|
12
15
|
* `[name]` DOM input). Each registers its own applier inside the field
|
|
@@ -40,7 +43,28 @@ export function FieldShell({ el, name, label, required, children, before, after,
|
|
|
40
43
|
// `@pilotiq-pro/ai`) has registered a renderer AND there's a matching
|
|
41
44
|
// suggestion in the queue.
|
|
42
45
|
const fieldType = el['fieldType'];
|
|
43
|
-
|
|
46
|
+
// `isTiptapMounted` widens "richtext only" to every field whose visible
|
|
47
|
+
// surface is actually a Tiptap editor — covers MarkdownField (always
|
|
48
|
+
// Tiptap via `MarkdownEditor`), TextField / TextareaField when a collab
|
|
49
|
+
// room is active OR when AI agents are attached (uses `CollabTextRenderer`
|
|
50
|
+
// via @pilotiq/tiptap). For these the editor renders inline-diff
|
|
51
|
+
// Approve/Reject chips and owns its own applier through
|
|
52
|
+
// `useAiSuggestionBridge` — FieldShell hides the legacy overlay AND skips
|
|
53
|
+
// registering its DOM-write applier so the bridge's applier stays
|
|
54
|
+
// last-write-wins.
|
|
55
|
+
//
|
|
56
|
+
// Keep the AI-attached branch in sync with `TextLikeInput`'s gate — both
|
|
57
|
+
// need to flip together or the surface diverges (overlay would mount
|
|
58
|
+
// alongside the inline chip, etc.).
|
|
59
|
+
const collabRoom = useCollabRoom();
|
|
60
|
+
const hasCollabTextRenderer = getCollabTextRenderer() !== null;
|
|
61
|
+
const hasMarkdownEditor = getMarkdownEditor() !== null;
|
|
62
|
+
const aiActions = el['aiActions'];
|
|
63
|
+
const hasAi = Array.isArray(aiActions) && aiActions.length > 0;
|
|
64
|
+
const isTextLikeTiptap = (fieldType === 'text' || fieldType === 'textarea') &&
|
|
65
|
+
(collabRoom !== null || hasAi) && hasCollabTextRenderer;
|
|
66
|
+
const isMarkdownTiptap = fieldType === 'markdown' && hasMarkdownEditor;
|
|
67
|
+
const isRichText = fieldType === 'richtext' || isMarkdownTiptap || isTextLikeTiptap;
|
|
44
68
|
// Field types that drive their visible state from React (not from a
|
|
45
69
|
// matching `[name]` DOM input) register their own applier — see
|
|
46
70
|
// `SelectFieldInput` for the canonical example. FieldShell's generic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldShell.js","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAA0B,MAAM,iCAAiC,CAAA;AAC9H,OAAO,EAAE,2BAA2B,EAAE,MAAM,wCAAwC,CAAA;AACpF,OAAO,EAAE,gCAAgC,EAAiC,MAAM,wCAAwC,CAAA;AACxH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"FieldShell.js","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextLikeInput.d.ts","sourceRoot":"","sources":["../../../src/react/fields/TextLikeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAA;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAS1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GACzD,EAAE;IACD,EAAE,EAAU,WAAW,CAAA;IACvB,IAAI,EAAQ,MAAM,CAAA;IAClB,MAAM,EAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,IAAI,EAAQ,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,SAAS,EAAG,OAAO,CAAA;IACnB;;oDAEgD;IAChD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CACtC,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"TextLikeInput.d.ts","sourceRoot":"","sources":["../../../src/react/fields/TextLikeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAA;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAS1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GACzD,EAAE;IACD,EAAE,EAAU,WAAW,CAAA;IACvB,IAAI,EAAQ,MAAM,CAAA;IAClB,MAAM,EAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,IAAI,EAAQ,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,SAAS,EAAG,OAAO,CAAA;IACnB;;oDAEgD;IAChD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CACtC,GAAG,KAAK,CAAC,YAAY,CAmHrB"}
|
|
@@ -57,6 +57,19 @@ export function TextLikeInput({ el, name, common, type, extraProps, multiline, a
|
|
|
57
57
|
// names) skip the collab path and fall through to the controlled /
|
|
58
58
|
// uncontrolled branches below.
|
|
59
59
|
const fieldCollab = el['collab'];
|
|
60
|
+
// Auto-upgrade to the Tiptap-backed editor whenever the field has AI
|
|
61
|
+
// agents attached, even outside collab — the inline-diff chip widget
|
|
62
|
+
// (red strikethrough on the current value + green chip with the suggested
|
|
63
|
+
// text + ✓/✕) needs a real ProseMirror surface to render. The renderer
|
|
64
|
+
// handles `useCollabRoom() === null` cleanly (mounts the editor without
|
|
65
|
+
// the Yjs Collaboration extension), so this widening doesn't force a
|
|
66
|
+
// collab room.
|
|
67
|
+
//
|
|
68
|
+
// `field.ai([…])` from `@pilotiq-pro/ai` lands on `FieldMeta.aiActions`
|
|
69
|
+
// as a resolved `PilotiqAgentMeta[]`. Read the array; non-empty means
|
|
70
|
+
// "this field has AI surfaces wired".
|
|
71
|
+
const aiActions = el['aiActions'];
|
|
72
|
+
const hasAi = Array.isArray(aiActions) && aiActions.length > 0;
|
|
60
73
|
const fragmentKey = (() => {
|
|
61
74
|
if (!name.includes('.'))
|
|
62
75
|
return name;
|
|
@@ -71,7 +84,7 @@ export function TextLikeInput({ el, name, common, type, extraProps, multiline, a
|
|
|
71
84
|
return null;
|
|
72
85
|
return `${rowCoords.arrayName}.${rowCoords.rowId}.${parsed.fieldName}`;
|
|
73
86
|
})();
|
|
74
|
-
if (room &&
|
|
87
|
+
if ((room || hasAi) &&
|
|
75
88
|
collabRenderer &&
|
|
76
89
|
fieldCollab !== false &&
|
|
77
90
|
!hasMask &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextLikeInput.js","sourceRoot":"","sources":["../../../src/react/fields/TextLikeInput.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAA2B,MAAM,kCAAkC,CAAA;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAYzD;IACC,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,aAAa,EAAE,CAAA;IAC5B,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAA;IAC9C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAC/D,CAAC,CAAC,OAAkD;QACpD,CAAC,CAAC,EAAE,CAAC,CAAA;IACP,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAA;IAC3C,MAAM,IAAI,GAAG,SAAS,IAAI,QAAQ,CAAA;IAElC,uEAAuE;IACvE,kEAAkE;IAClE,mEAAmE;IACnE,uEAAuE;IACvE,oEAAoE;IACpE,UAAU;IACV,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAA;IAE9C,oEAAoE;IACpE,kEAAkE;IAClE,2DAA2D;IAC3D,qEAAqE;IACrE,iEAAiE;IACjE,kEAAkE;IAClE,4BAA4B;IAC5B,EAAE;IACF,6DAA6D;IAC7D,kEAAkE;IAClE,mEAAmE;IACnE,+BAA+B;IAC/B,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAwB,CAAA;IACvD,MAAM,WAAW,GAAkB,CAAC,GAAG,EAAE;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QACpC,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAA;QAC3B,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACxB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;YAAE,OAAO,IAAI,CAAA;QACzD,IAAI,MAAM,CAAC,KAAK,KAAS,SAAS,CAAC,QAAQ;YAAG,OAAO,IAAI,CAAA;QACzD,OAAO,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAA;IACxE,CAAC,CAAC,EAAE,CAAA;IACJ,IACE,IAAI;
|
|
1
|
+
{"version":3,"file":"TextLikeInput.js","sourceRoot":"","sources":["../../../src/react/fields/TextLikeInput.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -7,6 +7,9 @@ import { registerPendingSuggestionApplier, type PendingSuggestionApplier } from
|
|
|
7
7
|
import { FormIdContext, useFieldState } from '../FormStateContext.js'
|
|
8
8
|
import { getFieldPresenceComponent } from '../FieldPresenceRegistry.js'
|
|
9
9
|
import { getFieldFocusReporter } from '../FieldFocusReporterRegistry.js'
|
|
10
|
+
import { useCollabRoom } from '../CollabRoomContext.js'
|
|
11
|
+
import { getCollabTextRenderer } from '../CollabTextRendererRegistry.js'
|
|
12
|
+
import { getMarkdownEditor } from '../MarkdownEditorRegistry.js'
|
|
10
13
|
|
|
11
14
|
/**
|
|
12
15
|
* Field types whose visible state is driven by React (not by a matching
|
|
@@ -74,7 +77,29 @@ export function FieldShell({ el, name, label, required, children, before, after,
|
|
|
74
77
|
// `@pilotiq-pro/ai`) has registered a renderer AND there's a matching
|
|
75
78
|
// suggestion in the queue.
|
|
76
79
|
const fieldType = el['fieldType'] as string | undefined
|
|
77
|
-
|
|
80
|
+
// `isTiptapMounted` widens "richtext only" to every field whose visible
|
|
81
|
+
// surface is actually a Tiptap editor — covers MarkdownField (always
|
|
82
|
+
// Tiptap via `MarkdownEditor`), TextField / TextareaField when a collab
|
|
83
|
+
// room is active OR when AI agents are attached (uses `CollabTextRenderer`
|
|
84
|
+
// via @pilotiq/tiptap). For these the editor renders inline-diff
|
|
85
|
+
// Approve/Reject chips and owns its own applier through
|
|
86
|
+
// `useAiSuggestionBridge` — FieldShell hides the legacy overlay AND skips
|
|
87
|
+
// registering its DOM-write applier so the bridge's applier stays
|
|
88
|
+
// last-write-wins.
|
|
89
|
+
//
|
|
90
|
+
// Keep the AI-attached branch in sync with `TextLikeInput`'s gate — both
|
|
91
|
+
// need to flip together or the surface diverges (overlay would mount
|
|
92
|
+
// alongside the inline chip, etc.).
|
|
93
|
+
const collabRoom = useCollabRoom()
|
|
94
|
+
const hasCollabTextRenderer = getCollabTextRenderer() !== null
|
|
95
|
+
const hasMarkdownEditor = getMarkdownEditor() !== null
|
|
96
|
+
const aiActions = el['aiActions']
|
|
97
|
+
const hasAi = Array.isArray(aiActions) && aiActions.length > 0
|
|
98
|
+
const isTextLikeTiptap =
|
|
99
|
+
(fieldType === 'text' || fieldType === 'textarea') &&
|
|
100
|
+
(collabRoom !== null || hasAi) && hasCollabTextRenderer
|
|
101
|
+
const isMarkdownTiptap = fieldType === 'markdown' && hasMarkdownEditor
|
|
102
|
+
const isRichText = fieldType === 'richtext' || isMarkdownTiptap || isTextLikeTiptap
|
|
78
103
|
// Field types that drive their visible state from React (not from a
|
|
79
104
|
// matching `[name]` DOM input) register their own applier — see
|
|
80
105
|
// `SelectFieldInput` for the canonical example. FieldShell's generic
|
|
@@ -73,6 +73,19 @@ export function TextLikeInput({
|
|
|
73
73
|
// names) skip the collab path and fall through to the controlled /
|
|
74
74
|
// uncontrolled branches below.
|
|
75
75
|
const fieldCollab = el['collab'] as boolean | undefined
|
|
76
|
+
// Auto-upgrade to the Tiptap-backed editor whenever the field has AI
|
|
77
|
+
// agents attached, even outside collab — the inline-diff chip widget
|
|
78
|
+
// (red strikethrough on the current value + green chip with the suggested
|
|
79
|
+
// text + ✓/✕) needs a real ProseMirror surface to render. The renderer
|
|
80
|
+
// handles `useCollabRoom() === null` cleanly (mounts the editor without
|
|
81
|
+
// the Yjs Collaboration extension), so this widening doesn't force a
|
|
82
|
+
// collab room.
|
|
83
|
+
//
|
|
84
|
+
// `field.ai([…])` from `@pilotiq-pro/ai` lands on `FieldMeta.aiActions`
|
|
85
|
+
// as a resolved `PilotiqAgentMeta[]`. Read the array; non-empty means
|
|
86
|
+
// "this field has AI surfaces wired".
|
|
87
|
+
const aiActions = el['aiActions']
|
|
88
|
+
const hasAi = Array.isArray(aiActions) && aiActions.length > 0
|
|
76
89
|
const fragmentKey: string | null = (() => {
|
|
77
90
|
if (!name.includes('.')) return name
|
|
78
91
|
if (!rowCoords) return null
|
|
@@ -83,7 +96,7 @@ export function TextLikeInput({
|
|
|
83
96
|
return `${rowCoords.arrayName}.${rowCoords.rowId}.${parsed.fieldName}`
|
|
84
97
|
})()
|
|
85
98
|
if (
|
|
86
|
-
room &&
|
|
99
|
+
(room || hasAi) &&
|
|
87
100
|
collabRenderer &&
|
|
88
101
|
fieldCollab !== false &&
|
|
89
102
|
!hasMask &&
|