create-weave-frontend-app 0.23.0 → 0.23.1
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/dist/{create-app-FfMOr9Hr.js → create-app-Ci2zIGiV.js} +12 -9
- package/dist/create-app-Ci2zIGiV.js.map +1 -0
- package/dist/create-app.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/template/+nextjs+azure-web-pubsub/components/home/home.tsx +1 -37
- package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-keyboard-handler.tsx +20 -8
- package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/tools-overlay.tsx +10 -10
- package/template/+nextjs+websockets/components/home/home.tsx +1 -37
- package/template/+nextjs+websockets/components/room-components/hooks/use-keyboard-handler.tsx +20 -8
- package/template/+nextjs+websockets/components/room-components/overlay/tools-overlay.tsx +10 -10
- package/template/package.json +2 -1
- package/dist/create-app-FfMOr9Hr.js.map +0 -1
|
@@ -76,11 +76,11 @@ function tryGitInit(root) {
|
|
|
76
76
|
//#endregion
|
|
77
77
|
//#region src/versions.js
|
|
78
78
|
const versions = {
|
|
79
|
-
"@inditextech/weave-types": "0.23.
|
|
80
|
-
"@inditextech/weave-sdk": "0.23.
|
|
81
|
-
"@inditextech/weave-store-websockets": "0.23.
|
|
82
|
-
"@inditextech/weave-store-azure-web-pubsub": "0.23.
|
|
83
|
-
"@inditextech/weave-react": "0.23.
|
|
79
|
+
"@inditextech/weave-types": "0.23.1",
|
|
80
|
+
"@inditextech/weave-sdk": "0.23.1",
|
|
81
|
+
"@inditextech/weave-store-websockets": "0.23.1",
|
|
82
|
+
"@inditextech/weave-store-azure-web-pubsub": "0.23.1",
|
|
83
|
+
"@inditextech/weave-react": "0.23.1"
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
//#endregion
|
|
@@ -120,7 +120,7 @@ var dependencies = {
|
|
|
120
120
|
"cmdk": "^1.0.0",
|
|
121
121
|
"color": "^5.0.0",
|
|
122
122
|
"framer-motion": "^11.18.2",
|
|
123
|
-
"
|
|
123
|
+
"lodash": "^4.17.21",
|
|
124
124
|
"motion": "^12.4.7",
|
|
125
125
|
"next": "14.2.28",
|
|
126
126
|
"next-themes": "^0.4.6",
|
|
@@ -148,6 +148,7 @@ var devDependencies = {
|
|
|
148
148
|
"@tailwindcss/postcss": "^4",
|
|
149
149
|
"@testing-library/dom": "^10.4.0",
|
|
150
150
|
"@testing-library/react": "^16.2.0",
|
|
151
|
+
"@types/lodash": "^4.17.17",
|
|
151
152
|
"@types/node": "^20",
|
|
152
153
|
"@types/react": "^18",
|
|
153
154
|
"@types/react-dom": "^18",
|
|
@@ -270,7 +271,7 @@ function createPackageJson(projectName, options) {
|
|
|
270
271
|
"cmdk",
|
|
271
272
|
"color",
|
|
272
273
|
"framer-motion",
|
|
273
|
-
"
|
|
274
|
+
"lodash",
|
|
274
275
|
"motion",
|
|
275
276
|
"next",
|
|
276
277
|
"next-themes",
|
|
@@ -304,6 +305,7 @@ function createPackageJson(projectName, options) {
|
|
|
304
305
|
"@tailwindcss/postcss",
|
|
305
306
|
"@testing-library/dom",
|
|
306
307
|
"@testing-library/react",
|
|
308
|
+
"@types/lodash",
|
|
307
309
|
"@types/node",
|
|
308
310
|
"@types/react",
|
|
309
311
|
"@types/react-dom",
|
|
@@ -358,7 +360,7 @@ function createPackageJson(projectName, options) {
|
|
|
358
360
|
"cmdk",
|
|
359
361
|
"color",
|
|
360
362
|
"framer-motion",
|
|
361
|
-
"
|
|
363
|
+
"lodash",
|
|
362
364
|
"motion",
|
|
363
365
|
"next",
|
|
364
366
|
"next-themes",
|
|
@@ -392,6 +394,7 @@ function createPackageJson(projectName, options) {
|
|
|
392
394
|
"@tailwindcss/postcss",
|
|
393
395
|
"@testing-library/dom",
|
|
394
396
|
"@testing-library/react",
|
|
397
|
+
"@types/lodash",
|
|
395
398
|
"@types/node",
|
|
396
399
|
"@types/react",
|
|
397
400
|
"@types/react-dom",
|
|
@@ -431,4 +434,4 @@ function pick(obj, keys) {
|
|
|
431
434
|
|
|
432
435
|
//#endregion
|
|
433
436
|
export { create, cwd, getPackageManager };
|
|
434
|
-
//# sourceMappingURL=create-app-
|
|
437
|
+
//# sourceMappingURL=create-app-Ci2zIGiV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app-Ci2zIGiV.js","names":["cwd: string","root: string","manager: PackageManager","dest: string","options: Options","file: string","dest: string","projectName: string","from: string","to: string","rename: (s: string) => string","obj: T","keys: K[]","result: Partial<T>"],"sources":["../src/git.ts","../src/versions.js","../template/package.json","../src/auto-install.ts","../src/constants.ts","../src/create-app.ts"],"sourcesContent":["import { execSync } from 'node:child_process';\nimport { rmSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/*\nInitialize a Git repo on the project.\n\nBased on https://github.com/vercel/next.js/blob/canary/packages/create-next-app/helpers/git.ts\n*/\n\nfunction isInGitRepository(cwd: string): boolean {\n try {\n execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isInMercurialRepository(cwd: string): boolean {\n try {\n execSync('hg --cwd . root', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isDefaultBranchSet(cwd: string): boolean {\n try {\n execSync('git config init.defaultBranch', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nexport function tryGitInit(root: string): boolean {\n let didInit = false;\n\n try {\n execSync('git --version', { stdio: 'ignore' });\n if (isInGitRepository(root) || isInMercurialRepository(root)) {\n return false;\n }\n\n execSync('git init', { stdio: 'ignore', cwd: root });\n didInit = true;\n\n if (!isDefaultBranchSet(root)) {\n execSync('git checkout -b main', { stdio: 'ignore', cwd: root });\n }\n\n execSync('git add -A', { stdio: 'ignore', cwd: root });\n execSync('git commit -m \"Initial commit from Create Fumadocs App\"', {\n stdio: 'ignore',\n cwd: root,\n });\n return true;\n } catch {\n if (didInit) {\n try {\n rmSync(join(root, '.git'), { recursive: true, force: true });\n } catch {\n // do nothing\n }\n }\n\n return false;\n }\n}\n","export const versions = {\"@inditextech/weave-types\":\"0.23.1\",\"@inditextech/weave-sdk\":\"0.23.1\",\"@inditextech/weave-store-websockets\":\"0.23.1\",\"@inditextech/weave-store-azure-web-pubsub\":\"0.23.1\",\"@inditextech/weave-react\":\"0.23.1\"}","{\n \"name\": \"example-versions\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"description\": \"Used to track dependency versions in create-*-app\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@hookform/resolvers\": \"^4.1.3\",\n \"@inditextech/weave-react\": \"0.0.0\",\n \"@inditextech/weave-sdk\": \"0.0.0\",\n \"@inditextech/weave-store-websockets\": \"0.0.0\",\n \"@inditextech/weave-store-azure-web-pubsub\": \"0.0.0\",\n \"@next/env\": \"^15.2.1\",\n \"@radix-ui/react-accordion\": \"^1.2.3\",\n \"@radix-ui/react-avatar\": \"^1.1.3\",\n \"@radix-ui/react-checkbox\": \"^1.1.4\",\n \"@radix-ui/react-dialog\": \"^1.1.6\",\n \"@radix-ui/react-dropdown-menu\": \"^2.1.6\",\n \"@radix-ui/react-label\": \"^2.1.2\",\n \"@radix-ui/react-popover\": \"^1.1.6\",\n \"@radix-ui/react-scroll-area\": \"^1.2.3\",\n \"@radix-ui/react-select\": \"^2.1.6\",\n \"@radix-ui/react-slider\": \"^1.2.3\",\n \"@radix-ui/react-slot\": \"^1.1.2\",\n \"@radix-ui/react-tabs\": \"^1.1.3\",\n \"@radix-ui/react-tooltip\": \"^1.1.8\",\n \"@react-three/fiber\": \"^8.18.0\",\n \"@react-three/postprocessing\": \"^2.19.1\",\n \"@tanstack/react-query\": \"^5.67.1\",\n \"boring-avatars\": \"^1.11.2\",\n \"change-case\": \"^5.4.4\",\n \"class-variance-authority\": \"^0.7.1\",\n \"clsx\": \"^2.1.1\",\n \"cmdk\": \"^1.0.0\",\n \"color\": \"^5.0.0\",\n \"framer-motion\": \"^11.18.2\",\n \"lodash\": \"^4.17.21\",\n \"motion\": \"^12.4.7\",\n \"next\": \"14.2.28\",\n \"next-themes\": \"^0.4.6\",\n \"ogl\": \"^1.0.11\",\n \"onnxruntime-web\": \"^1.21.0-dev.20250206-d981b153d3\",\n \"pdf-lib\": \"^1.17.1\",\n \"platform-detect\": \"^3.0.1\",\n \"postprocessing\": \"^6.37.1\",\n \"react\": \"18.2.0\",\n \"react-dom\": \"18.2.0\",\n \"react-hook-form\": \"^7.54.2\",\n \"react-number-format\": \"^5.4.3\",\n \"sharp\": \"^0.33.5\",\n \"sonner\": \"^2.0.3\",\n \"tailwind-merge\": \"^3.0.2\",\n \"tailwindcss-animate\": \"^1.0.7\",\n \"three\": \"^0.167.1\",\n \"uuid\": \"^11.1.0\",\n \"vaul\": \"^1.1.2\",\n \"zod\": \"^3.24.2\",\n \"zustand\": \"^5.0.3\"\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"^3\",\n \"@tailwindcss/postcss\": \"^4\",\n \"@testing-library/dom\": \"^10.4.0\",\n \"@testing-library/react\": \"^16.2.0\",\n \"@types/lodash\": \"^4.17.17\",\n \"@types/node\": \"^20\",\n \"@types/react\": \"^18\",\n \"@types/react-dom\": \"^18\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"@vitest/coverage-v8\": \"^3.0.7\",\n \"eslint\": \"^8\",\n \"eslint-config-next\": \"14.2.24\",\n \"eslint-config-prettier\": \"^10.0.2\",\n \"jsdom\": \"^26.0.0\",\n \"lucide-react\": \"^0.477.0\",\n \"tailwindcss\": \"^4\",\n \"typescript\": \"^5\",\n \"vite-tsconfig-paths\": \"^5.1.4\",\n \"vitest\": \"^3.0.7\"\n }\n}\n","import { spawn } from 'cross-spawn';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function getPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n if (userAgent.startsWith('bun')) {\n return 'bun';\n }\n\n return 'npm';\n}\n\nexport function autoInstall(\n manager: PackageManager,\n dest: string,\n): Promise<void> {\n return new Promise((res, reject) => {\n const installProcess = spawn(manager, ['install'], {\n stdio: 'ignore',\n env: {\n ...process.env,\n NODE_ENV: 'development',\n DISABLE_OPENCOLLECTIVE: '1',\n },\n cwd: dest,\n });\n\n installProcess.on('close', (code) => {\n if (code !== 0) {\n reject(new Error('Install failed'));\n } else {\n res();\n }\n });\n });\n}\n","import { fileURLToPath } from 'node:url';\n\nexport const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);\nexport const cwd = process.cwd();\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { tryGitInit } from '@/git';\nimport { versions as localVersions } from '@/versions';\nimport versionPkg from './../template/package.json';\nimport type { PackageManager } from './auto-install';\nimport { autoInstall } from './auto-install';\nimport { cwd, sourceDir } from './constants';\n\nexport type Template = '+nextjs+websockets' | '+nextjs+azure-web-pubsub';\n\nexport interface Options {\n outputDir: string;\n template: Template;\n packageManager: PackageManager;\n installDeps?: boolean;\n initializeGit?: boolean;\n log?: (message: string) => void;\n}\n\nexport async function create(options: Options): Promise<void> {\n const {\n installDeps = true,\n initializeGit = true,\n log = console.log,\n } = options;\n const projectName = path.basename(options.outputDir);\n const dest = path.resolve(cwd, options.outputDir);\n\n function defaultRename(file: string): string {\n file = file.replace('example.gitignore', '.gitignore');\n file = file.replace('example.env', '.env');\n\n return file;\n }\n\n await copy(\n path.join(sourceDir, `template/${options.template}`),\n dest,\n defaultRename\n );\n\n const packageJson = createPackageJson(projectName, options);\n await fs.writeFile(\n path.join(dest, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n const readMe = await getReadme(dest, projectName);\n await fs.writeFile(path.join(dest, 'README.md'), readMe);\n\n if (installDeps) {\n await autoInstall(options.packageManager, dest);\n log('Installed dependencies');\n }\n\n if (initializeGit && tryGitInit(dest)) {\n log('Initialized Git repository');\n }\n}\n\nasync function getReadme(dest: string, projectName: string): Promise<string> {\n const template = await fs\n .readFile(path.join(dest, 'README.md'))\n .then((res) => res.toString());\n\n return `# ${projectName}\\n\\n${template}`;\n}\n\nasync function copy(\n from: string,\n to: string,\n rename: (s: string) => string = (s) => s\n): Promise<void> {\n const stats = await fs.stat(from);\n\n if (stats.isDirectory()) {\n const files = await fs.readdir(from);\n\n await Promise.all(\n files.map((file) =>\n copy(path.join(from, file), rename(path.join(to, file)))\n )\n );\n } else {\n await fs.mkdir(path.dirname(to), { recursive: true });\n await fs.copyFile(from, to);\n }\n}\n\nfunction createPackageJson(projectName: string, options: Options): object {\n if (options.template === '+nextjs+azure-web-pubsub') {\n const dependencies = {\n ...pick(versionPkg.dependencies, [\n '@hookform/resolvers',\n '@next/env',\n '@radix-ui/react-accordion',\n '@radix-ui/react-avatar',\n '@radix-ui/react-checkbox',\n '@radix-ui/react-dialog',\n '@radix-ui/react-dropdown-menu',\n '@radix-ui/react-label',\n '@radix-ui/react-popover',\n '@radix-ui/react-scroll-area',\n '@radix-ui/react-select',\n '@radix-ui/react-slider',\n '@radix-ui/react-slot',\n '@radix-ui/react-tabs',\n '@radix-ui/react-tooltip',\n '@react-three/fiber',\n '@react-three/postprocessing',\n '@tanstack/react-query',\n 'boring-avatars',\n 'change-case',\n 'class-variance-authority',\n 'clsx',\n 'cmdk',\n 'color',\n 'framer-motion',\n 'lodash',\n 'motion',\n 'next',\n 'next-themes',\n 'ogl',\n 'onnxruntime-web',\n 'pdf-lib',\n 'platform-detect',\n 'postprocessing',\n 'react',\n 'react-dom',\n 'react-hook-form',\n 'react-number-format',\n 'sharp',\n 'sonner',\n 'tailwind-merge',\n 'tailwindcss-animate',\n 'three',\n 'uuid',\n 'vaul',\n 'zod',\n 'zustand',\n ]),\n ...pick(localVersions, [\n '@inditextech/weave-react',\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-azure-web-pubsub',\n ]),\n };\n\n const devDependencies = {\n ...pick(versionPkg.devDependencies, [\n '@eslint/eslintrc',\n '@tailwindcss/postcss',\n '@testing-library/dom',\n '@testing-library/react',\n '@types/lodash',\n '@types/node',\n '@types/react',\n '@types/react-dom',\n '@vitejs/plugin-react',\n 'eslint',\n 'eslint-config-next',\n 'eslint-config-prettier',\n 'jsdom',\n 'lucide-react',\n 'tailwindcss',\n 'typescript',\n 'vite-tsconfig-paths',\n ]),\n };\n\n return {\n name: projectName,\n version: '0.0.0',\n private: true,\n scripts: {\n build: 'next build',\n dev: 'next dev --experimental-https',\n lint: 'next lint',\n start: 'next start',\n },\n dependencies: sortObjectKeys(dependencies),\n devDependencies: sortObjectKeys(devDependencies),\n };\n }\n\n const dependencies = {\n ...pick(versionPkg.dependencies, [\n '@hookform/resolvers',\n '@next/env',\n '@radix-ui/react-accordion',\n '@radix-ui/react-avatar',\n '@radix-ui/react-checkbox',\n '@radix-ui/react-dialog',\n '@radix-ui/react-dropdown-menu',\n '@radix-ui/react-label',\n '@radix-ui/react-popover',\n '@radix-ui/react-scroll-area',\n '@radix-ui/react-select',\n '@radix-ui/react-slider',\n '@radix-ui/react-slot',\n '@radix-ui/react-tabs',\n '@radix-ui/react-tooltip',\n '@react-three/fiber',\n '@react-three/postprocessing',\n '@tanstack/react-query',\n 'boring-avatars',\n 'change-case',\n 'class-variance-authority',\n 'clsx',\n 'cmdk',\n 'color',\n 'framer-motion',\n 'lodash',\n 'motion',\n 'next',\n 'next-themes',\n 'ogl',\n 'onnxruntime-web',\n 'pdf-lib',\n 'platform-detect',\n 'postprocessing',\n 'react',\n 'react-dom',\n 'react-hook-form',\n 'react-number-format',\n 'sharp',\n 'sonner',\n 'tailwind-merge',\n 'tailwindcss-animate',\n 'three',\n 'uuid',\n 'vaul',\n 'zod',\n 'zustand',\n ]),\n ...pick(localVersions, [\n '@inditextech/weave-react',\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-websockets',\n ]),\n };\n\n const devDependencies = {\n ...pick(versionPkg.devDependencies, [\n '@eslint/eslintrc',\n '@tailwindcss/postcss',\n '@testing-library/dom',\n '@testing-library/react',\n '@types/lodash',\n '@types/node',\n '@types/react',\n '@types/react-dom',\n '@vitejs/plugin-react',\n 'eslint',\n 'eslint-config-next',\n 'eslint-config-prettier',\n 'jsdom',\n 'lucide-react',\n 'tailwindcss',\n 'typescript',\n 'vite-tsconfig-paths',\n ]),\n };\n\n return {\n name: projectName,\n version: '0.0.0',\n private: true,\n scripts: {\n build: 'next build',\n dev: 'next dev --experimental-https',\n lint: 'next lint',\n start: 'next start',\n },\n dependencies: sortObjectKeys(dependencies),\n devDependencies: sortObjectKeys(devDependencies),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction sortObjectKeys<T extends Record<string, any>>(obj: T): T {\n const sortedEntries = Object.keys(obj)\n .sort()\n .map((key) => [key, obj[key]] as [keyof T, T[keyof T]]);\n\n return Object.fromEntries(sortedEntries) as T;\n}\n\nfunction pick<T extends object, K extends keyof T>(\n obj: T,\n keys: K[]\n): Pick<T, K> {\n const result: Partial<T> = {};\n\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n\n return result as Pick<T, K>;\n}\n"],"mappings":";;;;;;;;AAUA,SAAS,kBAAkBA,OAAsB;AAC/C,KAAI;AACF,WAAS,uCAAuC;GAAE,OAAO;GAAU;EAAK,EAAC;AACzE,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAS,wBAAwBA,OAAsB;AACrD,KAAI;AACF,WAAS,mBAAmB;GAAE,OAAO;GAAU;EAAK,EAAC;AACrD,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAS,mBAAmBA,OAAsB;AAChD,KAAI;AACF,WAAS,iCAAiC;GAAE,OAAO;GAAU;EAAK,EAAC;AACnE,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAgB,WAAWC,MAAuB;CAChD,IAAI,UAAU;AAEd,KAAI;AACF,WAAS,iBAAiB,EAAE,OAAO,SAAU,EAAC;AAC9C,MAAI,kBAAkB,KAAK,IAAI,wBAAwB,KAAK,CAC1D,QAAO;AAGT,WAAS,YAAY;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AACpD,YAAU;AAEV,OAAK,mBAAmB,KAAK,CAC3B,UAAS,wBAAwB;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AAGlE,WAAS,cAAc;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AACtD,WAAS,6DAA2D;GAClE,OAAO;GACP,KAAK;EACN,EAAC;AACF,SAAO;CACR,QAAO;AACN,MAAI,QACF,KAAI;AACF,UAAO,KAAK,MAAM,OAAO,EAAE;IAAE,WAAW;IAAM,OAAO;GAAM,EAAC;EAC7D,QAAO,CAEP;AAGH,SAAO;CACR;AACF;;;;ACtED,MAAa,WAAW;CAAC,4BAA2B;CAAS,0BAAyB;CAAS,uCAAsC;CAAS,6CAA4C;CAAS,4BAA2B;AAAS;;;;WCC7N;cACG;gBACA;kBACI;cACJ;mBACK;CACd,uBAAuB;CACvB,4BAA4B;CAC5B,0BAA0B;CAC1B,uCAAuC;CACvC,6CAA6C;CAC7C,aAAa;CACb,6BAA6B;CAC7B,0BAA0B;CAC1B,4BAA4B;CAC5B,0BAA0B;CAC1B,iCAAiC;CACjC,yBAAyB;CACzB,2BAA2B;CAC3B,+BAA+B;CAC/B,0BAA0B;CAC1B,0BAA0B;CAC1B,wBAAwB;CACxB,wBAAwB;CACxB,2BAA2B;CAC3B,sBAAsB;CACtB,+BAA+B;CAC/B,yBAAyB;CACzB,kBAAkB;CAClB,eAAe;CACf,4BAA4B;CAC5B,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,iBAAiB;CACjB,UAAU;CACV,UAAU;CACV,QAAQ;CACR,eAAe;CACf,OAAO;CACP,mBAAmB;CACnB,WAAW;CACX,mBAAmB;CACnB,kBAAkB;CAClB,SAAS;CACT,aAAa;CACb,mBAAmB;CACnB,uBAAuB;CACvB,SAAS;CACT,UAAU;CACV,kBAAkB;CAClB,uBAAuB;CACvB,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,WAAW;AACZ;sBACkB;CACjB,oBAAoB;CACpB,wBAAwB;CACxB,wBAAwB;CACxB,0BAA0B;CAC1B,iBAAiB;CACjB,eAAe;CACf,gBAAgB;CAChB,oBAAoB;CACpB,wBAAwB;CACxB,uBAAuB;CACvB,UAAU;CACV,sBAAsB;CACtB,0BAA0B;CAC1B,SAAS;CACT,gBAAgB;CAChB,eAAe;CACf,cAAc;CACd,uBAAuB;CACvB,UAAU;AACX;sBA/EH;;;;;;;;AAgFC;;;;AC5ED,SAAgB,oBAAoC;CAClD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;AAEvD,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,MAAM,CAC7B,QAAO;AAGT,QAAO;AACR;AAED,SAAgB,YACdC,SACAC,MACe;AACf,QAAO,IAAI,QAAQ,CAAC,KAAK,WAAW;EAClC,MAAM,iBAAiB,MAAM,SAAS,CAAC,SAAU,GAAE;GACjD,OAAO;GACP,KAAK;IACH,GAAG,QAAQ;IACX,UAAU;IACV,wBAAwB;GACzB;GACD,KAAK;EACN,EAAC;AAEF,iBAAe,GAAG,SAAS,CAAC,SAAS;AACnC,OAAI,SAAS,EACX,QAAO,IAAI,MAAM,kBAAkB;OAEnC,MAAK;EAER,EAAC;CACH;AACF;;;;AC3CD,MAAa,YAAY,cAAc,IAAI,KAAK,MAAM,OAAO,KAAK,KAAK,KAAK;AAC5E,MAAa,MAAM,QAAQ,KAAK;;;;ACiBhC,eAAsB,OAAOC,SAAiC;CAC5D,MAAM,EACJ,cAAc,MACd,gBAAgB,MAChB,MAAM,QAAQ,KACf,GAAG;CACJ,MAAM,cAAc,KAAK,SAAS,QAAQ,UAAU;CACpD,MAAM,OAAO,KAAK,QAAQ,KAAK,QAAQ,UAAU;CAEjD,SAAS,cAAcC,MAAsB;AAC3C,SAAO,KAAK,QAAQ,qBAAqB,aAAa;AACtD,SAAO,KAAK,QAAQ,eAAe,OAAO;AAE1C,SAAO;CACR;AAED,OAAM,KACJ,KAAK,KAAK,YAAY,WAAW,QAAQ,SAAS,EAAE,EACpD,MACA,cACD;CAED,MAAM,cAAc,kBAAkB,aAAa,QAAQ;AAC3D,OAAM,GAAG,UACP,KAAK,KAAK,MAAM,eAAe,EAC/B,KAAK,UAAU,aAAa,MAAM,EAAE,CACrC;CAED,MAAM,SAAS,MAAM,UAAU,MAAM,YAAY;AACjD,OAAM,GAAG,UAAU,KAAK,KAAK,MAAM,YAAY,EAAE,OAAO;AAExD,KAAI,aAAa;AACf,QAAM,YAAY,QAAQ,gBAAgB,KAAK;AAC/C,MAAI,yBAAyB;CAC9B;AAED,KAAI,iBAAiB,WAAW,KAAK,CACnC,KAAI,6BAA6B;AAEpC;AAED,eAAe,UAAUC,MAAcC,aAAsC;CAC3E,MAAM,WAAW,MAAM,GACpB,SAAS,KAAK,KAAK,MAAM,YAAY,CAAC,CACtC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;AAEhC,SAAQ,IAAI,YAAY,MAAM,SAAS;AACxC;AAED,eAAe,KACbC,MACAC,IACAC,SAAgC,CAAC,MAAM,GACxB;CACf,MAAM,QAAQ,MAAM,GAAG,KAAK,KAAK;AAEjC,KAAI,MAAM,aAAa,EAAE;EACvB,MAAM,QAAQ,MAAM,GAAG,QAAQ,KAAK;AAEpC,QAAM,QAAQ,IACZ,MAAM,IAAI,CAAC,SACT,KAAK,KAAK,KAAK,MAAM,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CACzD,CACF;CACF,OAAM;AACL,QAAM,GAAG,MAAM,KAAK,QAAQ,GAAG,EAAE,EAAE,WAAW,KAAM,EAAC;AACrD,QAAM,GAAG,SAAS,MAAM,GAAG;CAC5B;AACF;AAED,SAAS,kBAAkBH,aAAqBH,SAA0B;AACxE,KAAI,QAAQ,aAAa,4BAA4B;EACnD,MAAM,iBAAe;GACnB,GAAG,KAAK,gBAAW,cAAc;IAC/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD,EAAC;GACF,GAAG,KAAK,UAAe;IACrB;IACA;IACA;GACD,EAAC;EACH;EAED,MAAM,oBAAkB,EACtB,GAAG,KAAK,gBAAW,iBAAiB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC,CACH;AAED,SAAO;GACL,MAAM;GACN,SAAS;GACT,SAAS;GACT,SAAS;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;GACR;GACD,cAAc,eAAe,eAAa;GAC1C,iBAAiB,eAAe,kBAAgB;EACjD;CACF;CAED,MAAM,iBAAe;EACnB,GAAG,KAAK,gBAAW,cAAc;GAC/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC;EACF,GAAG,KAAK,UAAe;GACrB;GACA;GACA;EACD,EAAC;CACH;CAED,MAAM,oBAAkB,EACtB,GAAG,KAAK,gBAAW,iBAAiB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,EAAC,CACH;AAED,QAAO;EACL,MAAM;EACN,SAAS;EACT,SAAS;EACT,SAAS;GACP,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;EACR;EACD,cAAc,eAAe,eAAa;EAC1C,iBAAiB,eAAe,kBAAgB;CACjD;AACF;AAGD,SAAS,eAA8CO,KAAW;CAChE,MAAM,gBAAgB,OAAO,KAAK,IAAI,CACnC,MAAM,CACN,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAK,EAA0B;AAEzD,QAAO,OAAO,YAAY,cAAc;AACzC;AAED,SAAS,KACPA,KACAC,MACY;CACZ,MAAMC,SAAqB,CAAE;AAE7B,MAAK,MAAM,OAAO,KAChB,KAAI,OAAO,IACT,QAAO,OAAO,IAAI;AAItB,QAAO;AACR"}
|
package/dist/create-app.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { create, cwd, getPackageManager } from "./create-app-
|
|
2
|
+
import { create, cwd, getPackageManager } from "./create-app-Ci2zIGiV.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
5
5
|
import { cancel, confirm, group, intro, isCancel, outro, select, spinner, text } from "@clack/prompts";
|
package/package.json
CHANGED
|
@@ -5,8 +5,6 @@ import { Toaster } from '@/components/ui/sonner';
|
|
|
5
5
|
import { motion } from 'motion/react';
|
|
6
6
|
import { Logo } from '@/components/utils/logo';
|
|
7
7
|
import LoginForm from '../home-components/login-form';
|
|
8
|
-
import Dither from '../ui/reactbits/Backgrounds/Dither/Dither';
|
|
9
|
-
// import RotatingText from "../ui/reactbits/TextAnimations/RotatingText/RotatingText";
|
|
10
8
|
import { Button } from '../ui/button';
|
|
11
9
|
import { Github, Book } from 'lucide-react';
|
|
12
10
|
import { DOCUMENTATION_URL, GITHUB_URL } from '@/lib/constants';
|
|
@@ -15,19 +13,6 @@ export const Home = () => {
|
|
|
15
13
|
return (
|
|
16
14
|
<>
|
|
17
15
|
<main className="w-full h-full flex justify-center items-center relative p-[40px]">
|
|
18
|
-
<div className="absolute top-0 left-0 right-0 bottom-0">
|
|
19
|
-
<Dither
|
|
20
|
-
waveColor={[0.5, 0.5, 0.5]}
|
|
21
|
-
disableAnimation={false}
|
|
22
|
-
enableMouseInteraction={false}
|
|
23
|
-
mouseRadius={0.3}
|
|
24
|
-
colorNum={6}
|
|
25
|
-
pixelSize={1}
|
|
26
|
-
waveAmplitude={0.1}
|
|
27
|
-
waveFrequency={6}
|
|
28
|
-
waveSpeed={0.05}
|
|
29
|
-
/>
|
|
30
|
-
</div>
|
|
31
16
|
<motion.section
|
|
32
17
|
initial={{ opacity: 0, y: -100 }}
|
|
33
18
|
animate={{ opacity: 1, y: 0 }}
|
|
@@ -51,31 +36,10 @@ export const Home = () => {
|
|
|
51
36
|
</h2>
|
|
52
37
|
</motion.div>
|
|
53
38
|
</div>
|
|
54
|
-
{/* <div className="w-full flex gap-1 items-center justify-center bg-transparent">
|
|
55
|
-
<RotatingText
|
|
56
|
-
texts={[
|
|
57
|
-
"collaborative",
|
|
58
|
-
"easy to use",
|
|
59
|
-
"extensible",
|
|
60
|
-
"visual",
|
|
61
|
-
"open source",
|
|
62
|
-
]}
|
|
63
|
-
mainClassName="font-inter font-light leading-[100px] w-full h-full text-black overflow-hidden justify-center items-center text-3xl"
|
|
64
|
-
staggerFrom={"last"}
|
|
65
|
-
initial={{ y: "100%" }}
|
|
66
|
-
animate={{ y: 0 }}
|
|
67
|
-
exit={{ y: "-120%" }}
|
|
68
|
-
staggerDuration={0.025}
|
|
69
|
-
splitBy="characters"
|
|
70
|
-
splitLevelClassName="overflow-hidden pb-0.5 sm:pb-1 md:pb-1"
|
|
71
|
-
transition={{ type: "spring", damping: 30, stiffness: 400 }}
|
|
72
|
-
rotationInterval={2000}
|
|
73
|
-
/>
|
|
74
|
-
</div> */}
|
|
75
39
|
<div className="w-full flex flex-col gap-2 items-center justify-center bg-background p-[32px] border border-[#c9c9c9] mt-[32px]">
|
|
76
40
|
<LoginForm />
|
|
77
41
|
</div>
|
|
78
|
-
<div className="w-full flex gap-2 items-center justify-center bg-background p-8 py-2 mt-4">
|
|
42
|
+
<div className="w-full flex gap-2 items-center justify-center bg-background p-8 py-2 mt-4 border border-[#c9c9c9]">
|
|
79
43
|
<Button
|
|
80
44
|
variant="link"
|
|
81
45
|
onClick={() => {
|
package/template/+nextjs+azure-web-pubsub/components/room-components/hooks/use-keyboard-handler.tsx
CHANGED
|
@@ -97,6 +97,14 @@ export function useKeyboardHandler() {
|
|
|
97
97
|
triggerTool('rectangleTool');
|
|
98
98
|
}, ['KeyR']);
|
|
99
99
|
|
|
100
|
+
useKeyDown(() => {
|
|
101
|
+
triggerTool('ellipseTool');
|
|
102
|
+
}, ['KeyE']);
|
|
103
|
+
|
|
104
|
+
useKeyDown(() => {
|
|
105
|
+
triggerTool('regularPolygonTool');
|
|
106
|
+
}, ['KeyP']);
|
|
107
|
+
|
|
100
108
|
useKeyDown(() => {
|
|
101
109
|
triggerTool('penTool');
|
|
102
110
|
}, ['KeyL']);
|
|
@@ -118,6 +126,14 @@ export function useKeyboardHandler() {
|
|
|
118
126
|
(e) => !(e.ctrlKey || e.metaKey)
|
|
119
127
|
);
|
|
120
128
|
|
|
129
|
+
useKeyDown(() => {
|
|
130
|
+
triggerTool('starTool');
|
|
131
|
+
}, ['KeyJ']);
|
|
132
|
+
|
|
133
|
+
useKeyDown(() => {
|
|
134
|
+
triggerTool('arrowTool');
|
|
135
|
+
}, ['KeyA']);
|
|
136
|
+
|
|
121
137
|
useKeyDown(
|
|
122
138
|
() => {
|
|
123
139
|
triggerTool('colorTokenTool');
|
|
@@ -133,10 +149,8 @@ export function useKeyboardHandler() {
|
|
|
133
149
|
actualStore.undoStateStep();
|
|
134
150
|
}
|
|
135
151
|
},
|
|
136
|
-
['
|
|
137
|
-
(e) =>
|
|
138
|
-
e.shiftKey &&
|
|
139
|
-
([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
152
|
+
['KeyZ'],
|
|
153
|
+
(e) => ([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
140
154
|
);
|
|
141
155
|
|
|
142
156
|
useKeyDown(
|
|
@@ -146,10 +160,8 @@ export function useKeyboardHandler() {
|
|
|
146
160
|
actualStore.redoStateStep();
|
|
147
161
|
}
|
|
148
162
|
},
|
|
149
|
-
['
|
|
150
|
-
(e) =>
|
|
151
|
-
e.shiftKey &&
|
|
152
|
-
([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
163
|
+
['KeyY'],
|
|
164
|
+
(e) => ([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
153
165
|
);
|
|
154
166
|
|
|
155
167
|
/* Keyboard shortcuts visibility */
|
package/template/+nextjs+azure-web-pubsub/components/room-components/overlay/tools-overlay.tsx
CHANGED
|
@@ -231,8 +231,8 @@ export function ToolsOverlay() {
|
|
|
231
231
|
<p>Add a ellipsis</p>
|
|
232
232
|
<ShortcutElement
|
|
233
233
|
shortcuts={{
|
|
234
|
-
[SYSTEM_OS.MAC]: '
|
|
235
|
-
[SYSTEM_OS.OTHER]: '
|
|
234
|
+
[SYSTEM_OS.MAC]: 'E',
|
|
235
|
+
[SYSTEM_OS.OTHER]: 'E',
|
|
236
236
|
}}
|
|
237
237
|
/>
|
|
238
238
|
</div>
|
|
@@ -308,7 +308,7 @@ export function ToolsOverlay() {
|
|
|
308
308
|
<ShortcutElement
|
|
309
309
|
shortcuts={{
|
|
310
310
|
[SYSTEM_OS.MAC]: 'T',
|
|
311
|
-
[SYSTEM_OS.OTHER]: '
|
|
311
|
+
[SYSTEM_OS.OTHER]: 'T',
|
|
312
312
|
}}
|
|
313
313
|
/>
|
|
314
314
|
</div>
|
|
@@ -348,8 +348,8 @@ export function ToolsOverlay() {
|
|
|
348
348
|
<p>Add a star</p>
|
|
349
349
|
<ShortcutElement
|
|
350
350
|
shortcuts={{
|
|
351
|
-
[SYSTEM_OS.MAC]: '
|
|
352
|
-
[SYSTEM_OS.OTHER]: '
|
|
351
|
+
[SYSTEM_OS.MAC]: 'J',
|
|
352
|
+
[SYSTEM_OS.OTHER]: 'J',
|
|
353
353
|
}}
|
|
354
354
|
/>
|
|
355
355
|
</div>
|
|
@@ -427,12 +427,12 @@ export function ToolsOverlay() {
|
|
|
427
427
|
}
|
|
428
428
|
}}
|
|
429
429
|
label={
|
|
430
|
-
<div className="flex
|
|
430
|
+
<div className="flex gap-3 justify-start items-center">
|
|
431
431
|
<p>Undo latest changes</p>
|
|
432
432
|
<ShortcutElement
|
|
433
433
|
shortcuts={{
|
|
434
|
-
[SYSTEM_OS.MAC]: '
|
|
435
|
-
[SYSTEM_OS.OTHER]: '
|
|
434
|
+
[SYSTEM_OS.MAC]: '⌘ Z',
|
|
435
|
+
[SYSTEM_OS.OTHER]: 'Ctrl Z',
|
|
436
436
|
}}
|
|
437
437
|
/>
|
|
438
438
|
</div>
|
|
@@ -455,8 +455,8 @@ export function ToolsOverlay() {
|
|
|
455
455
|
<p>Redo latest changes</p>
|
|
456
456
|
<ShortcutElement
|
|
457
457
|
shortcuts={{
|
|
458
|
-
[SYSTEM_OS.MAC]: '
|
|
459
|
-
[SYSTEM_OS.OTHER]: '
|
|
458
|
+
[SYSTEM_OS.MAC]: '⌘ Y',
|
|
459
|
+
[SYSTEM_OS.OTHER]: 'Ctrl Y',
|
|
460
460
|
}}
|
|
461
461
|
/>
|
|
462
462
|
</div>
|
|
@@ -5,8 +5,6 @@ import { Toaster } from '@/components/ui/sonner';
|
|
|
5
5
|
import { motion } from 'motion/react';
|
|
6
6
|
import { Logo } from '@/components/utils/logo';
|
|
7
7
|
import LoginForm from '../home-components/login-form';
|
|
8
|
-
import Dither from '../ui/reactbits/Backgrounds/Dither/Dither';
|
|
9
|
-
// import RotatingText from "../ui/reactbits/TextAnimations/RotatingText/RotatingText";
|
|
10
8
|
import { Button } from '../ui/button';
|
|
11
9
|
import { Github, Book } from 'lucide-react';
|
|
12
10
|
import { DOCUMENTATION_URL, GITHUB_URL } from '@/lib/constants';
|
|
@@ -15,19 +13,6 @@ export const Home = () => {
|
|
|
15
13
|
return (
|
|
16
14
|
<>
|
|
17
15
|
<main className="w-full h-full flex justify-center items-center relative p-[40px]">
|
|
18
|
-
<div className="absolute top-0 left-0 right-0 bottom-0">
|
|
19
|
-
<Dither
|
|
20
|
-
waveColor={[0.5, 0.5, 0.5]}
|
|
21
|
-
disableAnimation={false}
|
|
22
|
-
enableMouseInteraction={false}
|
|
23
|
-
mouseRadius={0.3}
|
|
24
|
-
colorNum={6}
|
|
25
|
-
pixelSize={1}
|
|
26
|
-
waveAmplitude={0.1}
|
|
27
|
-
waveFrequency={6}
|
|
28
|
-
waveSpeed={0.05}
|
|
29
|
-
/>
|
|
30
|
-
</div>
|
|
31
16
|
<motion.section
|
|
32
17
|
initial={{ opacity: 0, y: -100 }}
|
|
33
18
|
animate={{ opacity: 1, y: 0 }}
|
|
@@ -51,31 +36,10 @@ export const Home = () => {
|
|
|
51
36
|
</h2>
|
|
52
37
|
</motion.div>
|
|
53
38
|
</div>
|
|
54
|
-
{/* <div className="w-full flex gap-1 items-center justify-center bg-transparent">
|
|
55
|
-
<RotatingText
|
|
56
|
-
texts={[
|
|
57
|
-
"collaborative",
|
|
58
|
-
"easy to use",
|
|
59
|
-
"extensible",
|
|
60
|
-
"visual",
|
|
61
|
-
"open source",
|
|
62
|
-
]}
|
|
63
|
-
mainClassName="font-inter font-light leading-[100px] w-full h-full text-black overflow-hidden justify-center items-center text-3xl"
|
|
64
|
-
staggerFrom={"last"}
|
|
65
|
-
initial={{ y: "100%" }}
|
|
66
|
-
animate={{ y: 0 }}
|
|
67
|
-
exit={{ y: "-120%" }}
|
|
68
|
-
staggerDuration={0.025}
|
|
69
|
-
splitBy="characters"
|
|
70
|
-
splitLevelClassName="overflow-hidden pb-0.5 sm:pb-1 md:pb-1"
|
|
71
|
-
transition={{ type: "spring", damping: 30, stiffness: 400 }}
|
|
72
|
-
rotationInterval={2000}
|
|
73
|
-
/>
|
|
74
|
-
</div> */}
|
|
75
39
|
<div className="w-full flex flex-col gap-2 items-center justify-center bg-background p-[32px] border border-[#c9c9c9] mt-[32px]">
|
|
76
40
|
<LoginForm />
|
|
77
41
|
</div>
|
|
78
|
-
<div className="w-full flex gap-2 items-center justify-center bg-background p-8 py-2 mt-4">
|
|
42
|
+
<div className="w-full flex gap-2 items-center justify-center bg-background p-8 py-2 mt-4 border border-[#c9c9c9]">
|
|
79
43
|
<Button
|
|
80
44
|
variant="link"
|
|
81
45
|
onClick={() => {
|
package/template/+nextjs+websockets/components/room-components/hooks/use-keyboard-handler.tsx
CHANGED
|
@@ -97,6 +97,14 @@ export function useKeyboardHandler() {
|
|
|
97
97
|
triggerTool('rectangleTool');
|
|
98
98
|
}, ['KeyR']);
|
|
99
99
|
|
|
100
|
+
useKeyDown(() => {
|
|
101
|
+
triggerTool('ellipseTool');
|
|
102
|
+
}, ['KeyE']);
|
|
103
|
+
|
|
104
|
+
useKeyDown(() => {
|
|
105
|
+
triggerTool('regularPolygonTool');
|
|
106
|
+
}, ['KeyP']);
|
|
107
|
+
|
|
100
108
|
useKeyDown(() => {
|
|
101
109
|
triggerTool('penTool');
|
|
102
110
|
}, ['KeyL']);
|
|
@@ -118,6 +126,14 @@ export function useKeyboardHandler() {
|
|
|
118
126
|
(e) => !(e.ctrlKey || e.metaKey)
|
|
119
127
|
);
|
|
120
128
|
|
|
129
|
+
useKeyDown(() => {
|
|
130
|
+
triggerTool('starTool');
|
|
131
|
+
}, ['KeyJ']);
|
|
132
|
+
|
|
133
|
+
useKeyDown(() => {
|
|
134
|
+
triggerTool('arrowTool');
|
|
135
|
+
}, ['KeyA']);
|
|
136
|
+
|
|
121
137
|
useKeyDown(
|
|
122
138
|
() => {
|
|
123
139
|
triggerTool('colorTokenTool');
|
|
@@ -133,10 +149,8 @@ export function useKeyboardHandler() {
|
|
|
133
149
|
actualStore.undoStateStep();
|
|
134
150
|
}
|
|
135
151
|
},
|
|
136
|
-
['
|
|
137
|
-
(e) =>
|
|
138
|
-
e.shiftKey &&
|
|
139
|
-
([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
152
|
+
['KeyZ'],
|
|
153
|
+
(e) => ([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
140
154
|
);
|
|
141
155
|
|
|
142
156
|
useKeyDown(
|
|
@@ -146,10 +160,8 @@ export function useKeyboardHandler() {
|
|
|
146
160
|
actualStore.redoStateStep();
|
|
147
161
|
}
|
|
148
162
|
},
|
|
149
|
-
['
|
|
150
|
-
(e) =>
|
|
151
|
-
e.shiftKey &&
|
|
152
|
-
([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
163
|
+
['KeyY'],
|
|
164
|
+
(e) => ([SYSTEM_OS.MAC as string].includes(os) ? e.metaKey : e.ctrlKey)
|
|
153
165
|
);
|
|
154
166
|
|
|
155
167
|
/* Keyboard shortcuts visibility */
|
|
@@ -231,8 +231,8 @@ export function ToolsOverlay() {
|
|
|
231
231
|
<p>Add a ellipsis</p>
|
|
232
232
|
<ShortcutElement
|
|
233
233
|
shortcuts={{
|
|
234
|
-
[SYSTEM_OS.MAC]: '
|
|
235
|
-
[SYSTEM_OS.OTHER]: '
|
|
234
|
+
[SYSTEM_OS.MAC]: 'E',
|
|
235
|
+
[SYSTEM_OS.OTHER]: 'E',
|
|
236
236
|
}}
|
|
237
237
|
/>
|
|
238
238
|
</div>
|
|
@@ -308,7 +308,7 @@ export function ToolsOverlay() {
|
|
|
308
308
|
<ShortcutElement
|
|
309
309
|
shortcuts={{
|
|
310
310
|
[SYSTEM_OS.MAC]: 'T',
|
|
311
|
-
[SYSTEM_OS.OTHER]: '
|
|
311
|
+
[SYSTEM_OS.OTHER]: 'T',
|
|
312
312
|
}}
|
|
313
313
|
/>
|
|
314
314
|
</div>
|
|
@@ -348,8 +348,8 @@ export function ToolsOverlay() {
|
|
|
348
348
|
<p>Add a star</p>
|
|
349
349
|
<ShortcutElement
|
|
350
350
|
shortcuts={{
|
|
351
|
-
[SYSTEM_OS.MAC]: '
|
|
352
|
-
[SYSTEM_OS.OTHER]: '
|
|
351
|
+
[SYSTEM_OS.MAC]: 'J',
|
|
352
|
+
[SYSTEM_OS.OTHER]: 'J',
|
|
353
353
|
}}
|
|
354
354
|
/>
|
|
355
355
|
</div>
|
|
@@ -427,12 +427,12 @@ export function ToolsOverlay() {
|
|
|
427
427
|
}
|
|
428
428
|
}}
|
|
429
429
|
label={
|
|
430
|
-
<div className="flex
|
|
430
|
+
<div className="flex gap-3 justify-start items-center">
|
|
431
431
|
<p>Undo latest changes</p>
|
|
432
432
|
<ShortcutElement
|
|
433
433
|
shortcuts={{
|
|
434
|
-
[SYSTEM_OS.MAC]: '
|
|
435
|
-
[SYSTEM_OS.OTHER]: '
|
|
434
|
+
[SYSTEM_OS.MAC]: '⌘ Z',
|
|
435
|
+
[SYSTEM_OS.OTHER]: 'Ctrl Z',
|
|
436
436
|
}}
|
|
437
437
|
/>
|
|
438
438
|
</div>
|
|
@@ -455,8 +455,8 @@ export function ToolsOverlay() {
|
|
|
455
455
|
<p>Redo latest changes</p>
|
|
456
456
|
<ShortcutElement
|
|
457
457
|
shortcuts={{
|
|
458
|
-
[SYSTEM_OS.MAC]: '
|
|
459
|
-
[SYSTEM_OS.OTHER]: '
|
|
458
|
+
[SYSTEM_OS.MAC]: '⌘ Y',
|
|
459
|
+
[SYSTEM_OS.OTHER]: 'Ctrl Y',
|
|
460
460
|
}}
|
|
461
461
|
/>
|
|
462
462
|
</div>
|
package/template/package.json
CHANGED
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"cmdk": "^1.0.0",
|
|
35
35
|
"color": "^5.0.0",
|
|
36
36
|
"framer-motion": "^11.18.2",
|
|
37
|
-
"
|
|
37
|
+
"lodash": "^4.17.21",
|
|
38
38
|
"motion": "^12.4.7",
|
|
39
39
|
"next": "14.2.28",
|
|
40
40
|
"next-themes": "^0.4.6",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"@tailwindcss/postcss": "^4",
|
|
63
63
|
"@testing-library/dom": "^10.4.0",
|
|
64
64
|
"@testing-library/react": "^16.2.0",
|
|
65
|
+
"@types/lodash": "^4.17.17",
|
|
65
66
|
"@types/node": "^20",
|
|
66
67
|
"@types/react": "^18",
|
|
67
68
|
"@types/react-dom": "^18",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-app-FfMOr9Hr.js","names":["cwd: string","root: string","manager: PackageManager","dest: string","options: Options","file: string","dest: string","projectName: string","from: string","to: string","rename: (s: string) => string","obj: T","keys: K[]","result: Partial<T>"],"sources":["../src/git.ts","../src/versions.js","../template/package.json","../src/auto-install.ts","../src/constants.ts","../src/create-app.ts"],"sourcesContent":["import { execSync } from 'node:child_process';\nimport { rmSync } from 'node:fs';\nimport { join } from 'node:path';\n\n/*\nInitialize a Git repo on the project.\n\nBased on https://github.com/vercel/next.js/blob/canary/packages/create-next-app/helpers/git.ts\n*/\n\nfunction isInGitRepository(cwd: string): boolean {\n try {\n execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isInMercurialRepository(cwd: string): boolean {\n try {\n execSync('hg --cwd . root', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isDefaultBranchSet(cwd: string): boolean {\n try {\n execSync('git config init.defaultBranch', { stdio: 'ignore', cwd });\n return true;\n } catch {\n return false;\n }\n}\n\nexport function tryGitInit(root: string): boolean {\n let didInit = false;\n\n try {\n execSync('git --version', { stdio: 'ignore' });\n if (isInGitRepository(root) || isInMercurialRepository(root)) {\n return false;\n }\n\n execSync('git init', { stdio: 'ignore', cwd: root });\n didInit = true;\n\n if (!isDefaultBranchSet(root)) {\n execSync('git checkout -b main', { stdio: 'ignore', cwd: root });\n }\n\n execSync('git add -A', { stdio: 'ignore', cwd: root });\n execSync('git commit -m \"Initial commit from Create Fumadocs App\"', {\n stdio: 'ignore',\n cwd: root,\n });\n return true;\n } catch {\n if (didInit) {\n try {\n rmSync(join(root, '.git'), { recursive: true, force: true });\n } catch {\n // do nothing\n }\n }\n\n return false;\n }\n}\n","export const versions = {\"@inditextech/weave-types\":\"0.23.0\",\"@inditextech/weave-sdk\":\"0.23.0\",\"@inditextech/weave-store-websockets\":\"0.23.0\",\"@inditextech/weave-store-azure-web-pubsub\":\"0.23.0\",\"@inditextech/weave-react\":\"0.23.0\"}","{\n \"name\": \"example-versions\",\n \"version\": \"0.0.0\",\n \"private\": true,\n \"description\": \"Used to track dependency versions in create-*-app\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@hookform/resolvers\": \"^4.1.3\",\n \"@inditextech/weave-react\": \"0.0.0\",\n \"@inditextech/weave-sdk\": \"0.0.0\",\n \"@inditextech/weave-store-websockets\": \"0.0.0\",\n \"@inditextech/weave-store-azure-web-pubsub\": \"0.0.0\",\n \"@next/env\": \"^15.2.1\",\n \"@radix-ui/react-accordion\": \"^1.2.3\",\n \"@radix-ui/react-avatar\": \"^1.1.3\",\n \"@radix-ui/react-checkbox\": \"^1.1.4\",\n \"@radix-ui/react-dialog\": \"^1.1.6\",\n \"@radix-ui/react-dropdown-menu\": \"^2.1.6\",\n \"@radix-ui/react-label\": \"^2.1.2\",\n \"@radix-ui/react-popover\": \"^1.1.6\",\n \"@radix-ui/react-scroll-area\": \"^1.2.3\",\n \"@radix-ui/react-select\": \"^2.1.6\",\n \"@radix-ui/react-slider\": \"^1.2.3\",\n \"@radix-ui/react-slot\": \"^1.1.2\",\n \"@radix-ui/react-tabs\": \"^1.1.3\",\n \"@radix-ui/react-tooltip\": \"^1.1.8\",\n \"@react-three/fiber\": \"^8.18.0\",\n \"@react-three/postprocessing\": \"^2.19.1\",\n \"@tanstack/react-query\": \"^5.67.1\",\n \"boring-avatars\": \"^1.11.2\",\n \"change-case\": \"^5.4.4\",\n \"class-variance-authority\": \"^0.7.1\",\n \"clsx\": \"^2.1.1\",\n \"cmdk\": \"^1.0.0\",\n \"color\": \"^5.0.0\",\n \"framer-motion\": \"^11.18.2\",\n \"konva\": \"^9.3.18\",\n \"motion\": \"^12.4.7\",\n \"next\": \"14.2.28\",\n \"next-themes\": \"^0.4.6\",\n \"ogl\": \"^1.0.11\",\n \"onnxruntime-web\": \"^1.21.0-dev.20250206-d981b153d3\",\n \"pdf-lib\": \"^1.17.1\",\n \"platform-detect\": \"^3.0.1\",\n \"postprocessing\": \"^6.37.1\",\n \"react\": \"18.2.0\",\n \"react-dom\": \"18.2.0\",\n \"react-hook-form\": \"^7.54.2\",\n \"react-number-format\": \"^5.4.3\",\n \"sharp\": \"^0.33.5\",\n \"sonner\": \"^2.0.3\",\n \"tailwind-merge\": \"^3.0.2\",\n \"tailwindcss-animate\": \"^1.0.7\",\n \"three\": \"^0.167.1\",\n \"uuid\": \"^11.1.0\",\n \"vaul\": \"^1.1.2\",\n \"zod\": \"^3.24.2\",\n \"zustand\": \"^5.0.3\"\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"^3\",\n \"@tailwindcss/postcss\": \"^4\",\n \"@testing-library/dom\": \"^10.4.0\",\n \"@testing-library/react\": \"^16.2.0\",\n \"@types/node\": \"^20\",\n \"@types/react\": \"^18\",\n \"@types/react-dom\": \"^18\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"@vitest/coverage-v8\": \"^3.0.7\",\n \"eslint\": \"^8\",\n \"eslint-config-next\": \"14.2.24\",\n \"eslint-config-prettier\": \"^10.0.2\",\n \"jsdom\": \"^26.0.0\",\n \"lucide-react\": \"^0.477.0\",\n \"tailwindcss\": \"^4\",\n \"typescript\": \"^5\",\n \"vite-tsconfig-paths\": \"^5.1.4\",\n \"vitest\": \"^3.0.7\"\n }\n}\n","import { spawn } from 'cross-spawn';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function getPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n if (userAgent.startsWith('bun')) {\n return 'bun';\n }\n\n return 'npm';\n}\n\nexport function autoInstall(\n manager: PackageManager,\n dest: string,\n): Promise<void> {\n return new Promise((res, reject) => {\n const installProcess = spawn(manager, ['install'], {\n stdio: 'ignore',\n env: {\n ...process.env,\n NODE_ENV: 'development',\n DISABLE_OPENCOLLECTIVE: '1',\n },\n cwd: dest,\n });\n\n installProcess.on('close', (code) => {\n if (code !== 0) {\n reject(new Error('Install failed'));\n } else {\n res();\n }\n });\n });\n}\n","import { fileURLToPath } from 'node:url';\n\nexport const sourceDir = fileURLToPath(new URL(`../`, import.meta.url).href);\nexport const cwd = process.cwd();\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { tryGitInit } from '@/git';\nimport { versions as localVersions } from '@/versions';\nimport versionPkg from './../template/package.json';\nimport type { PackageManager } from './auto-install';\nimport { autoInstall } from './auto-install';\nimport { cwd, sourceDir } from './constants';\n\nexport type Template = '+nextjs+websockets' | '+nextjs+azure-web-pubsub';\n\nexport interface Options {\n outputDir: string;\n template: Template;\n packageManager: PackageManager;\n installDeps?: boolean;\n initializeGit?: boolean;\n log?: (message: string) => void;\n}\n\nexport async function create(options: Options): Promise<void> {\n const {\n installDeps = true,\n initializeGit = true,\n log = console.log,\n } = options;\n const projectName = path.basename(options.outputDir);\n const dest = path.resolve(cwd, options.outputDir);\n\n function defaultRename(file: string): string {\n file = file.replace('example.gitignore', '.gitignore');\n file = file.replace('example.env', '.env');\n\n return file;\n }\n\n await copy(\n path.join(sourceDir, `template/${options.template}`),\n dest,\n defaultRename\n );\n\n const packageJson = createPackageJson(projectName, options);\n await fs.writeFile(\n path.join(dest, 'package.json'),\n JSON.stringify(packageJson, null, 2)\n );\n\n const readMe = await getReadme(dest, projectName);\n await fs.writeFile(path.join(dest, 'README.md'), readMe);\n\n if (installDeps) {\n await autoInstall(options.packageManager, dest);\n log('Installed dependencies');\n }\n\n if (initializeGit && tryGitInit(dest)) {\n log('Initialized Git repository');\n }\n}\n\nasync function getReadme(dest: string, projectName: string): Promise<string> {\n const template = await fs\n .readFile(path.join(dest, 'README.md'))\n .then((res) => res.toString());\n\n return `# ${projectName}\\n\\n${template}`;\n}\n\nasync function copy(\n from: string,\n to: string,\n rename: (s: string) => string = (s) => s\n): Promise<void> {\n const stats = await fs.stat(from);\n\n if (stats.isDirectory()) {\n const files = await fs.readdir(from);\n\n await Promise.all(\n files.map((file) =>\n copy(path.join(from, file), rename(path.join(to, file)))\n )\n );\n } else {\n await fs.mkdir(path.dirname(to), { recursive: true });\n await fs.copyFile(from, to);\n }\n}\n\nfunction createPackageJson(projectName: string, options: Options): object {\n if (options.template === '+nextjs+azure-web-pubsub') {\n const dependencies = {\n ...pick(versionPkg.dependencies, [\n '@hookform/resolvers',\n '@next/env',\n '@radix-ui/react-accordion',\n '@radix-ui/react-avatar',\n '@radix-ui/react-checkbox',\n '@radix-ui/react-dialog',\n '@radix-ui/react-dropdown-menu',\n '@radix-ui/react-label',\n '@radix-ui/react-popover',\n '@radix-ui/react-scroll-area',\n '@radix-ui/react-select',\n '@radix-ui/react-slider',\n '@radix-ui/react-slot',\n '@radix-ui/react-tabs',\n '@radix-ui/react-tooltip',\n '@react-three/fiber',\n '@react-three/postprocessing',\n '@tanstack/react-query',\n 'boring-avatars',\n 'change-case',\n 'class-variance-authority',\n 'clsx',\n 'cmdk',\n 'color',\n 'framer-motion',\n 'konva',\n 'motion',\n 'next',\n 'next-themes',\n 'ogl',\n 'onnxruntime-web',\n 'pdf-lib',\n 'platform-detect',\n 'postprocessing',\n 'react',\n 'react-dom',\n 'react-hook-form',\n 'react-number-format',\n 'sharp',\n 'sonner',\n 'tailwind-merge',\n 'tailwindcss-animate',\n 'three',\n 'uuid',\n 'vaul',\n 'zod',\n 'zustand',\n ]),\n ...pick(localVersions, [\n '@inditextech/weave-react',\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-azure-web-pubsub',\n ]),\n };\n\n const devDependencies = {\n ...pick(versionPkg.devDependencies, [\n '@eslint/eslintrc',\n '@tailwindcss/postcss',\n '@testing-library/dom',\n '@testing-library/react',\n '@types/node',\n '@types/react',\n '@types/react-dom',\n '@vitejs/plugin-react',\n 'eslint',\n 'eslint-config-next',\n 'eslint-config-prettier',\n 'jsdom',\n 'lucide-react',\n 'tailwindcss',\n 'typescript',\n 'vite-tsconfig-paths',\n ]),\n };\n\n return {\n name: projectName,\n version: '0.0.0',\n private: true,\n scripts: {\n build: 'next build',\n dev: 'next dev --experimental-https',\n lint: 'next lint',\n start: 'next start',\n },\n dependencies: sortObjectKeys(dependencies),\n devDependencies: sortObjectKeys(devDependencies),\n };\n }\n\n const dependencies = {\n ...pick(versionPkg.dependencies, [\n '@hookform/resolvers',\n '@next/env',\n '@radix-ui/react-accordion',\n '@radix-ui/react-avatar',\n '@radix-ui/react-checkbox',\n '@radix-ui/react-dialog',\n '@radix-ui/react-dropdown-menu',\n '@radix-ui/react-label',\n '@radix-ui/react-popover',\n '@radix-ui/react-scroll-area',\n '@radix-ui/react-select',\n '@radix-ui/react-slider',\n '@radix-ui/react-slot',\n '@radix-ui/react-tabs',\n '@radix-ui/react-tooltip',\n '@react-three/fiber',\n '@react-three/postprocessing',\n '@tanstack/react-query',\n 'boring-avatars',\n 'change-case',\n 'class-variance-authority',\n 'clsx',\n 'cmdk',\n 'color',\n 'framer-motion',\n 'konva',\n 'motion',\n 'next',\n 'next-themes',\n 'ogl',\n 'onnxruntime-web',\n 'pdf-lib',\n 'platform-detect',\n 'postprocessing',\n 'react',\n 'react-dom',\n 'react-hook-form',\n 'react-number-format',\n 'sharp',\n 'sonner',\n 'tailwind-merge',\n 'tailwindcss-animate',\n 'three',\n 'uuid',\n 'vaul',\n 'zod',\n 'zustand',\n ]),\n ...pick(localVersions, [\n '@inditextech/weave-react',\n '@inditextech/weave-sdk',\n '@inditextech/weave-store-websockets',\n ]),\n };\n\n const devDependencies = {\n ...pick(versionPkg.devDependencies, [\n '@eslint/eslintrc',\n '@tailwindcss/postcss',\n '@testing-library/dom',\n '@testing-library/react',\n '@types/node',\n '@types/react',\n '@types/react-dom',\n '@vitejs/plugin-react',\n 'eslint',\n 'eslint-config-next',\n 'eslint-config-prettier',\n 'jsdom',\n 'lucide-react',\n 'tailwindcss',\n 'typescript',\n 'vite-tsconfig-paths',\n ]),\n };\n\n return {\n name: projectName,\n version: '0.0.0',\n private: true,\n scripts: {\n build: 'next build',\n dev: 'next dev --experimental-https',\n lint: 'next lint',\n start: 'next start',\n },\n dependencies: sortObjectKeys(dependencies),\n devDependencies: sortObjectKeys(devDependencies),\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction sortObjectKeys<T extends Record<string, any>>(obj: T): T {\n const sortedEntries = Object.keys(obj)\n .sort()\n .map((key) => [key, obj[key]] as [keyof T, T[keyof T]]);\n\n return Object.fromEntries(sortedEntries) as T;\n}\n\nfunction pick<T extends object, K extends keyof T>(\n obj: T,\n keys: K[]\n): Pick<T, K> {\n const result: Partial<T> = {};\n\n for (const key of keys) {\n if (key in obj) {\n result[key] = obj[key];\n }\n }\n\n return result as Pick<T, K>;\n}\n"],"mappings":";;;;;;;;AAUA,SAAS,kBAAkBA,OAAsB;AAC/C,KAAI;AACF,WAAS,uCAAuC;GAAE,OAAO;GAAU;EAAK,EAAC;AACzE,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAS,wBAAwBA,OAAsB;AACrD,KAAI;AACF,WAAS,mBAAmB;GAAE,OAAO;GAAU;EAAK,EAAC;AACrD,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAS,mBAAmBA,OAAsB;AAChD,KAAI;AACF,WAAS,iCAAiC;GAAE,OAAO;GAAU;EAAK,EAAC;AACnE,SAAO;CACR,QAAO;AACN,SAAO;CACR;AACF;AAED,SAAgB,WAAWC,MAAuB;CAChD,IAAI,UAAU;AAEd,KAAI;AACF,WAAS,iBAAiB,EAAE,OAAO,SAAU,EAAC;AAC9C,MAAI,kBAAkB,KAAK,IAAI,wBAAwB,KAAK,CAC1D,QAAO;AAGT,WAAS,YAAY;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AACpD,YAAU;AAEV,OAAK,mBAAmB,KAAK,CAC3B,UAAS,wBAAwB;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AAGlE,WAAS,cAAc;GAAE,OAAO;GAAU,KAAK;EAAM,EAAC;AACtD,WAAS,6DAA2D;GAClE,OAAO;GACP,KAAK;EACN,EAAC;AACF,SAAO;CACR,QAAO;AACN,MAAI,QACF,KAAI;AACF,UAAO,KAAK,MAAM,OAAO,EAAE;IAAE,WAAW;IAAM,OAAO;GAAM,EAAC;EAC7D,QAAO,CAEP;AAGH,SAAO;CACR;AACF;;;;ACtED,MAAa,WAAW;CAAC,4BAA2B;CAAS,0BAAyB;CAAS,uCAAsC;CAAS,6CAA4C;CAAS,4BAA2B;AAAS;;;;WCC7N;cACG;gBACA;kBACI;cACJ;mBACK;CACd,uBAAuB;CACvB,4BAA4B;CAC5B,0BAA0B;CAC1B,uCAAuC;CACvC,6CAA6C;CAC7C,aAAa;CACb,6BAA6B;CAC7B,0BAA0B;CAC1B,4BAA4B;CAC5B,0BAA0B;CAC1B,iCAAiC;CACjC,yBAAyB;CACzB,2BAA2B;CAC3B,+BAA+B;CAC/B,0BAA0B;CAC1B,0BAA0B;CAC1B,wBAAwB;CACxB,wBAAwB;CACxB,2BAA2B;CAC3B,sBAAsB;CACtB,+BAA+B;CAC/B,yBAAyB;CACzB,kBAAkB;CAClB,eAAe;CACf,4BAA4B;CAC5B,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,iBAAiB;CACjB,SAAS;CACT,UAAU;CACV,QAAQ;CACR,eAAe;CACf,OAAO;CACP,mBAAmB;CACnB,WAAW;CACX,mBAAmB;CACnB,kBAAkB;CAClB,SAAS;CACT,aAAa;CACb,mBAAmB;CACnB,uBAAuB;CACvB,SAAS;CACT,UAAU;CACV,kBAAkB;CAClB,uBAAuB;CACvB,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,WAAW;AACZ;sBACkB;CACjB,oBAAoB;CACpB,wBAAwB;CACxB,wBAAwB;CACxB,0BAA0B;CAC1B,eAAe;CACf,gBAAgB;CAChB,oBAAoB;CACpB,wBAAwB;CACxB,uBAAuB;CACvB,UAAU;CACV,sBAAsB;CACtB,0BAA0B;CAC1B,SAAS;CACT,gBAAgB;CAChB,eAAe;CACf,cAAc;CACd,uBAAuB;CACvB,UAAU;AACX;sBA9EH;;;;;;;;AA+EC;;;;AC3ED,SAAgB,oBAAoC;CAClD,MAAM,YAAY,QAAQ,IAAI,yBAAyB;AAEvD,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,OAAO,CAC9B,QAAO;AAGT,KAAI,UAAU,WAAW,MAAM,CAC7B,QAAO;AAGT,QAAO;AACR;AAED,SAAgB,YACdC,SACAC,MACe;AACf,QAAO,IAAI,QAAQ,CAAC,KAAK,WAAW;EAClC,MAAM,iBAAiB,MAAM,SAAS,CAAC,SAAU,GAAE;GACjD,OAAO;GACP,KAAK;IACH,GAAG,QAAQ;IACX,UAAU;IACV,wBAAwB;GACzB;GACD,KAAK;EACN,EAAC;AAEF,iBAAe,GAAG,SAAS,CAAC,SAAS;AACnC,OAAI,SAAS,EACX,QAAO,IAAI,MAAM,kBAAkB;OAEnC,MAAK;EAER,EAAC;CACH;AACF;;;;AC3CD,MAAa,YAAY,cAAc,IAAI,KAAK,MAAM,OAAO,KAAK,KAAK,KAAK;AAC5E,MAAa,MAAM,QAAQ,KAAK;;;;ACiBhC,eAAsB,OAAOC,SAAiC;CAC5D,MAAM,EACJ,cAAc,MACd,gBAAgB,MAChB,MAAM,QAAQ,KACf,GAAG;CACJ,MAAM,cAAc,KAAK,SAAS,QAAQ,UAAU;CACpD,MAAM,OAAO,KAAK,QAAQ,KAAK,QAAQ,UAAU;CAEjD,SAAS,cAAcC,MAAsB;AAC3C,SAAO,KAAK,QAAQ,qBAAqB,aAAa;AACtD,SAAO,KAAK,QAAQ,eAAe,OAAO;AAE1C,SAAO;CACR;AAED,OAAM,KACJ,KAAK,KAAK,YAAY,WAAW,QAAQ,SAAS,EAAE,EACpD,MACA,cACD;CAED,MAAM,cAAc,kBAAkB,aAAa,QAAQ;AAC3D,OAAM,GAAG,UACP,KAAK,KAAK,MAAM,eAAe,EAC/B,KAAK,UAAU,aAAa,MAAM,EAAE,CACrC;CAED,MAAM,SAAS,MAAM,UAAU,MAAM,YAAY;AACjD,OAAM,GAAG,UAAU,KAAK,KAAK,MAAM,YAAY,EAAE,OAAO;AAExD,KAAI,aAAa;AACf,QAAM,YAAY,QAAQ,gBAAgB,KAAK;AAC/C,MAAI,yBAAyB;CAC9B;AAED,KAAI,iBAAiB,WAAW,KAAK,CACnC,KAAI,6BAA6B;AAEpC;AAED,eAAe,UAAUC,MAAcC,aAAsC;CAC3E,MAAM,WAAW,MAAM,GACpB,SAAS,KAAK,KAAK,MAAM,YAAY,CAAC,CACtC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC;AAEhC,SAAQ,IAAI,YAAY,MAAM,SAAS;AACxC;AAED,eAAe,KACbC,MACAC,IACAC,SAAgC,CAAC,MAAM,GACxB;CACf,MAAM,QAAQ,MAAM,GAAG,KAAK,KAAK;AAEjC,KAAI,MAAM,aAAa,EAAE;EACvB,MAAM,QAAQ,MAAM,GAAG,QAAQ,KAAK;AAEpC,QAAM,QAAQ,IACZ,MAAM,IAAI,CAAC,SACT,KAAK,KAAK,KAAK,MAAM,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CACzD,CACF;CACF,OAAM;AACL,QAAM,GAAG,MAAM,KAAK,QAAQ,GAAG,EAAE,EAAE,WAAW,KAAM,EAAC;AACrD,QAAM,GAAG,SAAS,MAAM,GAAG;CAC5B;AACF;AAED,SAAS,kBAAkBH,aAAqBH,SAA0B;AACxE,KAAI,QAAQ,aAAa,4BAA4B;EACnD,MAAM,iBAAe;GACnB,GAAG,KAAK,gBAAW,cAAc;IAC/B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACD,EAAC;GACF,GAAG,KAAK,UAAe;IACrB;IACA;IACA;GACD,EAAC;EACH;EAED,MAAM,oBAAkB,EACtB,GAAG,KAAK,gBAAW,iBAAiB;GAClC;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC,CACH;AAED,SAAO;GACL,MAAM;GACN,SAAS;GACT,SAAS;GACT,SAAS;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,OAAO;GACR;GACD,cAAc,eAAe,eAAa;GAC1C,iBAAiB,eAAe,kBAAgB;EACjD;CACF;CAED,MAAM,iBAAe;EACnB,GAAG,KAAK,gBAAW,cAAc;GAC/B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACD,EAAC;EACF,GAAG,KAAK,UAAe;GACrB;GACA;GACA;EACD,EAAC;CACH;CAED,MAAM,oBAAkB,EACtB,GAAG,KAAK,gBAAW,iBAAiB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,EAAC,CACH;AAED,QAAO;EACL,MAAM;EACN,SAAS;EACT,SAAS;EACT,SAAS;GACP,OAAO;GACP,KAAK;GACL,MAAM;GACN,OAAO;EACR;EACD,cAAc,eAAe,eAAa;EAC1C,iBAAiB,eAAe,kBAAgB;CACjD;AACF;AAGD,SAAS,eAA8CO,KAAW;CAChE,MAAM,gBAAgB,OAAO,KAAK,IAAI,CACnC,MAAM,CACN,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAK,EAA0B;AAEzD,QAAO,OAAO,YAAY,cAAc;AACzC;AAED,SAAS,KACPA,KACAC,MACY;CACZ,MAAMC,SAAqB,CAAE;AAE7B,MAAK,MAAM,OAAO,KAChB,KAAI,OAAO,IACT,QAAO,OAAO,IAAI;AAItB,QAAO;AACR"}
|