@oxyhq/bloom 0.6.10 → 0.6.12

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.
Files changed (53) hide show
  1. package/README.md +3 -1
  2. package/lib/commonjs/dialog/CenteredDialog.js +9 -1
  3. package/lib/commonjs/dialog/CenteredDialog.js.map +1 -1
  4. package/lib/commonjs/index.js +36 -36
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/index.web.js +38 -38
  7. package/lib/commonjs/index.web.js.map +1 -1
  8. package/lib/commonjs/loading/Loading.js +1 -1
  9. package/lib/commonjs/loading/Loading.web.js +237 -0
  10. package/lib/commonjs/loading/Loading.web.js.map +1 -0
  11. package/lib/commonjs/loading/SpinnerIcon.web.js +144 -0
  12. package/lib/commonjs/loading/SpinnerIcon.web.js.map +1 -0
  13. package/lib/commonjs/loading/index.js +2 -2
  14. package/lib/commonjs/loading/index.web.js +20 -0
  15. package/lib/commonjs/loading/index.web.js.map +1 -0
  16. package/lib/module/dialog/CenteredDialog.js +9 -1
  17. package/lib/module/dialog/CenteredDialog.js.map +1 -1
  18. package/lib/module/index.js +1 -1
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/index.web.js +1 -1
  21. package/lib/module/index.web.js.map +1 -1
  22. package/lib/module/loading/Loading.js +1 -1
  23. package/lib/module/loading/Loading.js.map +1 -1
  24. package/lib/module/loading/Loading.web.js +232 -0
  25. package/lib/module/loading/Loading.web.js.map +1 -0
  26. package/lib/module/loading/SpinnerIcon.web.js +138 -0
  27. package/lib/module/loading/SpinnerIcon.web.js.map +1 -0
  28. package/lib/module/loading/index.js +2 -2
  29. package/lib/module/loading/index.js.map +1 -1
  30. package/lib/module/loading/index.web.js +18 -0
  31. package/lib/module/loading/index.web.js.map +1 -0
  32. package/lib/typescript/commonjs/index.web.d.ts +1 -1
  33. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  34. package/lib/typescript/commonjs/loading/Loading.web.d.ts +4 -0
  35. package/lib/typescript/commonjs/loading/Loading.web.d.ts.map +1 -0
  36. package/lib/typescript/commonjs/loading/SpinnerIcon.web.d.ts +17 -0
  37. package/lib/typescript/commonjs/loading/SpinnerIcon.web.d.ts.map +1 -0
  38. package/lib/typescript/commonjs/loading/index.web.d.ts +4 -0
  39. package/lib/typescript/commonjs/loading/index.web.d.ts.map +1 -0
  40. package/lib/typescript/module/index.web.d.ts +1 -1
  41. package/lib/typescript/module/index.web.d.ts.map +1 -1
  42. package/lib/typescript/module/loading/Loading.web.d.ts +4 -0
  43. package/lib/typescript/module/loading/Loading.web.d.ts.map +1 -0
  44. package/lib/typescript/module/loading/SpinnerIcon.web.d.ts +17 -0
  45. package/lib/typescript/module/loading/SpinnerIcon.web.d.ts.map +1 -0
  46. package/lib/typescript/module/loading/index.web.d.ts +4 -0
  47. package/lib/typescript/module/loading/index.web.d.ts.map +1 -0
  48. package/package.json +6 -1
  49. package/src/dialog/CenteredDialog.tsx +9 -1
  50. package/src/index.web.ts +1 -1
  51. package/src/loading/Loading.web.tsx +244 -0
  52. package/src/loading/SpinnerIcon.web.tsx +134 -0
  53. package/src/loading/index.web.ts +24 -0
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+
3
+ import React, { memo, useMemo } from 'react';
4
+ import { View, Text, StyleSheet } from 'react-native';
5
+ import { useTheme } from "../theme/use-theme.js";
6
+ import { animation } from "../styles/tokens.js";
7
+ import { SpinnerIcon } from "./SpinnerIcon.web.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ const SIZE_CONFIG = {
10
+ small: {
11
+ spinner: 20,
12
+ text: 13
13
+ },
14
+ medium: {
15
+ spinner: 24,
16
+ text: 15
17
+ },
18
+ large: {
19
+ spinner: 44,
20
+ text: 16
21
+ }
22
+ };
23
+ const SpinnerLoading = ({
24
+ size = 'medium',
25
+ color,
26
+ className,
27
+ text,
28
+ textStyle,
29
+ style,
30
+ showText = true,
31
+ iconSize,
32
+ spinnerIcon,
33
+ testID
34
+ }) => {
35
+ const theme = useTheme();
36
+ const sizeConfig = SIZE_CONFIG[size];
37
+ const effectiveIconSize = iconSize ?? sizeConfig.spinner;
38
+ const spinnerColor = className ? 'currentColor' : color ?? theme.colors.primary;
39
+ const textColor = color ?? theme.colors.textSecondary;
40
+ return /*#__PURE__*/_jsxs(View, {
41
+ style: [styles.container, style],
42
+ testID: testID,
43
+ children: [spinnerIcon ?? /*#__PURE__*/_jsx(SpinnerIcon, {
44
+ size: effectiveIconSize,
45
+ color: spinnerColor,
46
+ className: className
47
+ }), showText && text && /*#__PURE__*/_jsx(Text, {
48
+ style: [styles.text, {
49
+ color: textColor,
50
+ fontSize: sizeConfig.text,
51
+ marginTop: 8
52
+ }, textStyle],
53
+ children: text
54
+ })]
55
+ });
56
+ };
57
+
58
+ /**
59
+ * Web fork of the `top` variant.
60
+ *
61
+ * The native variant collapses/expands the container height and slides the
62
+ * spinner in/out with `react-native-reanimated`. Reanimated can't ship to a
63
+ * web bundle (its worklets Babel plugin has no web equivalent and importing it
64
+ * statically breaks the bundler), so this fork drives the same motion with CSS
65
+ * transitions — react-native-web emits `transition-*` style props to the DOM.
66
+ * The element stays mounted across `showLoading` toggles so both directions
67
+ * animate, exactly like the native `withTiming` on `height`, `opacity`, and
68
+ * `translateY`.
69
+ */
70
+ const TopLoading = ({
71
+ size = 'medium',
72
+ color,
73
+ style,
74
+ showLoading = true,
75
+ iconSize,
76
+ heightOffset = 0,
77
+ spinnerIcon,
78
+ testID
79
+ }) => {
80
+ const theme = useTheme();
81
+ const sizeConfig = SIZE_CONFIG[size];
82
+ const effectiveIconSize = iconSize ?? sizeConfig.spinner;
83
+ const targetHeight = Math.max(0, effectiveIconSize + sizeConfig.spinner + heightOffset);
84
+ const spinnerColor = color ?? theme.colors.primary;
85
+ const duration = animation.duration.slow;
86
+ // `cubic-bezier(0.33, 1, 0.68, 1)` is the standard CSS approximation of
87
+ // reanimated's `Easing.out(Easing.cubic)` used by the native variant.
88
+ const easing = 'cubic-bezier(0.33, 1, 0.68, 1)';
89
+ const containerTransition = {
90
+ transitionProperty: 'height',
91
+ transitionDuration: `${duration}ms`,
92
+ transitionTimingFunction: easing
93
+ };
94
+ const innerTransition = {
95
+ transitionProperty: 'opacity, transform',
96
+ transitionDuration: `${duration}ms`,
97
+ transitionTimingFunction: easing
98
+ };
99
+ return /*#__PURE__*/_jsx(View, {
100
+ style: [styles.topContainer, {
101
+ height: showLoading ? targetHeight : 0
102
+ }, containerTransition],
103
+ testID: testID,
104
+ children: /*#__PURE__*/_jsx(View, {
105
+ style: [styles.topLoadingView, {
106
+ height: targetHeight
107
+ }, {
108
+ opacity: showLoading ? 1 : 0,
109
+ transform: [{
110
+ translateY: showLoading ? 0 : -targetHeight
111
+ }]
112
+ }, innerTransition, style],
113
+ children: spinnerIcon ?? /*#__PURE__*/_jsx(SpinnerIcon, {
114
+ size: effectiveIconSize,
115
+ color: spinnerColor
116
+ })
117
+ })
118
+ });
119
+ };
120
+ const SkeletonLoading = ({
121
+ lines = 3,
122
+ width = '100%',
123
+ lineHeight = 16,
124
+ style,
125
+ testID
126
+ }) => {
127
+ const theme = useTheme();
128
+ const skeletonColor = theme.colors.backgroundSecondary;
129
+ const skeletonLines = useMemo(() => Array.from({
130
+ length: lines
131
+ }, (_, index) => /*#__PURE__*/_jsx(View, {
132
+ style: [styles.skeletonLine, {
133
+ width: typeof width === 'string' ? width : `${width}%`,
134
+ height: lineHeight,
135
+ backgroundColor: skeletonColor,
136
+ marginBottom: index < lines - 1 ? 8 : 0
137
+ }]
138
+ }, index)), [lines, width, lineHeight, skeletonColor]);
139
+ return /*#__PURE__*/_jsx(View, {
140
+ style: [styles.skeletonContainer, style],
141
+ testID: testID,
142
+ children: skeletonLines
143
+ });
144
+ };
145
+ const InlineLoading = ({
146
+ size = 'small',
147
+ color,
148
+ text,
149
+ style,
150
+ textStyle,
151
+ spinnerIcon,
152
+ testID
153
+ }) => {
154
+ const theme = useTheme();
155
+ const sizeConfig = SIZE_CONFIG[size];
156
+ const spinnerColor = color ?? theme.colors.primary;
157
+ const textColor = theme.colors.textSecondary;
158
+ return /*#__PURE__*/_jsxs(View, {
159
+ style: [styles.inlineContainer, style],
160
+ testID: testID,
161
+ children: [spinnerIcon ?? /*#__PURE__*/_jsx(SpinnerIcon, {
162
+ size: SIZE_CONFIG.small.spinner,
163
+ color: spinnerColor
164
+ }), text && /*#__PURE__*/_jsx(Text, {
165
+ style: [{
166
+ color: textColor,
167
+ fontSize: sizeConfig.text,
168
+ marginLeft: 8
169
+ }, textStyle],
170
+ children: text
171
+ })]
172
+ });
173
+ };
174
+ const LoadingComponent = props => {
175
+ const variant = props.variant ?? 'spinner';
176
+ switch (variant) {
177
+ case 'top':
178
+ return /*#__PURE__*/_jsx(TopLoading, {
179
+ ...props
180
+ });
181
+ case 'skeleton':
182
+ return /*#__PURE__*/_jsx(SkeletonLoading, {
183
+ ...props
184
+ });
185
+ case 'inline':
186
+ return /*#__PURE__*/_jsx(InlineLoading, {
187
+ ...props
188
+ });
189
+ case 'spinner':
190
+ default:
191
+ return /*#__PURE__*/_jsx(SpinnerLoading, {
192
+ ...props
193
+ });
194
+ }
195
+ };
196
+ export const Loading = /*#__PURE__*/memo(LoadingComponent);
197
+ Loading.displayName = 'Loading';
198
+ const styles = StyleSheet.create({
199
+ container: {
200
+ alignItems: 'center',
201
+ justifyContent: 'center',
202
+ padding: 16
203
+ },
204
+ text: {
205
+ textAlign: 'center'
206
+ },
207
+ topContainer: {
208
+ width: '100%',
209
+ position: 'relative',
210
+ overflow: 'hidden'
211
+ },
212
+ topLoadingView: {
213
+ width: '100%',
214
+ alignItems: 'center',
215
+ justifyContent: 'center',
216
+ position: 'absolute',
217
+ top: 0,
218
+ left: 0
219
+ },
220
+ skeletonContainer: {
221
+ width: '100%'
222
+ },
223
+ skeletonLine: {
224
+ borderRadius: 4
225
+ },
226
+ inlineContainer: {
227
+ flexDirection: 'row',
228
+ alignItems: 'center',
229
+ justifyContent: 'center'
230
+ }
231
+ });
232
+ //# sourceMappingURL=Loading.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","memo","useMemo","View","Text","StyleSheet","useTheme","animation","SpinnerIcon","jsx","_jsx","jsxs","_jsxs","SIZE_CONFIG","small","spinner","text","medium","large","SpinnerLoading","size","color","className","textStyle","style","showText","iconSize","spinnerIcon","testID","theme","sizeConfig","effectiveIconSize","spinnerColor","colors","primary","textColor","textSecondary","styles","container","children","fontSize","marginTop","TopLoading","showLoading","heightOffset","targetHeight","Math","max","duration","slow","easing","containerTransition","transitionProperty","transitionDuration","transitionTimingFunction","innerTransition","topContainer","height","topLoadingView","opacity","transform","translateY","SkeletonLoading","lines","width","lineHeight","skeletonColor","backgroundSecondary","skeletonLines","Array","from","length","_","index","skeletonLine","backgroundColor","marginBottom","skeletonContainer","InlineLoading","inlineContainer","marginLeft","LoadingComponent","props","variant","Loading","displayName","create","alignItems","justifyContent","padding","textAlign","position","overflow","top","left","borderRadius","flexDirection"],"sourceRoot":"../../../src","sources":["loading/Loading.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+
3
+ import React, { useEffect } from 'react';
4
+ import { StyleSheet, View } from 'react-native';
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ /**
7
+ * iOS-style spinner — 8 rotating blades with an opacity-gradient trail.
8
+ *
9
+ * Web fork of `./SpinnerIcon`. The native variant draws the blades with
10
+ * `react-native-svg` and spins them with `react-native-reanimated`. Neither
11
+ * dependency exists in a plain web bundle (and importing reanimated statically
12
+ * breaks any web bundler — its Babel worklets plugin has no web equivalent), so
13
+ * this fork renders the blades as plain `View`s and spins the container with a
14
+ * CSS `@keyframes` rotation injected once into `<head>`.
15
+ *
16
+ * The geometry mirrors the native SVG exactly. The SVG draws each blade on a
17
+ * 100×100 canvas as a `28×10` rounded rect with its top-left at `(67, 45)` —
18
+ * i.e. a blade whose centre sits `31` units to the right of the canvas centre
19
+ * `(50, 50)` — then rotates copies of it about the centre at
20
+ * `-90…225°` in `45°` steps with opacities `0…0.875`. Here each blade is a
21
+ * `View` centred on the container, then `rotate(θ) translateX(radius)` places
22
+ * its centre at distance `radius` from the container centre at angle `θ`. All
23
+ * lengths scale by `size / 100` so any `size` is pixel-identical to native.
24
+ */
25
+ const SVG_CANVAS = 100;
26
+ const BLADE_WIDTH = 28;
27
+ const BLADE_HEIGHT = 10;
28
+ /** Distance from canvas centre to a blade's centre: (67 + 28/2) − 50 = 31. */
29
+ const BLADE_RADIUS = 31;
30
+ const BLADE_RADIUS_CORNER = BLADE_HEIGHT / 2;
31
+
32
+ /** Angle (deg) / opacity for each of the 8 blades, matching the native SVG. */
33
+ const BLADES = [{
34
+ angle: -90,
35
+ opacity: 0
36
+ }, {
37
+ angle: -45,
38
+ opacity: 0.125
39
+ }, {
40
+ angle: 0,
41
+ opacity: 0.25
42
+ }, {
43
+ angle: 45,
44
+ opacity: 0.375
45
+ }, {
46
+ angle: 90,
47
+ opacity: 0.5
48
+ }, {
49
+ angle: 135,
50
+ opacity: 0.625
51
+ }, {
52
+ angle: 180,
53
+ opacity: 0.75
54
+ }, {
55
+ angle: 225,
56
+ opacity: 0.875
57
+ }];
58
+ const SPIN_DURATION_MS = 400;
59
+ const KEYFRAMES_ID = 'bloom-spinner-keyframes';
60
+ const SPIN_ANIMATION_NAME = 'bloomSpinnerRotate';
61
+
62
+ /**
63
+ * CSS keyframes powering the spin. Injected once into `<head>` (keyed by id so
64
+ * multiple spinners and re-mounts don't duplicate the rule). Mirrors the
65
+ * native `withRepeat(withTiming(360, { duration: 400, easing: linear }))`.
66
+ */
67
+ export const BLOOM_SPINNER_CSS = `
68
+ @keyframes ${SPIN_ANIMATION_NAME} { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
69
+ `;
70
+ function useKeyframes() {
71
+ useEffect(() => {
72
+ if (typeof document === 'undefined') return;
73
+ if (document.getElementById(KEYFRAMES_ID)) return;
74
+ const style = document.createElement('style');
75
+ style.id = KEYFRAMES_ID;
76
+ style.textContent = BLOOM_SPINNER_CSS;
77
+ document.head.appendChild(style);
78
+ }, []);
79
+ }
80
+ export const SpinnerIcon = ({
81
+ color = 'currentColor',
82
+ size = 26,
83
+ className,
84
+ style
85
+ }) => {
86
+ useKeyframes();
87
+ const scale = size / SVG_CANVAS;
88
+ const bladeWidth = BLADE_WIDTH * scale;
89
+ const bladeHeight = BLADE_HEIGHT * scale;
90
+ const bladeRadius = BLADE_RADIUS * scale;
91
+ const bladeCorner = BLADE_RADIUS_CORNER * scale;
92
+ return /*#__PURE__*/_jsx(View, {
93
+ ...(className ? {
94
+ className
95
+ } : {}),
96
+ // `animation` is a real CSS prop on web; react-native-web passes it
97
+ // through to the DOM node. Typed as a cast because RN's ViewStyle has no
98
+ // `animation` key.
99
+ style: [styles.container, {
100
+ width: size,
101
+ height: size
102
+ }, {
103
+ animation: `${SPIN_ANIMATION_NAME} ${SPIN_DURATION_MS}ms linear infinite`
104
+ }, style],
105
+ children: BLADES.map(({
106
+ angle,
107
+ opacity
108
+ }) => /*#__PURE__*/_jsx(View, {
109
+ style: [styles.blade, {
110
+ width: bladeWidth,
111
+ height: bladeHeight,
112
+ borderRadius: bladeCorner,
113
+ backgroundColor: color,
114
+ opacity,
115
+ marginLeft: -bladeWidth / 2,
116
+ marginTop: -bladeHeight / 2,
117
+ transform: [{
118
+ rotate: `${angle}deg`
119
+ }, {
120
+ translateX: bladeRadius
121
+ }]
122
+ }]
123
+ }, angle))
124
+ });
125
+ };
126
+ SpinnerIcon.displayName = 'SpinnerIcon';
127
+ const styles = StyleSheet.create({
128
+ container: {
129
+ alignItems: 'center',
130
+ justifyContent: 'center'
131
+ },
132
+ blade: {
133
+ position: 'absolute',
134
+ top: '50%',
135
+ left: '50%'
136
+ }
137
+ });
138
+ //# sourceMappingURL=SpinnerIcon.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","StyleSheet","View","jsx","_jsx","SVG_CANVAS","BLADE_WIDTH","BLADE_HEIGHT","BLADE_RADIUS","BLADE_RADIUS_CORNER","BLADES","angle","opacity","SPIN_DURATION_MS","KEYFRAMES_ID","SPIN_ANIMATION_NAME","BLOOM_SPINNER_CSS","useKeyframes","document","getElementById","style","createElement","id","textContent","head","appendChild","SpinnerIcon","color","size","className","scale","bladeWidth","bladeHeight","bladeRadius","bladeCorner","styles","container","width","height","animation","children","map","blade","borderRadius","backgroundColor","marginLeft","marginTop","transform","rotate","translateX","displayName","create","alignItems","justifyContent","position","top","left"],"sourceRoot":"../../../src","sources":["loading/SpinnerIcon.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
 
3
- export { Loading } from "./Loading.js";
4
- export { SpinnerIcon } from "./SpinnerIcon.js";
3
+ export { Loading } from './Loading';
4
+ export { SpinnerIcon } from './SpinnerIcon';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Loading","SpinnerIcon"],"sourceRoot":"../../../src","sources":["loading/index.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,cAAW;AACnC,SAASC,WAAW,QAAQ,kBAAe","ignoreList":[]}
1
+ {"version":3,"names":["Loading","SpinnerIcon"],"sourceRoot":"../../../src","sources":["loading/index.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,WAAW;AACnC,SAASC,WAAW,QAAQ,eAAe","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ // Web variant of the `./loading` barrel.
4
+ //
5
+ // The default barrel (`./index.ts`) re-exports from `./Loading` and
6
+ // `./SpinnerIcon`, which statically import `react-native-reanimated` (and lazily
7
+ // `react-native-svg`). Reanimated has no web build — its worklets Babel plugin
8
+ // is native-only and importing it statically breaks every web bundler (Vite,
9
+ // webpack, Metro-web). The web forks (`./Loading.web`, `./SpinnerIcon.web`)
10
+ // render the same components with CSS keyframes/transitions and no native deps.
11
+ //
12
+ // Web bundlers select this file via the `"browser"` export condition in
13
+ // `package.json`'s `exports['./loading']`; native bundlers fall through to the
14
+ // React Native build above. Types are platform-agnostic, so they come straight
15
+ // from `./types`.
16
+ export { Loading } from "./Loading.web.js";
17
+ export { SpinnerIcon } from "./SpinnerIcon.web.js";
18
+ //# sourceMappingURL=index.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Loading","SpinnerIcon"],"sourceRoot":"../../../src","sources":["loading/index.web.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,OAAO,QAAQ,kBAAe;AACvC,SAASC,WAAW,QAAQ,sBAAmB","ignoreList":[]}
@@ -19,7 +19,7 @@ export * from './collapsible';
19
19
  export { ErrorBoundary } from './error-boundary';
20
20
  export type { ErrorBoundaryProps, ErrorBoundaryFallback, ErrorBoundaryFallbackContext, } from './error-boundary';
21
21
  export * from './avatar';
22
- export * from './loading';
22
+ export * from './loading/index.web';
23
23
  export * as PromptInput from './prompt-input';
24
24
  export * from './switch';
25
25
  export { toast, type Toast } from './toast/index.web';
@@ -1 +1 @@
1
- {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { LoadingProps } from './types';
3
+ export declare const Loading: React.NamedExoticComponent<LoadingProps>;
4
+ //# sourceMappingURL=Loading.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loading.web.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAM7C,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;AAmMjB,eAAO,MAAM,OAAO,0CAAyB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { type ViewStyle } from 'react-native';
3
+ interface SpinnerIconProps {
4
+ size?: number;
5
+ color?: string;
6
+ className?: string;
7
+ style?: ViewStyle;
8
+ }
9
+ /**
10
+ * CSS keyframes powering the spin. Injected once into `<head>` (keyed by id so
11
+ * multiple spinners and re-mounts don't duplicate the rule). Mirrors the
12
+ * native `withRepeat(withTiming(360, { duration: 400, easing: linear }))`.
13
+ */
14
+ export declare const BLOOM_SPINNER_CSS = "\n@keyframes bloomSpinnerRotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n";
15
+ export declare const SpinnerIcon: React.FC<SpinnerIconProps>;
16
+ export {};
17
+ //# sourceMappingURL=SpinnerIcon.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpinnerIcon.web.d.ts","sourceRoot":"","sources":["../../../../src/loading/SpinnerIcon.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhE,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AA4CD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,8GAE7B,CAAC;AAaF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA+ClD,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { Loading } from './Loading.web';
2
+ export { SpinnerIcon } from './SpinnerIcon.web';
3
+ export type { LoadingProps, LoadingVariant, LoadingSize, SpinnerLoadingProps, TopLoadingProps, SkeletonLoadingProps, InlineLoadingProps, } from './types';
4
+ //# sourceMappingURL=index.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/loading/index.web.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
@@ -19,7 +19,7 @@ export * from './collapsible';
19
19
  export { ErrorBoundary } from './error-boundary';
20
20
  export type { ErrorBoundaryProps, ErrorBoundaryFallback, ErrorBoundaryFallbackContext, } from './error-boundary';
21
21
  export * from './avatar';
22
- export * from './loading';
22
+ export * from './loading/index.web';
23
23
  export * as PromptInput from './prompt-input';
24
24
  export * from './switch';
25
25
  export { toast, type Toast } from './toast/index.web';
@@ -1 +1 @@
1
- {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAMA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGhG,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,MAAM,EACN,cAAc,EACd,+BAA+B,EAC/B,mBAAmB,EACnB,KAAK,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,gBAAgB,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAGxD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAG/B,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { LoadingProps } from './types';
3
+ export declare const Loading: React.NamedExoticComponent<LoadingProps>;
4
+ //# sourceMappingURL=Loading.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loading.web.d.ts","sourceRoot":"","sources":["../../../../src/loading/Loading.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAM7C,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,SAAS,CAAC;AAmMjB,eAAO,MAAM,OAAO,0CAAyB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { type ViewStyle } from 'react-native';
3
+ interface SpinnerIconProps {
4
+ size?: number;
5
+ color?: string;
6
+ className?: string;
7
+ style?: ViewStyle;
8
+ }
9
+ /**
10
+ * CSS keyframes powering the spin. Injected once into `<head>` (keyed by id so
11
+ * multiple spinners and re-mounts don't duplicate the rule). Mirrors the
12
+ * native `withRepeat(withTiming(360, { duration: 400, easing: linear }))`.
13
+ */
14
+ export declare const BLOOM_SPINNER_CSS = "\n@keyframes bloomSpinnerRotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }\n";
15
+ export declare const SpinnerIcon: React.FC<SpinnerIconProps>;
16
+ export {};
17
+ //# sourceMappingURL=SpinnerIcon.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpinnerIcon.web.d.ts","sourceRoot":"","sources":["../../../../src/loading/SpinnerIcon.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAEhE,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AA4CD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,8GAE7B,CAAC;AAaF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA+ClD,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { Loading } from './Loading.web';
2
+ export { SpinnerIcon } from './SpinnerIcon.web';
3
+ export type { LoadingProps, LoadingVariant, LoadingSize, SpinnerLoadingProps, TopLoadingProps, SkeletonLoadingProps, InlineLoadingProps, } from './types';
4
+ //# sourceMappingURL=index.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/loading/index.web.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/bloom",
3
- "version": "0.6.10",
3
+ "version": "0.6.12",
4
4
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -172,6 +172,11 @@
172
172
  },
173
173
  "./loading": {
174
174
  "react-native": "./src/loading/index.ts",
175
+ "browser": {
176
+ "types": "./lib/typescript/module/loading/index.web.d.ts",
177
+ "import": "./lib/module/loading/index.web.js",
178
+ "require": "./lib/commonjs/loading/index.web.js"
179
+ },
175
180
  "import": {
176
181
  "types": "./lib/typescript/module/loading/index.d.ts",
177
182
  "default": "./lib/module/loading/index.js"
@@ -245,7 +245,15 @@ const styles = StyleSheet.create({
245
245
  justifyContent: 'center',
246
246
  },
247
247
  backdrop: {
248
- ...StyleSheet.absoluteFillObject,
248
+ // Spell out the absolute-fill rect (matches `Fill`'s canonical style)
249
+ // rather than spreading the deprecated `StyleSheet.absoluteFillObject`,
250
+ // which RN 0.83's generated types no longer surface on the `StyleSheet`
251
+ // namespace and which downstream type-checks reject.
252
+ position: 'absolute',
253
+ top: 0,
254
+ right: 0,
255
+ bottom: 0,
256
+ left: 0,
249
257
  },
250
258
  // A subtle deepening on press confirms the tap-to-dismiss affordance.
251
259
  backdropPressed: {
package/src/index.web.ts CHANGED
@@ -54,7 +54,7 @@ export type {
54
54
  ErrorBoundaryFallbackContext,
55
55
  } from './error-boundary';
56
56
  export * from './avatar';
57
- export * from './loading';
57
+ export * from './loading/index.web';
58
58
  export * as PromptInput from './prompt-input';
59
59
  export * from './switch';
60
60
  export { toast, type Toast } from './toast/index.web';