assistant-ui 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,39 +1,9 @@
1
- # `assistant-ui`
1
+ # `assistant-ui` CLI
2
2
 
3
- `assistant-ui` is a set of React components for AI chat.
3
+ This package contains the command line interface for `assistant-ui`.
4
4
 
5
- - [Discord](https://discord.gg/S9dwgCNEFs)
6
- - [Website](https://assistant-ui.com/)
7
- - [Demo](https://assistant-ui-rsc-example.vercel.app/)
8
-
9
- ## Documentation
10
-
11
- - [Documentation](https://www.assistant-ui.com/docs/getting-started)
12
-
13
- ## Minimal Example with Vercel AI SDK
5
+ ## Usage
14
6
 
15
7
  ```sh
16
- npx assistant-ui@latest add modal
8
+ npx assistant-ui@latest add
17
9
  ```
18
-
19
- ```tsx
20
- "use client";
21
-
22
- import { useChat } from "@ai-sdk/react";
23
- import { AssistantRuntimeProvider } from "@assistant-ui/react";
24
- import { useVercelUseChatRuntime } from "@assistant-ui/react-ai-sdk";
25
- import { AssistantModal } from "@/components/ui/assistant-ui/assistant-modal";
26
-
27
- export default const MyApp = () => {
28
- const chat = useChat({
29
- api: "/api/chat" // your backend route
30
- });
31
- const runtime = useVercelUseChatRuntime(chat);
32
-
33
- return (
34
- <AssistantRuntimeProvider runtime={runtime}>
35
- <AssistantModal />
36
- </AssistantRuntimeProvider>
37
- );
38
- }
39
- ```
package/dist/index.js CHANGED
@@ -170,27 +170,119 @@ var add = new Command().name("add").description("add a component to your project
170
170
  });
171
171
 
172
172
  // src/index.ts
173
+ import { Command as Command3 } from "commander";
174
+
175
+ // package.json
176
+ var package_default = {
177
+ name: "assistant-ui",
178
+ version: "0.0.6",
179
+ license: "MIT",
180
+ type: "module",
181
+ dependencies: {
182
+ chalk: "^5.3.0",
183
+ commander: "^12.1.0",
184
+ cosmiconfig: "^9.0.0",
185
+ "cross-spawn": "^7.0.3",
186
+ "shadcn-ui": "0.8.0",
187
+ "tsconfig-paths": "^4.2.0",
188
+ zod: "^3.23.8"
189
+ },
190
+ devDependencies: {
191
+ "@assistant-ui/tsconfig": "workspace:*",
192
+ "@types/cross-spawn": "^6.0.6",
193
+ "@types/node": "^20.14.7",
194
+ tsup: "^8.1.0"
195
+ },
196
+ files: [
197
+ "dist",
198
+ "README.md"
199
+ ],
200
+ bin: "./dist/index.js",
201
+ scripts: {
202
+ build: "tsup src/index.ts --format esm --sourcemap"
203
+ },
204
+ publishConfig: {
205
+ access: "public",
206
+ provenance: true
207
+ },
208
+ homepage: "https://assistant-ui.com/",
209
+ repository: {
210
+ type: "git",
211
+ url: "git+https://github.com/Yonom/assistant-ui.git"
212
+ },
213
+ bugs: {
214
+ url: "https://github.com/Yonom/assistant-ui/issues"
215
+ }
216
+ };
217
+
218
+ // src/commands/create.ts
173
219
  import { Command as Command2 } from "commander";
220
+ import chalk2 from "chalk";
221
+ import { spawn as spawn2 } from "child_process";
222
+ var create = new Command2().name("create").description("create a new project").argument("[project-directory]").usage(`${chalk2.green("[project-directory]")} [options]`).option(
223
+ "--use-npm",
224
+ `
174
225
 
175
- // src/utils/get-package-info.ts
176
- import path4 from "node:path";
177
- import fs from "node:fs";
178
- function getPackageInfo() {
179
- const packageJsonPath = path4.join("package.json");
180
- return JSON.parse(fs.readFileSync(packageJsonPath).toString("utf-8"));
181
- }
226
+ Explicitly tell the CLI to bootstrap the application using npm
227
+ `
228
+ ).option(
229
+ "--use-pnpm",
230
+ `
231
+
232
+ Explicitly tell the CLI to bootstrap the application using pnpm
233
+ `
234
+ ).option(
235
+ "--use-yarn",
236
+ `
237
+
238
+ Explicitly tell the CLI to bootstrap the application using Yarn
239
+ `
240
+ ).option(
241
+ "--use-bun",
242
+ `
243
+
244
+ Explicitly tell the CLI to bootstrap the application using Bun
245
+ `
246
+ ).option(
247
+ "--skip-install",
248
+ `
249
+
250
+ Explicitly tell the CLI to skip installing packages
251
+ `
252
+ ).action(() => {
253
+ const child = spawn2(
254
+ "npx",
255
+ [
256
+ `create-next-app@latest`,
257
+ ...process.argv.slice(3),
258
+ "-e",
259
+ "https://github.com/Yonom/assistant-ui-starter"
260
+ ],
261
+ {
262
+ stdio: "inherit"
263
+ }
264
+ );
265
+ child.on("error", (error) => {
266
+ console.error(`Error: ${error.message}`);
267
+ });
268
+ child.on("close", (code) => {
269
+ if (code !== 0) {
270
+ console.log(`other-package-script process exited with code ${code}`);
271
+ }
272
+ });
273
+ });
182
274
 
183
275
  // src/index.ts
184
276
  process.on("SIGINT", () => process.exit(0));
185
277
  process.on("SIGTERM", () => process.exit(0));
186
278
  async function main() {
187
- const packageInfo = await getPackageInfo();
188
- const program = new Command2().name("assistant-ui").description("add components and dependencies to your project").version(
189
- packageInfo.version || "1.0.0",
279
+ const program = new Command3().name("assistant-ui").description("add components and dependencies to your project").version(
280
+ package_default.version || "1.0.0",
190
281
  "-v, --version",
191
282
  "display the version number"
192
283
  );
193
284
  program.addCommand(add);
285
+ program.addCommand(create);
194
286
  program.parse();
195
287
  }
196
288
  main();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/add.ts","../src/utils/get-component-target-path.ts","../src/utils/get-config.ts","../src/utils/resolve-import.ts","../src/index.ts","../src/utils/get-package-info.ts"],"sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { spawn } from \"cross-spawn\";\nimport { getComponentTargetPath } from \"../utils/get-component-target-path\";\nimport { type Config, getConfig } from \"../utils/get-config\";\n\nconst SHADCN_CLI_VERSION = \"0.8.0\";\n\nconst getTargetPath = (config: Config, pathOverride: string) => {\n const baseConfig = pathOverride ?? getComponentTargetPath(config);\n if (!baseConfig) {\n console.warn(\n `Unable to determine the base path. Please run ${chalk.green(\n \"npx shadcn-ui init\",\n )} to create a components.json file.`,\n );\n process.exit(1);\n }\n\n return [baseConfig, path.join(baseConfig, \"assistant-ui\")] as const;\n};\n\nexport const add = new Command()\n .name(\"add\")\n .description(\"add a component to your project\")\n .argument(\"[components...]\", \"the components to add\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd(),\n )\n .option(\"-a, --all\", \"add all available components\", false)\n .option(\"-p, --path <path>\", \"the path to add the component to.\")\n .action(async (_, opts) => {\n const cwd = path.resolve(opts.cwd);\n const config = await getConfig(cwd);\n\n if (!config) {\n console.warn(\n `Configuration is missing. Please run ${chalk.green(\n \"npx shadcn-ui init\",\n )} to create a components.json file.`,\n );\n process.exit(1);\n }\n\n const [basePath, targetPath] = getTargetPath(config, opts.path);\n\n // create target path directory if it doesnt exist\n if (targetPath && !existsSync(targetPath)) {\n mkdirSync(targetPath, { recursive: true });\n }\n\n const child = spawn(\n \"npx\",\n [\n `shadcn-ui@${SHADCN_CLI_VERSION}`,\n ...process.argv.slice(2),\n \"--path\",\n basePath,\n ],\n {\n stdio: \"inherit\",\n env: {\n COMPONENTS_REGISTRY_URL: \"https://www.assistant-ui.com\",\n ...process.env,\n },\n },\n );\n\n child.on(\"error\", (error) => {\n console.error(`Error: ${error.message}`);\n });\n\n child.on(\"close\", (code) => {\n if (code !== 0) {\n console.log(`other-package-script process exited with code ${code}`);\n }\n });\n });\n","import path from \"node:path\";\nimport type { Config } from \"./get-config\";\n\nexport function getComponentTargetPath(config: Config) {\n if (config.aliases.ui) {\n return config.resolvedPaths.ui;\n }\n\n const [parent, type] = [\"components\", \"ui\"];\n if (!(parent in config.resolvedPaths)) {\n return null;\n }\n\n return path.join(\n config.resolvedPaths[parent as keyof typeof config.resolvedPaths],\n type,\n );\n}\n","import path from \"node:path\";\nimport { cosmiconfig } from \"cosmiconfig\";\nimport { loadConfig } from \"tsconfig-paths\";\nimport { z } from \"zod\";\nimport { resolveImport } from \"./resolve-import\";\n\nconst explorer = cosmiconfig(\"components\", {\n searchPlaces: [\"components.json\"],\n});\n\nexport const rawConfigSchema = z.object({\n $schema: z.string().optional(),\n style: z.string(),\n rsc: z.coerce.boolean().default(false),\n tsx: z.coerce.boolean().default(true),\n tailwind: z.object({\n config: z.string(),\n css: z.string(),\n baseColor: z.string(),\n cssVariables: z.boolean().default(true),\n prefix: z.string().default(\"\").optional(),\n }),\n aliases: z.object({\n components: z.string(),\n utils: z.string(),\n ui: z.string().optional(),\n }),\n});\n\nexport type RawConfig = z.infer<typeof rawConfigSchema>;\n\nexport const configSchema = rawConfigSchema.extend({\n resolvedPaths: z.object({\n tailwindConfig: z.string(),\n tailwindCss: z.string(),\n utils: z.string(),\n components: z.string(),\n ui: z.string(),\n }),\n});\n\nexport type Config = z.infer<typeof configSchema>;\n\nexport async function getConfig(cwd: string) {\n const config = await getRawConfig(cwd);\n\n if (!config) {\n return null;\n }\n\n return resolveConfigPaths(cwd, config);\n}\n\nexport function resolveConfigPaths(cwd: string, config: RawConfig) {\n // Read tsconfig.json.\n const tsConfig = loadConfig(cwd);\n\n if (tsConfig.resultType === \"failed\") {\n throw new Error(\n `Failed to load ${config.tsx ? \"tsconfig\" : \"jsconfig\"}.json. ${\n tsConfig.message ?? \"\"\n }`.trim(),\n );\n }\n\n return configSchema.parse({\n ...config,\n resolvedPaths: {\n tailwindConfig: path.resolve(cwd, config.tailwind.config),\n tailwindCss: path.resolve(cwd, config.tailwind.css),\n utils: resolveImport(config.aliases[\"utils\"], tsConfig),\n components: resolveImport(config.aliases[\"components\"], tsConfig),\n ui: config.aliases[\"ui\"]\n ? resolveImport(config.aliases[\"ui\"], tsConfig)\n : resolveImport(config.aliases[\"components\"], tsConfig),\n },\n });\n}\n\nexport async function getRawConfig(cwd: string): Promise<RawConfig | null> {\n try {\n const configResult = await explorer.search(cwd);\n\n if (!configResult) {\n return null;\n }\n\n return rawConfigSchema.parse(configResult.config);\n } catch (error) {\n throw new Error(`Invalid configuration found in ${cwd}/components.json.`);\n }\n}\n","import {\n type ConfigLoaderSuccessResult,\n createMatchPath,\n} from \"tsconfig-paths\";\n\nexport function resolveImport(\n importPath: string,\n config: Pick<ConfigLoaderSuccessResult, \"absoluteBaseUrl\" | \"paths\">,\n) {\n return createMatchPath(config.absoluteBaseUrl, config.paths)(\n importPath,\n undefined,\n () => true,\n [\".ts\", \".tsx\"],\n );\n}\n","#!/usr/bin/env node\n\nimport { add } from \"@/src/commands/add\";\nimport { Command } from \"commander\";\n\nimport { getPackageInfo } from \"./utils/get-package-info\";\n\nprocess.on(\"SIGINT\", () => process.exit(0));\nprocess.on(\"SIGTERM\", () => process.exit(0));\n\nasync function main() {\n const packageInfo = await getPackageInfo();\n\n const program = new Command()\n .name(\"assistant-ui\")\n .description(\"add components and dependencies to your project\")\n .version(\n packageInfo.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\",\n );\n\n program.addCommand(add);\n\n program.parse();\n}\n\nmain();\n","import path from \"node:path\";\nimport fs from \"node:fs\";\n\nexport function getPackageInfo() {\n const packageJsonPath = path.join(\"package.json\");\n\n return JSON.parse(fs.readFileSync(packageJsonPath).toString(\"utf-8\")) as {\n version: string;\n };\n}\n"],"mappings":"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","names":["path","path","path","path","Command","path","Command"]}
1
+ {"version":3,"sources":["../src/commands/add.ts","../src/utils/get-component-target-path.ts","../src/utils/get-config.ts","../src/utils/resolve-import.ts","../src/index.ts","../package.json","../src/commands/create.ts"],"sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport { spawn } from \"cross-spawn\";\nimport { getComponentTargetPath } from \"../utils/get-component-target-path\";\nimport { type Config, getConfig } from \"../utils/get-config\";\n\nconst SHADCN_CLI_VERSION = \"0.8.0\";\n\nconst getTargetPath = (config: Config, pathOverride: string) => {\n const baseConfig = pathOverride ?? getComponentTargetPath(config);\n if (!baseConfig) {\n console.warn(\n `Unable to determine the base path. Please run ${chalk.green(\n \"npx shadcn-ui init\",\n )} to create a components.json file.`,\n );\n process.exit(1);\n }\n\n return [baseConfig, path.join(baseConfig, \"assistant-ui\")] as const;\n};\n\nexport const add = new Command()\n .name(\"add\")\n .description(\"add a component to your project\")\n .argument(\"[components...]\", \"the components to add\")\n .option(\"-y, --yes\", \"skip confirmation prompt.\", true)\n .option(\"-o, --overwrite\", \"overwrite existing files.\", false)\n .option(\n \"-c, --cwd <cwd>\",\n \"the working directory. defaults to the current directory.\",\n process.cwd(),\n )\n .option(\"-a, --all\", \"add all available components\", false)\n .option(\"-p, --path <path>\", \"the path to add the component to.\")\n .action(async (_, opts) => {\n const cwd = path.resolve(opts.cwd);\n const config = await getConfig(cwd);\n\n if (!config) {\n console.warn(\n `Configuration is missing. Please run ${chalk.green(\n \"npx shadcn-ui init\",\n )} to create a components.json file.`,\n );\n process.exit(1);\n }\n\n const [basePath, targetPath] = getTargetPath(config, opts.path);\n\n // create target path directory if it doesnt exist\n if (targetPath && !existsSync(targetPath)) {\n mkdirSync(targetPath, { recursive: true });\n }\n\n const child = spawn(\n \"npx\",\n [\n `shadcn-ui@${SHADCN_CLI_VERSION}`,\n ...process.argv.slice(2),\n \"--path\",\n basePath,\n ],\n {\n stdio: \"inherit\",\n env: {\n COMPONENTS_REGISTRY_URL: \"https://www.assistant-ui.com\",\n ...process.env,\n },\n },\n );\n\n child.on(\"error\", (error) => {\n console.error(`Error: ${error.message}`);\n });\n\n child.on(\"close\", (code) => {\n if (code !== 0) {\n console.log(`other-package-script process exited with code ${code}`);\n }\n });\n });\n","import path from \"node:path\";\nimport type { Config } from \"./get-config\";\n\nexport function getComponentTargetPath(config: Config) {\n if (config.aliases.ui) {\n return config.resolvedPaths.ui;\n }\n\n const [parent, type] = [\"components\", \"ui\"];\n if (!(parent in config.resolvedPaths)) {\n return null;\n }\n\n return path.join(\n config.resolvedPaths[parent as keyof typeof config.resolvedPaths],\n type,\n );\n}\n","import path from \"node:path\";\nimport { cosmiconfig } from \"cosmiconfig\";\nimport { loadConfig } from \"tsconfig-paths\";\nimport { z } from \"zod\";\nimport { resolveImport } from \"./resolve-import\";\n\nconst explorer = cosmiconfig(\"components\", {\n searchPlaces: [\"components.json\"],\n});\n\nexport const rawConfigSchema = z.object({\n $schema: z.string().optional(),\n style: z.string(),\n rsc: z.coerce.boolean().default(false),\n tsx: z.coerce.boolean().default(true),\n tailwind: z.object({\n config: z.string(),\n css: z.string(),\n baseColor: z.string(),\n cssVariables: z.boolean().default(true),\n prefix: z.string().default(\"\").optional(),\n }),\n aliases: z.object({\n components: z.string(),\n utils: z.string(),\n ui: z.string().optional(),\n }),\n});\n\nexport type RawConfig = z.infer<typeof rawConfigSchema>;\n\nexport const configSchema = rawConfigSchema.extend({\n resolvedPaths: z.object({\n tailwindConfig: z.string(),\n tailwindCss: z.string(),\n utils: z.string(),\n components: z.string(),\n ui: z.string(),\n }),\n});\n\nexport type Config = z.infer<typeof configSchema>;\n\nexport async function getConfig(cwd: string) {\n const config = await getRawConfig(cwd);\n\n if (!config) {\n return null;\n }\n\n return resolveConfigPaths(cwd, config);\n}\n\nexport function resolveConfigPaths(cwd: string, config: RawConfig) {\n // Read tsconfig.json.\n const tsConfig = loadConfig(cwd);\n\n if (tsConfig.resultType === \"failed\") {\n throw new Error(\n `Failed to load ${config.tsx ? \"tsconfig\" : \"jsconfig\"}.json. ${\n tsConfig.message ?? \"\"\n }`.trim(),\n );\n }\n\n return configSchema.parse({\n ...config,\n resolvedPaths: {\n tailwindConfig: path.resolve(cwd, config.tailwind.config),\n tailwindCss: path.resolve(cwd, config.tailwind.css),\n utils: resolveImport(config.aliases[\"utils\"], tsConfig),\n components: resolveImport(config.aliases[\"components\"], tsConfig),\n ui: config.aliases[\"ui\"]\n ? resolveImport(config.aliases[\"ui\"], tsConfig)\n : resolveImport(config.aliases[\"components\"], tsConfig),\n },\n });\n}\n\nexport async function getRawConfig(cwd: string): Promise<RawConfig | null> {\n try {\n const configResult = await explorer.search(cwd);\n\n if (!configResult) {\n return null;\n }\n\n return rawConfigSchema.parse(configResult.config);\n } catch (error) {\n throw new Error(`Invalid configuration found in ${cwd}/components.json.`);\n }\n}\n","import {\n type ConfigLoaderSuccessResult,\n createMatchPath,\n} from \"tsconfig-paths\";\n\nexport function resolveImport(\n importPath: string,\n config: Pick<ConfigLoaderSuccessResult, \"absoluteBaseUrl\" | \"paths\">,\n) {\n return createMatchPath(config.absoluteBaseUrl, config.paths)(\n importPath,\n undefined,\n () => true,\n [\".ts\", \".tsx\"],\n );\n}\n","#!/usr/bin/env node\n\nimport { add } from \"@/src/commands/add\";\nimport { Command } from \"commander\";\n\nimport packageJson from \"../package.json\";\nimport { create } from \"./commands/create\";\n\nprocess.on(\"SIGINT\", () => process.exit(0));\nprocess.on(\"SIGTERM\", () => process.exit(0));\n\nasync function main() {\n const program = new Command()\n .name(\"assistant-ui\")\n .description(\"add components and dependencies to your project\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\",\n );\n\n program.addCommand(add);\n program.addCommand(create);\n\n program.parse();\n}\n\nmain();\n","{\n \"name\": \"assistant-ui\",\n \"version\": \"0.0.6\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"dependencies\": {\n \"chalk\": \"^5.3.0\",\n \"commander\": \"^12.1.0\",\n \"cosmiconfig\": \"^9.0.0\",\n \"cross-spawn\": \"^7.0.3\",\n \"shadcn-ui\": \"0.8.0\",\n \"tsconfig-paths\": \"^4.2.0\",\n \"zod\": \"^3.23.8\"\n },\n \"devDependencies\": {\n \"@assistant-ui/tsconfig\": \"workspace:*\",\n \"@types/cross-spawn\": \"^6.0.6\",\n \"@types/node\": \"^20.14.7\",\n \"tsup\": \"^8.1.0\"\n },\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"bin\": \"./dist/index.js\",\n \"scripts\": {\n \"build\": \"tsup src/index.ts --format esm --sourcemap\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"homepage\": \"https://assistant-ui.com/\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Yonom/assistant-ui.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/Yonom/assistant-ui/issues\"\n }\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { spawn } from \"child_process\";\n\nexport const create = new Command()\n .name(\"create\")\n .description(\"create a new project\")\n .argument(\"[project-directory]\")\n .usage(`${chalk.green(\"[project-directory]\")} [options]`)\n .option(\n \"--use-npm\",\n `\n\n Explicitly tell the CLI to bootstrap the application using npm\n`,\n )\n .option(\n \"--use-pnpm\",\n `\n\n Explicitly tell the CLI to bootstrap the application using pnpm\n`,\n )\n .option(\n \"--use-yarn\",\n `\n\n Explicitly tell the CLI to bootstrap the application using Yarn\n`,\n )\n .option(\n \"--use-bun\",\n `\n\n Explicitly tell the CLI to bootstrap the application using Bun\n`,\n )\n .option(\n \"--skip-install\",\n `\n\n Explicitly tell the CLI to skip installing packages\n`,\n )\n .action(() => {\n const child = spawn(\n \"npx\",\n [\n `create-next-app@latest`,\n ...process.argv.slice(3),\n \"-e\",\n \"https://github.com/Yonom/assistant-ui-starter\",\n ],\n {\n stdio: \"inherit\",\n },\n );\n\n child.on(\"error\", (error) => {\n console.error(`Error: ${error.message}`);\n });\n\n child.on(\"close\", (code) => {\n if (code !== 0) {\n console.log(`other-package-script process exited with code ${code}`);\n }\n });\n });\n"],"mappings":"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","names":["path","path","path","path","Command","Command","chalk","spawn","Command"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assistant-ui",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -8,30 +8,14 @@
8
8
  "commander": "^12.1.0",
9
9
  "cosmiconfig": "^9.0.0",
10
10
  "cross-spawn": "^7.0.3",
11
+ "shadcn-ui": "0.8.0",
11
12
  "tsconfig-paths": "^4.2.0",
12
13
  "zod": "^3.23.8"
13
14
  },
14
15
  "devDependencies": {
15
- "@radix-ui/react-avatar": "^1.0.4",
16
- "@radix-ui/react-popover": "^1.0.7",
17
- "@radix-ui/react-slot": "^1.0.2",
18
- "@radix-ui/react-tooltip": "^1.0.7",
19
16
  "@types/cross-spawn": "^6.0.6",
20
- "@types/node": "^20.14.2",
21
- "@types/react": "^18",
22
- "class-variance-authority": "^0.7.0",
23
- "clsx": "^2.1.1",
24
- "lucide-react": "^0.395.0",
25
- "react": "^18.3.1",
26
- "react-resizable-panels": "^2.0.19",
27
- "rimraf": "^5.0.7",
28
- "shadcn-ui": "0.8.0",
29
- "tailwind-merge": "^2.3.0",
30
- "tailwindcss": "^3.4.4",
31
- "tailwindcss-animate": "^1.0.7",
17
+ "@types/node": "^20.14.7",
32
18
  "tsup": "^8.1.0",
33
- "tsx": "^4.15.5",
34
- "@assistant-ui/react": "0.0.29",
35
19
  "@assistant-ui/tsconfig": "0.0.0"
36
20
  },
37
21
  "files": [
@@ -40,11 +24,18 @@
40
24
  ],
41
25
  "bin": "./dist/index.js",
42
26
  "publishConfig": {
43
- "access": "public"
27
+ "access": "public",
28
+ "provenance": true
29
+ },
30
+ "homepage": "https://assistant-ui.com/",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "git+https://github.com/Yonom/assistant-ui.git"
34
+ },
35
+ "bugs": {
36
+ "url": "https://github.com/Yonom/assistant-ui/issues"
44
37
  },
45
38
  "scripts": {
46
- "build": "tsup src/index.ts --format esm --sourcemap",
47
- "build:registry": "tsx ./scripts/build-registry.ts",
48
- "prepublish": "cp ../../README.md ./README.md"
39
+ "build": "tsup src/index.ts --format esm --sourcemap"
49
40
  }
50
41
  }