@pickle-ui/react-native 0.0.0 → 1.0.0-beta.1

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 (55) hide show
  1. package/README.md +44 -11
  2. package/dist/components/Badge.d.ts +6 -3
  3. package/dist/components/Badge.d.ts.map +1 -1
  4. package/dist/components/Badge.js +36 -7
  5. package/dist/components/Badge.js.map +1 -1
  6. package/dist/components/Button.d.ts +11 -4
  7. package/dist/components/Button.d.ts.map +1 -1
  8. package/dist/components/Button.js +97 -15
  9. package/dist/components/Button.js.map +1 -1
  10. package/dist/components/Card.d.ts +15 -5
  11. package/dist/components/Card.d.ts.map +1 -1
  12. package/dist/components/Card.js +28 -10
  13. package/dist/components/Card.js.map +1 -1
  14. package/dist/components/Text.d.ts +7 -3
  15. package/dist/components/Text.d.ts.map +1 -1
  16. package/dist/components/Text.js +23 -11
  17. package/dist/components/Text.js.map +1 -1
  18. package/dist/components/_internal/Spinner.d.ts +9 -0
  19. package/dist/components/_internal/Spinner.d.ts.map +1 -0
  20. package/dist/components/_internal/Spinner.js +31 -0
  21. package/dist/components/_internal/Spinner.js.map +1 -0
  22. package/dist/entries/card.d.ts +1 -1
  23. package/dist/entries/card.d.ts.map +1 -1
  24. package/dist/entries/theme.d.ts +3 -0
  25. package/dist/entries/theme.d.ts.map +1 -0
  26. package/dist/entries/theme.js +2 -0
  27. package/dist/entries/theme.js.map +1 -0
  28. package/dist/index.d.ts +1 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/lib/cn.d.ts.map +1 -1
  33. package/dist/lib/cn.js +13 -1
  34. package/dist/lib/cn.js.map +1 -1
  35. package/package.json +5 -2
  36. package/src/base.css +7 -2
  37. package/src/components/Badge.stories.tsx +51 -6
  38. package/src/components/Badge.test.tsx +15 -0
  39. package/src/components/Badge.tsx +73 -17
  40. package/src/components/Button.stories.tsx +96 -8
  41. package/src/components/Button.test.tsx +69 -0
  42. package/src/components/Button.tsx +156 -18
  43. package/src/components/Card.stories.tsx +17 -4
  44. package/src/components/Card.test.tsx +24 -1
  45. package/src/components/Card.tsx +71 -13
  46. package/src/components/Text.stories.tsx +52 -2
  47. package/src/components/Text.test.tsx +35 -3
  48. package/src/components/Text.tsx +42 -12
  49. package/src/components/_internal/Spinner.tsx +49 -0
  50. package/src/components/_internal/Story.tsx +34 -0
  51. package/src/entries/card.ts +2 -0
  52. package/src/entries/theme.ts +7 -0
  53. package/src/index.ts +1 -0
  54. package/src/lib/cn.test.ts +6 -0
  55. package/src/lib/cn.ts +14 -1
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Pickle UI components for React Native apps built with Expo, styled with
4
4
  Pickle's tokens through [Uniwind](https://uniwind.dev). They reuse the names
5
5
  of `@pickle-ui/react` (`variant`, `size`, `tone`, `Card.Header`, …) with
6
- native sizes and React Native primitives.
6
+ the same dimensions, on React Native primitives.
7
7
 
8
8
  Browse them in the [Storybook](https://ugogo.github.io/pickle-ui/react-native/),
9
9
  rendered in the browser through react-native-web.
@@ -42,8 +42,8 @@ after Tailwind and Uniwind, which is why they come from the same file.
42
42
 
43
43
  To bring your own token set, import its pieces instead: `tailwindcss`,
44
44
  `uniwind`, your tokens as Uniwind themes, then
45
- `@pickle-ui/react-native/base.css`, which only adds the components to
46
- Uniwind's content sources.
45
+ `@pickle-ui/react-native/base.css`, which adds the components to Uniwind's
46
+ content sources and the `Text` type scale.
47
47
 
48
48
  Then use the components:
49
49
 
@@ -72,18 +72,31 @@ steps, token overrides and runtime brand colors.
72
72
 
73
73
  Each export is also available from its own subpath.
74
74
 
75
- | Export | Subpath | Notes |
76
- | --------------- | ----------------------------------------- | ---------------------------------------------------------------------------------------------- |
77
- | `Badge` | `@pickle-ui/react-native/badge` | `variant`: `default`, `secondary`, `success`, `inProgress`, `inReview` |
78
- | `Button` | `@pickle-ui/react-native/button` | `variant`: `default`, `secondary`, `outline`, `ghost`, `destructive`; `size`: `sm`, `md`, `lg` |
79
- | `Card` | `@pickle-ui/react-native/card` | Parts: `Card.Header`, `Card.Title`, `Card.Description`, `Card.Content` |
80
- | `Text` | `@pickle-ui/react-native/text` | `variant`: `h1` … `h4`, `lead`, `body`, `small`; `tone`: `muted`, `primary`, `destructive` |
81
- | `cn` | `@pickle-ui/react-native/cn` | Joins class names; later classes win |
82
- | `useColorToken` | `@pickle-ui/react-native/use-color-token` | Reads a token as a color string, for props that don't take a `className` |
75
+ | Export | Subpath | Notes |
76
+ | --------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
77
+ | `Badge` | `@pickle-ui/react-native/badge` | `variant`: `default`, `secondary`, `outline`, `destructive`, `info`, `success`, `warning`, `error` and the statuses `pending`, `submitted`, `inProgress`, `inReview`, `failed`, `expired`; `size`: `sm`, `md`, `lg` |
78
+ | `Button` | `@pickle-ui/react-native/button` | `variant`: `default`, `secondary`, `destructive`, `destructive-outline`, `outline`, `ghost`, `link`; `size`: `xs` … `xl`, `icon-xs` … `icon-xl`; `loading` |
79
+ | `Card` | `@pickle-ui/react-native/card` | Parts: `Card.Header`, `Card.Title`, `Card.Description`, `Card.Action`, `Card.Content`, `Card.Footer` |
80
+ | `Text` | `@pickle-ui/react-native/text` | `variant`: `h1` … `h4`, `lead`, `body`, `small`, `code`; `tone`: `muted`, `primary`, `destructive`; `weight`: `normal`, `bold`; `truncate` |
81
+ | `createTheme` | `@pickle-ui/react-native/theme` | Derives a theme from a brand color, the same as on the web; apply it with `ScopedVariables` |
82
+ | `cn` | `@pickle-ui/react-native/cn` | Joins class names; later classes win, and `text-h1` … `text-code` count as font sizes |
83
+ | `useColorToken` | `@pickle-ui/react-native/use-color-token` | Reads a token as a color string, for props that don't take a `className` |
83
84
 
84
85
  Every component takes the props of the React Native element it renders,
85
86
  `className` included, and merges your `className` last.
86
87
 
88
+ `Button` and `Badge` wrap text children in their label and render other
89
+ children, such as icons, as they are. Icons don't inherit the label's color on
90
+ native, so pass it to the icon, for example with `useColorToken`. Give an
91
+ icon-only button an `icon*` size and an `accessibilityLabel`. Buttons keep the web's dimensions, and a `hitSlop` stretches each size to a
92
+ 44pt touch target, as the web's `pointer-coarse` hit area does. Headings (`h1` … `h4`)
93
+ are announced as headers.
94
+
95
+ `Text` sizes come from the shared type scale (`--text-h1` … `--text-code` in
96
+ `@pickle-ui/tokens/typography.css`); override them like any token. Fonts are
97
+ not set yet: text uses the platform's system font, and `code` its monospace
98
+ font.
99
+
87
100
  ## Theming
88
101
 
89
102
  The tokens are Uniwind themes. Override them in `global.css` inside
@@ -91,3 +104,23 @@ The tokens are Uniwind themes. Override them in `global.css` inside
91
104
  themes, or at runtime with Uniwind's `ScopedVariables` and
92
105
  `Uniwind.updateCSSVariables`. See the
93
106
  [`@pickle-ui/tokens` README](../tokens/README.md#react-native).
107
+
108
+ To brand an app at runtime, derive the tokens from one color with
109
+ `createTheme` and apply the set for the active theme:
110
+
111
+ ```tsx
112
+ import { createTheme } from '@pickle-ui/react-native/theme';
113
+ import { ScopedVariables, useUniwind } from 'uniwind';
114
+
115
+ const brand = createTheme({ primary: '#2563eb' });
116
+
117
+ export function Branded({ children }: { children: React.ReactNode }) {
118
+ const { theme } = useUniwind();
119
+ return <ScopedVariables variables={brand[theme]}>{children}</ScopedVariables>;
120
+ }
121
+ ```
122
+
123
+ The values are `oklch()` colors: Uniwind resolves them in `className`
124
+ utilities (`bg-primary`), but React Native can't read them from a `style`
125
+ prop, so draw with the tokens rather than the raw values. Fonts from
126
+ `createTheme` don't apply on native.
@@ -1,11 +1,14 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  import { View } from 'react-native';
3
3
  declare const badgeVariants: (props?: ({
4
- variant?: "default" | "inProgress" | "inReview" | "secondary" | "success" | null | undefined;
4
+ size?: "md" | "lg" | "sm" | null | undefined;
5
+ variant?: "default" | "destructive" | "error" | "expired" | "failed" | "info" | "inProgress" | "inReview" | "outline" | "pending" | "secondary" | "submitted" | "success" | "warning" | null | undefined;
5
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
7
  export type BadgeProps = React.ComponentProps<typeof View> & VariantProps<typeof badgeVariants> & {
7
- children: string;
8
+ /** Text is wrapped in the label; other children, such as icons, render as they are. */
9
+ children: React.ReactNode;
10
+ labelClassName?: string;
8
11
  };
9
- export declare function Badge({ children, className, variant, ...props }: BadgeProps): import("react").JSX.Element;
12
+ export declare function Badge({ children, className, labelClassName, size, variant, ...props }: BadgeProps): import("react").JSX.Element;
10
13
  export {};
11
14
  //# sourceMappingURL=Badge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAQ,IAAI,EAAE,MAAM,cAAc,CAAC;AAK1C,QAAA,MAAM,aAAa;;8EAWjB,CAAC;AAeH,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,GACxD,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAM3E"}
1
+ {"version":3,"file":"Badge.d.ts","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAQ,IAAI,EAAE,MAAM,cAAc,CAAC;AAK1C,QAAA,MAAM,aAAa;;;8EA4BlB,CAAC;AA6BF,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,GACxD,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IACnC,uFAAuF;IACvF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEJ,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,IAAW,EACX,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,UAAU,+BAmBZ"}
@@ -1,33 +1,62 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cva } from 'class-variance-authority';
3
+ import { Children, isValidElement } from 'react';
3
4
  import { Text, View } from 'react-native';
4
5
  import { cn } from '../lib/cn';
5
- // Status variants use the `-subtle` token pairs, like `Badge` on the web.
6
- const badgeVariants = cva('self-start rounded-sm px-1.5 py-0.5', {
7
- defaultVariants: { variant: 'default' },
6
+ // Same variants and sizes as `Badge` in @pickle-ui/react.
7
+ const badgeVariants = cva('flex-row items-center justify-center gap-1 self-start rounded-sm border border-transparent', {
8
+ defaultVariants: { size: 'md', variant: 'default' },
8
9
  variants: {
10
+ size: {
11
+ lg: 'h-5.5 min-w-5.5 px-1.5',
12
+ md: 'h-4.5 min-w-4.5 px-1',
13
+ sm: 'h-4 min-w-4 rounded px-1',
14
+ },
9
15
  variant: {
10
16
  default: 'bg-primary',
17
+ destructive: 'bg-destructive',
18
+ error: 'bg-destructive-subtle',
19
+ expired: 'bg-secondary',
20
+ failed: 'bg-destructive-subtle',
21
+ info: 'bg-info-subtle',
11
22
  inProgress: 'bg-info-subtle',
12
23
  inReview: 'bg-warning-subtle',
24
+ outline: 'border-input bg-background dark:bg-input/32',
25
+ pending: 'bg-warning-subtle',
13
26
  secondary: 'bg-secondary',
27
+ submitted: 'bg-info-subtle',
14
28
  success: 'bg-success-subtle',
29
+ warning: 'bg-warning-subtle',
15
30
  },
16
31
  },
17
32
  });
18
- const labelVariants = cva('text-xs font-medium', {
19
- defaultVariants: { variant: 'default' },
33
+ const labelVariants = cva('font-medium', {
34
+ defaultVariants: { size: 'md', variant: 'default' },
20
35
  variants: {
36
+ size: {
37
+ lg: 'text-sm',
38
+ md: 'text-xs',
39
+ sm: 'text-[10px]',
40
+ },
21
41
  variant: {
22
42
  default: 'text-primary-foreground',
43
+ destructive: 'text-destructive-foreground',
44
+ error: 'text-destructive-subtle-foreground',
45
+ expired: 'text-secondary-foreground',
46
+ failed: 'text-destructive-subtle-foreground',
47
+ info: 'text-info-subtle-foreground',
23
48
  inProgress: 'text-info-subtle-foreground',
24
49
  inReview: 'text-warning-subtle-foreground',
50
+ outline: 'text-foreground',
51
+ pending: 'text-warning-subtle-foreground',
25
52
  secondary: 'text-secondary-foreground',
53
+ submitted: 'text-info-subtle-foreground',
26
54
  success: 'text-success-subtle-foreground',
55
+ warning: 'text-warning-subtle-foreground',
27
56
  },
28
57
  },
29
58
  });
30
- export function Badge({ children, className, variant, ...props }) {
31
- return (_jsx(View, { className: cn(badgeVariants({ variant }), className), ...props, children: _jsx(Text, { className: labelVariants({ variant }), children: children }) }));
59
+ export function Badge({ children, className, labelClassName, size = 'md', variant = 'default', ...props }) {
60
+ return (_jsx(View, { className: cn(badgeVariants({ size, variant }), className), ...props, children: Children.map(children, (child) => typeof child === 'string' || typeof child === 'number' ? (_jsx(Text, { className: cn(labelVariants({ size, variant }), labelClassName), children: child })) : isValidElement(child) ? (child) : null) }));
32
61
  }
33
62
  //# sourceMappingURL=Badge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,0EAA0E;AAC1E,MAAM,aAAa,GAAG,GAAG,CAAC,qCAAqC,EAAE;IAC/D,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;IACvC,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,YAAY;YACrB,UAAU,EAAE,gBAAgB;YAC5B,QAAQ,EAAE,mBAAmB;YAC7B,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,mBAAmB;SAC7B;KACF;CACF,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,GAAG,CAAC,qBAAqB,EAAE;IAC/C,eAAe,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE;IACvC,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,yBAAyB;YAClC,UAAU,EAAE,6BAA6B;YACzC,QAAQ,EAAE,gCAAgC;YAC1C,SAAS,EAAE,2BAA2B;YACtC,OAAO,EAAE,gCAAgC;SAC1C;KACF;CACF,CAAC,CAAC;AAKH,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,EAAc;IAC1E,OAAO,CACL,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KAAM,KAAK,YACnE,KAAC,IAAI,IAAC,SAAS,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,YAAG,QAAQ,GAAQ,GACzD,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/components/Badge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,0DAA0D;AAC1D,MAAM,aAAa,GAAG,GAAG,CACvB,4FAA4F,EAC5F;IACE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;IACnD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,wBAAwB;YAC5B,EAAE,EAAE,sBAAsB;YAC1B,EAAE,EAAE,0BAA0B;SAC/B;QACD,OAAO,EAAE;YACP,OAAO,EAAE,YAAY;YACrB,WAAW,EAAE,gBAAgB;YAC7B,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,uBAAuB;YAC/B,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,gBAAgB;YAC5B,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,6CAA6C;YACtD,OAAO,EAAE,mBAAmB;YAC5B,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,gBAAgB;YAC3B,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,mBAAmB;SAC7B;KACF;CACF,CACF,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,CAAC,aAAa,EAAE;IACvC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;IACnD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,aAAa;SAClB;QACD,OAAO,EAAE;YACP,OAAO,EAAE,yBAAyB;YAClC,WAAW,EAAE,6BAA6B;YAC1C,KAAK,EAAE,oCAAoC;YAC3C,OAAO,EAAE,2BAA2B;YACpC,MAAM,EAAE,oCAAoC;YAC5C,IAAI,EAAE,6BAA6B;YACnC,UAAU,EAAE,6BAA6B;YACzC,QAAQ,EAAE,gCAAgC;YAC1C,OAAO,EAAE,iBAAiB;YAC1B,OAAO,EAAE,gCAAgC;YACzC,SAAS,EAAE,2BAA2B;YACtC,SAAS,EAAE,6BAA6B;YACxC,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,gCAAgC;SAC1C;KACF;CACF,CAAC,CAAC;AASH,MAAM,UAAU,KAAK,CAAC,EACpB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,IAAI,GAAG,IAAI,EACX,OAAO,GAAG,SAAS,EACnB,GAAG,KAAK,EACG;IACX,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KACtD,KAAK,YAER,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAChC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CACvD,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,YAE9D,KAAK,GACD,CACR,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1B,KAAK,CACN,CAAC,CAAC,CAAC,IAAI,CACT,GACI,CACR,CAAC;AACJ,CAAC"}
@@ -1,13 +1,20 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  import { Pressable } from 'react-native';
3
3
  declare const buttonVariants: (props?: ({
4
- size?: "md" | "lg" | "sm" | null | undefined;
5
- variant?: "default" | "secondary" | "destructive" | "ghost" | "outline" | null | undefined;
4
+ size?: "md" | "lg" | "sm" | "icon" | "icon-lg" | "icon-sm" | "icon-xl" | "icon-xs" | "xl" | "xs" | null | undefined;
5
+ variant?: "default" | "destructive" | "outline" | "secondary" | "link" | "destructive-outline" | "ghost" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  export type ButtonProps = Omit<React.ComponentProps<typeof Pressable>, 'children'> & VariantProps<typeof buttonVariants> & {
8
- children: string;
8
+ /**
9
+ * Text is wrapped in the label; other children, such as icons, render as
10
+ * they are. Icon-only buttons need an `icon*` size and an
11
+ * `accessibilityLabel`.
12
+ */
13
+ children: React.ReactNode;
9
14
  labelClassName?: string;
15
+ /** Shows a spinner in place of the content and disables the button. */
16
+ loading?: boolean;
10
17
  };
11
- export declare function Button({ children, className, labelClassName, size, variant, ...props }: ButtonProps): import("react").JSX.Element;
18
+ export declare function Button({ accessibilityState, children, className, disabled, labelClassName, loading, size, variant, ...props }: ButtonProps): import("react").JSX.Element;
12
19
  export {};
13
20
  //# sourceMappingURL=Button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAQ,MAAM,cAAc,CAAC;AAK/C,QAAA,MAAM,cAAc;;;8EAmBnB,CAAC;AAgBF,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,EACtC,UAAU,CACX,GACC,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEJ,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,WAAW,+BAYb"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAe,SAAS,EAAc,MAAM,cAAc,CAAC;AAQlE,QAAA,MAAM,cAAc;;;8EAgCnB,CAAC;AAoFF,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,EACtC,UAAU,CACX,GACC,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC;;;;OAIG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ,wBAAgB,MAAM,CAAC,EACrB,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,cAAc,EACd,OAAe,EACf,IAAW,EACX,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,WAAW,+BAuDb"}
@@ -1,39 +1,121 @@
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 { cva } from 'class-variance-authority';
3
- import { Pressable, Text } from 'react-native';
3
+ import { Children, isValidElement } from 'react';
4
+ import { Pressable, Text, View } from 'react-native';
4
5
  import { cn } from '../lib/cn';
5
- // Same variant and size names as `Button` in @pickle-ui/react.
6
- const buttonVariants = cva('flex-row items-center justify-center gap-2 rounded-lg border active:opacity-80 disabled:opacity-60', {
6
+ import { Spinner } from './_internal/Spinner';
7
+ // Same variants, sizes and dimensions as `Button` in @pickle-ui/react on a
8
+ // phone. Like the web's `pointer-coarse` hit area, `hitSlop` stretches every
9
+ // size to a 44pt touch target. Paddings leave room for the 1pt border.
10
+ const buttonVariants = cva('flex-row items-center justify-center gap-2 rounded-lg border disabled:opacity-64', {
7
11
  defaultVariants: { size: 'md', variant: 'default' },
8
12
  variants: {
9
13
  size: {
10
- lg: 'h-11 px-5',
11
- md: 'h-10 px-4',
12
- sm: 'h-8 px-3',
14
+ icon: 'size-8',
15
+ 'icon-lg': 'size-9',
16
+ 'icon-sm': 'size-7',
17
+ 'icon-xl': 'size-10',
18
+ 'icon-xs': 'size-6 rounded-md',
19
+ lg: 'h-9 px-[13px]',
20
+ md: 'h-8 px-[11px]',
21
+ sm: 'h-7 gap-1.5 px-[9px]',
22
+ xl: 'h-10 px-[15px]',
23
+ xs: 'h-6 gap-1 rounded-md px-[7px]',
13
24
  },
14
25
  variant: {
15
- default: 'border-primary bg-primary',
16
- destructive: 'border-destructive bg-destructive',
17
- ghost: 'border-transparent active:bg-accent',
18
- outline: 'border-input bg-popover',
19
- secondary: 'border-transparent bg-secondary',
26
+ default: 'border-primary bg-primary shadow-primary/24 shadow-xs active:bg-primary/90 disabled:shadow-none',
27
+ destructive: 'border-destructive bg-destructive shadow-destructive/24 shadow-xs active:bg-destructive/90 disabled:shadow-none',
28
+ 'destructive-outline': 'border-input bg-popover active:border-destructive/32 active:bg-destructive/4 dark:bg-input/32 shadow-xs shadow-black/5 disabled:shadow-none',
29
+ ghost: 'active:bg-accent border-transparent',
30
+ link: 'border-transparent',
31
+ outline: 'border-input bg-popover active:bg-accent/50 dark:bg-input/32 dark:active:bg-input/64 shadow-xs shadow-black/5 disabled:shadow-none',
32
+ secondary: 'bg-secondary active:bg-secondary/80 border-transparent',
20
33
  },
21
34
  },
22
35
  });
23
36
  const labelVariants = cva('font-medium', {
37
+ compoundVariants: [
38
+ { className: 'underline', pressed: true, variant: 'link' },
39
+ ],
24
40
  defaultVariants: { size: 'md', variant: 'default' },
25
41
  variants: {
26
- size: { lg: 'text-base', md: 'text-sm', sm: 'text-xs' },
42
+ pressed: { false: '', true: '' },
43
+ size: {
44
+ icon: 'text-base',
45
+ 'icon-lg': 'text-base',
46
+ 'icon-sm': 'text-base',
47
+ 'icon-xl': 'text-base',
48
+ 'icon-xs': 'text-base',
49
+ lg: 'text-base',
50
+ md: 'text-base',
51
+ sm: 'text-base',
52
+ xl: 'text-lg',
53
+ xs: 'text-sm',
54
+ },
27
55
  variant: {
28
56
  default: 'text-primary-foreground',
29
57
  destructive: 'text-destructive-foreground',
58
+ 'destructive-outline': 'text-destructive-subtle-foreground',
30
59
  ghost: 'text-foreground',
60
+ link: 'text-foreground',
31
61
  outline: 'text-foreground',
32
62
  secondary: 'text-secondary-foreground',
33
63
  },
34
64
  },
35
65
  });
36
- export function Button({ children, className, labelClassName, size, variant, ...props }) {
37
- return (_jsx(Pressable, { accessibilityRole: "button", className: cn(buttonVariants({ size, variant }), className), ...props, children: _jsx(Text, { className: cn(labelVariants({ size, variant }), labelClassName), children: children }) }));
66
+ const spinnerVariants = cva('', {
67
+ variants: {
68
+ variant: {
69
+ default: 'border-primary-foreground',
70
+ destructive: 'border-destructive-foreground',
71
+ 'destructive-outline': 'border-foreground',
72
+ ghost: 'border-foreground',
73
+ link: 'border-foreground',
74
+ outline: 'border-foreground',
75
+ secondary: 'border-secondary-foreground',
76
+ },
77
+ },
78
+ });
79
+ // The web's 1px inner highlight on solid buttons. Uniwind draws
80
+ // `inset-shadow` outside the view, so a top border on an overlay stands in.
81
+ const highlightVariants = cva('absolute inset-0 rounded-lg border-t', {
82
+ variants: {
83
+ pressed: { false: 'border-white/16', true: 'border-black/8' },
84
+ size: {
85
+ icon: '',
86
+ 'icon-lg': '',
87
+ 'icon-sm': '',
88
+ 'icon-xl': '',
89
+ 'icon-xs': 'rounded-md',
90
+ lg: '',
91
+ md: '',
92
+ sm: '',
93
+ xl: '',
94
+ xs: 'rounded-md',
95
+ },
96
+ },
97
+ });
98
+ // Half the gap between each size and a 44pt touch target, vertical only for
99
+ // buttons with a label, whose width already reaches it.
100
+ const HIT_SLOP = {
101
+ icon: 6,
102
+ 'icon-lg': 4,
103
+ 'icon-sm': 8,
104
+ 'icon-xl': 2,
105
+ 'icon-xs': 10,
106
+ lg: { bottom: 4, top: 4 },
107
+ md: { bottom: 6, top: 6 },
108
+ sm: { bottom: 8, top: 8 },
109
+ xl: { bottom: 2, top: 2 },
110
+ xs: { bottom: 10, top: 10 },
111
+ };
112
+ export function Button({ accessibilityState, children, className, disabled, labelClassName, loading = false, size = 'md', variant = 'default', ...props }) {
113
+ const isDisabled = Boolean(disabled || loading);
114
+ const isSolid = variant === 'default' || variant === 'destructive';
115
+ return (_jsx(Pressable, { accessibilityRole: "button", accessibilityState: {
116
+ ...accessibilityState,
117
+ busy: loading,
118
+ disabled: isDisabled,
119
+ }, className: cn(buttonVariants({ size, variant }), className), disabled: isDisabled, hitSlop: size ? HIT_SLOP[size] : undefined, ...props, children: ({ pressed }) => (_jsxs(_Fragment, { children: [isSolid && !isDisabled ? (_jsx(View, { className: highlightVariants({ pressed, size }), pointerEvents: "none" })) : null, Children.map(children, (child) => typeof child === 'string' || typeof child === 'number' ? (_jsx(Text, { className: cn(labelVariants({ pressed, size, variant }), loading && 'opacity-0', labelClassName), children: child })) : isValidElement(child) ? (loading ? (_jsx(View, { className: "opacity-0", children: child })) : (child)) : null), loading ? (_jsx(View, { className: "absolute", children: _jsx(Spinner, { className: spinnerVariants({ variant }) }) })) : null] })) }));
38
120
  }
39
121
  //# sourceMappingURL=Button.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,+DAA+D;AAC/D,MAAM,cAAc,GAAG,GAAG,CACxB,oGAAoG,EACpG;IACE,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;IACnD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,EAAE,EAAE,WAAW;YACf,EAAE,EAAE,WAAW;YACf,EAAE,EAAE,UAAU;SACf;QACD,OAAO,EAAE;YACP,OAAO,EAAE,2BAA2B;YACpC,WAAW,EAAE,mCAAmC;YAChD,KAAK,EAAE,qCAAqC;YAC5C,OAAO,EAAE,yBAAyB;YAClC,SAAS,EAAE,iCAAiC;SAC7C;KACF;CACF,CACF,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,CAAC,aAAa,EAAE;IACvC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE;IACnD,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;QACvD,OAAO,EAAE;YACP,OAAO,EAAE,yBAAyB;YAClC,WAAW,EAAE,6BAA6B;YAC1C,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,iBAAiB;YAC1B,SAAS,EAAE,2BAA2B;SACvC;KACF;CACF,CAAC,CAAC;AAWH,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACI;IACZ,OAAO,CACL,KAAC,SAAS,IACR,iBAAiB,EAAC,QAAQ,EAC1B,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KACvD,KAAK,YAET,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,cAAc,CAAC,YAClE,QAAQ,GACJ,GACG,CACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../src/components/Button.tsx"],"names":[],"mappings":"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"}
@@ -1,20 +1,30 @@
1
1
  import { View } from 'react-native';
2
- import { Text } from './Text';
2
+ import { type TextProps } from './Text';
3
+ export type CardActionProps = React.ComponentProps<typeof View>;
3
4
  export type CardContentProps = React.ComponentProps<typeof View>;
4
- export type CardDescriptionProps = React.ComponentProps<typeof Text>;
5
+ export type CardDescriptionProps = Omit<TextProps, 'tone' | 'variant'>;
6
+ export type CardFooterProps = React.ComponentProps<typeof View>;
5
7
  export type CardHeaderProps = React.ComponentProps<typeof View>;
6
8
  export type CardProps = React.ComponentProps<typeof View>;
7
- export type CardTitleProps = React.ComponentProps<typeof Text>;
9
+ export type CardTitleProps = Omit<TextProps, 'tone' | 'variant'>;
10
+ declare function CardAction({ className, ...props }: CardActionProps): import("react").JSX.Element;
8
11
  declare function CardContent({ className, ...props }: CardContentProps): import("react").JSX.Element;
9
12
  declare function CardDescription({ className, ...props }: CardDescriptionProps): import("react").JSX.Element;
10
- declare function CardHeader({ className, ...props }: CardHeaderProps): import("react").JSX.Element;
13
+ declare function CardFooter({ className, ...props }: CardFooterProps): import("react").JSX.Element;
14
+ /**
15
+ * Lays a `Card.Action` out beside the title and description, top-aligned,
16
+ * like the web header's grid.
17
+ */
18
+ declare function CardHeader({ children, className, ...props }: CardHeaderProps): import("react").JSX.Element;
11
19
  declare function CardRoot({ className, ...props }: CardProps): import("react").JSX.Element;
12
20
  declare function CardTitle({ className, ...props }: CardTitleProps): import("react").JSX.Element;
13
21
  declare const Card: typeof CardRoot & {
22
+ Action: typeof CardAction;
14
23
  Content: typeof CardContent;
15
24
  Description: typeof CardDescription;
25
+ Footer: typeof CardFooter;
16
26
  Header: typeof CardHeader;
17
27
  Title: typeof CardTitle;
18
28
  };
19
- export { Card, CardContent, CardDescription, CardHeader, CardTitle };
29
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, };
20
30
  //# sourceMappingURL=Card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAE/D,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAE7D;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,+BAErE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,+BAE3D;AAED,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BAUnD;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAQzD;AAID,QAAA,MAAM,IAAI;;;;;CAKR,CAAC;AAEH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAChE,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AACvE,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAChE,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC;AAC1D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAKjE,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,+BAE3D;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,+BAE7D;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,oBAAoB,+BASrE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,+BAI3D;AAED;;;GAGG;AACH,iBAAS,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,+BAyBrE;AAED,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BAUnD;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAQzD;AAED,QAAA,MAAM,IAAI;;;;;;;CAOR,CAAC;AAEH,OAAO,EACL,IAAI,EACJ,UAAU,EACV,WAAW,EACX,eAAe,EACf,UAAU,EACV,UAAU,EACV,SAAS,GACV,CAAC"}
@@ -1,29 +1,47 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Children, isValidElement } from 'react';
2
3
  import { View } from 'react-native';
3
4
  import { cn } from '../lib/cn';
4
5
  import { Text } from './Text';
6
+ // The parts sit in a column with `gap-4` and their own side padding, which
7
+ // reproduces the web's spacing between header, content and footer.
8
+ function CardAction({ className, ...props }) {
9
+ return _jsx(View, { className: cn('self-start', className), ...props });
10
+ }
5
11
  function CardContent({ className, ...props }) {
6
- return _jsx(View, { className: cn('gap-3 px-5', className), ...props });
12
+ return _jsx(View, { className: cn('px-6', className), ...props });
7
13
  }
8
14
  function CardDescription({ className, ...props }) {
9
- return _jsx(Text, { className: className, tone: "muted", ...props });
15
+ return (_jsx(Text, { className: cn('text-sm', className), tone: "muted", variant: "body", ...props }));
16
+ }
17
+ function CardFooter({ className, ...props }) {
18
+ return (_jsx(View, { className: cn('flex-row items-center px-6', className), ...props }));
10
19
  }
11
- function CardHeader({ className, ...props }) {
12
- return _jsx(View, { className: cn('gap-1 px-5', className), ...props });
20
+ /**
21
+ * Lays a `Card.Action` out beside the title and description, top-aligned,
22
+ * like the web header's grid.
23
+ */
24
+ function CardHeader({ children, className, ...props }) {
25
+ const parts = Children.toArray(children);
26
+ const actions = parts.filter((child) => isValidElement(child) && child.type === CardAction);
27
+ if (actions.length === 0) {
28
+ return (_jsx(View, { className: cn('gap-1.5 px-6', className), ...props, children: children }));
29
+ }
30
+ return (_jsxs(View, { className: cn('flex-row items-start gap-4 px-6', className), ...props, children: [_jsx(View, { className: "flex-1 gap-1.5", children: parts.filter((child) => !actions.includes(child)) }), actions] }));
13
31
  }
14
32
  function CardRoot({ className, ...props }) {
15
- return (_jsx(View, { className: cn('border-border bg-card gap-4 rounded-xl border py-5', className), ...props }));
33
+ return (_jsx(View, { className: cn('border-border bg-card gap-4 rounded-2xl border py-6 shadow-xs shadow-black/5', className), ...props }));
16
34
  }
17
35
  function CardTitle({ className, ...props }) {
18
- return (_jsx(Text, { className: cn('text-card-foreground', className), variant: "h4", ...props }));
36
+ return (_jsx(Text, { className: cn('text-card-foreground leading-none', className), variant: "h3", ...props }));
19
37
  }
20
- // Same compound shape as `Card` in @pickle-ui/react. The parts are exported
21
- // so Fast Refresh keeps their state; the public entry only exports `Card`.
22
38
  const Card = Object.assign(CardRoot, {
39
+ Action: CardAction,
23
40
  Content: CardContent,
24
41
  Description: CardDescription,
42
+ Footer: CardFooter,
25
43
  Header: CardHeader,
26
44
  Title: CardTitle,
27
45
  });
28
- export { Card, CardContent, CardDescription, CardHeader, CardTitle };
46
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, };
29
47
  //# sourceMappingURL=Card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAQ9B,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAoB;IAC5D,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAC;AACrE,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAwB;IACpE,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,OAAO,KAAK,KAAK,GAAI,CAAC;AAChE,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAmB;IAC1D,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,KAAM,KAAK,GAAI,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAa;IAClD,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CACX,oDAAoD,EACpD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkB;IACxD,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC,EAChD,OAAO,EAAC,IAAI,KACR,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;IACnC,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,eAAe;IAC5B,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,SAAS;CACjB,CAAC,CAAC;AAEH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../src/components/Card.tsx"],"names":[],"mappings":"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"}
@@ -2,9 +2,13 @@ import { type VariantProps } from 'class-variance-authority';
2
2
  import { Text as NativeText } from 'react-native';
3
3
  declare const textVariants: (props?: ({
4
4
  tone?: "destructive" | "muted" | "primary" | null | undefined;
5
- variant?: "body" | "h1" | "h2" | "h3" | "h4" | "small" | "lead" | null | undefined;
5
+ variant?: "body" | "code" | "h1" | "h2" | "h3" | "h4" | "lead" | "small" | null | undefined;
6
+ weight?: "bold" | "normal" | null | undefined;
6
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
- export type TextProps = React.ComponentProps<typeof NativeText> & VariantProps<typeof textVariants>;
8
- export declare function Text({ className, tone, variant, ...props }: TextProps): import("react").JSX.Element;
8
+ export type TextProps = React.ComponentProps<typeof NativeText> & VariantProps<typeof textVariants> & {
9
+ /** Cuts the text to one line with an ellipsis. */
10
+ truncate?: boolean;
11
+ };
12
+ export declare function Text({ className, style, tone, truncate, variant, weight, ...props }: TextProps): import("react").JSX.Element;
9
13
  export {};
10
14
  //# sourceMappingURL=Text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAKlD,QAAA,MAAM,YAAY;;;8EAkBhB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,GAC7D,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AAEpC,wBAAgB,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,+BAOrE"}
1
+ {"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAwB,MAAM,cAAc,CAAC;AAMxE,QAAA,MAAM,YAAY;;;;8EAuBhB,CAAC;AAUH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,GAC7D,YAAY,CAAC,OAAO,YAAY,CAAC,GAAG;IAClC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEJ,wBAAgB,IAAI,CAAC,EACnB,SAAS,EACT,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAgB,EAChB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,SAAS,+BAYX"}
@@ -1,8 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cva } from 'class-variance-authority';
3
- import { Text as NativeText } from 'react-native';
3
+ import { Text as NativeText, Platform, StyleSheet } from 'react-native';
4
4
  import { cn } from '../lib/cn';
5
- // Same variant and tone names as `Text` in @pickle-ui/react.
5
+ // Same variants, tones and weights as `Text` in @pickle-ui/react, sized by the
6
+ // shared type scale (`@pickle-ui/tokens/typography.css`).
6
7
  const textVariants = cva('text-foreground', {
7
8
  defaultVariants: { variant: 'body' },
8
9
  variants: {
@@ -12,17 +13,28 @@ const textVariants = cva('text-foreground', {
12
13
  primary: 'text-primary',
13
14
  },
14
15
  variant: {
15
- body: 'text-sm',
16
- h1: 'text-3xl font-semibold tracking-tight',
17
- h2: 'text-2xl font-semibold tracking-tight',
18
- h3: 'text-xl font-semibold',
19
- h4: 'text-lg font-medium',
20
- lead: 'text-base',
21
- small: 'text-xs',
16
+ body: 'text-body',
17
+ code: 'text-code bg-muted self-start overflow-hidden rounded px-2 py-1',
18
+ h1: 'text-h1 font-semibold tracking-tight',
19
+ h2: 'text-h2 font-semibold tracking-tight',
20
+ h3: 'text-h3 font-semibold',
21
+ h4: 'text-h4 font-medium',
22
+ lead: 'text-lead',
23
+ small: 'text-small',
24
+ },
25
+ weight: {
26
+ bold: 'font-semibold',
27
+ normal: 'font-normal',
22
28
  },
23
29
  },
24
30
  });
25
- export function Text({ className, tone, variant, ...props }) {
26
- return (_jsx(NativeText, { className: cn(textVariants({ tone, variant }), className), ...props }));
31
+ const HEADINGS = new Set(['h1', 'h2', 'h3', 'h4']);
32
+ // Uniwind passes `font-mono`'s web font stack through as is, which native
33
+ // fonts don't resolve, so `code` names each platform's monospace font.
34
+ const styles = StyleSheet.create({
35
+ code: { fontFamily: Platform.select({ default: 'monospace', ios: 'Menlo' }) },
36
+ });
37
+ export function Text({ className, style, tone, truncate, variant = 'body', weight, ...props }) {
38
+ return (_jsx(NativeText, { accessibilityRole: variant && HEADINGS.has(variant) ? 'header' : undefined, className: cn(textVariants({ tone, variant, weight }), className), numberOfLines: truncate ? 1 : undefined, style: variant === 'code' ? [styles.code, style] : style, ...props }));
27
39
  }
28
40
  //# sourceMappingURL=Text.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,6DAA6D;AAC7D,MAAM,YAAY,GAAG,GAAG,CAAC,iBAAiB,EAAE;IAC1C,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IACpC,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,WAAW,EAAE,kBAAkB;YAC/B,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,cAAc;SACxB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,uCAAuC;YAC3C,EAAE,EAAE,uCAAuC;YAC3C,EAAE,EAAE,uBAAuB;YAC3B,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,SAAS;SACjB;KACF;CACF,CAAC,CAAC;AAKH,MAAM,UAAU,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAa;IACpE,OAAO,CACL,KAAC,UAAU,IACT,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Text.js","sourceRoot":"","sources":["../../src/components/Text.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,+EAA+E;AAC/E,0DAA0D;AAC1D,MAAM,YAAY,GAAG,GAAG,CAAC,iBAAiB,EAAE;IAC1C,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IACpC,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,WAAW,EAAE,kBAAkB;YAC/B,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,cAAc;SACxB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,iEAAiE;YACvE,EAAE,EAAE,sCAAsC;YAC1C,EAAE,EAAE,sCAAsC;YAC1C,EAAE,EAAE,uBAAuB;YAC3B,EAAE,EAAE,qBAAqB;YACzB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;SACpB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,aAAa;SACtB;KACF;CACF,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAEnD,0EAA0E;AAC1E,uEAAuE;AACvE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE;CAC9E,CAAC,CAAC;AAQH,MAAM,UAAU,IAAI,CAAC,EACnB,SAAS,EACT,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,GAAG,MAAM,EAChB,MAAM,EACN,GAAG,KAAK,EACE;IACV,OAAO,CACL,KAAC,UAAU,IACT,iBAAiB,EACf,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAEzD,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,EACjE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACvC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KACpD,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The web `Spinner`'s look on native: a three-quarter ring turning once a
3
+ * second. Color it with a `border-*` class. Decorative: the control showing
4
+ * it reports the busy state.
5
+ */
6
+ export declare function Spinner({ className }: {
7
+ className?: string;
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../src/components/_internal/Spinner.tsx"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAsC5D"}