@assistant-ui/store 0.0.2 → 0.0.4
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/README.md +59 -262
- package/dist/AssistantIf.d.ts +4 -6
- package/dist/AssistantIf.d.ts.map +1 -1
- package/dist/AssistantIf.js +1 -4
- package/dist/AssistantIf.js.map +1 -1
- package/dist/Derived.d.ts +34 -0
- package/dist/Derived.d.ts.map +1 -0
- package/dist/Derived.js +11 -0
- package/dist/Derived.js.map +1 -0
- package/dist/attachDefaultPeers.d.ts +56 -0
- package/dist/attachDefaultPeers.d.ts.map +1 -0
- package/dist/attachDefaultPeers.js +22 -0
- package/dist/attachDefaultPeers.js.map +1 -0
- package/dist/index.d.ts +10 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -13
- package/dist/index.js.map +1 -1
- package/dist/tapClientList.d.ts +24 -0
- package/dist/tapClientList.d.ts.map +1 -0
- package/dist/tapClientList.js +72 -0
- package/dist/tapClientList.js.map +1 -0
- package/dist/tapClientLookup.d.ts +11 -0
- package/dist/tapClientLookup.d.ts.map +1 -0
- package/dist/tapClientLookup.js +42 -0
- package/dist/tapClientLookup.js.map +1 -0
- package/dist/tapClientResource.d.ts +24 -0
- package/dist/tapClientResource.d.ts.map +1 -0
- package/dist/tapClientResource.js +100 -0
- package/dist/tapClientResource.js.map +1 -0
- package/dist/types/client.d.ts +117 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +1 -0
- package/dist/types/events.d.ts +33 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +12 -0
- package/dist/types/events.js.map +1 -0
- package/dist/useAssistantClient.d.ts +13 -46
- package/dist/useAssistantClient.d.ts.map +1 -1
- package/dist/useAssistantClient.js +177 -137
- package/dist/useAssistantClient.js.map +1 -1
- package/dist/useAssistantEvent.d.ts +2 -2
- package/dist/useAssistantEvent.d.ts.map +1 -1
- package/dist/useAssistantEvent.js +3 -6
- package/dist/useAssistantEvent.js.map +1 -1
- package/dist/useAssistantState.d.ts +2 -2
- package/dist/useAssistantState.d.ts.map +1 -1
- package/dist/useAssistantState.js +7 -36
- package/dist/useAssistantState.js.map +1 -1
- package/dist/utils/BaseProxyHandler.d.ts +23 -0
- package/dist/utils/BaseProxyHandler.d.ts.map +1 -0
- package/dist/utils/BaseProxyHandler.js +41 -0
- package/dist/utils/BaseProxyHandler.js.map +1 -0
- package/dist/utils/NotificationManager.d.ts +11 -0
- package/dist/utils/NotificationManager.d.ts.map +1 -0
- package/dist/utils/NotificationManager.js +81 -0
- package/dist/utils/NotificationManager.js.map +1 -0
- package/dist/utils/StoreResource.d.ts +14 -0
- package/dist/utils/StoreResource.d.ts.map +1 -0
- package/dist/utils/StoreResource.js +23 -0
- package/dist/utils/StoreResource.js.map +1 -0
- package/dist/utils/proxied-assistant-state.d.ts +8 -0
- package/dist/utils/proxied-assistant-state.d.ts.map +1 -0
- package/dist/utils/proxied-assistant-state.js +41 -0
- package/dist/utils/proxied-assistant-state.js.map +1 -0
- package/dist/{AssistantContext.d.ts → utils/react-assistant-context.d.ts} +6 -6
- package/dist/utils/react-assistant-context.d.ts.map +1 -0
- package/dist/utils/react-assistant-context.js +73 -0
- package/dist/utils/react-assistant-context.js.map +1 -0
- package/dist/utils/splitClients.d.ts +28 -0
- package/dist/utils/splitClients.d.ts.map +1 -0
- package/dist/utils/splitClients.js +37 -0
- package/dist/utils/splitClients.js.map +1 -0
- package/dist/utils/tap-assistant-context.d.ts +19 -0
- package/dist/utils/tap-assistant-context.d.ts.map +1 -0
- package/dist/utils/tap-assistant-context.js +37 -0
- package/dist/utils/tap-assistant-context.js.map +1 -0
- package/dist/utils/tap-client-stack-context.d.ts +23 -0
- package/dist/utils/tap-client-stack-context.d.ts.map +1 -0
- package/dist/utils/tap-client-stack-context.js +30 -0
- package/dist/utils/tap-client-stack-context.js.map +1 -0
- package/package.json +3 -3
- package/src/AssistantIf.tsx +3 -11
- package/src/Derived.ts +46 -0
- package/src/attachDefaultPeers.ts +78 -0
- package/src/index.ts +19 -22
- package/src/tapClientList.ts +105 -0
- package/src/tapClientLookup.ts +56 -0
- package/src/tapClientResource.ts +152 -0
- package/src/types/client.ts +186 -0
- package/src/types/events.ts +77 -0
- package/src/useAssistantClient.tsx +252 -234
- package/src/useAssistantEvent.ts +6 -9
- package/src/useAssistantState.tsx +10 -48
- package/src/utils/BaseProxyHandler.ts +50 -0
- package/src/utils/NotificationManager.ts +110 -0
- package/src/utils/StoreResource.ts +36 -0
- package/src/utils/proxied-assistant-state.tsx +53 -0
- package/src/utils/react-assistant-context.tsx +107 -0
- package/src/utils/splitClients.ts +85 -0
- package/src/utils/tap-assistant-context.ts +59 -0
- package/src/utils/tap-client-stack-context.ts +51 -0
- package/dist/AssistantContext.d.ts.map +0 -1
- package/dist/AssistantContext.js +0 -45
- package/dist/AssistantContext.js.map +0 -1
- package/dist/DerivedScope.d.ts +0 -20
- package/dist/DerivedScope.d.ts.map +0 -1
- package/dist/DerivedScope.js +0 -11
- package/dist/DerivedScope.js.map +0 -1
- package/dist/EventContext.d.ts +0 -61
- package/dist/EventContext.d.ts.map +0 -1
- package/dist/EventContext.js +0 -62
- package/dist/EventContext.js.map +0 -1
- package/dist/ScopeRegistry.d.ts +0 -41
- package/dist/ScopeRegistry.d.ts.map +0 -1
- package/dist/ScopeRegistry.js +0 -17
- package/dist/ScopeRegistry.js.map +0 -1
- package/dist/StoreContext.d.ts +0 -9
- package/dist/StoreContext.d.ts.map +0 -1
- package/dist/StoreContext.js +0 -20
- package/dist/StoreContext.js.map +0 -1
- package/dist/asStore.d.ts +0 -20
- package/dist/asStore.d.ts.map +0 -1
- package/dist/asStore.js +0 -23
- package/dist/asStore.js.map +0 -1
- package/dist/tapApi.d.ts +0 -36
- package/dist/tapApi.d.ts.map +0 -1
- package/dist/tapApi.js +0 -52
- package/dist/tapApi.js.map +0 -1
- package/dist/tapLookupResources.d.ts +0 -44
- package/dist/tapLookupResources.d.ts.map +0 -1
- package/dist/tapLookupResources.js +0 -21
- package/dist/tapLookupResources.js.map +0 -1
- package/dist/tapStoreList.d.ts +0 -76
- package/dist/tapStoreList.d.ts.map +0 -1
- package/dist/tapStoreList.js +0 -46
- package/dist/tapStoreList.js.map +0 -1
- package/dist/types.d.ts +0 -84
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -1
- package/dist/utils/splitScopes.d.ts +0 -24
- package/dist/utils/splitScopes.d.ts.map +0 -1
- package/dist/utils/splitScopes.js +0 -18
- package/dist/utils/splitScopes.js.map +0 -1
- package/src/AssistantContext.tsx +0 -64
- package/src/DerivedScope.ts +0 -23
- package/src/EventContext.ts +0 -187
- package/src/ScopeRegistry.ts +0 -58
- package/src/StoreContext.ts +0 -28
- package/src/asStore.ts +0 -40
- package/src/tapApi.ts +0 -91
- package/src/tapLookupResources.ts +0 -62
- package/src/tapStoreList.ts +0 -133
- package/src/types.ts +0 -119
- package/src/utils/splitScopes.ts +0 -38
- /package/dist/{types.js.map → types/client.js.map} +0 -0
package/dist/DerivedScope.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ScopeDefinition, DerivedScopeProps } from "./types";
|
|
2
|
-
/**
|
|
3
|
-
* Creates a derived scope field that memoizes based on source and query.
|
|
4
|
-
* The get callback always calls the most recent version (useEffectEvent pattern).
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* const client = useAssistantClient({
|
|
9
|
-
* message: DerivedScope({
|
|
10
|
-
* source: "thread",
|
|
11
|
-
* query: { index: 0 },
|
|
12
|
-
* get: (client) => client.thread().message({ index: 0 }),
|
|
13
|
-
* }),
|
|
14
|
-
* });
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
export declare const DerivedScope: <T extends ScopeDefinition>(props: DerivedScopeProps<T>, options?: {
|
|
18
|
-
key?: string | number;
|
|
19
|
-
} | undefined) => import("@assistant-ui/tap").ResourceElement<null, DerivedScopeProps<T>>;
|
|
20
|
-
//# sourceMappingURL=DerivedScope.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DerivedScope.d.ts","sourceRoot":"","sources":["../src/DerivedScope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAElE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,GACtB,CAAC,SAAS,eAAe;;yFAG3B,CAAC"}
|
package/dist/DerivedScope.js
DELETED
package/dist/DerivedScope.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/DerivedScope.ts"],"sourcesContent":["import { resource } from \"@assistant-ui/tap\";\nimport type { ScopeDefinition, DerivedScopeProps } from \"./types\";\n\n/**\n * Creates a derived scope field that memoizes based on source and query.\n * The get callback always calls the most recent version (useEffectEvent pattern).\n *\n * @example\n * ```typescript\n * const client = useAssistantClient({\n * message: DerivedScope({\n * source: \"thread\",\n * query: { index: 0 },\n * get: (client) => client.thread().message({ index: 0 }),\n * }),\n * });\n * ```\n */\nexport const DerivedScope = resource(\n <T extends ScopeDefinition>(_config: DerivedScopeProps<T>): null => {\n return null;\n },\n);\n"],"mappings":";AAAA,SAAS,gBAAgB;AAkBlB,IAAM,eAAe;AAAA,EAC1B,CAA4B,YAAwC;AAClE,WAAO;AAAA,EACT;AACF;","names":[]}
|
package/dist/EventContext.d.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { AssistantScopes, Unsubscribe } from "./types";
|
|
2
|
-
/**
|
|
3
|
-
* Module augmentation interface for event scope configuration.
|
|
4
|
-
* Maps event sources to their parent scopes.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* declare module "@assistant-ui/store" {
|
|
9
|
-
* interface AssistantEventScopeConfig {
|
|
10
|
-
* composer: "thread" | "message";
|
|
11
|
-
* thread: never;
|
|
12
|
-
* }
|
|
13
|
-
* }
|
|
14
|
-
* ```
|
|
15
|
-
*/
|
|
16
|
-
export interface AssistantEventScopeConfig {
|
|
17
|
-
}
|
|
18
|
-
type UnionToIntersection<U> = (U extends unknown ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
19
|
-
/**
|
|
20
|
-
* Event map derived from scope event definitions
|
|
21
|
-
*/
|
|
22
|
-
export type ScopeEventMap = UnionToIntersection<{
|
|
23
|
-
[K in keyof AssistantScopes]: AssistantScopes[K] extends {
|
|
24
|
-
events: infer E;
|
|
25
|
-
} ? E extends Record<string, unknown> ? E : never : never;
|
|
26
|
-
}[keyof AssistantScopes]>;
|
|
27
|
-
type WildcardPayload = {
|
|
28
|
-
[K in keyof ScopeEventMap]: {
|
|
29
|
-
event: K;
|
|
30
|
-
payload: ScopeEventMap[K];
|
|
31
|
-
};
|
|
32
|
-
}[keyof ScopeEventMap];
|
|
33
|
-
export type AssistantEventMap = ScopeEventMap & {
|
|
34
|
-
"*": WildcardPayload;
|
|
35
|
-
};
|
|
36
|
-
export type AssistantEvent = keyof AssistantEventMap;
|
|
37
|
-
export type EventSource<T extends AssistantEvent = AssistantEvent> = T extends `${infer Source}.${string}` ? Source : never;
|
|
38
|
-
export type SourceByScope<TScope extends AssistantEventScope<AssistantEvent>> = (TScope extends "*" ? EventSource : never) | (TScope extends keyof AssistantEventScopeConfig ? TScope : never) | {
|
|
39
|
-
[K in keyof AssistantEventScopeConfig]: TScope extends AssistantEventScopeConfig[K] ? K : never;
|
|
40
|
-
}[keyof AssistantEventScopeConfig];
|
|
41
|
-
export type AssistantEventScope<TEvent extends AssistantEvent> = "*" | EventSource<TEvent> | (EventSource<TEvent> extends keyof AssistantEventScopeConfig ? AssistantEventScopeConfig[EventSource<TEvent>] : never);
|
|
42
|
-
export type AssistantEventSelector<TEvent extends AssistantEvent> = TEvent | {
|
|
43
|
-
scope: AssistantEventScope<TEvent>;
|
|
44
|
-
event: TEvent;
|
|
45
|
-
};
|
|
46
|
-
export declare const normalizeEventSelector: <TEvent extends AssistantEvent>(selector: AssistantEventSelector<TEvent>) => {
|
|
47
|
-
scope: AssistantEventScope<TEvent>;
|
|
48
|
-
event: TEvent;
|
|
49
|
-
};
|
|
50
|
-
export declare const checkEventScope: <TEvent extends AssistantEvent, TExpectedScope extends AssistantEventScope<AssistantEvent>>(expectedScope: TExpectedScope, scope: AssistantEventScope<TEvent>, _event: TEvent) => _event is Extract<TEvent, `${SourceByScope<TExpectedScope>}.${string}`>;
|
|
51
|
-
export type AssistantEventCallback<TEvent extends AssistantEvent> = (payload: AssistantEventMap[TEvent]) => void;
|
|
52
|
-
export type EventManager = {
|
|
53
|
-
on<TEvent extends AssistantEvent>(event: TEvent, callback: AssistantEventCallback<TEvent>): Unsubscribe;
|
|
54
|
-
emit<TEvent extends Exclude<AssistantEvent, "*">>(event: TEvent, payload: AssistantEventMap[TEvent]): void;
|
|
55
|
-
};
|
|
56
|
-
export declare const EventManager: () => import("@assistant-ui/tap").ResourceElement<{
|
|
57
|
-
on: <TEvent extends AssistantEvent>(event: TEvent, callback: AssistantEventCallback<TEvent>) => () => void;
|
|
58
|
-
emit: <TEvent extends Exclude<AssistantEvent, "*">>(event: TEvent, payload: AssistantEventMap[TEvent]) => void;
|
|
59
|
-
}, undefined>;
|
|
60
|
-
export {};
|
|
61
|
-
//# sourceMappingURL=EventContext.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventContext.d.ts","sourceRoot":"","sources":["../src/EventContext.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE5D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,yBAAyB;CAAG;AAE7C,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAC5B,CAAC,SAAS,OAAO,GACb,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GACd,KAAK,CACV,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAC1B,CAAC,GACD,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,mBAAmB,CAC7C;KACG,CAAC,IAAI,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS;QACvD,MAAM,EAAE,MAAM,CAAC,CAAC;KACjB,GACG,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,CAAC,GACD,KAAK,GACP,KAAK;CACV,CAAC,MAAM,eAAe,CAAC,CACzB,CAAC;AAEF,KAAK,eAAe,GAAG;KACpB,CAAC,IAAI,MAAM,aAAa,GAAG;QAC1B,KAAK,EAAE,CAAC,CAAC;QACT,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;KAC3B;CACF,CAAC,MAAM,aAAa,CAAC,CAAC;AAEvB,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAE9C,GAAG,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAC/D,CAAC,SAAS,GAAG,MAAM,MAAM,IAAI,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzD,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,mBAAmB,CAAC,cAAc,CAAC,IACxE,CAAC,MAAM,SAAS,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,GAC1C,CAAC,MAAM,SAAS,MAAM,yBAAyB,GAAG,MAAM,GAAG,KAAK,CAAC,GACjE;KACG,CAAC,IAAI,MAAM,yBAAyB,GAAG,MAAM,SAAS,yBAAyB,CAAC,CAAC,CAAC,GAC/E,CAAC,GACD,KAAK;CACV,CAAC,MAAM,yBAAyB,CAAC,CAAC;AAEvC,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,cAAc,IACzD,GAAG,GACH,WAAW,CAAC,MAAM,CAAC,GACnB,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,MAAM,yBAAyB,GACxD,yBAAyB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAC9C,KAAK,CAAC,CAAC;AAEf,MAAM,MAAM,sBAAsB,CAAC,MAAM,SAAS,cAAc,IAC5D,MAAM,GACN;IACE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,cAAc,EAClE,UAAU,sBAAsB,CAAC,MAAM,CAAC;;;CAczC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,cAAc,EAC7B,cAAc,SAAS,mBAAmB,CAAC,cAAc,CAAC,EAE1D,eAAe,cAAc,EAC7B,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAClC,QAAQ,MAAM,KACb,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,MAAM,EAAE,CAExE,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,MAAM,SAAS,cAAc,IAAI,CAClE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAC/B,IAAI,CAAC;AAEV,MAAM,MAAM,YAAY,GAAG;IACzB,EAAE,CAAC,MAAM,SAAS,cAAc,EAC9B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,GACvC,WAAW,CAAC;IACf,IAAI,CAAC,MAAM,SAAS,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,EAC9C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACjC,IAAI,CAAC;CACT,CAAC;AAeF,eAAO,MAAM,YAAY;SAvBpB,MAAM,SAAS,cAAc;WAI3B,MAAM,SAAS,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;aAmEhD,CAAC"}
|
package/dist/EventContext.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// src/EventContext.ts
|
|
2
|
-
import { resource, tapMemo } from "@assistant-ui/tap";
|
|
3
|
-
var normalizeEventSelector = (selector) => {
|
|
4
|
-
if (typeof selector === "string") {
|
|
5
|
-
const source = selector.split(".")[0];
|
|
6
|
-
return {
|
|
7
|
-
scope: source,
|
|
8
|
-
event: selector
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
return {
|
|
12
|
-
scope: selector.scope,
|
|
13
|
-
event: selector.event
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
var checkEventScope = (expectedScope, scope, _event) => {
|
|
17
|
-
return scope === expectedScope;
|
|
18
|
-
};
|
|
19
|
-
var EventManager = resource(() => {
|
|
20
|
-
const events = tapMemo(() => {
|
|
21
|
-
const listeners = /* @__PURE__ */ new Map();
|
|
22
|
-
return {
|
|
23
|
-
on: (event, callback) => {
|
|
24
|
-
if (!listeners.has(event)) {
|
|
25
|
-
listeners.set(event, /* @__PURE__ */ new Set());
|
|
26
|
-
}
|
|
27
|
-
const eventListeners = listeners.get(event);
|
|
28
|
-
eventListeners.add(callback);
|
|
29
|
-
return () => {
|
|
30
|
-
eventListeners.delete(callback);
|
|
31
|
-
if (eventListeners.size === 0) {
|
|
32
|
-
listeners.delete(event);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
},
|
|
36
|
-
emit: (event, payload) => {
|
|
37
|
-
const eventListeners = listeners.get(event);
|
|
38
|
-
const wildcardListeners = listeners.get("*");
|
|
39
|
-
if (!eventListeners && !wildcardListeners) return;
|
|
40
|
-
queueMicrotask(() => {
|
|
41
|
-
if (eventListeners) {
|
|
42
|
-
for (const callback of eventListeners) {
|
|
43
|
-
callback(payload);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
if (wildcardListeners) {
|
|
47
|
-
for (const callback of wildcardListeners) {
|
|
48
|
-
callback({ event, payload });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}, []);
|
|
55
|
-
return events;
|
|
56
|
-
});
|
|
57
|
-
export {
|
|
58
|
-
EventManager,
|
|
59
|
-
checkEventScope,
|
|
60
|
-
normalizeEventSelector
|
|
61
|
-
};
|
|
62
|
-
//# sourceMappingURL=EventContext.js.map
|
package/dist/EventContext.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/EventContext.ts"],"sourcesContent":["import { resource, tapMemo } from \"@assistant-ui/tap\";\nimport type { AssistantScopes, Unsubscribe } from \"./types\";\n\n/**\n * Module augmentation interface for event scope configuration.\n * Maps event sources to their parent scopes.\n *\n * @example\n * ```typescript\n * declare module \"@assistant-ui/store\" {\n * interface AssistantEventScopeConfig {\n * composer: \"thread\" | \"message\";\n * thread: never;\n * }\n * }\n * ```\n */\nexport interface AssistantEventScopeConfig {}\n\ntype UnionToIntersection<U> = (\n U extends unknown\n ? (x: U) => void\n : never\n) extends (x: infer I) => void\n ? I\n : never;\n\n/**\n * Event map derived from scope event definitions\n */\nexport type ScopeEventMap = UnionToIntersection<\n {\n [K in keyof AssistantScopes]: AssistantScopes[K] extends {\n events: infer E;\n }\n ? E extends Record<string, unknown>\n ? E\n : never\n : never;\n }[keyof AssistantScopes]\n>;\n\ntype WildcardPayload = {\n [K in keyof ScopeEventMap]: {\n event: K;\n payload: ScopeEventMap[K];\n };\n}[keyof ScopeEventMap];\n\nexport type AssistantEventMap = ScopeEventMap & {\n // Catch-all\n \"*\": WildcardPayload;\n};\n\nexport type AssistantEvent = keyof AssistantEventMap;\n\nexport type EventSource<T extends AssistantEvent = AssistantEvent> =\n T extends `${infer Source}.${string}` ? Source : never;\n\nexport type SourceByScope<TScope extends AssistantEventScope<AssistantEvent>> =\n | (TScope extends \"*\" ? EventSource : never)\n | (TScope extends keyof AssistantEventScopeConfig ? TScope : never)\n | {\n [K in keyof AssistantEventScopeConfig]: TScope extends AssistantEventScopeConfig[K]\n ? K\n : never;\n }[keyof AssistantEventScopeConfig];\n\nexport type AssistantEventScope<TEvent extends AssistantEvent> =\n | \"*\"\n | EventSource<TEvent>\n | (EventSource<TEvent> extends keyof AssistantEventScopeConfig\n ? AssistantEventScopeConfig[EventSource<TEvent>]\n : never);\n\nexport type AssistantEventSelector<TEvent extends AssistantEvent> =\n | TEvent\n | {\n scope: AssistantEventScope<TEvent>;\n event: TEvent;\n };\n\nexport const normalizeEventSelector = <TEvent extends AssistantEvent>(\n selector: AssistantEventSelector<TEvent>,\n) => {\n if (typeof selector === \"string\") {\n const source = selector.split(\".\")[0] as AssistantEventScope<TEvent>;\n return {\n scope: source,\n event: selector,\n };\n }\n\n return {\n scope: selector.scope,\n event: selector.event,\n };\n};\n\nexport const checkEventScope = <\n TEvent extends AssistantEvent,\n TExpectedScope extends AssistantEventScope<AssistantEvent>,\n>(\n expectedScope: TExpectedScope,\n scope: AssistantEventScope<TEvent>,\n _event: TEvent,\n): _event is Extract<TEvent, `${SourceByScope<TExpectedScope>}.${string}`> => {\n return scope === expectedScope;\n};\n\nexport type AssistantEventCallback<TEvent extends AssistantEvent> = (\n payload: AssistantEventMap[TEvent],\n) => void;\n\nexport type EventManager = {\n on<TEvent extends AssistantEvent>(\n event: TEvent,\n callback: AssistantEventCallback<TEvent>,\n ): Unsubscribe;\n emit<TEvent extends Exclude<AssistantEvent, \"*\">>(\n event: TEvent,\n payload: AssistantEventMap[TEvent],\n ): void;\n};\n\ntype ListenerMap = Omit<\n Map<AssistantEvent, Set<AssistantEventCallback<AssistantEvent>>>,\n \"get\" | \"set\"\n> & {\n get<TEvent extends AssistantEvent>(\n event: TEvent,\n ): Set<AssistantEventCallback<TEvent>> | undefined;\n set<TEvent extends AssistantEvent>(\n event: TEvent,\n value: Set<AssistantEventCallback<TEvent>>,\n ): void;\n};\n\nexport const EventManager = resource(() => {\n const events = tapMemo(() => {\n const listeners: ListenerMap = new Map();\n\n return {\n on: (event, callback) => {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n\n const eventListeners = listeners.get(event)!;\n eventListeners.add(callback);\n\n return () => {\n eventListeners.delete(callback);\n if (eventListeners.size === 0) {\n listeners.delete(event);\n }\n };\n },\n\n emit: (event, payload) => {\n const eventListeners = listeners.get(event);\n const wildcardListeners = listeners.get(\"*\");\n\n if (!eventListeners && !wildcardListeners) return;\n\n // make sure state updates flush\n queueMicrotask(() => {\n // Emit to specific event listeners\n if (eventListeners) {\n for (const callback of eventListeners) {\n callback(payload);\n }\n }\n\n // Emit to wildcard listeners\n if (wildcardListeners) {\n for (const callback of wildcardListeners) {\n callback({ event, payload } as any);\n }\n }\n });\n },\n } satisfies EventManager;\n }, []);\n\n return events;\n});\n"],"mappings":";AAAA,SAAS,UAAU,eAAe;AAkF3B,IAAM,yBAAyB,CACpC,aACG;AACH,MAAI,OAAO,aAAa,UAAU;AAChC,UAAM,SAAS,SAAS,MAAM,GAAG,EAAE,CAAC;AACpC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,SAAS;AAAA,IAChB,OAAO,SAAS;AAAA,EAClB;AACF;AAEO,IAAM,kBAAkB,CAI7B,eACA,OACA,WAC4E;AAC5E,SAAO,UAAU;AACnB;AA8BO,IAAM,eAAe,SAAS,MAAM;AACzC,QAAM,SAAS,QAAQ,MAAM;AAC3B,UAAM,YAAyB,oBAAI,IAAI;AAEvC,WAAO;AAAA,MACL,IAAI,CAAC,OAAO,aAAa;AACvB,YAAI,CAAC,UAAU,IAAI,KAAK,GAAG;AACzB,oBAAU,IAAI,OAAO,oBAAI,IAAI,CAAC;AAAA,QAChC;AAEA,cAAM,iBAAiB,UAAU,IAAI,KAAK;AAC1C,uBAAe,IAAI,QAAQ;AAE3B,eAAO,MAAM;AACX,yBAAe,OAAO,QAAQ;AAC9B,cAAI,eAAe,SAAS,GAAG;AAC7B,sBAAU,OAAO,KAAK;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,CAAC,OAAO,YAAY;AACxB,cAAM,iBAAiB,UAAU,IAAI,KAAK;AAC1C,cAAM,oBAAoB,UAAU,IAAI,GAAG;AAE3C,YAAI,CAAC,kBAAkB,CAAC,kBAAmB;AAG3C,uBAAe,MAAM;AAEnB,cAAI,gBAAgB;AAClB,uBAAW,YAAY,gBAAgB;AACrC,uBAAS,OAAO;AAAA,YAClB;AAAA,UACF;AAGA,cAAI,mBAAmB;AACrB,uBAAW,YAAY,mBAAmB;AACxC,uBAAS,EAAE,OAAO,QAAQ,CAAQ;AAAA,YACpC;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO;AACT,CAAC;","names":[]}
|
package/dist/ScopeRegistry.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { AssistantScopes } from "./types";
|
|
2
|
-
import type { ResourceElement } from "@assistant-ui/tap";
|
|
3
|
-
type ScopeRegistryEntry<K extends keyof AssistantScopes> = {
|
|
4
|
-
name: K;
|
|
5
|
-
defaultInitialize: ResourceElement<AssistantScopes[K]["value"]> | {
|
|
6
|
-
error: string;
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Register a default scope implementation.
|
|
11
|
-
* This allows scopes to have default values when not explicitly provided.
|
|
12
|
-
*
|
|
13
|
-
* @example With a resource:
|
|
14
|
-
* ```typescript
|
|
15
|
-
* registerAssistantScope({
|
|
16
|
-
* name: "myScope",
|
|
17
|
-
* defaultInitialize: MyResource(),
|
|
18
|
-
* });
|
|
19
|
-
* ```
|
|
20
|
-
*
|
|
21
|
-
* @example With an error:
|
|
22
|
-
* ```typescript
|
|
23
|
-
* registerAssistantScope({
|
|
24
|
-
* name: "myScope",
|
|
25
|
-
* defaultInitialize: { error: "MyScope is not configured" },
|
|
26
|
-
* });
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export declare function registerAssistantScope<K extends keyof AssistantScopes>(config: ScopeRegistryEntry<K>): void;
|
|
30
|
-
/**
|
|
31
|
-
* Get the default initializer for a scope, if registered.
|
|
32
|
-
*/
|
|
33
|
-
export declare function getDefaultScopeInitializer<K extends keyof AssistantScopes>(name: K): (ResourceElement<AssistantScopes[K]["value"]> | {
|
|
34
|
-
error: string;
|
|
35
|
-
}) | undefined;
|
|
36
|
-
/**
|
|
37
|
-
* Get all registered scope names.
|
|
38
|
-
*/
|
|
39
|
-
export declare function hasRegisteredScope(name: keyof AssistantScopes): boolean;
|
|
40
|
-
export {};
|
|
41
|
-
//# sourceMappingURL=ScopeRegistry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ScopeRegistry.d.ts","sourceRoot":"","sources":["../src/ScopeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,eAAe,IAAI;IACzD,IAAI,EAAE,CAAC,CAAC;IACR,iBAAiB,EACb,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAC5C;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvB,CAAC;AAOF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,eAAe,EACpE,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC5B,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,eAAe,EACxE,IAAI,EAAE,CAAC,GAEL,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAClE,SAAS,CAEZ;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,eAAe,GAAG,OAAO,CAEvE"}
|
package/dist/ScopeRegistry.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// src/ScopeRegistry.ts
|
|
2
|
-
var scopeRegistry = /* @__PURE__ */ new Map();
|
|
3
|
-
function registerAssistantScope(config) {
|
|
4
|
-
scopeRegistry.set(config.name, config.defaultInitialize);
|
|
5
|
-
}
|
|
6
|
-
function getDefaultScopeInitializer(name) {
|
|
7
|
-
return scopeRegistry.get(name);
|
|
8
|
-
}
|
|
9
|
-
function hasRegisteredScope(name) {
|
|
10
|
-
return scopeRegistry.has(name);
|
|
11
|
-
}
|
|
12
|
-
export {
|
|
13
|
-
getDefaultScopeInitializer,
|
|
14
|
-
hasRegisteredScope,
|
|
15
|
-
registerAssistantScope
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=ScopeRegistry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ScopeRegistry.ts"],"sourcesContent":["import type { AssistantScopes } from \"./types\";\nimport type { ResourceElement } from \"@assistant-ui/tap\";\n\ntype ScopeRegistryEntry<K extends keyof AssistantScopes> = {\n name: K;\n defaultInitialize:\n | ResourceElement<AssistantScopes[K][\"value\"]>\n | { error: string };\n};\n\nconst scopeRegistry = new Map<\n keyof AssistantScopes,\n ResourceElement<any> | { error: string }\n>();\n\n/**\n * Register a default scope implementation.\n * This allows scopes to have default values when not explicitly provided.\n *\n * @example With a resource:\n * ```typescript\n * registerAssistantScope({\n * name: \"myScope\",\n * defaultInitialize: MyResource(),\n * });\n * ```\n *\n * @example With an error:\n * ```typescript\n * registerAssistantScope({\n * name: \"myScope\",\n * defaultInitialize: { error: \"MyScope is not configured\" },\n * });\n * ```\n */\nexport function registerAssistantScope<K extends keyof AssistantScopes>(\n config: ScopeRegistryEntry<K>,\n): void {\n scopeRegistry.set(config.name, config.defaultInitialize);\n}\n\n/**\n * Get the default initializer for a scope, if registered.\n */\nexport function getDefaultScopeInitializer<K extends keyof AssistantScopes>(\n name: K,\n):\n | (ResourceElement<AssistantScopes[K][\"value\"]> | { error: string })\n | undefined {\n return scopeRegistry.get(name);\n}\n\n/**\n * Get all registered scope names.\n */\nexport function hasRegisteredScope(name: keyof AssistantScopes): boolean {\n return scopeRegistry.has(name);\n}\n"],"mappings":";AAUA,IAAM,gBAAgB,oBAAI,IAGxB;AAsBK,SAAS,uBACd,QACM;AACN,gBAAc,IAAI,OAAO,MAAM,OAAO,iBAAiB;AACzD;AAKO,SAAS,2BACd,MAGY;AACZ,SAAO,cAAc,IAAI,IAAI;AAC/B;AAKO,SAAS,mBAAmB,MAAsC;AACvE,SAAO,cAAc,IAAI,IAAI;AAC/B;","names":[]}
|
package/dist/StoreContext.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { EventManager } from "./EventContext";
|
|
2
|
-
import type { AssistantClient } from "./types";
|
|
3
|
-
export type StoreContextValue = {
|
|
4
|
-
events: EventManager;
|
|
5
|
-
parent: AssistantClient;
|
|
6
|
-
};
|
|
7
|
-
export declare const withStoreContextProvider: <TResult>(value: StoreContextValue, fn: () => TResult) => TResult;
|
|
8
|
-
export declare const tapStoreContext: () => StoreContextValue;
|
|
9
|
-
//# sourceMappingURL=StoreContext.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StoreContext.d.ts","sourceRoot":"","sources":["../src/StoreContext.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAIF,eAAO,MAAM,wBAAwB,GAAI,OAAO,EAC9C,OAAO,iBAAiB,EACxB,IAAI,MAAM,OAAO,YAGlB,CAAC;AAEF,eAAO,MAAM,eAAe,yBAK3B,CAAC"}
|
package/dist/StoreContext.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// src/StoreContext.ts
|
|
2
|
-
import {
|
|
3
|
-
createContext,
|
|
4
|
-
tapContext,
|
|
5
|
-
withContextProvider
|
|
6
|
-
} from "@assistant-ui/tap";
|
|
7
|
-
var StoreContext = createContext(null);
|
|
8
|
-
var withStoreContextProvider = (value, fn) => {
|
|
9
|
-
return withContextProvider(StoreContext, value, fn);
|
|
10
|
-
};
|
|
11
|
-
var tapStoreContext = () => {
|
|
12
|
-
const ctx = tapContext(StoreContext);
|
|
13
|
-
if (!ctx) throw new Error("Store context is not available");
|
|
14
|
-
return ctx;
|
|
15
|
-
};
|
|
16
|
-
export {
|
|
17
|
-
tapStoreContext,
|
|
18
|
-
withStoreContextProvider
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=StoreContext.js.map
|
package/dist/StoreContext.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/StoreContext.ts"],"sourcesContent":["import {\n createContext,\n tapContext,\n withContextProvider,\n} from \"@assistant-ui/tap\";\nimport type { EventManager } from \"./EventContext\";\nimport type { AssistantClient } from \"./types\";\n\nexport type StoreContextValue = {\n events: EventManager;\n parent: AssistantClient;\n};\n\nconst StoreContext = createContext<StoreContextValue | null>(null);\n\nexport const withStoreContextProvider = <TResult>(\n value: StoreContextValue,\n fn: () => TResult,\n) => {\n return withContextProvider(StoreContext, value, fn);\n};\n\nexport const tapStoreContext = () => {\n const ctx = tapContext(StoreContext);\n if (!ctx) throw new Error(\"Store context is not available\");\n\n return ctx;\n};\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AASP,IAAM,eAAe,cAAwC,IAAI;AAE1D,IAAM,2BAA2B,CACtC,OACA,OACG;AACH,SAAO,oBAAoB,cAAc,OAAO,EAAE;AACpD;AAEO,IAAM,kBAAkB,MAAM;AACnC,QAAM,MAAM,WAAW,YAAY;AACnC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,gCAAgC;AAE1D,SAAO;AACT;","names":[]}
|
package/dist/asStore.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ResourceElement } from "@assistant-ui/tap";
|
|
2
|
-
import { Unsubscribe } from "./types";
|
|
3
|
-
export interface Store<TState> {
|
|
4
|
-
/**
|
|
5
|
-
* Get the current state of the store.
|
|
6
|
-
*/
|
|
7
|
-
getState(): TState;
|
|
8
|
-
/**
|
|
9
|
-
* Subscribe to the store.
|
|
10
|
-
*/
|
|
11
|
-
subscribe(listener: () => void): Unsubscribe;
|
|
12
|
-
/**
|
|
13
|
-
* Synchronously flush all the updates to the store.
|
|
14
|
-
*/
|
|
15
|
-
flushSync(): void;
|
|
16
|
-
}
|
|
17
|
-
export declare const asStore: <TState, TProps>(props: ResourceElement<TState, TProps>, options?: {
|
|
18
|
-
key?: string | number;
|
|
19
|
-
} | undefined) => ResourceElement<Store<TState>, ResourceElement<TState, TProps>>;
|
|
20
|
-
//# sourceMappingURL=asStore.d.ts.map
|
package/dist/asStore.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"asStore.d.ts","sourceRoot":"","sources":["../src/asStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,EAGhB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,KAAK,CAAC,MAAM;IAC3B;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC;IAE7C;;OAEG;IACH,SAAS,IAAI,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,OAAO,GACjB,MAAM,EAAE,MAAM;;iFAYhB,CAAC"}
|
package/dist/asStore.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// src/asStore.ts
|
|
2
|
-
import {
|
|
3
|
-
tapMemo,
|
|
4
|
-
tapEffect,
|
|
5
|
-
resource,
|
|
6
|
-
createResource
|
|
7
|
-
} from "@assistant-ui/tap";
|
|
8
|
-
var asStore = resource(
|
|
9
|
-
(element) => {
|
|
10
|
-
const resource2 = tapMemo(
|
|
11
|
-
() => createResource(element, true),
|
|
12
|
-
[element.type]
|
|
13
|
-
);
|
|
14
|
-
tapEffect(() => {
|
|
15
|
-
resource2.updateInput(element.props);
|
|
16
|
-
});
|
|
17
|
-
return resource2;
|
|
18
|
-
}
|
|
19
|
-
);
|
|
20
|
-
export {
|
|
21
|
-
asStore
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=asStore.js.map
|
package/dist/asStore.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/asStore.ts"],"sourcesContent":["import {\n tapMemo,\n tapEffect,\n ResourceElement,\n resource,\n createResource,\n} from \"@assistant-ui/tap\";\nimport { Unsubscribe } from \"./types\";\n\nexport interface Store<TState> {\n /**\n * Get the current state of the store.\n */\n getState(): TState;\n\n /**\n * Subscribe to the store.\n */\n subscribe(listener: () => void): Unsubscribe;\n\n /**\n * Synchronously flush all the updates to the store.\n */\n flushSync(): void;\n}\n\nexport const asStore = resource(\n <TState, TProps>(element: ResourceElement<TState, TProps>): Store<TState> => {\n const resource = tapMemo(\n () => createResource(element, true),\n [element.type],\n );\n\n tapEffect(() => {\n resource.updateInput(element.props);\n });\n\n return resource;\n },\n);\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACK;AAoBA,IAAM,UAAU;AAAA,EACrB,CAAiB,YAA4D;AAC3E,UAAMA,YAAW;AAAA,MACf,MAAM,eAAe,SAAS,IAAI;AAAA,MAClC,CAAC,QAAQ,IAAI;AAAA,IACf;AAEA,cAAU,MAAM;AACd,MAAAA,UAAS,YAAY,QAAQ,KAAK;AAAA,IACpC,CAAC;AAED,WAAOA;AAAA,EACT;AACF;","names":["resource"]}
|
package/dist/tapApi.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* API object type
|
|
3
|
-
*/
|
|
4
|
-
export interface ApiObject {
|
|
5
|
-
[key: string]: ((...args: any[]) => any) | ApiObject;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Wraps an API object to make it stable across renders while keeping getState reactive.
|
|
9
|
-
* This is the recommended pattern for scope resources.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* export const FooResource = resource(() => {
|
|
14
|
-
* const [state, setState] = tapState({ bar: "Hello" });
|
|
15
|
-
*
|
|
16
|
-
* const updateBar = (newBar: string) => {
|
|
17
|
-
* setState({ bar: newBar });
|
|
18
|
-
* };
|
|
19
|
-
*
|
|
20
|
-
* return tapApi({
|
|
21
|
-
* getState: () => state,
|
|
22
|
-
* updateBar,
|
|
23
|
-
* });
|
|
24
|
-
* });
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export declare const tapApi: <TApi extends ApiObject & {
|
|
28
|
-
getState: () => any;
|
|
29
|
-
}>(api: TApi, options?: {
|
|
30
|
-
key?: string | undefined;
|
|
31
|
-
}) => {
|
|
32
|
-
key: string | undefined;
|
|
33
|
-
state: any;
|
|
34
|
-
api: TApi;
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=tapApi.d.ts.map
|
package/dist/tapApi.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tapApi.d.ts","sourceRoot":"","sources":["../src/tapApi.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC;CACtD;AAmCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,MAAM,GAAI,IAAI,SAAS,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,CAAA;CAAE,EACrE,KAAK,IAAI,EACT,UAAU;IACR,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;;;;CAwBF,CAAC"}
|
package/dist/tapApi.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
// src/tapApi.ts
|
|
2
|
-
import { tapEffect, tapMemo, tapRef } from "@assistant-ui/tap";
|
|
3
|
-
var ReadonlyApiHandler = class {
|
|
4
|
-
constructor(getApi) {
|
|
5
|
-
this.getApi = getApi;
|
|
6
|
-
}
|
|
7
|
-
get(_, prop) {
|
|
8
|
-
return this.getApi()[prop];
|
|
9
|
-
}
|
|
10
|
-
ownKeys() {
|
|
11
|
-
return Object.keys(this.getApi());
|
|
12
|
-
}
|
|
13
|
-
has(_, prop) {
|
|
14
|
-
return prop in this.getApi();
|
|
15
|
-
}
|
|
16
|
-
getOwnPropertyDescriptor(_, prop) {
|
|
17
|
-
return Object.getOwnPropertyDescriptor(this.getApi(), prop);
|
|
18
|
-
}
|
|
19
|
-
set() {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
defineProperty() {
|
|
23
|
-
return false;
|
|
24
|
-
}
|
|
25
|
-
deleteProperty() {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var tapApi = (api, options) => {
|
|
30
|
-
const ref = tapRef(api);
|
|
31
|
-
tapEffect(() => {
|
|
32
|
-
ref.current = api;
|
|
33
|
-
});
|
|
34
|
-
const apiProxy = tapMemo(
|
|
35
|
-
() => new Proxy({}, new ReadonlyApiHandler(() => ref.current)),
|
|
36
|
-
[]
|
|
37
|
-
);
|
|
38
|
-
const key = options?.key;
|
|
39
|
-
const state = api.getState();
|
|
40
|
-
return tapMemo(
|
|
41
|
-
() => ({
|
|
42
|
-
key,
|
|
43
|
-
state,
|
|
44
|
-
api: apiProxy
|
|
45
|
-
}),
|
|
46
|
-
[state, key]
|
|
47
|
-
);
|
|
48
|
-
};
|
|
49
|
-
export {
|
|
50
|
-
tapApi
|
|
51
|
-
};
|
|
52
|
-
//# sourceMappingURL=tapApi.js.map
|
package/dist/tapApi.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tapApi.ts"],"sourcesContent":["import { tapEffect, tapMemo, tapRef } from \"@assistant-ui/tap\";\n\n/**\n * API object type\n */\nexport interface ApiObject {\n [key: string]: ((...args: any[]) => any) | ApiObject;\n}\n\n/**\n * Readonly API handler for creating stable proxies\n */\nclass ReadonlyApiHandler<TApi extends ApiObject> implements ProxyHandler<TApi> {\n constructor(private readonly getApi: () => TApi) {}\n\n get(_: unknown, prop: string | symbol) {\n return this.getApi()[prop as keyof TApi];\n }\n\n ownKeys(): ArrayLike<string | symbol> {\n return Object.keys(this.getApi() as object);\n }\n\n has(_: unknown, prop: string | symbol) {\n return prop in (this.getApi() as object);\n }\n\n getOwnPropertyDescriptor(_: unknown, prop: string | symbol) {\n return Object.getOwnPropertyDescriptor(this.getApi(), prop);\n }\n\n set() {\n return false;\n }\n defineProperty() {\n return false;\n }\n deleteProperty() {\n return false;\n }\n}\n\n/**\n * Wraps an API object to make it stable across renders while keeping getState reactive.\n * This is the recommended pattern for scope resources.\n *\n * @example\n * ```typescript\n * export const FooResource = resource(() => {\n * const [state, setState] = tapState({ bar: \"Hello\" });\n *\n * const updateBar = (newBar: string) => {\n * setState({ bar: newBar });\n * };\n *\n * return tapApi({\n * getState: () => state,\n * updateBar,\n * });\n * });\n * ```\n */\nexport const tapApi = <TApi extends ApiObject & { getState: () => any }>(\n api: TApi,\n options?: {\n key?: string | undefined;\n },\n) => {\n const ref = tapRef(api);\n tapEffect(() => {\n ref.current = api;\n });\n\n const apiProxy = tapMemo(\n () =>\n new Proxy<TApi>({} as TApi, new ReadonlyApiHandler(() => ref.current)),\n [],\n );\n\n const key = options?.key;\n const state = api.getState();\n\n return tapMemo(\n () => ({\n key,\n state,\n api: apiProxy,\n }),\n [state, key],\n );\n};\n"],"mappings":";AAAA,SAAS,WAAW,SAAS,cAAc;AAY3C,IAAM,qBAAN,MAA+E;AAAA,EAC7E,YAA6B,QAAoB;AAApB;AAAA,EAAqB;AAAA,EAElD,IAAI,GAAY,MAAuB;AACrC,WAAO,KAAK,OAAO,EAAE,IAAkB;AAAA,EACzC;AAAA,EAEA,UAAsC;AACpC,WAAO,OAAO,KAAK,KAAK,OAAO,CAAW;AAAA,EAC5C;AAAA,EAEA,IAAI,GAAY,MAAuB;AACrC,WAAO,QAAS,KAAK,OAAO;AAAA,EAC9B;AAAA,EAEA,yBAAyB,GAAY,MAAuB;AAC1D,WAAO,OAAO,yBAAyB,KAAK,OAAO,GAAG,IAAI;AAAA,EAC5D;AAAA,EAEA,MAAM;AACJ,WAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AACf,WAAO;AAAA,EACT;AACF;AAsBO,IAAM,SAAS,CACpB,KACA,YAGG;AACH,QAAM,MAAM,OAAO,GAAG;AACtB,YAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAChB,CAAC;AAED,QAAM,WAAW;AAAA,IACf,MACE,IAAI,MAAY,CAAC,GAAW,IAAI,mBAAmB,MAAM,IAAI,OAAO,CAAC;AAAA,IACvE,CAAC;AAAA,EACH;AAEA,QAAM,MAAM,SAAS;AACrB,QAAM,QAAQ,IAAI,SAAS;AAE3B,SAAO;AAAA,IACL,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP;AAAA,IACA,CAAC,OAAO,GAAG;AAAA,EACb;AACF;","names":[]}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { ResourceElement } from "@assistant-ui/tap";
|
|
2
|
-
import { ApiObject } from "./tapApi";
|
|
3
|
-
/**
|
|
4
|
-
* Creates a lookup-based resource collection for managing lists of items.
|
|
5
|
-
* Returns both the combined state array and an API function to lookup specific items.
|
|
6
|
-
*
|
|
7
|
-
* @param elements - Array of resource elements, each returning { key, state, api }
|
|
8
|
-
* @returns Object with { state: TState[], api: (lookup) => TApi }
|
|
9
|
-
*
|
|
10
|
-
* The api function accepts { index: number } or { key: string } for lookups.
|
|
11
|
-
* Consumers can wrap it to rename the key field (e.g., to "id" or "toolCallId").
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* const foos = tapLookupResources(
|
|
16
|
-
* items.map((item) => FooItem({ id: item.id }, { key: item.id }))
|
|
17
|
-
* );
|
|
18
|
-
*
|
|
19
|
-
* // Access state array
|
|
20
|
-
* const allStates = foos.state;
|
|
21
|
-
*
|
|
22
|
-
* // Wrap to rename key field to "id"
|
|
23
|
-
* const wrappedApi = (lookup: { index: number } | { id: string }) => {
|
|
24
|
-
* if ("id" in lookup) {
|
|
25
|
-
* return foos.api({ key: lookup.id });
|
|
26
|
-
* } else {
|
|
27
|
-
* return foos.api(lookup);
|
|
28
|
-
* }
|
|
29
|
-
* };
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export declare const tapLookupResources: <TState, TApi extends ApiObject>(elements: ResourceElement<{
|
|
33
|
-
key: string | undefined;
|
|
34
|
-
state: TState;
|
|
35
|
-
api: TApi;
|
|
36
|
-
}>[]) => {
|
|
37
|
-
state: TState[];
|
|
38
|
-
api: (lookup: {
|
|
39
|
-
index: number;
|
|
40
|
-
} | {
|
|
41
|
-
key: string;
|
|
42
|
-
}) => TApi;
|
|
43
|
-
};
|
|
44
|
-
//# sourceMappingURL=tapLookupResources.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tapLookupResources.d.ts","sourceRoot":"","sources":["../src/tapLookupResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,EAAE,IAAI,SAAS,SAAS,EAC/D,UAAU,eAAe,CAAC;IACxB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,IAAI,CAAC;CACX,CAAC,EAAE,KACH;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAqB5D,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// src/tapLookupResources.ts
|
|
2
|
-
import { tapResources } from "@assistant-ui/tap";
|
|
3
|
-
var tapLookupResources = (elements) => {
|
|
4
|
-
const resources = tapResources(elements);
|
|
5
|
-
return {
|
|
6
|
-
state: resources.map((r) => r.state),
|
|
7
|
-
api: (lookup) => {
|
|
8
|
-
const value = "index" in lookup ? resources[lookup.index]?.api : resources.find((r) => r.key === lookup.key)?.api;
|
|
9
|
-
if (!value) {
|
|
10
|
-
throw new Error(
|
|
11
|
-
`tapLookupResources: Resource not found for lookup: ${JSON.stringify(lookup)}`
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
export {
|
|
19
|
-
tapLookupResources
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=tapLookupResources.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tapLookupResources.ts"],"sourcesContent":["import { ResourceElement, tapResources } from \"@assistant-ui/tap\";\nimport { ApiObject } from \"./tapApi\";\n\n/**\n * Creates a lookup-based resource collection for managing lists of items.\n * Returns both the combined state array and an API function to lookup specific items.\n *\n * @param elements - Array of resource elements, each returning { key, state, api }\n * @returns Object with { state: TState[], api: (lookup) => TApi }\n *\n * The api function accepts { index: number } or { key: string } for lookups.\n * Consumers can wrap it to rename the key field (e.g., to \"id\" or \"toolCallId\").\n *\n * @example\n * ```typescript\n * const foos = tapLookupResources(\n * items.map((item) => FooItem({ id: item.id }, { key: item.id }))\n * );\n *\n * // Access state array\n * const allStates = foos.state;\n *\n * // Wrap to rename key field to \"id\"\n * const wrappedApi = (lookup: { index: number } | { id: string }) => {\n * if (\"id\" in lookup) {\n * return foos.api({ key: lookup.id });\n * } else {\n * return foos.api(lookup);\n * }\n * };\n * ```\n */\nexport const tapLookupResources = <TState, TApi extends ApiObject>(\n elements: ResourceElement<{\n key: string | undefined;\n state: TState;\n api: TApi;\n }>[],\n): {\n state: TState[];\n api: (lookup: { index: number } | { key: string }) => TApi;\n} => {\n const resources = tapResources(elements);\n\n return {\n state: resources.map((r) => r.state),\n api: (lookup: { index: number } | { key: string }) => {\n const value =\n \"index\" in lookup\n ? resources[lookup.index]?.api\n : resources.find((r) => r.key === lookup.key)?.api;\n\n if (!value) {\n throw new Error(\n `tapLookupResources: Resource not found for lookup: ${JSON.stringify(lookup)}`,\n );\n }\n\n return value;\n },\n };\n};\n"],"mappings":";AAAA,SAA0B,oBAAoB;AAgCvC,IAAM,qBAAqB,CAChC,aAQG;AACH,QAAM,YAAY,aAAa,QAAQ;AAEvC,SAAO;AAAA,IACL,OAAO,UAAU,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,IACnC,KAAK,CAAC,WAAgD;AACpD,YAAM,QACJ,WAAW,SACP,UAAU,OAAO,KAAK,GAAG,MACzB,UAAU,KAAK,CAAC,MAAM,EAAE,QAAQ,OAAO,GAAG,GAAG;AAEnD,UAAI,CAAC,OAAO;AACV,cAAM,IAAI;AAAA,UACR,sDAAsD,KAAK,UAAU,MAAM,CAAC;AAAA,QAC9E;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
|
package/dist/tapStoreList.d.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import type { ContravariantResource } from "@assistant-ui/tap";
|
|
2
|
-
import { ApiObject } from "./tapApi";
|
|
3
|
-
/**
|
|
4
|
-
* Resource props that will be passed to each item resource
|
|
5
|
-
*/
|
|
6
|
-
export type TapStoreListResourceProps<TProps> = {
|
|
7
|
-
initialValue: TProps;
|
|
8
|
-
remove: () => void;
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* Configuration for tapStoreList hook
|
|
12
|
-
*/
|
|
13
|
-
export type TapStoreListConfig<TProps, TState, TApi extends ApiObject> = {
|
|
14
|
-
/**
|
|
15
|
-
* Initial values for the list items
|
|
16
|
-
*/
|
|
17
|
-
initialValues: TProps[];
|
|
18
|
-
/**
|
|
19
|
-
* Resource function that creates an element for each item
|
|
20
|
-
* Should return a ResourceElement with { key, state, api }
|
|
21
|
-
*
|
|
22
|
-
* The resource will receive { initialValue, remove } as props.
|
|
23
|
-
*/
|
|
24
|
-
resource: ContravariantResource<{
|
|
25
|
-
key: string | undefined;
|
|
26
|
-
state: TState;
|
|
27
|
-
api: TApi;
|
|
28
|
-
}, TapStoreListResourceProps<TProps>>;
|
|
29
|
-
/**
|
|
30
|
-
* Optional ID generator function for new items
|
|
31
|
-
* If not provided, items must include an ID when added
|
|
32
|
-
*/
|
|
33
|
-
idGenerator?: () => string;
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Creates a stateful list with add functionality, rendering each item via the provided resource.
|
|
37
|
-
* Returns state array, api lookup function, and add method.
|
|
38
|
-
*
|
|
39
|
-
* @param config - Configuration object with initialValues, resource, and optional idGenerator
|
|
40
|
-
* @returns Object with { state: TState[], api: (lookup) => TApi, add: (id?) => void }
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* const todoList = tapStoreList({
|
|
45
|
-
* initialValues: [
|
|
46
|
-
* { id: "1", text: "First todo" },
|
|
47
|
-
* { id: "2", text: "Second todo" }
|
|
48
|
-
* ],
|
|
49
|
-
* resource: (props) => TodoItemResource(props, { key: props.id }),
|
|
50
|
-
* idGenerator: () => `todo-${Date.now()}`
|
|
51
|
-
* });
|
|
52
|
-
*
|
|
53
|
-
* // Access state array
|
|
54
|
-
* const allTodos = todoList.state;
|
|
55
|
-
*
|
|
56
|
-
* // Lookup specific item
|
|
57
|
-
* const firstTodo = todoList.api({ index: 0 });
|
|
58
|
-
* const specificTodo = todoList.api({ key: "1" });
|
|
59
|
-
*
|
|
60
|
-
* // Add new item
|
|
61
|
-
* todoList.add(); // Uses idGenerator
|
|
62
|
-
* todoList.add("custom-id"); // Uses provided id
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export declare const tapStoreList: <TProps extends {
|
|
66
|
-
id: string;
|
|
67
|
-
}, TState, TApi extends ApiObject>(config: TapStoreListConfig<TProps, TState, TApi>) => {
|
|
68
|
-
state: TState[];
|
|
69
|
-
api: (lookup: {
|
|
70
|
-
index: number;
|
|
71
|
-
} | {
|
|
72
|
-
id: string;
|
|
73
|
-
}) => TApi;
|
|
74
|
-
add: (id?: string) => void;
|
|
75
|
-
};
|
|
76
|
-
//# sourceMappingURL=tapStoreList.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tapStoreList.d.ts","sourceRoot":"","sources":["../src/tapStoreList.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,yBAAyB,CAAC,MAAM,IAAI;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,SAAS,SAAS,IAAI;IACvE;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IAMxB;;;;;OAKG;IACH,QAAQ,EAAE,qBAAqB,CAC7B;QACE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,IAAI,CAAC;KACX,EACD,yBAAyB,CAAC,MAAM,CAAC,CAClC,CAAC;IACF;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAC7B,MAAM,EACN,IAAI,SAAS,SAAS,EAEtB,QAAQ,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,KAC/C;IACD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1D,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CA8C5B,CAAC"}
|