@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,41 @@
|
|
|
1
|
+
import { type RenderUnknown, type SynthesisViewTreeProps } from '../synthesisView/engine.js';
|
|
2
|
+
import type { ComponentMap, ContentInput, SynthesisViewEvent, SynthesizeViewFetcher } from '../synthesisView/types.js';
|
|
3
|
+
export { type BitBitContextValue, BitBitProvider } from '../synthesisView/context.js';
|
|
4
|
+
export { createComponentMap, type GlobModules, type RequireContext, } from '../synthesisView/createComponentMap.js';
|
|
5
|
+
export type { ComponentMap, ContentInput, FlatUiKeyNameNode, FlatUiNode, FlatUiPrimitiveNode, SynthesisViewEvent, SynthesizeViewFetcher, ViewInputs, } from '../synthesisView/types.js';
|
|
6
|
+
export { bitBitBuiltins } from './primitives.js';
|
|
7
|
+
export type BitBitViewRendererProps = Omit<SynthesisViewTreeProps, 'renderUnknown' | 'defaultComponents'> & {
|
|
8
|
+
/** Override how unregistered components render. Defaults to a labeled marker. */
|
|
9
|
+
renderUnknown?: RenderUnknown;
|
|
10
|
+
};
|
|
11
|
+
/** Web renderer for a pre-fetched `uiData` array. BB built-in primitives are
|
|
12
|
+
* registered automatically; pass `components` to add or override entries by
|
|
13
|
+
* name. Use `<BitBitView>` if you want it to fetch for you. */
|
|
14
|
+
export declare function BitBitViewRenderer({ renderUnknown, ...rest }: BitBitViewRendererProps): import("react").FunctionComponentElement<SynthesisViewTreeProps>;
|
|
15
|
+
export type BitBitViewProps = {
|
|
16
|
+
/** A BitBitPressClient (or anything with `user.synthesizeViewItem`). */
|
|
17
|
+
client: SynthesizeViewFetcher;
|
|
18
|
+
keyName: string;
|
|
19
|
+
contentInputs?: ContentInput[];
|
|
20
|
+
components?: ComponentMap;
|
|
21
|
+
onEvent?: (event: SynthesisViewEvent) => void;
|
|
22
|
+
renderUnknown?: RenderUnknown;
|
|
23
|
+
/** Force a dark/light mode. Defaults to the browser's
|
|
24
|
+
* `prefers-color-scheme` (live-updates if the user toggles their OS
|
|
25
|
+
* theme). */
|
|
26
|
+
darkMode?: boolean;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Web view: fetches a synthesis view by `keyName` and renders it in place.
|
|
30
|
+
* Renders nothing while loading. Multiple `<BitBitView>` mounts within a
|
|
31
|
+
* short window are coalesced into a single batched request.
|
|
32
|
+
*/
|
|
33
|
+
export declare function BitBitView({ client, keyName, contentInputs, components, onEvent, renderUnknown, darkMode, }: BitBitViewProps): import("react").DetailedReactHTMLElement<{
|
|
34
|
+
'data-bitbit-error': boolean;
|
|
35
|
+
style: {
|
|
36
|
+
color: "#b00020";
|
|
37
|
+
fontFamily: "monospace";
|
|
38
|
+
fontSize: number;
|
|
39
|
+
};
|
|
40
|
+
}, HTMLElement> | import("react").FunctionComponentElement<BitBitViewRendererProps> | null;
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,KAAK,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAsBjD,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,sBAAsB,EACtB,eAAe,GAAG,mBAAmB,CACtC,GAAG;IACF,iFAAiF;IACjF,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAYF;;gEAEgE;AAChE,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,EAAE,uBAAuB,oEAMrF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,wEAAwE;IACxE,MAAM,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;kBAEc;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,OAAO,EACP,aAAa,EACb,UAAU,EACV,OAAO,EACP,aAAa,EACb,QAAQ,GACT,EAAE,eAAe;;;;;;;2FAwBjB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { createElement, useEffect, useState } from 'react';
|
|
2
|
+
import { SynthesisViewTree, } from '../synthesisView/engine.js';
|
|
3
|
+
import { useSynthesisView } from '../synthesisView/useSynthesisView.js';
|
|
4
|
+
import { bitBitBuiltins } from './primitives.js';
|
|
5
|
+
export { BitBitProvider } from '../synthesisView/context.js';
|
|
6
|
+
export { createComponentMap, } from '../synthesisView/createComponentMap.js';
|
|
7
|
+
export { bitBitBuiltins } from './primitives.js';
|
|
8
|
+
/** Track the browser's `prefers-color-scheme` and re-render on change. Returns
|
|
9
|
+
* `null` during SSR or when the API isn't available — callers fall back to
|
|
10
|
+
* the server's default. */
|
|
11
|
+
function useSystemDarkMode() {
|
|
12
|
+
const [isDark, setIsDark] = useState(() => {
|
|
13
|
+
if (typeof window === 'undefined' || !window.matchMedia)
|
|
14
|
+
return null;
|
|
15
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
16
|
+
});
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (typeof window === 'undefined' || !window.matchMedia)
|
|
19
|
+
return;
|
|
20
|
+
const mq = window.matchMedia('(prefers-color-scheme: dark)');
|
|
21
|
+
const onChange = (e) => setIsDark(e.matches);
|
|
22
|
+
mq.addEventListener('change', onChange);
|
|
23
|
+
return () => mq.removeEventListener('change', onChange);
|
|
24
|
+
}, []);
|
|
25
|
+
return isDark;
|
|
26
|
+
}
|
|
27
|
+
const defaultRenderUnknown = (name) => createElement('span', {
|
|
28
|
+
'data-bitbit-unknown': name,
|
|
29
|
+
style: { color: '#b00020', fontFamily: 'monospace', fontSize: 12 },
|
|
30
|
+
}, `⚠ Unknown component: ${name}`);
|
|
31
|
+
/** Web renderer for a pre-fetched `uiData` array. BB built-in primitives are
|
|
32
|
+
* registered automatically; pass `components` to add or override entries by
|
|
33
|
+
* name. Use `<BitBitView>` if you want it to fetch for you. */
|
|
34
|
+
export function BitBitViewRenderer({ renderUnknown, ...rest }) {
|
|
35
|
+
return createElement(SynthesisViewTree, {
|
|
36
|
+
...rest,
|
|
37
|
+
defaultComponents: bitBitBuiltins,
|
|
38
|
+
renderUnknown: renderUnknown ?? defaultRenderUnknown,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Web view: fetches a synthesis view by `keyName` and renders it in place.
|
|
43
|
+
* Renders nothing while loading. Multiple `<BitBitView>` mounts within a
|
|
44
|
+
* short window are coalesced into a single batched request.
|
|
45
|
+
*/
|
|
46
|
+
export function BitBitView({ client, keyName, contentInputs, components, onEvent, renderUnknown, darkMode, }) {
|
|
47
|
+
const systemDark = useSystemDarkMode();
|
|
48
|
+
const resolvedDark = darkMode ?? systemDark ?? undefined;
|
|
49
|
+
const viewInputs = resolvedDark !== undefined ? { darkMode: resolvedDark } : undefined;
|
|
50
|
+
const { uiData, loading, error } = useSynthesisView(client, keyName, contentInputs, viewInputs);
|
|
51
|
+
if (loading)
|
|
52
|
+
return null;
|
|
53
|
+
if (error) {
|
|
54
|
+
return createElement('div', {
|
|
55
|
+
'data-bitbit-error': true,
|
|
56
|
+
style: { color: '#b00020', fontFamily: 'monospace', fontSize: 12 },
|
|
57
|
+
}, error);
|
|
58
|
+
}
|
|
59
|
+
if (!uiData.length)
|
|
60
|
+
return null;
|
|
61
|
+
return createElement(BitBitViewRenderer, {
|
|
62
|
+
uiData,
|
|
63
|
+
components,
|
|
64
|
+
onEvent,
|
|
65
|
+
renderUnknown,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type CSSProperties } from 'react';
|
|
2
|
+
import type { AudioProps, ButtonProps, CardProps, CheckboxProps, ChoicePickerProps, ColumnProps, DateTimeInputProps, DividerProps, GradientProps, HorizontalScrollProps, IconProps, ImageProps, ListProps, ModalProps, PressableProps, RowProps, SliderProps, TabsItemProps, TabsProps, TextFieldProps, TextProps, VerticalScrollProps, VideoProps } from '../synthesisView/primitives.js';
|
|
3
|
+
import type { ComponentMap } from '../synthesisView/types.js';
|
|
4
|
+
export declare function Text({ text, children, ...rest }: TextProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare function Image({ src, alt, ...rest }: ImageProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function Button({ title, children, disabled, onPress, ...rest }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function Pressable({ children, disabled, onPress, style, ...rest }: PressableProps & {
|
|
8
|
+
style?: CSSProperties;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function Icon({ name, ...rest }: IconProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function Video({ src, poster, ...rest }: VideoProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare function Audio({ src, ...rest }: AudioProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function Column({ children, style, ...rest }: ColumnProps & {
|
|
14
|
+
style?: CSSProperties;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function Row({ children, style, ...rest }: RowProps & {
|
|
17
|
+
style?: CSSProperties;
|
|
18
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function List({ children, style, ...rest }: ListProps & {
|
|
20
|
+
style?: CSSProperties;
|
|
21
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function Card({ children, style, ...rest }: CardProps & {
|
|
23
|
+
style?: CSSProperties;
|
|
24
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export declare function Divider({ style, ...rest }: DividerProps & {
|
|
26
|
+
style?: CSSProperties;
|
|
27
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export declare function VerticalScroll({ children, style, ...rest }: VerticalScrollProps & {
|
|
29
|
+
style?: CSSProperties;
|
|
30
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare function HorizontalScroll({ children, style, ...rest }: HorizontalScrollProps & {
|
|
32
|
+
style?: CSSProperties;
|
|
33
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export declare function Gradient({ colors, start, end, locations, children, style, ...rest }: GradientProps & {
|
|
35
|
+
style?: CSSProperties;
|
|
36
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
export declare function Tabs({ defaultValue, children, ...rest }: TabsProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
export declare function TabsItem({ children }: TabsItemProps): import("react/jsx-runtime").JSX.Element;
|
|
39
|
+
export declare function Modal({ open, children, onClose, style, ...rest }: ModalProps & {
|
|
40
|
+
style?: CSSProperties;
|
|
41
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
42
|
+
export declare function TextField({ defaultValue, placeholder, multiline, disabled, onChange, ...rest }: TextFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
export declare function Checkbox({ label, defaultChecked, disabled, onChange, ...rest }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
export declare function ChoicePicker({ defaultValue, options, disabled, onChange, ...rest }: ChoicePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export declare function Slider({ defaultValue, min, max, step, disabled, onChange, ...rest }: SliderProps): import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
export declare function DateTimeInput({ defaultValue, mode, disabled, onChange, ...rest }: DateTimeInputProps): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
/**
|
|
48
|
+
* Default component map: every primitive name → its web implementation. Used
|
|
49
|
+
* as the fallback registry by `<BitBitView>` so a customer renders a view
|
|
50
|
+
* with zero registration. Spread it into a custom map to add or override:
|
|
51
|
+
* `<BitBitProvider components={{ ...bitBitBuiltins, MyCard }}>`.
|
|
52
|
+
*/
|
|
53
|
+
export declare const bitBitBuiltins: ComponentMap;
|
|
54
|
+
//# sourceMappingURL=primitives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../src/react/primitives.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Children, isValidElement, useState, } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* BB built-in primitive implementations for the web (React DOM). Each
|
|
5
|
+
* primitive forwards extra props (`style`, `className`, ARIA, …) to its host
|
|
6
|
+
* element so the UI tree author owns the look. Layout primitives (Column,
|
|
7
|
+
* Card, List) merge a minimal structural style with the author-supplied
|
|
8
|
+
* `style`, with the author's keys winning on conflict.
|
|
9
|
+
*/
|
|
10
|
+
/** Merge two style objects; the second's keys win. Skipped when neither is set. */
|
|
11
|
+
function mergeStyle(base, extra) {
|
|
12
|
+
if (!base && !extra)
|
|
13
|
+
return undefined;
|
|
14
|
+
return { ...(base ?? {}), ...(extra ?? {}) };
|
|
15
|
+
}
|
|
16
|
+
// --- Text -------------------------------------------------------------------
|
|
17
|
+
export function Text({ text, children, ...rest }) {
|
|
18
|
+
return _jsx("span", { ...rest, children: text ?? children });
|
|
19
|
+
}
|
|
20
|
+
// --- Image ------------------------------------------------------------------
|
|
21
|
+
export function Image({ src, alt = '', ...rest }) {
|
|
22
|
+
return _jsx("img", { src: src, alt: alt, ...rest });
|
|
23
|
+
}
|
|
24
|
+
// --- Button -----------------------------------------------------------------
|
|
25
|
+
export function Button({ title, children, disabled, onPress, ...rest }) {
|
|
26
|
+
return (_jsx("button", { type: "button", disabled: disabled, onClick: () => onPress?.(), ...rest, children: title ?? children }));
|
|
27
|
+
}
|
|
28
|
+
// --- Pressable --------------------------------------------------------------
|
|
29
|
+
export function Pressable({ children, disabled, onPress, style, ...rest }) {
|
|
30
|
+
const handleClick = () => {
|
|
31
|
+
if (!disabled)
|
|
32
|
+
onPress?.();
|
|
33
|
+
};
|
|
34
|
+
const handleKey = (e) => {
|
|
35
|
+
if (disabled)
|
|
36
|
+
return;
|
|
37
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
onPress?.();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return (_jsx(_Fragment, { children: _jsx("div", { role: "button", tabIndex: disabled ? -1 : 0, "aria-disabled": disabled || undefined, onClick: handleClick, onKeyDown: handleKey, style: mergeStyle({ cursor: disabled ? 'not-allowed' : 'pointer' }, style), ...rest, children: children }) }));
|
|
43
|
+
}
|
|
44
|
+
// --- Icon -------------------------------------------------------------------
|
|
45
|
+
export function Icon({ name, ...rest }) {
|
|
46
|
+
return (_jsx("span", { "aria-label": name, role: "img", ...rest, children: name }));
|
|
47
|
+
}
|
|
48
|
+
// --- Video / Audio ----------------------------------------------------------
|
|
49
|
+
export function Video({ src, poster, ...rest }) {
|
|
50
|
+
return _jsx("video", { src: src, poster: poster, ...rest });
|
|
51
|
+
}
|
|
52
|
+
export function Audio({ src, ...rest }) {
|
|
53
|
+
return _jsx("audio", { src: src, ...rest });
|
|
54
|
+
}
|
|
55
|
+
// --- Row / Column / List / Card / Divider -----------------------------------
|
|
56
|
+
export function Column({ children, style, ...rest }) {
|
|
57
|
+
return (_jsx("div", { style: mergeStyle({ display: 'flex', flexDirection: 'column' }, style), ...rest, children: children }));
|
|
58
|
+
}
|
|
59
|
+
export function Row({ children, style, ...rest }) {
|
|
60
|
+
return (_jsx("div", { style: mergeStyle({ display: 'flex', flexDirection: 'row' }, style), ...rest, children: children }));
|
|
61
|
+
}
|
|
62
|
+
export function List({ children, style, ...rest }) {
|
|
63
|
+
return (_jsx("div", { style: mergeStyle({ display: 'flex', flexDirection: 'column' }, style), ...rest, children: Children.toArray(children) }));
|
|
64
|
+
}
|
|
65
|
+
export function Card({ children, style, ...rest }) {
|
|
66
|
+
return (_jsx("div", { style: mergeStyle({ border: '1px solid #e5e7eb', borderRadius: 8, padding: 12, background: '#ffffff' }, style), ...rest, children: children }));
|
|
67
|
+
}
|
|
68
|
+
export function Divider({ style, ...rest }) {
|
|
69
|
+
return _jsx("div", { style: mergeStyle({ height: 1, background: '#e5e7eb' }, style), ...rest });
|
|
70
|
+
}
|
|
71
|
+
// --- Scroll: VerticalScroll / HorizontalScroll -----------------------------
|
|
72
|
+
export function VerticalScroll({ children, style, ...rest }) {
|
|
73
|
+
return (_jsx("div", { style: mergeStyle({ display: 'flex', flexDirection: 'column', overflowY: 'auto' }, style), ...rest, children: children }));
|
|
74
|
+
}
|
|
75
|
+
export function HorizontalScroll({ children, style, ...rest }) {
|
|
76
|
+
return (_jsx("div", { style: mergeStyle({ display: 'flex', flexDirection: 'row', overflowX: 'auto' }, style), ...rest, children: children }));
|
|
77
|
+
}
|
|
78
|
+
// --- Gradient ---------------------------------------------------------------
|
|
79
|
+
const DEFAULT_GRADIENT_START = { x: 0, y: 0 };
|
|
80
|
+
const DEFAULT_GRADIENT_END = { x: 0, y: 1 };
|
|
81
|
+
/** Convert a start→end vector (each axis in [0,1], y pointing down) to a CSS
|
|
82
|
+
* gradient angle, where 0° = "to top" and angle increases clockwise. */
|
|
83
|
+
function gradientAngleDeg(start, end) {
|
|
84
|
+
const dx = end.x - start.x;
|
|
85
|
+
const dy = end.y - start.y;
|
|
86
|
+
const rad = Math.atan2(dx, -dy);
|
|
87
|
+
return ((rad * 180) / Math.PI + 360) % 360;
|
|
88
|
+
}
|
|
89
|
+
function gradientStops(colors, locations) {
|
|
90
|
+
return colors
|
|
91
|
+
.map((color, i) => {
|
|
92
|
+
const loc = locations?.[i];
|
|
93
|
+
return loc !== undefined ? `${color} ${loc * 100}%` : color;
|
|
94
|
+
})
|
|
95
|
+
.join(', ');
|
|
96
|
+
}
|
|
97
|
+
export function Gradient({ colors, start = DEFAULT_GRADIENT_START, end = DEFAULT_GRADIENT_END, locations, children, style, ...rest }) {
|
|
98
|
+
const angle = gradientAngleDeg(start, end);
|
|
99
|
+
const backgroundImage = `linear-gradient(${angle}deg, ${gradientStops(colors, locations)})`;
|
|
100
|
+
return (_jsx("div", { style: mergeStyle({ backgroundImage }, style), ...rest, children: children }));
|
|
101
|
+
}
|
|
102
|
+
function isTabsItem(node) {
|
|
103
|
+
return isValidElement(node) && node.props?.value !== undefined;
|
|
104
|
+
}
|
|
105
|
+
export function Tabs({ defaultValue, children, ...rest }) {
|
|
106
|
+
const items = Children.toArray(children).filter(isTabsItem);
|
|
107
|
+
const firstValue = items[0]?.props.value;
|
|
108
|
+
const [active, setActive] = useState(defaultValue ?? firstValue);
|
|
109
|
+
const activeItem = items.find((item) => item.props.value === active) ?? items[0];
|
|
110
|
+
return (_jsxs("div", { ...rest, children: [_jsx("div", { style: { display: 'flex', gap: 4, borderBottom: '1px solid #e5e7eb' }, children: items.map((item) => {
|
|
111
|
+
const isActive = item.props.value === active;
|
|
112
|
+
return (_jsx("button", { type: "button", onClick: () => setActive(item.props.value), style: {
|
|
113
|
+
background: 'transparent',
|
|
114
|
+
border: 'none',
|
|
115
|
+
padding: '8px 12px',
|
|
116
|
+
cursor: 'pointer',
|
|
117
|
+
borderBottom: isActive ? '2px solid currentColor' : '2px solid transparent',
|
|
118
|
+
marginBottom: -1,
|
|
119
|
+
font: 'inherit',
|
|
120
|
+
}, children: item.props.label }, item.props.value));
|
|
121
|
+
}) }), _jsx("div", { children: activeItem?.props.children })] }));
|
|
122
|
+
}
|
|
123
|
+
export function TabsItem({ children }) {
|
|
124
|
+
// Rendered inertly when used outside Tabs; Tabs reads `value`/`label`/`children` directly.
|
|
125
|
+
return _jsx(_Fragment, { children: children });
|
|
126
|
+
}
|
|
127
|
+
// --- Modal ------------------------------------------------------------------
|
|
128
|
+
export function Modal({ open = true, children, onClose, style, ...rest }) {
|
|
129
|
+
const [visible, setVisible] = useState(open);
|
|
130
|
+
if (!visible || !open)
|
|
131
|
+
return null;
|
|
132
|
+
const dismiss = () => {
|
|
133
|
+
setVisible(false);
|
|
134
|
+
onClose?.();
|
|
135
|
+
};
|
|
136
|
+
return (_jsx("div", { role: "dialog", "aria-modal": "true", onClick: dismiss, onKeyDown: (e) => {
|
|
137
|
+
if (e.key === 'Escape')
|
|
138
|
+
dismiss();
|
|
139
|
+
}, style: {
|
|
140
|
+
position: 'fixed',
|
|
141
|
+
inset: 0,
|
|
142
|
+
background: 'rgba(0,0,0,0.4)',
|
|
143
|
+
display: 'flex',
|
|
144
|
+
alignItems: 'center',
|
|
145
|
+
justifyContent: 'center',
|
|
146
|
+
zIndex: 1000,
|
|
147
|
+
}, children: _jsx("div", { onClick: (e) => e.stopPropagation(), style: mergeStyle({ background: '#ffffff', borderRadius: 8, padding: 16, maxWidth: 480, width: '90%' }, style), ...rest, children: children }) }));
|
|
148
|
+
}
|
|
149
|
+
// --- Form -------------------------------------------------------------------
|
|
150
|
+
export function TextField({ defaultValue, placeholder, multiline, disabled, onChange, ...rest }) {
|
|
151
|
+
const [value, setValue] = useState(defaultValue ?? '');
|
|
152
|
+
const handle = (v) => {
|
|
153
|
+
setValue(v);
|
|
154
|
+
onChange?.({ value: v });
|
|
155
|
+
};
|
|
156
|
+
return multiline ? (_jsx("textarea", { value: value, placeholder: placeholder, disabled: disabled, onChange: (e) => handle(e.target.value), ...rest })) : (_jsx("input", { type: "text", value: value, placeholder: placeholder, disabled: disabled, onChange: (e) => handle(e.target.value), ...rest }));
|
|
157
|
+
}
|
|
158
|
+
export function Checkbox({ label, defaultChecked, disabled, onChange, ...rest }) {
|
|
159
|
+
const [checked, setChecked] = useState(defaultChecked ?? false);
|
|
160
|
+
const handle = (v) => {
|
|
161
|
+
setChecked(v);
|
|
162
|
+
onChange?.({ value: v });
|
|
163
|
+
};
|
|
164
|
+
return (_jsxs("label", { style: { display: 'inline-flex', alignItems: 'center', gap: 6, cursor: 'pointer' }, children: [_jsx("input", { type: "checkbox", checked: checked, disabled: disabled, onChange: (e) => handle(e.target.checked), ...rest }), label && _jsx("span", { children: label })] }));
|
|
165
|
+
}
|
|
166
|
+
export function ChoicePicker({ defaultValue, options, disabled, onChange, ...rest }) {
|
|
167
|
+
const [value, setValue] = useState(defaultValue ?? options[0]?.value ?? '');
|
|
168
|
+
const handle = (v) => {
|
|
169
|
+
setValue(v);
|
|
170
|
+
onChange?.({ value: v });
|
|
171
|
+
};
|
|
172
|
+
return (_jsx("div", { ...rest, children: options.map((opt) => (_jsxs("label", { style: { display: 'flex', alignItems: 'center', gap: 6, cursor: 'pointer' }, children: [_jsx("input", { type: "radio", checked: value === opt.value, disabled: disabled, onChange: () => handle(opt.value) }), _jsx("span", { children: opt.label })] }, opt.value))) }));
|
|
173
|
+
}
|
|
174
|
+
export function Slider({ defaultValue, min = 0, max = 100, step = 1, disabled, onChange, ...rest }) {
|
|
175
|
+
const [value, setValue] = useState(defaultValue ?? min);
|
|
176
|
+
const handle = (v) => {
|
|
177
|
+
setValue(v);
|
|
178
|
+
onChange?.({ value: v });
|
|
179
|
+
};
|
|
180
|
+
return (_jsx("input", { type: "range", min: min, max: max, step: step, value: value, disabled: disabled, onChange: (e) => handle(Number(e.target.value)), ...rest }));
|
|
181
|
+
}
|
|
182
|
+
export function DateTimeInput({ defaultValue, mode = 'date', disabled, onChange, ...rest }) {
|
|
183
|
+
const [value, setValue] = useState(defaultValue ?? '');
|
|
184
|
+
const handle = (v) => {
|
|
185
|
+
setValue(v);
|
|
186
|
+
onChange?.({ value: v });
|
|
187
|
+
};
|
|
188
|
+
const type = mode === 'time' ? 'time' : mode === 'datetime' ? 'datetime-local' : 'date';
|
|
189
|
+
return (_jsx("input", { type: type, value: value, disabled: disabled, onChange: (e) => handle(e.target.value), ...rest }));
|
|
190
|
+
}
|
|
191
|
+
// --- Registry ---------------------------------------------------------------
|
|
192
|
+
/**
|
|
193
|
+
* Default component map: every primitive name → its web implementation. Used
|
|
194
|
+
* as the fallback registry by `<BitBitView>` so a customer renders a view
|
|
195
|
+
* with zero registration. Spread it into a custom map to add or override:
|
|
196
|
+
* `<BitBitProvider components={{ ...bitBitBuiltins, MyCard }}>`.
|
|
197
|
+
*/
|
|
198
|
+
export const bitBitBuiltins = {
|
|
199
|
+
Text: Text,
|
|
200
|
+
Image: Image,
|
|
201
|
+
Button: Button,
|
|
202
|
+
Pressable: Pressable,
|
|
203
|
+
Icon: Icon,
|
|
204
|
+
Video: Video,
|
|
205
|
+
Audio: Audio,
|
|
206
|
+
Column: Column,
|
|
207
|
+
Row: Row,
|
|
208
|
+
List: List,
|
|
209
|
+
Card: Card,
|
|
210
|
+
VerticalScroll: VerticalScroll,
|
|
211
|
+
HorizontalScroll: HorizontalScroll,
|
|
212
|
+
Tabs: Tabs,
|
|
213
|
+
TabsItem: TabsItem,
|
|
214
|
+
Modal: Modal,
|
|
215
|
+
Divider: Divider,
|
|
216
|
+
Gradient: Gradient,
|
|
217
|
+
TextField: TextField,
|
|
218
|
+
Checkbox: Checkbox,
|
|
219
|
+
ChoicePicker: ChoicePicker,
|
|
220
|
+
Slider: Slider,
|
|
221
|
+
DateTimeInput: DateTimeInput,
|
|
222
|
+
};
|
|
223
|
+
//# sourceMappingURL=primitives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/react/primitives.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type RenderUnknown, type SynthesisViewTreeProps } from '../synthesisView/engine.js';
|
|
2
|
+
import type { ComponentMap, ContentInput, SynthesisViewEvent, SynthesizeViewFetcher } from '../synthesisView/types.js';
|
|
3
|
+
export { type BitBitContextValue, BitBitProvider } from '../synthesisView/context.js';
|
|
4
|
+
export { createComponentMap, type GlobModules, type RequireContext, } from '../synthesisView/createComponentMap.js';
|
|
5
|
+
export type { ComponentMap, ContentInput, FlatUiKeyNameNode, FlatUiNode, FlatUiPrimitiveNode, SynthesisViewEvent, SynthesizeViewFetcher, ViewInputs, } from '../synthesisView/types.js';
|
|
6
|
+
export { bitBitBuiltins } from './primitives.js';
|
|
7
|
+
export type BitBitViewRendererProps = Omit<SynthesisViewTreeProps, 'renderUnknown' | 'defaultComponents'> & {
|
|
8
|
+
/**
|
|
9
|
+
* Override how unregistered components render. Defaults to nothing — most
|
|
10
|
+
* uses won't hit it because the BB built-in primitives cover every name a
|
|
11
|
+
* default tree references. Pass one to surface unknown components in dev.
|
|
12
|
+
*/
|
|
13
|
+
renderUnknown?: RenderUnknown;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* React Native (Expo) renderer for a pre-fetched `uiData` array. BB built-in
|
|
17
|
+
* primitives are registered automatically; pass `components` to add or
|
|
18
|
+
* override entries by name. Targets Expo specifically — the built-ins lean
|
|
19
|
+
* on Expo packages (`expo-linear-gradient`, etc.). Use `<BitBitView>` if you
|
|
20
|
+
* want it to fetch for you.
|
|
21
|
+
*/
|
|
22
|
+
export declare function BitBitViewRenderer({ renderUnknown, ...rest }: BitBitViewRendererProps): import("react").FunctionComponentElement<SynthesisViewTreeProps>;
|
|
23
|
+
export type BitBitViewProps = {
|
|
24
|
+
/** A BitBitPressClient (or anything with `user.synthesizeViewItem`). */
|
|
25
|
+
client: SynthesizeViewFetcher;
|
|
26
|
+
keyName: string;
|
|
27
|
+
contentInputs?: ContentInput[];
|
|
28
|
+
components?: ComponentMap;
|
|
29
|
+
onEvent?: (event: SynthesisViewEvent) => void;
|
|
30
|
+
renderUnknown?: RenderUnknown;
|
|
31
|
+
/** Force a dark/light mode. Defaults to the system appearance via RN's
|
|
32
|
+
* `useColorScheme` (re-renders when the user toggles their OS theme). */
|
|
33
|
+
darkMode?: boolean;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* React Native (Expo) view: fetches a synthesis view by `keyName` and renders
|
|
37
|
+
* it in place. Renders nothing while loading or on error (RN has no text
|
|
38
|
+
* host). Multiple `<BitBitView>` mounts within a short window are coalesced
|
|
39
|
+
* into a single batched request.
|
|
40
|
+
*/
|
|
41
|
+
export declare function BitBitView({ client, keyName, contentInputs, components, onEvent, renderUnknown, darkMode, }: BitBitViewProps): import("react").FunctionComponentElement<BitBitViewRendererProps> | null;
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react-native-expo/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,KAAK,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,GACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,sBAAsB,EACtB,eAAe,GAAG,mBAAmB,CACtC,GAAG;IACF;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAyCF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,EAAE,uBAAuB,oEAOrF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,wEAAwE;IACxE,MAAM,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,OAAO,EACP,aAAa,EACb,UAAU,EACV,OAAO,EACP,aAAa,EACb,QAAQ,GACT,EAAE,eAAe,4EAcjB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createElement } from 'react';
|
|
2
|
+
import { useColorScheme } from 'react-native';
|
|
3
|
+
import { SynthesisViewTree, } from '../synthesisView/engine.js';
|
|
4
|
+
import { useSynthesisView } from '../synthesisView/useSynthesisView.js';
|
|
5
|
+
import { bitBitBuiltins } from './primitives.js';
|
|
6
|
+
export { BitBitProvider } from '../synthesisView/context.js';
|
|
7
|
+
export { createComponentMap, } from '../synthesisView/createComponentMap.js';
|
|
8
|
+
export { bitBitBuiltins } from './primitives.js';
|
|
9
|
+
const defaultRenderUnknown = () => null;
|
|
10
|
+
const DEFAULT_FONT_SIZE = 16;
|
|
11
|
+
/** Extract the primary family name from a CSS-shape `fontFamily` value.
|
|
12
|
+
* Web takes the full fallback chain (`'"Inter-Regular", "Inter", ...'`);
|
|
13
|
+
* RN takes one registered name, so we keep the first segment and strip
|
|
14
|
+
* quotes. Single-name input passes through unchanged. */
|
|
15
|
+
function pickRNFontFamily(value) {
|
|
16
|
+
const first = value.split(',')[0]?.trim();
|
|
17
|
+
if (!first)
|
|
18
|
+
return value;
|
|
19
|
+
return first.replace(/^["']|["']$/g, '');
|
|
20
|
+
}
|
|
21
|
+
/** Bridge CSS-shape style values into RN's stricter form. Two patches:
|
|
22
|
+
* - `lineHeight` as a unitless multiplier (CSS) → pixels using `fontSize`
|
|
23
|
+
* on the same node (RN treats numeric lineHeight as pixels).
|
|
24
|
+
* - `fontFamily` CSS fallback chain → first registered name (RN accepts
|
|
25
|
+
* one family at a time). */
|
|
26
|
+
function normalizeRNStyle(value) {
|
|
27
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
28
|
+
return value;
|
|
29
|
+
const obj = value;
|
|
30
|
+
let changed = false;
|
|
31
|
+
const out = { ...obj };
|
|
32
|
+
if (typeof obj.lineHeight === 'number' && obj.lineHeight < 4) {
|
|
33
|
+
const fontSize = typeof obj.fontSize === 'number' ? obj.fontSize : DEFAULT_FONT_SIZE;
|
|
34
|
+
out.lineHeight = obj.lineHeight * fontSize;
|
|
35
|
+
changed = true;
|
|
36
|
+
}
|
|
37
|
+
if (typeof obj.fontFamily === 'string' && obj.fontFamily.includes(',')) {
|
|
38
|
+
out.fontFamily = pickRNFontFamily(obj.fontFamily);
|
|
39
|
+
changed = true;
|
|
40
|
+
}
|
|
41
|
+
return changed ? out : value;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* React Native (Expo) renderer for a pre-fetched `uiData` array. BB built-in
|
|
45
|
+
* primitives are registered automatically; pass `components` to add or
|
|
46
|
+
* override entries by name. Targets Expo specifically — the built-ins lean
|
|
47
|
+
* on Expo packages (`expo-linear-gradient`, etc.). Use `<BitBitView>` if you
|
|
48
|
+
* want it to fetch for you.
|
|
49
|
+
*/
|
|
50
|
+
export function BitBitViewRenderer({ renderUnknown, ...rest }) {
|
|
51
|
+
return createElement(SynthesisViewTree, {
|
|
52
|
+
...rest,
|
|
53
|
+
defaultComponents: bitBitBuiltins,
|
|
54
|
+
normalizeStyle: normalizeRNStyle,
|
|
55
|
+
renderUnknown: renderUnknown ?? defaultRenderUnknown,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* React Native (Expo) view: fetches a synthesis view by `keyName` and renders
|
|
60
|
+
* it in place. Renders nothing while loading or on error (RN has no text
|
|
61
|
+
* host). Multiple `<BitBitView>` mounts within a short window are coalesced
|
|
62
|
+
* into a single batched request.
|
|
63
|
+
*/
|
|
64
|
+
export function BitBitView({ client, keyName, contentInputs, components, onEvent, renderUnknown, darkMode, }) {
|
|
65
|
+
const systemScheme = useColorScheme();
|
|
66
|
+
const resolvedDark = darkMode ?? (systemScheme === 'dark' ? true : systemScheme === 'light' ? false : undefined);
|
|
67
|
+
const viewInputs = resolvedDark !== undefined ? { darkMode: resolvedDark } : undefined;
|
|
68
|
+
const { uiData, loading, error } = useSynthesisView(client, keyName, contentInputs, viewInputs);
|
|
69
|
+
if (loading || error || !uiData.length)
|
|
70
|
+
return null;
|
|
71
|
+
return createElement(BitBitViewRenderer, {
|
|
72
|
+
uiData,
|
|
73
|
+
components,
|
|
74
|
+
onEvent,
|
|
75
|
+
renderUnknown,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react-native-expo/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { AudioProps, ButtonProps, CardProps, CheckboxProps, ChoicePickerProps, ColumnProps, DateTimeInputProps, DividerProps, GradientProps, HorizontalScrollProps, IconProps, ImageProps, ListProps, ModalProps, PressableProps, RowProps, SliderProps, TabsItemProps, TabsProps, TextFieldProps, TextProps, VerticalScrollProps, VideoProps } from '../synthesisView/primitives.js';
|
|
2
|
+
import type { ComponentMap } from '../synthesisView/types.js';
|
|
3
|
+
export declare function Text({ text, children, ...rest }: TextProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare function Image({ src, alt, ...rest }: ImageProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare function Button({ title, children, disabled, onPress, ...rest }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function Pressable({ children, disabled, onPress, ...rest }: PressableProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare function Icon({ name, ...rest }: IconProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function Video({ src, style, ...rest }: VideoProps & {
|
|
9
|
+
style?: unknown;
|
|
10
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function Audio({ src, style, ...rest }: AudioProps & {
|
|
12
|
+
style?: unknown;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function Column({ children, style, ...rest }: ColumnProps & {
|
|
15
|
+
style?: unknown;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export declare function Row({ children, style, ...rest }: RowProps & {
|
|
18
|
+
style?: unknown;
|
|
19
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export declare function List({ children, style, ...rest }: ListProps & {
|
|
21
|
+
style?: unknown;
|
|
22
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare function Card({ children, style, ...rest }: CardProps & {
|
|
24
|
+
style?: unknown;
|
|
25
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export declare function Divider({ style, ...rest }: DividerProps & {
|
|
27
|
+
style?: unknown;
|
|
28
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export declare function VerticalScroll({ children, style, ...rest }: VerticalScrollProps & {
|
|
30
|
+
style?: unknown;
|
|
31
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export declare function HorizontalScroll({ children, style, ...rest }: HorizontalScrollProps & {
|
|
33
|
+
style?: unknown;
|
|
34
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
/**
|
|
36
|
+
* Linear gradient backdrop via `expo-linear-gradient`. We forward `colors`,
|
|
37
|
+
* `start`, `end`, and `locations` straight through — the contract intentionally
|
|
38
|
+
* mirrors expo-linear-gradient's shape so the prop set is one-to-one on RN.
|
|
39
|
+
* The web impl converts the same fields to a CSS `linear-gradient(...)`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function Gradient({ colors, start, end, locations, children, ...rest }: GradientProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export declare function Tabs({ defaultValue, children, ...rest }: TabsProps): import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
export declare function TabsItem({ children }: TabsItemProps): import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
export declare function Modal({ open, children, onClose, style, ...rest }: ModalProps & {
|
|
45
|
+
style?: unknown;
|
|
46
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export declare function TextField({ defaultValue, placeholder, multiline, disabled, onChange, ...rest }: TextFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export declare function Checkbox({ label, defaultChecked, disabled, onChange, ...rest }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export declare function ChoicePicker({ defaultValue, options, disabled, onChange, ...rest }: ChoicePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
export declare function Slider({ defaultValue, min, max, step, disabled, onChange, ...rest }: SliderProps): import("react/jsx-runtime").JSX.Element;
|
|
51
|
+
export declare function DateTimeInput({ defaultValue, mode, disabled, onChange, ...rest }: DateTimeInputProps): import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
/**
|
|
53
|
+
* Default component map for React Native; mirrors the web `bitBitBuiltins`
|
|
54
|
+
* name-for-name. Used as the fallback registry by `<BitBitView>` so a
|
|
55
|
+
* customer renders a view with zero registration. Spread to override.
|
|
56
|
+
*/
|
|
57
|
+
export declare const bitBitBuiltins: ComponentMap;
|
|
58
|
+
//# sourceMappingURL=primitives.d.ts.map
|