From a243262748c2981f01ad72bbbcacb400b70069c0 Mon Sep 17 00:00:00 2001 From: shadcn Date: Mon, 17 Apr 2023 15:41:03 +0400 Subject: [PATCH] feat(shadcn-ui): init command --- packages/cli/package.json | 1 - packages/cli/src/index.ts | 95 +++++++++++- packages/cli/src/utils/get-project-info.ts | 38 +++-- packages/cli/src/utils/templates.ts | 165 +++++++++++++++++++++ pnpm-lock.yaml | 82 ---------- 5 files changed, 286 insertions(+), 95 deletions(-) create mode 100644 packages/cli/src/utils/templates.ts diff --git a/packages/cli/package.json b/packages/cli/package.json index 877a7cb537..3fcb0363b2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -50,7 +50,6 @@ "node-fetch": "^3.3.0", "ora": "^6.1.2", "prompts": "^2.4.2", - "react-day-picker": "^8.6.0", "zod": "^3.20.2" }, "devDependencies": { diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index a60c0b3816..77cd7e2309 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -11,13 +11,23 @@ import { getPackageInfo } from "./utils/get-package-info" import { getPackageManager } from "./utils/get-package-manager" import { getProjectInfo } from "./utils/get-project-info" import { logger } from "./utils/logger" +import { STYLES, TAILWIND_CONFIG, UTILS } from "./utils/templates" process.on("SIGINT", () => process.exit(0)) process.on("SIGTERM", () => process.exit(0)) +const PROJECT_DEPENDENCIES = [ + "tailwindcss-animate", + "class-variance-authority", + "clsx", + "tailwind-merge", + "lucide-react", +] + async function main() { const packageInfo = await getPackageInfo() const projectInfo = await getProjectInfo() + const packageManager = getPackageManager() const program = new Command() .name("shadcn-ui") @@ -28,6 +38,89 @@ async function main() { "display the version number" ) + program + .command("init") + .description("Configure your Next.js project.") + .option("-y, --yes", "Skip confirmation prompt.") + .action(async (options) => { + logger.warn( + "Running the following command will overwrite existing files." + ) + logger.warn( + "Make sure you have committed your changes before proceeding." + ) + logger.warn("") + logger.warn( + "This command assumes a Next.js project with TypeScript and Tailwind CSS." + ) + logger.warn( + "If you don't have these, follow the manual steps at https://ui.shadcn.com/docs/installation." + ) + logger.warn("") + + if (!options.yes) { + const { proceed } = await prompts({ + type: "confirm", + name: "proceed", + message: + "Running this command will install dependencies and overwrite files. Proceed?", + initial: true, + }) + + if (!proceed) { + process.exit(0) + } + } + + // Install dependencies. + const dependenciesSpinner = ora(`Installing dependencies...`).start() + await execa(packageManager, [ + packageManager === "npm" ? "install" : "add", + ...PROJECT_DEPENDENCIES, + ]) + dependenciesSpinner.succeed() + + // Ensure styles directory exists. + if (!projectInfo?.appDir) { + const stylesDir = projectInfo?.srcDir ? "./src/styles" : "./styles" + if (!existsSync(path.resolve(stylesDir))) { + await fs.mkdir(path.resolve(stylesDir), { recursive: true }) + } + } + + // Update styles.css + let stylesDestination = projectInfo?.srcDir + ? "./src/styles/globals.css" + : "./styles/globals.css" + if (projectInfo?.appDir) { + stylesDestination = projectInfo?.srcDir + ? "./src/app/globals.css" + : "./app/globals.css" + } + const stylesSpinner = ora(`Adding styles with CSS variables...`).start() + await fs.writeFile(stylesDestination, STYLES, "utf8") + stylesSpinner.succeed() + + // Ensure lib directory exists. + const libDir = projectInfo?.srcDir ? "./src/lib" : "./lib" + if (!existsSync(path.resolve(libDir))) { + await fs.mkdir(path.resolve(libDir), { recursive: true }) + } + + // Create lib/utils.ts + const utilsDestination = projectInfo?.srcDir + ? "./src/lib/utils.ts" + : "./lib/utils.ts" + const utilsSpinner = ora(`Adding utils...`).start() + await fs.writeFile(utilsDestination, UTILS, "utf8") + utilsSpinner.succeed() + + const tailwindDestination = "./tailwind.config.js" + const tailwindSpinner = ora(`Updating tailwind.config.js...`).start() + await fs.writeFile(tailwindDestination, TAILWIND_CONFIG, "utf8") + tailwindSpinner.succeed() + }) + program .command("add") .description("add components to your project") @@ -73,8 +166,6 @@ async function main() { spinner.succeed() } - const packageManager = getPackageManager() - logger.success( `Installing ${selectedComponents.length} component(s) and dependencies...` ) diff --git a/packages/cli/src/utils/get-project-info.ts b/packages/cli/src/utils/get-project-info.ts index 0c2aee7046..ce809e763a 100644 --- a/packages/cli/src/utils/get-project-info.ts +++ b/packages/cli/src/utils/get-project-info.ts @@ -1,7 +1,34 @@ +import { existsSync } from "fs" import path from "path" import fs from "fs-extra" export async function getProjectInfo() { + const info = { + tsconfig: null, + alias: null, + srcDir: false, + appDir: false, + } + + try { + const tsconfig = await getTsConfig() + const paths = tsconfig?.compilerOptions?.paths + const alias = paths ? Object.keys(paths)[0].replace("*", "") : null + + return { + tsconfig, + alias, + srcDir: existsSync(path.resolve("./src")), + appDir: + existsSync(path.resolve("./app")) || + existsSync(path.resolve("./src/app")), + } + } catch (error) { + return info + } +} + +export async function getTsConfig() { try { const tsconfigPath = path.join("tsconfig.json") const tsconfig = await fs.readJSON(tsconfigPath) @@ -10,16 +37,7 @@ export async function getProjectInfo() { throw new Error("tsconfig.json is missing") } - const paths = tsconfig.compilerOptions?.paths - if (!paths) { - throw new Error("tsconfig.json is missing paths") - } - - const alias = Object.keys(paths)[0].replace("*", "") - - return { - alias, - } + return tsconfig } catch (error) { return null } diff --git a/packages/cli/src/utils/templates.ts b/packages/cli/src/utils/templates.ts new file mode 100644 index 0000000000..9e6528233a --- /dev/null +++ b/packages/cli/src/utils/templates.ts @@ -0,0 +1,165 @@ +export const STYLES = `@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 47.4% 11.2%; + + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + + --popover: 0 0% 100%; + --popover-foreground: 222.2 47.4% 11.2%; + + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; + + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + + --destructive: 0 100% 50%; + --destructive-foreground: 210 40% 98%; + + --ring: 215 20.2% 65.1%; + + --radius: 0.5rem; + } + + .dark { + --background: 224 71% 4%; + --foreground: 213 31% 91%; + + --muted: 223 47% 11%; + --muted-foreground: 215.4 16.3% 56.9%; + + --popover: 224 71% 4%; + --popover-foreground: 215 20.2% 65.1%; + + --card: 0 0% 100%; + --card-foreground: 222.2 47.4% 11.2%; + + --border: 216 34% 17%; + --input: 216 34% 17%; + + --primary: 210 40% 98%; + --primary-foreground: 222.2 47.4% 1.2%; + + --secondary: 222.2 47.4% 11.2%; + --secondary-foreground: 210 40% 98%; + + --accent: 216 34% 17%; + --accent-foreground: 210 40% 98%; + + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; + + --ring: 216 34% 17%; + + --radius: 0.5rem; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + font-feature-settings: "rlig" 1, "calt" 1; + } +}` + +export const UTILS = `import { ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} +` + +export const TAILWIND_CONFIG = `/** @type {import('tailwindcss').Config} */ +module.exports = { + darkMode: ["class"], + content: [ + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + ], + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: 0 }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: 0 }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + }, + }, + }, + plugins: [require("tailwindcss-animate")], +}` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 22d9884891..90217755f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -468,9 +468,6 @@ importers: prompts: specifier: ^2.4.2 version: 2.4.2 - react-day-picker: - specifier: ^8.6.0 - version: 8.6.0(date-fns@2.29.3)(react@18.2.0) zod: specifier: ^3.20.2 version: 3.20.2 @@ -870,7 +867,6 @@ packages: integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==, } engines: { node: ">=6.0.0" } - hasBin: true dependencies: "@babel/types": 7.20.7 @@ -997,7 +993,6 @@ packages: { integrity: sha512-0cbTiDms+ICTVtEwAFLNW0jBNex9f5+fFv3I771nBvdnV/mOjd1QJ4+f8KtVSOrwD9SJkk9xbDkWFb0oXd8d1Q==, } - hasBin: true dependencies: "@babel/runtime": 7.20.6 "@changesets/apply-release-plan": 6.1.3 @@ -1201,7 +1196,6 @@ packages: integrity: sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg==, } engines: { node: ">=v14" } - hasBin: true dependencies: "@commitlint/format": 17.0.0 "@commitlint/lint": 17.3.0 @@ -2253,7 +2247,6 @@ packages: integrity: sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==, } engines: { node: ">=6" } - hasBin: true dependencies: "@types/long": 4.0.2 lodash.camelcase: 4.3.0 @@ -2268,7 +2261,6 @@ packages: integrity: sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==, } engines: { node: ">=6" } - hasBin: true dependencies: "@types/long": 4.0.2 lodash.camelcase: 4.3.0 @@ -2845,7 +2837,6 @@ packages: integrity: sha512-PcL1x0kZtMie7NsNy67OyMvzLEXqf3xd0TZJKHHPMGTe89oMpNVrD1zJB1kZcwXOxLlHHb6tz21G3vvXPdXyZg==, } engines: { node: ">=14" } - deprecated: Please use @opentelemetry/api >= 1.3.0 dependencies: "@opentelemetry/api": 1.1.0 dev: false @@ -2994,7 +2985,6 @@ packages: integrity: sha512-4R2Bjl3wlqIGcq4bCoI9/pD49ld+tEoM9n85UfFzr/aUe+2huY2jTPq/BP9SVB8d2Zfg7mGTIFeapcEvAdKK7g==, } engines: { node: ">=14" } - deprecated: Please use @opentelemetry/sdk-metrics peerDependencies: "@opentelemetry/api": ^1.0.0 dependencies: @@ -4357,7 +4347,6 @@ packages: integrity: sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==, } engines: { node: ">= 8.0.0" } - hasBin: true dependencies: fflate: 0.7.4 string.prototype.codepointat: 0.2.1 @@ -4834,7 +4823,6 @@ packages: { integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==, } - hasBin: true dependencies: jsonparse: 1.3.1 through: 2.3.8 @@ -4891,7 +4879,6 @@ packages: integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, } engines: { node: ">=0.4.0" } - hasBin: true /acorn@8.8.1: resolution: @@ -4899,7 +4886,6 @@ packages: integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==, } engines: { node: ">=0.4.0" } - hasBin: true /ajv@6.12.6: resolution: @@ -5147,7 +5133,6 @@ packages: { integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==, } - hasBin: true dev: false /autoprefixer@10.4.13(postcss@8.4.20): @@ -5273,7 +5258,6 @@ packages: integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, } engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } - hasBin: true dependencies: caniuse-lite: 1.0.30001439 electron-to-chromium: 1.4.284 @@ -5733,7 +5717,6 @@ packages: integrity: sha512-3LEF5HMHjSytlT8SErC3U59Pt2LP80a6Z2f/0mSIPeA4xty0LNChyHqzALySSM0osAEz32RY56Fifk5P+2dCIA==, } engines: { node: ">=14.18" } - hasBin: true requiresBuild: true dependencies: "@contentlayer/cli": 0.3.0(esbuild@0.17.3) @@ -5778,7 +5761,6 @@ packages: integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==, } engines: { node: ">=10" } - hasBin: true dependencies: JSONStream: 1.3.5 is-text-path: 1.0.1 @@ -5852,7 +5834,6 @@ packages: integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==, } engines: { node: ">=10.14", npm: ">=6", yarn: ">=1" } - hasBin: true dependencies: cross-spawn: 7.0.3 dev: false @@ -5918,7 +5899,6 @@ packages: integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, } engines: { node: ">=4" } - hasBin: true /csstype@3.1.1: resolution: @@ -5989,14 +5969,6 @@ packages: } dev: false - /date-fns@2.29.3: - resolution: - { - integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==, - } - engines: { node: ">=0.11" } - dev: false - /debug@2.6.9: resolution: { @@ -6147,7 +6119,6 @@ packages: integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==, } engines: { node: ">=0.8.0" } - hasBin: true dependencies: acorn-node: 1.8.2 defined: 1.0.1 @@ -6332,7 +6303,6 @@ packages: integrity: sha512-n7V3v29IuZy5qgxx25TKJrEm0FHghAlS6QweUcyIgh/U0zYmQcvogWROitrTyZId1mHSkuhhuyEXtI9OXioq7A==, } engines: { node: ">=12" } - hasBin: true requiresBuild: true optionalDependencies: "@esbuild/android-arm": 0.17.10 @@ -6365,7 +6335,6 @@ packages: integrity: sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g==, } engines: { node: ">=12" } - hasBin: true requiresBuild: true optionalDependencies: "@esbuild/android-arm": 0.17.3 @@ -6751,7 +6720,6 @@ packages: integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==, } engines: { node: ^10.12.0 || >=12.0.0 } - hasBin: true dependencies: "@babel/code-frame": 7.12.11 "@eslint/eslintrc": 0.4.3 @@ -6803,7 +6771,6 @@ packages: integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==, } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - hasBin: true dependencies: "@eslint/eslintrc": 1.4.1 "@humanwhocodes/config-array": 0.11.8 @@ -6876,7 +6843,6 @@ packages: integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, } engines: { node: ">=4" } - hasBin: true /esquery@1.4.0: resolution: @@ -7409,7 +7375,6 @@ packages: integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==, } engines: { node: ">=10" } - hasBin: true dependencies: dargs: 7.0.0 lodash: 4.17.21 @@ -7836,7 +7801,6 @@ packages: integrity: sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==, } engines: { node: ">=14" } - hasBin: true dev: true /iconv-lite@0.4.24: @@ -8035,7 +7999,6 @@ packages: { integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==, } - hasBin: true dependencies: ci-info: 3.8.0 dev: false @@ -8320,7 +8283,6 @@ packages: { integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, } - hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -8330,7 +8292,6 @@ packages: { integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, } - hasBin: true dependencies: argparse: 2.0.1 @@ -8347,7 +8308,6 @@ packages: integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, } engines: { node: ">=4" } - hasBin: true /json-parse-even-better-errors@2.3.1: resolution: @@ -8379,7 +8339,6 @@ packages: { integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==, } - hasBin: true dependencies: minimist: 1.2.7 @@ -8389,7 +8348,6 @@ packages: integrity: sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==, } engines: { node: ">=6" } - hasBin: true /jsonc-parser@3.2.0: resolution: @@ -8668,7 +8626,6 @@ packages: { integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, } - hasBin: true dependencies: js-tokens: 4.0.0 @@ -9633,7 +9590,6 @@ packages: integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==, } engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } - hasBin: true /nanoid@4.0.0: resolution: @@ -9641,7 +9597,6 @@ packages: integrity: sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==, } engines: { node: ^14 || ^16 || >=18 } - hasBin: true dev: true /napi-build-utils@1.0.2: @@ -10420,7 +10375,6 @@ packages: integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==, } engines: { node: ">=10" } - hasBin: true dependencies: detect-libc: 2.0.1 expand-template: 2.0.3 @@ -10462,7 +10416,6 @@ packages: integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==, } engines: { node: ">=10.13.0" } - hasBin: true /pretty-quick@3.1.3(prettier@2.8.1): resolution: @@ -10523,7 +10476,6 @@ packages: { integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==, } - hasBin: true requiresBuild: true dependencies: "@protobufjs/aspromise": 1.1.2 @@ -10619,7 +10571,6 @@ packages: { integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, } - hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -10627,19 +10578,6 @@ packages: strip-json-comments: 2.0.1 dev: false - /react-day-picker@8.6.0(date-fns@2.29.3)(react@18.2.0): - resolution: - { - integrity: sha512-n9/6abBZu+koSUBtsXqBfiOW44ROTjl7ebIqyaTQSO8i79bsCCgKCAyQP/1a79ySFkK4puGV1e7p7hK1ymdb/w==, - } - peerDependencies: - date-fns: ^2.28.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - date-fns: 2.29.3 - react: 18.2.0 - dev: false - /react-dom@18.2.0(react@18.2.0): resolution: { @@ -11100,7 +11038,6 @@ packages: { integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, } - hasBin: true dependencies: is-core-module: 2.11.0 path-parse: 1.0.7 @@ -11111,7 +11048,6 @@ packages: { integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==, } - hasBin: true dependencies: is-core-module: 2.11.0 path-parse: 1.0.7 @@ -11140,7 +11076,6 @@ packages: { integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, } - hasBin: true dependencies: glob: 7.2.3 @@ -11150,7 +11085,6 @@ packages: integrity: sha512-iyzalDLo3l5FZxxaIGUY7xI4Bf90Xt7pCipc1Mr7RsdU7H3538z+M0tlsUDrz0aHeGS9uNqiKHUJyTewwRP91Q==, } engines: { node: ">=14" } - hasBin: true dev: true /rollup@3.18.0: @@ -11159,7 +11093,6 @@ packages: 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 @@ -11245,14 +11178,12 @@ packages: { integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, } - hasBin: true /semver@6.3.0: resolution: { integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, } - hasBin: true /semver@7.3.7: resolution: @@ -11260,7 +11191,6 @@ packages: integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==, } engines: { node: ">=10" } - hasBin: true dependencies: lru-cache: 6.0.0 dev: true @@ -11271,7 +11201,6 @@ packages: integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==, } engines: { node: ">=10" } - hasBin: true dependencies: lru-cache: 6.0.0 @@ -11420,7 +11349,6 @@ packages: integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==, } engines: { node: ">=6" } - hasBin: true dependencies: array.prototype.flat: 1.3.1 breakword: 1.0.5 @@ -11743,7 +11671,6 @@ packages: integrity: sha512-bZPAuGA5SdFHuzqIhTAqt9fvNEo9rESqXIG3oiKdF8K4UmkQxC4KlNL3lVyAErXp+mPvUqZ5l13qx6TrDIGf3A==, } engines: { node: ">=8" } - hasBin: true dependencies: commander: 4.1.1 glob: 7.1.6 @@ -12002,7 +11929,6 @@ packages: { integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, } - hasBin: true dev: true /trim-lines@3.0.1: @@ -12201,7 +12127,6 @@ packages: integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==, } engines: { node: ">=8.0.0" } - hasBin: true dependencies: chalk: 4.1.2 csv: 5.5.3 @@ -12292,7 +12217,6 @@ packages: { integrity: sha512-FtfhJLmEEtHveGxW4Ye/QuY85AnZ2ZNVgkTBswoap7UMHB1+oI4diHPNyqrQLG4K1UFtCkjOlVoLsllUh/9QRw==, } - hasBin: true requiresBuild: true optionalDependencies: turbo-darwin-64: 1.6.3 @@ -12386,7 +12310,6 @@ packages: integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==, } engines: { node: ">=4.2.0" } - hasBin: true /typescript@4.9.4: resolution: @@ -12394,7 +12317,6 @@ packages: integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==, } engines: { node: ">=4.2.0" } - hasBin: true /unbox-primitive@1.0.2: resolution: @@ -12627,7 +12549,6 @@ packages: { integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, } - hasBin: true dev: false /uvu@0.5.6: @@ -12636,7 +12557,6 @@ packages: integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==, } engines: { node: ">=8" } - hasBin: true dependencies: dequal: 2.0.3 diff: 5.1.0 @@ -12824,7 +12744,6 @@ packages: { integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, } - hasBin: true dependencies: isexe: 2.0.0 dev: false @@ -12835,7 +12754,6 @@ packages: integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, } engines: { node: ">= 8" } - hasBin: true dependencies: isexe: 2.0.0