@mrmeg/expo-ui 0.7.3 → 0.9.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.
Files changed (53) hide show
  1. package/LLM_USAGE.md +24 -13
  2. package/README.md +8 -10
  3. package/dist/components/Accordion.d.ts +4 -4
  4. package/dist/components/AnimatedView.d.ts +1 -1
  5. package/dist/components/Badge.d.ts +1 -1
  6. package/dist/components/BottomSheet.d.ts +7 -7
  7. package/dist/components/Button.d.ts +3 -3
  8. package/dist/components/Button.js +17 -1
  9. package/dist/components/Card.d.ts +6 -6
  10. package/dist/components/Checkbox.d.ts +2 -1
  11. package/dist/components/Collapsible.d.ts +4 -3
  12. package/dist/components/Dialog.d.ts +10 -10
  13. package/dist/components/DismissKeyboard.d.ts +1 -1
  14. package/dist/components/Drawer.d.ts +7 -7
  15. package/dist/components/DropdownMenu.d.ts +10 -10
  16. package/dist/components/EmptyState.d.ts +1 -1
  17. package/dist/components/ErrorBoundary.d.ts +1 -1
  18. package/dist/components/Icon.d.ts +1 -1
  19. package/dist/components/InputOTP.d.ts +2 -1
  20. package/dist/components/Label.d.ts +1 -1
  21. package/dist/components/MaxWidthContainer.d.ts +1 -1
  22. package/dist/components/Notification.d.ts +4 -10
  23. package/dist/components/Notification.js +12 -13
  24. package/dist/components/Popover.d.ts +4 -4
  25. package/dist/components/Progress.d.ts +2 -1
  26. package/dist/components/RadioGroup.d.ts +3 -2
  27. package/dist/components/SegmentedControl.d.ts +2 -1
  28. package/dist/components/Select.d.ts +7 -7
  29. package/dist/components/Separator.d.ts +2 -1
  30. package/dist/components/Skeleton.d.ts +5 -4
  31. package/dist/components/Slider.d.ts +2 -1
  32. package/dist/components/StatusBar.d.ts +1 -1
  33. package/dist/components/StyledText.d.ts +12 -12
  34. package/dist/components/Switch.d.ts +2 -1
  35. package/dist/components/Tabs.d.ts +5 -5
  36. package/dist/components/TextInput.d.ts +1 -1
  37. package/dist/components/TextInput.js +9 -1
  38. package/dist/components/Toggle.d.ts +3 -2
  39. package/dist/components/ToggleGroup.d.ts +4 -3
  40. package/dist/components/ToggleGroup.js +2 -7
  41. package/dist/components/Tooltip.d.ts +3 -3
  42. package/dist/components/UIProvider.d.ts +1 -1
  43. package/dist/hooks/useTheme.d.ts +1 -1
  44. package/dist/hooks/useTheme.js +28 -93
  45. package/dist/state/globalUIStore.d.ts +9 -1
  46. package/dist/state/globalUIStore.js +9 -1
  47. package/dist/state/index.d.ts +1 -0
  48. package/dist/state/index.js +1 -0
  49. package/dist/state/notify.d.ts +50 -0
  50. package/dist/state/notify.js +31 -0
  51. package/dist/state/themeColorScope.d.ts +1 -1
  52. package/llms-full.md +34 -3
  53. package/package.json +2 -2
package/LLM_USAGE.md CHANGED
@@ -15,7 +15,7 @@ import { Button, StyledText, UIProvider } from "@mrmeg/expo-ui/components";
15
15
  import { Button as ButtonDirect } from "@mrmeg/expo-ui/components/Button";
16
16
  import { colors, spacing, typography } from "@mrmeg/expo-ui/constants";
17
17
  import { useResources, useTheme } from "@mrmeg/expo-ui/hooks";
18
- import { globalUIStore, useThemeStore } from "@mrmeg/expo-ui/state";
18
+ import { globalUIStore, notify, useThemeStore } from "@mrmeg/expo-ui/state";
19
19
  import { configureExpoUiI18n, hapticLight } from "@mrmeg/expo-ui/lib";
20
20
  ```
21
21
 
@@ -92,7 +92,7 @@ configureExpoUiI18n((key, options) => i18n.t(key, options));
92
92
  - Use `Button.preset`, not `variant`, for buttons.
93
93
  - Button visible heights are compact: `sm` 28px, `md` 32px, and `lg` 40px.
94
94
  - Use `Button size="sm"` for compact popover, tooltip, and toolbar triggers; nested `StyledText` inherits the selected Button size.
95
- - Use `globalUIStore` plus root-mounted `UIProvider` for transient global feedback.
95
+ - Use `notify` plus root-mounted `UIProvider` for transient global feedback. (`globalUIStore` remains available for reactive subscriptions and tests.)
96
96
  - Keep app monitoring, auth, API, and domain behavior outside this package.
97
97
 
98
98
  Useful theme tokens include:
@@ -125,8 +125,9 @@ Token intent:
125
125
 
126
126
  Use `getShadowStyle()` for package surfaces that need elevation. It supports
127
127
  `base`, `soft`, `sharp`, `subtle`, `elevated`, `glow`, `glass`, `card`,
128
- `cardHover`, and `cardSubtle`, returning native shadow/elevation off web and
129
- CSS `boxShadow` on web. Use `getFocusRingStyle()` for web focus styling. Keep
128
+ `cardHover`, and `cardSubtle`, returning a cross-platform `boxShadow` value
129
+ (RN 0.85 + react-native-web 0.21 deprecate the legacy `shadow*` props). Use
130
+ `getFocusRingStyle()` for web focus styling. Keep
130
131
  web controls compact, but preserve mobile tap comfort with package controls
131
132
  that already provide native hit slop or 44px touch rows.
132
133
 
@@ -249,19 +250,29 @@ import { Button, Switch, TextInput } from "@mrmeg/expo-ui/components";
249
250
 
250
251
  ```tsx
251
252
  import { EmptyState, Progress, SkeletonCard } from "@mrmeg/expo-ui/components";
252
- import { globalUIStore } from "@mrmeg/expo-ui/state";
253
+ import { notify } from "@mrmeg/expo-ui/state";
253
254
 
254
255
  {isLoading ? <SkeletonCard /> : null}
255
256
  <Progress value={65} variant="accent" />
256
257
  <EmptyState icon="inbox" title="No messages" description="New messages will appear here." />
257
258
 
258
- globalUIStore.getState().show({
259
- type: "success",
260
- title: "Saved",
261
- messages: ["Your changes were saved."],
262
- action: {
263
- label: "View",
264
- onPress: openSavedItem,
265
- },
259
+ // Convenience helpers
260
+ notify.success("Saved", { messages: ["Your changes were saved."] });
261
+ notify.error("Upload failed");
262
+ notify.warning("Connection slow");
263
+ notify.info("Copied to clipboard");
264
+
265
+ // Loading spinner — stays until replaced or hidden (no auto-dismiss)
266
+ notify.loading("Uploading…");
267
+ notify.hide();
268
+
269
+ // Full control (same payload as globalUIStore show())
270
+ notify({ type: "success", title: "Saved", action: { label: "View", onPress: openSavedItem } });
271
+
272
+ // Loading → success/error around a promise
273
+ await notify.promise(saveProfile(), {
274
+ loading: "Saving…",
275
+ success: "Profile saved", // or (value) => `Saved ${value.name}`
276
+ error: "Could not save profile", // or (err) => err.message
266
277
  });
267
278
  ```
package/README.md CHANGED
@@ -28,8 +28,8 @@ bun add @mrmeg/expo-ui
28
28
  ```
29
29
 
30
30
  Consumers must also install the native and Expo peer dependencies listed in
31
- `package.json`. The tested baseline is Expo SDK 55 with React 19.2, React
32
- Native 0.83, and React Native Web 0.21. UI animations and keyboard-aware
31
+ `package.json`. The tested baseline is Expo SDK 56 with React 19.2, React
32
+ Native 0.85, and React Native Web 0.21. UI animations and keyboard-aware
33
33
  sheet offsets use React Native Animated by default.
34
34
  `@rn-primitives/*` packages are managed by `@mrmeg/expo-ui` because they are
35
35
  implementation details of the exported UI components. Native bottom sheet
@@ -49,14 +49,14 @@ import { colors, spacing, typography } from "@mrmeg/expo-ui/constants";
49
49
  import { colors as colorsDirect } from "@mrmeg/expo-ui/constants/colors";
50
50
  import { useResources, useTheme } from "@mrmeg/expo-ui/hooks";
51
51
  import { useTheme as useThemeDirect } from "@mrmeg/expo-ui/hooks/useTheme";
52
- import { globalUIStore, useThemeStore } from "@mrmeg/expo-ui/state";
52
+ import { globalUIStore, notify, useThemeStore } from "@mrmeg/expo-ui/state";
53
53
  import { configureExpoUiI18n, hapticLight } from "@mrmeg/expo-ui/lib";
54
54
  ```
55
55
 
56
56
  The root barrel also exports the public surface:
57
57
 
58
58
  ```tsx
59
- import { Button, UIProvider, colors, useTheme } from "@mrmeg/expo-ui";
59
+ import { Button, UIProvider, colors, notify, useTheme } from "@mrmeg/expo-ui";
60
60
  ```
61
61
 
62
62
  ## Theme System
@@ -272,7 +272,7 @@ Use `Button.preset`, not `variant`. `default` is the neutral primary action, `se
272
272
 
273
273
  Use `StyledText` or its aliases instead of raw `Text` whenever the text is part of app UI. Use `TextInput` for labeled fields because it already owns label, helper text, error text, clear buttons, password visibility, numeric filtering, and left/right elements.
274
274
 
275
- Mount `UIProvider` once near the root before using `Dialog`, `AlertDialog`, `BottomSheet`, `Drawer`, `DropdownMenu`, `Popover`, `SelectContent`, `Tooltip`, or package notifications. On native, `BottomSheet.Content` listens to React Native keyboard events when `avoidKeyboard` is enabled; it defaults to `true` and can be disabled per sheet. Trigger transient feedback from `globalUIStore`.
275
+ Mount `UIProvider` once near the root before using `Dialog`, `AlertDialog`, `BottomSheet`, `Drawer`, `DropdownMenu`, `Popover`, `SelectContent`, `Tooltip`, or package notifications. On native, `BottomSheet.Content` listens to React Native keyboard events when `avoidKeyboard` is enabled; it defaults to `true` and can be disabled per sheet. Trigger transient feedback with `notify`.
276
276
 
277
277
  Use `Skeleton` components for loading content with stable dimensions, `EmptyState` for no-data/recoverable errors, `Alert` for blocking confirm/alert dialogs, and `Notification` for transient global feedback.
278
278
 
@@ -322,15 +322,13 @@ Feedback:
322
322
 
323
323
  ```tsx
324
324
  import { EmptyState, Progress, SkeletonCard } from "@mrmeg/expo-ui/components";
325
- import { globalUIStore } from "@mrmeg/expo-ui/state";
325
+ import { notify } from "@mrmeg/expo-ui/state";
326
326
 
327
327
  {isLoading ? <SkeletonCard /> : null}
328
328
  <Progress value={65} variant="accent" />
329
329
  <EmptyState icon="inbox" title="No messages" description="New messages will appear here." />
330
330
 
331
- globalUIStore.getState().show({
332
- type: "success",
333
- title: "Saved",
331
+ notify.success("Saved", {
334
332
  messages: ["Your changes were saved."],
335
333
  action: {
336
334
  label: "View",
@@ -457,5 +455,5 @@ bun run ui:consumer-smoke
457
455
  `bun run ui:consumer-smoke` installs the packed tarball into a clean fixture,
458
456
  checks the documented export-map files, type-checks all public package
459
457
  entrypoints, verifies that `@mrmeg/expo-ui/constants` can be imported by
460
- plain Node ESM for token inspection, and runs an Expo SDK 55 iOS export
458
+ plain Node ESM for token inspection, and runs an Expo SDK 56 iOS export
461
459
  against the packed package without a custom Metro config.
@@ -32,12 +32,12 @@ type AccordionRootProps = WebSingleAccordionRootProps | WebMultipleAccordionRoot
32
32
  * </AccordionItem>
33
33
  * </Accordion>
34
34
  */
35
- declare function Accordion({ children, style, ...props }: AccordionRootProps): import("react/jsx-runtime").JSX.Element;
35
+ declare function Accordion({ children, style, ...props }: AccordionRootProps): import("react").JSX.Element;
36
36
  /**
37
37
  * Accordion Item Component
38
38
  * Individual accordion item with border styling
39
39
  */
40
- declare function AccordionItem({ children, value, style: styleOverride, ...props }: AccordionPrimitive.ItemProps & React.RefAttributes<AccordionPrimitive.ItemRef>): import("react/jsx-runtime").JSX.Element;
40
+ declare function AccordionItem({ children, value, style: styleOverride, ...props }: AccordionPrimitive.ItemProps & React.RefAttributes<AccordionPrimitive.ItemRef>): import("react").JSX.Element;
41
41
  /**
42
42
  * Accordion Trigger Component
43
43
  * Clickable header that expands/collapses the content
@@ -45,10 +45,10 @@ declare function AccordionItem({ children, value, style: styleOverride, ...props
45
45
  */
46
46
  declare function AccordionTrigger({ children, style: styleOverride, ...props }: AccordionPrimitive.TriggerProps & {
47
47
  children?: React.ReactNode;
48
- } & React.RefAttributes<AccordionPrimitive.TriggerRef>): import("react/jsx-runtime").JSX.Element;
48
+ } & React.RefAttributes<AccordionPrimitive.TriggerRef>): import("react").JSX.Element;
49
49
  /**
50
50
  * Accordion Content Component
51
51
  * Expandable content area with animations
52
52
  */
53
- declare function AccordionContent({ children, style: styleOverride, ...props }: AccordionPrimitive.ContentProps & React.RefAttributes<AccordionPrimitive.ContentRef>): import("react/jsx-runtime").JSX.Element;
53
+ declare function AccordionContent({ children, style: styleOverride, ...props }: AccordionPrimitive.ContentProps & React.RefAttributes<AccordionPrimitive.ContentRef>): import("react").JSX.Element;
54
54
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -51,5 +51,5 @@ interface AnimatedViewProps extends ViewProps {
51
51
  * </AnimatedView>
52
52
  * ```
53
53
  */
54
- export declare function AnimatedView({ children, type, enterDuration, delay, style, ...props }: AnimatedViewProps): import("react/jsx-runtime").JSX.Element;
54
+ export declare function AnimatedView({ children, type, enterDuration, delay, style, ...props }: AnimatedViewProps): React.JSX.Element;
55
55
  export {};
@@ -20,5 +20,5 @@ export interface BadgeProps {
20
20
  * <Badge variant="destructive">Error</Badge>
21
21
  * ```
22
22
  */
23
- declare function Badge({ children, text, variant, style: styleOverride }: BadgeProps): import("react/jsx-runtime").JSX.Element;
23
+ declare function Badge({ children, text, variant, style: styleOverride }: BadgeProps): React.JSX.Element;
24
24
  export { Badge };
@@ -133,14 +133,14 @@ interface BottomSheetCloseProps {
133
133
  style?: StyleProp<ViewStyle>;
134
134
  }
135
135
  declare function useBottomSheetContext(): BottomSheetContextValue;
136
- declare function BottomSheetRoot({ open: controlledOpen, onOpenChange: controlledOnOpenChange, defaultOpen, snapPoints, closeOnBackdropPress, children, }: BottomSheetProps): import("react/jsx-runtime").JSX.Element;
137
- declare function BottomSheetTrigger({ asChild, children, style: styleOverride }: BottomSheetTriggerProps): import("react/jsx-runtime").JSX.Element;
138
- declare function BottomSheetContent({ swipeEnabled: _swipeEnabled, avoidKeyboard: _avoidKeyboard, dismissKeyboardOnDrag: _dismissKeyboardOnDrag, style: styleOverride, children, }: BottomSheetContentProps): import("react/jsx-runtime").JSX.Element;
136
+ declare function BottomSheetRoot({ open: controlledOpen, onOpenChange: controlledOnOpenChange, defaultOpen, snapPoints, closeOnBackdropPress, children, }: BottomSheetProps): React.JSX.Element;
137
+ declare function BottomSheetTrigger({ asChild, children, style: styleOverride }: BottomSheetTriggerProps): React.JSX.Element;
138
+ declare function BottomSheetContent({ swipeEnabled: _swipeEnabled, avoidKeyboard: _avoidKeyboard, dismissKeyboardOnDrag: _dismissKeyboardOnDrag, style: styleOverride, children, }: BottomSheetContentProps): React.JSX.Element;
139
139
  declare function BottomSheetHandle(_props: BottomSheetHandleProps): null;
140
- declare function BottomSheetHeader({ children, style, ...props }: BottomSheetHeaderProps): import("react/jsx-runtime").JSX.Element;
141
- declare function BottomSheetBody({ children, style, contentContainerStyle, onContentSizeChange, onLayout, ...props }: BottomSheetBodyProps): import("react/jsx-runtime").JSX.Element;
142
- declare function BottomSheetFooter({ children, style, ...props }: BottomSheetFooterProps): import("react/jsx-runtime").JSX.Element;
143
- declare function BottomSheetClose({ asChild, children, style: styleOverride }: BottomSheetCloseProps): import("react/jsx-runtime").JSX.Element;
140
+ declare function BottomSheetHeader({ children, style, ...props }: BottomSheetHeaderProps): React.JSX.Element;
141
+ declare function BottomSheetBody({ children, style, contentContainerStyle, onContentSizeChange, onLayout, ...props }: BottomSheetBodyProps): React.JSX.Element;
142
+ declare function BottomSheetFooter({ children, style, ...props }: BottomSheetFooterProps): React.JSX.Element;
143
+ declare function BottomSheetClose({ asChild, children, style: styleOverride }: BottomSheetCloseProps): React.JSX.Element;
144
144
  declare const BottomSheet: typeof BottomSheetRoot & {
145
145
  Trigger: typeof BottomSheetTrigger;
146
146
  Content: typeof BottomSheetContent;
@@ -141,7 +141,7 @@ export interface ButtonProps extends PressableProps {
141
141
  * </Button>
142
142
  * ```
143
143
  */
144
- declare function ButtonRoot(props: ButtonProps): import("react/jsx-runtime").JSX.Element;
144
+ declare function ButtonRoot(props: ButtonProps): React.JSX.Element;
145
145
  /**
146
146
  * Button.Text
147
147
  * Text content for a Button. Inherits the button's control typography, color,
@@ -154,7 +154,7 @@ declare function ButtonRoot(props: ButtonProps): import("react/jsx-runtime").JSX
154
154
  * </Button>
155
155
  * ```
156
156
  */
157
- declare function ButtonText(props: TextProps): import("react/jsx-runtime").JSX.Element;
157
+ declare function ButtonText(props: TextProps): React.JSX.Element;
158
158
  /**
159
159
  * Button.Icon
160
160
  * Icon content for a Button. Defaults its color to the button's text color
@@ -167,7 +167,7 @@ declare function ButtonText(props: TextProps): import("react/jsx-runtime").JSX.E
167
167
  * </Button>
168
168
  * ```
169
169
  */
170
- declare function ButtonIcon(props: IconProps): import("react/jsx-runtime").JSX.Element;
170
+ declare function ButtonIcon(props: IconProps): React.JSX.Element;
171
171
  /**
172
172
  * Button with explicit subcomponents.
173
173
  * - `Button.Text` for label text (inherits control typography)
@@ -121,7 +121,23 @@ function ButtonRoot(props) {
121
121
  scaleTo: preset === "link" ? 1 : 0.97,
122
122
  });
123
123
  const showFocusRing = (event) => {
124
- setFocused(true);
124
+ // On web, pointer taps focus the element too, which left the ring visible
125
+ // after every click. :focus-visible is only true for keyboard-driven
126
+ // focus, so gate the ring on it; fall back to showing the ring when the
127
+ // target can't be queried (non-DOM targets, older engines).
128
+ let ringVisible = true;
129
+ if (Platform.OS === "web") {
130
+ const target = event?.nativeEvent?.target;
131
+ if (target && typeof target.matches === "function") {
132
+ try {
133
+ ringVisible = target.matches(":focus-visible");
134
+ }
135
+ catch {
136
+ ringVisible = true;
137
+ }
138
+ }
139
+ }
140
+ setFocused(ringVisible);
125
141
  onFocus?.(event);
126
142
  };
127
143
  const hideFocusRing = (event) => {
@@ -13,30 +13,30 @@ export interface CardProps {
13
13
  /** Whether the card is disabled (only relevant when onPress is set) */
14
14
  disabled?: boolean;
15
15
  }
16
- declare function Card({ children, style: styleOverride, variant, onPress, disabled }: CardProps): import("react/jsx-runtime").JSX.Element;
16
+ declare function Card({ children, style: styleOverride, variant, onPress, disabled }: CardProps): React.JSX.Element;
17
17
  export interface CardHeaderProps {
18
18
  children?: React.ReactNode;
19
19
  style?: StyleProp<ViewStyle>;
20
20
  }
21
- declare function CardHeader({ children, style: styleOverride }: CardHeaderProps): import("react/jsx-runtime").JSX.Element;
21
+ declare function CardHeader({ children, style: styleOverride }: CardHeaderProps): React.JSX.Element;
22
22
  export interface CardContentProps {
23
23
  children?: React.ReactNode;
24
24
  style?: StyleProp<ViewStyle>;
25
25
  }
26
- declare function CardContent({ children, style: styleOverride }: CardContentProps): import("react/jsx-runtime").JSX.Element;
26
+ declare function CardContent({ children, style: styleOverride }: CardContentProps): React.JSX.Element;
27
27
  export interface CardFooterProps {
28
28
  children?: React.ReactNode;
29
29
  style?: StyleProp<ViewStyle>;
30
30
  }
31
- declare function CardFooter({ children, style: styleOverride }: CardFooterProps): import("react/jsx-runtime").JSX.Element;
31
+ declare function CardFooter({ children, style: styleOverride }: CardFooterProps): React.JSX.Element;
32
32
  export interface CardTitleProps extends Omit<TextProps, "style"> {
33
33
  children?: React.ReactNode;
34
34
  style?: StyleProp<TextStyle>;
35
35
  }
36
- declare function CardTitle({ children, style: styleOverride, ...props }: CardTitleProps): import("react/jsx-runtime").JSX.Element;
36
+ declare function CardTitle({ children, style: styleOverride, ...props }: CardTitleProps): React.JSX.Element;
37
37
  export interface CardDescriptionProps extends Omit<TextProps, "style"> {
38
38
  children?: React.ReactNode;
39
39
  style?: StyleProp<TextStyle>;
40
40
  }
41
- declare function CardDescription({ children, style: styleOverride, ...props }: CardDescriptionProps): import("react/jsx-runtime").JSX.Element;
41
+ declare function CardDescription({ children, style: styleOverride, ...props }: CardDescriptionProps): React.JSX.Element;
42
42
  export { Card, CardHeader, CardContent, CardFooter, CardTitle, CardDescription };
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { StyleProp, ViewStyle } from "react-native";
2
3
  import * as CheckboxPrimitive from "@rn-primitives/checkbox";
3
4
  /**
@@ -35,5 +36,5 @@ export interface CheckboxProps extends Omit<CheckboxPrimitive.RootProps, "style"
35
36
  */
36
37
  required?: boolean;
37
38
  }
38
- declare function Checkbox({ size, label, indeterminate, error, style: styleOverride, labelStyle, required, checked, onCheckedChange, disabled, ...props }: CheckboxProps): import("react/jsx-runtime").JSX.Element;
39
+ declare function Checkbox({ size, label, indeterminate, error, style: styleOverride, labelStyle, required, checked, onCheckedChange, disabled, ...props }: CheckboxProps): React.JSX.Element;
39
40
  export { Checkbox };
@@ -1,3 +1,4 @@
1
+ import * as React from "react";
1
2
  import * as CollapsiblePrimitive from "@rn-primitives/collapsible";
2
3
  /**
3
4
  * Collapsible Component (Root)
@@ -18,7 +19,7 @@ import * as CollapsiblePrimitive from "@rn-primitives/collapsible";
18
19
  * ```
19
20
  */
20
21
  type CollapsibleProps = CollapsiblePrimitive.RootProps;
21
- declare function Collapsible({ children, ...props }: CollapsibleProps): import("react/jsx-runtime").JSX.Element;
22
+ declare function Collapsible({ children, ...props }: CollapsibleProps): React.JSX.Element;
22
23
  /**
23
24
  * CollapsibleTrigger Component
24
25
  * The trigger button/element that toggles the collapsible state
@@ -40,7 +41,7 @@ declare function Collapsible({ children, ...props }: CollapsibleProps): import("
40
41
  * ```
41
42
  */
42
43
  type CollapsibleTriggerProps = CollapsiblePrimitive.TriggerProps;
43
- declare function CollapsibleTrigger({ style: styleOverride, ...props }: CollapsibleTriggerProps): import("react/jsx-runtime").JSX.Element;
44
+ declare function CollapsibleTrigger({ style: styleOverride, ...props }: CollapsibleTriggerProps): React.JSX.Element;
44
45
  /**
45
46
  * CollapsibleContent Component
46
47
  * The content that expands and collapses
@@ -62,6 +63,6 @@ type CollapsibleContentProps = CollapsiblePrimitive.ContentProps & {
62
63
  */
63
64
  forceMount?: boolean;
64
65
  };
65
- declare function CollapsibleContent({ forceMount, style: styleOverride, children, ...props }: CollapsibleContentProps): import("react/jsx-runtime").JSX.Element;
66
+ declare function CollapsibleContent({ forceMount, style: styleOverride, children, ...props }: CollapsibleContentProps): React.JSX.Element;
66
67
  export { Collapsible, CollapsibleContent, CollapsibleTrigger };
67
68
  export type { CollapsibleContentProps, CollapsibleProps, CollapsibleTriggerProps };
@@ -23,19 +23,19 @@ declare const DialogClose: {
23
23
  interface DialogProps extends DialogPrimitive.RootProps {
24
24
  children: React.ReactNode;
25
25
  }
26
- declare function DialogRoot({ children, ...props }: DialogProps): import("react/jsx-runtime").JSX.Element;
26
+ declare function DialogRoot({ children, ...props }: DialogProps): React.JSX.Element;
27
27
  interface DialogContentProps extends DialogPrimitive.ContentProps {
28
28
  portalHost?: string;
29
29
  }
30
- declare function DialogContent({ portalHost, style, children, ...props }: DialogContentProps): import("react/jsx-runtime").JSX.Element;
31
- declare function DialogHeader({ children, style, ...props }: ViewProps): import("react/jsx-runtime").JSX.Element;
32
- declare function DialogFooter({ children, style, ...props }: ViewProps): import("react/jsx-runtime").JSX.Element;
30
+ declare function DialogContent({ portalHost, style, children, ...props }: DialogContentProps): React.JSX.Element;
31
+ declare function DialogHeader({ children, style, ...props }: ViewProps): React.JSX.Element;
32
+ declare function DialogFooter({ children, style, ...props }: ViewProps): React.JSX.Element;
33
33
  declare function DialogTitle({ children, style, ...props }: DialogPrimitive.TitleProps & {
34
34
  children: React.ReactNode;
35
- }): import("react/jsx-runtime").JSX.Element;
35
+ }): React.JSX.Element;
36
36
  declare function DialogDescription({ children, style, ...props }: DialogPrimitive.DescriptionProps & {
37
37
  children: React.ReactNode;
38
- }): import("react/jsx-runtime").JSX.Element;
38
+ }): React.JSX.Element;
39
39
  declare const Dialog: typeof DialogRoot & {
40
40
  Trigger: {
41
41
  ({ asChild, onPress: onPressProp, disabled, ref, ...props }: Omit<import("react-native").PressableProps & React.RefAttributes<View>, "ref"> & {
@@ -91,17 +91,17 @@ declare const AlertDialogCancel: {
91
91
  interface AlertDialogProps extends AlertDialogPrimitive.RootProps {
92
92
  children: React.ReactNode;
93
93
  }
94
- declare function AlertDialogRoot({ children, ...props }: AlertDialogProps): import("react/jsx-runtime").JSX.Element;
94
+ declare function AlertDialogRoot({ children, ...props }: AlertDialogProps): React.JSX.Element;
95
95
  interface AlertDialogContentProps extends AlertDialogPrimitive.ContentProps {
96
96
  portalHost?: string;
97
97
  }
98
- declare function AlertDialogContent({ portalHost, style, children, ...props }: AlertDialogContentProps): import("react/jsx-runtime").JSX.Element;
98
+ declare function AlertDialogContent({ portalHost, style, children, ...props }: AlertDialogContentProps): React.JSX.Element;
99
99
  declare function AlertDialogTitle({ children, style, ...props }: AlertDialogPrimitive.TitleProps & {
100
100
  children: React.ReactNode;
101
- }): import("react/jsx-runtime").JSX.Element;
101
+ }): React.JSX.Element;
102
102
  declare function AlertDialogDescription({ children, style, ...props }: AlertDialogPrimitive.DescriptionProps & {
103
103
  children: React.ReactNode;
104
- }): import("react/jsx-runtime").JSX.Element;
104
+ }): React.JSX.Element;
105
105
  declare const AlertDialog: typeof AlertDialogRoot & {
106
106
  Trigger: {
107
107
  ({ asChild, onPress: onPressProp, disabled, ref, ...props }: Omit<import("react-native").PressableProps & React.RefAttributes<View>, "ref"> & {
@@ -11,5 +11,5 @@ type Props = {
11
11
  /**
12
12
  * @returns Wrapper for a view that dismisses the keyboard when tapped outside of a text input
13
13
  */
14
- export declare const DismissKeyboard: ({ children, style, avoidKeyboard, scrollable }: Props) => import("react/jsx-runtime").JSX.Element;
14
+ export declare const DismissKeyboard: ({ children, style, avoidKeyboard, scrollable }: Props) => React.JSX.Element;
15
15
  export {};
@@ -46,12 +46,12 @@ interface DrawerBodyProps extends ViewProps {
46
46
  interface DrawerFooterProps extends ViewProps {
47
47
  children: React.ReactNode;
48
48
  }
49
- declare function DrawerRoot({ open: controlledOpen, onOpenChange: controlledOnOpenChange, defaultOpen, side, width, closeOnBackdropPress, children, }: DrawerProps): import("react/jsx-runtime").JSX.Element;
50
- declare function DrawerTrigger({ asChild, children, style: styleOverride }: DrawerTriggerProps): import("react/jsx-runtime").JSX.Element;
51
- declare function DrawerContent({ swipeEnabled, swipeThreshold, velocityThreshold, style: styleOverride, children, ...props }: DrawerContentProps): import("react/jsx-runtime").JSX.Element | null;
52
- declare function DrawerHeader({ children, style, ...props }: DrawerHeaderProps): import("react/jsx-runtime").JSX.Element;
53
- declare function DrawerBody({ children, style, ...props }: DrawerBodyProps): import("react/jsx-runtime").JSX.Element;
54
- declare function DrawerFooter({ children, style, ...props }: DrawerFooterProps): import("react/jsx-runtime").JSX.Element;
49
+ declare function DrawerRoot({ open: controlledOpen, onOpenChange: controlledOnOpenChange, defaultOpen, side, width, closeOnBackdropPress, children, }: DrawerProps): React.JSX.Element;
50
+ declare function DrawerTrigger({ asChild, children, style: styleOverride }: DrawerTriggerProps): React.JSX.Element;
51
+ declare function DrawerContent({ swipeEnabled, swipeThreshold, velocityThreshold, style: styleOverride, children, ...props }: DrawerContentProps): React.JSX.Element | null;
52
+ declare function DrawerHeader({ children, style, ...props }: DrawerHeaderProps): React.JSX.Element;
53
+ declare function DrawerBody({ children, style, ...props }: DrawerBodyProps): React.JSX.Element;
54
+ declare function DrawerFooter({ children, style, ...props }: DrawerFooterProps): React.JSX.Element;
55
55
  declare function useDrawerClose(): () => void;
56
56
  interface DrawerCloseProps {
57
57
  /** Use child component as close button */
@@ -61,7 +61,7 @@ interface DrawerCloseProps {
61
61
  /** Optional style override */
62
62
  style?: StyleProp<ViewStyle>;
63
63
  }
64
- declare function DrawerClose({ asChild, children, style: styleOverride }: DrawerCloseProps): import("react/jsx-runtime").JSX.Element;
64
+ declare function DrawerClose({ asChild, children, style: styleOverride }: DrawerCloseProps): React.JSX.Element;
65
65
  declare const Drawer: typeof DrawerRoot & {
66
66
  Trigger: typeof DrawerTrigger;
67
67
  Content: typeof DrawerContent;
@@ -46,7 +46,7 @@ declare const DropdownMenuRadioGroup: {
46
46
  * props over slot props), so this only fills the gap when none is set.
47
47
  */
48
48
  type DropdownMenuTriggerProps = DropdownMenuPrimitive.TriggerProps;
49
- declare function DropdownMenuTrigger({ ...props }: DropdownMenuTriggerProps): import("react/jsx-runtime").JSX.Element;
49
+ declare function DropdownMenuTrigger({ ...props }: DropdownMenuTriggerProps): React.JSX.Element;
50
50
  /**
51
51
  * DropdownMenuSubTrigger Component
52
52
  * Trigger for sub-menus with automatic chevron icon
@@ -55,13 +55,13 @@ declare function DropdownMenuTrigger({ ...props }: DropdownMenuTriggerProps): im
55
55
  type DropdownMenuSubTriggerProps = DropdownMenuPrimitive.SubTriggerProps & {
56
56
  inset?: boolean;
57
57
  };
58
- declare function DropdownMenuSubTrigger({ inset, children, style: styleOverride, ...props }: DropdownMenuSubTriggerProps): import("react/jsx-runtime").JSX.Element;
58
+ declare function DropdownMenuSubTrigger({ inset, children, style: styleOverride, ...props }: DropdownMenuSubTriggerProps): React.JSX.Element;
59
59
  /**
60
60
  * DropdownMenuSubContent Component
61
61
  * Content container for sub-menus
62
62
  */
63
63
  type DropdownMenuSubContentProps = DropdownMenuPrimitive.SubContentProps;
64
- declare function DropdownMenuSubContent({ style: styleOverride, ...props }: DropdownMenuSubContentProps): import("react/jsx-runtime").JSX.Element;
64
+ declare function DropdownMenuSubContent({ style: styleOverride, ...props }: DropdownMenuSubContentProps): React.JSX.Element;
65
65
  /**
66
66
  * DropdownMenuContent Component
67
67
  * Main dropdown content with portal, overlay, and animation
@@ -74,7 +74,7 @@ declare function DropdownMenuSubContent({ style: styleOverride, ...props }: Drop
74
74
  type DropdownMenuContentProps = DropdownMenuPrimitive.ContentProps & {
75
75
  portalHost?: string;
76
76
  };
77
- declare function DropdownMenuContent({ side, align, sideOffset, portalHost, style: styleOverride, ...props }: DropdownMenuContentProps): import("react/jsx-runtime").JSX.Element;
77
+ declare function DropdownMenuContent({ side, align, sideOffset, portalHost, style: styleOverride, ...props }: DropdownMenuContentProps): React.JSX.Element;
78
78
  /**
79
79
  * DropdownMenuItem Component
80
80
  * Standard menu item with optional destructive variant
@@ -83,19 +83,19 @@ type DropdownMenuItemProps = DropdownMenuPrimitive.ItemProps & {
83
83
  inset?: boolean;
84
84
  variant?: "default" | "destructive";
85
85
  };
86
- declare function DropdownMenuItem({ inset, variant, style: styleOverride, ...props }: DropdownMenuItemProps): import("react/jsx-runtime").JSX.Element;
86
+ declare function DropdownMenuItem({ inset, variant, style: styleOverride, ...props }: DropdownMenuItemProps): React.JSX.Element;
87
87
  /**
88
88
  * DropdownMenuCheckboxItem Component
89
89
  * Menu item with checkbox indicator
90
90
  */
91
91
  type DropdownMenuCheckboxItemProps = DropdownMenuPrimitive.CheckboxItemProps;
92
- declare function DropdownMenuCheckboxItem({ children, style: styleOverride, ...props }: DropdownMenuCheckboxItemProps): import("react/jsx-runtime").JSX.Element;
92
+ declare function DropdownMenuCheckboxItem({ children, style: styleOverride, ...props }: DropdownMenuCheckboxItemProps): React.JSX.Element;
93
93
  /**
94
94
  * DropdownMenuRadioItem Component
95
95
  * Menu item with radio button indicator
96
96
  */
97
97
  type DropdownMenuRadioItemProps = DropdownMenuPrimitive.RadioItemProps;
98
- declare function DropdownMenuRadioItem({ children, style: styleOverride, ...props }: DropdownMenuRadioItemProps): import("react/jsx-runtime").JSX.Element;
98
+ declare function DropdownMenuRadioItem({ children, style: styleOverride, ...props }: DropdownMenuRadioItemProps): React.JSX.Element;
99
99
  /**
100
100
  * DropdownMenuLabel Component
101
101
  * Label for menu sections
@@ -103,13 +103,13 @@ declare function DropdownMenuRadioItem({ children, style: styleOverride, ...prop
103
103
  type DropdownMenuLabelProps = DropdownMenuPrimitive.LabelProps & {
104
104
  inset?: boolean;
105
105
  };
106
- declare function DropdownMenuLabel({ inset, style: styleOverride, ...props }: DropdownMenuLabelProps): import("react/jsx-runtime").JSX.Element;
106
+ declare function DropdownMenuLabel({ inset, style: styleOverride, ...props }: DropdownMenuLabelProps): React.JSX.Element;
107
107
  /**
108
108
  * DropdownMenuSeparator Component
109
109
  * Visual divider between menu sections
110
110
  */
111
111
  type DropdownMenuSeparatorProps = DropdownMenuPrimitive.SeparatorProps;
112
- declare function DropdownMenuSeparator({ style: styleOverride, ...props }: DropdownMenuSeparatorProps): import("react/jsx-runtime").JSX.Element;
112
+ declare function DropdownMenuSeparator({ style: styleOverride, ...props }: DropdownMenuSeparatorProps): React.JSX.Element;
113
113
  /**
114
114
  * DropdownMenuShortcut Component
115
115
  * Text component for displaying keyboard shortcuts
@@ -119,6 +119,6 @@ interface DropdownMenuShortcutProps {
119
119
  text?: string;
120
120
  style?: TextStyle;
121
121
  }
122
- declare function DropdownMenuShortcut({ children, text, style: styleOverride, ...props }: DropdownMenuShortcutProps): import("react/jsx-runtime").JSX.Element;
122
+ declare function DropdownMenuShortcut({ children, text, style: styleOverride, ...props }: DropdownMenuShortcutProps): React.JSX.Element;
123
123
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, };
124
124
  export type { DropdownMenuTriggerProps, DropdownMenuSubTriggerProps, DropdownMenuSubContentProps, DropdownMenuContentProps, DropdownMenuItemProps, DropdownMenuCheckboxItemProps, DropdownMenuRadioItemProps, DropdownMenuLabelProps, DropdownMenuSeparatorProps, DropdownMenuShortcutProps, };
@@ -39,4 +39,4 @@ export interface EmptyStateProps {
39
39
  * />
40
40
  * ```
41
41
  */
42
- export declare function EmptyState({ icon, iconSize, title, description, actionLabel, onAction, actionPreset, style, children, }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
42
+ export declare function EmptyState({ icon, iconSize, title, description, actionLabel, onAction, actionPreset, style, children, }: EmptyStateProps): React.JSX.Element;
@@ -52,6 +52,6 @@ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBo
52
52
  resetError: () => void;
53
53
  static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState>;
54
54
  componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
55
- render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
55
+ render(): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | React.JSX.Element | null | undefined;
56
56
  }
57
57
  export {};
@@ -45,5 +45,5 @@ export type IconProps = FeatherIconProps | CustomIconProps;
45
45
  * <Icon name="terminal" style={{ marginRight: 8 }} />
46
46
  * ```
47
47
  */
48
- export declare function Icon(props: IconProps): import("react/jsx-runtime").JSX.Element;
48
+ export declare function Icon(props: IconProps): React.JSX.Element;
49
49
  export {};
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import { StyleProp, ViewStyle } from "react-native";
2
3
  export interface InputOTPProps {
3
4
  /**
@@ -68,5 +69,5 @@ export interface InputOTPProps {
68
69
  * />
69
70
  * ```
70
71
  */
71
- declare function InputOTP({ length, value, onChangeText, onComplete, error, errorText, disabled, autoFocus, secureTextEntry, inputMode, style: styleOverride, }: InputOTPProps): import("react/jsx-runtime").JSX.Element;
72
+ declare function InputOTP({ length, value, onChangeText, onComplete, error, errorText, disabled, autoFocus, secureTextEntry, inputMode, style: styleOverride, }: InputOTPProps): React.JSX.Element;
72
73
  export { InputOTP };
@@ -58,4 +58,4 @@ export interface LabelProps {
58
58
  * </Label>
59
59
  * ```
60
60
  */
61
- export declare function Label({ children, nativeID, required, size, error, disabled, style, onPress, }: LabelProps): import("react/jsx-runtime").JSX.Element;
61
+ export declare function Label({ children, nativeID, required, size, error, disabled, style, onPress, }: LabelProps): import("react").JSX.Element;
@@ -54,5 +54,5 @@ interface MaxWidthContainerProps {
54
54
  * </MaxWidthContainer>
55
55
  * ```
56
56
  */
57
- export declare function MaxWidthContainer({ children, maxWidth, preset, style, centered, }: MaxWidthContainerProps): import("react/jsx-runtime").JSX.Element;
57
+ export declare function MaxWidthContainer({ children, maxWidth, preset, style, centered, }: MaxWidthContainerProps): React.JSX.Element;
58
58
  export {};
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  /**
2
3
  * Notification
3
4
  *
@@ -7,20 +8,13 @@
7
8
  * Usage:
8
9
  * ```ts
9
10
  * // Top notification (default)
10
- * globalUIStore.getState().show({
11
- * type: "success",
12
- * title: "Saved",
11
+ * notify.success("Saved", {
13
12
  * messages: ["Your changes have been saved."],
14
13
  * duration: 3000,
15
14
  * });
16
15
  *
17
16
  * // Bottom toast
18
- * globalUIStore.getState().show({
19
- * type: "info",
20
- * title: "Copied to clipboard",
21
- * duration: 2000,
22
- * position: "bottom",
23
- * });
17
+ * notify.info("Copied to clipboard", { duration: 2000, position: "bottom" });
24
18
  * ```
25
19
  */
26
- export declare const Notification: () => import("react/jsx-runtime").JSX.Element | null;
20
+ export declare const Notification: () => React.JSX.Element | null;