@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.
Files changed (30) hide show
  1. package/__generated/components/ui/accordion.tsx +29 -31
  2. package/__generated/components/ui/alert-dialog.tsx +18 -24
  3. package/__generated/components/ui/avatar.tsx +34 -41
  4. package/__generated/components/ui/badge.tsx +2 -2
  5. package/__generated/components/ui/button.tsx +2 -5
  6. package/__generated/components/ui/card.tsx +39 -51
  7. package/__generated/components/ui/checkbox.tsx +23 -24
  8. package/__generated/components/ui/context-menu.tsx +27 -22
  9. package/__generated/components/ui/dialog.tsx +39 -41
  10. package/__generated/components/ui/dropdown-menu.tsx +26 -21
  11. package/__generated/components/ui/hover-card.tsx +2 -2
  12. package/__generated/components/ui/input.tsx +17 -18
  13. package/__generated/components/ui/label.tsx +20 -21
  14. package/__generated/components/ui/menubar.tsx +44 -46
  15. package/__generated/components/ui/navigation-menu.tsx +13 -13
  16. package/__generated/components/ui/popover.tsx +4 -4
  17. package/__generated/components/ui/progress.tsx +3 -3
  18. package/__generated/components/ui/radio-group.tsx +27 -29
  19. package/__generated/components/ui/select.tsx +63 -74
  20. package/__generated/components/ui/separator.tsx +16 -17
  21. package/__generated/components/ui/switch.tsx +58 -59
  22. package/__generated/components/ui/table.tsx +69 -76
  23. package/__generated/components/ui/tabs.tsx +49 -52
  24. package/__generated/components/ui/textarea.tsx +20 -21
  25. package/__generated/components/ui/toggle-group.tsx +4 -6
  26. package/__generated/components/ui/toggle.tsx +4 -4
  27. package/__generated/components/ui/tooltip.tsx +4 -4
  28. package/dist/index.js +3 -3
  29. package/dist/index.js.map +1 -1
  30. 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
- React.ElementRef<typeof TabsPrimitive.List>,
10
- React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>
11
- >(({ className, ...props }, ref) => (
12
- <TabsPrimitive.List
13
- ref={ref}
14
- className={cn(
15
- 'web:inline-flex h-10 native:h-12 items-center justify-center rounded-md bg-muted p-1 native:px-1.5',
16
- className
17
- )}
18
- {...props}
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
- React.ElementRef<typeof TabsPrimitive.Trigger>,
25
- React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
26
- >(({ className, ...props }, ref) => {
27
- const { value } = TabsPrimitive.useRootContext();
28
- return (
29
- <TextClassContext.Provider
30
- value={cn(
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
- {...props}
44
- />
45
- </TextClassContext.Provider>
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
- React.ElementRef<typeof TabsPrimitive.Content>,
52
- React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
53
- >(({ className, ...props }, ref) => (
54
- <TabsPrimitive.Content
55
- ref={ref}
56
- className={cn(
57
- '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',
58
- className
59
- )}
60
- {...props}
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
- React.ElementRef<typeof TextInput>,
7
- React.ComponentPropsWithoutRef<typeof TextInput>
8
- >(({ className, multiline = true, numberOfLines = 4, placeholderClassName, ...props }, ref) => {
9
- return (
10
- <TextInput
11
- ref={ref}
12
- className={cn(
13
- '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',
14
- props.editable === false && 'opacity-50 web:cursor-not-allowed',
15
- className
16
- )}
17
- placeholderClassName={cn('text-muted-foreground', placeholderClassName)}
18
- multiline={multiline}
19
- numberOfLines={numberOfLines}
20
- textAlignVertical='top'
21
- {...props}
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
- React.ElementRef<typeof ToggleGroupPrimitive.Root>,
13
- React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &
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
- React.ElementRef<typeof ToggleGroupPrimitive.Item>,
39
- React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &
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
- React.ElementRef<typeof TogglePrimitive.Root>,
50
- React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>
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
- React.ElementRef<typeof TooltipPrimitive.Content>,
13
- React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & { portalHost?: string }
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(l){x(l)}}if(v(c.join(i,`${t}.tsx`))){let l=c.join(i,`${t}.tsx`);if(!s){a.info(`File already exists: ${u.bgCyan(`${t}.tsx`)} was skipped. To overwrite, run with the ${u.green("--overwrite")} flag.`);continue}let{overwrite:m}=await w({type:"confirm",name:"overwrite",message:`File already exists: ${u.yellow(l)}. Would you like to overwrite?`,initial:!1});if(!m){a.info(`Skipped ${t}.tsx`);continue}}r.start(`Adding the ${t} icon...`);try{await g.writeFile(c.join(i,`${t}.tsx`),`import { ${t} } from 'lucide-react-native';
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(l){x(l)}}}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:"select",name:"platforms",message:`Which ${o("platforms")} do you support?`,choices:[{title:"Universal (Web, iOS, and Android)",value:"universal"},{title:"Native Only (iOS and Android)",value:"native-only"}]},{type:"text",name:"components",message:`Configure the import alias for ${o("components")}:`,initial:E},{type:"text",name:"lib",message:`Configure the import alias for ${o("lib")}:`,initial:O}]),r=k.parse({platforms:n.platforms,aliases:{lib:n.lib,components:n.components}}),{proceed:s}=await w({type:"confirm",name:"proceed",message:`Write configuration to ${o("components.json")}. Proceed?`,initial:!0});if(s){a.info("");let t=D("Writing components.json...").start(),i=c.resolve(e,"components.json");await g.writeFile(i,JSON.stringify(r,null,2),"utf8"),t.succeed()}return await S(e,r)}import{Command as ne}from"commander";import ee from"path";import oe from"fs-extra";function M(){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 M(),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();
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":"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AAa,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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-native-reusables/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Add Universal components and primitives to your React-Native project.",
5
5
  "publishConfig": {
6
6
  "access": "public"