@dxos/react-ui-attention 0.9.1-staging.ee54ba693a → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/chunk-ViewStateProvider.mjs +308 -0
- package/dist/lib/chunk-ViewStateProvider.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +351 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/index.mjs +149 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/testing.mjs +20 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/lib/types.mjs +2 -0
- package/dist/types/src/components/AttentionProvider/AttentionProvider.d.ts +2 -15
- package/dist/types/src/components/AttentionProvider/AttentionProvider.d.ts.map +1 -1
- package/dist/types/src/components/AttentionProvider/attention-context.d.ts +20 -0
- package/dist/types/src/components/AttentionProvider/attention-context.d.ts.map +1 -0
- package/dist/types/src/components/AttentionProvider/index.d.ts +1 -0
- package/dist/types/src/components/AttentionProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/ViewStateProvider/ViewStateProvider.d.ts +2 -26
- package/dist/types/src/components/ViewStateProvider/ViewStateProvider.d.ts.map +1 -1
- package/dist/types/src/components/ViewStateProvider/index.d.ts +1 -0
- package/dist/types/src/components/ViewStateProvider/index.d.ts.map +1 -1
- package/dist/types/src/components/ViewStateProvider/view-state-hooks.d.ts +32 -0
- package/dist/types/src/components/ViewStateProvider/view-state-hooks.d.ts.map +1 -0
- package/dist/types/src/core/backends.d.ts +24 -0
- package/dist/types/src/core/backends.d.ts.map +1 -0
- package/dist/types/src/core/backends.test.d.ts.map +1 -0
- package/dist/types/src/core/index.d.ts +2 -0
- package/dist/types/src/core/index.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +2 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useArticleKeyboardNavigation.d.ts.map +1 -0
- package/dist/types/src/hooks/useArticleKeyboardNavigation.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/{attention.d.ts → types/Attention.d.ts} +13 -2
- package/dist/types/src/types/Attention.d.ts.map +1 -0
- package/dist/types/src/types/Attention.test.d.ts +2 -0
- package/dist/types/src/types/Attention.test.d.ts.map +1 -0
- package/dist/types/src/{selection.d.ts → types/Selection.d.ts} +12 -10
- package/dist/types/src/types/Selection.d.ts.map +1 -0
- package/dist/types/src/types/Selection.test.d.ts +2 -0
- package/dist/types/src/types/Selection.test.d.ts.map +1 -0
- package/dist/types/src/types/ViewState.d.ts +66 -0
- package/dist/types/src/types/ViewState.d.ts.map +1 -0
- package/dist/types/src/types/ViewState.test.d.ts +2 -0
- package/dist/types/src/types/ViewState.test.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +3 -3
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -20
- package/src/components/AttentionProvider/AttentionProvider.stories.tsx +1 -1
- package/src/components/AttentionProvider/AttentionProvider.tsx +4 -86
- package/src/components/AttentionProvider/attention-context.ts +81 -0
- package/src/components/AttentionProvider/index.ts +2 -0
- package/src/components/ViewStateProvider/ViewStateProvider.test.tsx +7 -5
- package/src/components/ViewStateProvider/ViewStateProvider.tsx +6 -110
- package/src/components/ViewStateProvider/index.ts +9 -0
- package/src/components/ViewStateProvider/view-state-hooks.ts +115 -0
- package/src/{view-state → core}/backends.test.ts +5 -5
- package/src/{view-state → core}/backends.ts +24 -17
- package/src/{view-state → core}/index.ts +0 -1
- package/src/hooks/index.ts +5 -0
- package/src/{useArticleKeyboardNavigation.ts → hooks/useArticleKeyboardNavigation.ts} +1 -1
- package/src/index.ts +3 -4
- package/src/testing/decorators/withAttention.ts +2 -2
- package/src/{attention.test.ts → types/Attention.test.ts} +2 -2
- package/src/{attention.ts → types/Attention.ts} +17 -2
- package/src/types/Selection.test.ts +100 -0
- package/src/{selection.ts → types/Selection.ts} +27 -17
- package/src/{view-state/view-state.test.ts → types/ViewState.test.ts} +6 -6
- package/src/types/ViewState.ts +101 -0
- package/src/types/index.ts +8 -7
- package/dist/lib/browser/chunk-4HYAJ4IO.mjs +0 -434
- package/dist/lib/browser/chunk-4HYAJ4IO.mjs.map +0 -7
- package/dist/lib/browser/chunk-I4FDY4AZ.mjs +0 -236
- package/dist/lib/browser/chunk-I4FDY4AZ.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -218
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/testing/index.mjs +0 -30
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -43
- package/dist/lib/browser/types/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DLBZMHST.mjs +0 -237
- package/dist/lib/node-esm/chunk-DLBZMHST.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWN7KJDX.mjs +0 -436
- package/dist/lib/node-esm/chunk-HWN7KJDX.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -219
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/testing/index.mjs +0 -31
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -44
- package/dist/lib/node-esm/types/index.mjs.map +0 -7
- package/dist/types/src/attention.d.ts.map +0 -1
- package/dist/types/src/attention.test.d.ts +0 -2
- package/dist/types/src/attention.test.d.ts.map +0 -1
- package/dist/types/src/selection.d.ts.map +0 -1
- package/dist/types/src/selection.test.d.ts +0 -2
- package/dist/types/src/selection.test.d.ts.map +0 -1
- package/dist/types/src/useArticleKeyboardNavigation.d.ts.map +0 -1
- package/dist/types/src/useArticleKeyboardNavigation.test.d.ts.map +0 -1
- package/dist/types/src/view-state/backends.d.ts +0 -24
- package/dist/types/src/view-state/backends.d.ts.map +0 -1
- package/dist/types/src/view-state/backends.test.d.ts.map +0 -1
- package/dist/types/src/view-state/index.d.ts +0 -3
- package/dist/types/src/view-state/index.d.ts.map +0 -1
- package/dist/types/src/view-state/view-state.d.ts +0 -54
- package/dist/types/src/view-state/view-state.d.ts.map +0 -1
- package/dist/types/src/view-state/view-state.test.d.ts +0 -2
- package/dist/types/src/view-state/view-state.test.d.ts.map +0 -1
- package/src/selection.test.ts +0 -67
- package/src/view-state/view-state.ts +0 -91
- /package/dist/types/src/{view-state → core}/backends.test.d.ts +0 -0
- /package/dist/types/src/{useArticleKeyboardNavigation.d.ts → hooks/useArticleKeyboardNavigation.d.ts} +0 -0
- /package/dist/types/src/{useArticleKeyboardNavigation.test.d.ts → hooks/useArticleKeyboardNavigation.test.d.ts} +0 -0
- /package/src/{useArticleKeyboardNavigation.test.ts → hooks/useArticleKeyboardNavigation.test.ts} +0 -0
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2026 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { type Atom, type Registry } from '@effect-atom/atom-react';
|
|
6
|
-
import type * as Schema from 'effect/Schema';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Persistence backend identifier. `personal` (ECHO/personal-space) is reserved for a future backend.
|
|
10
|
-
*/
|
|
11
|
-
export type BackendName = 'memory' | 'local';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Declares a kind of per-context UI state. The value type `T` is inferred from the schema.
|
|
15
|
-
*/
|
|
16
|
-
export interface AspectDef<T> {
|
|
17
|
-
readonly key: string;
|
|
18
|
-
readonly backend: BackendName;
|
|
19
|
-
// Encoded type is intentionally unconstrained: persisted backends serialize `T` through the
|
|
20
|
-
// schema to an arbitrary wire form, and only the decoded `T` matters to consumers.
|
|
21
|
-
readonly schema: Schema.Schema<T, any>;
|
|
22
|
-
readonly defaultValue: () => T;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Identity helper that pins the value type from the schema while keeping the literal `key`/`backend`.
|
|
27
|
-
*/
|
|
28
|
-
export const defineViewState = <T>(def: AspectDef<T>): AspectDef<T> => def;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* A backend produces a reactive, writable atom for each `(aspect, contextId)` pair. Backends may
|
|
32
|
-
* hydrate asynchronously (an ECHO backend would), yielding `aspect.defaultValue()` until loaded;
|
|
33
|
-
* the memory and local backends resolve synchronously.
|
|
34
|
-
*/
|
|
35
|
-
export interface ViewStateBackend {
|
|
36
|
-
/** Stable atom for the pair; created (and seeded) on first access, cached thereafter. */
|
|
37
|
-
atom: <T>(aspect: AspectDef<T>, contextId: string) => Atom.Writable<T>;
|
|
38
|
-
/** Persist a value after the atom is updated. No-op for in-memory backends. */
|
|
39
|
-
persist?: <T>(aspect: AspectDef<T>, contextId: string, value: T) => void;
|
|
40
|
-
/** Context ids that currently hold a value for the aspect. */
|
|
41
|
-
contexts: <T>(aspect: AspectDef<T>) => string[];
|
|
42
|
-
/** Release listeners/timers (used by tests; app-lifetime managers do not call this). */
|
|
43
|
-
dispose?: () => void;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface ViewStateManagerOptions {
|
|
47
|
-
readonly registry: Registry.Registry;
|
|
48
|
-
readonly backends: Record<BackendName, ViewStateBackend>;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Routes per-context UI state to the backend declared by each aspect. Reads/writes go through the
|
|
53
|
-
* effect-atom registry so React hooks and graph atoms observe changes uniformly.
|
|
54
|
-
*/
|
|
55
|
-
export class ViewStateManager {
|
|
56
|
-
readonly #registry: Registry.Registry;
|
|
57
|
-
readonly #backends: Record<BackendName, ViewStateBackend>;
|
|
58
|
-
|
|
59
|
-
constructor({ registry, backends }: ViewStateManagerOptions) {
|
|
60
|
-
this.#registry = registry;
|
|
61
|
-
this.#backends = backends;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** Reactive atom for `(aspect, contextId)`; pass to `registry.get` inside derived atoms/hooks. */
|
|
65
|
-
atom<T>(aspect: AspectDef<T>, contextId: string): Atom.Writable<T> {
|
|
66
|
-
return this.#backends[aspect.backend].atom(aspect, contextId);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
get<T>(aspect: AspectDef<T>, contextId: string): T {
|
|
70
|
-
return this.#registry.get(this.atom(aspect, contextId));
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
set<T>(aspect: AspectDef<T>, contextId: string, value: T): void {
|
|
74
|
-
const backend = this.#backends[aspect.backend];
|
|
75
|
-
this.#registry.set(backend.atom(aspect, contextId), value);
|
|
76
|
-
backend.persist?.(aspect, contextId, value);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
update<T>(aspect: AspectDef<T>, contextId: string, fn: (prev: T) => T): void {
|
|
80
|
-
this.set(aspect, contextId, fn(this.get(aspect, contextId)));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
subscribe<T>(aspect: AspectDef<T>, contextId: string, cb: (value: T) => void): () => void {
|
|
84
|
-
const atom = this.atom(aspect, contextId);
|
|
85
|
-
return this.#registry.subscribe(atom, () => cb(this.#registry.get(atom)));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
contexts<T>(aspect: AspectDef<T>): string[] {
|
|
89
|
-
return this.#backends[aspect.backend].contexts(aspect);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/src/{useArticleKeyboardNavigation.test.ts → hooks/useArticleKeyboardNavigation.test.ts}
RENAMED
|
File without changes
|