diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 000000000..e5b6d8d6a --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 000000000..abe15f5fd --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json", + "changelog": ["@changesets/changelog-github", { "repo": "shadcn/ui" }], + "commit": false, + "fixed": [], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": ["www", "playground", "**-template"] +} diff --git a/.changeset/khaki-roses-rule.md b/.changeset/khaki-roses-rule.md new file mode 100644 index 000000000..d45b54dd4 --- /dev/null +++ b/.changeset/khaki-roses-rule.md @@ -0,0 +1,5 @@ +--- +"@shadcn/ui": patch +--- + +Initial commit. diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 000000000..df20e3d67 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,45 @@ +# Adapted from create-t3-app. + +name: Publish + +on: + push: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +jobs: + build: + if: ${{ github.repository_owner == 'shadcn' }} + name: Create a PR for release workflow + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Use PNPM + uses: pnpm/action-setup@v2.2.4 + + - name: Use Node.js 18 + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: "pnpm" + + - name: Install NPM Dependencies + run: pnpm install + + - name: Create Version PR or Publish to NPM + id: changesets + uses: changesets/action@v1.4.1 + with: + commit: "chore(release): version packages" + title: "chore(release): version packages" + publish: pnpm build:cli + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }} + NODE_ENV: "production" diff --git a/.prettierignore b/.prettierignore index 3aea320e0..59a3d1274 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,5 @@ dist node_modules .next build -.contentlayer \ No newline at end of file +.contentlayer +apps/www/pages/api/components.json \ No newline at end of file diff --git a/apps/www/components/main-nav.tsx b/apps/www/components/main-nav.tsx index ba7f37ec5..db71dd845 100644 --- a/apps/www/components/main-nav.tsx +++ b/apps/www/components/main-nav.tsx @@ -7,6 +7,7 @@ import { allDocs } from "contentlayer/generated" import { siteConfig } from "@/config/site" import { cn } from "@/lib/utils" import { Icons } from "@/components/icons" +import { buttonVariants } from "@/components/ui/button" import { NavigationMenu, NavigationMenuContent, @@ -16,8 +17,7 @@ import { NavigationMenuTrigger, navigationMenuTriggerStyle, } from "@/components/ui/navigation-menu" -import { buttonVariants } from "./ui/button" -import { Separator } from "./ui/separator" +import { Separator } from "@/components/ui/separator" export function MainNav() { return ( diff --git a/apps/www/components/ui/command.tsx b/apps/www/components/ui/command.tsx index fc6a10404..d0d7cbf80 100644 --- a/apps/www/components/ui/command.tsx +++ b/apps/www/components/ui/command.tsx @@ -2,8 +2,8 @@ import * as React from "react" import { DialogProps } from "@radix-ui/react-dialog" -import { Command as CommandPrimitive, useCommandState } from "cmdk" -import { ChevronsUpDown, Search } from "lucide-react" +import { Command as CommandPrimitive } from "cmdk" +import { Search } from "lucide-react" import { cn } from "@/lib/utils" import { Dialog, DialogContent } from "@/components/ui/dialog" diff --git a/apps/www/config/components.ts b/apps/www/config/components.ts new file mode 100644 index 000000000..1efb33068 --- /dev/null +++ b/apps/www/config/components.ts @@ -0,0 +1,295 @@ +export const components = [ + { + name: "Accordion", + dependencies: ["@radix-ui/react-accordion"], + files: [ + { + name: "accordion.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Alert Dialog", + dependencies: ["@radix-ui/react-alert-dialog"], + files: [ + { + name: "alert-dialog.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Aspect Ratio", + dependencies: ["@radix-ui/react-aspect-ratio"], + files: [ + { + name: "aspect-ratio.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Avatar", + dependencies: ["@radix-ui/react-avatar"], + files: [ + { + name: "avatar.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Button", + files: [ + { + name: "button.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Checkbox", + dependencies: ["@radix-ui/react-checkbox"], + files: [ + { + name: "checkbox.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Collapsible", + dependencies: ["@radix-ui/react-collapsible"], + files: [ + { + name: "collapsible.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Command", + dependencies: ["cmdk"], + files: [ + { + name: "command.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Context Menu", + dependencies: ["@radix-ui/react-context-menu"], + files: [ + { + name: "context-menu.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Dialog", + dependencies: ["@radix-ui/react-dialog"], + files: [ + { + name: "dialog.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Dropdown Menu", + dependencies: ["@radix-ui/react-dropdown-menu"], + files: [ + { + name: "dropdown-menu.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Hover Card", + dependencies: ["@radix-ui/react-hover-card"], + files: [ + { + name: "hover-card.tsx", + dir: "components/ui", + }, + ], + }, + { name: "Input", files: [{ name: "input.tsx", dir: "components/ui" }] }, + { + name: "Label", + dependencies: ["@radix-ui/react-label"], + files: [ + { + name: "label.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Menubar", + dependencies: ["@radix-ui/react-menubar"], + files: [ + { + name: "menubar.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Navigation Menu", + dependencies: ["@radix-ui/react-navigation-menu"], + files: [ + { + name: "navigation-menu.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Popover", + dependencies: ["@radix-ui/react-popover"], + files: [ + { + name: "popover.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Progress", + dependencies: ["@radix-ui/react-progress"], + files: [ + { + name: "progress.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Radio Group", + dependencies: ["@radix-ui/react-radio-group"], + files: [ + { + name: "radio-group.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Scroll-area", + dependencies: ["@radix-ui/react-scroll-area"], + files: [ + { + name: "scroll-area.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Select", + dependencies: ["@radix-ui/react-select"], + files: [ + { + name: "select.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Separator", + dependencies: ["@radix-ui/react-separator"], + files: [ + { + name: "separator.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Sheet", + dependencies: ["@radix-ui/react-dialog"], + files: [ + { + name: "sheet.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Slider", + dependencies: ["@radix-ui/react-slider"], + files: [ + { + name: "slider.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Switch", + dependencies: ["@radix-ui/react-switch"], + files: [ + { + name: "switch.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Tabs", + dependencies: ["@radix-ui/react-tabs"], + files: [ + { + name: "tabs.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Textarea", + files: [ + { + name: "textarea.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Toast", + dependencies: ["@radix-ui/react-toast"], + files: [ + { + name: "toast.tsx", + dir: "components/ui", + }, + { + name: "use-toast.ts", + dir: "hooks", + }, + ], + }, + { + name: "Toggle", + dependencies: ["@radix-ui/react-toggle"], + files: [ + { + name: "toggle.tsx", + dir: "components/ui", + }, + ], + }, + { + name: "Tooltip", + dependencies: ["@radix-ui/react-tooltip"], + files: [ + { + name: "tooltip.tsx", + dir: "components/ui", + }, + ], + }, +] diff --git a/apps/www/content/docs/primitives/context-menu.mdx b/apps/www/content/docs/primitives/context-menu.mdx index ae01b7aca..165826eca 100644 --- a/apps/www/content/docs/primitives/context-menu.mdx +++ b/apps/www/content/docs/primitives/context-menu.mdx @@ -1,6 +1,7 @@ --- title: Context Menu description: Displays a menu to the user — such as a set of actions or functions — triggered by a button. +component: true radix: link: https://www.radix-ui.com/docs/primitives/components/context-menu api: https://www.radix-ui.com/docs/primitives/components/context-menu#api-reference diff --git a/apps/www/content/docs/primitives/switch.mdx b/apps/www/content/docs/primitives/switch.mdx index c414a2ce9..fd11d65f2 100644 --- a/apps/www/content/docs/primitives/switch.mdx +++ b/apps/www/content/docs/primitives/switch.mdx @@ -1,6 +1,7 @@ --- title: Switch description: A control that allows the user to toggle between checked and not checked. +component: true radix: link: https://www.radix-ui.com/docs/primitives/components/switch api: https://www.radix-ui.com/docs/primitives/components/switch#api-reference diff --git a/apps/www/package.json b/apps/www/package.json index f2466405d..27d5b4967 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -4,7 +4,8 @@ "private": true, "scripts": { "dev": "next dev", - "build": "next build", + "build": "pnpm build:components && next build", + "build:components": "ts-node --esm --project ./tsconfig.scripts.json ./scripts/build-components.ts", "start": "next start", "lint": "next lint", "preview": "next build && next start", diff --git a/apps/www/pages/api/components.json b/apps/www/pages/api/components.json new file mode 100644 index 000000000..0d34d5f3d --- /dev/null +++ b/apps/www/pages/api/components.json @@ -0,0 +1,334 @@ +[ + { + "name": "Accordion", + "dependencies": ["@radix-ui/react-accordion"], + "files": [ + { + "name": "accordion.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n svg]:rotate-180\",\n className\n )}\n {...props}\n >\n {children}\n \n \n \n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n
{children}
\n \n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n" + } + ] + }, + { + "name": "Alert Dialog", + "dependencies": ["@radix-ui/react-alert-dialog"], + "files": [ + { + "name": "alert-dialog.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as AlertDialogPrimitive from \"@radix-ui/react-alert-dialog\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst AlertDialog = AlertDialogPrimitive.Root\n\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\n\nconst AlertDialogPortal = ({\n className,\n children,\n ...props\n}: AlertDialogPrimitive.AlertDialogPortalProps) => (\n \n
\n {children}\n
\n
\n)\nAlertDialogPortal.displayName = AlertDialogPrimitive.Portal.displayName\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n \n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n)\nAlertDialogHeader.displayName = \"AlertDialogHeader\"\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n)\nAlertDialogFooter.displayName = \"AlertDialogFooter\"\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAlertDialogDescription.displayName =\n AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n" + } + ] + }, + { + "name": "Aspect Ratio", + "dependencies": ["@radix-ui/react-aspect-ratio"], + "files": [ + { + "name": "aspect-ratio.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as AspectRatioPrimitive from \"@radix-ui/react-aspect-ratio\"\n\nconst AspectRatio = AspectRatioPrimitive.Root\n\nexport { AspectRatio }\n" + } + ] + }, + { + "name": "Avatar", + "dependencies": ["@radix-ui/react-avatar"], + "files": [ + { + "name": "avatar.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Avatar = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n" + } + ] + }, + { + "name": "Button", + "files": [ + { + "name": "button.tsx", + "dir": "components/ui", + "content": "import * as React from \"react\"\nimport { VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"active:scale-95 inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 dark:hover:bg-slate-800 dark:hover:text-slate-100 disabled:opacity-50 dark:focus:ring-slate-400 disabled:pointer-events-none dark:focus:ring-offset-slate-900 data-[state=open]:bg-slate-100 dark:data-[state=open]:bg-slate-800\",\n {\n variants: {\n variant: {\n default:\n \"bg-slate-900 text-white hover:bg-slate-700 dark:bg-slate-50 dark:text-slate-900\",\n destructive:\n \"bg-red-500 text-white hover:bg-red-600 dark:hover:bg-red-600\",\n outline:\n \"bg-transparent border border-slate-200 hover:bg-slate-100 dark:border-slate-700 dark:text-slate-100\",\n subtle:\n \"bg-slate-100 text-slate-900 hover:bg-slate-200 dark:bg-slate-700 dark:text-slate-100\",\n ghost:\n \"bg-transparent hover:bg-slate-100 dark:hover:bg-slate-800 dark:text-slate-100 dark:hover:text-slate-100 data-[state=open]:bg-transparent dark:data-[state=open]:bg-transparent\",\n link: \"bg-transparent dark:bg-transparent underline-offset-4 hover:underline text-slate-900 dark:text-slate-100 hover:bg-transparent dark:hover:bg-transparent\",\n },\n size: {\n default: \"h-10 py-2 px-4\",\n sm: \"h-9 px-2 rounded-md\",\n lg: \"h-11 px-8 rounded-md\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes,\n VariantProps {}\n\nconst Button = React.forwardRef(\n ({ className, variant, size, ...props }, ref) => {\n return (\n \n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n" + } + ] + }, + { + "name": "Checkbox", + "dependencies": ["@radix-ui/react-checkbox"], + "files": [ + { + "name": "checkbox.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n \n \n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n" + } + ] + }, + { + "name": "Collapsible", + "dependencies": ["@radix-ui/react-collapsible"], + "files": [ + { + "name": "collapsible.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n" + } + ] + }, + { + "name": "Command", + "dependencies": ["cmdk"], + "files": [ + { + "name": "command.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { DialogProps } from \"@radix-ui/react-dialog\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { Search } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Dialog, DialogContent } from \"@/components/ui/dialog\"\n\nconst Command = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nCommand.displayName = CommandPrimitive.displayName\n\ninterface CommandDialogProps extends DialogProps {}\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => {\n return (\n \n \n \n {children}\n \n \n \n )\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n \n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>((props, ref) => (\n \n))\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes) => {\n return (\n \n )\n}\nCommandShortcut.displayName = \"CommandShortcut\"\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n" + } + ] + }, + { + "name": "Context Menu", + "dependencies": ["@radix-ui/react-context-menu"], + "files": [ + { + "name": "context-menu.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ContextMenu = ContextMenuPrimitive.Root\n\nconst ContextMenuTrigger = ContextMenuPrimitive.Trigger\n\nconst ContextMenuGroup = ContextMenuPrimitive.Group\n\nconst ContextMenuPortal = ContextMenuPrimitive.Portal\n\nconst ContextMenuSub = ContextMenuPrimitive.Sub\n\nconst ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup\n\nconst ContextMenuSubTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n \n {children}\n \n \n))\nContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName\n\nconst ContextMenuSubContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName\n\nconst ContextMenuContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n))\nContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName\n\nconst ContextMenuItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n \n))\nContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName\n\nconst ContextMenuCheckboxItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, checked, ...props }, ref) => (\n \n \n \n \n \n \n {children}\n \n))\nContextMenuCheckboxItem.displayName =\n ContextMenuPrimitive.CheckboxItem.displayName\n\nconst ContextMenuRadioItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n \n \n \n {children}\n \n))\nContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName\n\nconst ContextMenuLabel = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n \n))\nContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName\n\nconst ContextMenuSeparator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName\n\nconst ContextMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes) => {\n return (\n \n )\n}\nContextMenuShortcut.displayName = \"ContextMenuShortcut\"\n\nexport {\n ContextMenu,\n ContextMenuTrigger,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuCheckboxItem,\n ContextMenuRadioItem,\n ContextMenuLabel,\n ContextMenuSeparator,\n ContextMenuShortcut,\n ContextMenuGroup,\n ContextMenuPortal,\n ContextMenuSub,\n ContextMenuSubContent,\n ContextMenuSubTrigger,\n ContextMenuRadioGroup,\n}\n" + } + ] + }, + { + "name": "Dialog", + "dependencies": ["@radix-ui/react-dialog"], + "files": [ + { + "name": "dialog.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = ({\n className,\n children,\n ...props\n}: DialogPrimitive.DialogPortalProps) => (\n \n
\n {children}\n
\n
\n)\nDialogPortal.displayName = DialogPrimitive.Portal.displayName\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n {children}\n \n \n Close\n \n \n \n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n" + } + ] + }, + { + "name": "Dropdown Menu", + "dependencies": ["@radix-ui/react-dropdown-menu"], + "files": [ + { + "name": "dropdown-menu.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n \n {children}\n \n \n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, sideOffset = 4, ...props }, ref) => (\n \n \n \n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n \n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, checked, ...props }, ref) => (\n \n \n \n \n \n \n {children}\n \n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n \n \n \n {children}\n \n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n \n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes) => {\n return (\n \n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n" + } + ] + }, + { + "name": "Hover Card", + "dependencies": ["@radix-ui/react-hover-card"], + "files": [ + { + "name": "hover-card.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n \n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n" + } + ] + }, + { + "name": "Input", + "files": [ + { + "name": "input.tsx", + "dir": "components/ui", + "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes {}\n\nconst Input = React.forwardRef(\n ({ className, ...props }, ref) => {\n return (\n \n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n" + } + ] + }, + { + "name": "Label", + "dependencies": ["@radix-ui/react-label"], + "files": [ + { + "name": "label.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Label = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n" + } + ] + }, + { + "name": "Menubar", + "dependencies": ["@radix-ui/react-menubar"], + "files": [ + { + "name": "menubar.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as MenubarPrimitive from \"@radix-ui/react-menubar\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst MenubarMenu = MenubarPrimitive.Menu\n\nconst MenubarGroup = MenubarPrimitive.Group\n\nconst MenubarPortal = MenubarPrimitive.Portal\n\nconst MenubarSub = MenubarPrimitive.Sub\n\nconst MenubarRadioGroup = MenubarPrimitive.RadioGroup\n\nconst Menubar = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nMenubar.displayName = MenubarPrimitive.Root.displayName\n\nconst MenubarTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nMenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName\n\nconst MenubarSubTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n \n {children}\n \n \n))\nMenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName\n\nconst MenubarSubContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nMenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName\n\nconst MenubarContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(\n (\n { className, align = \"start\", alignOffset = -4, sideOffset = 8, ...props },\n ref\n ) => (\n \n \n \n )\n)\nMenubarContent.displayName = MenubarPrimitive.Content.displayName\n\nconst MenubarItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n \n))\nMenubarItem.displayName = MenubarPrimitive.Item.displayName\n\nconst MenubarCheckboxItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, checked, ...props }, ref) => (\n \n \n \n \n \n \n {children}\n \n))\nMenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName\n\nconst MenubarRadioItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n \n \n \n {children}\n \n))\nMenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName\n\nconst MenubarLabel = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n \n))\nMenubarLabel.displayName = MenubarPrimitive.Label.displayName\n\nconst MenubarSeparator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nMenubarSeparator.displayName = MenubarPrimitive.Separator.displayName\n\nconst MenubarShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes) => {\n return (\n \n )\n}\nMenubarShortcut.displayname = \"MenubarShortcut\"\n\nexport {\n Menubar,\n MenubarMenu,\n MenubarTrigger,\n MenubarContent,\n MenubarItem,\n MenubarSeparator,\n MenubarLabel,\n MenubarCheckboxItem,\n MenubarRadioGroup,\n MenubarRadioItem,\n MenubarPortal,\n MenubarSubContent,\n MenubarSubTrigger,\n MenubarGroup,\n MenubarSub,\n MenubarShortcut,\n}\n" + } + ] + }, + { + "name": "Navigation Menu", + "dependencies": ["@radix-ui/react-navigation-menu"], + "files": [ + { + "name": "navigation-menu.tsx", + "dir": "components/ui", + "content": "import * as React from \"react\"\nimport * as NavigationMenuPrimitive from \"@radix-ui/react-navigation-menu\"\nimport { cva } from \"class-variance-authority\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst NavigationMenu = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n {children}\n \n \n))\nNavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName\n\nconst NavigationMenuList = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nNavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName\n\nconst NavigationMenuItem = NavigationMenuPrimitive.Item\n\nconst navigationMenuTriggerStyle = cva(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus:outline-none focus:bg-slate-100 disabled:opacity-50 dark:focus:bg-slate-800 disabled:pointer-events-none bg-transparent hover:bg-slate-100 dark:hover:bg-slate-800 dark:text-slate-100 dark:hover:text-slate-100 data-[state=open]:bg-slate-50 dark:data-[state=open]:bg-slate-800 data-[active]:bg-slate-50 dark:data-[active]:bg-slate-800 h-10 py-2 px-4 group w-max\"\n)\n\nconst NavigationMenuTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n {children}{\" \"}\n \n \n))\nNavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName\n\nconst NavigationMenuContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nNavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName\n\nconst NavigationMenuLink = NavigationMenuPrimitive.Link\n\nconst NavigationMenuViewport = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n
\n \n
\n))\nNavigationMenuViewport.displayName =\n NavigationMenuPrimitive.Viewport.displayName\n\nconst NavigationMenuIndicator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n
\n \n))\nNavigationMenuIndicator.displayName =\n NavigationMenuPrimitive.Indicator.displayName\n\nexport {\n navigationMenuTriggerStyle,\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuIndicator,\n NavigationMenuViewport,\n}\n" + } + ] + }, + { + "name": "Popover", + "dependencies": ["@radix-ui/react-popover"], + "files": [ + { + "name": "popover.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n \n \n \n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }\n" + } + ] + }, + { + "name": "Progress", + "dependencies": ["@radix-ui/react-progress"], + "files": [ + { + "name": "progress.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Progress = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, value, ...props }, ref) => (\n \n \n \n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }\n" + } + ] + }, + { + "name": "Radio Group", + "dependencies": ["@radix-ui/react-radio-group"], + "files": [ + { + "name": "radio-group.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => {\n return (\n \n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => {\n return (\n \n \n \n \n \n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n" + } + ] + }, + { + "name": "Scroll-area", + "dependencies": ["@radix-ui/react-scroll-area"], + "files": [ + { + "name": "scroll-area.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n {children}\n \n \n \n \n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n \n \n \n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n" + } + ] + }, + { + "name": "Select", + "dependencies": ["@radix-ui/react-select"], + "files": [ + { + "name": "select.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n {children}\n \n \n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n {children}\n \n \n \n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n \n \n \n\n {children}\n \n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n}\n" + } + ] + }, + { + "name": "Separator", + "dependencies": ["@radix-ui/react-separator"], + "files": [ + { + "name": "separator.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n \n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n" + } + ] + }, + { + "name": "Sheet", + "dependencies": ["@radix-ui/react-dialog"], + "files": [ + { + "name": "sheet.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { VariantProps, cva } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst portalVariants = cva(\"fixed inset-0 z-50 flex\", {\n variants: {\n position: {\n top: \"items-start\",\n bottom: \"items-end\",\n left: \"justify-start\",\n right: \"justify-end\",\n },\n },\n defaultVariants: { position: \"right\" },\n})\n\ninterface SheetPortalProps\n extends SheetPrimitive.DialogPortalProps,\n VariantProps {}\n\nconst SheetPortal = ({\n position,\n className,\n children,\n ...props\n}: SheetPortalProps) => (\n \n
{children}
\n
\n)\nSheetPortal.displayName = SheetPrimitive.Portal.displayName\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n \"fixed z-50 scale-100 gap-4 bg-white p-6 opacity-100 dark:bg-slate-900\",\n {\n variants: {\n position: {\n top: \"animate-in slide-in-from-top w-full duration-300\",\n bottom: \"animate-in slide-in-from-bottom w-full duration-300\",\n left: \"animate-in slide-in-from-left h-full duration-300\",\n right: \"animate-in slide-in-from-right h-full duration-300\",\n },\n size: {\n content: \"\",\n default: \"\",\n sm: \"\",\n lg: \"\",\n xl: \"\",\n full: \"\",\n },\n },\n compoundVariants: [\n {\n position: [\"top\", \"bottom\"],\n size: \"content\",\n class: \"max-h-screen\",\n },\n {\n position: [\"top\", \"bottom\"],\n size: \"default\",\n class: \"h-1/3\",\n },\n {\n position: [\"top\", \"bottom\"],\n size: \"sm\",\n class: \"h-1/4\",\n },\n {\n position: [\"top\", \"bottom\"],\n size: \"lg\",\n class: \"h-1/2\",\n },\n {\n position: [\"top\", \"bottom\"],\n size: \"xl\",\n class: \"h-5/6\",\n },\n {\n position: [\"top\", \"bottom\"],\n size: \"full\",\n class: \"h-screen\",\n },\n {\n position: [\"right\", \"left\"],\n size: \"content\",\n class: \"max-w-screen\",\n },\n {\n position: [\"right\", \"left\"],\n size: \"default\",\n class: \"w-1/3\",\n },\n {\n position: [\"right\", \"left\"],\n size: \"sm\",\n class: \"w-1/4\",\n },\n {\n position: [\"right\", \"left\"],\n size: \"lg\",\n class: \"w-1/2\",\n },\n {\n position: [\"right\", \"left\"],\n size: \"xl\",\n class: \"w-5/6\",\n },\n {\n position: [\"right\", \"left\"],\n size: \"full\",\n class: \"w-screen\",\n },\n ],\n defaultVariants: {\n position: \"right\",\n size: \"default\",\n },\n }\n)\n\nexport interface DialogContentProps\n extends React.ComponentPropsWithoutRef,\n VariantProps {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef,\n DialogContentProps\n>(({ position, size, className, children, ...props }, ref) => (\n \n \n \n {children}\n \n \n Close\n \n \n \n))\nSheetContent.displayName = SheetPrimitive.Content.displayName\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes) => (\n \n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\n\nexport {\n Sheet,\n SheetTrigger,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n" + } + ] + }, + { + "name": "Slider", + "dependencies": ["@radix-ui/react-slider"], + "files": [ + { + "name": "slider.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Slider = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n \n \n \n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n" + } + ] + }, + { + "name": "Switch", + "dependencies": ["@radix-ui/react-switch"], + "files": [ + { + "name": "switch.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Switch = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n" + } + ] + }, + { + "name": "Tabs", + "dependencies": ["@radix-ui/react-tabs"], + "files": [ + { + "name": "tabs.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n" + } + ] + }, + { + "name": "Textarea", + "files": [ + { + "name": "textarea.tsx", + "dir": "components/ui", + "content": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface TextareaProps\n extends React.TextareaHTMLAttributes {}\n\nconst Textarea = React.forwardRef(\n ({ className, ...props }, ref) => {\n return (\n \n )\n }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n" + } + ] + }, + { + "name": "Toast", + "dependencies": ["@radix-ui/react-toast"], + "files": [ + { + "name": "toast.tsx", + "dir": "components/ui", + "content": "import * as React from \"react\"\nimport * as ToastPrimitives from \"@radix-ui/react-toast\"\nimport { VariantProps, cva } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ToastProvider = ToastPrimitives.Provider\n\nconst ToastViewport = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nToastViewport.displayName = ToastPrimitives.Viewport.displayName\n\nconst toastVariants = cva(\n \"data-[swipe=move]:transition-none grow-1 group relative pointer-events-auto flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full mt-4 data-[state=closed]:slide-out-to-right-full dark:border-slate-700 last:mt-0 sm:last:mt-4\",\n {\n variants: {\n variant: {\n default:\n \"bg-white border-slate-200 dark:bg-slate-800 dark:border-slate-700\",\n destructive:\n \"group destructive bg-red-600 text-white border-red-600 dark:border-red-600\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nconst Toast = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef &\n VariantProps\n>(({ className, variant, ...props }, ref) => {\n return (\n \n )\n})\nToast.displayName = ToastPrimitives.Root.displayName\n\nconst ToastAction = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nToastAction.displayName = ToastPrimitives.Action.displayName\n\nconst ToastClose = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n))\nToastClose.displayName = ToastPrimitives.Close.displayName\n\nconst ToastTitle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nToastTitle.displayName = ToastPrimitives.Title.displayName\n\nconst ToastDescription = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n))\nToastDescription.displayName = ToastPrimitives.Description.displayName\n\ntype ToastProps = React.ComponentPropsWithoutRef\n\ntype ToastActionElement = React.ReactElement\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n}\n" + }, + { + "name": "use-toast.ts", + "dir": "hooks", + "content": "// Inspired by react-hot-toast library\nimport * as React from \"react\"\n\nimport { ToastActionElement, type ToastProps } from \"@/components/ui/toast\"\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1000\n\ntype ToasterToast = ToastProps & {\n id: string\n title?: React.ReactNode\n description?: React.ReactNode\n action?: ToastActionElement\n}\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const\n\nlet count = 0\n\nfunction genId() {\n count = (count + 1) % Number.MAX_VALUE\n return count.toString()\n}\n\ntype ActionType = typeof actionTypes\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"]\n toast: ToasterToast\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"]\n toast: Partial\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"]\n toastId?: ToasterToast[\"id\"]\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"]\n toastId?: ToasterToast[\"id\"]\n }\n\ninterface State {\n toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map>()\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId)\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n })\n }, TOAST_REMOVE_DELAY)\n\n toastTimeouts.set(toastId, timeout)\n}\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n }\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n }\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId)\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id)\n })\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n }\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n }\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n }\n }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action)\n listeners.forEach((listener) => {\n listener(memoryState)\n })\n}\n\ninterface Toast extends Omit {}\n\nfunction toast({ ...props }: Toast) {\n const id = genId()\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n })\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id })\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss()\n },\n },\n })\n\n return {\n id: id,\n dismiss,\n update,\n }\n}\n\nfunction useToast() {\n const [state, setState] = React.useState(memoryState)\n\n React.useEffect(() => {\n listeners.push(setState)\n return () => {\n const index = listeners.indexOf(setState)\n if (index > -1) {\n listeners.splice(index, 1)\n }\n }\n }, [state])\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n }\n}\n\nexport { useToast, toast }\n" + } + ] + }, + { + "name": "Toggle", + "dependencies": ["@radix-ui/react-toggle"], + "files": [ + { + "name": "toggle.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\"\nimport { VariantProps, cva } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors data-[state=on]:bg-slate-200 dark:hover:bg-slate-800 dark:data-[state=on]:bg-slate-700 focus:outline-none dark:text-slate-100 focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:focus:ring-offset-slate-900 hover:bg-slate-100 dark:hover:text-slate-100 dark:data-[state=on]:text-slate-100\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline:\n \"bg-transparent border border-slate-200 hover:bg-slate-100 dark:border-slate-700\",\n },\n size: {\n default: \"h-10 px-3\",\n sm: \"h-9 px-2.5\",\n lg: \"h-11 px-5\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nconst Toggle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef &\n VariantProps\n>(({ className, variant, size, ...props }, ref) => (\n \n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n" + } + ] + }, + { + "name": "Tooltip", + "dependencies": ["@radix-ui/react-tooltip"], + "files": [ + { + "name": "tooltip.tsx", + "dir": "components/ui", + "content": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = ({ ...props }) => \nTooltip.displayName = TooltipPrimitive.Tooltip.displayName\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, sideOffset = 4, ...props }, ref) => (\n \n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n" + } + ] + } +] diff --git a/apps/www/pages/api/components.ts b/apps/www/pages/api/components.ts new file mode 100644 index 000000000..8556d54a3 --- /dev/null +++ b/apps/www/pages/api/components.ts @@ -0,0 +1,14 @@ +import { NextApiRequest, NextApiResponse } from "next" + +import components from "./components.json" + +export default async function handler( + req: NextApiRequest, + res: NextApiResponse +) { + if (req.method !== "GET") { + return res.status(405).end() + } + + return res.status(200).json(components) +} diff --git a/apps/www/scripts/build-components.ts b/apps/www/scripts/build-components.ts new file mode 100644 index 000000000..b43d97977 --- /dev/null +++ b/apps/www/scripts/build-components.ts @@ -0,0 +1,38 @@ +import fs from "fs" +import path, { basename, dirname } from "path" + +import { components } from "../config/components" + +const payload = components + .map((component) => { + const files = component.files?.map((file) => { + const content = fs.readFileSync( + path.join(process.cwd(), file.dir, file.name), + "utf8" + ) + + return { + ...file, + content, + } + }) + + return { + ...component, + files, + } + }) + .sort((a, b) => { + if (a.name < b.name) { + return -1 + } + if (a.name > b.name) { + return 1 + } + return 0 + }) + +fs.writeFileSync( + path.join(process.cwd(), "pages/api/components.json"), + JSON.stringify(payload, null, 2) +) diff --git a/apps/www/tsconfig.json b/apps/www/tsconfig.json index 0e25a206b..07db50789 100644 --- a/apps/www/tsconfig.json +++ b/apps/www/tsconfig.json @@ -33,5 +33,5 @@ ".next/types/**/*.ts", ".contentlayer/generated" ], - "exclude": ["node_modules"] + "exclude": ["node_modules", "./scripts/build-components.ts"] } diff --git a/apps/www/tsconfig.scripts.json b/apps/www/tsconfig.scripts.json new file mode 100644 index 000000000..eeb2703da --- /dev/null +++ b/apps/www/tsconfig.scripts.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.json", + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "esModuleInterop": true, + "isolatedModules": false + }, + "include": [".contentlayer/generated", "scripts/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/package.json b/package.json index 4d54a4e81..8f7eb4232 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ ], "scripts": { "build": "turbo run build", + "build:cli": "turbo --filter=@shadcn/ui build", "dev": "turbo run dev --parallel", "lint": "turbo run lint", "preview": "turbo run preview", @@ -22,11 +23,13 @@ "format:write": "turbo run format", "format:check": "turbo run format:check", "sync:templates": "./scripts/sync-templates.sh \"templates/*\"", - "prepare": "husky install" + "prepare": "husky install", + "release": "changeset version" }, "packageManager": "pnpm@7.13.5", "dependencies": { "@babel/core": "^7.20.7", + "@changesets/cli": "^2.26.0", "@ianvs/prettier-plugin-sort-imports": "^3.7.1", "@tailwindcss/line-clamp": "^0.4.2", "eslint": "^8.31.0", @@ -36,6 +39,7 @@ "eslint-plugin-react": "^7.31.11", "eslint-plugin-tailwindcss": "^3.8.0", "tailwindcss-animate": "^1.0.5", + "ts-node": "^10.9.1", "turbo": "^1.6.3" }, "devDependencies": { diff --git a/packages/cli/.gitignore b/packages/cli/.gitignore new file mode 100644 index 000000000..58b6e8633 --- /dev/null +++ b/packages/cli/.gitignore @@ -0,0 +1,2 @@ +components +dist \ No newline at end of file diff --git a/packages/cli/package.json b/packages/cli/package.json new file mode 100644 index 000000000..724c4428a --- /dev/null +++ b/packages/cli/package.json @@ -0,0 +1,58 @@ +{ + "name": "@shadcn/ui", + "version": "0.0.1", + "description": "Add @shadcn/ui components to your app.", + "license": "MIT", + "author": { + "name": "shadcn", + "url": "https://twitter.com/shadcn" + }, + "repository": { + "type": "git", + "url": "https://github.com/shadcn/ui.git", + "directory": "packages/cli" + }, + "keywords": [ + "components", + "ui", + "tailwind", + "radix-ui", + "shadcn" + ], + "type": "module", + "exports": "./dist/index.js", + "bin": { + "@shadcn/cli": "./dist/index.js" + }, + "scripts": { + "dev": "tsup --watch", + "build": "tsup", + "typecheck": "tsc", + "clean": "rimraf dist && rimraf components", + "start": "node dist/index.js", + "format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache", + "format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache", + "release": "changeset version", + "pub:beta": "pnpm build && npm publish --tag beta", + "pub:next": "pnpm build && npm publish --tag next", + "pub:release": "pnpm build && npm publish" + }, + "dependencies": { + "chalk": "5.2.0", + "commander": "^10.0.0", + "execa": "^7.0.0", + "fs-extra": "^11.1.0", + "node-fetch": "^3.3.0", + "ora": "^6.1.2", + "prompts": "^2.4.2", + "zod": "^3.20.2" + }, + "devDependencies": { + "@types/fs-extra": "^11.0.1", + "@types/prompts": "^2.4.2", + "rimraf": "^4.1.3", + "tsup": "^6.6.3", + "type-fest": "^3.6.1", + "typescript": "^4.9.5" + } +} diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts new file mode 100644 index 000000000..1756475a2 --- /dev/null +++ b/packages/cli/src/index.ts @@ -0,0 +1,113 @@ +#!/usr/bin/env node +import { existsSync, promises as fs } from "fs" +import path from "path" +import { Command } from "commander" +import { execa } from "execa" +import ora from "ora" +import prompts from "prompts" + +import { Component, getAvailableComponents } from "./utils/get-components" +import { getPackageInfo } from "./utils/get-package-info" +import { getPackageManager } from "./utils/get-package-manager" +import { logger } from "./utils/logger" + +process.on("SIGINT", () => process.exit(0)) +process.on("SIGTERM", () => process.exit(0)) + +async function main() { + const packageInfo = await getPackageInfo() + + const program = new Command() + .name("@shadcn/ui") + .description("Add @shadcn/ui components to your project") + .version( + packageInfo.version || "1.0.0", + "-v, --version", + "display the version number" + ) + + program + .command("add") + .description("add components to your project") + .action(async () => { + const { components, dir } = await promptForAddOptions() + if (!components?.length) { + logger.warn("No components selected. Nothing to install.") + process.exit(0) + } + + // Create componentPath directory if it doesn't exist. + const destinationDir = path.resolve(dir) + if (!existsSync(destinationDir)) { + const spinner = ora(`Creating ${dir}...`).start() + await fs.mkdir(destinationDir, { recursive: true }) + spinner.succeed() + } + + const packageManager = getPackageManager() + + logger.success(`Installing components...`) + for (const component of components) { + const componentSpinner = ora(`${component.name}...`).start() + + // Write the files. + for (const file of component.files) { + const filePath = path.resolve(dir, file.name) + await fs.writeFile(filePath, file.content) + } + + // Install dependencies. + if (component.dependencies?.length) { + const dependencies = component.dependencies.join(" ") + await execa(packageManager, [ + packageManager === "npm" ? "install" : "add", + dependencies, + ]) + } + componentSpinner.succeed(component.name) + } + }) + + program.parse() +} + +type AddOptions = { + components: Component[] + dir: string +} + +async function promptForAddOptions() { + const availableComponents = await getAvailableComponents() + + if (!availableComponents?.length) { + logger.error( + "An error occurred while fetching components. Please try again." + ) + process.exit(0) + } + + const options = await prompts([ + { + type: "multiselect", + name: "components", + message: "Which component(s) would you like to add?", + hint: "Space to select. A to select all. I to invert selection.", + instructions: false, + + choices: availableComponents.map((component) => ({ + title: component.name, + value: component, + })), + }, + { + type: "text", + name: "dir", + message: "Where would you like to install the component(s)?", + initial: "./components/ui", + }, + ]) + + return options as AddOptions +} + +main() diff --git a/packages/cli/src/utils/get-components.ts b/packages/cli/src/utils/get-components.ts new file mode 100644 index 000000000..a26ef33f4 --- /dev/null +++ b/packages/cli/src/utils/get-components.ts @@ -0,0 +1,34 @@ +import fetch from "node-fetch" +import * as z from "zod" + +const baseUrl = + process.env.NODE_ENV === "production" + ? "https://ui.shadcn.com" + : "http://localhost:3000" + +const componentSchema = z.object({ + name: z.string(), + dependencies: z.array(z.string()).optional(), + files: z.array( + z.object({ + name: z.string(), + dir: z.string(), + content: z.string(), + }) + ), +}) + +export type Component = z.infer + +const componentsSchema = z.array(componentSchema) + +export async function getAvailableComponents() { + try { + const response = await fetch(`${baseUrl}/api/components`) + const components = await response.json() + + return componentsSchema.parse(components) + } catch (error) { + throw new Error("Failed to fetch components") + } +} diff --git a/packages/cli/src/utils/get-package-info.ts b/packages/cli/src/utils/get-package-info.ts new file mode 100644 index 000000000..c7f496192 --- /dev/null +++ b/packages/cli/src/utils/get-package-info.ts @@ -0,0 +1,9 @@ +import path from "path" +import fs from "fs-extra" +import { type PackageJson } from "type-fest" + +export function getPackageInfo() { + const packageJsonPath = path.join("package.json") + + return fs.readJSONSync(packageJsonPath) as PackageJson +} diff --git a/packages/cli/src/utils/get-package-manager.ts b/packages/cli/src/utils/get-package-manager.ts new file mode 100644 index 000000000..662d640a3 --- /dev/null +++ b/packages/cli/src/utils/get-package-manager.ts @@ -0,0 +1,17 @@ +export function getPackageManager() { + const userAgent = process.env.npm_config_user_agent + + if (!userAgent) { + return "npm" + } + + if (userAgent.startsWith("yarn")) { + return "yarn" + } + + if (userAgent.startsWith("pnpm")) { + return "pnpm" + } + + return "npm" +} diff --git a/packages/cli/src/utils/logger.ts b/packages/cli/src/utils/logger.ts new file mode 100644 index 000000000..3f49d5e9b --- /dev/null +++ b/packages/cli/src/utils/logger.ts @@ -0,0 +1,16 @@ +import chalk from "chalk" + +export const logger = { + error(...args: unknown[]) { + console.log(chalk.red(...args)) + }, + warn(...args: unknown[]) { + console.log(chalk.yellow(...args)) + }, + info(...args: unknown[]) { + console.log(chalk.cyan(...args)) + }, + success(...args: unknown[]) { + console.log(chalk.green(...args)) + }, +} diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json new file mode 100644 index 000000000..c1afb1952 --- /dev/null +++ b/packages/cli/tsconfig.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "../../tsconfig.json", + "compilerOptions": { + "isolatedModules": false, + "baseUrl": ".", + "paths": { + "@/*": ["./*"] + } + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/cli/tsup.config.ts b/packages/cli/tsup.config.ts new file mode 100644 index 000000000..2f8b5896a --- /dev/null +++ b/packages/cli/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "tsup" + +export default defineConfig({ + clean: true, + dts: true, + entry: ["src/index.ts"], + format: ["esm"], + sourcemap: true, + target: "esnext", + outDir: "dist", +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0459fb744..b1e9622d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,7 @@ importers: .: specifiers: "@babel/core": ^7.20.7 + "@changesets/cli": ^2.26.0 "@commitlint/cli": ^17.3.0 "@commitlint/config-conventional": ^17.3.0 "@ianvs/prettier-plugin-sort-imports": ^3.7.1 @@ -24,10 +25,12 @@ importers: pretty-quick: ^3.1.3 tailwindcss: ^3.1.7 tailwindcss-animate: ^1.0.5 + ts-node: ^10.9.1 turbo: ^1.6.3 typescript: 4.7.4 dependencies: "@babel/core": 7.20.7 + "@changesets/cli": 2.26.0 "@ianvs/prettier-plugin-sort-imports": 3.7.1_prettier@2.8.1 "@tailwindcss/line-clamp": 0.4.2_tailwindcss@3.2.4 eslint: 8.31.0 @@ -37,6 +40,7 @@ importers: eslint-plugin-react: 7.31.11_eslint@8.31.0 eslint-plugin-tailwindcss: 3.8.0_ts-node@10.9.1 tailwindcss-animate: 1.0.5_tailwindcss@3.2.4 + ts-node: 10.9.1_clhxslpxadjlvuwplq2f47hwvy turbo: 1.6.3 devDependencies: "@commitlint/cli": 17.3.0 @@ -300,6 +304,39 @@ importers: tailwindcss: 3.2.4_postcss@8.4.20 typescript: 4.9.4 + packages/cli: + specifiers: + "@types/fs-extra": ^11.0.1 + "@types/prompts": ^2.4.2 + chalk: 5.2.0 + commander: ^10.0.0 + execa: ^7.0.0 + fs-extra: ^11.1.0 + node-fetch: ^3.3.0 + ora: ^6.1.2 + prompts: ^2.4.2 + rimraf: ^4.1.3 + tsup: ^6.6.3 + type-fest: ^3.6.1 + typescript: ^4.9.5 + zod: ^3.20.2 + dependencies: + chalk: 5.2.0 + commander: 10.0.0 + execa: 7.0.0 + fs-extra: 11.1.0 + node-fetch: 3.3.0 + ora: 6.1.2 + prompts: 2.4.2 + zod: 3.20.2 + devDependencies: + "@types/fs-extra": 11.0.1 + "@types/prompts": 2.4.2 + rimraf: 4.1.3 + tsup: 6.6.3_typescript@4.9.5 + type-fest: 3.6.1 + typescript: 4.9.5 + templates/next-template: specifiers: "@ianvs/prettier-plugin-sort-imports": ^3.7.1 @@ -688,6 +725,241 @@ packages: "@babel/helper-validator-identifier": 7.19.1 to-fast-properties: 2.0.0 + /@changesets/apply-release-plan/6.1.3: + resolution: + { + integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/config": 2.3.0 + "@changesets/get-version-range-type": 0.3.2 + "@changesets/git": 2.0.0 + "@changesets/types": 5.2.1 + "@manypkg/get-packages": 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.1 + resolve-from: 5.0.0 + semver: 5.7.1 + dev: false + + /@changesets/assemble-release-plan/5.2.3: + resolution: + { + integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/errors": 0.1.4 + "@changesets/get-dependents-graph": 1.3.5 + "@changesets/types": 5.2.1 + "@manypkg/get-packages": 1.1.3 + semver: 5.7.1 + dev: false + + /@changesets/changelog-git/0.1.14: + resolution: + { + integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==, + } + dependencies: + "@changesets/types": 5.2.1 + dev: false + + /@changesets/cli/2.26.0: + resolution: + { + integrity: sha512-0cbTiDms+ICTVtEwAFLNW0jBNex9f5+fFv3I771nBvdnV/mOjd1QJ4+f8KtVSOrwD9SJkk9xbDkWFb0oXd8d1Q==, + } + hasBin: true + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/apply-release-plan": 6.1.3 + "@changesets/assemble-release-plan": 5.2.3 + "@changesets/changelog-git": 0.1.14 + "@changesets/config": 2.3.0 + "@changesets/errors": 0.1.4 + "@changesets/get-dependents-graph": 1.3.5 + "@changesets/get-release-plan": 3.0.16 + "@changesets/git": 2.0.0 + "@changesets/logger": 0.0.5 + "@changesets/pre": 1.0.14 + "@changesets/read": 0.5.9 + "@changesets/types": 5.2.1 + "@changesets/write": 0.2.3 + "@manypkg/get-packages": 1.1.3 + "@types/is-ci": 3.0.0 + "@types/semver": 6.2.3 + ansi-colors: 4.1.3 + chalk: 2.4.2 + enquirer: 2.3.6 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + is-ci: 3.0.1 + meow: 6.1.1 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.0.3 + resolve-from: 5.0.0 + semver: 5.7.1 + spawndamnit: 2.0.0 + term-size: 2.2.1 + tty-table: 4.1.6 + dev: false + + /@changesets/config/2.3.0: + resolution: + { + integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==, + } + dependencies: + "@changesets/errors": 0.1.4 + "@changesets/get-dependents-graph": 1.3.5 + "@changesets/logger": 0.0.5 + "@changesets/types": 5.2.1 + "@manypkg/get-packages": 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.5 + dev: false + + /@changesets/errors/0.1.4: + resolution: + { + integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==, + } + dependencies: + extendable-error: 0.1.7 + dev: false + + /@changesets/get-dependents-graph/1.3.5: + resolution: + { + integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==, + } + dependencies: + "@changesets/types": 5.2.1 + "@manypkg/get-packages": 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 5.7.1 + dev: false + + /@changesets/get-release-plan/3.0.16: + resolution: + { + integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/assemble-release-plan": 5.2.3 + "@changesets/config": 2.3.0 + "@changesets/pre": 1.0.14 + "@changesets/read": 0.5.9 + "@changesets/types": 5.2.1 + "@manypkg/get-packages": 1.1.3 + dev: false + + /@changesets/get-version-range-type/0.3.2: + resolution: + { + integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==, + } + dev: false + + /@changesets/git/2.0.0: + resolution: + { + integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/errors": 0.1.4 + "@changesets/types": 5.2.1 + "@manypkg/get-packages": 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.5 + spawndamnit: 2.0.0 + dev: false + + /@changesets/logger/0.0.5: + resolution: + { + integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==, + } + dependencies: + chalk: 2.4.2 + dev: false + + /@changesets/parse/0.3.16: + resolution: + { + integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==, + } + dependencies: + "@changesets/types": 5.2.1 + js-yaml: 3.14.1 + dev: false + + /@changesets/pre/1.0.14: + resolution: + { + integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/errors": 0.1.4 + "@changesets/types": 5.2.1 + "@manypkg/get-packages": 1.1.3 + fs-extra: 7.0.1 + dev: false + + /@changesets/read/0.5.9: + resolution: + { + integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/git": 2.0.0 + "@changesets/logger": 0.0.5 + "@changesets/parse": 0.3.16 + "@changesets/types": 5.2.1 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + dev: false + + /@changesets/types/4.1.0: + resolution: + { + integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, + } + dev: false + + /@changesets/types/5.2.1: + resolution: + { + integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==, + } + dev: false + + /@changesets/write/0.2.3: + resolution: + { + integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/types": 5.2.1 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.1 + dev: false + /@commitlint/cli/17.3.0: resolution: { @@ -804,13 +1076,13 @@ packages: "@types/node": 14.18.35 chalk: 4.1.2 cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 4.3.0_or2qrscwofpw4jwfbychkdzroy + cosmiconfig-typescript-loader: 4.3.0_7hhqzpfu2kluivkik2u4wzk42i lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1_clhxslpxadjlvuwplq2f47hwvy - typescript: 4.9.4 + ts-node: 10.9.1_tmt345f6mmvj3vdnsaqf2jblxq + typescript: 4.9.5 transitivePeerDependencies: - "@swc/core" - "@swc/wasm" @@ -1144,6 +1416,18 @@ packages: - supports-color dev: false + /@esbuild/android-arm/0.17.10: + resolution: + { + integrity: sha512-7YEBfZ5lSem9Tqpsz+tjbdsEshlO9j/REJrfv4DXgKTt1+/MHqGwbtlyxQuaSlMeUZLxUKBaX8wdzlTfHkmnLw==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm/0.17.3: resolution: { @@ -1155,6 +1439,18 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64/0.17.10: + resolution: + { + integrity: sha512-ht1P9CmvrPF5yKDtyC+z43RczVs4rrHpRqrmIuoSvSdn44Fs1n6DGlpZKdK6rM83pFLbVaSUwle8IN+TPmkv7g==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64/0.17.3: resolution: { @@ -1166,6 +1462,18 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64/0.17.10: + resolution: + { + integrity: sha512-CYzrm+hTiY5QICji64aJ/xKdN70IK8XZ6iiyq0tZkd3tfnwwSWTYH1t3m6zyaaBxkuj40kxgMyj1km/NqdjQZA==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64/0.17.3: resolution: { @@ -1177,6 +1485,18 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64/0.17.10: + resolution: + { + integrity: sha512-3HaGIowI+nMZlopqyW6+jxYr01KvNaLB5znXfbyyjuo4lE0VZfvFGcguIJapQeQMS4cX/NEispwOekJt3gr5Dg==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64/0.17.3: resolution: { @@ -1188,6 +1508,18 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64/0.17.10: + resolution: + { + integrity: sha512-J4MJzGchuCRG5n+B4EHpAMoJmBeAE1L3wGYDIN5oWNqX0tEr7VKOzw0ymSwpoeSpdCa030lagGUfnfhS7OvzrQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64/0.17.3: resolution: { @@ -1199,6 +1531,18 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64/0.17.10: + resolution: + { + integrity: sha512-ZkX40Z7qCbugeK4U5/gbzna/UQkM9d9LNV+Fro8r7HA7sRof5Rwxc46SsqeMvB5ZaR0b1/ITQ/8Y1NmV2F0fXQ==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64/0.17.3: resolution: { @@ -1210,6 +1554,18 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64/0.17.10: + resolution: + { + integrity: sha512-0m0YX1IWSLG9hWh7tZa3kdAugFbZFFx9XrvfpaCMMvrswSTvUZypp0NFKriUurHpBA3xsHVE9Qb/0u2Bbi/otg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64/0.17.3: resolution: { @@ -1221,6 +1577,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm/0.17.10: + resolution: + { + integrity: sha512-whRdrrl0X+9D6o5f0sTZtDM9s86Xt4wk1bf7ltx6iQqrIIOH+sre1yjpcCdrVXntQPCNw/G+XqsD4HuxeS+2QA==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm/0.17.3: resolution: { @@ -1232,6 +1600,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64/0.17.10: + resolution: + { + integrity: sha512-g1EZJR1/c+MmCgVwpdZdKi4QAJ8DCLP5uTgLWSAVd9wlqk9GMscaNMEViG3aE1wS+cNMzXXgdWiW/VX4J+5nTA==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64/0.17.3: resolution: { @@ -1243,6 +1623,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32/0.17.10: + resolution: + { + integrity: sha512-1vKYCjfv/bEwxngHERp7huYfJ4jJzldfxyfaF7hc3216xiDA62xbXJfRlradiMhGZbdNLj2WA1YwYFzs9IWNPw==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32/0.17.3: resolution: { @@ -1254,6 +1646,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64/0.17.10: + resolution: + { + integrity: sha512-mvwAr75q3Fgc/qz3K6sya3gBmJIYZCgcJ0s7XshpoqIAIBszzfXsqhpRrRdVFAyV1G9VUjj7VopL2HnAS8aHFA==, + } + engines: { node: ">=12" } + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64/0.17.3: resolution: { @@ -1265,6 +1669,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el/0.17.10: + resolution: + { + integrity: sha512-XilKPgM2u1zR1YuvCsFQWl9Fc35BqSqktooumOY2zj7CSn5czJn279j9TE1JEqSqz88izJo7yE4x3LSf7oxHzg==, + } + engines: { node: ">=12" } + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el/0.17.3: resolution: { @@ -1276,6 +1692,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64/0.17.10: + resolution: + { + integrity: sha512-kM4Rmh9l670SwjlGkIe7pYWezk8uxKHX4Lnn5jBZYBNlWpKMBCVfpAgAJqp5doLobhzF3l64VZVrmGeZ8+uKmQ==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64/0.17.3: resolution: { @@ -1287,6 +1715,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64/0.17.10: + resolution: + { + integrity: sha512-r1m9ZMNJBtOvYYGQVXKy+WvWd0BPvSxMsVq8Hp4GzdMBQvfZRvRr5TtX/1RdN6Va8JMVQGpxqde3O+e8+khNJQ==, + } + engines: { node: ">=12" } + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64/0.17.3: resolution: { @@ -1298,6 +1738,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-s390x/0.17.10: + resolution: + { + integrity: sha512-LsY7QvOLPw9WRJ+fU5pNB3qrSfA00u32ND5JVDrn/xG5hIQo3kvTxSlWFRP0NJ0+n6HmhPGG0Q4jtQsb6PFoyg==, + } + engines: { node: ">=12" } + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x/0.17.3: resolution: { @@ -1309,6 +1761,18 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64/0.17.10: + resolution: + { + integrity: sha512-zJUfJLebCYzBdIz/Z9vqwFjIA7iSlLCFvVi7glMgnu2MK7XYigwsonXshy9wP9S7szF+nmwrelNaP3WGanstEg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64/0.17.3: resolution: { @@ -1320,6 +1784,18 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64/0.17.10: + resolution: + { + integrity: sha512-lOMkailn4Ok9Vbp/q7uJfgicpDTbZFlXlnKT2DqC8uBijmm5oGtXAJy2ZZVo5hX7IOVXikV9LpCMj2U8cTguWA==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64/0.17.3: resolution: { @@ -1331,6 +1807,18 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64/0.17.10: + resolution: + { + integrity: sha512-/VE0Kx6y7eekqZ+ZLU4AjMlB80ov9tEz4H067Y0STwnGOYL8CsNg4J+cCmBznk1tMpxMoUOf0AbWlb1d2Pkbig==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64/0.17.3: resolution: { @@ -1342,6 +1830,18 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64/0.17.10: + resolution: + { + integrity: sha512-ERNO0838OUm8HfUjjsEs71cLjLMu/xt6bhOlxcJ0/1MG3hNqCmbWaS+w/8nFLa0DDjbwZQuGKVtCUJliLmbVgg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64/0.17.3: resolution: { @@ -1353,6 +1853,18 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64/0.17.10: + resolution: + { + integrity: sha512-fXv+L+Bw2AeK+XJHwDAQ9m3NRlNemG6Z6ijLwJAAVdu4cyoFbBWbEtyZzDeL+rpG2lWI51cXeMt70HA8g2MqIg==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64/0.17.3: resolution: { @@ -1364,6 +1876,18 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32/0.17.10: + resolution: + { + integrity: sha512-3s+HADrOdCdGOi5lnh5DMQEzgbsFsd4w57L/eLKKjMnN0CN4AIEP0DCP3F3N14xnxh3ruNc32A0Na9zYe1Z/AQ==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32/0.17.3: resolution: { @@ -1375,6 +1899,18 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64/0.17.10: + resolution: + { + integrity: sha512-oP+zFUjYNaMNmjTwlFtWep85hvwUu19cZklB3QsBOcZSs6y7hmH4LNCJ7075bsqzYaNvZFXJlAVaQ2ApITDXtw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64/0.17.3: resolution: { @@ -1631,6 +2167,32 @@ packages: tslib: 2.5.0 dev: false + /@manypkg/find-root/1.1.0: + resolution: + { + integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@types/node": 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + dev: false + + /@manypkg/get-packages/1.1.3: + resolution: + { + integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, + } + dependencies: + "@babel/runtime": 7.20.6 + "@changesets/types": 4.1.0 + "@manypkg/find-root": 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + dev: false + /@mdx-js/esbuild/2.2.1_esbuild@0.17.3: resolution: { @@ -3487,6 +4049,16 @@ packages: } dev: true + /@types/fs-extra/11.0.1: + resolution: + { + integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==, + } + dependencies: + "@types/jsonfile": 6.1.1 + "@types/node": 18.13.0 + dev: true + /@types/github-slugger/1.3.0: resolution: { @@ -3502,12 +4074,30 @@ packages: dependencies: "@types/unist": 2.0.6 + /@types/is-ci/3.0.0: + resolution: + { + integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==, + } + dependencies: + ci-info: 3.8.0 + dev: false + /@types/json5/0.0.29: resolution: { integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, } + /@types/jsonfile/6.1.1: + resolution: + { + integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==, + } + dependencies: + "@types/node": 18.13.0 + dev: true + /@types/long/4.0.2: resolution: { @@ -3542,7 +4132,6 @@ packages: { integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==, } - dev: true /@types/ms/0.7.31: resolution: @@ -3550,6 +4139,13 @@ packages: integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==, } + /@types/node/12.20.55: + resolution: + { + integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==, + } + dev: false + /@types/node/14.18.35: resolution: { @@ -3575,14 +4171,12 @@ packages: { integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==, } - dev: false /@types/normalize-package-data/2.4.1: resolution: { integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==, } - dev: true /@types/parse-json/4.0.0: resolution: @@ -3598,6 +4192,16 @@ packages: } dev: true + /@types/prompts/2.4.2: + resolution: + { + integrity: sha512-TwNx7qsjvRIUv/BCx583tqF5IINEVjCNqg9ofKHRlSoUHE62WBHrem4B1HGXcIrG511v29d1kJ9a/t2Esz7MIg==, + } + dependencies: + "@types/node": 18.13.0 + kleur: 3.0.3 + dev: true + /@types/prop-types/15.7.5: resolution: { @@ -3665,6 +4269,13 @@ packages: integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==, } + /@types/semver/6.2.3: + resolution: + { + integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==, + } + dev: false + /@types/unist/2.0.6: resolution: { @@ -3923,7 +4534,6 @@ packages: integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, } engines: { node: ">=6" } - dev: true /ansi-regex/5.0.1: resolution: @@ -3932,6 +4542,14 @@ packages: } engines: { node: ">=8" } + /ansi-regex/6.0.1: + resolution: + { + integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==, + } + engines: { node: ">=12" } + dev: false + /ansi-styles/3.2.1: resolution: { @@ -3950,6 +4568,13 @@ packages: dependencies: color-convert: 2.0.1 + /any-promise/1.3.0: + resolution: + { + integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, + } + dev: true + /anymatch/3.1.3: resolution: { @@ -4098,7 +4723,6 @@ packages: integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, } engines: { node: ">=0.10.0" } - dev: true /arrify/2.0.1: resolution: @@ -4181,6 +4805,16 @@ packages: } dev: false + /better-path-resolve/1.0.0: + resolution: + { + integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, + } + engines: { node: ">=4" } + dependencies: + is-windows: 1.0.2 + dev: false + /binary-extensions/2.2.0: resolution: { @@ -4199,6 +4833,17 @@ packages: readable-stream: 3.6.0 dev: false + /bl/5.1.0: + resolution: + { + integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==, + } + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: false + /brace-expansion/1.1.11: resolution: { @@ -4217,6 +4862,15 @@ packages: dependencies: fill-range: 7.0.1 + /breakword/1.0.5: + resolution: + { + integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==, + } + dependencies: + wcwidth: 1.0.1 + dev: false + /browserslist/4.21.4: resolution: { @@ -4247,6 +4901,37 @@ packages: ieee754: 1.2.1 dev: false + /buffer/6.0.3: + resolution: + { + integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, + } + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bundle-require/4.0.1_esbuild@0.17.10: + resolution: + { + integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + peerDependencies: + esbuild: ">=0.17" + dependencies: + esbuild: 0.17.10 + load-tsconfig: 0.2.3 + dev: true + + /cac/6.7.14: + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, + } + engines: { node: ">=8" } + dev: true + /call-bind/1.0.2: resolution: { @@ -4290,7 +4975,6 @@ packages: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 - dev: true /camelcase/5.3.1: resolution: @@ -4298,7 +4982,6 @@ packages: integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, } engines: { node: ">=6" } - dev: true /camelize/1.0.1: resolution: @@ -4351,6 +5034,14 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk/5.2.0: + resolution: + { + integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + dev: false + /character-entities-html4/2.1.0: resolution: { @@ -4376,6 +5067,13 @@ packages: } dev: false + /chardet/0.7.0: + resolution: + { + integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, + } + dev: false + /chokidar/3.5.3: resolution: { @@ -4400,6 +5098,14 @@ packages: } dev: false + /ci-info/3.8.0: + resolution: + { + integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==, + } + engines: { node: ">=8" } + dev: false + /class-variance-authority/0.4.0_typescript@4.9.4: resolution: { @@ -4414,6 +5120,24 @@ packages: typescript: 4.9.4 dev: false + /cli-cursor/4.0.0: + resolution: + { + integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + restore-cursor: 4.0.0 + dev: false + + /cli-spinners/2.7.0: + resolution: + { + integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==, + } + engines: { node: ">=6" } + dev: false + /client-only/0.0.1: resolution: { @@ -4432,6 +5156,17 @@ packages: typanion: 3.12.1 dev: false + /cliui/6.0.0: + resolution: + { + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, + } + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + /cliui/7.0.4: resolution: { @@ -4453,7 +5188,14 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true + + /clone/1.0.4: + resolution: + { + integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, + } + engines: { node: ">=0.8" } + dev: false /clsx/1.2.1: resolution: @@ -4543,6 +5285,22 @@ packages: } dev: false + /commander/10.0.0: + resolution: + { + integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==, + } + engines: { node: ">=14" } + dev: false + + /commander/4.1.1: + resolution: + { + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, + } + engines: { node: ">= 6" } + dev: true + /comment-json/4.2.3: resolution: { @@ -4654,7 +5412,7 @@ packages: } dev: false - /cosmiconfig-typescript-loader/4.3.0_or2qrscwofpw4jwfbychkdzroy: + /cosmiconfig-typescript-loader/4.3.0_7hhqzpfu2kluivkik2u4wzk42i: resolution: { integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==, @@ -4668,8 +5426,8 @@ packages: dependencies: "@types/node": 14.18.35 cosmiconfig: 7.1.0 - ts-node: 10.9.1_clhxslpxadjlvuwplq2f47hwvy - typescript: 4.9.4 + ts-node: 10.9.1_tmt345f6mmvj3vdnsaqf2jblxq + typescript: 4.9.5 dev: true /cosmiconfig/7.1.0: @@ -4692,6 +5450,17 @@ packages: integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, } + /cross-spawn/5.1.0: + resolution: + { + integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, + } + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: false + /cross-spawn/7.0.3: resolution: { @@ -4750,6 +5519,40 @@ packages: integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==, } + /csv-generate/3.4.3: + resolution: + { + integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==, + } + dev: false + + /csv-parse/4.16.3: + resolution: + { + integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==, + } + dev: false + + /csv-stringify/5.6.5: + resolution: + { + integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==, + } + dev: false + + /csv/5.5.3: + resolution: + { + integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==, + } + engines: { node: ">= 0.1.90" } + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: false + /damerau-levenshtein/1.0.8: resolution: { @@ -4821,7 +5624,6 @@ packages: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: true /decamelize/1.2.0: resolution: @@ -4829,7 +5631,6 @@ packages: integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, } engines: { node: ">=0.10.0" } - dev: true /decode-named-character-reference/1.0.2: resolution: @@ -4863,6 +5664,15 @@ packages: integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, } + /defaults/1.0.4: + resolution: + { + integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, + } + dependencies: + clone: 1.0.4 + dev: false + /define-properties/1.1.4: resolution: { @@ -4886,6 +5696,14 @@ packages: } engines: { node: ">=6" } + /detect-indent/6.1.0: + resolution: + { + integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, + } + engines: { node: ">=8" } + dev: false + /detect-libc/2.0.1: resolution: { @@ -5017,7 +5835,6 @@ packages: engines: { node: ">=8.6" } dependencies: ansi-colors: 4.1.3 - dev: true /error-ex/1.3.2: resolution: @@ -5026,7 +5843,6 @@ packages: } dependencies: is-arrayish: 0.2.1 - dev: true /es-abstract/1.20.5: resolution: @@ -5080,6 +5896,39 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 + /esbuild/0.17.10: + resolution: + { + integrity: sha512-n7V3v29IuZy5qgxx25TKJrEm0FHghAlS6QweUcyIgh/U0zYmQcvogWROitrTyZId1mHSkuhhuyEXtI9OXioq7A==, + } + engines: { node: ">=12" } + hasBin: true + requiresBuild: true + optionalDependencies: + "@esbuild/android-arm": 0.17.10 + "@esbuild/android-arm64": 0.17.10 + "@esbuild/android-x64": 0.17.10 + "@esbuild/darwin-arm64": 0.17.10 + "@esbuild/darwin-x64": 0.17.10 + "@esbuild/freebsd-arm64": 0.17.10 + "@esbuild/freebsd-x64": 0.17.10 + "@esbuild/linux-arm": 0.17.10 + "@esbuild/linux-arm64": 0.17.10 + "@esbuild/linux-ia32": 0.17.10 + "@esbuild/linux-loong64": 0.17.10 + "@esbuild/linux-mips64el": 0.17.10 + "@esbuild/linux-ppc64": 0.17.10 + "@esbuild/linux-riscv64": 0.17.10 + "@esbuild/linux-s390x": 0.17.10 + "@esbuild/linux-x64": 0.17.10 + "@esbuild/netbsd-x64": 0.17.10 + "@esbuild/openbsd-x64": 0.17.10 + "@esbuild/sunos-x64": 0.17.10 + "@esbuild/win32-arm64": 0.17.10 + "@esbuild/win32-ia32": 0.17.10 + "@esbuild/win32-x64": 0.17.10 + dev: true + /esbuild/0.17.3: resolution: { @@ -5759,6 +6608,24 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa/7.0.0: + resolution: + { + integrity: sha512-tQbH0pH/8LHTnwTrsKWideqi6rFB/QNUawEwrn+WHyz7PX1Tuz2u7wfTvbaNBdP5JD5LVWxNo8/A8CHNZ3bV6g==, + } + engines: { node: ^14.18.0 || ^16.14.0 || >=18.0.0 } + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: false + /expand-template/2.0.3: resolution: { @@ -5783,6 +6650,25 @@ packages: integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, } + /extendable-error/0.1.7: + resolution: + { + integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==, + } + dev: false + + /external-editor/3.1.0: + resolution: + { + integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, + } + engines: { node: ">=4" } + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: false + /fast-deep-equal/3.1.3: resolution: { @@ -5876,7 +6762,6 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true /find-up/5.0.0: resolution: @@ -5888,6 +6773,16 @@ packages: locate-path: 6.0.0 path-exists: 4.0.0 + /find-yarn-workspace-root2/1.2.16: + resolution: + { + integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==, + } + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: false + /flat-cache/3.0.4: resolution: { @@ -5948,6 +6843,42 @@ packages: universalify: 2.0.0 dev: true + /fs-extra/11.1.0: + resolution: + { + integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==, + } + engines: { node: ">=14.14" } + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + + /fs-extra/7.0.1: + resolution: + { + integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, + } + engines: { node: ">=6 <7 || >=8" } + dependencies: + graceful-fs: 4.2.10 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: false + + /fs-extra/8.1.0: + resolution: + { + integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, + } + engines: { node: ">=6 <7 || >=8" } + dependencies: + graceful-fs: 4.2.10 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: false + /fs.realpath/1.0.0: resolution: { @@ -6043,7 +6974,6 @@ packages: integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, } engines: { node: ">=10" } - dev: true /get-symbol-description/1.0.0: resolution: @@ -6109,6 +7039,20 @@ packages: dependencies: is-glob: 4.0.3 + /glob/7.1.6: + resolution: + { + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==, + } + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + /glob/7.1.7: resolution: { @@ -6188,7 +7132,6 @@ packages: { integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, } - dev: true /grapheme-splitter/1.0.4: resolution: @@ -6215,7 +7158,6 @@ packages: integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, } engines: { node: ">=6" } - dev: true /has-bigints/1.0.2: resolution: @@ -6422,7 +7364,6 @@ packages: { integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, } - dev: true /hosted-git-info/4.1.0: resolution: @@ -6440,6 +7381,13 @@ packages: integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==, } + /human-id/1.0.2: + resolution: + { + integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==, + } + dev: false + /human-signals/1.1.1: resolution: { @@ -6456,6 +7404,14 @@ packages: engines: { node: ">=10.17.0" } dev: true + /human-signals/4.3.0: + resolution: + { + integrity: sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==, + } + engines: { node: ">=14.18.0" } + dev: false + /husky/8.0.2: resolution: { @@ -6465,6 +7421,16 @@ packages: hasBin: true dev: true + /iconv-lite/0.4.24: + resolution: + { + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, + } + engines: { node: ">=0.10.0" } + dependencies: + safer-buffer: 2.1.2 + dev: false + /ieee754/1.2.1: resolution: { @@ -6518,7 +7484,6 @@ packages: integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, } engines: { node: ">=8" } - dev: true /inflection/2.0.1: resolution: @@ -6598,7 +7563,6 @@ packages: { integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, } - dev: true /is-arrayish/0.3.2: resolution: @@ -6648,6 +7612,16 @@ packages: } engines: { node: ">= 0.4" } + /is-ci/3.0.1: + resolution: + { + integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==, + } + hasBin: true + dependencies: + ci-info: 3.8.0 + dev: false + /is-core-module/2.11.0: resolution: { @@ -6710,6 +7684,14 @@ packages: } dev: false + /is-interactive/2.0.0: + resolution: + { + integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==, + } + engines: { node: ">=12" } + dev: false + /is-negative-zero/2.0.2: resolution: { @@ -6762,7 +7744,6 @@ packages: integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==, } engines: { node: ">=0.10.0" } - dev: true /is-plain-obj/3.0.0: resolution: @@ -6814,6 +7795,14 @@ packages: engines: { node: ">=8" } dev: true + /is-stream/3.0.0: + resolution: + { + integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dev: false + /is-string/1.0.7: resolution: { @@ -6823,6 +7812,16 @@ packages: dependencies: has-tostringtag: 1.0.0 + /is-subdir/1.2.0: + resolution: + { + integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==, + } + engines: { node: ">=4" } + dependencies: + better-path-resolve: 1.0.0 + dev: false + /is-symbol/1.0.4: resolution: { @@ -6842,6 +7841,14 @@ packages: text-extensions: 1.9.0 dev: true + /is-unicode-supported/1.3.0: + resolution: + { + integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==, + } + engines: { node: ">=12" } + dev: false + /is-weakref/1.0.2: resolution: { @@ -6850,6 +7857,14 @@ packages: dependencies: call-bind: 1.0.2 + /is-windows/1.0.2: + resolution: + { + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, + } + engines: { node: ">=0.10.0" } + dev: false + /isexe/2.0.0: resolution: { @@ -6862,6 +7877,14 @@ packages: integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==, } + /joycon/3.1.1: + resolution: + { + integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==, + } + engines: { node: ">=10" } + dev: true + /js-sdsl/4.2.0: resolution: { @@ -6913,7 +7936,6 @@ packages: { integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, } - dev: true /json-schema-traverse/0.4.1: resolution: @@ -6958,6 +7980,15 @@ packages: } dev: true + /jsonfile/4.0.0: + resolution: + { + integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, + } + optionalDependencies: + graceful-fs: 4.2.10 + dev: false + /jsonfile/6.1.0: resolution: { @@ -6967,7 +7998,6 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.10 - dev: true /jsonparse/1.3.1: resolution: @@ -6994,6 +8024,13 @@ packages: } engines: { node: ">=0.10.0" } + /kleur/3.0.3: + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, + } + engines: { node: ">=6" } + /kleur/4.1.5: resolution: { @@ -7037,8 +8074,28 @@ packages: { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, } + + /load-tsconfig/0.2.3: + resolution: + { + integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dev: true + /load-yaml-file/0.2.0: + resolution: + { + integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==, + } + engines: { node: ">=6" } + dependencies: + graceful-fs: 4.2.10 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: false + /locate-path/5.0.0: resolution: { @@ -7047,7 +8104,6 @@ packages: engines: { node: ">=8" } dependencies: p-locate: 4.1.0 - dev: true /locate-path/6.0.0: resolution: @@ -7117,12 +8173,18 @@ packages: } dev: true + /lodash.sortby/4.7.0: + resolution: + { + integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, + } + dev: true + /lodash.startcase/4.4.0: resolution: { integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, } - dev: true /lodash.truncate/4.4.2: resolution: @@ -7152,6 +8214,17 @@ packages: } dev: true + /log-symbols/5.1.0: + resolution: + { + integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==, + } + engines: { node: ">=12" } + dependencies: + chalk: 5.2.0 + is-unicode-supported: 1.3.0 + dev: false + /long/4.0.0: resolution: { @@ -7190,6 +8263,16 @@ packages: tslib: 2.5.0 dev: false + /lru-cache/4.1.5: + resolution: + { + integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, + } + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: false + /lru-cache/5.1.1: resolution: { @@ -7230,7 +8313,6 @@ packages: integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==, } engines: { node: ">=0.10.0" } - dev: true /map-obj/4.3.0: resolution: @@ -7238,7 +8320,6 @@ packages: integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==, } engines: { node: ">=8" } - dev: true /markdown-extensions/1.1.1: resolution: @@ -7518,6 +8599,26 @@ packages: - supports-color dev: false + /meow/6.1.1: + resolution: + { + integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==, + } + engines: { node: ">=8" } + dependencies: + "@types/minimist": 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: false + /meow/8.1.2: resolution: { @@ -7543,7 +8644,6 @@ packages: { integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, } - dev: true /merge2/1.4.1: resolution: @@ -7995,7 +9095,14 @@ packages: integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, } engines: { node: ">=6" } - dev: true + + /mimic-fn/4.0.0: + resolution: + { + integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, + } + engines: { node: ">=12" } + dev: false /mimic-response/3.1.0: resolution: @@ -8011,7 +9118,6 @@ packages: integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, } engines: { node: ">=4" } - dev: true /minimatch/3.1.2: resolution: @@ -8031,7 +9137,6 @@ packages: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: true /minimist/1.2.7: resolution: @@ -8039,6 +9144,14 @@ packages: integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==, } + /mixme/0.5.5: + resolution: + { + integrity: sha512-/6IupbRx32s7jjEwHcycXikJwFD5UujbVNuJFkeKLYje+92OvtuPniF6JhnFm5JCTDUhS+kYK3W/4BWYQYXz7w==, + } + engines: { node: ">= 8.0.0" } + dev: false + /mkdirp-classic/0.5.3: resolution: { @@ -8085,6 +9198,17 @@ packages: minimatch: 3.1.2 dev: true + /mz/2.7.0: + resolution: + { + integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, + } + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: true + /nanoid/3.3.4: resolution: { @@ -8309,7 +9433,6 @@ packages: resolve: 1.22.1 semver: 5.7.1 validate-npm-package-license: 3.0.4 - dev: true /normalize-package-data/3.0.3: resolution: @@ -8349,6 +9472,16 @@ packages: path-key: 3.1.1 dev: true + /npm-run-path/5.1.0: + resolution: + { + integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + path-key: 4.0.0 + dev: false + /object-assign/4.1.1: resolution: { @@ -8446,7 +9579,16 @@ packages: engines: { node: ">=6" } dependencies: mimic-fn: 2.1.0 - dev: true + + /onetime/6.0.0: + resolution: + { + integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, + } + engines: { node: ">=12" } + dependencies: + mimic-fn: 4.0.0 + dev: false /oo-ascii-tree/1.73.0: resolution: @@ -8470,6 +9612,49 @@ packages: type-check: 0.4.0 word-wrap: 1.2.3 + /ora/6.1.2: + resolution: + { + integrity: sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + bl: 5.1.0 + chalk: 5.2.0 + cli-cursor: 4.0.0 + cli-spinners: 2.7.0 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + strip-ansi: 7.0.1 + wcwidth: 1.0.1 + dev: false + + /os-tmpdir/1.0.2: + resolution: + { + integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, + } + engines: { node: ">=0.10.0" } + dev: false + + /outdent/0.5.0: + resolution: + { + integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==, + } + dev: false + + /p-filter/2.1.0: + resolution: + { + integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==, + } + engines: { node: ">=8" } + dependencies: + p-map: 2.1.0 + dev: false + /p-limit/2.3.0: resolution: { @@ -8478,7 +9663,6 @@ packages: engines: { node: ">=6" } dependencies: p-try: 2.2.0 - dev: true /p-limit/3.1.0: resolution: @@ -8497,7 +9681,6 @@ packages: engines: { node: ">=8" } dependencies: p-limit: 2.3.0 - dev: true /p-locate/5.0.0: resolution: @@ -8508,13 +9691,20 @@ packages: dependencies: p-limit: 3.1.0 + /p-map/2.1.0: + resolution: + { + integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, + } + engines: { node: ">=6" } + dev: false + /p-try/2.2.0: resolution: { integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, } engines: { node: ">=6" } - dev: true /parent-module/1.0.1: resolution: @@ -8552,7 +9742,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /parse-numeric-range/1.3.0: resolution: @@ -8599,6 +9788,14 @@ packages: } engines: { node: ">=8" } + /path-key/4.0.0: + resolution: + { + integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, + } + engines: { node: ">=12" } + dev: false + /path-parse/1.0.7: resolution: { @@ -8642,6 +9839,32 @@ packages: } engines: { node: ">=0.10.0" } + /pify/4.0.1: + resolution: + { + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, + } + engines: { node: ">=6" } + dev: false + + /pirates/4.0.5: + resolution: + { + integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==, + } + engines: { node: ">= 6" } + dev: true + + /pkg-dir/4.2.0: + resolution: + { + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, + } + engines: { node: ">=8" } + dependencies: + find-up: 4.1.0 + dev: false + /postcss-import/14.1.0_postcss@8.4.20: resolution: { @@ -8668,6 +9891,25 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.20 + /postcss-load-config/3.1.4: + resolution: + { + integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, + } + engines: { node: ">= 10" } + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.6 + yaml: 1.10.2 + dev: true + /postcss-load-config/3.1.4_postcss@8.4.20: resolution: { @@ -8780,6 +10022,19 @@ packages: tunnel-agent: 0.6.0 dev: false + /preferred-pm/3.0.3: + resolution: + { + integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==, + } + engines: { node: ">=10" } + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: false + /prelude-ls/1.2.1: resolution: { @@ -8822,6 +10077,17 @@ packages: engines: { node: ">=0.4.0" } dev: true + /prompts/2.4.2: + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, + } + engines: { node: ">= 6" } + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: false + /prop-types/15.8.1: resolution: { @@ -8883,6 +10149,13 @@ packages: long: 5.2.1 dev: false + /pseudomap/1.0.2: + resolution: + { + integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, + } + dev: false + /pump/3.0.0: resolution: { @@ -8919,7 +10192,6 @@ packages: integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, } engines: { node: ">=8" } - dev: true /quick-lru/5.1.1: resolution: @@ -9071,7 +10343,6 @@ packages: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true /read-pkg/5.2.0: resolution: @@ -9084,7 +10355,19 @@ packages: normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true + + /read-yaml-file/1.1.0: + resolution: + { + integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==, + } + engines: { node: ">=6" } + dependencies: + graceful-fs: 4.2.10 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: false /readable-stream/3.6.0: resolution: @@ -9115,7 +10398,6 @@ packages: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: true /regenerator-runtime/0.13.11: resolution: @@ -9355,6 +10637,13 @@ packages: engines: { node: ">=0.10.0" } dev: true + /require-main-filename/2.0.0: + resolution: + { + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, + } + dev: false + /resolve-from/4.0.0: resolution: { @@ -9368,7 +10657,6 @@ packages: integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, } engines: { node: ">=8" } - dev: true /resolve-global/1.0.0: resolution: @@ -9402,6 +10690,17 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /restore-cursor/4.0.0: + resolution: + { + integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false + /reusify/1.0.4: resolution: { @@ -9418,6 +10717,26 @@ packages: dependencies: glob: 7.2.3 + /rimraf/4.1.3: + resolution: + { + integrity: sha512-iyzalDLo3l5FZxxaIGUY7xI4Bf90Xt7pCipc1Mr7RsdU7H3538z+M0tlsUDrz0aHeGS9uNqiKHUJyTewwRP91Q==, + } + engines: { node: ">=14" } + hasBin: true + dev: true + + /rollup/3.18.0: + resolution: + { + integrity: sha512-J8C6VfEBjkvYPESMQYxKHxNOh4A5a3FlP+0BETGo34HEcE4eTlgCrO2+eWzlu2a/sHs2QUkZco+wscH7jhhgWg==, + } + engines: { node: ">=14.18.0", npm: ">=8.0.0" } + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /run-parallel/1.2.0: resolution: { @@ -9451,6 +10770,13 @@ packages: get-intrinsic: 1.1.3 is-regex: 1.1.4 + /safer-buffer/2.1.2: + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } + dev: false + /satori/0.0.44: resolution: { @@ -9493,7 +10819,6 @@ packages: integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, } hasBin: true - dev: true /semver/6.3.0: resolution: @@ -9523,6 +10848,13 @@ packages: dependencies: lru-cache: 6.0.0 + /set-blocking/2.0.0: + resolution: + { + integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==, + } + dev: false + /sharp/0.31.3: resolution: { @@ -9541,6 +10873,16 @@ packages: tunnel-agent: 0.6.0 dev: false + /shebang-command/1.2.0: + resolution: + { + integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, + } + engines: { node: ">=0.10.0" } + dependencies: + shebang-regex: 1.0.0 + dev: false + /shebang-command/2.0.0: resolution: { @@ -9550,6 +10892,14 @@ packages: dependencies: shebang-regex: 3.0.0 + /shebang-regex/1.0.0: + resolution: + { + integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, + } + engines: { node: ">=0.10.0" } + dev: false + /shebang-regex/3.0.0: resolution: { @@ -9583,7 +10933,6 @@ packages: { integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, } - dev: true /simple-concat/1.0.1: resolution: @@ -9612,6 +10961,13 @@ packages: is-arrayish: 0.3.2 dev: false + /sisteransi/1.0.5: + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } + dev: false + /slash/3.0.0: resolution: { @@ -9631,6 +10987,22 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true + /smartwrap/2.0.2: + resolution: + { + integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==, + } + engines: { node: ">=6" } + hasBin: true + dependencies: + array.prototype.flat: 1.3.1 + breakword: 1.0.5 + grapheme-splitter: 1.0.4 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 15.4.1 + dev: false + /sort-keys/5.0.0: resolution: { @@ -9674,12 +11046,32 @@ packages: engines: { node: ">= 8" } dev: false + /source-map/0.8.0-beta.0: + resolution: + { + integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==, + } + engines: { node: ">= 8" } + dependencies: + whatwg-url: 7.1.0 + dev: true + /space-separated-tokens/2.0.2: resolution: { integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, } + /spawndamnit/2.0.0: + resolution: + { + integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==, + } + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + dev: false + /spdx-correct/3.1.1: resolution: { @@ -9688,14 +11080,12 @@ packages: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.12 - dev: true /spdx-exceptions/2.3.0: resolution: { integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, } - dev: true /spdx-expression-parse/3.0.1: resolution: @@ -9705,14 +11095,12 @@ packages: dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.12 - dev: true /spdx-license-ids/3.0.12: resolution: { integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==, } - dev: true /split2/3.2.2: resolution: @@ -9729,6 +11117,15 @@ packages: integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, } + /stream-transform/2.1.3: + resolution: + { + integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==, + } + dependencies: + mixme: 0.5.5 + dev: false + /string-width/4.2.3: resolution: { @@ -9808,6 +11205,16 @@ packages: dependencies: ansi-regex: 5.0.1 + /strip-ansi/7.0.1: + resolution: + { + integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==, + } + engines: { node: ">=12" } + dependencies: + ansi-regex: 6.0.1 + dev: false + /strip-bom-string/1.0.0: resolution: { @@ -9831,6 +11238,14 @@ packages: engines: { node: ">=6" } dev: true + /strip-final-newline/3.0.0: + resolution: + { + integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, + } + engines: { node: ">=12" } + dev: false + /strip-indent/3.0.0: resolution: { @@ -9839,7 +11254,6 @@ packages: engines: { node: ">=8" } dependencies: min-indent: 1.0.1 - dev: true /strip-indent/4.0.0: resolution: @@ -9916,6 +11330,22 @@ packages: react: 18.2.0 dev: false + /sucrase/3.29.0: + resolution: + { + integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==, + } + engines: { node: ">=8" } + hasBin: true + dependencies: + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.5 + ts-interface-checker: 0.1.13 + dev: true + /supports-color/5.5.0: resolution: { @@ -10071,6 +11501,14 @@ packages: readable-stream: 3.6.0 dev: false + /term-size/2.2.1: + resolution: + { + integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, + } + engines: { node: ">=8" } + dev: false + /text-extensions/1.9.0: resolution: { @@ -10085,6 +11523,25 @@ packages: integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, } + /thenify-all/1.6.0: + resolution: + { + integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, + } + engines: { node: ">=0.8" } + dependencies: + thenify: 3.3.1 + dev: true + + /thenify/3.3.1: + resolution: + { + integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, + } + dependencies: + any-promise: 1.3.0 + dev: true + /through/2.3.8: resolution: { @@ -10101,6 +11558,16 @@ packages: readable-stream: 3.6.0 dev: true + /tmp/0.0.33: + resolution: + { + integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, + } + engines: { node: ">=0.6.0" } + dependencies: + os-tmpdir: 1.0.2 + dev: false + /to-fast-properties/2.0.0: resolution: { @@ -10143,6 +11610,23 @@ packages: } dev: false + /tr46/1.0.1: + resolution: + { + integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, + } + dependencies: + punycode: 2.1.1 + dev: true + + /tree-kill/1.2.2: + resolution: + { + integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, + } + hasBin: true + dev: true + /trim-lines/3.0.1: resolution: { @@ -10156,7 +11640,6 @@ packages: integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, } engines: { node: ">=8" } - dev: true /trough/2.1.0: resolution: @@ -10164,6 +11647,13 @@ packages: integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==, } + /ts-interface-checker/0.1.13: + resolution: + { + integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, + } + dev: true + /ts-node/10.9.1_clhxslpxadjlvuwplq2f47hwvy: resolution: { @@ -10197,6 +11687,40 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + /ts-node/10.9.1_tmt345f6mmvj3vdnsaqf2jblxq: + resolution: + { + integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==, + } + hasBin: true + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + dependencies: + "@cspotcode/source-map-support": 0.8.1 + "@tsconfig/node10": 1.0.9 + "@tsconfig/node12": 1.0.11 + "@tsconfig/node14": 1.0.3 + "@tsconfig/node16": 1.0.3 + "@types/node": 14.18.35 + acorn: 8.8.1 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-pattern/4.1.3: resolution: { @@ -10228,6 +11752,45 @@ packages: } dev: false + /tsup/6.6.3_typescript@4.9.5: + resolution: + { + integrity: sha512-OLx/jFllYlVeZQ7sCHBuRVEQBBa1tFbouoc/gbYakyipjVQdWy/iQOvmExUA/ewap9iQ7tbJf9pW0PgcEFfJcQ==, + } + engines: { node: ">=14.18" } + hasBin: true + peerDependencies: + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ^4.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.1_esbuild@0.17.10 + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4 + esbuild: 0.17.10 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 3.1.4 + resolve-from: 5.0.0 + rollup: 3.18.0 + source-map: 0.8.0-beta.0 + sucrase: 3.29.0 + tree-kill: 1.2.2 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + /tsutils/3.21.0_typescript@4.7.4: resolution: { @@ -10254,6 +11817,23 @@ packages: typescript: 4.9.4 dev: true + /tty-table/4.1.6: + resolution: + { + integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==, + } + engines: { node: ">=8.0.0" } + hasBin: true + dependencies: + chalk: 4.1.2 + csv: 5.5.3 + kleur: 4.1.5 + smartwrap: 2.0.2 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 17.6.2 + dev: false + /tunnel-agent/0.6.0: resolution: { @@ -10361,6 +11941,14 @@ packages: dependencies: prelude-ls: 1.2.1 + /type-fest/0.13.1: + resolution: + { + integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==, + } + engines: { node: ">=10" } + dev: false + /type-fest/0.18.1: resolution: { @@ -10382,7 +11970,6 @@ packages: integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, } engines: { node: ">=8" } - dev: true /type-fest/0.8.1: resolution: @@ -10390,7 +11977,6 @@ packages: integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, } engines: { node: ">=8" } - dev: true /type-fest/1.4.0: resolution: @@ -10408,6 +11994,14 @@ packages: engines: { node: ">=14.16" } dev: false + /type-fest/3.6.1: + resolution: + { + integrity: sha512-htXWckxlT6U4+ilVgweNliPqlsVSSucbxVexRYllyMVJDtf5rTjv6kF/s+qAd4QSL1BZcnJPEJavYBPQiWuZDA==, + } + engines: { node: ">=14.16" } + dev: true + /typescript/4.7.4: resolution: { @@ -10424,6 +12018,15 @@ packages: engines: { node: ">=4.2.0" } hasBin: true + /typescript/4.9.5: + resolution: + { + integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==, + } + engines: { node: ">=4.2.0" } + hasBin: true + dev: true + /unbox-primitive/1.0.2: resolution: { @@ -10562,13 +12165,20 @@ packages: } dev: true + /universalify/0.1.2: + resolution: + { + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, + } + engines: { node: ">= 4.0.0" } + dev: false + /universalify/2.0.0: resolution: { integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==, } engines: { node: ">= 10.0.0" } - dev: true /update-browserslist-db/1.0.10_browserslist@4.21.4: resolution: @@ -10692,7 +12302,6 @@ packages: dependencies: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 - dev: true /vfile-location/4.0.1: resolution: @@ -10759,6 +12368,15 @@ packages: } dev: true + /wcwidth/1.0.1: + resolution: + { + integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, + } + dependencies: + defaults: 1.0.4 + dev: false + /web-namespaces/2.0.1: resolution: { @@ -10774,6 +12392,24 @@ packages: engines: { node: ">= 8" } dev: false + /webidl-conversions/4.0.2: + resolution: + { + integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, + } + dev: true + + /whatwg-url/7.1.0: + resolution: + { + integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, + } + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + /which-boxed-primitive/1.0.2: resolution: { @@ -10786,6 +12422,34 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 + /which-module/2.0.0: + resolution: + { + integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, + } + dev: false + + /which-pm/2.0.0: + resolution: + { + integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==, + } + engines: { node: ">=8.15" } + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: false + + /which/1.3.1: + resolution: + { + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, + } + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + /which/2.0.2: resolution: { @@ -10803,6 +12467,18 @@ packages: } engines: { node: ">=0.10.0" } + /wrap-ansi/6.2.0: + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, + } + engines: { node: ">=8" } + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + /wrap-ansi/7.0.0: resolution: { @@ -10827,6 +12503,13 @@ packages: } engines: { node: ">=0.4" } + /y18n/4.0.3: + resolution: + { + integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, + } + dev: false + /y18n/5.0.8: resolution: { @@ -10834,6 +12517,13 @@ packages: } engines: { node: ">=10" } + /yallist/2.1.2: + resolution: + { + integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, + } + dev: false + /yallist/3.1.1: resolution: { @@ -10853,6 +12543,17 @@ packages: } engines: { node: ">= 6" } + /yargs-parser/18.1.3: + resolution: + { + integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, + } + engines: { node: ">=6" } + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + /yargs-parser/20.2.9: resolution: { @@ -10866,7 +12567,26 @@ packages: integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, } engines: { node: ">=12" } - dev: true + + /yargs/15.4.1: + resolution: + { + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, + } + engines: { node: ">=8" } + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.0 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: false /yargs/16.2.0: resolution: @@ -10898,7 +12618,6 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true /yn/3.1.1: resolution: diff --git a/turbo.json b/turbo.json index 7412ab5ce..3a5ae59d8 100644 --- a/turbo.json +++ b/turbo.json @@ -7,7 +7,8 @@ "env": [ "NEXT_PUBLIC_APP_URL", "UPSTASH_REDIS_REST_URL", - "UPSTASH_REDIS_REST_TOKEN" + "UPSTASH_REDIS_REST_TOKEN", + "npm_config_user_agent" ], "outputs": ["dist/**", ".next/**"] },