@pilotiq/pilotiq 0.8.0 → 0.8.2
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 +110 -0
- package/dist/react/FieldFocusReporterRegistry.d.ts +29 -0
- package/dist/react/FieldFocusReporterRegistry.d.ts.map +1 -0
- package/dist/react/FieldFocusReporterRegistry.js +14 -0
- package/dist/react/FieldFocusReporterRegistry.js.map +1 -0
- package/dist/react/FieldPresenceRegistry.d.ts +38 -0
- package/dist/react/FieldPresenceRegistry.d.ts.map +1 -0
- package/dist/react/FieldPresenceRegistry.js +14 -0
- package/dist/react/FieldPresenceRegistry.js.map +1 -0
- package/dist/react/FormStateContext.d.ts.map +1 -1
- package/dist/react/FormStateContext.js +87 -0
- package/dist/react/FormStateContext.js.map +1 -1
- package/dist/react/fields/FieldShell.d.ts.map +1 -1
- package/dist/react/fields/FieldShell.js +27 -3
- package/dist/react/fields/FieldShell.js.map +1 -1
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/schemaRenderer/form/FormRenderer.d.ts.map +1 -1
- package/dist/react/schemaRenderer/form/FormRenderer.js +12 -1
- package/dist/react/schemaRenderer/form/FormRenderer.js.map +1 -1
- package/package.json +1 -1
- package/src/react/FieldFocusReporterRegistry.ts +37 -0
- package/src/react/FieldPresenceRegistry.ts +46 -0
- package/src/react/FormStateContext.tsx +91 -0
- package/src/react/fields/FieldShell.tsx +39 -2
- package/src/react/index.ts +11 -0
- package/src/react/schemaRenderer/form/FormRenderer.tsx +13 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @pilotiq/pilotiq@0.8.
|
|
2
|
+
> @pilotiq/pilotiq@0.8.2 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.8.
|
|
6
|
+
> @pilotiq/pilotiq@0.8.2 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,115 @@
|
|
|
1
1
|
# @pilotiq/pilotiq
|
|
2
2
|
|
|
3
|
+
## 0.8.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 0304569: feat(pilotiq): per-field presence slot + focus reporter (Phase F4)
|
|
8
|
+
|
|
9
|
+
Two new module-singleton registry slots + `FieldShell` wiring — the
|
|
10
|
+
open-core scaffolding pro collab plugins (e.g. `@pilotiq-pro/collab`)
|
|
11
|
+
plug into to render "who's editing this field" indicators.
|
|
12
|
+
|
|
13
|
+
### Registries (exported from `@pilotiq/pilotiq/react`)
|
|
14
|
+
|
|
15
|
+
- **`registerFieldPresenceComponent(C)`** / **`getFieldPresenceComponent()`** —
|
|
16
|
+
module slot for a React component that renders next to each field's
|
|
17
|
+
label. Receives `{ fieldName, formId }`. Components own the awareness
|
|
18
|
+
lookup (typically via `useCollabRoom()` from `@pilotiq-pro/collab`'s
|
|
19
|
+
`useFieldPresence` hook); pilotiq core stays Yjs-free.
|
|
20
|
+
- **`registerFieldFocusReporter(reporter)`** / **`getFieldFocusReporter()`** —
|
|
21
|
+
module slot for `{ onFocus, onBlur }` callbacks. `FieldShell` invokes
|
|
22
|
+
them on capture-phase focus / blur events for every controlled input;
|
|
23
|
+
the collab plugin mirrors the local user's focus into a `focusField`
|
|
24
|
+
awareness key so peers can render their chip rails.
|
|
25
|
+
|
|
26
|
+
### `FieldShell` integration
|
|
27
|
+
|
|
28
|
+
- Mounts the registered chip component inside the `<label>` via
|
|
29
|
+
`{PresenceChip && <PresenceChip fieldName={name} formId={formId} />}`.
|
|
30
|
+
- Wires `onFocusCapture` / `onBlurCapture` on the outer wrapper `<div>`
|
|
31
|
+
so any inner input (including custom NodeViews — Select / Date /
|
|
32
|
+
Slider) emits focus events through one shared dispatch.
|
|
33
|
+
- Both slots gated on `meta.collab !== false` AND non-dotted-path
|
|
34
|
+
name (Q3 from the F-plan: `.collab(false)` opts the field out of
|
|
35
|
+
the collab layer entirely — no presence chip AND no awareness leak
|
|
36
|
+
about which field the local user is editing).
|
|
37
|
+
|
|
38
|
+
### Tested
|
|
39
|
+
|
|
40
|
+
- All 2938 pilotiq tests pass.
|
|
41
|
+
- Two-window smoke test (playground): focusing `title` in window A
|
|
42
|
+
paints a colored dot next to `title`'s label in window B; clicking
|
|
43
|
+
through `title` → `status` → `excerpt` moves the dot in lockstep;
|
|
44
|
+
blurring clears it. Pairs cleanly with the Phase F3 value sync —
|
|
45
|
+
one ydoc, one provider, two registry surfaces consumed.
|
|
46
|
+
|
|
47
|
+
## 0.8.1
|
|
48
|
+
|
|
49
|
+
### Patch Changes
|
|
50
|
+
|
|
51
|
+
- cc7a292: fix(pilotiq): wire `FormStateProvider` through `FormCollabBinding` (Phase F2)
|
|
52
|
+
|
|
53
|
+
The F1 registry slot from 0.8.0 was inert — nothing in pilotiq core
|
|
54
|
+
consumed `FormCollabBinding`. This patch makes the wiring actually
|
|
55
|
+
fire: when a `<RecordCollabRoom>` is mounted up-tree AND a plugin
|
|
56
|
+
(e.g. `@pilotiq-pro/collab@0.1`) registered a binding factory,
|
|
57
|
+
`FormStateProvider` now:
|
|
58
|
+
|
|
59
|
+
1. **Mounts on collab activity, not just `stateUrl`.** `FormRenderer`'s
|
|
60
|
+
`useControlled` gate widens from `!!stateUrl` to
|
|
61
|
+
`!!stateUrl || collabActive`. Forms with zero `.live()` fields but
|
|
62
|
+
a record-edit collab room get the controlled path so every
|
|
63
|
+
`useFieldState(name)` consumer (TextInput / Select / Toggle /
|
|
64
|
+
Date / Slider / …) becomes synchronizable.
|
|
65
|
+
|
|
66
|
+
2. **Constructs a binding on mount.** Calls the registered factory
|
|
67
|
+
with `{ room, formId, initial }`. The binding owns the CRDT
|
|
68
|
+
storage (typically a `Y.Map` on the room's shared ydoc) — pilotiq
|
|
69
|
+
stays Yjs-free.
|
|
70
|
+
|
|
71
|
+
3. **Lifts already-synced state.** On mount, `binding.get()`'s
|
|
72
|
+
snapshot is shallow-merged on top of the SSR-rendered defaults,
|
|
73
|
+
so subsequent joiners see the room's authoritative state.
|
|
74
|
+
|
|
75
|
+
4. **Subscribes to remote changes.** `binding.subscribe(snapshot)`
|
|
76
|
+
fires on every Yjs transaction (local + remote). Per-key
|
|
77
|
+
`Object.is` short-circuit collapses local-write echoes into
|
|
78
|
+
no-op renders; remote changes flow through `setValuesState` into
|
|
79
|
+
the controlled inputs.
|
|
80
|
+
|
|
81
|
+
5. **Proxies `setValue` through the binding.** Every controlled
|
|
82
|
+
write fires `binding.set(name, value)` after the local React
|
|
83
|
+
state update — UNLESS the field opted out via `Field.collab(false)`
|
|
84
|
+
OR the name is a dotted path (Repeater / Builder row leaves stay
|
|
85
|
+
local-only in v1; Phase F.5 tackles `Y.Array<Y.Map>` row identity).
|
|
86
|
+
|
|
87
|
+
6. **Forwards server-derived values through the binding.** When a
|
|
88
|
+
`.live()` POST response carries `values`, the derived fields
|
|
89
|
+
(e.g. auto-`slug` from `title`) also write through the binding so
|
|
90
|
+
every peer sees the derivation without each peer roundtripping the
|
|
91
|
+
server (Q2 from the F-phase plan).
|
|
92
|
+
|
|
93
|
+
### Plan + decisions
|
|
94
|
+
|
|
95
|
+
`pilotiq-pro/docs/plans/collab-form-fields.md` captures the full
|
|
96
|
+
phase breakdown; the three open Q's resolved before this patch:
|
|
97
|
+
|
|
98
|
+
- **Q1** — Idempotent client-side seed (`!ymap.has(k)` per key).
|
|
99
|
+
- **Q2** — Server response writes to Y.Map (above).
|
|
100
|
+
- **Q3** — `.collab(false)` suppresses both value sync AND presence
|
|
101
|
+
(presence chips land in F4).
|
|
102
|
+
|
|
103
|
+
### Tested
|
|
104
|
+
|
|
105
|
+
- All 2938 pilotiq tests pass.
|
|
106
|
+
- Two-window smoke test (playground): typing in `title` / changing
|
|
107
|
+
`status` in one window propagates to the other ~instantly.
|
|
108
|
+
Tiptap fields (`body` / `content`) continue to sync via their own
|
|
109
|
+
`Y.XmlFragment` selectors — non-Tiptap fields now share the same
|
|
110
|
+
`Y.Doc` via the `form-data` Y.Map managed by `@pilotiq-pro/collab`'s
|
|
111
|
+
`formCollabBinding` factory.
|
|
112
|
+
|
|
3
113
|
## 0.8.0
|
|
4
114
|
|
|
5
115
|
### Minor Changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module-level slot for focus / blur callbacks dispatched by pilotiq's
|
|
3
|
+
* `FieldShell`. A collab plugin (e.g. `@pilotiq-pro/collab`) registers
|
|
4
|
+
* a reporter at boot; on every controlled-field focus / blur event,
|
|
5
|
+
* `FieldShell` calls the matching method with `{ fieldName, formId }`
|
|
6
|
+
* so the plugin can mirror the local user's focus state into Yjs
|
|
7
|
+
* awareness.
|
|
8
|
+
*
|
|
9
|
+
* `FieldShell` skips dispatching for fields opted out via
|
|
10
|
+
* `Field.collab(false)` AND for dotted-path names (Repeater rows stay
|
|
11
|
+
* out of F4 presence in v1) — so the reporter never sees those events.
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldFocusEvent {
|
|
14
|
+
fieldName: string;
|
|
15
|
+
formId: string;
|
|
16
|
+
}
|
|
17
|
+
export interface FieldFocusReporter {
|
|
18
|
+
onFocus(event: FieldFocusEvent): void;
|
|
19
|
+
onBlur(event: FieldFocusEvent): void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Register the reporter. Called once at boot by the collab plugin.
|
|
23
|
+
* No-op when no plugin registers — `FieldShell` doesn't wire focus
|
|
24
|
+
* listeners.
|
|
25
|
+
*/
|
|
26
|
+
export declare function registerFieldFocusReporter(reporter: FieldFocusReporter): void;
|
|
27
|
+
/** Returns the registered reporter, or `null`. */
|
|
28
|
+
export declare function getFieldFocusReporter(): FieldFocusReporter | null;
|
|
29
|
+
//# sourceMappingURL=FieldFocusReporterRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldFocusReporterRegistry.d.ts","sourceRoot":"","sources":["../../src/react/FieldFocusReporterRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAK,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IACrC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAI,IAAI,CAAA;CACtC;AAID;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAE7E;AAED,kDAAkD;AAClD,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,IAAI,CAEjE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
let _reporter = null;
|
|
2
|
+
/**
|
|
3
|
+
* Register the reporter. Called once at boot by the collab plugin.
|
|
4
|
+
* No-op when no plugin registers — `FieldShell` doesn't wire focus
|
|
5
|
+
* listeners.
|
|
6
|
+
*/
|
|
7
|
+
export function registerFieldFocusReporter(reporter) {
|
|
8
|
+
_reporter = reporter;
|
|
9
|
+
}
|
|
10
|
+
/** Returns the registered reporter, or `null`. */
|
|
11
|
+
export function getFieldFocusReporter() {
|
|
12
|
+
return _reporter;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=FieldFocusReporterRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldFocusReporterRegistry.js","sourceRoot":"","sources":["../../src/react/FieldFocusReporterRegistry.ts"],"names":[],"mappings":"AAsBA,IAAI,SAAS,GAA8B,IAAI,CAAA;AAE/C;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAA4B;IACrE,SAAS,GAAG,QAAQ,CAAA;AACtB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,qBAAqB;IACnC,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Props the per-field presence chip receives from `FieldShell` when a
|
|
4
|
+
* `@pilotiq-pro/collab`-style plugin has registered a component.
|
|
5
|
+
*
|
|
6
|
+
* The chip subscribes to the active collab room's awareness state and
|
|
7
|
+
* renders colored avatars / dots for every remote user currently
|
|
8
|
+
* focused on this field. Pilotiq core renders it alongside the field's
|
|
9
|
+
* label; the component owns the awareness lookup so pilotiq stays
|
|
10
|
+
* Yjs-free.
|
|
11
|
+
*
|
|
12
|
+
* Mounted only when:
|
|
13
|
+
*
|
|
14
|
+
* - A collab plugin has registered a component via
|
|
15
|
+
* `registerFieldPresenceComponent(...)`,
|
|
16
|
+
* - The field hasn't opted out via `Field.collab(false)`, and
|
|
17
|
+
* - The field has a stable `name` (dotted-path Repeater rows skip
|
|
18
|
+
* presence in v1 — Phase F.5 work).
|
|
19
|
+
*/
|
|
20
|
+
export interface FieldPresenceProps {
|
|
21
|
+
/** Top-level field name. Dotted-path names are skipped by `FieldShell`. */
|
|
22
|
+
fieldName: string;
|
|
23
|
+
/**
|
|
24
|
+
* Stable form identifier — same value the form's `FormStateProvider`
|
|
25
|
+
* uses. Lets the chip scope presence by form when multiple forms
|
|
26
|
+
* render on the same record (action modals, etc.).
|
|
27
|
+
*/
|
|
28
|
+
formId: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register a component that renders inside `FieldShell`'s label area
|
|
32
|
+
* for every controlled field. Called once at boot by a collab plugin.
|
|
33
|
+
* No-op when no plugin registers — `FieldShell` skips the slot.
|
|
34
|
+
*/
|
|
35
|
+
export declare function registerFieldPresenceComponent(C: ComponentType<FieldPresenceProps>): void;
|
|
36
|
+
/** Returns the registered presence component, or `null`. */
|
|
37
|
+
export declare function getFieldPresenceComponent(): ComponentType<FieldPresenceProps> | null;
|
|
38
|
+
//# sourceMappingURL=FieldPresenceRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldPresenceRegistry.d.ts","sourceRoot":"","sources":["../../src/react/FieldPresenceRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,MAAM,EAAK,MAAM,CAAA;CAClB;AAID;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAEzF;AAED,4DAA4D;AAC5D,wBAAgB,yBAAyB,IAAI,aAAa,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAEpF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
let _component = null;
|
|
2
|
+
/**
|
|
3
|
+
* Register a component that renders inside `FieldShell`'s label area
|
|
4
|
+
* for every controlled field. Called once at boot by a collab plugin.
|
|
5
|
+
* No-op when no plugin registers — `FieldShell` skips the slot.
|
|
6
|
+
*/
|
|
7
|
+
export function registerFieldPresenceComponent(C) {
|
|
8
|
+
_component = C;
|
|
9
|
+
}
|
|
10
|
+
/** Returns the registered presence component, or `null`. */
|
|
11
|
+
export function getFieldPresenceComponent() {
|
|
12
|
+
return _component;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=FieldPresenceRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldPresenceRegistry.js","sourceRoot":"","sources":["../../src/react/FieldPresenceRegistry.ts"],"names":[],"mappings":"AA+BA,IAAI,UAAU,GAA6C,IAAI,CAAA;AAE/D;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,CAAoC;IACjF,UAAU,GAAG,CAAC,CAAA;AAChB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,yBAAyB;IACvC,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormStateContext.d.ts","sourceRoot":"","sources":["../../src/react/FormStateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"FormStateContext.d.ts","sourceRoot":"","sources":["../../src/react/FormStateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAavD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAA;AAE5C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,QAAQ,EAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACrD;;;;;;qEAMiE;IACjE,WAAW,EAAI,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9D,MAAM,EAAS,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACvC;8EAC0E;IAC1E,WAAW,EAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;IACzD,QAAQ,EAAO,WAAW,CAAA;IAC1B,QAAQ,EAAO,OAAO,CAAA;IACtB,WAAW,EAAI,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,CAAA;CAC7C;AAID;;4DAE4D;AAC5D,wBAAgB,YAAY,IAAI,YAAY,GAAG,IAAI,CAElD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,uBAA4B,CAAA;AAetD,MAAM,WAAW,mBAAmB;IAClC;;;;;;oDAMgD;IAChD,UAAU,EAAG,OAAO,CAAA;IACpB,KAAK,EAAQ,OAAO,CAAA;IACpB,QAAQ,EAAK,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IACjC;;;;mBAIe;IACf,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C,qEAAqE;IACrE,OAAO,EAAM,OAAO,CAAA;IACpB,MAAM,EAAO,MAAM,EAAE,CAAA;CACtB;AAED;;gEAEgE;AAChE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAuB/D;AAWD,MAAM,WAAW,sBAAsB;IACrC;oDACgD;IAChD,WAAW,EAAI,WAAW,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACvC,QAAQ,EAAO,KAAK,CAAC,SAAS,CAAA;IAC9B,+EAA+E;IAC/E,SAAS,CAAC,EAAK,OAAO,KAAK,CAAA;IAC3B;gFAC4E;IAC5E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;IAC1C;;;;wDAIoD;IACpD,OAAO,CAAC,EAAO,KAAK,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;CACvD;AAED;;;uEAGuE;AACvE,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,OAAO,GACR,EAAE,sBAAsB,GAAG,KAAK,CAAC,YAAY,CAoU7C"}
|
|
@@ -3,6 +3,8 @@ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, use
|
|
|
3
3
|
import { collectFieldDefaults, findFieldMeta, parseFormDataToNested, readNestedValue, writeNestedValue, } from './formStateHelpers.js';
|
|
4
4
|
import { runJsHandler } from './fieldJsHandler.js';
|
|
5
5
|
import { useToast } from './Toaster.js';
|
|
6
|
+
import { useCollabRoom } from './CollabRoomContext.js';
|
|
7
|
+
import { getFormCollabBinding } from './FormCollabBindingRegistry.js';
|
|
6
8
|
const FormStateContext = createContext(null);
|
|
7
9
|
/** Hook for direct access to the form context. Returns `null` outside a
|
|
8
10
|
* `FormStateProvider` (e.g. an action modal, or a form without any live
|
|
@@ -18,6 +20,18 @@ export function useFormState() {
|
|
|
18
20
|
* `useContext(FormIdContext)` and fall back to a sentinel when missing.
|
|
19
21
|
*/
|
|
20
22
|
export const FormIdContext = createContext('');
|
|
23
|
+
/**
|
|
24
|
+
* Phase F2 — returns `true` iff the named field has explicitly opted out
|
|
25
|
+
* of realtime collab via `Field.collab(false)`. Sparse meta — absent =
|
|
26
|
+
* inherit the panel default (collab on). Walks the form meta tree the
|
|
27
|
+
* same way `findFieldMeta` does; cheap because it only runs on the
|
|
28
|
+
* per-write path (already a hot path, but every check is one map
|
|
29
|
+
* lookup + one boolean compare).
|
|
30
|
+
*/
|
|
31
|
+
function fieldOptsOutOfCollab(formMeta, name) {
|
|
32
|
+
const meta = findFieldMeta(formMeta, name);
|
|
33
|
+
return meta?.collab === false;
|
|
34
|
+
}
|
|
21
35
|
/** Per-field accessor. Inside a `FormStateProvider` it returns the controlled
|
|
22
36
|
* value + setter + live trigger; outside, it returns sentinels and callers
|
|
23
37
|
* should fall back to `defaultValue` (uncontrolled inputs). */
|
|
@@ -79,6 +93,57 @@ export function FormStateProvider({ initialMeta, initialErrors, children, fetchI
|
|
|
79
93
|
const formMetaRef = useRef(formMeta);
|
|
80
94
|
useEffect(() => { formMetaRef.current = formMeta; }, [formMeta]);
|
|
81
95
|
const stateUrl = formMeta['stateUrl'];
|
|
96
|
+
const formId = formMeta['formId'] ?? '';
|
|
97
|
+
// Phase F2 — collab binding. When `<RecordCollabRoom>` is mounted up-tree
|
|
98
|
+
// AND `@pilotiq-pro/collab` registered a `FormCollabBinding` factory, we
|
|
99
|
+
// construct a binding for this form, lift any already-synced state on
|
|
100
|
+
// top of the SSR-rendered defaults, and proxy every local write through
|
|
101
|
+
// it. Remote writes flow back via `subscribe`. Outside a room (or with
|
|
102
|
+
// no factory registered), `bindingRef` stays null and the plain
|
|
103
|
+
// local-state path runs unchanged.
|
|
104
|
+
const collabRoom = useCollabRoom();
|
|
105
|
+
const bindingFactory = getFormCollabBinding();
|
|
106
|
+
const bindingRef = useRef(null);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (!collabRoom || !bindingFactory || !formId)
|
|
109
|
+
return;
|
|
110
|
+
const binding = bindingFactory({ room: collabRoom, formId, initial: valuesRef.current });
|
|
111
|
+
bindingRef.current = binding;
|
|
112
|
+
// Lift any state already in the room (subsequent joiners — first
|
|
113
|
+
// mover sees an empty snapshot here and the local SSR defaults
|
|
114
|
+
// stay authoritative). Shallow merge so fields the binding doesn't
|
|
115
|
+
// know about (defaults the seed skipped, dotted-path Repeater rows
|
|
116
|
+
// we don't sync in F2) survive.
|
|
117
|
+
const synced = binding.get();
|
|
118
|
+
if (Object.keys(synced).length > 0) {
|
|
119
|
+
setValuesState((prev) => ({ ...prev, ...synced }));
|
|
120
|
+
}
|
|
121
|
+
// Subscribe to remote changes. Local writes ALSO trigger this
|
|
122
|
+
// (Yjs observers fire on local transactions too) — the per-key
|
|
123
|
+
// Object.is short-circuit below collapses them into no-op renders.
|
|
124
|
+
const unsubscribe = binding.subscribe((snapshot) => {
|
|
125
|
+
setValuesState((prev) => {
|
|
126
|
+
let changed = false;
|
|
127
|
+
const next = { ...prev };
|
|
128
|
+
for (const [k, v] of Object.entries(snapshot)) {
|
|
129
|
+
if (!Object.is(prev[k], v)) {
|
|
130
|
+
next[k] = v;
|
|
131
|
+
changed = true;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return changed ? next : prev;
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
return () => {
|
|
138
|
+
unsubscribe();
|
|
139
|
+
binding.destroy();
|
|
140
|
+
bindingRef.current = null;
|
|
141
|
+
};
|
|
142
|
+
// `valuesRef.current` is intentionally read once at mount — initial
|
|
143
|
+
// values seed the binding; subsequent edits flow through `setValue`
|
|
144
|
+
// and remote changes flow through `subscribe`.
|
|
145
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
146
|
+
}, [collabRoom, bindingFactory, formId]);
|
|
82
147
|
/**
|
|
83
148
|
* Tier-2 follow-up to Plan #5 — fire `Field.afterStateUpdatedJs(body)`
|
|
84
149
|
* if the named field declares one. Independent of `live()`: runs
|
|
@@ -134,6 +199,14 @@ export function FormStateProvider({ initialMeta, initialErrors, children, fetchI
|
|
|
134
199
|
return prev;
|
|
135
200
|
return { ...prev, [name]: value };
|
|
136
201
|
});
|
|
202
|
+
// Phase F2 — proxy the write through the collab binding when active
|
|
203
|
+
// AND the field hasn't opted out via `.collab(false)`. Dotted-path
|
|
204
|
+
// names (Repeater / Builder row leaves) stay local-only in v1; their
|
|
205
|
+
// syncing belongs to Phase F.5 (`Y.Array<Y.Map>` row identity).
|
|
206
|
+
const binding = bindingRef.current;
|
|
207
|
+
if (binding && !name.includes('.') && !fieldOptsOutOfCollab(formMetaRef.current, name)) {
|
|
208
|
+
binding.set(name, value);
|
|
209
|
+
}
|
|
137
210
|
// Fire the client-side JS hook synchronously after the state write.
|
|
138
211
|
// Dotted-name fields don't go through here (their setter is a no-op
|
|
139
212
|
// in `useFieldState`); they fire JS via `triggerLive` instead so we
|
|
@@ -204,6 +277,20 @@ export function FormStateProvider({ initialMeta, initialErrors, children, fetchI
|
|
|
204
277
|
const serverValues = data.form.values;
|
|
205
278
|
if (serverValues) {
|
|
206
279
|
setValuesState((prev) => ({ ...prev, ...serverValues }));
|
|
280
|
+
// Phase F2 (Q2) — derived fields propagate to peers via the
|
|
281
|
+
// collab binding so every client sees the auto-`slug` / etc.
|
|
282
|
+
// without each peer roundtripping the server. Skip dotted-path
|
|
283
|
+
// names + fields that opted out.
|
|
284
|
+
const binding = bindingRef.current;
|
|
285
|
+
if (binding) {
|
|
286
|
+
for (const [k, v] of Object.entries(serverValues)) {
|
|
287
|
+
if (k.includes('.'))
|
|
288
|
+
continue;
|
|
289
|
+
if (fieldOptsOutOfCollab(data.form, k))
|
|
290
|
+
continue;
|
|
291
|
+
binding.set(k, v);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
207
294
|
}
|
|
208
295
|
setErrors({});
|
|
209
296
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormStateContext.js","sourceRoot":"","sources":["../../src/react/FormStateContext.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormStateContext.js","sourceRoot":"","sources":["../../src/react/FormStateContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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;AA8B1D;;;;;;;;;;;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,CAiLjI"}
|
|
@@ -5,6 +5,8 @@ import { usePendingSuggestions, usePendingSuggestionsForField } from '../Pending
|
|
|
5
5
|
import { getPendingSuggestionOverlay } from '../PendingSuggestionOverlayRegistry.js';
|
|
6
6
|
import { registerPendingSuggestionApplier } from '../PendingSuggestionApplierRegistry.js';
|
|
7
7
|
import { FormIdContext, useFieldState } from '../FormStateContext.js';
|
|
8
|
+
import { getFieldPresenceComponent } from '../FieldPresenceRegistry.js';
|
|
9
|
+
import { getFieldFocusReporter } from '../FieldFocusReporterRegistry.js';
|
|
8
10
|
/**
|
|
9
11
|
* Field types whose visible state is driven by React (not by a matching
|
|
10
12
|
* `[name]` DOM input). Each registers its own applier inside the field
|
|
@@ -102,7 +104,20 @@ export function FieldShell({ el, name, label, required, children, before, after,
|
|
|
102
104
|
const labelClass = hiddenLabel
|
|
103
105
|
? 'sr-only'
|
|
104
106
|
: 'text-sm font-medium leading-none';
|
|
105
|
-
|
|
107
|
+
// Phase F4 — presence chip + focus reporter slots. The chip mounts
|
|
108
|
+
// alongside the label so remote-focus indicators don't shift the
|
|
109
|
+
// input geometry; the focus reporter sits on the outer wrapper using
|
|
110
|
+
// capture-phase listeners so any inner-input focus event flows
|
|
111
|
+
// through. Both slots are gated on `meta.collab !== false` (Q3 from
|
|
112
|
+
// the F-plan — opted-out fields are fully invisible to the collab
|
|
113
|
+
// layer) AND on the field having a stable top-level name (dotted-path
|
|
114
|
+
// Repeater rows skip presence in v1 — Phase F.5).
|
|
115
|
+
const collabOptedOut = el['collab'] === false;
|
|
116
|
+
const dottedName = name.includes('.');
|
|
117
|
+
const presenceSlotEligible = !collabOptedOut && !dottedName;
|
|
118
|
+
const PresenceChip = presenceSlotEligible ? getFieldPresenceComponent() : null;
|
|
119
|
+
const focusReporter = presenceSlotEligible ? getFieldFocusReporter() : null;
|
|
120
|
+
const labelEl = label !== '' ? (_jsxs("label", { htmlFor: name, className: labelClass, children: [label, required && _jsx("span", { className: "text-destructive ml-0.5", children: "*" }), labelSlot, PresenceChip && _jsx(PresenceChip, { fieldName: name, formId: formId ?? '' })] })) : null;
|
|
106
121
|
const hasDecoration = !!(prefix || suffix || before || after);
|
|
107
122
|
const input = hasDecoration
|
|
108
123
|
? (_jsxs("div", { className: "flex items-center gap-2", children: [before, prefix && _jsx(Decoration, { content: prefix, side: "prefix" }), _jsx("div", { className: "flex-1 min-w-0", children: children }), suffix && _jsx(Decoration, { content: suffix, side: "suffix" }), after] }))
|
|
@@ -116,10 +131,19 @@ export function FieldShell({ el, name, label, required, children, before, after,
|
|
|
116
131
|
// `defaultValue` and silently undoing the approved write right after
|
|
117
132
|
// the overlay closes.
|
|
118
133
|
const inputBlock = (_jsxs(_Fragment, { children: [_jsx("div", { className: overlayNode !== null ? 'hidden' : 'contents', "aria-hidden": overlayNode !== null, children: input }), overlayNode] }));
|
|
134
|
+
// Capture-phase focus / blur dispatch — runs even when the inner
|
|
135
|
+
// input is wrapped in custom NodeViews (Select / Date / Slider). One
|
|
136
|
+
// wrapper-level handler covers every controlled input in the tree.
|
|
137
|
+
const onFocusCapture = focusReporter
|
|
138
|
+
? () => focusReporter.onFocus({ fieldName: name, formId: formId ?? '' })
|
|
139
|
+
: undefined;
|
|
140
|
+
const onBlurCapture = focusReporter
|
|
141
|
+
? () => focusReporter.onBlur({ fieldName: name, formId: formId ?? '' })
|
|
142
|
+
: undefined;
|
|
119
143
|
if (inline) {
|
|
120
|
-
return (_jsxs("div", { className: "flex items-baseline gap-3", ...wrapperAttrs, children: [labelEl && _jsx("div", { className: "min-w-32 pt-2", children: labelEl }), _jsxs("div", { className: "min-w-0 flex-1", children: [inputBlock, helperText && (_jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: helperText }))] })] }));
|
|
144
|
+
return (_jsxs("div", { className: "flex items-baseline gap-3", ...wrapperAttrs, ...(onFocusCapture ? { onFocusCapture } : {}), ...(onBlurCapture ? { onBlurCapture } : {}), children: [labelEl && _jsx("div", { className: "min-w-32 pt-2", children: labelEl }), _jsxs("div", { className: "min-w-0 flex-1", children: [inputBlock, helperText && (_jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: helperText }))] })] }));
|
|
121
145
|
}
|
|
122
|
-
return (_jsxs("div", { className: "flex flex-col gap-1.5", ...wrapperAttrs, children: [labelEl, inputBlock, helperText && (_jsx("p", { className: "text-xs text-muted-foreground", children: helperText }))] }));
|
|
146
|
+
return (_jsxs("div", { className: "flex flex-col gap-1.5", ...wrapperAttrs, ...(onFocusCapture ? { onFocusCapture } : {}), ...(onBlurCapture ? { onBlurCapture } : {}), children: [labelEl, inputBlock, helperText && (_jsx("p", { className: "text-xs text-muted-foreground", children: helperText }))] }));
|
|
123
147
|
}
|
|
124
148
|
/**
|
|
125
149
|
* Best-effort DOM apply for forms without a `<FormStateProvider>` (i.e.
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"FieldShell.js","sourceRoot":"","sources":["../../../src/react/fields/FieldShell.tsx"],"names":[],"mappings":"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"}
|
package/dist/react/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export { registerPendingSuggestionApplier, getPendingSuggestionApplier, type Pen
|
|
|
9
9
|
export { CollabRoomContext, useCollabRoom, type CollabRoom, } from './CollabRoomContext.js';
|
|
10
10
|
export { registerCollabExtensions, getCollabExtensions, type CollabExtensionFactory, type CollabExtensionFactoryArgs, } from './CollabExtensionFactoryRegistry.js';
|
|
11
11
|
export { registerFormCollabBinding, getFormCollabBinding, type FormCollabBinding, type FormCollabBindingFactory, type FormCollabBindingFactoryArgs, } from './FormCollabBindingRegistry.js';
|
|
12
|
+
export { registerFieldPresenceComponent, getFieldPresenceComponent, type FieldPresenceProps, } from './FieldPresenceRegistry.js';
|
|
13
|
+
export { registerFieldFocusReporter, getFieldFocusReporter, type FieldFocusReporter, type FieldFocusEvent, } from './FieldFocusReporterRegistry.js';
|
|
12
14
|
export { registerRecordWrapper, getRecordWrapper, type RecordWrapperProps, } from './RecordWrapperRegistry.js';
|
|
13
15
|
export { RecordWrapperGate, type RecordWrapperGateProps, } from './RecordWrapperGate.js';
|
|
14
16
|
export { parseRecordEditUrl, type RecordEditIdentity } from './parseRecordEditUrl.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
package/dist/react/index.js
CHANGED
|
@@ -9,6 +9,8 @@ export { registerPendingSuggestionApplier, getPendingSuggestionApplier, } from '
|
|
|
9
9
|
export { CollabRoomContext, useCollabRoom, } from './CollabRoomContext.js';
|
|
10
10
|
export { registerCollabExtensions, getCollabExtensions, } from './CollabExtensionFactoryRegistry.js';
|
|
11
11
|
export { registerFormCollabBinding, getFormCollabBinding, } from './FormCollabBindingRegistry.js';
|
|
12
|
+
export { registerFieldPresenceComponent, getFieldPresenceComponent, } from './FieldPresenceRegistry.js';
|
|
13
|
+
export { registerFieldFocusReporter, getFieldFocusReporter, } from './FieldFocusReporterRegistry.js';
|
|
12
14
|
export { registerRecordWrapper, getRecordWrapper, } from './RecordWrapperRegistry.js';
|
|
13
15
|
export { RecordWrapperGate, } from './RecordWrapperGate.js';
|
|
14
16
|
export { parseRecordEditUrl } from './parseRecordEditUrl.js';
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAC5D,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,UAAU,GAEX,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,cAAc,EAEd,UAAU,GAEX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAA2B,MAAM,eAAe,CAAA;AAChG,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAA4B,MAAM,6BAA6B,CAAA;AACjH,OAAO,EACL,gCAAgC,EAChC,2BAA2B,GAE5B,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,6BAA6B,GAI9B,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,gCAAgC,EAChC,2BAA2B,GAE5B,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EACL,iBAAiB,EACjB,aAAa,GAEd,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,wBAAwB,EACxB,mBAAmB,GAGpB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GAIrB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GAEjB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,iBAAiB,GAElB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,kBAAkB,EAA2B,MAAM,yBAAyB,CAAA;AACrF,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,YAAY,GAIb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAA;AAE9E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,GAId,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,uBAAuB,GAGxB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACL,YAAY,GAEb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAY,oBAAoB,CAAA;AACxD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAGhB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAW,gBAAgB,CAAA;AAE/C,OAAO,EACL,eAAe,GAKhB,MAAM,sBAAsB,CAAA;AAG7B,iHAAiH;AACjH,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,mBAAmB;AACnB,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAyC,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/form/FormRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/form/FormRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAW7D,KAAK,aAAa,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAA;AAExE;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,EAC3B,EAAE,EACF,aAAa,GACd,EAAE;IACD,EAAE,EAAE,WAAW,CAAA;IACf,aAAa,EAAE,aAAa,CAAA;CAC7B,2CAiJA;AAyBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAU,WAAW,EAC1B,KAAK,EAAU,MAAM,EACrB,MAAM,EAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,MAAM,EAAS,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACvC,aAAa,EAAE,aAAa,GAC3B,KAAK,CAAC,SAAS,CAejB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useRef, useState } from 'react';
|
|
3
3
|
import { FormIdContext, FormStateProvider, useFormState } from '../../FormStateContext.js';
|
|
4
|
+
import { useCollabRoom } from '../../CollabRoomContext.js';
|
|
5
|
+
import { getFormCollabBinding } from '../../FormCollabBindingRegistry.js';
|
|
4
6
|
import { useNavigate } from '../../navigate.js';
|
|
5
7
|
import { useToast } from '../../Toaster.js';
|
|
6
8
|
import { renderField } from './renderField.js';
|
|
@@ -23,6 +25,15 @@ export function FormRenderer({ el, renderElement, }) {
|
|
|
23
25
|
const stateUrl = el['stateUrl'] ? String(el['stateUrl']) : undefined;
|
|
24
26
|
const serverValues = el['values'] ?? {};
|
|
25
27
|
const serverErrors = el['errors'] ?? {};
|
|
28
|
+
// Phase F2 — the controlled-form path also activates when we're
|
|
29
|
+
// inside a `<RecordCollabRoom>` AND a plugin (e.g.
|
|
30
|
+
// `@pilotiq-pro/collab`) registered a `FormCollabBinding` factory.
|
|
31
|
+
// Without this, forms with no `live()` fields stayed uncontrolled
|
|
32
|
+
// and the collab binding never wired up.
|
|
33
|
+
const collabRoom = useCollabRoom();
|
|
34
|
+
const collabFactory = getFormCollabBinding();
|
|
35
|
+
const collabActive = !!(collabRoom && collabFactory && formId);
|
|
36
|
+
const useControlled = !!stateUrl || collabActive;
|
|
26
37
|
// Methods other than GET/POST are spoofed via _method, mirroring Laravel.
|
|
27
38
|
const httpMethod = method === 'get' ? 'get' : 'post';
|
|
28
39
|
const spoofedMethod = method !== 'get' && method !== 'post' ? method : undefined;
|
|
@@ -108,7 +119,7 @@ export function FormRenderer({ el, renderElement, }) {
|
|
|
108
119
|
setSubmitting(false);
|
|
109
120
|
}
|
|
110
121
|
};
|
|
111
|
-
return (_jsxs("form", { ref: formRef, id: formId || undefined, "data-form-id": formId || undefined, method: httpMethod, action: action, onSubmit: onSubmit, className: "flex flex-col gap-6", children: [formId && _jsx("input", { type: "hidden", name: "_formId", value: formId }), spoofedMethod && _jsx("input", { type: "hidden", name: "_method", value: spoofedMethod }), (formErrors.length > 0 || hasFieldErrors) && (_jsx("div", { className: "rounded-lg border border-destructive/40 bg-destructive/5 text-destructive p-3 text-sm", children: formErrors.length > 0 ? (_jsx("ul", { className: "list-disc pl-4", children: formErrors.map((msg, i) => _jsx("li", { children: msg }, i)) })) : ('Please correct the errors below.') })), _jsx(FormIdContext.Provider, { value: formId, children:
|
|
122
|
+
return (_jsxs("form", { ref: formRef, id: formId || undefined, "data-form-id": formId || undefined, method: httpMethod, action: action, onSubmit: onSubmit, className: "flex flex-col gap-6", children: [formId && _jsx("input", { type: "hidden", name: "_formId", value: formId }), spoofedMethod && _jsx("input", { type: "hidden", name: "_method", value: spoofedMethod }), (formErrors.length > 0 || hasFieldErrors) && (_jsx("div", { className: "rounded-lg border border-destructive/40 bg-destructive/5 text-destructive p-3 text-sm", children: formErrors.length > 0 ? (_jsx("ul", { className: "list-disc pl-4", children: formErrors.map((msg, i) => _jsx("li", { children: msg }, i)) })) : ('Please correct the errors below.') })), _jsx(FormIdContext.Provider, { value: formId, children: useControlled ? (_jsx(FormStateProvider, { initialMeta: el, initialErrors: errors, formRef: formRef, children: _jsx(FormBody, { fallbackChildren: el.children ?? [], fallbackValues: serverValues, fallbackErrors: errors, renderElement: renderElement }) })) : ((el.children ?? []).map((child, i) => renderFormChild(child, i, serverValues, errors, renderElement))) })] }));
|
|
112
123
|
}
|
|
113
124
|
/**
|
|
114
125
|
* Renders the controlled-form's children, sourcing them from the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormRenderer.js","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/form/FormRenderer.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"FormRenderer.js","sourceRoot":"","sources":["../../../../src/react/schemaRenderer/form/FormRenderer.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module-level slot for focus / blur callbacks dispatched by pilotiq's
|
|
3
|
+
* `FieldShell`. A collab plugin (e.g. `@pilotiq-pro/collab`) registers
|
|
4
|
+
* a reporter at boot; on every controlled-field focus / blur event,
|
|
5
|
+
* `FieldShell` calls the matching method with `{ fieldName, formId }`
|
|
6
|
+
* so the plugin can mirror the local user's focus state into Yjs
|
|
7
|
+
* awareness.
|
|
8
|
+
*
|
|
9
|
+
* `FieldShell` skips dispatching for fields opted out via
|
|
10
|
+
* `Field.collab(false)` AND for dotted-path names (Repeater rows stay
|
|
11
|
+
* out of F4 presence in v1) — so the reporter never sees those events.
|
|
12
|
+
*/
|
|
13
|
+
export interface FieldFocusEvent {
|
|
14
|
+
fieldName: string
|
|
15
|
+
formId: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface FieldFocusReporter {
|
|
19
|
+
onFocus(event: FieldFocusEvent): void
|
|
20
|
+
onBlur(event: FieldFocusEvent): void
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let _reporter: FieldFocusReporter | null = null
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Register the reporter. Called once at boot by the collab plugin.
|
|
27
|
+
* No-op when no plugin registers — `FieldShell` doesn't wire focus
|
|
28
|
+
* listeners.
|
|
29
|
+
*/
|
|
30
|
+
export function registerFieldFocusReporter(reporter: FieldFocusReporter): void {
|
|
31
|
+
_reporter = reporter
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Returns the registered reporter, or `null`. */
|
|
35
|
+
export function getFieldFocusReporter(): FieldFocusReporter | null {
|
|
36
|
+
return _reporter
|
|
37
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ComponentType } from 'react'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Props the per-field presence chip receives from `FieldShell` when a
|
|
5
|
+
* `@pilotiq-pro/collab`-style plugin has registered a component.
|
|
6
|
+
*
|
|
7
|
+
* The chip subscribes to the active collab room's awareness state and
|
|
8
|
+
* renders colored avatars / dots for every remote user currently
|
|
9
|
+
* focused on this field. Pilotiq core renders it alongside the field's
|
|
10
|
+
* label; the component owns the awareness lookup so pilotiq stays
|
|
11
|
+
* Yjs-free.
|
|
12
|
+
*
|
|
13
|
+
* Mounted only when:
|
|
14
|
+
*
|
|
15
|
+
* - A collab plugin has registered a component via
|
|
16
|
+
* `registerFieldPresenceComponent(...)`,
|
|
17
|
+
* - The field hasn't opted out via `Field.collab(false)`, and
|
|
18
|
+
* - The field has a stable `name` (dotted-path Repeater rows skip
|
|
19
|
+
* presence in v1 — Phase F.5 work).
|
|
20
|
+
*/
|
|
21
|
+
export interface FieldPresenceProps {
|
|
22
|
+
/** Top-level field name. Dotted-path names are skipped by `FieldShell`. */
|
|
23
|
+
fieldName: string
|
|
24
|
+
/**
|
|
25
|
+
* Stable form identifier — same value the form's `FormStateProvider`
|
|
26
|
+
* uses. Lets the chip scope presence by form when multiple forms
|
|
27
|
+
* render on the same record (action modals, etc.).
|
|
28
|
+
*/
|
|
29
|
+
formId: string
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let _component: ComponentType<FieldPresenceProps> | null = null
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Register a component that renders inside `FieldShell`'s label area
|
|
36
|
+
* for every controlled field. Called once at boot by a collab plugin.
|
|
37
|
+
* No-op when no plugin registers — `FieldShell` skips the slot.
|
|
38
|
+
*/
|
|
39
|
+
export function registerFieldPresenceComponent(C: ComponentType<FieldPresenceProps>): void {
|
|
40
|
+
_component = C
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Returns the registered presence component, or `null`. */
|
|
44
|
+
export function getFieldPresenceComponent(): ComponentType<FieldPresenceProps> | null {
|
|
45
|
+
return _component
|
|
46
|
+
}
|
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
} from './formStateHelpers.js'
|
|
18
18
|
import { runJsHandler } from './fieldJsHandler.js'
|
|
19
19
|
import { useToast } from './Toaster.js'
|
|
20
|
+
import { useCollabRoom } from './CollabRoomContext.js'
|
|
21
|
+
import { getFormCollabBinding, type FormCollabBinding } from './FormCollabBindingRegistry.js'
|
|
20
22
|
|
|
21
23
|
export type FieldStatus = 'idle' | 'pending'
|
|
22
24
|
|
|
@@ -58,6 +60,19 @@ export function useFormState(): FormStateApi | null {
|
|
|
58
60
|
*/
|
|
59
61
|
export const FormIdContext = createContext<string>('')
|
|
60
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Phase F2 — returns `true` iff the named field has explicitly opted out
|
|
65
|
+
* of realtime collab via `Field.collab(false)`. Sparse meta — absent =
|
|
66
|
+
* inherit the panel default (collab on). Walks the form meta tree the
|
|
67
|
+
* same way `findFieldMeta` does; cheap because it only runs on the
|
|
68
|
+
* per-write path (already a hot path, but every check is one map
|
|
69
|
+
* lookup + one boolean compare).
|
|
70
|
+
*/
|
|
71
|
+
function fieldOptsOutOfCollab(formMeta: ElementMeta, name: string): boolean {
|
|
72
|
+
const meta = findFieldMeta(formMeta, name) as { collab?: boolean } | undefined
|
|
73
|
+
return meta?.collab === false
|
|
74
|
+
}
|
|
75
|
+
|
|
61
76
|
export interface UseFieldStateResult {
|
|
62
77
|
/** True when the field is inside a controlled form (live fields enabled).
|
|
63
78
|
* Renderers should fall back to their `defaultValue` path when false.
|
|
@@ -184,6 +199,62 @@ export function FormStateProvider({
|
|
|
184
199
|
useEffect(() => { formMetaRef.current = formMeta }, [formMeta])
|
|
185
200
|
|
|
186
201
|
const stateUrl = (formMeta as { stateUrl?: string })['stateUrl']
|
|
202
|
+
const formId = (formMeta as { formId?: string })['formId'] ?? ''
|
|
203
|
+
|
|
204
|
+
// Phase F2 — collab binding. When `<RecordCollabRoom>` is mounted up-tree
|
|
205
|
+
// AND `@pilotiq-pro/collab` registered a `FormCollabBinding` factory, we
|
|
206
|
+
// construct a binding for this form, lift any already-synced state on
|
|
207
|
+
// top of the SSR-rendered defaults, and proxy every local write through
|
|
208
|
+
// it. Remote writes flow back via `subscribe`. Outside a room (or with
|
|
209
|
+
// no factory registered), `bindingRef` stays null and the plain
|
|
210
|
+
// local-state path runs unchanged.
|
|
211
|
+
const collabRoom = useCollabRoom()
|
|
212
|
+
const bindingFactory = getFormCollabBinding()
|
|
213
|
+
const bindingRef = useRef<FormCollabBinding | null>(null)
|
|
214
|
+
|
|
215
|
+
useEffect(() => {
|
|
216
|
+
if (!collabRoom || !bindingFactory || !formId) return
|
|
217
|
+
|
|
218
|
+
const binding = bindingFactory({ room: collabRoom, formId, initial: valuesRef.current })
|
|
219
|
+
bindingRef.current = binding
|
|
220
|
+
|
|
221
|
+
// Lift any state already in the room (subsequent joiners — first
|
|
222
|
+
// mover sees an empty snapshot here and the local SSR defaults
|
|
223
|
+
// stay authoritative). Shallow merge so fields the binding doesn't
|
|
224
|
+
// know about (defaults the seed skipped, dotted-path Repeater rows
|
|
225
|
+
// we don't sync in F2) survive.
|
|
226
|
+
const synced = binding.get()
|
|
227
|
+
if (Object.keys(synced).length > 0) {
|
|
228
|
+
setValuesState((prev) => ({ ...prev, ...synced }))
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Subscribe to remote changes. Local writes ALSO trigger this
|
|
232
|
+
// (Yjs observers fire on local transactions too) — the per-key
|
|
233
|
+
// Object.is short-circuit below collapses them into no-op renders.
|
|
234
|
+
const unsubscribe = binding.subscribe((snapshot) => {
|
|
235
|
+
setValuesState((prev) => {
|
|
236
|
+
let changed = false
|
|
237
|
+
const next: Record<string, unknown> = { ...prev }
|
|
238
|
+
for (const [k, v] of Object.entries(snapshot)) {
|
|
239
|
+
if (!Object.is(prev[k], v)) {
|
|
240
|
+
next[k] = v
|
|
241
|
+
changed = true
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return changed ? next : prev
|
|
245
|
+
})
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
return () => {
|
|
249
|
+
unsubscribe()
|
|
250
|
+
binding.destroy()
|
|
251
|
+
bindingRef.current = null
|
|
252
|
+
}
|
|
253
|
+
// `valuesRef.current` is intentionally read once at mount — initial
|
|
254
|
+
// values seed the binding; subsequent edits flow through `setValue`
|
|
255
|
+
// and remote changes flow through `subscribe`.
|
|
256
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
257
|
+
}, [collabRoom, bindingFactory, formId])
|
|
187
258
|
|
|
188
259
|
/**
|
|
189
260
|
* Tier-2 follow-up to Plan #5 — fire `Field.afterStateUpdatedJs(body)`
|
|
@@ -238,6 +309,14 @@ export function FormStateProvider({
|
|
|
238
309
|
if (Object.is(prev[name], value)) return prev
|
|
239
310
|
return { ...prev, [name]: value }
|
|
240
311
|
})
|
|
312
|
+
// Phase F2 — proxy the write through the collab binding when active
|
|
313
|
+
// AND the field hasn't opted out via `.collab(false)`. Dotted-path
|
|
314
|
+
// names (Repeater / Builder row leaves) stay local-only in v1; their
|
|
315
|
+
// syncing belongs to Phase F.5 (`Y.Array<Y.Map>` row identity).
|
|
316
|
+
const binding = bindingRef.current
|
|
317
|
+
if (binding && !name.includes('.') && !fieldOptsOutOfCollab(formMetaRef.current, name)) {
|
|
318
|
+
binding.set(name, value)
|
|
319
|
+
}
|
|
241
320
|
// Fire the client-side JS hook synchronously after the state write.
|
|
242
321
|
// Dotted-name fields don't go through here (their setter is a no-op
|
|
243
322
|
// in `useFieldState`); they fire JS via `triggerLive` instead so we
|
|
@@ -311,6 +390,18 @@ export function FormStateProvider({
|
|
|
311
390
|
const serverValues = (data.form as { values?: Record<string, unknown> }).values
|
|
312
391
|
if (serverValues) {
|
|
313
392
|
setValuesState((prev) => ({ ...prev, ...serverValues }))
|
|
393
|
+
// Phase F2 (Q2) — derived fields propagate to peers via the
|
|
394
|
+
// collab binding so every client sees the auto-`slug` / etc.
|
|
395
|
+
// without each peer roundtripping the server. Skip dotted-path
|
|
396
|
+
// names + fields that opted out.
|
|
397
|
+
const binding = bindingRef.current
|
|
398
|
+
if (binding) {
|
|
399
|
+
for (const [k, v] of Object.entries(serverValues)) {
|
|
400
|
+
if (k.includes('.')) continue
|
|
401
|
+
if (fieldOptsOutOfCollab(data.form, k)) continue
|
|
402
|
+
binding.set(k, v)
|
|
403
|
+
}
|
|
404
|
+
}
|
|
314
405
|
}
|
|
315
406
|
setErrors({})
|
|
316
407
|
}
|
|
@@ -5,6 +5,8 @@ import { usePendingSuggestions, usePendingSuggestionsForField, type PendingSugge
|
|
|
5
5
|
import { getPendingSuggestionOverlay } from '../PendingSuggestionOverlayRegistry.js'
|
|
6
6
|
import { registerPendingSuggestionApplier, type PendingSuggestionApplier } from '../PendingSuggestionApplierRegistry.js'
|
|
7
7
|
import { FormIdContext, useFieldState } from '../FormStateContext.js'
|
|
8
|
+
import { getFieldPresenceComponent } from '../FieldPresenceRegistry.js'
|
|
9
|
+
import { getFieldFocusReporter } from '../FieldFocusReporterRegistry.js'
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* Field types whose visible state is driven by React (not by a matching
|
|
@@ -140,10 +142,25 @@ export function FieldShell({ el, name, label, required, children, before, after,
|
|
|
140
142
|
const labelClass = hiddenLabel
|
|
141
143
|
? 'sr-only'
|
|
142
144
|
: 'text-sm font-medium leading-none'
|
|
145
|
+
// Phase F4 — presence chip + focus reporter slots. The chip mounts
|
|
146
|
+
// alongside the label so remote-focus indicators don't shift the
|
|
147
|
+
// input geometry; the focus reporter sits on the outer wrapper using
|
|
148
|
+
// capture-phase listeners so any inner-input focus event flows
|
|
149
|
+
// through. Both slots are gated on `meta.collab !== false` (Q3 from
|
|
150
|
+
// the F-plan — opted-out fields are fully invisible to the collab
|
|
151
|
+
// layer) AND on the field having a stable top-level name (dotted-path
|
|
152
|
+
// Repeater rows skip presence in v1 — Phase F.5).
|
|
153
|
+
const collabOptedOut = (el as { collab?: boolean })['collab'] === false
|
|
154
|
+
const dottedName = name.includes('.')
|
|
155
|
+
const presenceSlotEligible = !collabOptedOut && !dottedName
|
|
156
|
+
const PresenceChip = presenceSlotEligible ? getFieldPresenceComponent() : null
|
|
157
|
+
const focusReporter = presenceSlotEligible ? getFieldFocusReporter() : null
|
|
158
|
+
|
|
143
159
|
const labelEl = label !== '' ? (
|
|
144
160
|
<label htmlFor={name} className={labelClass}>
|
|
145
161
|
{label}{required && <span className="text-destructive ml-0.5">*</span>}
|
|
146
162
|
{labelSlot}
|
|
163
|
+
{PresenceChip && <PresenceChip fieldName={name} formId={formId ?? ''} />}
|
|
147
164
|
</label>
|
|
148
165
|
) : null
|
|
149
166
|
|
|
@@ -177,9 +194,24 @@ export function FieldShell({ el, name, label, required, children, before, after,
|
|
|
177
194
|
</>
|
|
178
195
|
)
|
|
179
196
|
|
|
197
|
+
// Capture-phase focus / blur dispatch — runs even when the inner
|
|
198
|
+
// input is wrapped in custom NodeViews (Select / Date / Slider). One
|
|
199
|
+
// wrapper-level handler covers every controlled input in the tree.
|
|
200
|
+
const onFocusCapture = focusReporter
|
|
201
|
+
? () => focusReporter.onFocus({ fieldName: name, formId: formId ?? '' })
|
|
202
|
+
: undefined
|
|
203
|
+
const onBlurCapture = focusReporter
|
|
204
|
+
? () => focusReporter.onBlur({ fieldName: name, formId: formId ?? '' })
|
|
205
|
+
: undefined
|
|
206
|
+
|
|
180
207
|
if (inline) {
|
|
181
208
|
return (
|
|
182
|
-
<div
|
|
209
|
+
<div
|
|
210
|
+
className="flex items-baseline gap-3"
|
|
211
|
+
{...wrapperAttrs}
|
|
212
|
+
{...(onFocusCapture ? { onFocusCapture } : {})}
|
|
213
|
+
{...(onBlurCapture ? { onBlurCapture } : {})}
|
|
214
|
+
>
|
|
183
215
|
{labelEl && <div className="min-w-32 pt-2">{labelEl}</div>}
|
|
184
216
|
<div className="min-w-0 flex-1">
|
|
185
217
|
{inputBlock}
|
|
@@ -192,7 +224,12 @@ export function FieldShell({ el, name, label, required, children, before, after,
|
|
|
192
224
|
}
|
|
193
225
|
|
|
194
226
|
return (
|
|
195
|
-
<div
|
|
227
|
+
<div
|
|
228
|
+
className="flex flex-col gap-1.5"
|
|
229
|
+
{...wrapperAttrs}
|
|
230
|
+
{...(onFocusCapture ? { onFocusCapture } : {})}
|
|
231
|
+
{...(onBlurCapture ? { onBlurCapture } : {})}
|
|
232
|
+
>
|
|
196
233
|
{labelEl}
|
|
197
234
|
{inputBlock}
|
|
198
235
|
{helperText && (
|
package/src/react/index.ts
CHANGED
|
@@ -50,6 +50,17 @@ export {
|
|
|
50
50
|
type FormCollabBindingFactory,
|
|
51
51
|
type FormCollabBindingFactoryArgs,
|
|
52
52
|
} from './FormCollabBindingRegistry.js'
|
|
53
|
+
export {
|
|
54
|
+
registerFieldPresenceComponent,
|
|
55
|
+
getFieldPresenceComponent,
|
|
56
|
+
type FieldPresenceProps,
|
|
57
|
+
} from './FieldPresenceRegistry.js'
|
|
58
|
+
export {
|
|
59
|
+
registerFieldFocusReporter,
|
|
60
|
+
getFieldFocusReporter,
|
|
61
|
+
type FieldFocusReporter,
|
|
62
|
+
type FieldFocusEvent,
|
|
63
|
+
} from './FieldFocusReporterRegistry.js'
|
|
53
64
|
export {
|
|
54
65
|
registerRecordWrapper,
|
|
55
66
|
getRecordWrapper,
|
|
@@ -2,6 +2,8 @@ import React, { useRef, useState } from 'react'
|
|
|
2
2
|
import type { ElementMeta } from '../../../schema/Element.js'
|
|
3
3
|
import type { NotificationMeta } from '../../../notifications/Notification.js'
|
|
4
4
|
import { FormIdContext, FormStateProvider, useFormState } from '../../FormStateContext.js'
|
|
5
|
+
import { useCollabRoom } from '../../CollabRoomContext.js'
|
|
6
|
+
import { getFormCollabBinding } from '../../FormCollabBindingRegistry.js'
|
|
5
7
|
import { useNavigate } from '../../navigate.js'
|
|
6
8
|
import { useToast } from '../../Toaster.js'
|
|
7
9
|
import { renderField } from './renderField.js'
|
|
@@ -36,6 +38,16 @@ export function FormRenderer({
|
|
|
36
38
|
const serverValues = (el['values'] as Record<string, unknown> | undefined) ?? {}
|
|
37
39
|
const serverErrors = (el['errors'] as Record<string, string[]> | undefined) ?? {}
|
|
38
40
|
|
|
41
|
+
// Phase F2 — the controlled-form path also activates when we're
|
|
42
|
+
// inside a `<RecordCollabRoom>` AND a plugin (e.g.
|
|
43
|
+
// `@pilotiq-pro/collab`) registered a `FormCollabBinding` factory.
|
|
44
|
+
// Without this, forms with no `live()` fields stayed uncontrolled
|
|
45
|
+
// and the collab binding never wired up.
|
|
46
|
+
const collabRoom = useCollabRoom()
|
|
47
|
+
const collabFactory = getFormCollabBinding()
|
|
48
|
+
const collabActive = !!(collabRoom && collabFactory && formId)
|
|
49
|
+
const useControlled = !!stateUrl || collabActive
|
|
50
|
+
|
|
39
51
|
// Methods other than GET/POST are spoofed via _method, mirroring Laravel.
|
|
40
52
|
const httpMethod = method === 'get' ? 'get' : 'post'
|
|
41
53
|
const spoofedMethod = method !== 'get' && method !== 'post' ? method : undefined
|
|
@@ -148,7 +160,7 @@ export function FormRenderer({
|
|
|
148
160
|
</div>
|
|
149
161
|
)}
|
|
150
162
|
<FormIdContext.Provider value={formId}>
|
|
151
|
-
{
|
|
163
|
+
{useControlled ? (
|
|
152
164
|
<FormStateProvider initialMeta={el} initialErrors={errors} formRef={formRef}>
|
|
153
165
|
<FormBody
|
|
154
166
|
fallbackChildren={el.children ?? []}
|