@shivaedev/react 0.0.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.
Files changed (154) hide show
  1. package/CHANGELOG.md +300 -0
  2. package/LICENSE +21 -0
  3. package/README.md +844 -1
  4. package/dist/actionTrace.d.ts +3 -0
  5. package/dist/actionTrace.d.ts.map +1 -0
  6. package/dist/actionTrace.js +5 -0
  7. package/dist/actionTrace.js.map +1 -0
  8. package/dist/client/QueryView.d.ts +10 -0
  9. package/dist/client/QueryView.d.ts.map +1 -0
  10. package/dist/client/QueryView.js +13 -0
  11. package/dist/client/QueryView.js.map +1 -0
  12. package/dist/client/actionCompletion.d.ts +12 -0
  13. package/dist/client/actionCompletion.d.ts.map +1 -0
  14. package/dist/client/actionCompletion.js +68 -0
  15. package/dist/client/actionCompletion.js.map +1 -0
  16. package/dist/client/authAction.d.ts +15 -0
  17. package/dist/client/authAction.d.ts.map +1 -0
  18. package/dist/client/authAction.js +11 -0
  19. package/dist/client/authAction.js.map +1 -0
  20. package/dist/client/create.d.ts +21 -0
  21. package/dist/client/create.d.ts.map +1 -0
  22. package/dist/client/create.js +35 -0
  23. package/dist/client/create.js.map +1 -0
  24. package/dist/client/editor.d.ts +33 -0
  25. package/dist/client/editor.d.ts.map +1 -0
  26. package/dist/client/editor.js +50 -0
  27. package/dist/client/editor.js.map +1 -0
  28. package/dist/client/mountLive.d.ts +4 -0
  29. package/dist/client/mountLive.d.ts.map +1 -0
  30. package/dist/client/mountLive.js +46 -0
  31. package/dist/client/mountLive.js.map +1 -0
  32. package/dist/client/pendingCommand.d.ts +13 -0
  33. package/dist/client/pendingCommand.d.ts.map +1 -0
  34. package/dist/client/pendingCommand.js +30 -0
  35. package/dist/client/pendingCommand.js.map +1 -0
  36. package/dist/client/resultState.d.ts +32 -0
  37. package/dist/client/resultState.d.ts.map +1 -0
  38. package/dist/client/resultState.js +62 -0
  39. package/dist/client/resultState.js.map +1 -0
  40. package/dist/client/saveState.d.ts +11 -0
  41. package/dist/client/saveState.d.ts.map +1 -0
  42. package/dist/client/saveState.js +37 -0
  43. package/dist/client/saveState.js.map +1 -0
  44. package/dist/client/sessionBoundary.d.ts +15 -0
  45. package/dist/client/sessionBoundary.d.ts.map +1 -0
  46. package/dist/client/sessionBoundary.js +70 -0
  47. package/dist/client/sessionBoundary.js.map +1 -0
  48. package/dist/client/testing.d.ts +28 -0
  49. package/dist/client/testing.d.ts.map +1 -0
  50. package/dist/client/testing.js +108 -0
  51. package/dist/client/testing.js.map +1 -0
  52. package/dist/client/useDraftOwner.d.ts +3 -0
  53. package/dist/client/useDraftOwner.d.ts.map +1 -0
  54. package/dist/client/useDraftOwner.js +36 -0
  55. package/dist/client/useDraftOwner.js.map +1 -0
  56. package/dist/client/useLoaderQuery.d.ts +8 -0
  57. package/dist/client/useLoaderQuery.d.ts.map +1 -0
  58. package/dist/client/useLoaderQuery.js +10 -0
  59. package/dist/client/useLoaderQuery.js.map +1 -0
  60. package/dist/fieldRejection.d.ts +25 -0
  61. package/dist/fieldRejection.d.ts.map +1 -0
  62. package/dist/fieldRejection.js +21 -0
  63. package/dist/fieldRejection.js.map +1 -0
  64. package/dist/internal/NoticeContext.d.ts +7 -0
  65. package/dist/internal/NoticeContext.d.ts.map +1 -0
  66. package/dist/internal/NoticeContext.js +3 -0
  67. package/dist/internal/NoticeContext.js.map +1 -0
  68. package/dist/internal/loadedQuery.d.ts +16 -0
  69. package/dist/internal/loadedQuery.d.ts.map +1 -0
  70. package/dist/internal/loadedQuery.js +11 -0
  71. package/dist/internal/loadedQuery.js.map +1 -0
  72. package/dist/internal/noticeEntry.d.ts +21 -0
  73. package/dist/internal/noticeEntry.d.ts.map +1 -0
  74. package/dist/internal/noticeEntry.js +45 -0
  75. package/dist/internal/noticeEntry.js.map +1 -0
  76. package/dist/internal/noticeStore.d.ts +12 -0
  77. package/dist/internal/noticeStore.d.ts.map +1 -0
  78. package/dist/internal/noticeStore.js +37 -0
  79. package/dist/internal/noticeStore.js.map +1 -0
  80. package/dist/internal/queryHandoff.d.ts +9 -0
  81. package/dist/internal/queryHandoff.d.ts.map +1 -0
  82. package/dist/internal/queryHandoff.js +50 -0
  83. package/dist/internal/queryHandoff.js.map +1 -0
  84. package/dist/internal/sessionRecheck.d.ts +4 -0
  85. package/dist/internal/sessionRecheck.d.ts.map +1 -0
  86. package/dist/internal/sessionRecheck.js +14 -0
  87. package/dist/internal/sessionRecheck.js.map +1 -0
  88. package/dist/internal/useLoaderHandoff.d.ts +4 -0
  89. package/dist/internal/useLoaderHandoff.d.ts.map +1 -0
  90. package/dist/internal/useLoaderHandoff.js +18 -0
  91. package/dist/internal/useLoaderHandoff.js.map +1 -0
  92. package/dist/internal/useNoticePublisher.d.ts +4 -0
  93. package/dist/internal/useNoticePublisher.d.ts.map +1 -0
  94. package/dist/internal/useNoticePublisher.js +8 -0
  95. package/dist/internal/useNoticePublisher.js.map +1 -0
  96. package/dist/internal/useQueryNotice.d.ts +8 -0
  97. package/dist/internal/useQueryNotice.d.ts.map +1 -0
  98. package/dist/internal/useQueryNotice.js +26 -0
  99. package/dist/internal/useQueryNotice.js.map +1 -0
  100. package/dist/internal/useSubmissionCallbacks.d.ts +11 -0
  101. package/dist/internal/useSubmissionCallbacks.d.ts.map +1 -0
  102. package/dist/internal/useSubmissionCallbacks.js +45 -0
  103. package/dist/internal/useSubmissionCallbacks.js.map +1 -0
  104. package/dist/loadQuery.d.ts +6 -0
  105. package/dist/loadQuery.d.ts.map +1 -0
  106. package/dist/loadQuery.js +29 -0
  107. package/dist/loadQuery.js.map +1 -0
  108. package/dist/notices.d.ts +32 -0
  109. package/dist/notices.d.ts.map +1 -0
  110. package/dist/notices.js +34 -0
  111. package/dist/notices.js.map +1 -0
  112. package/dist/queryRoute.d.ts +20 -0
  113. package/dist/queryRoute.d.ts.map +1 -0
  114. package/dist/queryRoute.js +20 -0
  115. package/dist/queryRoute.js.map +1 -0
  116. package/dist/resumeSignal.d.ts +6 -0
  117. package/dist/resumeSignal.d.ts.map +1 -0
  118. package/dist/resumeSignal.js +5 -0
  119. package/dist/resumeSignal.js.map +1 -0
  120. package/dist/submission.d.ts +19 -0
  121. package/dist/submission.d.ts.map +1 -0
  122. package/dist/submission.js +19 -0
  123. package/dist/submission.js.map +1 -0
  124. package/package.json +104 -4
  125. package/src/actionTrace.ts +5 -0
  126. package/src/client/QueryView.ts +27 -0
  127. package/src/client/actionCompletion.ts +82 -0
  128. package/src/client/authAction.ts +22 -0
  129. package/src/client/create.ts +55 -0
  130. package/src/client/editor.ts +89 -0
  131. package/src/client/mountLive.ts +57 -0
  132. package/src/client/pendingCommand.ts +42 -0
  133. package/src/client/resultState.ts +102 -0
  134. package/src/client/saveState.ts +54 -0
  135. package/src/client/sessionBoundary.ts +107 -0
  136. package/src/client/testing.ts +142 -0
  137. package/src/client/useDraftOwner.ts +42 -0
  138. package/src/client/useLoaderQuery.ts +16 -0
  139. package/src/fieldRejection.ts +51 -0
  140. package/src/internal/NoticeContext.ts +4 -0
  141. package/src/internal/loadedQuery.ts +18 -0
  142. package/src/internal/noticeEntry.ts +65 -0
  143. package/src/internal/noticeStore.ts +46 -0
  144. package/src/internal/queryHandoff.ts +60 -0
  145. package/src/internal/sessionRecheck.ts +17 -0
  146. package/src/internal/useLoaderHandoff.ts +20 -0
  147. package/src/internal/useNoticePublisher.ts +10 -0
  148. package/src/internal/useQueryNotice.ts +32 -0
  149. package/src/internal/useSubmissionCallbacks.ts +57 -0
  150. package/src/loadQuery.ts +34 -0
  151. package/src/notices.ts +65 -0
  152. package/src/queryRoute.ts +30 -0
  153. package/src/resumeSignal.ts +13 -0
  154. package/src/submission.ts +39 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,300 @@
1
+ # Changelog
2
+
3
+ ## 0.19.0 - 2026-10-27
4
+
5
+ ### Breaking
6
+
7
+ - Rename `@shivaedev/effect-react` to `@shivaedev/react`. Change dependency declarations and imports from `@shivaedev/effect-react/...` to `@shivaedev/react/...`; module paths inside the package are unchanged.
8
+
9
+ ## 0.18.1 - 2026-10-26
10
+
11
+ ### Changed
12
+
13
+ - Release with updated workspace dependencies.
14
+
15
+ ## 0.18.0 - 2026-10-25
16
+
17
+ ### Added
18
+
19
+ - Pass the session-owned native registry as the second argument to `SessionBoundary.connect`, allowing session-scoped contracts to bind before screens render. Session replacement and sign-out release their private tracking, live registrations and pending refreshes; existing one-argument callbacks continue to work.
20
+
21
+ ## 0.17.0 - 2026-10-25
22
+
23
+ ### Added
24
+
25
+ - `bind` accepts an optional `resume: ResumeSource` to reopen and reconcile automatic live subscriptions from application lifecycle events alongside the browser defaults. Registry disposal unsubscribes the source.
26
+ - React automatic session subscriptions use the same source supplied to `bind` in `SessionBoundary.connect`, so native shells can reconcile live query screens from their own lifecycle events.
27
+
28
+ ## 0.16.0 - 2026-10-25
29
+
30
+ ### Added
31
+
32
+ - Add an optional session notice host with application-rendered controls, dismissal, expiry and native action status. Queries, command Effects and form submissions can supply notice descriptors; Undo runs an application Effect with its own payload and expected version, keeps conflicts on that action, and releases entries and pending actions when their notice or session ends.
33
+
34
+ ## 0.15.0 - 2026-10-25
35
+
36
+ ### Added
37
+
38
+ - Add stateless `QueryView` renderers for loading, successful content and typed query rejections with native refresh. Failed refreshes keep successful content mounted, while defects reach the application's error boundary.
39
+ - `@shivaedev/effect-test` readiness retries accept `timeout` and `wait` options. A timeout preserves the final typed failure; a custom wait lets adapters settle observable work through the same retry engine.
40
+
41
+ ### Breaking
42
+
43
+ - `@shivaedev/effect-react/client/testing.ts` now returns an Effect from `eventually(assert)`. Replace `yield* Effect.promise(() => eventually(assert))` with `yield* eventually(assert)` in stories and Effect tests, or replace `await eventually(assert)` with `await Effect.runPromise(eventually(assert))` in async tests. Assertions wait inside React `act` in live time, including under TestClock. Timeout errors include elapsed milliseconds and the last assertion message, with the assertion error as their `cause`.
44
+
45
+ ## 0.14.0 - 2026-10-25
46
+
47
+ ### Added
48
+
49
+ - `useAction(runtime, run, options?)` runs optional `onSuccess(value, input)` and `onFailure(error, input)` callbacks inside each command invocation using the latest committed callbacks. Native atoms retain execution, interruption and aggregate state; `concurrent: true` allows overlapping commands. Bound commands keep their own invalidation without waiting for refetches, Unauthorized failures request one session recheck per invocation, and session replacement discards outgoing feedback. The existing atom overload remains available.
50
+
51
+ ## 0.13.0 - 2026-10-25
52
+
53
+ ### Added
54
+
55
+ - `queryRoute` supplies TanStack Router query loaders and search dependencies, mapping `NotFound` rejections to the route's not-found component.
56
+
57
+ ### Changed
58
+
59
+ - Generated starter notes routes use query loaders and show a not-found screen for missing notes, with a link back to the list.
60
+
61
+ ## 0.12.5 - 2026-10-25
62
+
63
+ ### Changed
64
+
65
+ - Release with updated workspace dependencies.
66
+
67
+ ## 0.12.4 - 2026-10-25
68
+
69
+ ### Changed
70
+
71
+ - Release with updated workspace dependencies.
72
+
73
+ ## 0.12.3 - 2026-10-24
74
+
75
+ ### Changed
76
+
77
+ - Require Effect and its companion packages at exactly 4.0.5. Generated applications use the same versions.
78
+
79
+ ### Fixed
80
+
81
+ - Call the latest create, save and field-rejection callbacks across React renders while preserving the draft. Replace forms when their schema or runtime identity changes, and document which options are captured for a form lifetime.
82
+
83
+ ## 0.12.2 - 2026-10-24
84
+
85
+ ### Changed
86
+
87
+ - Align published dependency and peer pins and the generated starter with React and React DOM 19.3.1, TanStack Router 1.170.45, Better Auth 1.7.10, happy-dom 21.0.3 and Vitest 5.0.5. The starter also uses pg-boss dashboard 1.12.1.
88
+
89
+ ## 0.12.1 - 2026-10-21
90
+
91
+ ### Changed
92
+
93
+ - Release with updated workspace dependencies.
94
+
95
+ ## 0.12.0 - 2026-10-19
96
+
97
+ ### Added
98
+
99
+ - Choose a live changed-hint coalescing window per bound query with React's `useQuery(atom, { coalesceWindow })`, keeping the session window as the default. Queries over one connection refetch on their own schedules; changing the option does not reconnect or refetch queries.
100
+ - Configure a bound query's window through its registry with `queryCoalesceWindow(query)` from `@shivaedev/effect-contract/queryCoalesceWindow.ts`.
101
+
102
+ ## 0.11.1 - 2026-10-19
103
+
104
+ ### Fixed
105
+
106
+ - Recheck the session when an automatic live connection fails with `Unauthorized`, so `SessionBoundary` shows its signed-out content without another query read, stops reconnecting while signed out and restores live updates after sign-in.
107
+
108
+ ## 0.11.0 - 2026-10-19
109
+
110
+ ### Added
111
+
112
+ - Coalesce live changed hints over a default 20 ms window, with one follow-up read when hints arrive during an in-flight refetch. Configure `live()` with `coalesceWindow`, or set its returned `coalesceWindow` atom; zero retains immediate invalidation. Reconciliation stays immediate.
113
+ - Configure automatic live connections per React `SessionBoundary` with `liveCoalesceWindow`.
114
+
115
+ ## 0.10.2 - 2026-10-19
116
+
117
+ ### Changed
118
+
119
+ - Release with updated workspace dependencies.
120
+
121
+ ## 0.10.1 - 2026-10-19
122
+
123
+ ### Fixed
124
+
125
+ - Wait for an active query loader before a newly mounted `useLoaderQuery` screen renders, so links to cached routes after invalidation show the changed data on their first render. Already mounted screens keep their data during refreshes.
126
+
127
+ ## 0.10.0 - 2026-10-19
128
+
129
+ ### Added
130
+
131
+ - effect-react exports `actionTrace(effect, name?)` from `actionTrace.ts` to group an action's RPC Effects under a fresh trace. Editor saves and create submissions automatically group their save Effects in a `ui.submit` trace. Native HTTP RPC clients send W3C trace context through the host to SQL and job enqueueing; pg-boss worker attempts retain their separate, linked traces.
132
+
133
+ ### Fixed
134
+
135
+ - Platform appHost preserves incoming W3C `traceparent` context for RPC handling even without an installed tracer or exporter. Request ids stay annotated on the RPC span.
136
+
137
+ ## 0.9.0 - 2026-10-19
138
+
139
+ ### Added
140
+
141
+ - `captureReactWarnings` in `client/testing.ts` acquires a scoped, silent capture for story kits. Its `ReactWarnings` handle reads console calls and unexpected caught React errors as a `ReactWarningsReadout`, excludes declared caught errors, and restores `console.error` on scope closure, including failed stories. `expectNoReactWarnings` uses the same capture mechanism.
142
+
143
+ ## 0.8.0 - 2026-10-18
144
+
145
+ ### Added
146
+
147
+ - Session boundaries mount automatic live connections on bound contract APIs returned by `connect`, either directly or as properties such as `client.api`. Connections follow the session registry lifetime and query keys. `client/mountLive.ts` also exports `mountLive(registry, client)`, returning the release function for a custom owner.
148
+
149
+ ### Breaking
150
+
151
+ - `SessionBoundary` now connects live queries automatically when its client contains a contract binding. Remove application `live()` calls and connection mounts; serve the contract through a Platform database host with NDJSON serialization.
152
+
153
+ ## 0.7.0 - 2026-10-18
154
+
155
+ ### Added
156
+
157
+ - Pass React's `RootOptions` to test `render(node, options)`, including `onCaughtError`, `onUncaughtError` and `onRecoverableError`.
158
+ - Declare expected boundary errors with `expectNoReactWarnings().expectCaughtError(predicate)`, using its returned `onCaughtError` handler in `render`. Unexpected caught errors, console errors, React warnings and missing expected errors still fail the guard.
159
+ - `useLoaderQuery(atom, routeLoaderData)` and `LoadedQueryState` expose loaded query data directly and retain the last value during refetches, without an Initial result or per-screen loading branch.
160
+ - `useEditor({ ...config, loaded: routeLoaderData })` and `LoadedEditor` provide a defined form and direct query data for loader-backed editors.
161
+ - `usePendingCommand`, `PendingCommandOptions` and `PendingCommandState` from `client/pendingCommand.ts` expose a command's wanted display value while it runs and its watched queries refetch, then adopt the server value. Typed command failures revert the display and remain in the native action result.
162
+ - Bind independently controlled list rows to separate native action atoms with `Atom.family`, so a typed rejection on one row leaves another row's pending display intact.
163
+
164
+ ### Fixed
165
+
166
+ - Keep loader queries mounted until a component subscribes or their route owner aborts, so delayed route mounts share the loader's execution. Give SessionBoundary registries the same idle window as atom-react's default registry; unread results are released when their route owner ends.
167
+
168
+ ## 0.6.0 - 2026-10-18
169
+
170
+ ### Added
171
+
172
+ - `authAction` in `client/authAction.ts` binds Better Auth client promises to native action atoms for `useAction`, with pending state and typed returned failures. Rejected promises fail with the exported `AuthActionUnavailable` error; `AuthActionResult` describes the structural client result.
173
+
174
+ ## 0.5.1 - 2026-10-18
175
+
176
+ ### Fixed
177
+
178
+ - Route loaders and `loadQuery` recheck the owning `SessionBoundary` session once when a query fails with `Unauthorized`, so sign-in redirects can see an ended session.
179
+
180
+ ## 0.5.0 - 2026-10-18
181
+
182
+ ### Breaking
183
+
184
+ - Modules are named in camelCase: `field-rejection.ts` becomes `fieldRejection.ts`, and `resume-signal.ts` becomes `resumeSignal.ts`.
185
+ - Every module's import path is now its path under `src/`. `router.ts` becomes `loadQuery.ts`; `create.ts`, `editor.ts` and `testing.ts` move under `client/`; `result-state.ts`, `save-state.ts` and `session-boundary.ts` become `client/resultState.ts`, `client/saveState.ts` and `client/sessionBoundary.ts`.
186
+
187
+ ## 0.4.1 - 2026-10-17
188
+
189
+ ### Fixed
190
+
191
+ - Align the published contract dependency with the current framework release.
192
+
193
+ ## 0.4.0 - 2026-10-13
194
+
195
+ ### Breaking
196
+
197
+ - Requires stable Effect 4.0.4 in place of 4.0.0-rc.112. Effect 4.0.4 moves the former `effect/unstable/*` modules to `effect/*` and renames constructors such as `Config.string` to `Config.String`. Install `@effect/atom-react` 4.0.4 alongside it, and Vitest 5 for the test helpers.
198
+
199
+ ## 0.3.0 - 2026-10-13
200
+
201
+ ### Added
202
+
203
+ - `useEditor` and `useCreate` accept opt-in `persistedDraft` settings with application keys, storage and bounds. They inherit `SessionBoundary` ownership, which drops tracked drafts when the session changes or ends, including drafts from unmounted screens.
204
+
205
+ ### Changed
206
+
207
+ - Include `@shivaedev/effect-form` as a workspace dependency for shared draft ownership at the session boundary.
208
+
209
+ ### Fixed
210
+
211
+ - Reconcile `SessionBoundary` draft ownership when a session replacement commits. A suspended, canceled transition preserves the visible session's draft and future persistence; committed replacements also clear old drafts while Activity is hidden.
212
+
213
+ ## 0.2.2 - 2026-10-12
214
+
215
+ ### Added
216
+
217
+ - Publish `@shivaedev/effect-react/testing.ts` with `render`, `Rendered`, `eventually` and `expectNoReactWarnings` for happy-dom render tests using native atom registries and test RPC layers. `render` exposes its registry, supports rerendering and releases its root, registry and container on unmount. React DOM and Vitest are optional peers needed by the testing entry.
218
+ - Add opt-in `useQuery(atom, { keepPreviousData: true })` to retain the last successful value while a changed query payload loads or fails. Query identity changes still reset displayed data by default, and registry changes clear it even with retention enabled. Native results, typed failures and interruption remain visible.
219
+ - `@shivaedev/effect-react/router.ts` exports `loadQuery(registry, atom, loaderContext)` for TanStack Router loaders. It reads contract query atoms in the application's shared registry, throws typed failures as their original tagged errors, and releases an aborted loader's subscription. TanStack Router is an optional peer.
220
+
221
+ ### Changed
222
+
223
+ - Document the package's purpose, native atom mental model, query/action usage, session ownership and editor/create workflows; publish the north star and package roadmap with the README.
224
+ - Build package JavaScript, declarations and source maps with TypeScript 7.
225
+ - The reference PostgreSQL order handlers use the shared server live helper and support composing PostgreSQL change delivery. The reference fixture proves commits from two HTTP server processes and a pg-boss worker, rollback silence, and live resync after listener loss.
226
+
227
+ ### Fixed
228
+
229
+ - Keep the last successful query value during same-identity refreshes, including live invalidation, and after failed refreshes even when the native result has no retained success. `refreshing` reports pending work alongside displayed data.
230
+
231
+ ## 0.2.1 - 2026-10-05
232
+
233
+ ### Changed
234
+
235
+ - Delegate the existing `resume-signal.ts` entry to the shared browser-safe implementation in effect-contract. Install that package as a runtime dependency so existing imports keep working; signal types and behavior remain compatible. Work Board can import the shared native implementation without React peers.
236
+
237
+ ## 0.2.0 - 2026-10-04
238
+
239
+ ### Changed
240
+
241
+ - Breaking: no root entry and no module that re-exports another. `exports` maps one `"./*.ts"` pattern to every module (`src` under the `source` condition, `dist` otherwise), so you import the module that defines a name, and a bundler sees only the modules you use. Where each name now lives:
242
+ - `@shivaedev/effect-react`: `@shivaedev/effect-react/result-state.ts` (`ActionState`, `QueryState`, `ResultState`, `isUnauthorized`, `useAction`, `useQuery`), `@shivaedev/effect-react/resume-signal.ts` (`ResumeOptions`, `ResumeSource`, `ResumeWindow`, `resumeSignal`), `@shivaedev/effect-react/session-boundary.ts` (`SessionBoundaryProps`, `SessionBoundary`, `useSessionRecheck`)
243
+ - `@shivaedev/effect-react/form`: `@shivaedev/effect-react/create.ts` (`Create`, `CreateConfig`, `useCreate`), `@shivaedev/effect-react/editor.ts` (`Editor`, `EditorConfig`, `useEditor`), `@shivaedev/effect-react/field-rejection.ts` (`FieldRejection`, `FieldRejectionMapping`, `RejectField`), `@shivaedev/effect-react/save-state.ts` (`SaveState`)
244
+
245
+ ## 0.1.2 - 2026-10-04
246
+
247
+ ### Changed
248
+
249
+ - Imports that leave their folder go through `#` aliases declared in the `imports` field of `package.json`: `#*.ts` resolves to `src` under the `source` condition and to `dist` otherwise, and `#test/*` names a test file. The published modules and declarations name the package's own files through these aliases.
250
+
251
+ - Consolidate duplicate test cases around observable package behavior.
252
+
253
+ - Validate packed consumers and executable bins through the shared workspace gate.
254
+
255
+ - Replace a JSDoc block with a short reason comment, so the package passes the comment rules of `@shivaedev/quality`.
256
+
257
+ - Build with the `@shivaedev/quality` tsconfig presets, which target ESNext and allow only erasable TypeScript syntax.
258
+
259
+ - Type-check with TypeScript 7 only. TypeScript 6 still builds the package.
260
+
261
+ - Lint and format with the `@shivaedev/quality` Biome preset through `quality lint` at the repository root, which replaces the package's `check` script.
262
+
263
+ - Run tests through the `@shivaedev/quality` Vitest projects, which take a test's environment from its file name. Type tests are named `*.typecheck.test.ts`.
264
+
265
+ - Keep `package.json` in sort-package-json key order, checked by `quality lint`.
266
+
267
+ ## 0.1.1 - 2026-09-26
268
+
269
+ ### Changed
270
+
271
+ - Pin the optional `@shivaedev/effect-form` peer dependency to exactly 0.1.1,
272
+ the version released alongside, instead of `^0.1.0`.
273
+
274
+ ## 0.1.0 - 2026-09-26
275
+
276
+ ### Added
277
+
278
+ - Add `useEditor`: binds a query atom, schema fields and a save Effect. It
279
+ creates the form when data first arrives, remounts it per query atom, merges
280
+ query refreshes and saved results per field, maps tagged
281
+ `{ _tag, field, message }` rejections (such as effect-contract field
282
+ rejections) onto fields by default and requires `rejectField` when a tagged
283
+ rejection's field type names a field the form lacks, exposes other save
284
+ failures and ignores submits while saving.
285
+ - Add `useCreate`: after a successful create it starts a fresh form from the
286
+ initial values, keeping fields edited while the save was in flight.
287
+ - Export `useEditor` and `useCreate` from the `@shivaedev/effect-react/form`
288
+ subpath; `@shivaedev/effect-form` (`^0.1.0`) is an optional peer dependency
289
+ needed only by that subpath.
290
+ - Add `SessionBoundary`: one credential-bound client and atom registry per
291
+ session generation, remounting its subtree and disposing the registry when the
292
+ session changes or ends. A generation hidden by `<Activity>` renders against a
293
+ fresh registry instead of a disposed one.
294
+ - Report `Unauthorized` query/action failures to the boundary's `recheck`
295
+ instead of clearing retained data.
296
+ - Add `resumeSignal`, combining visible `visibilitychange`, visible `online` and
297
+ an injectable native resume source for native `Atom.makeRefreshOnSignal` and
298
+ `Atom.swr`.
299
+ - Add native atom query and action hooks with retained data, refresh state and
300
+ typed action state.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ShivaeDev
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.