@dxos/react-ui-attention 0.9.0 → 0.9.1-main.c7dcc2e112
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/browser/chunk-4HYAJ4IO.mjs +434 -0
- package/dist/lib/browser/chunk-4HYAJ4IO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-I4VO2RQM.mjs → chunk-KCQFVRZ6.mjs} +88 -112
- package/dist/lib/browser/chunk-KCQFVRZ6.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +29 -11
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +4 -4
- package/dist/lib/browser/testing/index.mjs.map +2 -2
- package/dist/lib/browser/types/index.mjs +19 -5
- package/dist/lib/node-esm/{chunk-ZTUVSH4P.mjs → chunk-5JUZQDCR.mjs} +88 -112
- package/dist/lib/node-esm/chunk-5JUZQDCR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HWN7KJDX.mjs +436 -0
- package/dist/lib/node-esm/chunk-HWN7KJDX.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +29 -11
- package/dist/lib/node-esm/index.mjs.map +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +4 -4
- package/dist/lib/node-esm/testing/index.mjs.map +2 -2
- package/dist/lib/node-esm/types/index.mjs +19 -5
- package/dist/types/src/components/ViewStateProvider/ViewStateProvider.d.ts +29 -0
- package/dist/types/src/components/ViewStateProvider/ViewStateProvider.d.ts.map +1 -0
- package/dist/types/src/components/ViewStateProvider/ViewStateProvider.test.d.ts +2 -0
- package/dist/types/src/components/ViewStateProvider/ViewStateProvider.test.d.ts.map +1 -0
- package/dist/types/src/components/ViewStateProvider/index.d.ts +2 -0
- package/dist/types/src/components/ViewStateProvider/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/selection.d.ts +10 -40
- package/dist/types/src/selection.d.ts.map +1 -1
- package/dist/types/src/selection.test.d.ts +2 -0
- package/dist/types/src/selection.test.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/view-state/backends.d.ts +24 -0
- package/dist/types/src/view-state/backends.d.ts.map +1 -0
- package/dist/types/src/view-state/backends.test.d.ts +2 -0
- package/dist/types/src/view-state/backends.test.d.ts.map +1 -0
- package/dist/types/src/view-state/index.d.ts +3 -0
- package/dist/types/src/view-state/index.d.ts.map +1 -0
- package/dist/types/src/view-state/view-state.d.ts +54 -0
- package/dist/types/src/view-state/view-state.d.ts.map +1 -0
- package/dist/types/src/view-state/view-state.test.d.ts +2 -0
- package/dist/types/src/view-state/view-state.test.d.ts.map +1 -0
- package/dist/types/src/vitest-setup.d.ts +2 -0
- package/dist/types/src/vitest-setup.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -13
- package/src/components/ViewStateProvider/ViewStateProvider.test.tsx +45 -0
- package/src/components/ViewStateProvider/ViewStateProvider.tsx +123 -0
- package/src/components/ViewStateProvider/index.ts +5 -0
- package/src/components/index.ts +1 -1
- package/src/index.ts +1 -0
- package/src/selection.test.ts +67 -0
- package/src/selection.ts +39 -169
- package/src/testing/decorators/withAttention.ts +2 -2
- package/src/types/index.ts +1 -0
- package/src/view-state/backends.test.ts +104 -0
- package/src/view-state/backends.ts +145 -0
- package/src/view-state/index.ts +6 -0
- package/src/view-state/view-state.test.ts +54 -0
- package/src/view-state/view-state.ts +91 -0
- package/src/vitest-setup.ts +6 -0
- package/dist/lib/browser/chunk-D2BLVJ6Z.mjs +0 -421
- package/dist/lib/browser/chunk-D2BLVJ6Z.mjs.map +0 -7
- package/dist/lib/browser/chunk-I4VO2RQM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6INLBC62.mjs +0 -423
- package/dist/lib/node-esm/chunk-6INLBC62.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZTUVSH4P.mjs.map +0 -7
- package/dist/types/src/components/SelectionProvider/SelectionProvider.d.ts +0 -28
- package/dist/types/src/components/SelectionProvider/SelectionProvider.d.ts.map +0 -1
- package/dist/types/src/components/SelectionProvider/index.d.ts +0 -2
- package/dist/types/src/components/SelectionProvider/index.d.ts.map +0 -1
- package/src/components/SelectionProvider/SelectionProvider.tsx +0 -174
- package/src/components/SelectionProvider/index.ts +0 -5
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AttentionManager,
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
getAttendables
|
|
6
|
-
|
|
3
|
+
ViewStateManager,
|
|
4
|
+
createDefaultBackends,
|
|
5
|
+
getAttendables,
|
|
6
|
+
resolveSelection,
|
|
7
|
+
selectionAspect,
|
|
8
|
+
toggleSelection
|
|
9
|
+
} from "./chunk-4HYAJ4IO.mjs";
|
|
7
10
|
|
|
8
11
|
// src/components/AttentionProvider/AttentionProvider.tsx
|
|
9
12
|
import { RegistryContext } from "@effect-atom/atom-react";
|
|
@@ -117,127 +120,98 @@ var AttendableContainer = /* @__PURE__ */ forwardRef(({ id, classNames, children
|
|
|
117
120
|
}, children);
|
|
118
121
|
});
|
|
119
122
|
|
|
120
|
-
// src/components/
|
|
123
|
+
// src/components/ViewStateProvider/ViewStateProvider.tsx
|
|
121
124
|
import { RegistryContext as RegistryContext2 } from "@effect-atom/atom-react";
|
|
122
125
|
import { createContext as createContext2 } from "@radix-ui/react-context";
|
|
123
|
-
import
|
|
124
|
-
import
|
|
126
|
+
import React2, { useContext as useContext2, useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
|
|
127
|
+
import { invariant } from "@dxos/invariant";
|
|
125
128
|
import { useDefaultValue as useDefaultValue2 } from "@dxos/react-hooks";
|
|
126
|
-
var
|
|
127
|
-
var
|
|
128
|
-
|
|
129
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-attention/src/components/ViewStateProvider/ViewStateProvider.tsx";
|
|
130
|
+
var VIEW_STATE_NAME = "ViewState";
|
|
131
|
+
var [ViewStateContextProvider, useViewStateContext] = createContext2(VIEW_STATE_NAME, {
|
|
132
|
+
manager: void 0
|
|
129
133
|
});
|
|
130
|
-
var
|
|
134
|
+
var ViewStateProvider = ({ children, manager: managerProp }) => {
|
|
131
135
|
const registry = useContext2(RegistryContext2);
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
136
|
+
const manager = useDefaultValue2(managerProp, () => new ViewStateManager({
|
|
137
|
+
registry,
|
|
138
|
+
backends: createDefaultBackends(registry)
|
|
139
|
+
}));
|
|
140
|
+
return /* @__PURE__ */ React2.createElement(ViewStateContextProvider, {
|
|
141
|
+
manager
|
|
135
142
|
}, children);
|
|
136
143
|
};
|
|
137
|
-
var
|
|
138
|
-
const {
|
|
139
|
-
|
|
144
|
+
var useViewStateManager = () => {
|
|
145
|
+
const { manager } = useViewStateContext(VIEW_STATE_NAME);
|
|
146
|
+
invariant(manager, "useViewStateManager() requires a ViewStateProvider ancestor.", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 29, S: void 0, A: ["manager", "'useViewStateManager() requires a ViewStateProvider ancestor.'"] });
|
|
147
|
+
return manager;
|
|
140
148
|
};
|
|
141
|
-
var
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}, (selection) => selection.id), Match.when({
|
|
145
|
-
mode: "multi"
|
|
146
|
-
}, (selection) => selection.ids), Match.when({
|
|
147
|
-
mode: "range"
|
|
148
|
-
}, (selection) => selection.from && selection.to ? {
|
|
149
|
-
from: selection.from,
|
|
150
|
-
to: selection.to
|
|
151
|
-
} : void 0), Match.when({
|
|
152
|
-
mode: "multi-range"
|
|
153
|
-
}, (selection) => selection.ranges), Match.exhaustive)(defaultSelection(mode));
|
|
154
|
-
};
|
|
155
|
-
var useSelected = (contextId, mode = "multi") => {
|
|
156
|
-
const { selection } = useSelectionContext(SELECTION_NAME);
|
|
157
|
-
const [state, setState] = useState2(() => contextId && selection ? selection.getSelected(contextId, mode) : getDefaultResult(mode));
|
|
149
|
+
var useViewState = (aspect, contextId) => {
|
|
150
|
+
const { manager } = useViewStateContext(VIEW_STATE_NAME);
|
|
151
|
+
const [value, setValue] = useState2(() => contextId && manager ? manager.get(aspect, contextId) : aspect.defaultValue());
|
|
158
152
|
useEffect2(() => {
|
|
159
|
-
if (!contextId || !
|
|
160
|
-
|
|
153
|
+
if (!contextId || !manager) {
|
|
154
|
+
setValue(aspect.defaultValue());
|
|
161
155
|
return;
|
|
162
156
|
}
|
|
163
|
-
|
|
164
|
-
return
|
|
165
|
-
setState(selection.getSelected(contextId, mode));
|
|
166
|
-
});
|
|
157
|
+
setValue(manager.get(aspect, contextId));
|
|
158
|
+
return manager.subscribe(aspect, contextId, setValue);
|
|
167
159
|
}, [
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
160
|
+
manager,
|
|
161
|
+
aspect,
|
|
162
|
+
contextId
|
|
171
163
|
]);
|
|
172
|
-
return
|
|
164
|
+
return value;
|
|
173
165
|
};
|
|
174
|
-
var
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (!selection) {
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
for (const contextId of stableContextIds) {
|
|
195
|
-
selection.updateMulti(contextId, ids);
|
|
196
|
-
}
|
|
197
|
-
}, [
|
|
198
|
-
selection,
|
|
199
|
-
stableContextIds
|
|
200
|
-
]);
|
|
201
|
-
const rangeSelect = useCallback2((from, to) => {
|
|
202
|
-
if (!selection) {
|
|
203
|
-
return;
|
|
166
|
+
var useViewStateActions = (aspect, contextId) => {
|
|
167
|
+
const { manager } = useViewStateContext(VIEW_STATE_NAME);
|
|
168
|
+
return useMemo2(() => ({
|
|
169
|
+
set: (value) => {
|
|
170
|
+
if (contextId) {
|
|
171
|
+
manager?.set(aspect, contextId, value);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
update: (fn) => {
|
|
175
|
+
if (contextId) {
|
|
176
|
+
manager?.update(aspect, contextId, fn);
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
clear: () => {
|
|
180
|
+
if (contextId) {
|
|
181
|
+
manager?.set(aspect, contextId, aspect.defaultValue());
|
|
182
|
+
}
|
|
204
183
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
selection,
|
|
210
|
-
stableContextIds
|
|
211
|
-
]);
|
|
212
|
-
const toggle = useCallback2((id) => {
|
|
213
|
-
if (!selection) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
for (const contextId of stableContextIds) {
|
|
217
|
-
selection.toggleSelection(contextId, id);
|
|
218
|
-
}
|
|
219
|
-
}, [
|
|
220
|
-
selection,
|
|
221
|
-
stableContextIds
|
|
184
|
+
}), [
|
|
185
|
+
manager,
|
|
186
|
+
aspect,
|
|
187
|
+
contextId
|
|
222
188
|
]);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
189
|
+
};
|
|
190
|
+
var useSelection = (contextId, mode = "multi") => resolveSelection(useViewState(selectionAspect, contextId), mode);
|
|
191
|
+
var useSelectionActions = (contextId) => {
|
|
192
|
+
const { update, clear } = useViewStateActions(selectionAspect, contextId);
|
|
193
|
+
return useMemo2(() => ({
|
|
194
|
+
single: (id) => update(() => ({
|
|
195
|
+
mode: "single",
|
|
196
|
+
id
|
|
197
|
+
})),
|
|
198
|
+
multi: (ids) => update(() => ({
|
|
199
|
+
mode: "multi",
|
|
200
|
+
ids: [
|
|
201
|
+
...ids
|
|
202
|
+
]
|
|
203
|
+
})),
|
|
204
|
+
range: (from, to) => update(() => ({
|
|
205
|
+
mode: "range",
|
|
206
|
+
from,
|
|
207
|
+
to
|
|
208
|
+
})),
|
|
209
|
+
toggle: (id) => update((prev) => toggleSelection(prev, id)),
|
|
210
|
+
clear
|
|
211
|
+
}), [
|
|
212
|
+
update,
|
|
239
213
|
clear
|
|
240
|
-
|
|
214
|
+
]);
|
|
241
215
|
};
|
|
242
216
|
|
|
243
217
|
export {
|
|
@@ -247,9 +221,11 @@ export {
|
|
|
247
221
|
useAttentionAttributes,
|
|
248
222
|
RootAttentionProvider,
|
|
249
223
|
AttendableContainer,
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
224
|
+
ViewStateProvider,
|
|
225
|
+
useViewStateManager,
|
|
226
|
+
useViewState,
|
|
227
|
+
useViewStateActions,
|
|
228
|
+
useSelection,
|
|
253
229
|
useSelectionActions
|
|
254
230
|
};
|
|
255
|
-
//# sourceMappingURL=chunk-
|
|
231
|
+
//# sourceMappingURL=chunk-KCQFVRZ6.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/AttentionProvider/AttentionProvider.tsx", "../../../src/components/ViewStateProvider/ViewStateProvider.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, {\n type ComponentPropsWithRef,\n type FocusEvent,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { log } from '@dxos/log';\nimport { useDefaultValue } from '@dxos/react-hooks';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { type Attention, AttentionManager, getAttendables } from '../../attention';\n\nconst ATTENTION_NAME = 'Attention';\nconst ATTENDABLE_ATTRIBUTE = 'data-attendable-id';\nconst ATTENTION_SOURCE_ATTRIBUTE = 'data-w-attention-source';\n\ntype AttentionContextValue = {\n attention: AttentionManager;\n};\n\nconst [AttentionContextProvider, useAttentionContext] = createContext<AttentionContextValue>(ATTENTION_NAME, {\n attention: undefined as unknown as AttentionManager,\n});\n\nconst UNKNOWN_ATTENDABLE = { hasAttention: false, isAncestor: false, isRelated: false } as Attention;\n\n/**\n * Subscribe to the attention state for a qualified graph ID.\n */\n// TODO(burdon): Unify with seleciton and change to contextId?\nconst useAttention = (attendableId?: string): Attention => {\n const { attention } = useAttentionContext(ATTENTION_NAME);\n const [state, setState] = useState<Attention>(UNKNOWN_ATTENDABLE);\n useEffect(() => {\n if (!attendableId || !attention) {\n setState(UNKNOWN_ATTENDABLE);\n return;\n }\n\n const currentState = attention.get(attendableId);\n setState(currentState);\n\n return attention.subscribe(attendableId, (newState) => {\n setState(newState);\n });\n }, [attention, attendableId]);\n\n return state;\n};\n\nconst useAttended = () => {\n const { attention } = useAttentionContext(ATTENTION_NAME);\n const [current, setCurrent] = useState<readonly string[]>([]);\n useEffect(() => {\n if (!attention) {\n return;\n }\n\n setCurrent(attention.getCurrent());\n\n return attention.subscribeCurrent((newCurrent) => {\n setCurrent(newCurrent);\n });\n }, [attention]);\n\n return current;\n};\n\n/**\n * Computes HTML element attributes to apply so the attention system can detect changes.\n */\nconst useAttentionAttributes = (attendableId?: string) => {\n const { hasAttention } = useAttention(attendableId);\n return useMemo(() => {\n const attributes: Record<string, string | undefined> = { [ATTENDABLE_ATTRIBUTE]: attendableId };\n if (hasAttention) {\n attributes[ATTENTION_SOURCE_ATTRIBUTE] = 'true';\n }\n\n return attributes;\n }, [attendableId, hasAttention]);\n};\n\ntype RootAttentionProviderProps = PropsWithChildren<{\n attention?: AttentionManager;\n onChange?: (nextAttended: string[]) => void;\n}>;\n\nconst RootAttentionProvider = ({ children, attention: propsAttention, onChange }: RootAttentionProviderProps) => {\n const registry = useContext(RegistryContext);\n const attention = useDefaultValue(propsAttention, () => new AttentionManager(registry));\n\n const handleFocus = useCallback(\n (event: FocusEvent) => {\n // NOTE(thure): Use the following to debug focus movement across the app:\n log('focus', { related: event.relatedTarget, target: event.target });\n\n const selector = [\n '[data-attendable-id]',\n ...Array.from(document.querySelectorAll('[aria-controls]')).map(\n (el) => `[id=\"${el.getAttribute('aria-controls')}\"]`,\n ),\n ].join(',');\n const prev = attention.getCurrent();\n const next = getAttendables(selector, event.target);\n // TODO(wittjosiah): Not allowing empty state means that the attended item is not strictly guaranteed to be in the DOM.\n // Currently this depends on the deck in order to ensure that when the attended item is removed something else is attended.\n // Only update state if the result is different and not empty.\n if (next.length > 0 && (prev.length !== next.length || !!prev.find((id, index) => next[index] !== id))) {\n attention.update(next);\n onChange?.(next);\n }\n },\n [attention, onChange],\n );\n\n return (\n <AttentionContextProvider attention={attention}>\n <div className='contents' onFocusCapture={handleFocus}>\n {children}\n </div>\n </AttentionContextProvider>\n );\n};\n\nexport type AttendableContainerProps = ThemedClassName<\n ComponentPropsWithRef<'div'> & { id: string; asChild?: boolean }\n>;\n\n/**\n * Note that DeckPlugin and StackPlugin both handle attention on their own,\n * and when rendering content in those cases it is not necessary to also render an `AttendableContainer`.\n * This component is primarily for Storybook stories and other testing scenarios,\n * or the rare cases where an attendable entity is rendered outside of either of those plugins.\n */\nconst AttendableContainer = forwardRef<HTMLDivElement, AttendableContainerProps>(\n ({ id, classNames, children, asChild, ...props }, forwardedRef) => {\n const attentionAttrs = useAttentionAttributes(id);\n const Comp = asChild ? Slot : Primitive.div;\n return (\n <Comp\n role='none'\n {...props}\n {...attentionAttrs}\n className={mx('dx-attention-surface', props.tabIndex === 0 && 'dx-focus-ring-inset-over-all', classNames)}\n ref={forwardedRef}\n >\n {children}\n </Comp>\n );\n },\n);\n\nexport {\n RootAttentionProvider,\n AttendableContainer,\n useAttentionContext,\n useAttention,\n useAttended,\n useAttentionAttributes,\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useContext, useEffect, useMemo, useState } from 'react';\n\nimport { invariant } from '@dxos/invariant';\nimport { useDefaultValue } from '@dxos/react-hooks';\n\nimport {\n type SelectionMode,\n type SelectionResult,\n resolveSelection,\n selectionAspect,\n toggleSelection,\n} from '../../selection';\nimport { type AspectDef, ViewStateManager, createDefaultBackends } from '../../view-state';\n\nconst VIEW_STATE_NAME = 'ViewState';\n\ntype ViewStateContextValue = { manager?: ViewStateManager };\n\n// Default value lets consumers render outside a provider (isolated stories/tests) without throwing;\n// `manager` reads as `undefined` and hooks fall back to aspect defaults / no-op actions.\nconst [ViewStateContextProvider, useViewStateContext] = createContext<ViewStateContextValue>(VIEW_STATE_NAME, {\n manager: undefined,\n});\n\n/** Provides the per-context UI state manager. Replaces the former `SelectionProvider`. */\nexport const ViewStateProvider = ({\n children,\n manager: managerProp,\n}: PropsWithChildren<{ manager?: ViewStateManager }>) => {\n const registry = useContext(RegistryContext);\n const manager = useDefaultValue(\n managerProp,\n () => new ViewStateManager({ registry, backends: createDefaultBackends(registry) }),\n );\n return <ViewStateContextProvider manager={manager}>{children}</ViewStateContextProvider>;\n};\n\n/** Access the underlying ViewStateManager from context. Throws when used outside a `ViewStateProvider`. */\nexport const useViewStateManager = (): ViewStateManager => {\n const { manager } = useViewStateContext(VIEW_STATE_NAME);\n invariant(manager, 'useViewStateManager() requires a ViewStateProvider ancestor.');\n return manager;\n};\n\n/** Reactive read of an aspect value for a context; yields the aspect default when unset or unprovided. */\nexport const useViewState = <T,>(aspect: AspectDef<T>, contextId?: string): T => {\n const { manager } = useViewStateContext(VIEW_STATE_NAME);\n const [value, setValue] = useState<T>(() =>\n contextId && manager ? manager.get(aspect, contextId) : aspect.defaultValue(),\n );\n useEffect(() => {\n if (!contextId || !manager) {\n setValue(aspect.defaultValue());\n return;\n }\n setValue(manager.get(aspect, contextId));\n return manager.subscribe(aspect, contextId, setValue);\n }, [manager, aspect, contextId]);\n return value;\n};\n\nexport type UseViewStateActions<T> = {\n set: (value: T) => void;\n update: (fn: (prev: T) => T) => void;\n clear: () => void;\n};\n\nexport const useViewStateActions = <T,>(aspect: AspectDef<T>, contextId?: string): UseViewStateActions<T> => {\n const { manager } = useViewStateContext(VIEW_STATE_NAME);\n return useMemo<UseViewStateActions<T>>(\n () => ({\n set: (value) => {\n if (contextId) {\n manager?.set(aspect, contextId, value);\n }\n },\n update: (fn) => {\n if (contextId) {\n manager?.update(aspect, contextId, fn);\n }\n },\n clear: () => {\n if (contextId) {\n manager?.set(aspect, contextId, aspect.defaultValue());\n }\n },\n }),\n [manager, aspect, contextId],\n );\n};\n\n/** Resolved selection value for `contextId` in the requested `mode` (default `multi`). */\nexport const useSelection = <T extends SelectionMode>(contextId?: string, mode: T = 'multi' as T): SelectionResult<T> =>\n resolveSelection(useViewState(selectionAspect, contextId), mode);\n\nexport type UseSelectionActions = {\n single: (id: string) => void;\n multi: (ids: string[]) => void;\n range: (from: string, to: string) => void;\n toggle: (id: string) => void;\n clear: () => void;\n};\n\n/** Selection mutators for a single context, built on the generic ViewState actions. */\nexport const useSelectionActions = (contextId?: string): UseSelectionActions => {\n const { update, clear } = useViewStateActions(selectionAspect, contextId);\n return useMemo<UseSelectionActions>(\n () => ({\n single: (id) => update(() => ({ mode: 'single', id })),\n multi: (ids) => update(() => ({ mode: 'multi', ids: [...ids] })),\n range: (from, to) => update(() => ({ mode: 'range', from, to })),\n toggle: (id) => update((prev) => toggleSelection(prev, id)),\n clear,\n }),\n [update, clear],\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["RegistryContext", "createContext", "Primitive", "Slot", "React", "forwardRef", "useCallback", "useContext", "useEffect", "useMemo", "useState", "log", "useDefaultValue", "mx", "ATTENTION_NAME", "ATTENTION_SOURCE_ATTRIBUTE", "AttentionContextProvider", "attention", "undefined", "UNKNOWN_ATTENDABLE", "isAncestor", "isRelated", "setState", "useState", "useEffect", "attendableId", "subscribe", "newState", "useAttended", "setCurrent", "newCurrent", "attributes", "ATTENDABLE_ATTRIBUTE", "hasAttention", "useDefaultValue", "propsAttention", "AttentionManager", "registry", "handleFocus", "useCallback", "event", "log", "target", "selector", "join", "prev", "getCurrent", "next", "onChange", "div", "className", "onFocusCapture", "children", "Comp", "role", "attentionAttrs", "ref", "RootAttentionProvider", "RegistryContext", "createContext", "React", "useContext", "useEffect", "useMemo", "useState", "invariant", "useDefaultValue", "__dxlog_file", "VIEW_STATE_NAME", "createContext", "registry", "backends", "createDefaultBackends", "ViewStateContextProvider", "manager", "children", "defaultValue", "useEffect", "contextId", "setValue", "useMemo", "set", "value", "update", "clear", "aspect", "single", "mode", "id", "ids", "from", "to"]
|
|
7
|
+
}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AttendableContainer,
|
|
3
3
|
RootAttentionProvider,
|
|
4
|
-
|
|
4
|
+
ViewStateProvider,
|
|
5
5
|
useAttended,
|
|
6
6
|
useAttention,
|
|
7
7
|
useAttentionAttributes,
|
|
8
8
|
useAttentionContext,
|
|
9
|
-
|
|
9
|
+
useSelection,
|
|
10
10
|
useSelectionActions,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
useViewState,
|
|
12
|
+
useViewStateActions,
|
|
13
|
+
useViewStateManager
|
|
14
|
+
} from "./chunk-KCQFVRZ6.mjs";
|
|
13
15
|
import {
|
|
14
16
|
AttentionManager,
|
|
15
|
-
|
|
17
|
+
LocalBackend,
|
|
18
|
+
MemoryBackend,
|
|
16
19
|
SelectionSchema,
|
|
20
|
+
ViewStateManager,
|
|
21
|
+
createDefaultBackends,
|
|
17
22
|
defaultSelection,
|
|
23
|
+
defineViewState,
|
|
18
24
|
expandAttendableId,
|
|
19
25
|
getAttendables,
|
|
20
26
|
getLinkedVariant,
|
|
@@ -22,8 +28,11 @@ import {
|
|
|
22
28
|
getSegmentId,
|
|
23
29
|
getSelectionSet,
|
|
24
30
|
isLinkedSegment,
|
|
25
|
-
linkedSegment
|
|
26
|
-
|
|
31
|
+
linkedSegment,
|
|
32
|
+
resolveSelection,
|
|
33
|
+
selectionAspect,
|
|
34
|
+
toggleSelection
|
|
35
|
+
} from "./chunk-4HYAJ4IO.mjs";
|
|
27
36
|
|
|
28
37
|
// src/components/AttentionGlyph/AttentionGlyph.tsx
|
|
29
38
|
import React, { forwardRef, useMemo } from "react";
|
|
@@ -170,13 +179,17 @@ export {
|
|
|
170
179
|
AttendableContainer,
|
|
171
180
|
AttentionGlyph,
|
|
172
181
|
AttentionManager,
|
|
182
|
+
LocalBackend,
|
|
183
|
+
MemoryBackend,
|
|
173
184
|
RootAttentionProvider,
|
|
174
|
-
SelectionManager,
|
|
175
|
-
SelectionProvider,
|
|
176
185
|
SelectionSchema,
|
|
177
186
|
Syncing,
|
|
187
|
+
ViewStateManager,
|
|
188
|
+
ViewStateProvider,
|
|
178
189
|
advance,
|
|
190
|
+
createDefaultBackends,
|
|
179
191
|
defaultSelection,
|
|
192
|
+
defineViewState,
|
|
180
193
|
expandAttendableId,
|
|
181
194
|
getAttendables,
|
|
182
195
|
getLinkedVariant,
|
|
@@ -185,13 +198,18 @@ export {
|
|
|
185
198
|
getSelectionSet,
|
|
186
199
|
isLinkedSegment,
|
|
187
200
|
linkedSegment,
|
|
201
|
+
resolveSelection,
|
|
202
|
+
selectionAspect,
|
|
203
|
+
toggleSelection,
|
|
188
204
|
useArticleKeyboardNavigation,
|
|
189
205
|
useAttended,
|
|
190
206
|
useAttention,
|
|
191
207
|
useAttentionAttributes,
|
|
192
208
|
useAttentionContext,
|
|
193
|
-
|
|
209
|
+
useSelection,
|
|
194
210
|
useSelectionActions,
|
|
195
|
-
|
|
211
|
+
useViewState,
|
|
212
|
+
useViewStateActions,
|
|
213
|
+
useViewStateManager
|
|
196
214
|
};
|
|
197
215
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/AttentionGlyph/AttentionGlyph.tsx", "../../../src/useArticleKeyboardNavigation.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Primitive } from '@radix-ui/react-primitive';\nimport React, { type CSSProperties, type ComponentPropsWithRef, forwardRef, useMemo } from 'react';\n\nimport { Icon, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nconst attentionGlyphStyles = mx(\n 'inline-block rounded-xs w-3 h-3 bg-transparent text-accent-text transition-colors',\n '[[data-contains-attended=true]_&]:bg-attention-contains',\n '[[data-attention=true]_&]:bg-accent-bg',\n '[[data-attention=true]_&]:text-accent-fg',\n '[[aria-current][data-attention=true]_&]:bg-accent-bg',\n '[[aria-current][data-attention=true]_&]:text-accent-fg',\n '[[aria-selected=\"true\"][data-attention=true]_&]:bg-accent-bg',\n '[[aria-selected=\"true\"][data-attention=true]_&]:text-accent-fg',\n);\n\nconst presenceIconStyles = mx('w-3 h-3');\n\nconst PresenceOne = () => {\n return (\n <svg\n width='12'\n height='12'\n viewBox='0 0 12 12'\n className={presenceIconStyles}\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <circle cx='6' cy='6' r='2.5' fill='currentColor' />\n </svg>\n );\n};\n\nconst PresenceMany = () => {\n return (\n <svg\n width='12'\n height='12'\n viewBox='0 0 12 12'\n className={presenceIconStyles}\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M6.75 8.27311C7.38815 7.72296 7.79212 6.90866 7.79212 6C7.79212 5.09134 7.38815 4.27704 6.75 3.72689C7.06722 3.58122 7.42019 3.5 7.79212 3.5C9.17283 3.5 10.2921 4.61929 10.2921 6C10.2921 7.38071 9.17283 8.5 7.79212 8.5C7.42019 8.5 7.06723 8.41878 6.75 8.27311Z'\n fill='currentColor'\n />\n <circle cx='4.25' cy='6' r='2.5' fill='currentColor' />\n </svg>\n );\n};\n\nexport const Syncing = () => {\n const animationProps = useMemo<CSSProperties>(\n () => ({\n // Synchronize animations.\n animationDelay: `-${Date.now() % 2_000}ms`,\n }),\n [],\n );\n\n return (\n <div role='status' className='flex items-center'>\n <Icon\n icon='ph--circle-notch--bold'\n size={3}\n style={animationProps}\n classNames='text-subdued animate-[spin_2s_linear_infinite]'\n />\n </div>\n );\n};\n\nexport type AttentionGlyphProps = {\n attended?: boolean;\n containsAttended?: boolean;\n syncing?: boolean;\n presence?: 'none' | 'one' | 'many';\n} & ThemedClassName<Omit<ComponentPropsWithRef<typeof Primitive.span>, 'children'>>;\n\nexport const AttentionGlyph = forwardRef<HTMLSpanElement, AttentionGlyphProps>(\n ({ presence, attended, syncing, containsAttended, classNames, ...props }, forwardedRef) => {\n const icon = syncing ? (\n <Syncing />\n ) : presence === 'many' ? (\n <PresenceMany />\n ) : presence === 'one' ? (\n <PresenceOne />\n ) : null;\n\n return (\n <div className='flex group' data-attention={attended} data-contains-attended={containsAttended}>\n <span {...props} className={mx(attentionGlyphStyles, classNames)} ref={forwardedRef}>\n {icon}\n </span>\n </div>\n );\n },\n);\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { useEffect, useMemo } from 'react';\n\nimport { Keyboard } from '@dxos/keyboard';\n\nimport { useAttention } from './components';\n\n/**\n * Compute the id to select after pressing 'j' (delta = 1) or 'k' (delta = -1).\n * Clamps at the list ends — pressing 'j' on the last item keeps the last item\n * selected (vim-style), and 'k' on the first item keeps the first.\n *\n * When no current selection exists, returns the first id (for delta = 1) or the\n * last id (for delta = -1) so the user can enter the list with either key.\n */\nexport const advance = ({\n ids,\n currentId,\n delta,\n}: {\n ids: readonly string[];\n currentId: string | undefined;\n delta: 1 | -1;\n}): string | undefined => {\n if (ids.length === 0) {\n return undefined;\n }\n\n const idx = currentId ? ids.indexOf(currentId) : -1;\n if (idx === -1) {\n return delta === 1 ? ids[0] : ids[ids.length - 1];\n }\n\n const next = Math.max(0, Math.min(ids.length - 1, idx + delta));\n return ids[next];\n};\n\nexport type UseArticleKeyboardNavigationOptions<T> = {\n /** Stable id for the article (used as the keyboard context path). */\n articleId: string;\n /** Ordered list of selectable items as they appear in the article. */\n items: readonly T[];\n /** Currently-selected id, if any. */\n currentId: string | undefined;\n /** Extracts the id from an item. Defaults to `item.id`. */\n getId?: (item: T) => string;\n /** Called with the id to select when the user presses 'j' or 'k'. */\n onSelect: (id: string) => void;\n};\n\n/**\n * Wire 'j' (next) and 'k' (previous) keyboard shortcuts for an article that\n * navigates a list of items (e.g., messages, events). Bindings are scoped to\n * the article's keyboard context so they only fire while the article has attention.\n *\n * Pass the items directly; ids are derived via `getId` (defaults to `item.id`).\n * Clamps at list boundaries. Active only when the article is attended.\n */\nexport const useArticleKeyboardNavigation: {\n <T extends { id: string }>(options: UseArticleKeyboardNavigationOptions<T>): void;\n <T>(options: UseArticleKeyboardNavigationOptions<T> & { getId: (item: T) => string }): void;\n} = <T>({ articleId, items, currentId, getId, onSelect }: UseArticleKeyboardNavigationOptions<T>): void => {\n const { hasAttention } = useAttention(articleId);\n\n // `getId` is optional only when `T extends { id: string }` (enforced by the overloads above),\n // so the fallback is sound; the cast bridges the generic erased by the implementation signature.\n const ids = useMemo(() => items.map((item) => (getId ? getId(item) : (item as { id: string }).id)), [items, getId]);\n\n useEffect(() => {\n if (!hasAttention) {\n return;\n }\n\n const context = Keyboard.singleton.getContext(articleId);\n const prevContext = Keyboard.singleton.getCurrentContext();\n Keyboard.singleton.setCurrentContext(articleId);\n\n const nextBinding = {\n shortcut: 'j',\n handler: () => {\n const target = advance({ ids, currentId, delta: 1 });\n if (target !== undefined) {\n onSelect(target);\n }\n },\n data: 'Next item',\n disableInput: true,\n };\n const prevBinding = {\n shortcut: 'k',\n handler: () => {\n const target = advance({ ids, currentId, delta: -1 });\n if (target !== undefined) {\n onSelect(target);\n }\n },\n data: 'Previous item',\n disableInput: true,\n };\n\n context.bind(nextBinding);\n context.bind(prevBinding);\n\n return () => {\n context.unbind('j');\n context.unbind('k');\n // Restore the prior context if we were the ones who set it.\n if (Keyboard.singleton.getCurrentContext() === articleId) {\n Keyboard.singleton.setCurrentContext(prevContext);\n }\n };\n }, [articleId, ids, currentId, onSelect, hasAttention]);\n};\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["React", "forwardRef", "useMemo", "Icon", "mx", "attentionGlyphStyles", "presenceIconStyles", "PresenceOne", "svg", "width", "height", "viewBox", "className", "fill", "xmlns", "circle", "cx", "cy", "r", "PresenceMany", "path", "d", "Syncing", "animationProps", "animationDelay", "Date", "now", "div", "role", "icon", "size", "style", "classNames", "AttentionGlyph", "presence", "attended", "syncing", "containsAttended", "props", "forwardedRef", "data-attention", "data-contains-attended", "span", "ref", "useEffect", "useMemo", "Keyboard", "advance", "ids", "currentId", "delta", "length", "undefined", "idx", "indexOf", "next", "Math", "max", "min", "useArticleKeyboardNavigation", "articleId", "items", "getId", "onSelect", "hasAttention", "useAttention", "useMemo", "map", "item", "id", "useEffect", "context", "Keyboard", "singleton", "getContext", "prevContext", "getCurrentContext", "setCurrentContext", "nextBinding", "shortcut", "handler", "target", "data", "disableInput", "prevBinding", "bind", "unbind"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/attention.ts":{"bytes":25933,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true}],"format":"esm"},"src/components/AttentionGlyph/AttentionGlyph.tsx":{"bytes":9775,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/AttentionGlyph/index.ts":{"bytes":394,"imports":[{"path":"src/components/AttentionGlyph/AttentionGlyph.tsx","kind":"import-statement","original":"./AttentionGlyph"}],"format":"esm"},"src/components/AttentionProvider/AttentionProvider.tsx":{"bytes":18161,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/attention.ts","kind":"import-statement","original":"../../attention"}],"format":"esm"},"src/components/AttentionProvider/index.ts":{"bytes":401,"imports":[{"path":"src/components/AttentionProvider/AttentionProvider.tsx","kind":"import-statement","original":"./AttentionProvider"}],"format":"esm"},"src/selection.ts":{"bytes":27361,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/components/SelectionProvider/SelectionProvider.tsx":{"bytes":16598,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"src/selection.ts","kind":"import-statement","original":"../../selection"}],"format":"esm"},"src/components/SelectionProvider/index.ts":{"bytes":401,"imports":[{"path":"src/components/SelectionProvider/SelectionProvider.tsx","kind":"import-statement","original":"./SelectionProvider"}],"format":"esm"},"src/components/index.ts":{"bytes":616,"imports":[{"path":"src/components/AttentionGlyph/index.ts","kind":"import-statement","original":"./AttentionGlyph"},{"path":"src/components/AttentionProvider/index.ts","kind":"import-statement","original":"./AttentionProvider"},{"path":"src/components/SelectionProvider/index.ts","kind":"import-statement","original":"./SelectionProvider"}],"format":"esm"},"src/useArticleKeyboardNavigation.ts":{"bytes":11610,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/index.ts":{"bytes":700,"imports":[{"path":"src/attention.ts","kind":"import-statement","original":"./attention"},{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/selection.ts","kind":"import-statement","original":"./selection"},{"path":"src/useArticleKeyboardNavigation.ts","kind":"import-statement","original":"./useArticleKeyboardNavigation"}],"format":"esm"},"src/testing/decorators/withAttention.ts":{"bytes":3505,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/attention.ts","kind":"import-statement","original":"../../attention"},{"path":"src/components/index.ts","kind":"import-statement","original":"../../components"}],"format":"esm"},"src/testing/decorators/index.ts":{"bytes":389,"imports":[{"path":"src/testing/decorators/withAttention.ts","kind":"import-statement","original":"./withAttention"}],"format":"esm"},"src/testing/index.ts":{"bytes":382,"imports":[{"path":"src/testing/decorators/index.ts","kind":"import-statement","original":"./decorators"}],"format":"esm"},"src/types/index.ts":{"bytes":1067,"imports":[{"path":"src/attention.ts","kind":"import-statement","original":"../attention"},{"path":"src/selection.ts","kind":"import-statement","original":"../selection"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11016},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-I4VO2RQM.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-D2BLVJ6Z.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true}],"exports":["AttendableContainer","AttentionGlyph","AttentionManager","RootAttentionProvider","SelectionManager","SelectionProvider","SelectionSchema","Syncing","advance","defaultSelection","expandAttendableId","getAttendables","getLinkedVariant","getParentId","getSegmentId","getSelectionSet","isLinkedSegment","linkedSegment","useArticleKeyboardNavigation","useAttended","useAttention","useAttentionAttributes","useAttentionContext","useSelected","useSelectionActions","useSelectionManager"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/components/AttentionGlyph/AttentionGlyph.tsx":{"bytesInOutput":2911},"src/useArticleKeyboardNavigation.ts":{"bytesInOutput":1896}},"bytes":5966},"dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1875},"dist/lib/browser/testing/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-I4VO2RQM.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-D2BLVJ6Z.mjs","kind":"import-statement"},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["withAttention"],"entryPoint":"src/testing/index.ts","inputs":{"src/testing/decorators/withAttention.ts":{"bytesInOutput":610},"src/testing/index.ts":{"bytesInOutput":0}},"bytes":863},"dist/lib/browser/chunk-I4VO2RQM.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":17646},"dist/lib/browser/chunk-I4VO2RQM.mjs":{"imports":[{"path":"dist/lib/browser/chunk-D2BLVJ6Z.mjs","kind":"import-statement"},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true}],"exports":["AttendableContainer","RootAttentionProvider","SelectionProvider","useAttended","useAttention","useAttentionAttributes","useAttentionContext","useSelected","useSelectionActions","useSelectionManager"],"inputs":{"src/components/AttentionProvider/AttentionProvider.tsx":{"bytesInOutput":3786},"src/components/SelectionProvider/SelectionProvider.tsx":{"bytesInOutput":3529}},"bytes":7816},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-D2BLVJ6Z.mjs","kind":"import-statement"}],"exports":["AttentionManager","SelectionManager","SelectionSchema","defaultSelection","expandAttendableId","getAttendables","getLinkedVariant","getParentId","getSegmentId","getSelectionSet","isLinkedSegment","linkedSegment"],"entryPoint":"src/types/index.ts","inputs":{"src/types/index.ts":{"bytesInOutput":0}},"bytes":536},"dist/lib/browser/chunk-D2BLVJ6Z.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":25344},"dist/lib/browser/chunk-D2BLVJ6Z.mjs":{"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"exports":["AttentionManager","SelectionManager","SelectionSchema","defaultSelection","expandAttendableId","getAttendables","getLinkedVariant","getParentId","getSegmentId","getSelectionSet","isLinkedSegment","linkedSegment"],"inputs":{"src/attention.ts":{"bytesInOutput":5433},"src/selection.ts":{"bytesInOutput":6966}},"bytes":12721}}}
|
|
1
|
+
{"inputs":{"src/attention.ts":{"bytes":25933,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true}],"format":"esm"},"src/components/AttentionGlyph/AttentionGlyph.tsx":{"bytes":9775,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/components/AttentionGlyph/index.ts":{"bytes":394,"imports":[{"path":"src/components/AttentionGlyph/AttentionGlyph.tsx","kind":"import-statement","original":"./AttentionGlyph"}],"format":"esm"},"src/components/AttentionProvider/AttentionProvider.tsx":{"bytes":18161,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/attention.ts","kind":"import-statement","original":"../../attention"}],"format":"esm"},"src/components/AttentionProvider/index.ts":{"bytes":401,"imports":[{"path":"src/components/AttentionProvider/AttentionProvider.tsx","kind":"import-statement","original":"./AttentionProvider"}],"format":"esm"},"src/view-state/view-state.ts":{"bytes":8199,"imports":[],"format":"esm"},"src/view-state/backends.ts":{"bytes":19210,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true}],"format":"esm"},"src/view-state/index.ts":{"bytes":470,"imports":[{"path":"src/view-state/view-state.ts","kind":"import-statement","original":"./view-state"},{"path":"src/view-state/backends.ts","kind":"import-statement","original":"./backends"}],"format":"esm"},"src/selection.ts":{"bytes":12380,"imports":[{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"src/view-state/index.ts","kind":"import-statement","original":"./view-state"}],"format":"esm"},"src/components/ViewStateProvider/ViewStateProvider.tsx":{"bytes":14288,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"src/selection.ts","kind":"import-statement","original":"../../selection"},{"path":"src/view-state/index.ts","kind":"import-statement","original":"../../view-state"}],"format":"esm"},"src/components/ViewStateProvider/index.ts":{"bytes":401,"imports":[{"path":"src/components/ViewStateProvider/ViewStateProvider.tsx","kind":"import-statement","original":"./ViewStateProvider"}],"format":"esm"},"src/components/index.ts":{"bytes":616,"imports":[{"path":"src/components/AttentionGlyph/index.ts","kind":"import-statement","original":"./AttentionGlyph"},{"path":"src/components/AttentionProvider/index.ts","kind":"import-statement","original":"./AttentionProvider"},{"path":"src/components/ViewStateProvider/index.ts","kind":"import-statement","original":"./ViewStateProvider"}],"format":"esm"},"src/useArticleKeyboardNavigation.ts":{"bytes":11610,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"src/components/index.ts","kind":"import-statement","original":"./components"}],"format":"esm"},"src/index.ts":{"bytes":790,"imports":[{"path":"src/attention.ts","kind":"import-statement","original":"./attention"},{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/selection.ts","kind":"import-statement","original":"./selection"},{"path":"src/useArticleKeyboardNavigation.ts","kind":"import-statement","original":"./useArticleKeyboardNavigation"},{"path":"src/view-state/index.ts","kind":"import-statement","original":"./view-state"}],"format":"esm"},"src/testing/decorators/withAttention.ts":{"bytes":3505,"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/attention.ts","kind":"import-statement","original":"../../attention"},{"path":"src/components/index.ts","kind":"import-statement","original":"../../components"}],"format":"esm"},"src/testing/decorators/index.ts":{"bytes":389,"imports":[{"path":"src/testing/decorators/withAttention.ts","kind":"import-statement","original":"./withAttention"}],"format":"esm"},"src/testing/index.ts":{"bytes":382,"imports":[{"path":"src/testing/decorators/index.ts","kind":"import-statement","original":"./decorators"}],"format":"esm"},"src/types/index.ts":{"bytes":1166,"imports":[{"path":"src/attention.ts","kind":"import-statement","original":"../attention"},{"path":"src/selection.ts","kind":"import-statement","original":"../selection"},{"path":"src/view-state/index.ts","kind":"import-statement","original":"../view-state"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":11025},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-KCQFVRZ6.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-4HYAJ4IO.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true}],"exports":["AttendableContainer","AttentionGlyph","AttentionManager","LocalBackend","MemoryBackend","RootAttentionProvider","SelectionSchema","Syncing","ViewStateManager","ViewStateProvider","advance","createDefaultBackends","defaultSelection","defineViewState","expandAttendableId","getAttendables","getLinkedVariant","getParentId","getSegmentId","getSelectionSet","isLinkedSegment","linkedSegment","resolveSelection","selectionAspect","toggleSelection","useArticleKeyboardNavigation","useAttended","useAttention","useAttentionAttributes","useAttentionContext","useSelection","useSelectionActions","useViewState","useViewStateActions","useViewStateManager"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/components/AttentionGlyph/AttentionGlyph.tsx":{"bytesInOutput":2911},"src/useArticleKeyboardNavigation.ts":{"bytesInOutput":1896}},"bytes":6316},"dist/lib/browser/testing/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1875},"dist/lib/browser/testing/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-KCQFVRZ6.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-4HYAJ4IO.mjs","kind":"import-statement"},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["withAttention"],"entryPoint":"src/testing/index.ts","inputs":{"src/testing/decorators/withAttention.ts":{"bytesInOutput":610},"src/testing/index.ts":{"bytesInOutput":0}},"bytes":863},"dist/lib/browser/chunk-KCQFVRZ6.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":15598},"dist/lib/browser/chunk-KCQFVRZ6.mjs":{"imports":[{"path":"dist/lib/browser/chunk-4HYAJ4IO.mjs","kind":"import-statement"},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-primitive","kind":"import-statement","external":true},{"path":"@radix-ui/react-slot","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/react-hooks","kind":"import-statement","external":true}],"exports":["AttendableContainer","RootAttentionProvider","ViewStateProvider","useAttended","useAttention","useAttentionAttributes","useAttentionContext","useSelection","useSelectionActions","useViewState","useViewStateActions","useViewStateManager"],"inputs":{"src/components/AttentionProvider/AttentionProvider.tsx":{"bytesInOutput":3786},"src/components/ViewStateProvider/ViewStateProvider.tsx":{"bytesInOutput":3076}},"bytes":7466},"dist/lib/browser/types/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/types/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-4HYAJ4IO.mjs","kind":"import-statement"}],"exports":["AttentionManager","LocalBackend","MemoryBackend","SelectionSchema","ViewStateManager","createDefaultBackends","defaultSelection","defineViewState","expandAttendableId","getAttendables","getLinkedVariant","getParentId","getSegmentId","getSelectionSet","isLinkedSegment","linkedSegment","resolveSelection","selectionAspect","toggleSelection"],"entryPoint":"src/types/index.ts","inputs":{"src/types/index.ts":{"bytesInOutput":0}},"bytes":806},"dist/lib/browser/chunk-4HYAJ4IO.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":33376},"dist/lib/browser/chunk-4HYAJ4IO.mjs":{"imports":[{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"@effect-atom/atom-react","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true}],"exports":["AttentionManager","LocalBackend","MemoryBackend","SelectionSchema","ViewStateManager","createDefaultBackends","defaultSelection","defineViewState","expandAttendableId","getAttendables","getLinkedVariant","getParentId","getSegmentId","getSelectionSet","isLinkedSegment","linkedSegment","resolveSelection","selectionAspect","toggleSelection"],"inputs":{"src/attention.ts":{"bytesInOutput":5433},"src/view-state/view-state.ts":{"bytesInOutput":1053},"src/view-state/backends.ts":{"bytesInOutput":3752},"src/selection.ts":{"bytesInOutput":2312}},"bytes":13071}}}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RootAttentionProvider,
|
|
3
|
-
|
|
4
|
-
} from "../chunk-
|
|
3
|
+
ViewStateProvider
|
|
4
|
+
} from "../chunk-KCQFVRZ6.mjs";
|
|
5
5
|
import {
|
|
6
6
|
AttentionManager
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-4HYAJ4IO.mjs";
|
|
8
8
|
|
|
9
9
|
// src/testing/decorators/withAttention.ts
|
|
10
10
|
import { Registry, RegistryContext } from "@effect-atom/atom-react";
|
|
@@ -21,7 +21,7 @@ var withAttention = (initialAttendedId) => {
|
|
|
21
21
|
value: registry
|
|
22
22
|
}, createElement(RootAttentionProvider, {
|
|
23
23
|
attention
|
|
24
|
-
}, createElement(
|
|
24
|
+
}, createElement(ViewStateProvider, {}, createElement(Story))));
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
27
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/testing/decorators/withAttention.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { type Decorator } from '@storybook/react';\nimport { createElement, useMemo } from 'react';\n\nimport { AttentionManager } from '../../attention';\nimport { RootAttentionProvider,
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Registry, RegistryContext } from '@effect-atom/atom-react';\nimport { type Decorator } from '@storybook/react';\nimport { createElement, useMemo } from 'react';\n\nimport { AttentionManager } from '../../attention';\nimport { RootAttentionProvider, ViewStateProvider } from '../../components';\n\n/**\n * Storybook decorator that provides attention context.\n * @param initialAttendedId Optional ID to set as initially attended.\n */\nexport const withAttention = (initialAttendedId?: string): Decorator => {\n return (Story) => {\n const registry = useMemo(() => Registry.make(), []);\n const attention = useMemo(\n () => (initialAttendedId ? new AttentionManager(registry, [initialAttendedId]) : undefined),\n [registry],\n );\n\n return createElement(\n RegistryContext.Provider,\n { value: registry },\n createElement(RootAttentionProvider, { attention }, createElement(ViewStateProvider, {}, createElement(Story))),\n );\n };\n};\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;AAIA,SAASA,UAAUC,uBAAuB;AAE1C,SAASC,eAAeC,eAAe;AAShC,IAAMC,gBAAgB,CAACC,sBAAAA;AAC5B,SAAO,CAACC,UAAAA;AACN,UAAMC,WAAWC,QAAQ,MAAMC,SAASC,KAAI,GAAI,CAAA,CAAE;AAClD,UAAMC,YAAYH,QAChB,MAAOH,oBAAoB,IAAIO,iBAAiBL,UAAU;MAACF;KAAkB,IAAIQ,QACjF;MAACN;KAAS;AAGZ,WAAOO,cACLC,gBAAgBC,UAChB;MAAEC,OAAOV;IAAS,GAClBO,cAAcI,uBAAuB;MAAEP;IAAU,GAAGG,cAAcK,mBAAmB,CAAC,GAAGL,cAAcR,KAAAA,CAAAA,CAAAA,CAAAA;EAE3G;AACF;",
|
|
6
|
-
"names": ["Registry", "RegistryContext", "createElement", "useMemo", "withAttention", "initialAttendedId", "Story", "registry", "useMemo", "Registry", "make", "attention", "AttentionManager", "undefined", "createElement", "RegistryContext", "Provider", "value", "RootAttentionProvider", "
|
|
6
|
+
"names": ["Registry", "RegistryContext", "createElement", "useMemo", "withAttention", "initialAttendedId", "Story", "registry", "useMemo", "Registry", "make", "attention", "AttentionManager", "undefined", "createElement", "RegistryContext", "Provider", "value", "RootAttentionProvider", "ViewStateProvider"]
|
|
7
7
|
}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AttentionManager,
|
|
3
|
-
|
|
3
|
+
LocalBackend,
|
|
4
|
+
MemoryBackend,
|
|
4
5
|
SelectionSchema,
|
|
6
|
+
ViewStateManager,
|
|
7
|
+
createDefaultBackends,
|
|
5
8
|
defaultSelection,
|
|
9
|
+
defineViewState,
|
|
6
10
|
expandAttendableId,
|
|
7
11
|
getAttendables,
|
|
8
12
|
getLinkedVariant,
|
|
@@ -10,13 +14,20 @@ import {
|
|
|
10
14
|
getSegmentId,
|
|
11
15
|
getSelectionSet,
|
|
12
16
|
isLinkedSegment,
|
|
13
|
-
linkedSegment
|
|
14
|
-
|
|
17
|
+
linkedSegment,
|
|
18
|
+
resolveSelection,
|
|
19
|
+
selectionAspect,
|
|
20
|
+
toggleSelection
|
|
21
|
+
} from "../chunk-4HYAJ4IO.mjs";
|
|
15
22
|
export {
|
|
16
23
|
AttentionManager,
|
|
17
|
-
|
|
24
|
+
LocalBackend,
|
|
25
|
+
MemoryBackend,
|
|
18
26
|
SelectionSchema,
|
|
27
|
+
ViewStateManager,
|
|
28
|
+
createDefaultBackends,
|
|
19
29
|
defaultSelection,
|
|
30
|
+
defineViewState,
|
|
20
31
|
expandAttendableId,
|
|
21
32
|
getAttendables,
|
|
22
33
|
getLinkedVariant,
|
|
@@ -24,6 +35,9 @@ export {
|
|
|
24
35
|
getSegmentId,
|
|
25
36
|
getSelectionSet,
|
|
26
37
|
isLinkedSegment,
|
|
27
|
-
linkedSegment
|
|
38
|
+
linkedSegment,
|
|
39
|
+
resolveSelection,
|
|
40
|
+
selectionAspect,
|
|
41
|
+
toggleSelection
|
|
28
42
|
};
|
|
29
43
|
//# sourceMappingURL=index.mjs.map
|