@pickle-ui/react-native 0.0.0-stage → 0.0.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 (80) hide show
  1. package/README.md +92 -2
  2. package/dist/components/Badge.d.ts +11 -0
  3. package/dist/components/Badge.d.ts.map +1 -0
  4. package/dist/components/Badge.js +33 -0
  5. package/dist/components/Badge.js.map +1 -0
  6. package/dist/components/Button.d.ts +13 -0
  7. package/dist/components/Button.d.ts.map +1 -0
  8. package/dist/components/Button.js +39 -0
  9. package/dist/components/Button.js.map +1 -0
  10. package/dist/components/Card.d.ts +20 -0
  11. package/dist/components/Card.d.ts.map +1 -0
  12. package/dist/components/Card.js +29 -0
  13. package/dist/components/Card.js.map +1 -0
  14. package/dist/components/Text.d.ts +10 -0
  15. package/dist/components/Text.d.ts.map +1 -0
  16. package/dist/components/Text.js +28 -0
  17. package/dist/components/Text.js.map +1 -0
  18. package/dist/entries/badge.d.ts +3 -0
  19. package/dist/entries/badge.d.ts.map +1 -0
  20. package/dist/entries/badge.js +2 -0
  21. package/dist/entries/badge.js.map +1 -0
  22. package/dist/entries/button.d.ts +3 -0
  23. package/dist/entries/button.d.ts.map +1 -0
  24. package/dist/entries/button.js +2 -0
  25. package/dist/entries/button.js.map +1 -0
  26. package/dist/entries/card.d.ts +3 -0
  27. package/dist/entries/card.d.ts.map +1 -0
  28. package/dist/entries/card.js +2 -0
  29. package/dist/entries/card.js.map +1 -0
  30. package/dist/entries/cn.d.ts +2 -0
  31. package/dist/entries/cn.d.ts.map +1 -0
  32. package/dist/entries/cn.js +2 -0
  33. package/dist/entries/cn.js.map +1 -0
  34. package/dist/entries/text.d.ts +3 -0
  35. package/dist/entries/text.d.ts.map +1 -0
  36. package/dist/entries/text.js +2 -0
  37. package/dist/entries/text.js.map +1 -0
  38. package/dist/entries/use-color-token.d.ts +2 -0
  39. package/dist/entries/use-color-token.d.ts.map +1 -0
  40. package/dist/entries/use-color-token.js +2 -0
  41. package/dist/entries/use-color-token.js.map +1 -0
  42. package/dist/hooks/useColorToken.d.ts +9 -0
  43. package/dist/hooks/useColorToken.d.ts.map +1 -0
  44. package/dist/hooks/useColorToken.js +13 -0
  45. package/dist/hooks/useColorToken.js.map +1 -0
  46. package/dist/index.d.ts +7 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +9 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/lib/cn.d.ts +3 -0
  51. package/dist/lib/cn.d.ts.map +1 -0
  52. package/dist/lib/cn.js +6 -0
  53. package/dist/lib/cn.js.map +1 -0
  54. package/package.json +91 -3
  55. package/src/base.css +6 -0
  56. package/src/components/Badge.stories.tsx +47 -0
  57. package/src/components/Badge.test.tsx +11 -0
  58. package/src/components/Badge.tsx +42 -0
  59. package/src/components/Button.stories.tsx +87 -0
  60. package/src/components/Button.test.tsx +34 -0
  61. package/src/components/Button.tsx +70 -0
  62. package/src/components/Card.stories.tsx +55 -0
  63. package/src/components/Card.test.tsx +23 -0
  64. package/src/components/Card.tsx +55 -0
  65. package/src/components/Text.stories.tsx +60 -0
  66. package/src/components/Text.test.tsx +15 -0
  67. package/src/components/Text.tsx +37 -0
  68. package/src/components/_internal/Story.tsx +148 -0
  69. package/src/entries/badge.ts +2 -0
  70. package/src/entries/button.ts +2 -0
  71. package/src/entries/card.ts +8 -0
  72. package/src/entries/cn.ts +1 -0
  73. package/src/entries/text.ts +2 -0
  74. package/src/entries/use-color-token.ts +1 -0
  75. package/src/hooks/useColorToken.ts +13 -0
  76. package/src/index.ts +8 -0
  77. package/src/lib/cn.test.ts +9 -0
  78. package/src/lib/cn.ts +6 -0
  79. package/src/styles.css +12 -0
  80. package/src/uniwind-types.d.ts +10 -0
package/README.md CHANGED
@@ -1,3 +1,93 @@
1
- # Temporary Holding Version
1
+ # @pickle-ui/react-native
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Pickle UI components for React Native apps built with Expo, styled with
4
+ Pickle's tokens through [Uniwind](https://uniwind.dev). They reuse the names
5
+ of `@pickle-ui/react` (`variant`, `size`, `tone`, `Card.Header`, …) with
6
+ native sizes and React Native primitives.
7
+
8
+ Browse them in the [Storybook](https://ugogo.github.io/pickle-ui/react-native/),
9
+ rendered in the browser through react-native-web.
10
+
11
+ ## Use Pickle UI
12
+
13
+ In an Expo app, install the package with Uniwind and Tailwind:
14
+
15
+ ```bash
16
+ npx expo install @pickle-ui/react-native@beta uniwind tailwindcss
17
+ ```
18
+
19
+ Point Uniwind's Metro plugin at your stylesheet in `metro.config.js`:
20
+
21
+ ```js
22
+ const { getDefaultConfig } = require('expo/metro-config');
23
+ const { withUniwindConfig } = require('uniwind/metro');
24
+
25
+ module.exports = withUniwindConfig(getDefaultConfig(__dirname), {
26
+ cssEntryFile: './src/global.css',
27
+ dtsFile: './src/uniwind-types.d.ts',
28
+ });
29
+ ```
30
+
31
+ Import Pickle's stylesheet in `src/global.css`, and import that file once
32
+ from your root layout:
33
+
34
+ ```css
35
+ @import '@pickle-ui/react-native/styles.css';
36
+ ```
37
+
38
+ `styles.css` brings Tailwind, Uniwind, the tokens and the components' classes,
39
+ so don't import `tailwindcss` or `uniwind` again. Uniwind compiles each
40
+ imported stylesheet on its own to find themes, and the tokens only compile
41
+ after Tailwind and Uniwind, which is why they come from the same file.
42
+
43
+ To bring your own token set, import its pieces instead: `tailwindcss`,
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.
47
+
48
+ Then use the components:
49
+
50
+ ```tsx
51
+ import { Button, Card, Text } from '@pickle-ui/react-native';
52
+
53
+ export function Welcome() {
54
+ return (
55
+ <Card>
56
+ <Card.Header>
57
+ <Card.Title>Welcome</Card.Title>
58
+ <Card.Description>Pickle UI on iOS and Android.</Card.Description>
59
+ </Card.Header>
60
+ <Card.Content>
61
+ <Button onPress={() => {}}>Get started</Button>
62
+ </Card.Content>
63
+ </Card>
64
+ );
65
+ }
66
+ ```
67
+
68
+ [`examples/mobile`](../../examples/mobile) is a complete app with the setup
69
+ steps, token overrides and runtime brand colors.
70
+
71
+ ## Exports
72
+
73
+ Each export is also available from its own subpath.
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` |
83
+
84
+ Every component takes the props of the React Native element it renders,
85
+ `className` included, and merges your `className` last.
86
+
87
+ ## Theming
88
+
89
+ The tokens are Uniwind themes. Override them in `global.css` inside
90
+ `@variant light` and `@variant dark` blocks, declaring each variable in both
91
+ themes, or at runtime with Uniwind's `ScopedVariables` and
92
+ `Uniwind.updateCSSVariables`. See the
93
+ [`@pickle-ui/tokens` README](../tokens/README.md#react-native).
@@ -0,0 +1,11 @@
1
+ import { type VariantProps } from 'class-variance-authority';
2
+ import { View } from 'react-native';
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "inProgress" | "inReview" | "secondary" | "success" | null | undefined;
5
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
+ export type BadgeProps = React.ComponentProps<typeof View> & VariantProps<typeof badgeVariants> & {
7
+ children: string;
8
+ };
9
+ export declare function Badge({ children, className, variant, ...props }: BadgeProps): import("react").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=Badge.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cva } from 'class-variance-authority';
3
+ import { Text, View } from 'react-native';
4
+ 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' },
8
+ variants: {
9
+ variant: {
10
+ default: 'bg-primary',
11
+ inProgress: 'bg-info-subtle',
12
+ inReview: 'bg-warning-subtle',
13
+ secondary: 'bg-secondary',
14
+ success: 'bg-success-subtle',
15
+ },
16
+ },
17
+ });
18
+ const labelVariants = cva('text-xs font-medium', {
19
+ defaultVariants: { variant: 'default' },
20
+ variants: {
21
+ variant: {
22
+ default: 'text-primary-foreground',
23
+ inProgress: 'text-info-subtle-foreground',
24
+ inReview: 'text-warning-subtle-foreground',
25
+ secondary: 'text-secondary-foreground',
26
+ success: 'text-success-subtle-foreground',
27
+ },
28
+ },
29
+ });
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 }) }));
32
+ }
33
+ //# sourceMappingURL=Badge.js.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ import { type VariantProps } from 'class-variance-authority';
2
+ import { Pressable } from 'react-native';
3
+ declare const buttonVariants: (props?: ({
4
+ size?: "md" | "lg" | "sm" | null | undefined;
5
+ variant?: "default" | "secondary" | "destructive" | "ghost" | "outline" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export type ButtonProps = Omit<React.ComponentProps<typeof Pressable>, 'children'> & VariantProps<typeof buttonVariants> & {
8
+ children: string;
9
+ labelClassName?: string;
10
+ };
11
+ export declare function Button({ children, className, labelClassName, size, variant, ...props }: ButtonProps): import("react").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=Button.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cva } from 'class-variance-authority';
3
+ import { Pressable, Text } from 'react-native';
4
+ 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', {
7
+ defaultVariants: { size: 'md', variant: 'default' },
8
+ variants: {
9
+ size: {
10
+ lg: 'h-11 px-5',
11
+ md: 'h-10 px-4',
12
+ sm: 'h-8 px-3',
13
+ },
14
+ 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',
20
+ },
21
+ },
22
+ });
23
+ const labelVariants = cva('font-medium', {
24
+ defaultVariants: { size: 'md', variant: 'default' },
25
+ variants: {
26
+ size: { lg: 'text-base', md: 'text-sm', sm: 'text-xs' },
27
+ variant: {
28
+ default: 'text-primary-foreground',
29
+ destructive: 'text-destructive-foreground',
30
+ ghost: 'text-foreground',
31
+ outline: 'text-foreground',
32
+ secondary: 'text-secondary-foreground',
33
+ },
34
+ },
35
+ });
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 }) }));
38
+ }
39
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +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"}
@@ -0,0 +1,20 @@
1
+ import { View } from 'react-native';
2
+ import { Text } from './Text';
3
+ export type CardContentProps = React.ComponentProps<typeof View>;
4
+ export type CardDescriptionProps = React.ComponentProps<typeof Text>;
5
+ export type CardHeaderProps = React.ComponentProps<typeof View>;
6
+ export type CardProps = React.ComponentProps<typeof View>;
7
+ export type CardTitleProps = React.ComponentProps<typeof Text>;
8
+ declare function CardContent({ className, ...props }: CardContentProps): import("react").JSX.Element;
9
+ declare function CardDescription({ className, ...props }: CardDescriptionProps): import("react").JSX.Element;
10
+ declare function CardHeader({ className, ...props }: CardHeaderProps): import("react").JSX.Element;
11
+ declare function CardRoot({ className, ...props }: CardProps): import("react").JSX.Element;
12
+ declare function CardTitle({ className, ...props }: CardTitleProps): import("react").JSX.Element;
13
+ declare const Card: typeof CardRoot & {
14
+ Content: typeof CardContent;
15
+ Description: typeof CardDescription;
16
+ Header: typeof CardHeader;
17
+ Title: typeof CardTitle;
18
+ };
19
+ export { Card, CardContent, CardDescription, CardHeader, CardTitle };
20
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { View } from 'react-native';
3
+ import { cn } from '../lib/cn';
4
+ import { Text } from './Text';
5
+ function CardContent({ className, ...props }) {
6
+ return _jsx(View, { className: cn('gap-3 px-5', className), ...props });
7
+ }
8
+ function CardDescription({ className, ...props }) {
9
+ return _jsx(Text, { className: className, tone: "muted", ...props });
10
+ }
11
+ function CardHeader({ className, ...props }) {
12
+ return _jsx(View, { className: cn('gap-1 px-5', className), ...props });
13
+ }
14
+ function CardRoot({ className, ...props }) {
15
+ return (_jsx(View, { className: cn('border-border bg-card gap-4 rounded-xl border py-5', className), ...props }));
16
+ }
17
+ function CardTitle({ className, ...props }) {
18
+ return (_jsx(Text, { className: cn('text-card-foreground', className), variant: "h4", ...props }));
19
+ }
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
+ const Card = Object.assign(CardRoot, {
23
+ Content: CardContent,
24
+ Description: CardDescription,
25
+ Header: CardHeader,
26
+ Title: CardTitle,
27
+ });
28
+ export { Card, CardContent, CardDescription, CardHeader, CardTitle };
29
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ import { type VariantProps } from 'class-variance-authority';
2
+ import { Text as NativeText } from 'react-native';
3
+ declare const textVariants: (props?: ({
4
+ tone?: "destructive" | "muted" | "primary" | null | undefined;
5
+ variant?: "body" | "h1" | "h2" | "h3" | "h4" | "small" | "lead" | null | undefined;
6
+ } & 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;
9
+ export {};
10
+ //# sourceMappingURL=Text.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cva } from 'class-variance-authority';
3
+ import { Text as NativeText } from 'react-native';
4
+ import { cn } from '../lib/cn';
5
+ // Same variant and tone names as `Text` in @pickle-ui/react.
6
+ const textVariants = cva('text-foreground', {
7
+ defaultVariants: { variant: 'body' },
8
+ variants: {
9
+ tone: {
10
+ destructive: 'text-destructive',
11
+ muted: 'text-muted-foreground',
12
+ primary: 'text-primary',
13
+ },
14
+ 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',
22
+ },
23
+ },
24
+ });
25
+ export function Text({ className, tone, variant, ...props }) {
26
+ return (_jsx(NativeText, { className: cn(textVariants({ tone, variant }), className), ...props }));
27
+ }
28
+ //# sourceMappingURL=Text.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ export { Badge } from '../components/Badge';
2
+ export type { BadgeProps } from '../components/Badge';
3
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../src/entries/badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Badge } from '../components/Badge';
2
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["../../src/entries/badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Button } from '../components/Button';
2
+ export type { ButtonProps } from '../components/Button';
3
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/entries/button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Button } from '../components/Button';
2
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../src/entries/button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Card } from '../components/Card';
2
+ export type { CardContentProps, CardDescriptionProps, CardHeaderProps, CardProps, CardTitleProps, } from '../components/Card';
3
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/entries/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,cAAc,GACf,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Card } from '../components/Card';
2
+ //# sourceMappingURL=card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.js","sourceRoot":"","sources":["../../src/entries/card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { cn } from '../lib/cn';
2
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/entries/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { cn } from '../lib/cn';
2
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","sourceRoot":"","sources":["../../src/entries/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Text } from '../components/Text';
2
+ export type { TextProps } from '../components/Text';
3
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/entries/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Text } from '../components/Text';
2
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/entries/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useColorToken } from '../hooks/useColorToken';
2
+ //# sourceMappingURL=use-color-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-color-token.d.ts","sourceRoot":"","sources":["../../src/entries/use-color-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useColorToken } from '../hooks/useColorToken';
2
+ //# sourceMappingURL=use-color-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-color-token.js","sourceRoot":"","sources":["../../src/entries/use-color-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Reads a token as a color string, for props that take a color instead of a
3
+ * className (navigation options, `Switch`, `placeholderTextColor`).
4
+ * `useColorToken('primary')` returns the value behind `bg-primary`, or
5
+ * `undefined` when the token doesn't exist, so a typo never turns into the
6
+ * color `"undefined"`.
7
+ */
8
+ export declare function useColorToken(name: string): string | undefined;
9
+ //# sourceMappingURL=useColorToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColorToken.d.ts","sourceRoot":"","sources":["../../src/hooks/useColorToken.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9D"}
@@ -0,0 +1,13 @@
1
+ import { useCSSVariable } from 'uniwind';
2
+ /**
3
+ * Reads a token as a color string, for props that take a color instead of a
4
+ * className (navigation options, `Switch`, `placeholderTextColor`).
5
+ * `useColorToken('primary')` returns the value behind `bg-primary`, or
6
+ * `undefined` when the token doesn't exist, so a typo never turns into the
7
+ * color `"undefined"`.
8
+ */
9
+ export function useColorToken(name) {
10
+ const value = useCSSVariable(`--${name}`);
11
+ return typeof value === 'string' ? value : undefined;
12
+ }
13
+ //# sourceMappingURL=useColorToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColorToken.js","sourceRoot":"","sources":["../../src/hooks/useColorToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './entries/badge';
2
+ export * from './entries/button';
3
+ export * from './entries/card';
4
+ export * from './entries/cn';
5
+ export * from './entries/text';
6
+ export * from './entries/use-color-token';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ // The public API is the union of the subpath entries in ./entries: add a
2
+ // component there and re-export it here (see "Public API" in AGENTS.md).
3
+ export * from './entries/badge';
4
+ export * from './entries/button';
5
+ export * from './entries/card';
6
+ export * from './entries/cn';
7
+ export * from './entries/text';
8
+ export * from './entries/use-color-token';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AACzE,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Joins class names; later classes win, like `@pickle-ui/react/cn`. */
2
+ export declare function cn(...classes: Array<false | null | string | undefined>): string;
3
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/lib/cn.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,UAEtE"}
package/dist/lib/cn.js ADDED
@@ -0,0 +1,6 @@
1
+ import { twMerge } from 'tailwind-merge';
2
+ /** Joins class names; later classes win, like `@pickle-ui/react/cn`. */
3
+ export function cn(...classes) {
4
+ return twMerge(classes.filter(Boolean).join(' '));
5
+ }
6
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","sourceRoot":"","sources":["../../src/lib/cn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,wEAAwE;AACxE,MAAM,UAAU,EAAE,CAAC,GAAG,OAAiD;IACrE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,94 @@
1
1
  {
2
2
  "name": "@pickle-ui/react-native",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "description": "React Native components for Expo, styled with Pickle UI's tokens through Uniwind.",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "sideEffects": [
9
+ "**/*.css"
10
+ ],
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/ugogo/pickle-ui.git",
14
+ "directory": "packages/react-native"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "exports": {
20
+ ".": {
21
+ "@pickle-ui/source": "./src/index.ts",
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "./styles.css": "./src/styles.css",
27
+ "./base.css": "./src/base.css",
28
+ "./*": {
29
+ "@pickle-ui/source": "./src/entries/*.ts",
30
+ "types": "./dist/entries/*.d.ts",
31
+ "import": "./dist/entries/*.js",
32
+ "default": "./dist/entries/*.js"
33
+ }
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "src"
38
+ ],
39
+ "keywords": [
40
+ "react-native",
41
+ "expo",
42
+ "components",
43
+ "ui",
44
+ "tailwind",
45
+ "uniwind"
46
+ ],
47
+ "author": "Ugo Onali",
48
+ "license": "MIT",
49
+ "dependencies": {
50
+ "class-variance-authority": "^0.7.1",
51
+ "tailwind-merge": "^3.6.0",
52
+ "@pickle-ui/tokens": "1.0.0-beta.6"
53
+ },
54
+ "devDependencies": {
55
+ "@react-native/jest-preset": "^0.88.1",
56
+ "@storybook/addon-docs": "^10.6.3",
57
+ "@storybook/react-native-web-vite": "^10.6.5",
58
+ "@tailwindcss/vite": "^4.3.3",
59
+ "@testing-library/react-native": "^14.1.0",
60
+ "@types/jest": "^30.0.0",
61
+ "@types/react": "^19.3.0",
62
+ "babel-preset-expo": "^58.0.21",
63
+ "expo": "^58.0.20",
64
+ "jest": "^30.5.2",
65
+ "jest-expo": "~58.0.12",
66
+ "react": "19.3.0",
67
+ "react-doctor": "^0.5.6",
68
+ "react-dom": "19.3.0",
69
+ "react-native": "0.88.0",
70
+ "react-native-web": "^0.21.4",
71
+ "storybook": "^10.6.3",
72
+ "tailwindcss": "^4.3.3",
73
+ "test-renderer": "^1.3.1",
74
+ "typescript": "^6.0.3",
75
+ "uniwind": "^1.13.0",
76
+ "vite": "^8.3.5"
77
+ },
78
+ "peerDependencies": {
79
+ "react": "^19.0.0",
80
+ "react-native": "*",
81
+ "tailwindcss": "^4.0.0",
82
+ "uniwind": "^1.13.0"
83
+ },
84
+ "scripts": {
85
+ "dev": "storybook dev -p 6007",
86
+ "clean": "node -e \"require('node:fs').rmSync('dist', { force: true, recursive: true })\"",
87
+ "build": "pnpm run clean && tsc -p tsconfig.build.json",
88
+ "typecheck": "tsc --noEmit",
89
+ "storybook": "storybook dev -p 6007",
90
+ "build-storybook": "storybook build",
91
+ "test": "jest",
92
+ "doctor": "react-doctor"
93
+ }
6
94
  }
package/src/base.css ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Pickle's components as a content source, so Uniwind generates the classes
3
+ * they use. `styles.css` imports it; import it alone, after `uniwind`, to
4
+ * bring your own token set instead of `@pickle-ui/tokens/native.css`.
5
+ */
6
+ @source './components/**/*.{ts,tsx}';