@react-native-reusables/cli 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/__generated/components/ui/accordion.tsx +29 -31
- package/__generated/components/ui/alert-dialog.tsx +18 -24
- package/__generated/components/ui/avatar.tsx +34 -41
- package/__generated/components/ui/badge.tsx +2 -2
- package/__generated/components/ui/button.tsx +2 -5
- package/__generated/components/ui/card.tsx +39 -51
- package/__generated/components/ui/checkbox.tsx +23 -24
- package/__generated/components/ui/context-menu.tsx +27 -22
- package/__generated/components/ui/dialog.tsx +39 -41
- package/__generated/components/ui/dropdown-menu.tsx +26 -21
- package/__generated/components/ui/hover-card.tsx +2 -2
- package/__generated/components/ui/input.tsx +17 -18
- package/__generated/components/ui/label.tsx +20 -21
- package/__generated/components/ui/menubar.tsx +44 -46
- package/__generated/components/ui/navigation-menu.tsx +13 -13
- package/__generated/components/ui/popover.tsx +4 -4
- package/__generated/components/ui/progress.tsx +3 -3
- package/__generated/components/ui/radio-group.tsx +27 -29
- package/__generated/components/ui/select.tsx +63 -74
- package/__generated/components/ui/separator.tsx +16 -17
- package/__generated/components/ui/switch.tsx +58 -59
- package/__generated/components/ui/table.tsx +69 -76
- package/__generated/components/ui/tabs.tsx +49 -52
- package/__generated/components/ui/textarea.tsx +20 -21
- package/__generated/components/ui/toggle-group.tsx +4 -6
- package/__generated/components/ui/toggle.tsx +4 -4
- package/__generated/components/ui/tooltip.tsx +4 -4
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,65 +1,62 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { TextClassContext } from './text';
|
|
3
1
|
import * as TabsPrimitive from '@rn-primitives/tabs';
|
|
2
|
+
import * as React from 'react';
|
|
4
3
|
import { cn } from '../../lib/utils';
|
|
4
|
+
import { TextClassContext } from './text';
|
|
5
5
|
|
|
6
6
|
const Tabs = TabsPrimitive.Root;
|
|
7
7
|
|
|
8
|
-
const TabsList = React.forwardRef<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
));
|
|
8
|
+
const TabsList = React.forwardRef<TabsPrimitive.ListRef, TabsPrimitive.ListProps>(
|
|
9
|
+
({ className, ...props }, ref) => (
|
|
10
|
+
<TabsPrimitive.List
|
|
11
|
+
ref={ref}
|
|
12
|
+
className={cn(
|
|
13
|
+
'web:inline-flex h-10 native:h-12 items-center justify-center rounded-md bg-muted p-1 native:px-1.5',
|
|
14
|
+
className
|
|
15
|
+
)}
|
|
16
|
+
{...props}
|
|
17
|
+
/>
|
|
18
|
+
)
|
|
19
|
+
);
|
|
21
20
|
TabsList.displayName = TabsPrimitive.List.displayName;
|
|
22
21
|
|
|
23
|
-
const TabsTrigger = React.forwardRef<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
'text-sm native:text-base font-medium text-muted-foreground web:transition-all',
|
|
32
|
-
value === props.value && 'text-foreground'
|
|
33
|
-
)}
|
|
34
|
-
>
|
|
35
|
-
<TabsPrimitive.Trigger
|
|
36
|
-
ref={ref}
|
|
37
|
-
className={cn(
|
|
38
|
-
'inline-flex items-center justify-center shadow-none web:whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium web:ring-offset-background web:transition-all web:focus-visible:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2',
|
|
39
|
-
props.disabled && 'web:pointer-events-none opacity-50',
|
|
40
|
-
props.value === value && 'bg-background shadow-lg shadow-foreground/10',
|
|
41
|
-
className
|
|
22
|
+
const TabsTrigger = React.forwardRef<TabsPrimitive.TriggerRef, TabsPrimitive.TriggerProps>(
|
|
23
|
+
({ className, ...props }, ref) => {
|
|
24
|
+
const { value } = TabsPrimitive.useRootContext();
|
|
25
|
+
return (
|
|
26
|
+
<TextClassContext.Provider
|
|
27
|
+
value={cn(
|
|
28
|
+
'text-sm native:text-base font-medium text-muted-foreground web:transition-all',
|
|
29
|
+
value === props.value && 'text-foreground'
|
|
42
30
|
)}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
31
|
+
>
|
|
32
|
+
<TabsPrimitive.Trigger
|
|
33
|
+
ref={ref}
|
|
34
|
+
className={cn(
|
|
35
|
+
'inline-flex items-center justify-center shadow-none web:whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium web:ring-offset-background web:transition-all web:focus-visible:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2',
|
|
36
|
+
props.disabled && 'web:pointer-events-none opacity-50',
|
|
37
|
+
props.value === value && 'bg-background shadow-lg shadow-foreground/10',
|
|
38
|
+
className
|
|
39
|
+
)}
|
|
40
|
+
{...props}
|
|
41
|
+
/>
|
|
42
|
+
</TextClassContext.Provider>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
);
|
|
48
46
|
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
|
|
49
47
|
|
|
50
|
-
const TabsContent = React.forwardRef<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
));
|
|
48
|
+
const TabsContent = React.forwardRef<TabsPrimitive.ContentRef, TabsPrimitive.ContentProps>(
|
|
49
|
+
({ className, ...props }, ref) => (
|
|
50
|
+
<TabsPrimitive.Content
|
|
51
|
+
ref={ref}
|
|
52
|
+
className={cn(
|
|
53
|
+
'web:ring-offset-background web:focus-visible:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2',
|
|
54
|
+
className
|
|
55
|
+
)}
|
|
56
|
+
{...props}
|
|
57
|
+
/>
|
|
58
|
+
)
|
|
59
|
+
);
|
|
63
60
|
TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
64
61
|
|
|
65
62
|
export { Tabs, TabsContent, TabsList, TabsTrigger };
|
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { TextInput } from 'react-native';
|
|
2
|
+
import { TextInput, type TextInputProps } from 'react-native';
|
|
3
3
|
import { cn } from '../../lib/utils';
|
|
4
4
|
|
|
5
|
-
const Textarea = React.forwardRef<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
5
|
+
const Textarea = React.forwardRef<React.ElementRef<typeof TextInput>, TextInputProps>(
|
|
6
|
+
({ className, multiline = true, numberOfLines = 4, placeholderClassName, ...props }, ref) => {
|
|
7
|
+
return (
|
|
8
|
+
<TextInput
|
|
9
|
+
ref={ref}
|
|
10
|
+
className={cn(
|
|
11
|
+
'web:flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base lg:text-sm native:text-lg native:leading-[1.25] text-foreground web:ring-offset-background placeholder:text-muted-foreground web:focus-visible:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2',
|
|
12
|
+
props.editable === false && 'opacity-50 web:cursor-not-allowed',
|
|
13
|
+
className
|
|
14
|
+
)}
|
|
15
|
+
placeholderClassName={cn('text-muted-foreground', placeholderClassName)}
|
|
16
|
+
multiline={multiline}
|
|
17
|
+
numberOfLines={numberOfLines}
|
|
18
|
+
textAlignVertical='top'
|
|
19
|
+
{...props}
|
|
20
|
+
/>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
);
|
|
25
24
|
|
|
26
25
|
Textarea.displayName = 'Textarea';
|
|
27
26
|
|
|
@@ -9,9 +9,8 @@ import { cn } from '../../lib/utils';
|
|
|
9
9
|
const ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants> | null>(null);
|
|
10
10
|
|
|
11
11
|
const ToggleGroup = React.forwardRef<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
VariantProps<typeof toggleVariants>
|
|
12
|
+
ToggleGroupPrimitive.RootRef,
|
|
13
|
+
ToggleGroupPrimitive.RootProps & VariantProps<typeof toggleVariants>
|
|
15
14
|
>(({ className, variant, size, children, ...props }, ref) => (
|
|
16
15
|
<ToggleGroupPrimitive.Root
|
|
17
16
|
ref={ref}
|
|
@@ -35,9 +34,8 @@ function useToggleGroupContext() {
|
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
const ToggleGroupItem = React.forwardRef<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
VariantProps<typeof toggleVariants>
|
|
37
|
+
ToggleGroupPrimitive.ItemRef,
|
|
38
|
+
ToggleGroupPrimitive.ItemProps & VariantProps<typeof toggleVariants>
|
|
41
39
|
>(({ className, children, variant, size, ...props }, ref) => {
|
|
42
40
|
const context = useToggleGroupContext();
|
|
43
41
|
const { value } = ToggleGroupPrimitive.useRootContext();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import * as TogglePrimitive from '@rn-primitives/toggle';
|
|
1
2
|
import { cva, type VariantProps } from 'class-variance-authority';
|
|
2
3
|
import type { LucideIcon } from 'lucide-react-native';
|
|
3
4
|
import * as React from 'react';
|
|
4
|
-
import { TextClassContext } from './text';
|
|
5
|
-
import * as TogglePrimitive from '@rn-primitives/toggle';
|
|
6
5
|
import { cn } from '../../lib/utils';
|
|
6
|
+
import { TextClassContext } from './text';
|
|
7
7
|
|
|
8
8
|
const toggleVariants = cva(
|
|
9
9
|
'web:group web:inline-flex items-center justify-center rounded-md web:ring-offset-background web:transition-colors web:hover:bg-muted active:bg-muted web:focus-visible:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2',
|
|
@@ -46,8 +46,8 @@ const toggleTextVariants = cva('text-sm native:text-base text-foreground font-me
|
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
const Toggle = React.forwardRef<
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
TogglePrimitive.RootRef,
|
|
50
|
+
TogglePrimitive.RootProps & VariantProps<typeof toggleVariants>
|
|
51
51
|
>(({ className, variant, size, ...props }, ref) => (
|
|
52
52
|
<TextClassContext.Provider
|
|
53
53
|
value={cn(
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
import * as TooltipPrimitive from '@rn-primitives/tooltip';
|
|
1
2
|
import * as React from 'react';
|
|
2
3
|
import { Platform, StyleSheet } from 'react-native';
|
|
3
4
|
import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
|
|
4
|
-
import { TextClassContext } from './text';
|
|
5
|
-
import * as TooltipPrimitive from '@rn-primitives/tooltip';
|
|
6
5
|
import { cn } from '../../lib/utils';
|
|
6
|
+
import { TextClassContext } from './text';
|
|
7
7
|
|
|
8
8
|
const Tooltip = TooltipPrimitive.Root;
|
|
9
9
|
const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
10
10
|
|
|
11
11
|
const TooltipContent = React.forwardRef<
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
TooltipPrimitive.ContentRef,
|
|
13
|
+
TooltipPrimitive.ContentProps & { portalHost?: string }
|
|
14
14
|
>(({ className, sideOffset = 4, portalHost, ...props }, ref) => (
|
|
15
15
|
<TooltipPrimitive.Portal hostName={portalHost}>
|
|
16
16
|
<TooltipPrimitive.Overlay style={Platform.OS !== 'web' ? StyleSheet.absoluteFill : undefined}>
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createMatchPath as W}from"tsconfig-paths";async function N(e,o){return W(o.absoluteBaseUrl,o.paths)(e,void 0,()=>!0,[".ts",".tsx"])}import{cosmiconfig as U}from"cosmiconfig";import{loadConfig as J}from"tsconfig-paths";import{z as d}from"zod";var E="~/components",O="~/lib",z=U("components",{searchPlaces:["components.json"]}),k=d.object({platforms:d.string().optional(),aliases:d.object({components:d.string(),lib:d.string()})}).strict(),B=k.extend({platforms:d.string().optional(),resolvedPaths:d.object({lib:d.string(),components:d.string()})});async function $(e){let o=await q(e);return o?await S(e,o):null}async function S(e,o){let n=await J(e);if(n.resultType==="failed")throw new Error(`Failed to load tsconfig.json. ${n.message??""}`.trim());return B.parse({...o,resolvedPaths:{lib:await N(o.aliases.lib,n),components:await N(o.aliases.components,n)}})}async function q(e){try{let o=await z.search(e);return o?k.parse(o.config):null}catch{throw new Error(`Invalid configuration found in ${e}/components.json.`)}}import{detect as G}from"@antfu/ni";async function j(e){let o=await G({programmatic:!0,cwd:e});return o==="yarn@berry"?"yarn":o==="pnpm@6"?"pnpm":o==="bun"?"bun":o??"npm"}import P from"chalk";var a={error(...e){console.log(P.red(...e))},warn(...e){console.log(P.yellow(...e))},info(...e){console.log(P.cyan(...e))},success(...e){console.log(P.green(...e))},break(){console.log("")}};function x(e){typeof e=="string"&&(a.error(e),process.exit(1)),e instanceof Error&&(a.error(e.message),process.exit(1)),a.error("Something went wrong. Please try again."),process.exit(1)}import u from"chalk";import{Command as V}from"commander";import{execa as X}from"execa";import{existsSync as v,promises as g}from"fs";import D from"ora";import c from"path";import w from"prompts";import{z as h}from"zod";var f=[{name:"accordion",dependencies:["text"],icons:["ChevronDown"],npmPackages:["@rn-primitives/accordion"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/accordion.tsx",to:{folder:"ui",file:"accordion.tsx"}}]},{name:"alert-dialog",dependencies:["button","text"],icons:[],npmPackages:["@rn-primitives/alert-dialog"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/alert-dialog.tsx",to:{folder:"ui",file:"alert-dialog.tsx"}}]},{name:"aspect-ratio",dependencies:[],icons:[],npmPackages:["@rn-primitives/aspect-ratio"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/aspect-ratio.tsx",to:{folder:"ui",file:"aspect-ratio.tsx"}}]},{name:"avatar",dependencies:[],icons:[],npmPackages:["@rn-primitives/avatar"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/avatar.tsx",to:{folder:"ui",file:"avatar.tsx"}}]},{name:"badge",dependencies:[],icons:[],npmPackages:["@rn-primitives/slot","@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/badge.tsx",to:{folder:"ui",file:"badge.tsx"}}]},{name:"button",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/button.tsx",to:{folder:"ui",file:"button.tsx"}}]},{name:"card",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/card.tsx",to:{folder:"ui",file:"card.tsx"}}]},{name:"checkbox",dependencies:[],icons:["Check"],npmPackages:["@rn-primitives/checkbox"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/checkbox.tsx",to:{folder:"ui",file:"checkbox.tsx"}}]},{name:"collapsible",dependencies:[],icons:[],npmPackages:["@rn-primitives/collapsible"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/collapsible.tsx",to:{folder:"ui",file:"collapsible.tsx"}}]},{name:"context-menu",dependencies:["text"],icons:["Check","ChevronDown","ChevronRight","ChevronUp"],npmPackages:["@rn-primitives/context-menu"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/context-menu.tsx",to:{folder:"ui",file:"context-menu.tsx"}}]},{name:"dialog",dependencies:[],icons:["X"],npmPackages:["@rn-primitives/dialog"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/dialog.tsx",to:{folder:"ui",file:"dialog.tsx"}}]},{name:"dropdown-menu",dependencies:["text"],icons:["Check","ChevronDown","ChevronRight","ChevronUp"],npmPackages:["@rn-primitives/dropdown-menu"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/dropdown-menu.tsx",to:{folder:"ui",file:"dropdown-menu.tsx"}}]},{name:"hover-card",dependencies:[],icons:[],npmPackages:["@rn-primitives/hover-card"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/hover-card.tsx",to:{folder:"ui",file:"hover-card.tsx"}}]},{name:"input",dependencies:[],icons:[],npmPackages:[],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/input.tsx",to:{folder:"ui",file:"input.tsx"}}]},{name:"label",dependencies:[],icons:[],npmPackages:["@rn-primitives/label"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/label.tsx",to:{folder:"ui",file:"label.tsx"}}]},{name:"menubar",dependencies:["text"],icons:["Check","ChevronDown","ChevronRight","ChevronUp"],npmPackages:["@rn-primitives/menubar"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/menubar.tsx",to:{folder:"ui",file:"menubar.tsx"}}]},{name:"navigation-menu",dependencies:[],icons:["ChevronDown"],npmPackages:["@rn-primitives/navigation-menu"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/navigation-menu.tsx",to:{folder:"ui",file:"navigation-menu.tsx"}}]},{name:"popover",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/popover"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/popover.tsx",to:{folder:"ui",file:"popover.tsx"}}]},{name:"progress",dependencies:[],icons:[],npmPackages:["@rn-primitives/progress"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/progress.tsx",to:{folder:"ui",file:"progress.tsx"}}]},{name:"radio-group",dependencies:[],icons:[],npmPackages:["@rn-primitives/radio-group"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/radio-group.tsx",to:{folder:"ui",file:"radio-group.tsx"}}]},{name:"select",dependencies:[],icons:["Check","ChevronDown","ChevronUp"],npmPackages:["@rn-primitives/select"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/select.tsx",to:{folder:"ui",file:"select.tsx"}}]},{name:"separator",dependencies:[],icons:[],npmPackages:["@rn-primitives/separator"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/separator.tsx",to:{folder:"ui",file:"separator.tsx"}}]},{name:"skeleton",dependencies:[],icons:[],npmPackages:[],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/skeleton.tsx",to:{folder:"ui",file:"skeleton.tsx"}}]},{name:"switch",dependencies:[],icons:[],npmPackages:["@rn-primitives/switch"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/switch.tsx",to:{folder:"ui",file:"switch.tsx"}}]},{name:"table",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/table"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/table.tsx",to:{folder:"ui",file:"table.tsx"}}]},{name:"tabs",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/tabs"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/tabs.tsx",to:{folder:"ui",file:"tabs.tsx"}}]},{name:"text",dependencies:[],icons:[],npmPackages:["@rn-primitives/slot","@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/text.tsx",to:{folder:"ui",file:"text.tsx"}}]},{name:"textarea",dependencies:[],icons:[],npmPackages:[],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/textarea.tsx",to:{folder:"ui",file:"textarea.tsx"}}]},{name:"toggle",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/toggle"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/toggle.tsx",to:{folder:"ui",file:"toggle.tsx"}}]},{name:"toggle-group",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/toggle-group"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/toggle-group.tsx",to:{folder:"ui",file:"toggle-group.tsx"}}]},{name:"tooltip",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/tooltip"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/tooltip.tsx",to:{folder:"ui",file:"tooltip.tsx"}}]},{name:"typography",dependencies:[],icons:[],npmPackages:["@rn-primitives/slot","@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/typography.tsx",to:{folder:"ui",file:"typography.tsx"}}]}];function T(e,o=new Set){let n=f.find(s=>s.name===e);if(!n)return[];o.add(e);let r=n.dependencies.slice();return n.dependencies.forEach(s=>{if(!o.has(s)){let t=T(s,o);r=r.concat(t)}}),r}var C="invalid component";function I(e){let o=new Set;if(e.some(n=>!f.find(r=>r.name===n)))throw new Error(C);return e.forEach(n=>{let r=T(n);r.unshift(n),r.forEach(s=>{o.add(s)})}),Array.from(o).map(n=>{let r=f.find(s=>s.name===n);if(!r)throw new Error(C);return r})}import{fileURLToPath as H}from"url";var K=H(import.meta.url),A=c.dirname(K),Q=h.object({components:h.array(h.string()).optional(),overwrite:h.boolean(),cwd:h.string(),path:h.string().optional()}),R=new V().name("add").description("add components to your project").argument("[components...]","the components to add").option("-o, --overwrite","overwrite existing files.",!1).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,o)=>{try{let n=Q.parse({components:e,...o}),r=c.resolve(n.cwd);v(r)||(a.error(`The path ${r} does not exist. Please try again.`),process.exit(1));let s=await $(r);s||(s=await Z(r));let t=n.components??[];if(!t?.length){let{components:p}=await w({type:"multiselect",name:"components",message:"Which components would you like to add?",hint:"Space to select. A to toggle all. Enter to submit.",instructions:!1,choices:f.map(y=>({title:y.name,value:y.name,selected:!1}))});t=p}t?.length||(a.warn("No components selected. Exiting."),process.exit(0));let i=D("Installing components...").start(),l=[];try{l=I(t)}catch(p){p instanceof Error&&p.message===C&&(a.error(`Invalid component(s): ${t.filter(y=>!f.find(L=>L.name===y)).join(", ")}`),process.exit(1)),a.error(p)}let m=[];for(let p of l)i.text=`Installing ${p.name}...`,Array.isArray(p.paths)?await F(p,p.paths,s,i,n.overwrite):await F(p,p.paths[s.platforms==="universal"?"universal":"native-only"],s,i,n.overwrite),m.push(...p.npmPackages);let b=await j(r),_=Array.from(new Set(m));_.length&&(i.text=`Installing ${_.join(", ")}...`,await X(b,[b==="npm"?"install":"add",..._],{cwd:r})),i.succeed("Done.")}catch(n){x(n)}});async function F(e,o,n,r,s){for(let t of o){let i=c.join(n.resolvedPaths.components,t.to.folder);if(v(i)||await g.mkdir(i,{recursive:!0}),r.stop(),v(c.join(i,t.to.file))){let m=[t.to.folder,t.to.file].join("/");if(!s){a.info(`File already exists: ${u.bgCyan(m)} was skipped. To overwrite, run with the ${u.green("--overwrite")} flag.`);continue}let{overwrite:b}=await w({type:"confirm",name:"overwrite",message:`File already exists: ${u.yellow(m)}. Would you like to overwrite?`,initial:!1});if(!b){a.info("Skipped");continue}}r.start(`Installing ${e.name}...`);let l=t.distFrom?c.join(A,"../__generated/components",t.distFrom):c.join(A,"../__generated/components",t.to.folder,t.to.file);try{let m=await g.readFile(c.resolve(l),"utf8");await g.writeFile(c.join(i,t.to.file),Y(m,n.aliases.components,n.aliases.lib))}catch(m){x(m)}}for(let t of e.icons??[]){let i=c.resolve(n.resolvedPaths.lib,"icons");if(!v(i)){await g.mkdir(i,{recursive:!0});try{await g.writeFile(c.join(i,"iconWithClassName.ts"),`import type { LucideIcon } from 'lucide-react-native';
|
|
2
|
+
import{createMatchPath as L}from"tsconfig-paths";async function N(e,o){return L(o.absoluteBaseUrl,o.paths)(e,void 0,()=>!0,[".ts",".tsx"])}import{cosmiconfig as W}from"cosmiconfig";import{loadConfig as U}from"tsconfig-paths";import{z as d}from"zod";var S="~/components",$="~/lib",J=W("components",{searchPlaces:["components.json"]}),k=d.object({aliases:d.object({components:d.string(),lib:d.string()})}),z=k.extend({resolvedPaths:d.object({lib:d.string(),components:d.string()})});async function j(e){let o=await B(e);return o?await E(e,o):null}async function E(e,o){let n=await U(e);if(n.resultType==="failed")throw new Error(`Failed to load tsconfig.json. ${n.message??""}`.trim());return z.parse({...o,resolvedPaths:{lib:await N(o.aliases.lib,n),components:await N(o.aliases.components,n)}})}async function B(e){try{let o=await J.search(e);return o?k.parse(o.config):null}catch{throw new Error(`Invalid configuration found in ${e}/components.json.`)}}import{detect as q}from"@antfu/ni";async function I(e){let o=await q({programmatic:!0,cwd:e});return o==="yarn@berry"?"yarn":o==="pnpm@6"?"pnpm":o==="bun"?"bun":o??"npm"}import C from"chalk";var a={error(...e){console.log(C.red(...e))},warn(...e){console.log(C.yellow(...e))},info(...e){console.log(C.cyan(...e))},success(...e){console.log(C.green(...e))},break(){console.log("")}};function x(e){typeof e=="string"&&(a.error(e),process.exit(1)),e instanceof Error&&(a.error(e.message),process.exit(1)),a.error("Something went wrong. Please try again."),process.exit(1)}import u from"chalk";import{Command as G}from"commander";import{execa as V}from"execa";import{existsSync as v,promises as g}from"fs";import F from"ora";import c from"path";import w from"prompts";import{z as h}from"zod";var f=[{name:"accordion",dependencies:["text"],icons:["ChevronDown"],npmPackages:["@rn-primitives/accordion"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/accordion.tsx",to:{folder:"ui",file:"accordion.tsx"}}]},{name:"alert-dialog",dependencies:["button","text"],icons:[],npmPackages:["@rn-primitives/alert-dialog"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/alert-dialog.tsx",to:{folder:"ui",file:"alert-dialog.tsx"}}]},{name:"aspect-ratio",dependencies:[],icons:[],npmPackages:["@rn-primitives/aspect-ratio"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/aspect-ratio.tsx",to:{folder:"ui",file:"aspect-ratio.tsx"}}]},{name:"avatar",dependencies:[],icons:[],npmPackages:["@rn-primitives/avatar"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/avatar.tsx",to:{folder:"ui",file:"avatar.tsx"}}]},{name:"badge",dependencies:[],icons:[],npmPackages:["@rn-primitives/slot","@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/badge.tsx",to:{folder:"ui",file:"badge.tsx"}}]},{name:"button",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/button.tsx",to:{folder:"ui",file:"button.tsx"}}]},{name:"card",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/card.tsx",to:{folder:"ui",file:"card.tsx"}}]},{name:"checkbox",dependencies:[],icons:["Check"],npmPackages:["@rn-primitives/checkbox"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/checkbox.tsx",to:{folder:"ui",file:"checkbox.tsx"}}]},{name:"collapsible",dependencies:[],icons:[],npmPackages:["@rn-primitives/collapsible"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/collapsible.tsx",to:{folder:"ui",file:"collapsible.tsx"}}]},{name:"context-menu",dependencies:["text"],icons:["Check","ChevronDown","ChevronRight","ChevronUp"],npmPackages:["@rn-primitives/context-menu"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/context-menu.tsx",to:{folder:"ui",file:"context-menu.tsx"}}]},{name:"dialog",dependencies:[],icons:["X"],npmPackages:["@rn-primitives/dialog"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/dialog.tsx",to:{folder:"ui",file:"dialog.tsx"}}]},{name:"dropdown-menu",dependencies:["text"],icons:["Check","ChevronDown","ChevronRight","ChevronUp"],npmPackages:["@rn-primitives/dropdown-menu"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/dropdown-menu.tsx",to:{folder:"ui",file:"dropdown-menu.tsx"}}]},{name:"hover-card",dependencies:[],icons:[],npmPackages:["@rn-primitives/hover-card"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/hover-card.tsx",to:{folder:"ui",file:"hover-card.tsx"}}]},{name:"input",dependencies:[],icons:[],npmPackages:[],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/input.tsx",to:{folder:"ui",file:"input.tsx"}}]},{name:"label",dependencies:[],icons:[],npmPackages:["@rn-primitives/label"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/label.tsx",to:{folder:"ui",file:"label.tsx"}}]},{name:"menubar",dependencies:["text"],icons:["Check","ChevronDown","ChevronRight","ChevronUp"],npmPackages:["@rn-primitives/menubar"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/menubar.tsx",to:{folder:"ui",file:"menubar.tsx"}}]},{name:"navigation-menu",dependencies:[],icons:["ChevronDown"],npmPackages:["@rn-primitives/navigation-menu"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/navigation-menu.tsx",to:{folder:"ui",file:"navigation-menu.tsx"}}]},{name:"popover",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/popover"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/popover.tsx",to:{folder:"ui",file:"popover.tsx"}}]},{name:"progress",dependencies:[],icons:[],npmPackages:["@rn-primitives/progress"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/progress.tsx",to:{folder:"ui",file:"progress.tsx"}}]},{name:"radio-group",dependencies:[],icons:[],npmPackages:["@rn-primitives/radio-group"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/radio-group.tsx",to:{folder:"ui",file:"radio-group.tsx"}}]},{name:"select",dependencies:[],icons:["Check","ChevronDown","ChevronUp"],npmPackages:["@rn-primitives/select"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/select.tsx",to:{folder:"ui",file:"select.tsx"}}]},{name:"separator",dependencies:[],icons:[],npmPackages:["@rn-primitives/separator"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/separator.tsx",to:{folder:"ui",file:"separator.tsx"}}]},{name:"skeleton",dependencies:[],icons:[],npmPackages:[],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/skeleton.tsx",to:{folder:"ui",file:"skeleton.tsx"}}]},{name:"switch",dependencies:[],icons:[],npmPackages:["@rn-primitives/switch"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/switch.tsx",to:{folder:"ui",file:"switch.tsx"}}]},{name:"table",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/table"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/table.tsx",to:{folder:"ui",file:"table.tsx"}}]},{name:"tabs",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/tabs"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/tabs.tsx",to:{folder:"ui",file:"tabs.tsx"}}]},{name:"text",dependencies:[],icons:[],npmPackages:["@rn-primitives/slot","@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/text.tsx",to:{folder:"ui",file:"text.tsx"}}]},{name:"textarea",dependencies:[],icons:[],npmPackages:[],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/textarea.tsx",to:{folder:"ui",file:"textarea.tsx"}}]},{name:"toggle",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/toggle"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/toggle.tsx",to:{folder:"ui",file:"toggle.tsx"}}]},{name:"toggle-group",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/toggle-group"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/toggle-group.tsx",to:{folder:"ui",file:"toggle-group.tsx"}}]},{name:"tooltip",dependencies:["text"],icons:[],npmPackages:["@rn-primitives/tooltip"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/tooltip.tsx",to:{folder:"ui",file:"tooltip.tsx"}}]},{name:"typography",dependencies:[],icons:[],npmPackages:["@rn-primitives/slot","@rn-primitives/types"],paths:[{from:"./node_modules/@rnr/reusables/src/components/ui/typography.tsx",to:{folder:"ui",file:"typography.tsx"}}]}];function O(e,o=new Set){let n=f.find(i=>i.name===e);if(!n)return[];o.add(e);let r=n.dependencies.slice();return n.dependencies.forEach(i=>{if(!o.has(i)){let t=O(i,o);r=r.concat(t)}}),r}var P="invalid component";function T(e){let o=new Set;if(e.some(n=>!f.find(r=>r.name===n)))throw new Error(P);return e.forEach(n=>{let r=O(n);r.unshift(n),r.forEach(i=>{o.add(i)})}),Array.from(o).map(n=>{let r=f.find(i=>i.name===n);if(!r)throw new Error(P);return r})}import{fileURLToPath as X}from"url";var H=X(import.meta.url),D=c.dirname(H),K=h.object({components:h.array(h.string()).optional(),overwrite:h.boolean(),cwd:h.string(),path:h.string().optional()}),R=new G().name("add").description("add components to your project").argument("[components...]","the components to add").option("-o, --overwrite","overwrite existing files.",!1).option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).action(async(e,o)=>{try{let n=K.parse({components:e,...o}),r=c.resolve(n.cwd);v(r)||(a.error(`The path ${r} does not exist. Please try again.`),process.exit(1));let i=await j(r);i||(i=await Z(r));let t=n.components??[];if(!t?.length){let{components:l}=await w({type:"multiselect",name:"components",message:"Which components would you like to add?",hint:"Space to select. A to toggle all. Enter to submit.",instructions:!1,choices:f.map(y=>({title:y.name,value:y.name,selected:!1}))});t=l}t?.length||(a.warn("No components selected. Exiting."),process.exit(0));let s=F("Installing components...").start(),m=[];try{m=T(t)}catch(l){l instanceof Error&&l.message===P&&(a.error(`Invalid component(s): ${t.filter(y=>!f.find(M=>M.name===y)).join(", ")}`),process.exit(1)),a.error(l)}let p=[];for(let l of m)s.text=`Installing ${l.name}...`,await Q(l,l.paths,i,s,n.overwrite),p.push(...l.npmPackages);let b=await I(r),_=Array.from(new Set(p));_.length&&(s.text=`Installing ${_.join(", ")}...`,await V(b,[b==="npm"?"install":"add",..._],{cwd:r})),s.succeed("Done.")}catch(n){x(n)}});async function Q(e,o,n,r,i){for(let t of o){let s=c.join(n.resolvedPaths.components,t.to.folder);if(v(s)||await g.mkdir(s,{recursive:!0}),r.stop(),v(c.join(s,t.to.file))){let p=[t.to.folder,t.to.file].join("/");if(!i){a.info(`File already exists: ${u.bgCyan(p)} was skipped. To overwrite, run with the ${u.green("--overwrite")} flag.`);continue}let{overwrite:b}=await w({type:"confirm",name:"overwrite",message:`File already exists: ${u.yellow(p)}. Would you like to overwrite?`,initial:!1});if(!b){a.info("Skipped");continue}}r.start(`Installing ${e.name}...`);let m=t.distFrom?c.join(D,"../__generated/components",t.distFrom):c.join(D,"../__generated/components",t.to.folder,t.to.file);try{let p=await g.readFile(c.resolve(m),"utf8");await g.writeFile(c.join(s,t.to.file),Y(p,n.aliases.components,n.aliases.lib))}catch(p){x(p)}}for(let t of e.icons??[]){let s=c.resolve(n.resolvedPaths.lib,"icons");if(!v(s)){await g.mkdir(s,{recursive:!0});try{await g.writeFile(c.join(s,"iconWithClassName.ts"),`import type { LucideIcon } from 'lucide-react-native';
|
|
3
3
|
import { cssInterop } from 'nativewind';
|
|
4
4
|
|
|
5
5
|
export function iconWithClassName(icon: LucideIcon) {
|
|
@@ -12,8 +12,8 @@ cssInterop(icon, {
|
|
|
12
12
|
},
|
|
13
13
|
},
|
|
14
14
|
});
|
|
15
|
-
}`)}catch(
|
|
15
|
+
}`)}catch(m){x(m)}}if(v(c.join(s,`${t}.tsx`))){let m=c.join(s,`${t}.tsx`);if(!i){a.info(`File already exists: ${u.bgCyan(`${t}.tsx`)} was skipped. To overwrite, run with the ${u.green("--overwrite")} flag.`);continue}let{overwrite:p}=await w({type:"confirm",name:"overwrite",message:`File already exists: ${u.yellow(m)}. Would you like to overwrite?`,initial:!1});if(!p){a.info(`Skipped ${t}.tsx`);continue}}r.start(`Adding the ${t} icon...`);try{await g.writeFile(c.join(s,`${t}.tsx`),`import { ${t} } from 'lucide-react-native';
|
|
16
16
|
import { iconWithClassName } from './iconWithClassName';
|
|
17
17
|
iconWithClassName(${t});
|
|
18
|
-
export { ${t} };`)}catch(
|
|
18
|
+
export { ${t} };`)}catch(m){x(m)}}}function Y(e,o,n){return e.replace("./typography",`${o}/ui/typography`).replace("./text",`${o}/ui/text`).replaceAll("../../components",o).replaceAll("../../lib",n)}async function Z(e){let o=t=>u.cyan(t),n=await w([{type:"text",name:"components",message:`Configure the import alias for ${o("components")}:`,initial:S},{type:"text",name:"lib",message:`Configure the import alias for ${o("lib")}:`,initial:$}]),r=k.parse({aliases:{lib:n.lib,components:n.components}}),{proceed:i}=await w({type:"confirm",name:"proceed",message:`Write configuration to ${o("components.json")}. Proceed?`,initial:!0});if(i){a.info("");let t=F("Writing components.json...").start(),s=c.resolve(e,"components.json");await g.writeFile(s,JSON.stringify(r,null,2),"utf8"),t.succeed()}return await E(e,r)}import{Command as ne}from"commander";import ee from"path";import oe from"fs-extra";function A(){let e=ee.join("package.json");return oe.readJSONSync(e)}process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function te(){let e=await A(),o=new ne().name("rnr-cli").description("add components and dependencies to your project").version(e.version||"0.0.0-rc.0","-v, --version","display the version number");o.addCommand(R),o.parse()}te();
|
|
19
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/resolve-import.ts","../src/utils/get-config.ts","../src/utils/get-package-manager.ts","../src/utils/logger.ts","../src/utils/handle-error.ts","../src/commands/add.ts","../src/items/components.ts","../src/items/index.ts","../src/index.ts","../src/utils/get-package-info.ts"],"sourcesContent":["import { createMatchPath, type ConfigLoaderSuccessResult } from \"tsconfig-paths\"\n\nexport async function resolveImport(\n importPath: string,\n config: Pick<ConfigLoaderSuccessResult, \"absoluteBaseUrl\" | \"paths\">\n) {\n return createMatchPath(config.absoluteBaseUrl, config.paths)(\n importPath,\n undefined,\n () => true,\n [\".ts\", \".tsx\"]\n )\n}\n","import { resolveImport } from '@/src/utils/resolve-import';\nimport { cosmiconfig } from 'cosmiconfig';\nimport { loadConfig } from 'tsconfig-paths';\nimport { z } from 'zod';\n\nexport const DEFAULT_PLATFORMS = 'universal';\nexport const DEFAULT_COMPONENTS = '~/components';\nexport const DEFAULT_LIB = '~/lib';\n\nconst explorer = cosmiconfig('components', {\n searchPlaces: ['components.json'],\n});\n\nexport const rawConfigSchema = z\n .object({\n platforms: z.string().optional(),\n aliases: z.object({\n components: z.string(),\n lib: z.string(),\n }),\n })\n .strict();\n\nexport type RawConfig = z.infer<typeof rawConfigSchema>;\n\nexport const configSchema = rawConfigSchema.extend({\n platforms: z.string().optional(),\n resolvedPaths: z.object({\n lib: z.string(),\n components: z.string(),\n }),\n});\n\nexport type Config = z.infer<typeof configSchema>;\n\nexport async function getConfig(cwd: string) {\n const config = await getRawConfig(cwd);\n\n if (!config) {\n return null;\n }\n\n return await resolveConfigPaths(cwd, config);\n}\n\nexport async function resolveConfigPaths(cwd: string, config: RawConfig) {\n // Read tsconfig.json.\n const tsConfig = await loadConfig(cwd);\n\n if (tsConfig.resultType === 'failed') {\n throw new Error(`Failed to load tsconfig.json. ${tsConfig.message ?? ''}`.trim());\n }\n\n return configSchema.parse({\n ...config,\n resolvedPaths: {\n lib: await resolveImport(config.aliases['lib'], tsConfig),\n components: await resolveImport(config.aliases['components'], tsConfig),\n },\n });\n}\n\nexport async function getRawConfig(cwd: string): Promise<RawConfig | null> {\n try {\n const configResult = await explorer.search(cwd);\n\n if (!configResult) {\n return null;\n }\n\n return rawConfigSchema.parse(configResult.config);\n } catch (error) {\n throw new Error(`Invalid configuration found in ${cwd}/components.json.`);\n }\n}\n","import { detect } from '@antfu/ni';\n\nexport async function getPackageManager(\n targetDir: string\n): Promise<'yarn' | 'pnpm' | 'bun' | 'npm'> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir });\n\n if (packageManager === 'yarn@berry') return 'yarn';\n if (packageManager === 'pnpm@6') return 'pnpm';\n if (packageManager === 'bun') return 'bun';\n\n return packageManager ?? 'npm';\n}\n","import chalk from \"chalk\"\n\nexport const logger = {\n error(...args: unknown[]) {\n console.log(chalk.red(...args))\n },\n warn(...args: unknown[]) {\n console.log(chalk.yellow(...args))\n },\n info(...args: unknown[]) {\n console.log(chalk.cyan(...args))\n },\n success(...args: unknown[]) {\n console.log(chalk.green(...args))\n },\n break() {\n console.log(\"\")\n },\n}\n","import { logger } from \"@/src/utils/logger\"\n\nexport function handleError(error: unknown) {\n if (typeof error === \"string\") {\n logger.error(error)\n process.exit(1)\n }\n\n if (error instanceof Error) {\n logger.error(error.message)\n process.exit(1)\n }\n\n logger.error(\"Something went wrong. Please try again.\")\n process.exit(1)\n}\n","import {\n Config,\n DEFAULT_COMPONENTS,\n DEFAULT_LIB,\n getConfig,\n rawConfigSchema,\n resolveConfigPaths,\n} from '@/src/utils/get-config';\nimport { getPackageManager } from '@/src/utils/get-package-manager';\nimport { handleError } from '@/src/utils/handle-error';\nimport { logger } from '@/src/utils/logger';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { execa } from 'execa';\nimport { existsSync, promises as fs } from 'fs';\nimport ora, { Ora } from 'ora';\nimport path from 'path';\nimport prompts from 'prompts';\nimport { z } from 'zod';\nimport { Component, INVALID_COMPONENT_ERROR, getAllComponentsToWrite } from '../items';\nimport { COMPONENTS } from '../items/components';\nimport { fileURLToPath } from 'url';\n\nconst filePath = fileURLToPath(import.meta.url);\nconst fileDir = path.dirname(filePath);\n\nconst addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n overwrite: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n});\n\nexport const add = new Command()\n .name('add')\n .description('add components to your project')\n .argument('[components...]', 'the components to add')\n .option('-o, --overwrite', 'overwrite existing files.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd()\n )\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n ...opts,\n });\n\n const cwd = path.resolve(options.cwd);\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`);\n process.exit(1);\n }\n\n let config = await getConfig(cwd);\n\n if (!config) {\n config = await promptForConfig(cwd);\n }\n\n let selectedComponents: Array<string> = options.components ?? [];\n if (!selectedComponents?.length) {\n const { components } = await prompts({\n type: 'multiselect',\n name: 'components',\n message: 'Which components would you like to add?',\n hint: 'Space to select. A to toggle all. Enter to submit.',\n instructions: false,\n choices: COMPONENTS.map((entry) => ({\n title: entry.name,\n value: entry.name,\n selected: false,\n })),\n });\n selectedComponents = components;\n }\n\n if (!selectedComponents?.length) {\n logger.warn('No components selected. Exiting.');\n process.exit(0);\n }\n\n const spinner = ora(`Installing components...`).start();\n\n let componentsToWrite: Array<Component> = [];\n try {\n componentsToWrite = getAllComponentsToWrite(selectedComponents);\n } catch (err) {\n if (err instanceof Error && err.message === INVALID_COMPONENT_ERROR) {\n logger.error(\n `Invalid component(s): ${selectedComponents\n .filter((component) => !COMPONENTS.find((entry) => entry.name === component))\n .join(', ')}`\n );\n process.exit(1);\n }\n logger.error(err);\n }\n\n const npmPackages: Array<string> = [];\n\n for (const comp of componentsToWrite) {\n spinner.text = `Installing ${comp.name}...`;\n\n if (Array.isArray(comp.paths)) {\n await writeFiles(comp, comp.paths, config, spinner, options.overwrite);\n } else {\n await writeFiles(\n comp,\n comp.paths[config.platforms === 'universal' ? 'universal' : 'native-only'],\n config,\n spinner,\n options.overwrite\n );\n }\n\n npmPackages.push(...comp.npmPackages);\n }\n\n const packageManager = await getPackageManager(cwd);\n\n const uniqueNpmPackages = Array.from(new Set(npmPackages));\n\n if (uniqueNpmPackages.length) {\n spinner.text = `Installing ${uniqueNpmPackages.join(', ')}...`;\n await execa(\n packageManager,\n [packageManager === 'npm' ? 'install' : 'add', ...uniqueNpmPackages],\n {\n cwd,\n }\n );\n }\n spinner.succeed(`Done.`);\n } catch (error) {\n handleError(error);\n }\n });\n\nasync function writeFiles(\n comp: Component,\n paths: Array<{ from: string; distFrom?: string; to: { folder: string; file: string } }>,\n config: Config,\n spinner: Ora,\n overwriteFlag: boolean\n) {\n for (const compPath of paths) {\n const targetDir = path.join(config.resolvedPaths.components, compPath.to.folder);\n if (!existsSync(targetDir)) {\n await fs.mkdir(targetDir, { recursive: true });\n }\n\n spinner.stop();\n\n if (existsSync(path.join(targetDir, compPath.to.file))) {\n const filePath = [compPath.to.folder, compPath.to.file].join('/');\n if (!overwriteFlag) {\n logger.info(\n `File already exists: ${chalk.bgCyan(\n filePath\n )} was skipped. To overwrite, run with the ${chalk.green('--overwrite')} flag.`\n );\n continue;\n }\n\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `File already exists: ${chalk.yellow(filePath)}. Would you like to overwrite?`,\n initial: false,\n });\n\n if (!overwrite) {\n logger.info(`Skipped`);\n continue;\n }\n }\n\n spinner.start(`Installing ${comp.name}...`);\n const readFromPath = compPath.distFrom\n ? path.join(fileDir, '../__generated/components', compPath.distFrom)\n : path.join(fileDir, '../__generated/components', compPath.to.folder, compPath.to.file);\n try {\n const content = await fs.readFile(path.resolve(readFromPath), 'utf8');\n await fs.writeFile(\n path.join(targetDir, compPath.to.file),\n fixImports(content, config.aliases.components, config.aliases.lib)\n );\n } catch (error) {\n handleError(error);\n }\n }\n\n for (const icon of comp.icons ?? []) {\n const targetDir = path.resolve(config.resolvedPaths.lib, 'icons');\n if (!existsSync(targetDir)) {\n await fs.mkdir(targetDir, { recursive: true });\n try {\n await fs.writeFile(\n path.join(targetDir, `iconWithClassName.ts`),\n `import type { LucideIcon } from 'lucide-react-native';\\nimport { cssInterop } from 'nativewind';\\n\\nexport function iconWithClassName(icon: LucideIcon) {\\ncssInterop(icon, {\\n className: {\\n target: 'style',\\n nativeStyleToProp: {\\n color: true,\\n opacity: true,\\n },\\n },\\n});\\n}`\n );\n } catch (error) {\n handleError(error);\n }\n }\n\n if (existsSync(path.join(targetDir, `${icon}.tsx`))) {\n const filePath = path.join(targetDir, `${icon}.tsx`);\n if (!overwriteFlag) {\n logger.info(\n `File already exists: ${chalk.bgCyan(\n `${icon}.tsx`\n )} was skipped. To overwrite, run with the ${chalk.green('--overwrite')} flag.`\n );\n continue;\n }\n\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `File already exists: ${chalk.yellow(filePath)}. Would you like to overwrite?`,\n initial: false,\n });\n\n if (!overwrite) {\n logger.info(`Skipped ${icon}.tsx`);\n continue;\n }\n }\n\n spinner.start(`Adding the ${icon} icon...`);\n\n try {\n await fs.writeFile(\n path.join(targetDir, `${icon}.tsx`),\n `import { ${icon} } from 'lucide-react-native';\\nimport { iconWithClassName } from './iconWithClassName';\\niconWithClassName(${icon});\\nexport { ${icon} };`\n );\n } catch (error) {\n handleError(error);\n }\n }\n}\n\nfunction fixImports(rawfile: string, componentsAlias: string, libAlias: string) {\n return rawfile\n .replace('./typography', `${componentsAlias}/ui/typography`)\n .replace('./text', `${componentsAlias}/ui/text`)\n .replaceAll('../../components', componentsAlias)\n .replaceAll('../../lib', libAlias);\n}\n\nasync function promptForConfig(cwd: string) {\n const highlight = (text: string) => chalk.cyan(text);\n\n const options = await prompts([\n {\n type: 'select',\n name: 'platforms',\n message: `Which ${highlight('platforms')} do you support?`,\n choices: [\n { title: 'Universal (Web, iOS, and Android)', value: 'universal' },\n { title: 'Native Only (iOS and Android)', value: 'native-only' },\n ],\n },\n {\n type: 'text',\n name: 'components',\n message: `Configure the import alias for ${highlight('components')}:`,\n initial: DEFAULT_COMPONENTS,\n },\n {\n type: 'text',\n name: 'lib',\n message: `Configure the import alias for ${highlight('lib')}:`,\n initial: DEFAULT_LIB,\n },\n ]);\n\n const config = rawConfigSchema.parse({\n platforms: options.platforms,\n aliases: {\n lib: options.lib,\n components: options.components,\n },\n });\n\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: `Write configuration to ${highlight('components.json')}. Proceed?`,\n initial: true,\n });\n\n if (proceed) {\n // Write to file.\n logger.info('');\n const spinner = ora(`Writing components.json...`).start();\n const targetPath = path.resolve(cwd, 'components.json');\n await fs.writeFile(targetPath, JSON.stringify(config, null, 2), 'utf8');\n spinner.succeed();\n }\n\n return await resolveConfigPaths(cwd, config);\n}\n","export const COMPONENTS = [\n {\n name: 'accordion',\n dependencies: ['text'],\n icons: ['ChevronDown'],\n npmPackages: ['@rn-primitives/accordion'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/accordion.tsx',\n to: {\n folder: 'ui',\n file: 'accordion.tsx',\n },\n },\n ],\n },\n {\n name: 'alert-dialog',\n dependencies: ['button', 'text'],\n icons: [],\n npmPackages: ['@rn-primitives/alert-dialog'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/alert-dialog.tsx',\n to: {\n folder: 'ui',\n file: 'alert-dialog.tsx',\n },\n },\n ],\n },\n {\n name: 'aspect-ratio',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/aspect-ratio'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/aspect-ratio.tsx',\n to: {\n folder: 'ui',\n file: 'aspect-ratio.tsx',\n },\n },\n ],\n },\n {\n name: 'avatar',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/avatar'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/avatar.tsx',\n to: {\n folder: 'ui',\n file: 'avatar.tsx',\n },\n },\n ],\n },\n {\n name: 'badge',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/slot', '@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/badge.tsx',\n to: {\n folder: 'ui',\n file: 'badge.tsx',\n },\n },\n ],\n },\n {\n name: 'button',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/button.tsx',\n to: {\n folder: 'ui',\n file: 'button.tsx',\n },\n },\n ],\n },\n {\n name: 'card',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/card.tsx',\n to: {\n folder: 'ui',\n file: 'card.tsx',\n },\n },\n ],\n },\n {\n name: 'checkbox',\n dependencies: [],\n icons: ['Check'],\n npmPackages: ['@rn-primitives/checkbox'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/checkbox.tsx',\n to: {\n folder: 'ui',\n file: 'checkbox.tsx',\n },\n },\n ],\n },\n {\n name: 'collapsible',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/collapsible'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/collapsible.tsx',\n to: {\n folder: 'ui',\n file: 'collapsible.tsx',\n },\n },\n ],\n },\n {\n name: 'context-menu',\n dependencies: ['text'],\n icons: ['Check', 'ChevronDown', 'ChevronRight', 'ChevronUp'],\n npmPackages: ['@rn-primitives/context-menu'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/context-menu.tsx',\n to: {\n folder: 'ui',\n file: 'context-menu.tsx',\n },\n },\n ],\n },\n {\n name: 'dialog',\n dependencies: [],\n icons: ['X'],\n npmPackages: ['@rn-primitives/dialog'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/dialog.tsx',\n to: {\n folder: 'ui',\n file: 'dialog.tsx',\n },\n },\n ],\n },\n {\n name: 'dropdown-menu',\n dependencies: ['text'],\n icons: ['Check', 'ChevronDown', 'ChevronRight', 'ChevronUp'],\n npmPackages: ['@rn-primitives/dropdown-menu'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/dropdown-menu.tsx',\n to: {\n folder: 'ui',\n file: 'dropdown-menu.tsx',\n },\n },\n ],\n },\n {\n name: 'hover-card',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/hover-card'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/hover-card.tsx',\n to: {\n folder: 'ui',\n file: 'hover-card.tsx',\n },\n },\n ],\n },\n {\n name: 'input',\n dependencies: [],\n icons: [],\n npmPackages: [],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/input.tsx',\n to: {\n folder: 'ui',\n file: 'input.tsx',\n },\n },\n ],\n },\n {\n name: 'label',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/label'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/label.tsx',\n to: {\n folder: 'ui',\n file: 'label.tsx',\n },\n },\n ],\n },\n {\n name: 'menubar',\n dependencies: ['text'],\n icons: ['Check', 'ChevronDown', 'ChevronRight', 'ChevronUp'],\n npmPackages: ['@rn-primitives/menubar'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/menubar.tsx',\n to: {\n folder: 'ui',\n file: 'menubar.tsx',\n },\n },\n ],\n },\n {\n name: 'navigation-menu',\n dependencies: [],\n icons: ['ChevronDown'],\n npmPackages: ['@rn-primitives/navigation-menu'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/navigation-menu.tsx',\n to: {\n folder: 'ui',\n file: 'navigation-menu.tsx',\n },\n },\n ],\n },\n {\n name: 'popover',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/popover'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/popover.tsx',\n to: {\n folder: 'ui',\n file: 'popover.tsx',\n },\n },\n ],\n },\n {\n name: 'progress',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/progress'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/progress.tsx',\n to: {\n folder: 'ui',\n file: 'progress.tsx',\n },\n },\n ],\n },\n {\n name: 'radio-group',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/radio-group'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/radio-group.tsx',\n to: {\n folder: 'ui',\n file: 'radio-group.tsx',\n },\n },\n ],\n },\n {\n name: 'select',\n dependencies: [],\n icons: ['Check', 'ChevronDown', 'ChevronUp'],\n npmPackages: ['@rn-primitives/select'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/select.tsx',\n to: {\n folder: 'ui',\n file: 'select.tsx',\n },\n },\n ],\n },\n {\n name: 'separator',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/separator'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/separator.tsx',\n to: {\n folder: 'ui',\n file: 'separator.tsx',\n },\n },\n ],\n },\n {\n name: 'skeleton',\n dependencies: [],\n icons: [],\n npmPackages: [],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/skeleton.tsx',\n to: {\n folder: 'ui',\n file: 'skeleton.tsx',\n },\n },\n ],\n },\n {\n name: 'switch',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/switch'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/switch.tsx',\n to: {\n folder: 'ui',\n file: 'switch.tsx',\n },\n },\n ],\n },\n {\n name: 'table',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/table'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/table.tsx',\n to: {\n folder: 'ui',\n file: 'table.tsx',\n },\n },\n ],\n },\n {\n name: 'tabs',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/tabs'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/tabs.tsx',\n to: {\n folder: 'ui',\n file: 'tabs.tsx',\n },\n },\n ],\n },\n {\n name: 'text',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/slot', '@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/text.tsx',\n to: { folder: 'ui', file: 'text.tsx' },\n },\n ],\n },\n {\n name: 'textarea',\n dependencies: [],\n icons: [],\n npmPackages: [],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/textarea.tsx',\n to: { folder: 'ui', file: 'textarea.tsx' },\n },\n ],\n },\n {\n name: 'toggle',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/toggle'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/toggle.tsx',\n to: { folder: 'ui', file: 'toggle.tsx' },\n },\n ],\n },\n {\n name: 'toggle-group',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/toggle-group'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/toggle-group.tsx',\n to: { folder: 'ui', file: 'toggle-group.tsx' },\n },\n ],\n },\n {\n name: 'tooltip',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/tooltip'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/tooltip.tsx',\n to: { folder: 'ui', file: 'tooltip.tsx' },\n },\n ],\n },\n {\n name: 'typography',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/slot', '@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/typography.tsx',\n to: { folder: 'ui', file: 'typography.tsx' },\n },\n ],\n },\n];\n","import { COMPONENTS } from './components';\n\nexport type Component = (typeof COMPONENTS)[number] & { icons?: string[] };\ntype ComponentName = (typeof COMPONENTS)[number]['name'];\n\nfunction getComponentDependencies(\n componentName: ComponentName,\n visited = new Set<ComponentName>()\n) {\n const component = COMPONENTS.find((comp) => comp.name === componentName);\n if (!component) return [];\n\n visited.add(componentName);\n\n let dependencies: ComponentName[] = component.dependencies.slice();\n\n component.dependencies.forEach((dependency) => {\n if (!visited.has(dependency)) {\n const childDependencies = getComponentDependencies(dependency, visited);\n dependencies = dependencies.concat(childDependencies);\n }\n });\n\n return dependencies;\n}\n\nexport const INVALID_COMPONENT_ERROR = 'invalid component';\n\nexport function getAllComponentsToWrite(componentNames: string[]): Component[] {\n const uniqueComponents = new Set<ComponentName>();\n\n if (\n componentNames.some((componentName) => !COMPONENTS.find((comp) => comp.name === componentName))\n ) {\n throw new Error(INVALID_COMPONENT_ERROR);\n }\n\n componentNames.forEach((componentName) => {\n const allDependencies = getComponentDependencies(componentName as ComponentName);\n allDependencies.unshift(componentName as never); // Add the component itself to the list\n allDependencies.forEach((dep) => {\n uniqueComponents.add(dep);\n });\n });\n\n return Array.from(uniqueComponents).map((dep) => {\n const comp = COMPONENTS.find((comp) => comp.name === dep);\n if (!comp) {\n throw new Error(INVALID_COMPONENT_ERROR);\n }\n return comp;\n });\n}\n","#!/usr/bin/env node\nimport { add } from '@/src/commands/add';\nimport { Command } from 'commander';\n\nimport { getPackageInfo } from './utils/get-package-info';\n\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\nasync function main() {\n const packageInfo = await getPackageInfo();\n\n const program = new Command()\n .name('rnr-cli')\n .description('add components and dependencies to your project')\n .version(packageInfo.version || '0.0.0-rc.0', '-v, --version', 'display the version number');\n\n program.addCommand(add);\n\n program.parse();\n}\n\nmain();\n","import path from 'path';\nimport fs from 'fs-extra';\nimport { type PackageJson } from 'type-fest';\n\nexport function getPackageInfo() {\n const packageJsonPath = path.join('package.json');\n\n return fs.readJSONSync(packageJsonPath) as Promise<PackageJson>;\n}\n"],"mappings":"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AM,aACR,CACF,CACF,CACF,EACA,CACE,KAAM,WACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,yBAAyB,EACvC,MAAO,CACL,CACE,KAAM,+DACN,GAAI,CACF,OAAQ,KACR,KAAM,cACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,4BAA4B,EAC1C,MAAO,CACL,CACE,KAAM,kEACN,GAAI,CACF,OAAQ,KACR,KAAM,iBACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,aAAc,CAAC,EACf,MAAO,CAAC,QAAS,cAAe,WAAW,EAC3C,YAAa,CAAC,uBAAuB,EACrC,MAAO,CACL,CACE,KAAM,6DACN,GAAI,CACF,OAAQ,KACR,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,0BAA0B,EACxC,MAAO,CACL,CACE,KAAM,gEACN,GAAI,CACF,OAAQ,KACR,KAAM,eACR,CACF,CACF,CACF,EACA,CACE,KAAM,WACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,EACd,MAAO,CACL,CACE,KAAM,+DACN,GAAI,CACF,OAAQ,KACR,KAAM,cACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,uBAAuB,EACrC,MAAO,CACL,CACE,KAAM,6DACN,GAAI,CACF,OAAQ,KACR,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,QACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,sBAAsB,EACpC,MAAO,CACL,CACE,KAAM,4DACN,GAAI,CACF,OAAQ,KACR,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,qBAAqB,EACnC,MAAO,CACL,CACE,KAAM,2DACN,GAAI,CACF,OAAQ,KACR,KAAM,UACR,CACF,CACF,CACF,EACA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","names":["createMatchPath","resolveImport","importPath","config","cosmiconfig","loadConfig","z","DEFAULT_COMPONENTS","DEFAULT_LIB","explorer","cosmiconfig","rawConfigSchema","z","configSchema","getConfig","cwd","config","getRawConfig","resolveConfigPaths","tsConfig","loadConfig","resolveImport","configResult","detect","getPackageManager","targetDir","packageManager","chalk","logger","args","handleError","error","logger","chalk","Command","execa","existsSync","fs","ora","path","prompts","z","COMPONENTS","getComponentDependencies","componentName","visited","component","COMPONENTS","comp","dependencies","dependency","childDependencies","INVALID_COMPONENT_ERROR","getAllComponentsToWrite","componentNames","uniqueComponents","allDependencies","dep","fileURLToPath","filePath","fileDir","path","addOptionsSchema","z","add","Command","components","opts","options","cwd","existsSync","logger","config","getConfig","promptForConfig","selectedComponents","prompts","COMPONENTS","entry","spinner","ora","componentsToWrite","getAllComponentsToWrite","err","INVALID_COMPONENT_ERROR","component","npmPackages","comp","writeFiles","packageManager","getPackageManager","uniqueNpmPackages","execa","error","handleError","paths","overwriteFlag","compPath","targetDir","fs","chalk","overwrite","readFromPath","content","fixImports","icon","rawfile","componentsAlias","libAlias","highlight","text","DEFAULT_COMPONENTS","DEFAULT_LIB","rawConfigSchema","proceed","targetPath","resolveConfigPaths","Command","path","fs","getPackageInfo","packageJsonPath","main","packageInfo","getPackageInfo","program","Command","add"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/resolve-import.ts","../src/utils/get-config.ts","../src/utils/get-package-manager.ts","../src/utils/logger.ts","../src/utils/handle-error.ts","../src/commands/add.ts","../src/items/components.ts","../src/items/index.ts","../src/index.ts","../src/utils/get-package-info.ts"],"sourcesContent":["import { createMatchPath, type ConfigLoaderSuccessResult } from \"tsconfig-paths\"\n\nexport async function resolveImport(\n importPath: string,\n config: Pick<ConfigLoaderSuccessResult, \"absoluteBaseUrl\" | \"paths\">\n) {\n return createMatchPath(config.absoluteBaseUrl, config.paths)(\n importPath,\n undefined,\n () => true,\n [\".ts\", \".tsx\"]\n )\n}\n","import { resolveImport } from '@/src/utils/resolve-import';\nimport { cosmiconfig } from 'cosmiconfig';\nimport { loadConfig } from 'tsconfig-paths';\nimport { z } from 'zod';\n\nexport const DEFAULT_COMPONENTS = '~/components';\nexport const DEFAULT_LIB = '~/lib';\n\nconst explorer = cosmiconfig('components', {\n searchPlaces: ['components.json'],\n});\n\nexport const rawConfigSchema = z.object({\n aliases: z.object({\n components: z.string(),\n lib: z.string(),\n }),\n});\n\nexport type RawConfig = z.infer<typeof rawConfigSchema>;\n\nexport const configSchema = rawConfigSchema.extend({\n resolvedPaths: z.object({\n lib: z.string(),\n components: z.string(),\n }),\n});\n\nexport type Config = z.infer<typeof configSchema>;\n\nexport async function getConfig(cwd: string) {\n const config = await getRawConfig(cwd);\n\n if (!config) {\n return null;\n }\n\n return await resolveConfigPaths(cwd, config);\n}\n\nexport async function resolveConfigPaths(cwd: string, config: RawConfig) {\n // Read tsconfig.json.\n const tsConfig = await loadConfig(cwd);\n\n if (tsConfig.resultType === 'failed') {\n throw new Error(`Failed to load tsconfig.json. ${tsConfig.message ?? ''}`.trim());\n }\n\n return configSchema.parse({\n ...config,\n resolvedPaths: {\n lib: await resolveImport(config.aliases['lib'], tsConfig),\n components: await resolveImport(config.aliases['components'], tsConfig),\n },\n });\n}\n\nexport async function getRawConfig(cwd: string): Promise<RawConfig | null> {\n try {\n const configResult = await explorer.search(cwd);\n\n if (!configResult) {\n return null;\n }\n\n return rawConfigSchema.parse(configResult.config);\n } catch (error) {\n throw new Error(`Invalid configuration found in ${cwd}/components.json.`);\n }\n}\n","import { detect } from '@antfu/ni';\n\nexport async function getPackageManager(\n targetDir: string\n): Promise<'yarn' | 'pnpm' | 'bun' | 'npm'> {\n const packageManager = await detect({ programmatic: true, cwd: targetDir });\n\n if (packageManager === 'yarn@berry') return 'yarn';\n if (packageManager === 'pnpm@6') return 'pnpm';\n if (packageManager === 'bun') return 'bun';\n\n return packageManager ?? 'npm';\n}\n","import chalk from \"chalk\"\n\nexport const logger = {\n error(...args: unknown[]) {\n console.log(chalk.red(...args))\n },\n warn(...args: unknown[]) {\n console.log(chalk.yellow(...args))\n },\n info(...args: unknown[]) {\n console.log(chalk.cyan(...args))\n },\n success(...args: unknown[]) {\n console.log(chalk.green(...args))\n },\n break() {\n console.log(\"\")\n },\n}\n","import { logger } from \"@/src/utils/logger\"\n\nexport function handleError(error: unknown) {\n if (typeof error === \"string\") {\n logger.error(error)\n process.exit(1)\n }\n\n if (error instanceof Error) {\n logger.error(error.message)\n process.exit(1)\n }\n\n logger.error(\"Something went wrong. Please try again.\")\n process.exit(1)\n}\n","import {\n Config,\n DEFAULT_COMPONENTS,\n DEFAULT_LIB,\n getConfig,\n rawConfigSchema,\n resolveConfigPaths,\n} from '@/src/utils/get-config';\nimport { getPackageManager } from '@/src/utils/get-package-manager';\nimport { handleError } from '@/src/utils/handle-error';\nimport { logger } from '@/src/utils/logger';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { execa } from 'execa';\nimport { existsSync, promises as fs } from 'fs';\nimport ora, { Ora } from 'ora';\nimport path from 'path';\nimport prompts from 'prompts';\nimport { z } from 'zod';\nimport { Component, INVALID_COMPONENT_ERROR, getAllComponentsToWrite } from '../items';\nimport { COMPONENTS } from '../items/components';\nimport { fileURLToPath } from 'url';\n\nconst filePath = fileURLToPath(import.meta.url);\nconst fileDir = path.dirname(filePath);\n\nconst addOptionsSchema = z.object({\n components: z.array(z.string()).optional(),\n overwrite: z.boolean(),\n cwd: z.string(),\n path: z.string().optional(),\n});\n\nexport const add = new Command()\n .name('add')\n .description('add components to your project')\n .argument('[components...]', 'the components to add')\n .option('-o, --overwrite', 'overwrite existing files.', false)\n .option(\n '-c, --cwd <cwd>',\n 'the working directory. defaults to the current directory.',\n process.cwd()\n )\n .action(async (components, opts) => {\n try {\n const options = addOptionsSchema.parse({\n components,\n ...opts,\n });\n\n const cwd = path.resolve(options.cwd);\n\n if (!existsSync(cwd)) {\n logger.error(`The path ${cwd} does not exist. Please try again.`);\n process.exit(1);\n }\n\n let config = await getConfig(cwd);\n\n if (!config) {\n config = await promptForConfig(cwd);\n }\n\n let selectedComponents: Array<string> = options.components ?? [];\n if (!selectedComponents?.length) {\n const { components } = await prompts({\n type: 'multiselect',\n name: 'components',\n message: 'Which components would you like to add?',\n hint: 'Space to select. A to toggle all. Enter to submit.',\n instructions: false,\n choices: COMPONENTS.map((entry) => ({\n title: entry.name,\n value: entry.name,\n selected: false,\n })),\n });\n selectedComponents = components;\n }\n\n if (!selectedComponents?.length) {\n logger.warn('No components selected. Exiting.');\n process.exit(0);\n }\n\n const spinner = ora(`Installing components...`).start();\n\n let componentsToWrite: Array<Component> = [];\n try {\n componentsToWrite = getAllComponentsToWrite(selectedComponents);\n } catch (err) {\n if (err instanceof Error && err.message === INVALID_COMPONENT_ERROR) {\n logger.error(\n `Invalid component(s): ${selectedComponents\n .filter((component) => !COMPONENTS.find((entry) => entry.name === component))\n .join(', ')}`\n );\n process.exit(1);\n }\n logger.error(err);\n }\n\n const npmPackages: Array<string> = [];\n\n for (const comp of componentsToWrite) {\n spinner.text = `Installing ${comp.name}...`;\n\n await writeFiles(comp, comp.paths, config, spinner, options.overwrite);\n\n npmPackages.push(...comp.npmPackages);\n }\n\n const packageManager = await getPackageManager(cwd);\n\n const uniqueNpmPackages = Array.from(new Set(npmPackages));\n\n if (uniqueNpmPackages.length) {\n spinner.text = `Installing ${uniqueNpmPackages.join(', ')}...`;\n await execa(\n packageManager,\n [packageManager === 'npm' ? 'install' : 'add', ...uniqueNpmPackages],\n {\n cwd,\n }\n );\n }\n spinner.succeed(`Done.`);\n } catch (error) {\n handleError(error);\n }\n });\n\nasync function writeFiles(\n comp: Component,\n paths: Array<{ from: string; distFrom?: string; to: { folder: string; file: string } }>,\n config: Config,\n spinner: Ora,\n overwriteFlag: boolean\n) {\n for (const compPath of paths) {\n const targetDir = path.join(config.resolvedPaths.components, compPath.to.folder);\n if (!existsSync(targetDir)) {\n await fs.mkdir(targetDir, { recursive: true });\n }\n\n spinner.stop();\n\n if (existsSync(path.join(targetDir, compPath.to.file))) {\n const filePath = [compPath.to.folder, compPath.to.file].join('/');\n if (!overwriteFlag) {\n logger.info(\n `File already exists: ${chalk.bgCyan(\n filePath\n )} was skipped. To overwrite, run with the ${chalk.green('--overwrite')} flag.`\n );\n continue;\n }\n\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `File already exists: ${chalk.yellow(filePath)}. Would you like to overwrite?`,\n initial: false,\n });\n\n if (!overwrite) {\n logger.info(`Skipped`);\n continue;\n }\n }\n\n spinner.start(`Installing ${comp.name}...`);\n const readFromPath = compPath.distFrom\n ? path.join(fileDir, '../__generated/components', compPath.distFrom)\n : path.join(fileDir, '../__generated/components', compPath.to.folder, compPath.to.file);\n try {\n const content = await fs.readFile(path.resolve(readFromPath), 'utf8');\n await fs.writeFile(\n path.join(targetDir, compPath.to.file),\n fixImports(content, config.aliases.components, config.aliases.lib)\n );\n } catch (error) {\n handleError(error);\n }\n }\n\n for (const icon of comp.icons ?? []) {\n const targetDir = path.resolve(config.resolvedPaths.lib, 'icons');\n if (!existsSync(targetDir)) {\n await fs.mkdir(targetDir, { recursive: true });\n try {\n await fs.writeFile(\n path.join(targetDir, `iconWithClassName.ts`),\n `import type { LucideIcon } from 'lucide-react-native';\\nimport { cssInterop } from 'nativewind';\\n\\nexport function iconWithClassName(icon: LucideIcon) {\\ncssInterop(icon, {\\n className: {\\n target: 'style',\\n nativeStyleToProp: {\\n color: true,\\n opacity: true,\\n },\\n },\\n});\\n}`\n );\n } catch (error) {\n handleError(error);\n }\n }\n\n if (existsSync(path.join(targetDir, `${icon}.tsx`))) {\n const filePath = path.join(targetDir, `${icon}.tsx`);\n if (!overwriteFlag) {\n logger.info(\n `File already exists: ${chalk.bgCyan(\n `${icon}.tsx`\n )} was skipped. To overwrite, run with the ${chalk.green('--overwrite')} flag.`\n );\n continue;\n }\n\n const { overwrite } = await prompts({\n type: 'confirm',\n name: 'overwrite',\n message: `File already exists: ${chalk.yellow(filePath)}. Would you like to overwrite?`,\n initial: false,\n });\n\n if (!overwrite) {\n logger.info(`Skipped ${icon}.tsx`);\n continue;\n }\n }\n\n spinner.start(`Adding the ${icon} icon...`);\n\n try {\n await fs.writeFile(\n path.join(targetDir, `${icon}.tsx`),\n `import { ${icon} } from 'lucide-react-native';\\nimport { iconWithClassName } from './iconWithClassName';\\niconWithClassName(${icon});\\nexport { ${icon} };`\n );\n } catch (error) {\n handleError(error);\n }\n }\n}\n\nfunction fixImports(rawfile: string, componentsAlias: string, libAlias: string) {\n return rawfile\n .replace('./typography', `${componentsAlias}/ui/typography`)\n .replace('./text', `${componentsAlias}/ui/text`)\n .replaceAll('../../components', componentsAlias)\n .replaceAll('../../lib', libAlias);\n}\n\nasync function promptForConfig(cwd: string) {\n const highlight = (text: string) => chalk.cyan(text);\n\n const options = await prompts([\n {\n type: 'text',\n name: 'components',\n message: `Configure the import alias for ${highlight('components')}:`,\n initial: DEFAULT_COMPONENTS,\n },\n {\n type: 'text',\n name: 'lib',\n message: `Configure the import alias for ${highlight('lib')}:`,\n initial: DEFAULT_LIB,\n },\n ]);\n\n const config = rawConfigSchema.parse({\n aliases: {\n lib: options.lib,\n components: options.components,\n },\n });\n\n const { proceed } = await prompts({\n type: 'confirm',\n name: 'proceed',\n message: `Write configuration to ${highlight('components.json')}. Proceed?`,\n initial: true,\n });\n\n if (proceed) {\n // Write to file.\n logger.info('');\n const spinner = ora(`Writing components.json...`).start();\n const targetPath = path.resolve(cwd, 'components.json');\n await fs.writeFile(targetPath, JSON.stringify(config, null, 2), 'utf8');\n spinner.succeed();\n }\n\n return await resolveConfigPaths(cwd, config);\n}\n","export const COMPONENTS = [\n {\n name: 'accordion',\n dependencies: ['text'],\n icons: ['ChevronDown'],\n npmPackages: ['@rn-primitives/accordion'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/accordion.tsx',\n to: {\n folder: 'ui',\n file: 'accordion.tsx',\n },\n },\n ],\n },\n {\n name: 'alert-dialog',\n dependencies: ['button', 'text'],\n icons: [],\n npmPackages: ['@rn-primitives/alert-dialog'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/alert-dialog.tsx',\n to: {\n folder: 'ui',\n file: 'alert-dialog.tsx',\n },\n },\n ],\n },\n {\n name: 'aspect-ratio',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/aspect-ratio'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/aspect-ratio.tsx',\n to: {\n folder: 'ui',\n file: 'aspect-ratio.tsx',\n },\n },\n ],\n },\n {\n name: 'avatar',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/avatar'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/avatar.tsx',\n to: {\n folder: 'ui',\n file: 'avatar.tsx',\n },\n },\n ],\n },\n {\n name: 'badge',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/slot', '@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/badge.tsx',\n to: {\n folder: 'ui',\n file: 'badge.tsx',\n },\n },\n ],\n },\n {\n name: 'button',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/button.tsx',\n to: {\n folder: 'ui',\n file: 'button.tsx',\n },\n },\n ],\n },\n {\n name: 'card',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/card.tsx',\n to: {\n folder: 'ui',\n file: 'card.tsx',\n },\n },\n ],\n },\n {\n name: 'checkbox',\n dependencies: [],\n icons: ['Check'],\n npmPackages: ['@rn-primitives/checkbox'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/checkbox.tsx',\n to: {\n folder: 'ui',\n file: 'checkbox.tsx',\n },\n },\n ],\n },\n {\n name: 'collapsible',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/collapsible'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/collapsible.tsx',\n to: {\n folder: 'ui',\n file: 'collapsible.tsx',\n },\n },\n ],\n },\n {\n name: 'context-menu',\n dependencies: ['text'],\n icons: ['Check', 'ChevronDown', 'ChevronRight', 'ChevronUp'],\n npmPackages: ['@rn-primitives/context-menu'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/context-menu.tsx',\n to: {\n folder: 'ui',\n file: 'context-menu.tsx',\n },\n },\n ],\n },\n {\n name: 'dialog',\n dependencies: [],\n icons: ['X'],\n npmPackages: ['@rn-primitives/dialog'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/dialog.tsx',\n to: {\n folder: 'ui',\n file: 'dialog.tsx',\n },\n },\n ],\n },\n {\n name: 'dropdown-menu',\n dependencies: ['text'],\n icons: ['Check', 'ChevronDown', 'ChevronRight', 'ChevronUp'],\n npmPackages: ['@rn-primitives/dropdown-menu'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/dropdown-menu.tsx',\n to: {\n folder: 'ui',\n file: 'dropdown-menu.tsx',\n },\n },\n ],\n },\n {\n name: 'hover-card',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/hover-card'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/hover-card.tsx',\n to: {\n folder: 'ui',\n file: 'hover-card.tsx',\n },\n },\n ],\n },\n {\n name: 'input',\n dependencies: [],\n icons: [],\n npmPackages: [],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/input.tsx',\n to: {\n folder: 'ui',\n file: 'input.tsx',\n },\n },\n ],\n },\n {\n name: 'label',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/label'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/label.tsx',\n to: {\n folder: 'ui',\n file: 'label.tsx',\n },\n },\n ],\n },\n {\n name: 'menubar',\n dependencies: ['text'],\n icons: ['Check', 'ChevronDown', 'ChevronRight', 'ChevronUp'],\n npmPackages: ['@rn-primitives/menubar'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/menubar.tsx',\n to: {\n folder: 'ui',\n file: 'menubar.tsx',\n },\n },\n ],\n },\n {\n name: 'navigation-menu',\n dependencies: [],\n icons: ['ChevronDown'],\n npmPackages: ['@rn-primitives/navigation-menu'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/navigation-menu.tsx',\n to: {\n folder: 'ui',\n file: 'navigation-menu.tsx',\n },\n },\n ],\n },\n {\n name: 'popover',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/popover'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/popover.tsx',\n to: {\n folder: 'ui',\n file: 'popover.tsx',\n },\n },\n ],\n },\n {\n name: 'progress',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/progress'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/progress.tsx',\n to: {\n folder: 'ui',\n file: 'progress.tsx',\n },\n },\n ],\n },\n {\n name: 'radio-group',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/radio-group'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/radio-group.tsx',\n to: {\n folder: 'ui',\n file: 'radio-group.tsx',\n },\n },\n ],\n },\n {\n name: 'select',\n dependencies: [],\n icons: ['Check', 'ChevronDown', 'ChevronUp'],\n npmPackages: ['@rn-primitives/select'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/select.tsx',\n to: {\n folder: 'ui',\n file: 'select.tsx',\n },\n },\n ],\n },\n {\n name: 'separator',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/separator'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/separator.tsx',\n to: {\n folder: 'ui',\n file: 'separator.tsx',\n },\n },\n ],\n },\n {\n name: 'skeleton',\n dependencies: [],\n icons: [],\n npmPackages: [],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/skeleton.tsx',\n to: {\n folder: 'ui',\n file: 'skeleton.tsx',\n },\n },\n ],\n },\n {\n name: 'switch',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/switch'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/switch.tsx',\n to: {\n folder: 'ui',\n file: 'switch.tsx',\n },\n },\n ],\n },\n {\n name: 'table',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/table'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/table.tsx',\n to: {\n folder: 'ui',\n file: 'table.tsx',\n },\n },\n ],\n },\n {\n name: 'tabs',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/tabs'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/tabs.tsx',\n to: {\n folder: 'ui',\n file: 'tabs.tsx',\n },\n },\n ],\n },\n {\n name: 'text',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/slot', '@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/text.tsx',\n to: { folder: 'ui', file: 'text.tsx' },\n },\n ],\n },\n {\n name: 'textarea',\n dependencies: [],\n icons: [],\n npmPackages: [],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/textarea.tsx',\n to: { folder: 'ui', file: 'textarea.tsx' },\n },\n ],\n },\n {\n name: 'toggle',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/toggle'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/toggle.tsx',\n to: { folder: 'ui', file: 'toggle.tsx' },\n },\n ],\n },\n {\n name: 'toggle-group',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/toggle-group'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/toggle-group.tsx',\n to: { folder: 'ui', file: 'toggle-group.tsx' },\n },\n ],\n },\n {\n name: 'tooltip',\n dependencies: ['text'],\n icons: [],\n npmPackages: ['@rn-primitives/tooltip'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/tooltip.tsx',\n to: { folder: 'ui', file: 'tooltip.tsx' },\n },\n ],\n },\n {\n name: 'typography',\n dependencies: [],\n icons: [],\n npmPackages: ['@rn-primitives/slot', '@rn-primitives/types'],\n paths: [\n {\n from: './node_modules/@rnr/reusables/src/components/ui/typography.tsx',\n to: { folder: 'ui', file: 'typography.tsx' },\n },\n ],\n },\n];\n","import { COMPONENTS } from './components';\n\nexport type Component = (typeof COMPONENTS)[number] & { icons?: string[] };\ntype ComponentName = (typeof COMPONENTS)[number]['name'];\n\nfunction getComponentDependencies(\n componentName: ComponentName,\n visited = new Set<ComponentName>()\n) {\n const component = COMPONENTS.find((comp) => comp.name === componentName);\n if (!component) return [];\n\n visited.add(componentName);\n\n let dependencies: ComponentName[] = component.dependencies.slice();\n\n component.dependencies.forEach((dependency) => {\n if (!visited.has(dependency)) {\n const childDependencies = getComponentDependencies(dependency, visited);\n dependencies = dependencies.concat(childDependencies);\n }\n });\n\n return dependencies;\n}\n\nexport const INVALID_COMPONENT_ERROR = 'invalid component';\n\nexport function getAllComponentsToWrite(componentNames: string[]): Component[] {\n const uniqueComponents = new Set<ComponentName>();\n\n if (\n componentNames.some((componentName) => !COMPONENTS.find((comp) => comp.name === componentName))\n ) {\n throw new Error(INVALID_COMPONENT_ERROR);\n }\n\n componentNames.forEach((componentName) => {\n const allDependencies = getComponentDependencies(componentName as ComponentName);\n allDependencies.unshift(componentName as never); // Add the component itself to the list\n allDependencies.forEach((dep) => {\n uniqueComponents.add(dep);\n });\n });\n\n return Array.from(uniqueComponents).map((dep) => {\n const comp = COMPONENTS.find((comp) => comp.name === dep);\n if (!comp) {\n throw new Error(INVALID_COMPONENT_ERROR);\n }\n return comp;\n });\n}\n","#!/usr/bin/env node\nimport { add } from '@/src/commands/add';\nimport { Command } from 'commander';\n\nimport { getPackageInfo } from './utils/get-package-info';\n\nprocess.on('SIGINT', () => process.exit(0));\nprocess.on('SIGTERM', () => process.exit(0));\n\nasync function main() {\n const packageInfo = await getPackageInfo();\n\n const program = new Command()\n .name('rnr-cli')\n .description('add components and dependencies to your project')\n .version(packageInfo.version || '0.0.0-rc.0', '-v, --version', 'display the version number');\n\n program.addCommand(add);\n\n program.parse();\n}\n\nmain();\n","import path from 'path';\nimport fs from 'fs-extra';\nimport { type PackageJson } from 'type-fest';\n\nexport function getPackageInfo() {\n const packageJsonPath = path.join('package.json');\n\n return fs.readJSONSync(packageJsonPath) as Promise<PackageJson>;\n}\n"],"mappings":";AAAA,OAAS,mBAAAA,MAAuD,iBAEhE,eAAsBC,EACpBC,EACAC,EACA,CACA,OAAOH,EAAgBG,EAAO,gBAAiBA,EAAO,KAAK,EACzDD,EACA,OACA,IAAM,GACN,CAAC,MAAO,MAAM,CAChB,CACF,CCXA,OAAS,eAAAE,MAAmB,cAC5B,OAAS,cAAAC,MAAkB,iBAC3B,OAAS,KAAAC,MAAS,MAEX,IAAMC,EAAqB,eACrBC,EAAc,QAErBC,EAAWL,EAAY,aAAc,CACzC,aAAc,CAAC,iBAAiB,CAClC,CAAC,EAEYM,EAAkBJ,EAAE,OAAO,CACtC,QAASA,EAAE,OAAO,CAChB,WAAYA,EAAE,OAAO,EACrB,IAAKA,EAAE,OAAO,CAChB,CAAC,CACH,CAAC,EAIYK,EAAeD,EAAgB,OAAO,CACjD,cAAeJ,EAAE,OAAO,CACtB,IAAKA,EAAE,OAAO,EACd,WAAYA,EAAE,OAAO,CACvB,CAAC,CACH,CAAC,EAID,eAAsBM,EAAUC,EAAa,CAC3C,IAAMC,EAAS,MAAMC,EAAaF,CAAG,EAErC,OAAKC,EAIE,MAAME,EAAmBH,EAAKC,CAAM,EAHlC,IAIX,CAEA,eAAsBE,EAAmBH,EAAaC,EAAmB,CAEvE,IAAMG,EAAW,MAAMZ,EAAWQ,CAAG,EAErC,GAAII,EAAS,aAAe,SAC1B,MAAM,IAAI,MAAM,iCAAiCA,EAAS,SAAW,KAAK,KAAK,CAAC,EAGlF,OAAON,EAAa,MAAM,CACxB,GAAGG,EACH,cAAe,CACb,IAAK,MAAMI,EAAcJ,EAAO,QAAQ,IAAQG,CAAQ,EACxD,WAAY,MAAMC,EAAcJ,EAAO,QAAQ,WAAeG,CAAQ,CACxE,CACF,CAAC,CACH,CAEA,eAAsBF,EAAaF,EAAwC,CACzE,GAAI,CACF,IAAMM,EAAe,MAAMV,EAAS,OAAOI,CAAG,EAE9C,OAAKM,EAIET,EAAgB,MAAMS,EAAa,MAAM,EAHvC,IAIX,MAAE,CACA,MAAM,IAAI,MAAM,kCAAkCN,oBAAsB,CAC1E,CACF,CCrEA,OAAS,UAAAO,MAAc,YAEvB,eAAsBC,EACpBC,EAC0C,CAC1C,IAAMC,EAAiB,MAAMH,EAAO,CAAE,aAAc,GAAM,IAAKE,CAAU,CAAC,EAE1E,OAAIC,IAAmB,aAAqB,OACxCA,IAAmB,SAAiB,OACpCA,IAAmB,MAAc,MAE9BA,GAAkB,KAC3B,CCZA,OAAOC,MAAW,QAEX,IAAMC,EAAS,CACpB,SAASC,EAAiB,CACxB,QAAQ,IAAIF,EAAM,IAAI,GAAGE,CAAI,CAAC,CAChC,EACA,QAAQA,EAAiB,CACvB,QAAQ,IAAIF,EAAM,OAAO,GAAGE,CAAI,CAAC,CACnC,EACA,QAAQA,EAAiB,CACvB,QAAQ,IAAIF,EAAM,KAAK,GAAGE,CAAI,CAAC,CACjC,EACA,WAAWA,EAAiB,CAC1B,QAAQ,IAAIF,EAAM,MAAM,GAAGE,CAAI,CAAC,CAClC,EACA,OAAQ,CACN,QAAQ,IAAI,EAAE,CAChB,CACF,EChBO,SAASC,EAAYC,EAAgB,CACtC,OAAOA,GAAU,WACnBC,EAAO,MAAMD,CAAK,EAClB,QAAQ,KAAK,CAAC,GAGZA,aAAiB,QACnBC,EAAO,MAAMD,EAAM,OAAO,EAC1B,QAAQ,KAAK,CAAC,GAGhBC,EAAO,MAAM,yCAAyC,EACtD,QAAQ,KAAK,CAAC,CAChB,CCJA,OAAOC,MAAW,QAClB,OAAS,WAAAC,MAAe,YACxB,OAAS,SAAAC,MAAa,QACtB,OAAS,cAAAC,EAAY,YAAYC,MAAU,KAC3C,OAAOC,MAAkB,MACzB,OAAOC,MAAU,OACjB,OAAOC,MAAa,UACpB,OAAS,KAAAC,MAAS,MClBX,IAAMC,EAAa,CACxB,CACE,KAAM,YACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,aAAa,EACrB,YAAa,CAAC,0BAA0B,EACxC,MAAO,CACL,CACE,KAAM,gEACN,GAAI,CACF,OAAQ,KACR,KAAM,eACR,CACF,CACF,CACF,EACA,CACE,KAAM,eACN,aAAc,CAAC,SAAU,MAAM,EAC/B,MAAO,CAAC,EACR,YAAa,CAAC,6BAA6B,EAC3C,MAAO,CACL,CACE,KAAM,mEACN,GAAI,CACF,OAAQ,KACR,KAAM,kBACR,CACF,CACF,CACF,EACA,CACE,KAAM,eACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,6BAA6B,EAC3C,MAAO,CACL,CACE,KAAM,mEACN,GAAI,CACF,OAAQ,KACR,KAAM,kBACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,uBAAuB,EACrC,MAAO,CACL,CACE,KAAM,6DACN,GAAI,CACF,OAAQ,KACR,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,QACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,sBAAuB,sBAAsB,EAC3D,MAAO,CACL,CACE,KAAM,4DACN,GAAI,CACF,OAAQ,KACR,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,sBAAsB,EACpC,MAAO,CACL,CACE,KAAM,6DACN,GAAI,CACF,OAAQ,KACR,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,sBAAsB,EACpC,MAAO,CACL,CACE,KAAM,2DACN,GAAI,CACF,OAAQ,KACR,KAAM,UACR,CACF,CACF,CACF,EACA,CACE,KAAM,WACN,aAAc,CAAC,EACf,MAAO,CAAC,OAAO,EACf,YAAa,CAAC,yBAAyB,EACvC,MAAO,CACL,CACE,KAAM,+DACN,GAAI,CACF,OAAQ,KACR,KAAM,cACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,4BAA4B,EAC1C,MAAO,CACL,CACE,KAAM,kEACN,GAAI,CACF,OAAQ,KACR,KAAM,iBACR,CACF,CACF,CACF,EACA,CACE,KAAM,eACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,QAAS,cAAe,eAAgB,WAAW,EAC3D,YAAa,CAAC,6BAA6B,EAC3C,MAAO,CACL,CACE,KAAM,mEACN,GAAI,CACF,OAAQ,KACR,KAAM,kBACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,aAAc,CAAC,EACf,MAAO,CAAC,GAAG,EACX,YAAa,CAAC,uBAAuB,EACrC,MAAO,CACL,CACE,KAAM,6DACN,GAAI,CACF,OAAQ,KACR,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,gBACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,QAAS,cAAe,eAAgB,WAAW,EAC3D,YAAa,CAAC,8BAA8B,EAC5C,MAAO,CACL,CACE,KAAM,oEACN,GAAI,CACF,OAAQ,KACR,KAAM,mBACR,CACF,CACF,CACF,EACA,CACE,KAAM,aACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,2BAA2B,EACzC,MAAO,CACL,CACE,KAAM,iEACN,GAAI,CACF,OAAQ,KACR,KAAM,gBACR,CACF,CACF,CACF,EACA,CACE,KAAM,QACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,EACd,MAAO,CACL,CACE,KAAM,4DACN,GAAI,CACF,OAAQ,KACR,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,QACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,sBAAsB,EACpC,MAAO,CACL,CACE,KAAM,4DACN,GAAI,CACF,OAAQ,KACR,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,UACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,QAAS,cAAe,eAAgB,WAAW,EAC3D,YAAa,CAAC,wBAAwB,EACtC,MAAO,CACL,CACE,KAAM,8DACN,GAAI,CACF,OAAQ,KACR,KAAM,aACR,CACF,CACF,CACF,EACA,CACE,KAAM,kBACN,aAAc,CAAC,EACf,MAAO,CAAC,aAAa,EACrB,YAAa,CAAC,gCAAgC,EAC9C,MAAO,CACL,CACE,KAAM,sEACN,GAAI,CACF,OAAQ,KACR,KAAM,qBACR,CACF,CACF,CACF,EACA,CACE,KAAM,UACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,wBAAwB,EACtC,MAAO,CACL,CACE,KAAM,8DACN,GAAI,CACF,OAAQ,KACR,KAAM,aACR,CACF,CACF,CACF,EACA,CACE,KAAM,WACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,yBAAyB,EACvC,MAAO,CACL,CACE,KAAM,+DACN,GAAI,CACF,OAAQ,KACR,KAAM,cACR,CACF,CACF,CACF,EACA,CACE,KAAM,cACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,4BAA4B,EAC1C,MAAO,CACL,CACE,KAAM,kEACN,GAAI,CACF,OAAQ,KACR,KAAM,iBACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,aAAc,CAAC,EACf,MAAO,CAAC,QAAS,cAAe,WAAW,EAC3C,YAAa,CAAC,uBAAuB,EACrC,MAAO,CACL,CACE,KAAM,6DACN,GAAI,CACF,OAAQ,KACR,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,YACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,0BAA0B,EACxC,MAAO,CACL,CACE,KAAM,gEACN,GAAI,CACF,OAAQ,KACR,KAAM,eACR,CACF,CACF,CACF,EACA,CACE,KAAM,WACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,EACd,MAAO,CACL,CACE,KAAM,+DACN,GAAI,CACF,OAAQ,KACR,KAAM,cACR,CACF,CACF,CACF,EACA,CACE,KAAM,SACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,uBAAuB,EACrC,MAAO,CACL,CACE,KAAM,6DACN,GAAI,CACF,OAAQ,KACR,KAAM,YACR,CACF,CACF,CACF,EACA,CACE,KAAM,QACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,sBAAsB,EACpC,MAAO,CACL,CACE,KAAM,4DACN,GAAI,CACF,OAAQ,KACR,KAAM,WACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,aAAc,CAAC,MAAM,EACrB,MAAO,CAAC,EACR,YAAa,CAAC,qBAAqB,EACnC,MAAO,CACL,CACE,KAAM,2DACN,GAAI,CACF,OAAQ,KACR,KAAM,UACR,CACF,CACF,CACF,EACA,CACE,KAAM,OACN,aAAc,CAAC,EACf,MAAO,CAAC,EACR,YAAa,CAAC,sBAAuB,sBAAsB,EAC3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","names":["createMatchPath","resolveImport","importPath","config","cosmiconfig","loadConfig","z","DEFAULT_COMPONENTS","DEFAULT_LIB","explorer","rawConfigSchema","configSchema","getConfig","cwd","config","getRawConfig","resolveConfigPaths","tsConfig","resolveImport","configResult","detect","getPackageManager","targetDir","packageManager","chalk","logger","args","handleError","error","logger","chalk","Command","execa","existsSync","fs","ora","path","prompts","z","COMPONENTS","getComponentDependencies","componentName","visited","component","COMPONENTS","comp","dependencies","dependency","childDependencies","INVALID_COMPONENT_ERROR","getAllComponentsToWrite","componentNames","uniqueComponents","allDependencies","dep","fileURLToPath","filePath","fileDir","path","addOptionsSchema","z","add","Command","components","opts","options","cwd","existsSync","logger","config","getConfig","promptForConfig","selectedComponents","prompts","COMPONENTS","entry","spinner","ora","componentsToWrite","getAllComponentsToWrite","err","INVALID_COMPONENT_ERROR","component","npmPackages","comp","writeFiles","packageManager","getPackageManager","uniqueNpmPackages","execa","error","handleError","paths","overwriteFlag","compPath","targetDir","fs","chalk","overwrite","readFromPath","content","fixImports","icon","rawfile","componentsAlias","libAlias","highlight","text","DEFAULT_COMPONENTS","DEFAULT_LIB","rawConfigSchema","proceed","targetPath","resolveConfigPaths","Command","path","fs","getPackageInfo","packageJsonPath","main","packageInfo","getPackageInfo","program","Command","add"]}
|