@mrmeg/expo-ui 0.27.1 → 0.29.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/CHANGELOG.md +666 -0
- package/LLM_USAGE.md +241 -37
- package/README.md +591 -136
- package/bin/expo-ui-icons.mjs +509 -0
- package/dist/components/Accordion.js +12 -6
- package/dist/components/AnimatedView.d.ts +1 -1
- package/dist/components/AnimatedView.js +5 -2
- package/dist/components/Avatar.d.ts +1 -1
- package/dist/components/Avatar.js +2 -2
- package/dist/components/Badge.js +5 -1
- package/dist/components/BottomSheet.d.ts +29 -1
- package/dist/components/BottomSheet.js +107 -30
- package/dist/components/Button.d.ts +20 -4
- package/dist/components/Button.js +60 -43
- package/dist/components/Card.d.ts +1 -1
- package/dist/components/Card.js +24 -4
- package/dist/components/Carousel.js +2 -2
- package/dist/components/Checkbox.js +51 -44
- package/dist/components/Collapsible.js +7 -3
- package/dist/components/Dialog.js +87 -16
- package/dist/components/Drawer.d.ts +1 -1
- package/dist/components/Drawer.js +65 -55
- package/dist/components/DropdownMenu.js +11 -7
- package/dist/components/EmptyState.d.ts +2 -2
- package/dist/components/EmptyState.js +5 -2
- package/dist/components/Hydrated.d.ts +31 -0
- package/dist/components/Hydrated.js +30 -0
- package/dist/components/Icon.d.ts +71 -28
- package/dist/components/Icon.js +70 -28
- package/dist/components/IconGlyph.d.ts +15 -0
- package/dist/components/IconGlyph.js +32 -0
- package/dist/components/IconGlyph.native.d.ts +10 -0
- package/dist/components/IconGlyph.native.js +30 -0
- package/dist/components/InputOTP.js +5 -2
- package/dist/components/Item.d.ts +103 -4
- package/dist/components/Item.js +168 -15
- package/dist/components/KeyboardAvoidingView.d.ts +1 -1
- package/dist/components/KeyboardAvoidingView.js +4 -1
- package/dist/components/Label.js +3 -2
- package/dist/components/MaxWidthContainer.js +1 -1
- package/dist/components/Notification.js +45 -27
- package/dist/components/Popover.d.ts +18 -5
- package/dist/components/Popover.js +72 -8
- package/dist/components/Progress.js +8 -6
- package/dist/components/RadioGroup.js +52 -49
- package/dist/components/Screen.d.ts +61 -0
- package/dist/components/Screen.js +62 -0
- package/dist/components/SectionHeader.d.ts +1 -1
- package/dist/components/SegmentedControl.d.ts +12 -4
- package/dist/components/SegmentedControl.js +94 -4
- package/dist/components/Select.js +21 -26
- package/dist/components/Skeleton.js +24 -10
- package/dist/components/Slider.d.ts +11 -3
- package/dist/components/Slider.js +73 -6
- package/dist/components/StatCard.d.ts +4 -2
- package/dist/components/StatCard.js +3 -1
- package/dist/components/StyledText.d.ts +7 -1
- package/dist/components/StyledText.js +5 -3
- package/dist/components/Switch.d.ts +1 -1
- package/dist/components/Switch.js +20 -30
- package/dist/components/Tabs.d.ts +2 -2
- package/dist/components/Tabs.js +13 -24
- package/dist/components/TextInput.d.ts +1 -1
- package/dist/components/TextInput.js +71 -26
- package/dist/components/ThemeSelector.d.ts +52 -0
- package/dist/components/ThemeSelector.js +90 -0
- package/dist/components/Toggle.d.ts +5 -49
- package/dist/components/Toggle.js +53 -29
- package/dist/components/ToggleGroup.d.ts +4 -8
- package/dist/components/ToggleGroup.js +52 -34
- package/dist/components/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip.js +9 -3
- package/dist/components/UIProvider.d.ts +22 -2
- package/dist/components/UIProvider.js +15 -3
- package/dist/components/bottomSheetDismiss.d.ts +19 -0
- package/dist/components/bottomSheetDismiss.js +44 -0
- package/dist/components/iconBuiltins.generated.d.ts +143 -0
- package/dist/components/iconBuiltins.generated.js +25 -0
- package/dist/components/iconTypes.d.ts +37 -0
- package/dist/components/iconTypes.js +1 -0
- package/dist/components/index.d.ts +47 -44
- package/dist/components/index.js +3 -0
- package/dist/components/keyboardDismiss.js +12 -4
- package/dist/components/nativeTextField.android.js +13 -9
- package/dist/constants/colors.d.ts +40 -5
- package/dist/constants/colors.js +26 -8
- package/dist/constants/fonts.d.ts +41 -2
- package/dist/constants/fonts.js +46 -7
- package/dist/constants/index.d.ts +5 -4
- package/dist/constants/index.js +1 -0
- package/dist/constants/interaction.d.ts +18 -0
- package/dist/constants/interaction.js +18 -0
- package/dist/constants/spacing.d.ts +2 -1
- package/dist/constants/spacing.js +2 -1
- package/dist/design-system.json +429 -132
- package/dist/hooks/index.d.ts +12 -7
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/useDimensions.d.ts +13 -8
- package/dist/hooks/useDimensions.js +123 -48
- package/dist/hooks/useFocusVisible.d.ts +30 -0
- package/dist/hooks/useFocusVisible.js +45 -0
- package/dist/hooks/useFontStyle.d.ts +2 -2
- package/dist/hooks/useFontStyle.js +3 -2
- package/dist/hooks/useHydrated.d.ts +13 -0
- package/dist/hooks/useHydrated.js +19 -0
- package/dist/hooks/useNotificationOffset.d.ts +20 -0
- package/dist/hooks/useNotificationOffset.js +34 -0
- package/dist/hooks/useResources.d.ts +21 -20
- package/dist/hooks/useResources.js +72 -68
- package/dist/hooks/useScalePress.d.ts +8 -5
- package/dist/hooks/useScalePress.js +16 -9
- package/dist/hooks/useShape.d.ts +24 -0
- package/dist/hooks/useShape.js +24 -0
- package/dist/hooks/useStaggeredEntrance.js +9 -7
- package/dist/hooks/useTheme.d.ts +3 -3
- package/dist/hooks/useTheme.js +177 -66
- package/dist/hooks/useWindowInsets.d.ts +13 -0
- package/dist/hooks/useWindowInsets.js +23 -0
- package/dist/icons/LICENSE.lucide +43 -0
- package/dist/icons/lucide.json +2144 -0
- package/dist/index.d.ts +5 -5
- package/dist/lib/composeRefs.d.ts +8 -0
- package/dist/lib/composeRefs.js +20 -0
- package/dist/lib/haptics.d.ts +12 -0
- package/dist/lib/haptics.js +21 -0
- package/dist/lib/index.d.ts +6 -5
- package/dist/lib/index.js +1 -0
- package/dist/lib/interFonts.d.ts +15 -0
- package/dist/lib/interFonts.js +1 -0
- package/dist/lib/interFonts.native.d.ts +3 -0
- package/dist/lib/interFonts.native.js +20 -0
- package/dist/lib/popoverPlacement.d.ts +36 -0
- package/dist/lib/popoverPlacement.js +29 -0
- package/dist/lib/themedStyles.d.ts +1 -1
- package/dist/lib/useAnimatedValue.d.ts +15 -0
- package/dist/lib/useAnimatedValue.js +19 -0
- package/dist/lib/webHitTarget.d.ts +40 -0
- package/dist/lib/webHitTarget.js +37 -0
- package/dist/state/feedbackStore.d.ts +24 -0
- package/dist/state/feedbackStore.js +16 -0
- package/dist/state/globalUIStore.d.ts +27 -0
- package/dist/state/globalUIStore.js +23 -0
- package/dist/state/index.d.ts +7 -5
- package/dist/state/index.js +2 -0
- package/dist/state/initialScheme.d.ts +27 -0
- package/dist/state/initialScheme.js +29 -0
- package/dist/state/notify.d.ts +1 -1
- package/dist/state/themeColorScope.d.ts +1 -1
- package/dist/state/themeStore.d.ts +69 -16
- package/dist/state/themeStore.js +65 -38
- package/llms-full.md +59 -10
- package/llms.txt +10 -1
- package/package.json +79 -4
- package/dist/components/iconRegistry.generated.d.ts +0 -148
- package/dist/components/iconRegistry.generated.js +0 -296
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Icon } from "./Icon.js";
|
|
3
|
-
import { TextClassContext, TextColorContext, TextSelectabilityContext } from "./StyledText.context";
|
|
3
|
+
import { TextClassContext, TextColorContext, TextSelectabilityContext } from "./StyledText.context.js";
|
|
4
4
|
import { spacing } from "../constants/spacing.js";
|
|
5
|
+
import { getWebHitInsets, WebHitTarget } from "../lib/webHitTarget.js";
|
|
6
|
+
import { interaction } from "../constants/interaction.js";
|
|
7
|
+
import { hapticSelection } from "../lib/haptics.js";
|
|
5
8
|
import { useTheme } from "../hooks/useTheme.js";
|
|
9
|
+
import { useFocusVisible } from "../hooks/useFocusVisible.js";
|
|
6
10
|
import { useScalePress } from "../hooks/useScalePress.js";
|
|
7
11
|
import * as ToggleGroupPrimitive from "@rn-primitives/toggle-group";
|
|
8
12
|
import * as React from "react";
|
|
@@ -67,17 +71,26 @@ function useToggleGroupContext() {
|
|
|
67
71
|
function ToggleGroup({ variant = "default", size = "default", children, ...props }) {
|
|
68
72
|
const { getShadowStyle } = useTheme();
|
|
69
73
|
const contextValue = React.useMemo(() => ({ variant, size }), [variant, size]);
|
|
74
|
+
// The primitive reports a change once per user selection (single or
|
|
75
|
+
// multiple), which is the selection-haptic moment; forward it unchanged.
|
|
76
|
+
const { onValueChange } = props;
|
|
77
|
+
const handleValueChange = React.useCallback((value) => {
|
|
78
|
+
hapticSelection();
|
|
79
|
+
onValueChange?.(value);
|
|
80
|
+
}, [onValueChange]);
|
|
70
81
|
// Count valid children for first/last detection
|
|
71
82
|
const childrenArray = React.Children.toArray(children);
|
|
72
83
|
const validChildren = childrenArray.filter((child) => React.isValidElement(child) && child.type === ToggleGroupItem);
|
|
73
84
|
const childCount = validChildren.length;
|
|
74
|
-
// Clone children with position props
|
|
75
|
-
let
|
|
85
|
+
// Clone children with position props. The running item index lives on an
|
|
86
|
+
// object: the React Compiler can't compile a reassigned `let` captured by
|
|
87
|
+
// the callback, and skipped the component.
|
|
88
|
+
const position = { itemIndex: 0 };
|
|
76
89
|
const enhancedChildren = React.Children.map(children, (child) => {
|
|
77
90
|
if (React.isValidElement(child) && child.type === ToggleGroupItem) {
|
|
78
|
-
const isFirst = itemIndex === 0;
|
|
79
|
-
const isLast = itemIndex === childCount - 1;
|
|
80
|
-
itemIndex
|
|
91
|
+
const isFirst = position.itemIndex === 0;
|
|
92
|
+
const isLast = position.itemIndex === childCount - 1;
|
|
93
|
+
position.itemIndex += 1;
|
|
81
94
|
return React.cloneElement(child, {
|
|
82
95
|
isFirst,
|
|
83
96
|
isLast,
|
|
@@ -85,7 +98,12 @@ function ToggleGroup({ variant = "default", size = "default", children, ...props
|
|
|
85
98
|
}
|
|
86
99
|
return child;
|
|
87
100
|
});
|
|
88
|
-
|
|
101
|
+
// The web primitive's Root/Item render generic roles (Radix's `group`, then
|
|
102
|
+
// `role='button'` on every item) while Radix still emits `aria-checked` for a
|
|
103
|
+
// single-select item — invalid on a button. Name the roles the way native
|
|
104
|
+
// already does: a radiogroup of radios, or a group of (aria-pressed) buttons.
|
|
105
|
+
const webRoles = Platform.OS === "web" ? { role: props.type === "single" ? "radiogroup" : "group" } : undefined;
|
|
106
|
+
return (_jsx(ToggleGroupPrimitive.Root, { ...props, ...webRoles, onValueChange: handleValueChange, style: {
|
|
89
107
|
flexDirection: "row",
|
|
90
108
|
alignItems: "center",
|
|
91
109
|
borderRadius: spacing.radiusMd,
|
|
@@ -104,33 +122,17 @@ function ToggleGroup({ variant = "default", size = "default", children, ...props
|
|
|
104
122
|
function ToggleGroupItem({ isFirst = false, isLast = false, children, ...props }) {
|
|
105
123
|
const { theme, withAlpha, getContrastingColor, getFocusRingStyle } = useTheme();
|
|
106
124
|
const context = useToggleGroupContext();
|
|
107
|
-
const { value: groupValue } = ToggleGroupPrimitive.useRootContext();
|
|
125
|
+
const { value: groupValue, type: groupType } = ToggleGroupPrimitive.useRootContext();
|
|
126
|
+
// See ToggleGroup: give the web item the role its aria state is valid on.
|
|
127
|
+
const webRole = Platform.OS === "web" ? { role: groupType === "single" ? "radio" : "button" } : undefined;
|
|
108
128
|
const sizeConfig = TOGGLE_GROUP_SIZES[context.size];
|
|
109
129
|
const focusRingStyle = getFocusRingStyle();
|
|
110
|
-
const [focused, setFocused] = React.useState(false);
|
|
111
130
|
const { animatedStyle: scaleStyle, pressHandlers } = useScalePress({
|
|
112
131
|
disabled: !!props.disabled,
|
|
113
|
-
scaleTo:
|
|
132
|
+
scaleTo: interaction.pressedScale,
|
|
114
133
|
haptic: false,
|
|
115
134
|
});
|
|
116
|
-
const showFocusRing = (
|
|
117
|
-
let ringVisible = true;
|
|
118
|
-
if (Platform.OS === "web") {
|
|
119
|
-
const target = event?.nativeEvent?.target;
|
|
120
|
-
if (target && typeof target.matches === "function") {
|
|
121
|
-
try {
|
|
122
|
-
ringVisible = target.matches(":focus-visible");
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
ringVisible = true;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
setFocused(ringVisible);
|
|
130
|
-
};
|
|
131
|
-
const hideFocusRing = () => {
|
|
132
|
-
setFocused(false);
|
|
133
|
-
};
|
|
135
|
+
const { focused, onFocus: showFocusRing, onBlur: hideFocusRing } = useFocusVisible();
|
|
134
136
|
// Check if this item is selected
|
|
135
137
|
const isSelected = ToggleGroupPrimitive.utils.getIsSelected(groupValue, props.value);
|
|
136
138
|
// Determine the actual background color for this item
|
|
@@ -145,7 +147,10 @@ function ToggleGroupItem({ isFirst = false, isLast = false, children, ...props }
|
|
|
145
147
|
const textColor = isSelected
|
|
146
148
|
? getContrastingColor(itemBgColor, theme.colors.foreground, theme.colors.background)
|
|
147
149
|
: theme.colors.foreground;
|
|
148
|
-
|
|
150
|
+
// Web pointer target, as in Toggle: 44pt tall through a transparent child
|
|
151
|
+
// inside the drawn box; native keeps DEFAULT_HIT_SLOP.
|
|
152
|
+
const hitTarget = (_jsx(WebHitTarget, { insets: Platform.OS === "web" ? getWebHitInsets(undefined, sizeConfig.height) : null, border: styles.item.borderWidth }));
|
|
153
|
+
return (_jsx(TextColorContext.Provider, { value: textColor, children: _jsx(TextClassContext.Provider, { value: "", children: _jsx(Animated.View, { style: scaleStyle, children: _jsx(ToggleGroupPrimitive.Item, { ...props, ...webRole, onPressIn: pressHandlers.onPressIn, onPressOut: pressHandlers.onPressOut, onFocus: showFocusRing, onBlur: hideFocusRing, style: {
|
|
149
154
|
...styles.item,
|
|
150
155
|
height: sizeConfig.height,
|
|
151
156
|
minWidth: sizeConfig.minWidth,
|
|
@@ -199,13 +204,26 @@ function ToggleGroupItem({ isFirst = false, isLast = false, children, ...props }
|
|
|
199
204
|
}),
|
|
200
205
|
}),
|
|
201
206
|
...(focused && !props.disabled ? focusRingStyle : null),
|
|
202
|
-
}, hitSlop: DEFAULT_HIT_SLOP, children: typeof children === "function" ? ((state) => (_jsx(TextSelectabilityContext.Provider, { value: false, children: children(state) }))) : (_jsx(TextSelectabilityContext.Provider, { value: false, children: children })) }) }) }) }));
|
|
207
|
+
}, hitSlop: DEFAULT_HIT_SLOP, children: typeof children === "function" ? ((state) => (_jsxs(_Fragment, { children: [_jsx(TextSelectabilityContext.Provider, { value: false, children: children(state) }), hitTarget] }))) : (_jsxs(_Fragment, { children: [_jsx(TextSelectabilityContext.Provider, { value: false, children: children }), hitTarget] })) }) }) }) }));
|
|
203
208
|
}
|
|
204
|
-
|
|
209
|
+
/**
|
|
210
|
+
* ToggleGroupIcon Component
|
|
211
|
+
* Icon wrapper for use inside ToggleGroup items
|
|
212
|
+
* Takes `Icon`'s props; the color defaults to the ToggleGroup's text color, and the
|
|
213
|
+
* icon is decorative (the control's label names it).
|
|
214
|
+
*
|
|
215
|
+
* Usage:
|
|
216
|
+
* ```tsx
|
|
217
|
+
* <ToggleGroupItem value="bold">
|
|
218
|
+
* <ToggleGroupIcon name="bold" />
|
|
219
|
+
* </ToggleGroupItem>
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
function ToggleGroupIcon(props) {
|
|
205
223
|
const contextColor = React.use(TextColorContext);
|
|
206
|
-
return _jsx(Icon, {
|
|
224
|
+
return _jsx(Icon, { decorative: true, color: contextColor, ...props });
|
|
207
225
|
}
|
|
208
|
-
const styles = StyleSheet.create({
|
|
226
|
+
const styles = /*#__PURE__*/ StyleSheet.create({
|
|
209
227
|
item: {
|
|
210
228
|
flexDirection: "row",
|
|
211
229
|
alignItems: "center",
|
|
@@ -73,7 +73,7 @@ interface TooltipProps extends TooltipPrimitive.RootProps {
|
|
|
73
73
|
* // With positioning
|
|
74
74
|
* <Tooltip>
|
|
75
75
|
* <TooltipTrigger asChild>
|
|
76
|
-
* <Icon
|
|
76
|
+
* <Icon name="info" size={20} />
|
|
77
77
|
* </TooltipTrigger>
|
|
78
78
|
* <TooltipContent side="bottom" align="start">
|
|
79
79
|
* <StyledText>Information tooltip</StyledText>
|
|
@@ -2,12 +2,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Platform, StyleSheet, View } from "react-native";
|
|
4
4
|
import { AnimatedView } from "./AnimatedView.js";
|
|
5
|
-
import { TextClassContext, TextColorContext, TextSelectabilityContext } from "./StyledText.context";
|
|
5
|
+
import { TextClassContext, TextColorContext, TextSelectabilityContext } from "./StyledText.context.js";
|
|
6
6
|
import { useTheme } from "../hooks/useTheme.js";
|
|
7
7
|
import { spacing } from "../constants/spacing.js";
|
|
8
8
|
import * as TooltipPrimitive from "@rn-primitives/tooltip";
|
|
9
9
|
import { FullWindowOverlay as RNFullWindowOverlay } from "react-native-screens";
|
|
10
10
|
import { palette } from "../constants/colors.js";
|
|
11
|
+
// The overlay layer covers the screen but must not swallow touches around the
|
|
12
|
+
// content; a style, not the deprecated `pointerEvents` prop (web warns and
|
|
13
|
+
// lazily loads its warning module mid-render).
|
|
14
|
+
const styles = /*#__PURE__*/ StyleSheet.create({
|
|
15
|
+
passThrough: { pointerEvents: "box-none" },
|
|
16
|
+
});
|
|
11
17
|
/**
|
|
12
18
|
* Tooltip Trigger Component
|
|
13
19
|
* The element that triggers the tooltip to appear on hover (web) or press (native)
|
|
@@ -71,7 +77,7 @@ function TooltipContent({ side = "top", align = "center", sideOffset = 4, portal
|
|
|
71
77
|
...getShadowStyle("soft"),
|
|
72
78
|
},
|
|
73
79
|
]) ?? undefined;
|
|
74
|
-
return (_jsx(TooltipPrimitive.Portal, { hostName: portalHost, children: _jsx(FullWindowOverlay, { children: _jsx(TooltipPrimitive.Overlay, { style: Platform.select({ native: StyleSheet.absoluteFill }), children: _jsx(AnimatedView, { type: "fade", enterDuration: 150, style: StyleSheet.absoluteFill,
|
|
80
|
+
return (_jsx(TooltipPrimitive.Portal, { hostName: portalHost, children: _jsx(FullWindowOverlay, { children: _jsx(TooltipPrimitive.Overlay, { style: Platform.select({ native: StyleSheet.absoluteFill }), children: _jsx(AnimatedView, { type: "fade", enterDuration: 150, style: [StyleSheet.absoluteFill, styles.passThrough], children: _jsx(TextColorContext.Provider, { value: colors.text, children: _jsx(TextClassContext.Provider, { value: "", children: _jsx(TextSelectabilityContext.Provider, { value: false, children: _jsx(TooltipPrimitive.Content, { side: side, align: align, sideOffset: sideOffset, style: contentStyle, ...props }) }) }) }) }) }) }) }));
|
|
75
81
|
}
|
|
76
82
|
function TooltipBody({ children, style, ...props }) {
|
|
77
83
|
return (_jsx(View, { style: [
|
|
@@ -101,7 +107,7 @@ function TooltipBody({ children, style, ...props }) {
|
|
|
101
107
|
* // With positioning
|
|
102
108
|
* <Tooltip>
|
|
103
109
|
* <TooltipTrigger asChild>
|
|
104
|
-
* <Icon
|
|
110
|
+
* <Icon name="info" size={20} />
|
|
105
111
|
* </TooltipTrigger>
|
|
106
112
|
* <TooltipContent side="bottom" align="start">
|
|
107
113
|
* <StyledText>Information tooltip</StyledText>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { type
|
|
2
|
+
import { type HapticsSetting } from "../state/feedbackStore.js";
|
|
3
|
+
import type { ResolvedTheme } from "../state/themeStore.js";
|
|
4
|
+
import { type KeyboardAvoidingViewProps } from "./KeyboardAvoidingView.js";
|
|
3
5
|
export interface UIProviderProps {
|
|
4
6
|
children: React.ReactNode;
|
|
5
7
|
/**
|
|
@@ -30,5 +32,23 @@ export interface UIProviderProps {
|
|
|
30
32
|
* Props forwarded to the keyboard-avoiding root when enabled.
|
|
31
33
|
*/
|
|
32
34
|
keyboardAvoidingProps?: Omit<KeyboardAvoidingViewProps, "children">;
|
|
35
|
+
/**
|
|
36
|
+
* Which interactions may vibrate on native: `"off"`, `"selection"` (state
|
|
37
|
+
* changes on Switch, Checkbox, Toggle, ToggleGroup, SegmentedControl) or
|
|
38
|
+
* `"all"` (selection plus a light tap on press for Button, pressable Card
|
|
39
|
+
* and Item). Written to the feedback store on mount and whenever it changes;
|
|
40
|
+
* omit it to leave the store as it is. Web never vibrates.
|
|
41
|
+
*
|
|
42
|
+
* @default "selection"
|
|
43
|
+
*/
|
|
44
|
+
haptics?: HapticsSetting;
|
|
45
|
+
/**
|
|
46
|
+
* The scheme the first render should use before the persisted preference
|
|
47
|
+
* has been read (a web SSR hint — see `InitialSchemeProvider` in
|
|
48
|
+
* `@mrmeg/expo-ui/state`). Only reaches `useTheme()` calls BELOW this
|
|
49
|
+
* provider; a root layout that reads the theme above it should wrap itself
|
|
50
|
+
* in `InitialSchemeProvider` instead. Native ignores it.
|
|
51
|
+
*/
|
|
52
|
+
initialScheme?: ResolvedTheme;
|
|
33
53
|
}
|
|
34
|
-
export declare function UIProvider({ children, notification, portalHost, statusBar, keyboardAvoiding, keyboardAvoidingProps, }: UIProviderProps): React.JSX.Element;
|
|
54
|
+
export declare function UIProvider({ children, notification, portalHost, statusBar, keyboardAvoiding: keyboardAvoidingProp, keyboardAvoidingProps, haptics, initialScheme, }: UIProviderProps): React.JSX.Element;
|
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
2
3
|
import { Platform } from "react-native";
|
|
4
|
+
import { useFeedbackStore } from "../state/feedbackStore.js";
|
|
5
|
+
import { InitialSchemeProvider } from "../state/initialScheme.js";
|
|
3
6
|
import { PortalHost } from "@rn-primitives/portal";
|
|
4
7
|
import { Notification } from "./Notification.js";
|
|
5
8
|
import { StatusBar } from "./StatusBar.js";
|
|
6
9
|
import { KeyboardAvoidingView, } from "./KeyboardAvoidingView.js";
|
|
7
|
-
export function UIProvider({ children, notification = true, portalHost = true, statusBar = true, keyboardAvoiding
|
|
10
|
+
export function UIProvider({ children, notification = true, portalHost = true, statusBar = true, keyboardAvoiding: keyboardAvoidingProp, keyboardAvoidingProps, haptics, initialScheme, }) {
|
|
11
|
+
// Controls read the setting at event time (`hapticPress` / `hapticSelection`),
|
|
12
|
+
// so an effect is early enough; no child renders differently because of it.
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
if (haptics !== undefined)
|
|
15
|
+
useFeedbackStore.getState().setHaptics(haptics);
|
|
16
|
+
}, [haptics]);
|
|
17
|
+
// Resolved in the body rather than as a default parameter: the React
|
|
18
|
+
// Compiler can't reorder a computed default, and skipped the component.
|
|
19
|
+
const keyboardAvoiding = keyboardAvoidingProp === undefined ? Platform.OS !== "web" : keyboardAvoidingProp;
|
|
8
20
|
const { style: keyboardAvoidingStyle, ...restKeyboardAvoidingProps } = keyboardAvoidingProps ?? {};
|
|
9
21
|
const content = keyboardAvoiding ? (_jsx(KeyboardAvoidingView, { style: [{ flex: 1 }, keyboardAvoidingStyle], ...restKeyboardAvoidingProps, children: children })) : (children);
|
|
10
|
-
return (_jsxs(
|
|
22
|
+
return (_jsxs(InitialSchemeProvider, { scheme: initialScheme, children: [content, notification ? _jsx(Notification, {}) : null, portalHost ? _jsx(PortalHost, {}) : null, statusBar ? _jsx(StatusBar, {}) : null] }));
|
|
11
23
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dismiss-complete detection for `BottomSheet.onDismissed` on web.
|
|
3
|
+
*
|
|
4
|
+
* `@expo/ui`'s web sheet is an HTML `<dialog>`. When the sheet's `index` goes
|
|
5
|
+
* to -1 it fires `onClose` synchronously, then plays its exit animation and
|
|
6
|
+
* calls `dialog.close()` on `animationend` (a 400 ms fallback timer covers a
|
|
7
|
+
* missed event; `prefers-reduced-motion` closes at once). The hosted RN column
|
|
8
|
+
* is a descendant of that element and stays mounted through the exit, so the
|
|
9
|
+
* element's standard `close` event is the moment the sheet is gone. iOS and
|
|
10
|
+
* Android need none of this: there `@expo/ui`'s close callback is already
|
|
11
|
+
* post-dismissal (see `BottomSheet.tsx`).
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Call `callback` once the `<dialog>` enclosing `node` has closed. Fires on the
|
|
15
|
+
* same tick when there is no enclosing dialog (or no DOM node) or the dialog
|
|
16
|
+
* is already closed. Returns a cancel function that removes the pending
|
|
17
|
+
* listener without firing.
|
|
18
|
+
*/
|
|
19
|
+
export declare function awaitDialogClose(node: unknown, callback: () => void): () => void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dismiss-complete detection for `BottomSheet.onDismissed` on web.
|
|
3
|
+
*
|
|
4
|
+
* `@expo/ui`'s web sheet is an HTML `<dialog>`. When the sheet's `index` goes
|
|
5
|
+
* to -1 it fires `onClose` synchronously, then plays its exit animation and
|
|
6
|
+
* calls `dialog.close()` on `animationend` (a 400 ms fallback timer covers a
|
|
7
|
+
* missed event; `prefers-reduced-motion` closes at once). The hosted RN column
|
|
8
|
+
* is a descendant of that element and stays mounted through the exit, so the
|
|
9
|
+
* element's standard `close` event is the moment the sheet is gone. iOS and
|
|
10
|
+
* Android need none of this: there `@expo/ui`'s close callback is already
|
|
11
|
+
* post-dismissal (see `BottomSheet.tsx`).
|
|
12
|
+
*/
|
|
13
|
+
function findEnclosingDialog(node) {
|
|
14
|
+
const closest = node
|
|
15
|
+
?.closest;
|
|
16
|
+
if (typeof closest !== "function")
|
|
17
|
+
return null;
|
|
18
|
+
const dialog = closest.call(node, "dialog");
|
|
19
|
+
if (!dialog ||
|
|
20
|
+
typeof dialog.addEventListener !== "function" ||
|
|
21
|
+
typeof dialog.removeEventListener !== "function") {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return dialog;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Call `callback` once the `<dialog>` enclosing `node` has closed. Fires on the
|
|
28
|
+
* same tick when there is no enclosing dialog (or no DOM node) or the dialog
|
|
29
|
+
* is already closed. Returns a cancel function that removes the pending
|
|
30
|
+
* listener without firing.
|
|
31
|
+
*/
|
|
32
|
+
export function awaitDialogClose(node, callback) {
|
|
33
|
+
const dialog = findEnclosingDialog(node);
|
|
34
|
+
if (!dialog || !dialog.open) {
|
|
35
|
+
callback();
|
|
36
|
+
return () => { };
|
|
37
|
+
}
|
|
38
|
+
const onClose = () => {
|
|
39
|
+
dialog.removeEventListener("close", onClose);
|
|
40
|
+
callback();
|
|
41
|
+
};
|
|
42
|
+
dialog.addEventListener("close", onClose);
|
|
43
|
+
return () => dialog.removeEventListener("close", onClose);
|
|
44
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
export declare const BUILTIN_ICONS: {
|
|
2
|
+
readonly check: readonly [readonly ["path", {
|
|
3
|
+
readonly d: "M20 6 9 17l-5-5";
|
|
4
|
+
}]];
|
|
5
|
+
readonly "chevron-down": readonly [readonly ["path", {
|
|
6
|
+
readonly d: "m6 9 6 6 6-6";
|
|
7
|
+
}]];
|
|
8
|
+
readonly "chevron-right": readonly [readonly ["path", {
|
|
9
|
+
readonly d: "m9 18 6-6-6-6";
|
|
10
|
+
}]];
|
|
11
|
+
readonly "chevron-up": readonly [readonly ["path", {
|
|
12
|
+
readonly d: "m18 15-6-6-6 6";
|
|
13
|
+
}]];
|
|
14
|
+
readonly "circle-alert": readonly [readonly ["circle", {
|
|
15
|
+
readonly cx: "12";
|
|
16
|
+
readonly cy: "12";
|
|
17
|
+
readonly r: "10";
|
|
18
|
+
}], readonly ["line", {
|
|
19
|
+
readonly x1: "12";
|
|
20
|
+
readonly x2: "12";
|
|
21
|
+
readonly y1: "8";
|
|
22
|
+
readonly y2: "12";
|
|
23
|
+
}], readonly ["line", {
|
|
24
|
+
readonly x1: "12";
|
|
25
|
+
readonly x2: "12.01";
|
|
26
|
+
readonly y1: "16";
|
|
27
|
+
readonly y2: "16";
|
|
28
|
+
}]];
|
|
29
|
+
readonly "circle-check-big": readonly [readonly ["path", {
|
|
30
|
+
readonly d: "M21.801 10A10 10 0 1 1 17 3.335";
|
|
31
|
+
}], readonly ["path", {
|
|
32
|
+
readonly d: "m9 11 3 3L22 4";
|
|
33
|
+
}]];
|
|
34
|
+
readonly eye: readonly [readonly ["path", {
|
|
35
|
+
readonly d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0";
|
|
36
|
+
}], readonly ["circle", {
|
|
37
|
+
readonly cx: "12";
|
|
38
|
+
readonly cy: "12";
|
|
39
|
+
readonly r: "3";
|
|
40
|
+
}]];
|
|
41
|
+
readonly "eye-off": readonly [readonly ["path", {
|
|
42
|
+
readonly d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49";
|
|
43
|
+
}], readonly ["path", {
|
|
44
|
+
readonly d: "M14.084 14.158a3 3 0 0 1-4.242-4.242";
|
|
45
|
+
}], readonly ["path", {
|
|
46
|
+
readonly d: "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143";
|
|
47
|
+
}], readonly ["path", {
|
|
48
|
+
readonly d: "m2 2 20 20";
|
|
49
|
+
}]];
|
|
50
|
+
readonly info: readonly [readonly ["circle", {
|
|
51
|
+
readonly cx: "12";
|
|
52
|
+
readonly cy: "12";
|
|
53
|
+
readonly r: "10";
|
|
54
|
+
}], readonly ["path", {
|
|
55
|
+
readonly d: "M12 16v-4";
|
|
56
|
+
}], readonly ["path", {
|
|
57
|
+
readonly d: "M12 8h.01";
|
|
58
|
+
}]];
|
|
59
|
+
readonly minus: readonly [readonly ["path", {
|
|
60
|
+
readonly d: "M5 12h14";
|
|
61
|
+
}]];
|
|
62
|
+
readonly monitor: readonly [readonly ["rect", {
|
|
63
|
+
readonly width: "20";
|
|
64
|
+
readonly height: "14";
|
|
65
|
+
readonly x: "2";
|
|
66
|
+
readonly y: "3";
|
|
67
|
+
readonly rx: "2";
|
|
68
|
+
}], readonly ["line", {
|
|
69
|
+
readonly x1: "8";
|
|
70
|
+
readonly x2: "16";
|
|
71
|
+
readonly y1: "21";
|
|
72
|
+
readonly y2: "21";
|
|
73
|
+
}], readonly ["line", {
|
|
74
|
+
readonly x1: "12";
|
|
75
|
+
readonly x2: "12";
|
|
76
|
+
readonly y1: "17";
|
|
77
|
+
readonly y2: "21";
|
|
78
|
+
}]];
|
|
79
|
+
readonly moon: readonly [readonly ["path", {
|
|
80
|
+
readonly d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401";
|
|
81
|
+
}]];
|
|
82
|
+
readonly smartphone: readonly [readonly ["rect", {
|
|
83
|
+
readonly width: "14";
|
|
84
|
+
readonly height: "20";
|
|
85
|
+
readonly x: "5";
|
|
86
|
+
readonly y: "2";
|
|
87
|
+
readonly rx: "2";
|
|
88
|
+
readonly ry: "2";
|
|
89
|
+
}], readonly ["path", {
|
|
90
|
+
readonly d: "M12 18h.01";
|
|
91
|
+
}]];
|
|
92
|
+
readonly sun: readonly [readonly ["circle", {
|
|
93
|
+
readonly cx: "12";
|
|
94
|
+
readonly cy: "12";
|
|
95
|
+
readonly r: "4";
|
|
96
|
+
}], readonly ["path", {
|
|
97
|
+
readonly d: "M12 2v2";
|
|
98
|
+
}], readonly ["path", {
|
|
99
|
+
readonly d: "M12 20v2";
|
|
100
|
+
}], readonly ["path", {
|
|
101
|
+
readonly d: "m4.93 4.93 1.41 1.41";
|
|
102
|
+
}], readonly ["path", {
|
|
103
|
+
readonly d: "m17.66 17.66 1.41 1.41";
|
|
104
|
+
}], readonly ["path", {
|
|
105
|
+
readonly d: "M2 12h2";
|
|
106
|
+
}], readonly ["path", {
|
|
107
|
+
readonly d: "M20 12h2";
|
|
108
|
+
}], readonly ["path", {
|
|
109
|
+
readonly d: "m6.34 17.66-1.41 1.41";
|
|
110
|
+
}], readonly ["path", {
|
|
111
|
+
readonly d: "m19.07 4.93-1.41 1.41";
|
|
112
|
+
}]];
|
|
113
|
+
readonly "trending-down": readonly [readonly ["path", {
|
|
114
|
+
readonly d: "M16 17h6v-6";
|
|
115
|
+
}], readonly ["path", {
|
|
116
|
+
readonly d: "m22 17-8.5-8.5-5 5L2 7";
|
|
117
|
+
}]];
|
|
118
|
+
readonly "trending-up": readonly [readonly ["path", {
|
|
119
|
+
readonly d: "M16 7h6v6";
|
|
120
|
+
}], readonly ["path", {
|
|
121
|
+
readonly d: "m22 7-8.5 8.5-5-5L2 17";
|
|
122
|
+
}]];
|
|
123
|
+
readonly "triangle-alert": readonly [readonly ["path", {
|
|
124
|
+
readonly d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3";
|
|
125
|
+
}], readonly ["path", {
|
|
126
|
+
readonly d: "M12 9v4";
|
|
127
|
+
}], readonly ["path", {
|
|
128
|
+
readonly d: "M12 17h.01";
|
|
129
|
+
}]];
|
|
130
|
+
readonly user: readonly [readonly ["path", {
|
|
131
|
+
readonly d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2";
|
|
132
|
+
}], readonly ["circle", {
|
|
133
|
+
readonly cx: "12";
|
|
134
|
+
readonly cy: "7";
|
|
135
|
+
readonly r: "4";
|
|
136
|
+
}]];
|
|
137
|
+
readonly x: readonly [readonly ["path", {
|
|
138
|
+
readonly d: "M18 6 6 18";
|
|
139
|
+
}], readonly ["path", {
|
|
140
|
+
readonly d: "m6 6 12 12";
|
|
141
|
+
}]];
|
|
142
|
+
};
|
|
143
|
+
export type BuiltinIconName = keyof typeof BUILTIN_ICONS;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
// GENERATED by `bun run ui:icons` from icon-names.json (lucide 1.55.0). Do not edit.
|
|
3
|
+
// The glyphs the package's own components draw. Apps register every other
|
|
4
|
+
// name through `client/icons.json`, `expo-ui-icons`, and `registerIcons`.
|
|
5
|
+
export const BUILTIN_ICONS = {
|
|
6
|
+
"check": [["path", { d: "M20 6 9 17l-5-5" }]],
|
|
7
|
+
"chevron-down": [["path", { d: "m6 9 6 6 6-6" }]],
|
|
8
|
+
"chevron-right": [["path", { d: "m9 18 6-6-6-6" }]],
|
|
9
|
+
"chevron-up": [["path", { d: "m18 15-6-6-6 6" }]],
|
|
10
|
+
"circle-alert": [["circle", { cx: "12", cy: "12", r: "10" }], ["line", { x1: "12", x2: "12", y1: "8", y2: "12" }], ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16" }]],
|
|
11
|
+
"circle-check-big": [["path", { d: "M21.801 10A10 10 0 1 1 17 3.335" }], ["path", { d: "m9 11 3 3L22 4" }]],
|
|
12
|
+
"eye": [["path", { d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }], ["circle", { cx: "12", cy: "12", r: "3" }]],
|
|
13
|
+
"eye-off": [["path", { d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }], ["path", { d: "M14.084 14.158a3 3 0 0 1-4.242-4.242" }], ["path", { d: "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }], ["path", { d: "m2 2 20 20" }]],
|
|
14
|
+
"info": [["circle", { cx: "12", cy: "12", r: "10" }], ["path", { d: "M12 16v-4" }], ["path", { d: "M12 8h.01" }]],
|
|
15
|
+
"minus": [["path", { d: "M5 12h14" }]],
|
|
16
|
+
"monitor": [["rect", { width: "20", height: "14", x: "2", y: "3", rx: "2" }], ["line", { x1: "8", x2: "16", y1: "21", y2: "21" }], ["line", { x1: "12", x2: "12", y1: "17", y2: "21" }]],
|
|
17
|
+
"moon": [["path", { d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" }]],
|
|
18
|
+
"smartphone": [["rect", { width: "14", height: "20", x: "5", y: "2", rx: "2", ry: "2" }], ["path", { d: "M12 18h.01" }]],
|
|
19
|
+
"sun": [["circle", { cx: "12", cy: "12", r: "4" }], ["path", { d: "M12 2v2" }], ["path", { d: "M12 20v2" }], ["path", { d: "m4.93 4.93 1.41 1.41" }], ["path", { d: "m17.66 17.66 1.41 1.41" }], ["path", { d: "M2 12h2" }], ["path", { d: "M20 12h2" }], ["path", { d: "m6.34 17.66-1.41 1.41" }], ["path", { d: "m19.07 4.93-1.41 1.41" }]],
|
|
20
|
+
"trending-down": [["path", { d: "M16 17h6v-6" }], ["path", { d: "m22 17-8.5-8.5-5 5L2 7" }]],
|
|
21
|
+
"trending-up": [["path", { d: "M16 7h6v6" }], ["path", { d: "m22 7-8.5 8.5-5-5L2 17" }]],
|
|
22
|
+
"triangle-alert": [["path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }], ["path", { d: "M12 9v4" }], ["path", { d: "M12 17h.01" }]],
|
|
23
|
+
"user": [["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }], ["circle", { cx: "12", cy: "7", r: "4" }]],
|
|
24
|
+
"x": [["path", { d: "M18 6 6 18" }], ["path", { d: "m6 6 12 12" }]],
|
|
25
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ComponentType } from "react";
|
|
2
|
+
import type { StyleProp, ViewProps, ViewStyle } from "react-native";
|
|
3
|
+
/** The SVG elements a glyph is drawn with: every element Lucide uses. */
|
|
4
|
+
export type IconTag = "path" | "circle" | "rect" | "line" | "polyline" | "polygon" | "ellipse";
|
|
5
|
+
/**
|
|
6
|
+
* One icon as plain data: `[tag, attrs]` nodes on a 24×24 grid, stroked 2 px
|
|
7
|
+
* with round caps and joins in the icon's color. `attrs` are the element's own
|
|
8
|
+
* SVG attributes (`d`, `cx`, `points`, …) as strings; a `fill` value is
|
|
9
|
+
* `currentColor`, which resolves to the icon's color.
|
|
10
|
+
*/
|
|
11
|
+
export type IconGlyph = ReadonlyArray<readonly [tag: IconTag, attrs: Readonly<Record<string, string>>]>;
|
|
12
|
+
export type IconAccessibilityProps = Pick<ViewProps, "accessible" | "importantForAccessibility" | "accessibilityElementsHidden" | "accessibilityLabel" | "aria-hidden" | "aria-label" | "role">;
|
|
13
|
+
/**
|
|
14
|
+
* Escape hatch for non-Lucide art (a brand mark, an illustration): any
|
|
15
|
+
* component that takes `size` and `color`. Lucide icons go through `name`; the
|
|
16
|
+
* design-system lint rule (a follow-up) rejects Lucide imports here.
|
|
17
|
+
*/
|
|
18
|
+
export type IconComponent = ComponentType<{
|
|
19
|
+
size: number;
|
|
20
|
+
color: string;
|
|
21
|
+
style?: StyleProp<ViewStyle>;
|
|
22
|
+
} & Partial<IconAccessibilityProps>>;
|
|
23
|
+
/**
|
|
24
|
+
* Props of the platform renderers (`IconGlyph.tsx` on web and the server,
|
|
25
|
+
* `IconGlyph.native.tsx` on iOS and Android). `Icon` resolves the color and
|
|
26
|
+
* the accessibility props before it hands a glyph over.
|
|
27
|
+
*/
|
|
28
|
+
export type IconGlyphProps = {
|
|
29
|
+
glyph: IconGlyph;
|
|
30
|
+
size: number;
|
|
31
|
+
/** A resolved color: a literal, or a `var(--c-*)` theme variable on web. */
|
|
32
|
+
color: string;
|
|
33
|
+
/** @default 2 */
|
|
34
|
+
strokeWidth?: number;
|
|
35
|
+
style?: StyleProp<ViewStyle>;
|
|
36
|
+
testID?: string;
|
|
37
|
+
} & IconAccessibilityProps;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,44 +1,47 @@
|
|
|
1
|
-
export * from "./Accordion";
|
|
2
|
-
export * from "./Alert";
|
|
3
|
-
export * from "./AnimatedView";
|
|
4
|
-
export * from "./Avatar";
|
|
5
|
-
export * from "./Badge";
|
|
6
|
-
export * from "./BottomSheet";
|
|
7
|
-
export * from "./Button";
|
|
8
|
-
export * from "./Card";
|
|
9
|
-
export * from "./Carousel";
|
|
10
|
-
export * from "./Checkbox";
|
|
11
|
-
export * from "./Collapsible";
|
|
12
|
-
export * from "./Dialog";
|
|
13
|
-
export * from "./DismissKeyboard";
|
|
14
|
-
export * from "./keyboardDismiss";
|
|
15
|
-
export * from "./Drawer";
|
|
16
|
-
export * from "./DropdownMenu";
|
|
17
|
-
export * from "./EmptyState";
|
|
18
|
-
export * from "./ErrorBoundary";
|
|
19
|
-
export * from "./
|
|
20
|
-
export * from "./
|
|
21
|
-
export * from "./
|
|
22
|
-
export * from "./
|
|
23
|
-
export * from "./
|
|
24
|
-
export * from "./
|
|
25
|
-
export * from "./
|
|
26
|
-
export * from "./
|
|
27
|
-
export * from "./
|
|
28
|
-
export * from "./
|
|
29
|
-
export * from "./
|
|
30
|
-
export * from "./
|
|
31
|
-
export * from "./
|
|
32
|
-
export * from "./
|
|
33
|
-
export * from "./
|
|
34
|
-
export * from "./
|
|
35
|
-
export * from "./
|
|
36
|
-
export * from "./
|
|
37
|
-
export * from "./
|
|
38
|
-
export * from "./
|
|
39
|
-
export * from "./
|
|
40
|
-
export * from "./
|
|
41
|
-
export * from "./
|
|
42
|
-
export * from "./
|
|
43
|
-
export * from "./
|
|
44
|
-
export * from "./
|
|
1
|
+
export * from "./Accordion.js";
|
|
2
|
+
export * from "./Alert.js";
|
|
3
|
+
export * from "./AnimatedView.js";
|
|
4
|
+
export * from "./Avatar.js";
|
|
5
|
+
export * from "./Badge.js";
|
|
6
|
+
export * from "./BottomSheet.js";
|
|
7
|
+
export * from "./Button.js";
|
|
8
|
+
export * from "./Card.js";
|
|
9
|
+
export * from "./Carousel.js";
|
|
10
|
+
export * from "./Checkbox.js";
|
|
11
|
+
export * from "./Collapsible.js";
|
|
12
|
+
export * from "./Dialog.js";
|
|
13
|
+
export * from "./DismissKeyboard.js";
|
|
14
|
+
export * from "./keyboardDismiss.js";
|
|
15
|
+
export * from "./Drawer.js";
|
|
16
|
+
export * from "./DropdownMenu.js";
|
|
17
|
+
export * from "./EmptyState.js";
|
|
18
|
+
export * from "./ErrorBoundary.js";
|
|
19
|
+
export * from "./Hydrated.js";
|
|
20
|
+
export * from "./Icon.js";
|
|
21
|
+
export * from "./InputOTP.js";
|
|
22
|
+
export * from "./Item.js";
|
|
23
|
+
export * from "./KeyboardAvoidingView.js";
|
|
24
|
+
export * from "./Label.js";
|
|
25
|
+
export * from "./MaxWidthContainer.js";
|
|
26
|
+
export * from "./Notification.js";
|
|
27
|
+
export * from "./Screen.js";
|
|
28
|
+
export * from "./Popover.js";
|
|
29
|
+
export * from "./Progress.js";
|
|
30
|
+
export * from "./RadioGroup.js";
|
|
31
|
+
export * from "./SectionHeader.js";
|
|
32
|
+
export * from "./SegmentedControl.js";
|
|
33
|
+
export * from "./Select.js";
|
|
34
|
+
export * from "./Separator.js";
|
|
35
|
+
export * from "./Skeleton.js";
|
|
36
|
+
export * from "./Slider.js";
|
|
37
|
+
export * from "./StatCard.js";
|
|
38
|
+
export * from "./StatusBar.js";
|
|
39
|
+
export * from "./StyledText.js";
|
|
40
|
+
export * from "./Switch.js";
|
|
41
|
+
export * from "./Tabs.js";
|
|
42
|
+
export * from "./TextInput.js";
|
|
43
|
+
export * from "./ThemeSelector.js";
|
|
44
|
+
export * from "./Toggle.js";
|
|
45
|
+
export * from "./ToggleGroup.js";
|
|
46
|
+
export * from "./Tooltip.js";
|
|
47
|
+
export * from "./UIProvider.js";
|