@bitbitpress/client 1.0.4 → 1.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react/index.d.ts +41 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +68 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/primitives.d.ts +54 -0
- package/dist/react/primitives.d.ts.map +1 -0
- package/dist/react/primitives.js +223 -0
- package/dist/react/primitives.js.map +1 -0
- package/dist/react-native-expo/index.d.ts +42 -0
- package/dist/react-native-expo/index.d.ts.map +1 -0
- package/dist/react-native-expo/index.js +78 -0
- package/dist/react-native-expo/index.js.map +1 -0
- package/dist/react-native-expo/primitives.d.ts +58 -0
- package/dist/react-native-expo/primitives.d.ts.map +1 -0
- package/dist/react-native-expo/primitives.js +218 -0
- package/dist/react-native-expo/primitives.js.map +1 -0
- package/dist/synthesisView/context.d.ts +18 -0
- package/dist/synthesisView/context.d.ts.map +1 -0
- package/dist/synthesisView/context.js +15 -0
- package/dist/synthesisView/context.js.map +1 -0
- package/dist/synthesisView/createComponentMap.d.ts +18 -0
- package/dist/synthesisView/createComponentMap.d.ts.map +1 -0
- package/dist/synthesisView/createComponentMap.js +40 -0
- package/dist/synthesisView/createComponentMap.js.map +1 -0
- package/dist/synthesisView/engine.d.ts +35 -0
- package/dist/synthesisView/engine.d.ts.map +1 -0
- package/dist/synthesisView/engine.js +113 -0
- package/dist/synthesisView/engine.js.map +1 -0
- package/dist/synthesisView/primitives.d.ts +180 -0
- package/dist/synthesisView/primitives.d.ts.map +1 -0
- package/dist/synthesisView/primitives.js +29 -0
- package/dist/synthesisView/primitives.js.map +1 -0
- package/dist/synthesisView/resolve.d.ts +17 -0
- package/dist/synthesisView/resolve.d.ts.map +1 -0
- package/dist/synthesisView/resolve.js +42 -0
- package/dist/synthesisView/resolve.js.map +1 -0
- package/dist/synthesisView/types.d.ts +72 -0
- package/dist/synthesisView/types.d.ts.map +1 -0
- package/dist/synthesisView/types.js +2 -0
- package/dist/synthesisView/types.js.map +1 -0
- package/dist/synthesisView/useSynthesisView.d.ts +13 -0
- package/dist/synthesisView/useSynthesisView.d.ts.map +1 -0
- package/dist/synthesisView/useSynthesisView.js +49 -0
- package/dist/synthesisView/useSynthesisView.js.map +1 -0
- package/dist/user/index.d.ts +14 -1
- package/dist/user/index.d.ts.map +1 -1
- package/dist/user/index.js +6 -1
- package/dist/user/index.js.map +1 -1
- package/dist/user/synthesize-view-batch-manager.d.ts +17 -0
- package/dist/user/synthesize-view-batch-manager.d.ts.map +1 -0
- package/dist/user/synthesize-view-batch-manager.js +52 -0
- package/dist/user/synthesize-view-batch-manager.js.map +1 -0
- package/dist/user/synthesizeView.d.ts +41 -0
- package/dist/user/synthesizeView.d.ts.map +1 -0
- package/dist/user/synthesizeView.js +26 -0
- package/dist/user/synthesizeView.js.map +1 -0
- package/package.json +29 -5
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Cross-platform prop contracts for the BB built-in primitives. Each primitive
|
|
4
|
+
* names a small set of *semantic* fields (what the engine reads or wires), and
|
|
5
|
+
* accepts arbitrary extra props that pass through to the underlying platform
|
|
6
|
+
* element — no variants, no enum unions. Styling and platform-specific knobs
|
|
7
|
+
* (`style`, `className`, etc.) flow straight to the host element so the UI
|
|
8
|
+
* tree author owns the look without our primitives prescribing one.
|
|
9
|
+
*
|
|
10
|
+
* Future registry contracts are generated from this file.
|
|
11
|
+
*/
|
|
12
|
+
/** Extra props that aren't part of the semantic contract — passed through to
|
|
13
|
+
* the platform host element (e.g. `style`, `className`, ARIA attributes). */
|
|
14
|
+
export type PassThroughProps = Record<string, unknown>;
|
|
15
|
+
export type TextProps = PassThroughProps & {
|
|
16
|
+
text?: string;
|
|
17
|
+
children?: ReactNode;
|
|
18
|
+
};
|
|
19
|
+
export type ImageProps = PassThroughProps & {
|
|
20
|
+
src: string;
|
|
21
|
+
alt?: string;
|
|
22
|
+
};
|
|
23
|
+
export type ButtonProps = PassThroughProps & {
|
|
24
|
+
title?: string;
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
/** Emitted with the authored event payload + bindings; no component payload. */
|
|
28
|
+
onPress?: () => void;
|
|
29
|
+
};
|
|
30
|
+
/** Transparent press target around arbitrary content. Unlike `Button` it
|
|
31
|
+
* imposes no visual chrome, so wrapping `Text`/`Image`/`Card` doesn't alter
|
|
32
|
+
* their look. Web renders as a `role="button"` element so keyboard and
|
|
33
|
+
* screen-reader semantics survive. */
|
|
34
|
+
export type PressableProps = PassThroughProps & {
|
|
35
|
+
children?: ReactNode;
|
|
36
|
+
disabled?: boolean;
|
|
37
|
+
onPress?: () => void;
|
|
38
|
+
};
|
|
39
|
+
export type IconProps = PassThroughProps & {
|
|
40
|
+
name: string;
|
|
41
|
+
};
|
|
42
|
+
export type VideoProps = PassThroughProps & {
|
|
43
|
+
src: string;
|
|
44
|
+
poster?: string;
|
|
45
|
+
};
|
|
46
|
+
export type AudioProps = PassThroughProps & {
|
|
47
|
+
src: string;
|
|
48
|
+
};
|
|
49
|
+
/** A point in the gradient's local box, with each axis in [0, 1]. */
|
|
50
|
+
export type GradientPoint = {
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
};
|
|
54
|
+
/** Linear-gradient backdrop primitive. Matches `expo-linear-gradient`'s shape
|
|
55
|
+
* on RN; the web impl converts `start`/`end` to a CSS `linear-gradient(...)`.
|
|
56
|
+
* Defaults paint top→bottom so a no-arg `Gradient` matches the common case. */
|
|
57
|
+
export type GradientProps = PassThroughProps & {
|
|
58
|
+
colors: string[];
|
|
59
|
+
/** Defaults to `{ x: 0, y: 0 }` (top). */
|
|
60
|
+
start?: GradientPoint;
|
|
61
|
+
/** Defaults to `{ x: 0, y: 1 }` (bottom). */
|
|
62
|
+
end?: GradientPoint;
|
|
63
|
+
/** Optional color stops in [0, 1], one per color. */
|
|
64
|
+
locations?: number[];
|
|
65
|
+
children?: ReactNode;
|
|
66
|
+
};
|
|
67
|
+
export type ColumnProps = PassThroughProps & {
|
|
68
|
+
children?: ReactNode;
|
|
69
|
+
};
|
|
70
|
+
/** Horizontal flex container. Same surface as `Column` but the baseline is
|
|
71
|
+
* `flexDirection: 'row'`. Authors override via `style` when needed. */
|
|
72
|
+
export type RowProps = PassThroughProps & {
|
|
73
|
+
children?: ReactNode;
|
|
74
|
+
};
|
|
75
|
+
export type ListProps = PassThroughProps & {
|
|
76
|
+
children?: ReactNode;
|
|
77
|
+
};
|
|
78
|
+
export type CardProps = PassThroughProps & {
|
|
79
|
+
children?: ReactNode;
|
|
80
|
+
};
|
|
81
|
+
export type DividerProps = PassThroughProps;
|
|
82
|
+
/** Vertical scrollable container. Overflowing children scroll on the y-axis.
|
|
83
|
+
* Authors style the viewport (height, padding) via `style`; the inner
|
|
84
|
+
* content sizes naturally to its children. */
|
|
85
|
+
export type VerticalScrollProps = PassThroughProps & {
|
|
86
|
+
children?: ReactNode;
|
|
87
|
+
};
|
|
88
|
+
/** Horizontal scrollable container. Overflowing children scroll on the
|
|
89
|
+
* x-axis. Authors style the viewport (height, padding) via `style`; the
|
|
90
|
+
* inner content sizes naturally to its children. */
|
|
91
|
+
export type HorizontalScrollProps = PassThroughProps & {
|
|
92
|
+
children?: ReactNode;
|
|
93
|
+
};
|
|
94
|
+
export type TabsProps = PassThroughProps & {
|
|
95
|
+
defaultValue?: string;
|
|
96
|
+
children?: ReactNode;
|
|
97
|
+
};
|
|
98
|
+
export type TabsItemProps = PassThroughProps & {
|
|
99
|
+
value: string;
|
|
100
|
+
label: string;
|
|
101
|
+
children?: ReactNode;
|
|
102
|
+
};
|
|
103
|
+
export type ModalProps = PassThroughProps & {
|
|
104
|
+
/** Whether the modal is shown. Default true so a node-mounted modal is visible. */
|
|
105
|
+
open?: boolean;
|
|
106
|
+
children?: ReactNode;
|
|
107
|
+
/** Emitted when the user dismisses via backdrop or close affordance. */
|
|
108
|
+
onClose?: () => void;
|
|
109
|
+
};
|
|
110
|
+
/** All form primitives emit `{ value }` via their event slot; the engine
|
|
111
|
+
* merges that into the authored payload before calling the host's onEvent. */
|
|
112
|
+
export type FormChangePayload<T> = {
|
|
113
|
+
value: T;
|
|
114
|
+
};
|
|
115
|
+
export type TextFieldProps = PassThroughProps & {
|
|
116
|
+
defaultValue?: string;
|
|
117
|
+
placeholder?: string;
|
|
118
|
+
multiline?: boolean;
|
|
119
|
+
disabled?: boolean;
|
|
120
|
+
onChange?: (payload: FormChangePayload<string>) => void;
|
|
121
|
+
};
|
|
122
|
+
export type CheckboxProps = PassThroughProps & {
|
|
123
|
+
label?: string;
|
|
124
|
+
defaultChecked?: boolean;
|
|
125
|
+
disabled?: boolean;
|
|
126
|
+
onChange?: (payload: FormChangePayload<boolean>) => void;
|
|
127
|
+
};
|
|
128
|
+
export type ChoicePickerOption = {
|
|
129
|
+
label: string;
|
|
130
|
+
value: string;
|
|
131
|
+
};
|
|
132
|
+
export type ChoicePickerProps = PassThroughProps & {
|
|
133
|
+
defaultValue?: string;
|
|
134
|
+
options: ChoicePickerOption[];
|
|
135
|
+
disabled?: boolean;
|
|
136
|
+
onChange?: (payload: FormChangePayload<string>) => void;
|
|
137
|
+
};
|
|
138
|
+
export type SliderProps = PassThroughProps & {
|
|
139
|
+
defaultValue?: number;
|
|
140
|
+
min?: number;
|
|
141
|
+
max?: number;
|
|
142
|
+
step?: number;
|
|
143
|
+
disabled?: boolean;
|
|
144
|
+
onChange?: (payload: FormChangePayload<number>) => void;
|
|
145
|
+
};
|
|
146
|
+
export type DateTimeMode = 'date' | 'time' | 'datetime';
|
|
147
|
+
export type DateTimeInputProps = PassThroughProps & {
|
|
148
|
+
defaultValue?: string;
|
|
149
|
+
mode?: DateTimeMode;
|
|
150
|
+
disabled?: boolean;
|
|
151
|
+
onChange?: (payload: FormChangePayload<string>) => void;
|
|
152
|
+
};
|
|
153
|
+
/** The string names a UI tree uses in `UiNode.component` to reference each
|
|
154
|
+
* primitive. The host's `ComponentMap` keys must match. */
|
|
155
|
+
export declare const PRIMITIVE_NAMES: {
|
|
156
|
+
readonly Text: "Text";
|
|
157
|
+
readonly Image: "Image";
|
|
158
|
+
readonly Button: "Button";
|
|
159
|
+
readonly Pressable: "Pressable";
|
|
160
|
+
readonly Icon: "Icon";
|
|
161
|
+
readonly Video: "Video";
|
|
162
|
+
readonly Audio: "Audio";
|
|
163
|
+
readonly Column: "Column";
|
|
164
|
+
readonly Row: "Row";
|
|
165
|
+
readonly List: "List";
|
|
166
|
+
readonly Card: "Card";
|
|
167
|
+
readonly VerticalScroll: "VerticalScroll";
|
|
168
|
+
readonly HorizontalScroll: "HorizontalScroll";
|
|
169
|
+
readonly Tabs: "Tabs";
|
|
170
|
+
readonly TabsItem: "TabsItem";
|
|
171
|
+
readonly Modal: "Modal";
|
|
172
|
+
readonly Divider: "Divider";
|
|
173
|
+
readonly Gradient: "Gradient";
|
|
174
|
+
readonly TextField: "TextField";
|
|
175
|
+
readonly Checkbox: "Checkbox";
|
|
176
|
+
readonly ChoicePicker: "ChoicePicker";
|
|
177
|
+
readonly Slider: "Slider";
|
|
178
|
+
readonly DateTimeInput: "DateTimeInput";
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/synthesisView/primitives.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// --- Catalog name constants -------------------------------------------------
|
|
2
|
+
/** The string names a UI tree uses in `UiNode.component` to reference each
|
|
3
|
+
* primitive. The host's `ComponentMap` keys must match. */
|
|
4
|
+
export const PRIMITIVE_NAMES = {
|
|
5
|
+
Text: 'Text',
|
|
6
|
+
Image: 'Image',
|
|
7
|
+
Button: 'Button',
|
|
8
|
+
Pressable: 'Pressable',
|
|
9
|
+
Icon: 'Icon',
|
|
10
|
+
Video: 'Video',
|
|
11
|
+
Audio: 'Audio',
|
|
12
|
+
Column: 'Column',
|
|
13
|
+
Row: 'Row',
|
|
14
|
+
List: 'List',
|
|
15
|
+
Card: 'Card',
|
|
16
|
+
VerticalScroll: 'VerticalScroll',
|
|
17
|
+
HorizontalScroll: 'HorizontalScroll',
|
|
18
|
+
Tabs: 'Tabs',
|
|
19
|
+
TabsItem: 'TabsItem',
|
|
20
|
+
Modal: 'Modal',
|
|
21
|
+
Divider: 'Divider',
|
|
22
|
+
Gradient: 'Gradient',
|
|
23
|
+
TextField: 'TextField',
|
|
24
|
+
Checkbox: 'Checkbox',
|
|
25
|
+
ChoicePicker: 'ChoicePicker',
|
|
26
|
+
Slider: 'Slider',
|
|
27
|
+
DateTimeInput: 'DateTimeInput',
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/synthesisView/primitives.ts"],"names":[],"mappings":"AAsMA,+EAA+E;AAE/E;4DAC4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,cAAc;IAC5B,MAAM,EAAE,QAAQ;IAChB,aAAa,EAAE,eAAe;CACtB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type Scope = {
|
|
2
|
+
/** The synthesis data the view binds against. */
|
|
3
|
+
data: unknown;
|
|
4
|
+
/** The current element when inside a Repeat subtree. */
|
|
5
|
+
item?: unknown;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a dot-path against the data scope. `$item` (and `$item.x`) reads the
|
|
9
|
+
* current Repeat element; any other path reads from the synthesis data.
|
|
10
|
+
*
|
|
11
|
+
* Bracket notation (`variants[variant]`, `themes[mode].text.primary`) is
|
|
12
|
+
* supported: the inner path resolves first, then the result is interpolated
|
|
13
|
+
* into the outer path before walking. This lets bindings pick a style or
|
|
14
|
+
* theme bucket at runtime — the consumer just sets the discriminator prop.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolvePath(path: string, scope: Scope): unknown;
|
|
17
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/synthesisView/resolve.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,KAAK,GAAG;IAClB,iDAAiD;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CA8B/D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
const ITEM = '$item';
|
|
2
|
+
const BRACKET_RE = /\[([^\]]+)\]/;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a dot-path against the data scope. `$item` (and `$item.x`) reads the
|
|
5
|
+
* current Repeat element; any other path reads from the synthesis data.
|
|
6
|
+
*
|
|
7
|
+
* Bracket notation (`variants[variant]`, `themes[mode].text.primary`) is
|
|
8
|
+
* supported: the inner path resolves first, then the result is interpolated
|
|
9
|
+
* into the outer path before walking. This lets bindings pick a style or
|
|
10
|
+
* theme bucket at runtime — the consumer just sets the discriminator prop.
|
|
11
|
+
*/
|
|
12
|
+
export function resolvePath(path, scope) {
|
|
13
|
+
// Expand any `[inner]` segments first so prefix handling sees a normalized
|
|
14
|
+
// dot-path. Each inner segment recursively resolves against the same scope.
|
|
15
|
+
while (path.includes('[')) {
|
|
16
|
+
const m = BRACKET_RE.exec(path);
|
|
17
|
+
if (!m || m.index === undefined)
|
|
18
|
+
break;
|
|
19
|
+
const key = resolvePath(m[1], scope);
|
|
20
|
+
if (typeof key !== 'string' && typeof key !== 'number')
|
|
21
|
+
return undefined;
|
|
22
|
+
const before = path.slice(0, m.index);
|
|
23
|
+
const after = path.slice(m.index + m[0].length);
|
|
24
|
+
path = `${before}${before && !before.endsWith('.') ? '.' : ''}${key}${after}`;
|
|
25
|
+
}
|
|
26
|
+
if (path.startsWith('.'))
|
|
27
|
+
path = path.slice(1);
|
|
28
|
+
if (path === ITEM)
|
|
29
|
+
return scope.item;
|
|
30
|
+
let base;
|
|
31
|
+
let keys;
|
|
32
|
+
if (path.startsWith(`${ITEM}.`)) {
|
|
33
|
+
base = scope.item;
|
|
34
|
+
keys = path.slice(ITEM.length + 1).split('.');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
base = scope.data;
|
|
38
|
+
keys = path.split('.');
|
|
39
|
+
}
|
|
40
|
+
return keys.reduce((acc, key) => (acc == null ? undefined : acc[key]), base);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/synthesisView/resolve.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,OAAO,CAAC;AACrB,MAAM,UAAU,GAAG,cAAc,CAAC;AASlC;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAY;IACpD,2EAA2E;IAC3E,4EAA4E;IAC5E,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM;QACvC,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,KAAK,EAAE,CAAC;IAChF,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAErC,IAAI,IAAa,CAAC;IAClB,IAAI,IAAc,CAAC;IACnB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC,EAC/E,IAAI,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Render-ready node delivered by the API. The SDK walks the array and
|
|
4
|
+
* renders each node — there is no further resolution to do.
|
|
5
|
+
*
|
|
6
|
+
* - `PRIMITIVE` — a BB built-in (`Row`, `Column`, `Text`, `Image`, …) with
|
|
7
|
+
* inline props.
|
|
8
|
+
* - `KEY_NAME` — a component the host app registered via
|
|
9
|
+
* `<BitBitView components={{ X: ... }} />`.
|
|
10
|
+
*/
|
|
11
|
+
export type FlatUiPrimitiveNode = {
|
|
12
|
+
id: string;
|
|
13
|
+
kind: 'PRIMITIVE';
|
|
14
|
+
/** BB primitive identifier (e.g. `'Row'`, `'Text'`, `'Image'`). */
|
|
15
|
+
component: string;
|
|
16
|
+
style?: Record<string, unknown>;
|
|
17
|
+
/** Ordered nested-node ids. */
|
|
18
|
+
children?: string[];
|
|
19
|
+
/** Single nested-node id shorthand. */
|
|
20
|
+
child?: string;
|
|
21
|
+
/** Host-facing event bindings. Component-emitted payloads (e.g.
|
|
22
|
+
* `TextField` `{value}`) merge over the static payload at fire time. */
|
|
23
|
+
events?: Record<string, {
|
|
24
|
+
name: string;
|
|
25
|
+
payload?: Record<string, unknown>;
|
|
26
|
+
}>;
|
|
27
|
+
/** Other fields (`text`, `src`, `title`, …) are static props on the node. */
|
|
28
|
+
[prop: string]: unknown;
|
|
29
|
+
};
|
|
30
|
+
export type FlatUiKeyNameNode = {
|
|
31
|
+
id: string;
|
|
32
|
+
kind: 'KEY_NAME';
|
|
33
|
+
/** Name the host registered with `<BitBitView components={{ X: ... }} />`. */
|
|
34
|
+
component: string;
|
|
35
|
+
props?: Record<string, unknown>;
|
|
36
|
+
/** Projected children (ids in the same array). */
|
|
37
|
+
children?: string[];
|
|
38
|
+
child?: string;
|
|
39
|
+
};
|
|
40
|
+
export type FlatUiNode = FlatUiPrimitiveNode | FlatUiKeyNameNode;
|
|
41
|
+
export type SynthesisViewEvent = {
|
|
42
|
+
name: string;
|
|
43
|
+
payload: Record<string, unknown>;
|
|
44
|
+
nodeId: string;
|
|
45
|
+
};
|
|
46
|
+
/** Maps component names → React implementations. Used both for BB
|
|
47
|
+
* primitives and for the host-registered `KEY_NAME` components. */
|
|
48
|
+
export type ComponentMap = Record<string, ComponentType<Record<string, unknown>>>;
|
|
49
|
+
export type ContentInput = {
|
|
50
|
+
type: string;
|
|
51
|
+
value: string;
|
|
52
|
+
};
|
|
53
|
+
export type ViewInputs = {
|
|
54
|
+
/** Provide the dark mode setting of the current UI to the agent. */
|
|
55
|
+
darkMode?: boolean;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Minimal structural shape `<BitBitView>` needs to fetch a view. A
|
|
59
|
+
* `BitBitPressClient` satisfies it via `client.user.synthesizeViewItem(...)`.
|
|
60
|
+
*/
|
|
61
|
+
export interface SynthesizeViewFetcher {
|
|
62
|
+
user: {
|
|
63
|
+
synthesizeViewItem(item: {
|
|
64
|
+
keyName: string;
|
|
65
|
+
contentInputs?: ContentInput[];
|
|
66
|
+
viewInputs?: ViewInputs;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
uiData: unknown[];
|
|
69
|
+
}>;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/synthesisView/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;6EACyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC7E,6EAA6E;IAC7E,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAEjE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;oEACoE;AACpE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAElF,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG;IACvB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE;QACJ,kBAAkB,CAAC,IAAI,EAAE;YACvB,OAAO,EAAE,MAAM,CAAC;YAChB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;YAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;SACzB,GAAG,OAAO,CAAC;YACV,MAAM,EAAE,OAAO,EAAE,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/synthesisView/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ContentInput, FlatUiNode, SynthesizeViewFetcher, ViewInputs } from './types.js';
|
|
2
|
+
export type UseSynthesisViewResult = {
|
|
3
|
+
uiData: FlatUiNode[];
|
|
4
|
+
loading: boolean;
|
|
5
|
+
error: string | null;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Fetches a view's `uiData` by keyName and tracks loading/error state.
|
|
9
|
+
* Re-fetches when keyName, contentInputs, or viewInputs change. Calls
|
|
10
|
+
* coalesce with other views' lookups via the SDK's batch manager.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useSynthesisView(client: SynthesizeViewFetcher, keyName: string, contentInputs?: ContentInput[], viewInputs?: ViewInputs): UseSynthesisViewResult;
|
|
13
|
+
//# sourceMappingURL=useSynthesisView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSynthesisView.d.ts","sourceRoot":"","sources":["../../src/synthesisView/useSynthesisView.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9F,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,YAAY,EAAE,EAC9B,UAAU,CAAC,EAAE,UAAU,GACtB,sBAAsB,CA8CxB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Fetches a view's `uiData` by keyName and tracks loading/error state.
|
|
4
|
+
* Re-fetches when keyName, contentInputs, or viewInputs change. Calls
|
|
5
|
+
* coalesce with other views' lookups via the SDK's batch manager.
|
|
6
|
+
*/
|
|
7
|
+
export function useSynthesisView(client, keyName, contentInputs, viewInputs) {
|
|
8
|
+
const [result, setResult] = useState({
|
|
9
|
+
uiData: [],
|
|
10
|
+
loading: true,
|
|
11
|
+
error: null,
|
|
12
|
+
});
|
|
13
|
+
const contentInputsKey = contentInputs && contentInputs.length > 0 ? JSON.stringify(contentInputs) : '';
|
|
14
|
+
const viewInputsKey = viewInputs ? JSON.stringify(viewInputs) : '';
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
let cancelled = false;
|
|
17
|
+
setResult((prev) => ({ ...prev, loading: true, error: null }));
|
|
18
|
+
const parsedContentInputs = contentInputsKey
|
|
19
|
+
? JSON.parse(contentInputsKey)
|
|
20
|
+
: undefined;
|
|
21
|
+
const parsedViewInputs = viewInputsKey ? JSON.parse(viewInputsKey) : undefined;
|
|
22
|
+
client.user
|
|
23
|
+
.synthesizeViewItem({
|
|
24
|
+
keyName,
|
|
25
|
+
contentInputs: parsedContentInputs,
|
|
26
|
+
viewInputs: parsedViewInputs,
|
|
27
|
+
})
|
|
28
|
+
.then((res) => {
|
|
29
|
+
if (cancelled)
|
|
30
|
+
return;
|
|
31
|
+
const uiData = Array.isArray(res.uiData) ? res.uiData : [];
|
|
32
|
+
setResult({ uiData, loading: false, error: null });
|
|
33
|
+
})
|
|
34
|
+
.catch((err) => {
|
|
35
|
+
if (cancelled)
|
|
36
|
+
return;
|
|
37
|
+
setResult({
|
|
38
|
+
uiData: [],
|
|
39
|
+
loading: false,
|
|
40
|
+
error: err instanceof Error ? err.message : 'Failed to load view',
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
return () => {
|
|
44
|
+
cancelled = true;
|
|
45
|
+
};
|
|
46
|
+
}, [client, keyName, contentInputsKey, viewInputsKey]);
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=useSynthesisView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSynthesisView.js","sourceRoot":"","sources":["../../src/synthesisView/useSynthesisView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS5C;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAA6B,EAC7B,OAAe,EACf,aAA8B,EAC9B,UAAuB;IAEvB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAyB;QAC3D,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,MAAM,gBAAgB,GACpB,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjF,MAAM,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE/D,MAAM,mBAAmB,GAAG,gBAAgB;YAC1C,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAoB;YAClD,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/F,MAAM,CAAC,IAAI;aACR,kBAAkB,CAAC;YAClB,OAAO;YACP,aAAa,EAAE,mBAAmB;YAClC,UAAU,EAAE,gBAAgB;SAC7B,CAAC;aACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,SAAS;gBAAE,OAAO;YACtB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,MAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,IAAI,SAAS;gBAAE,OAAO;YACtB,SAAS,CAAC;gBACR,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;aAClE,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC;IAEvD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/user/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { type Signal, type SignalRequest, type SignalResponse } from './signal.j
|
|
|
8
8
|
import { type CreateUserSubmissionRequest, type CreateUserSubmissionResponse, type ListUserSubmissionsRequest, type ListUserSubmissionsResponse } from './submissions.js';
|
|
9
9
|
import { type SynthesizeEvent, type SynthesizeItemResponse } from './synthesize.js';
|
|
10
10
|
import { type SynthesizeOnStreamingData } from './synthesize-batch-manager.js';
|
|
11
|
+
import { type SynthesizeViewRequestItem, type SynthesizeViewResponse } from './synthesizeView.js';
|
|
11
12
|
import { type TokenRequest, type TokenResponse } from './token.js';
|
|
12
13
|
import type { SynthesizeItem, SynthesizeItems } from './typeDefs.js';
|
|
13
14
|
/**
|
|
@@ -119,9 +120,21 @@ export interface UserMethods {
|
|
|
119
120
|
* @returns Updated aggregates and the user's recorded response
|
|
120
121
|
*/
|
|
121
122
|
respondToInteraction(interactionId: string, options: InteractionResponseRequest): Promise<NonNullable<InteractionResponseResponse>>;
|
|
123
|
+
/**
|
|
124
|
+
* Resolve one or more synthesis views in a single request. Responses are
|
|
125
|
+
* returned in the same order as `items`; an item that matches no view
|
|
126
|
+
* resolves to `{ uiData: [] }`.
|
|
127
|
+
*/
|
|
128
|
+
synthesizeViews(items: SynthesizeViewRequestItem[]): Promise<SynthesizeViewResponse[]>;
|
|
129
|
+
/**
|
|
130
|
+
* Resolve a single view by `keyName`. Calls within a short window are
|
|
131
|
+
* coalesced into one batched request. This is the path `<BitBitView>` uses
|
|
132
|
+
* under the hood.
|
|
133
|
+
*/
|
|
134
|
+
synthesizeViewItem(item: SynthesizeViewRequestItem): Promise<SynthesizeViewResponse>;
|
|
122
135
|
}
|
|
123
136
|
/**
|
|
124
137
|
* User-related API methods (uses shared auth store).
|
|
125
138
|
*/
|
|
126
|
-
export declare function createUserMethods(authStore: AuthStore, config: RequestConfig, synthesizeBatchTimeout?: number, signalBatchTimeout?: number): UserMethods;
|
|
139
|
+
export declare function createUserMethods(authStore: AuthStore, config: RequestConfig, synthesizeBatchTimeout?: number, signalBatchTimeout?: number, synthesizeViewBatchTimeout?: number): UserMethods;
|
|
127
140
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/user/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAa,MAAM,aAAa,CAAC;AACjF,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjG,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EAEjC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAEjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAc,MAAM,iBAAiB,CAAC;AAChG,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"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"}
|
package/dist/user/index.js
CHANGED
|
@@ -10,14 +10,17 @@ const signal_batch_manager_js_1 = require("./signal-batch-manager.js");
|
|
|
10
10
|
const submissions_js_1 = require("./submissions.js");
|
|
11
11
|
const synthesize_js_1 = require("./synthesize.js");
|
|
12
12
|
const synthesize_batch_manager_js_1 = require("./synthesize-batch-manager.js");
|
|
13
|
+
const synthesize_view_batch_manager_js_1 = require("./synthesize-view-batch-manager.js");
|
|
14
|
+
const synthesizeView_js_1 = require("./synthesizeView.js");
|
|
13
15
|
const token_js_1 = require("./token.js");
|
|
14
16
|
/**
|
|
15
17
|
* User-related API methods (uses shared auth store).
|
|
16
18
|
*/
|
|
17
|
-
function createUserMethods(authStore, config, synthesizeBatchTimeout = 250, signalBatchTimeout = 250) {
|
|
19
|
+
function createUserMethods(authStore, config, synthesizeBatchTimeout = 250, signalBatchTimeout = 250, synthesizeViewBatchTimeout = 50) {
|
|
18
20
|
const getConfigWithToken = authStore.getConfigWithToken.bind(authStore);
|
|
19
21
|
const synthesizeBatchManager = new synthesize_batch_manager_js_1.SynthesizeBatchManager(getConfigWithToken, synthesizeBatchTimeout);
|
|
20
22
|
const signalBatchManager = new signal_batch_manager_js_1.SignalBatchManager(getConfigWithToken, signalBatchTimeout);
|
|
23
|
+
const synthesizeViewBatchManager = new synthesize_view_batch_manager_js_1.SynthesizeViewBatchManager(getConfigWithToken, synthesizeViewBatchTimeout);
|
|
21
24
|
return {
|
|
22
25
|
authenticate: authStore.authenticate.bind(authStore),
|
|
23
26
|
token: (ssoToken) => (0, token_js_1.exchangeToken)(config, ssoToken),
|
|
@@ -33,6 +36,8 @@ function createUserMethods(authStore, config, synthesizeBatchTimeout = 250, sign
|
|
|
33
36
|
synthesizeItem: (item, onStreamingData) => synthesizeBatchManager.addItem(item, onStreamingData),
|
|
34
37
|
interactions: (options) => getConfigWithToken().then((cfg) => (0, interaction_js_1.getInteractions)(cfg, options)),
|
|
35
38
|
respondToInteraction: (interactionId, options) => getConfigWithToken().then((cfg) => (0, interaction_js_1.respondToInteraction)(cfg, interactionId, options)),
|
|
39
|
+
synthesizeViews: (items) => getConfigWithToken().then((cfg) => (0, synthesizeView_js_1.synthesizeViews)(cfg, items)),
|
|
40
|
+
synthesizeViewItem: (item) => synthesizeViewBatchManager.addItem(item),
|
|
36
41
|
};
|
|
37
42
|
}
|
|
38
43
|
//# sourceMappingURL=index.js.map
|
package/dist/user/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/user/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RequestConfig } from '../request.js';
|
|
2
|
+
import { type SynthesizeViewRequestItem, type SynthesizeViewResponse } from './synthesizeView.js';
|
|
3
|
+
/**
|
|
4
|
+
* Coalesces individual view lookups (one per `<BitBitView>`) mounted within a
|
|
5
|
+
* short window into a single batched request, resolving each caller from the
|
|
6
|
+
* matching index in the response.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SynthesizeViewBatchManager {
|
|
9
|
+
private queue;
|
|
10
|
+
private timer;
|
|
11
|
+
private getConfig;
|
|
12
|
+
private batchTimeout;
|
|
13
|
+
constructor(getConfig: () => Promise<RequestConfig>, batchTimeout: number);
|
|
14
|
+
addItem(item: SynthesizeViewRequestItem): Promise<SynthesizeViewResponse>;
|
|
15
|
+
private flush;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=synthesize-view-batch-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize-view-batch-manager.d.ts","sourceRoot":"","sources":["../../src/user/synthesize-view-batch-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE5B,MAAM,qBAAqB,CAAC;AAK7B;;;;GAIG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,KAAK,CAIL;IACR,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,YAAY,CAAS;gBAEjB,SAAS,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,MAAM;IAKzE,OAAO,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,sBAAsB,CAAC;YAQ3D,KAAK;CAsBpB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SynthesizeViewBatchManager = void 0;
|
|
4
|
+
const synthesizeView_js_1 = require("./synthesizeView.js");
|
|
5
|
+
/**
|
|
6
|
+
* Coalesces individual view lookups (one per `<BitBitView>`) mounted within a
|
|
7
|
+
* short window into a single batched request, resolving each caller from the
|
|
8
|
+
* matching index in the response.
|
|
9
|
+
*/
|
|
10
|
+
class SynthesizeViewBatchManager {
|
|
11
|
+
queue = [];
|
|
12
|
+
timer = null;
|
|
13
|
+
getConfig;
|
|
14
|
+
batchTimeout;
|
|
15
|
+
constructor(getConfig, batchTimeout) {
|
|
16
|
+
this.getConfig = getConfig;
|
|
17
|
+
this.batchTimeout = batchTimeout;
|
|
18
|
+
}
|
|
19
|
+
addItem(item) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
this.queue.push({ item, resolve, reject });
|
|
22
|
+
if (this.timer)
|
|
23
|
+
clearTimeout(this.timer);
|
|
24
|
+
this.timer = setTimeout(() => this.flush(), this.batchTimeout);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async flush() {
|
|
28
|
+
if (this.queue.length === 0)
|
|
29
|
+
return;
|
|
30
|
+
const batch = [...this.queue];
|
|
31
|
+
this.queue = [];
|
|
32
|
+
this.timer = null;
|
|
33
|
+
try {
|
|
34
|
+
const config = await this.getConfig();
|
|
35
|
+
const results = await (0, synthesizeView_js_1.synthesizeViews)(config, batch.map((b) => b.item));
|
|
36
|
+
batch.forEach((entry, index) => {
|
|
37
|
+
const result = results[index];
|
|
38
|
+
if (result)
|
|
39
|
+
entry.resolve(result);
|
|
40
|
+
else
|
|
41
|
+
entry.reject(new Error('No result for this item in the batch response'));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
46
|
+
for (const entry of batch)
|
|
47
|
+
entry.reject(err);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.SynthesizeViewBatchManager = SynthesizeViewBatchManager;
|
|
52
|
+
//# sourceMappingURL=synthesize-view-batch-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthesize-view-batch-manager.js","sourceRoot":"","sources":["../../src/user/synthesize-view-batch-manager.ts"],"names":[],"mappings":";;;AACA,2DAI6B;AAK7B;;;;GAIG;AACH,MAAa,0BAA0B;IAC7B,KAAK,GAIR,EAAE,CAAC;IACA,KAAK,GAAiB,IAAI,CAAC;IAC3B,SAAS,CAA+B;IACxC,YAAY,CAAS;IAE7B,YAAY,SAAuC,EAAE,YAAoB;QACvE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,OAAO,CAAC,IAA+B;QACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,KAAK;gBAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,IAAA,mCAAe,EACnC,MAAM,EACN,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACzB,CAAC;YACF,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,MAAM;oBAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;;oBAC7B,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,KAAK,MAAM,KAAK,IAAI,KAAK;gBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AA7CD,gEA6CC"}
|