create-inox-app 0.1.0
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 +110 -0
- package/dist/cli.js +22196 -0
- package/dist/prompt-Bp8saGVV.js +852 -0
- package/dist/templates/base/.gitignore.hbs +9 -0
- package/dist/templates/base/package.json.hbs +29 -0
- package/dist/templates/base/packages/typescript-config/base.json +17 -0
- package/dist/templates/base/packages/typescript-config/nextjs.json +8 -0
- package/dist/templates/base/packages/typescript-config/package.json +10 -0
- package/dist/templates/base/packages/typescript-config/react-library.json +7 -0
- package/dist/templates/base/turbo.json.hbs +32 -0
- package/dist/templates/ci/.gitlab-ci.yml.hbs +70 -0
- package/dist/templates/ci/scripts/build.sh.hbs +94 -0
- package/dist/templates/ci/scripts/prebuild.sh.hbs +11 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/SKILL.md +325 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/authentication.md +202 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/commands.md +259 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/proxy-support.md +188 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/session-management.md +193 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/snapshot-refs.md +194 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/references/video-recording.md +173 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/templates/authenticated-session.sh +100 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/templates/capture-workflow.sh +69 -0
- package/dist/templates/claude-config/app/.agents/skills/agent-browser/templates/form-automation.sh +62 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/SKILL.md +150 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/agent.md +131 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/artifact.md +84 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/attachments.md +190 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/audio-player.md +134 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/canvas.md +32 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/chain-of-thought.md +81 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/checkpoint.md +163 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/code-block.md +170 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/commit.md +177 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/confirmation.md +252 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/connection.md +32 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/context.md +126 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/controls.md +30 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/conversation.md +210 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/edge.md +50 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/environment-variables.md +102 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/file-tree.md +72 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/image.md +143 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/inline-citation.md +293 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/jsx-preview.md +101 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/message.md +256 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/mic-selector.md +186 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/model-selector.md +112 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/node.md +71 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/open-in-chat.md +67 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/package-info.md +95 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/panel.md +31 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/persona.md +158 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/plan.md +79 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/prompt-input.md +555 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/queue.md +172 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/reasoning.md +219 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/sandbox.md +126 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/schema-display.md +102 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/shimmer.md +48 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/snippet.md +64 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/sources.md +193 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/speech-input.md +160 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/stack-trace.md +218 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/suggestion.md +121 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/task.md +215 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/terminal.md +103 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/test-results.md +157 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/tool.md +275 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/toolbar.md +30 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/transcription.md +120 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/voice-selector.md +241 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/web-preview.md +197 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/agent.tsx +61 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/artifact.tsx +111 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/attachments-inline.tsx +117 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/attachments-list.tsx +88 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/attachments.tsx +78 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/audio-player.tsx +69 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/chain-of-thought.tsx +74 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/checkpoint.tsx +90 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/code-block.tsx +115 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/commit.tsx +94 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation-accepted.tsx +35 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation-rejected.tsx +35 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/confirmation.tsx +53 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/context.tsx +45 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/conversation.tsx +176 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/environment-variables.tsx +55 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree-basic.tsx +14 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree-expanded.tsx +17 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree-selection.tsx +20 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/file-tree.tsx +38 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/image.tsx +20 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/inline-citation.tsx +95 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/jsx-preview.tsx +99 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/message.tsx +324 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/mic-selector.tsx +46 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/model-selector.tsx +362 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/package-info.tsx +46 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-command.tsx +96 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-glint.tsx +96 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-halo.tsx +96 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-mana.tsx +96 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-obsidian.tsx +96 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/persona-opal.tsx +96 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/plan.tsx +63 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/prompt-input-cursor.tsx +459 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/prompt-input-tooltip.tsx +40 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/prompt-input.tsx +247 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/queue-prompt-input.tsx +367 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/queue.tsx +276 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/reasoning.tsx +67 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/sandbox.tsx +166 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-basic.tsx +7 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/schema-display.tsx +110 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/shimmer-duration.tsx +29 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/shimmer-elements.tsx +39 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/shimmer.tsx +17 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/snippet.tsx +25 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/sources-custom.tsx +34 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/sources.tsx +27 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/speech-input.tsx +79 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/stack-trace.tsx +54 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/suggestion-input.tsx +137 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/suggestion.tsx +28 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/task.tsx +60 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/terminal.tsx +77 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/test-results.tsx +78 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-output-available.tsx +76 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool-output-error.tsx +45 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/tool.tsx +205 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/transcription.tsx +284 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/voice-selector.tsx +228 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-elements/scripts/web-preview.tsx +99 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-sdk/SKILL.md +78 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/ai-gateway.md +66 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/common-errors.md +439 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/devtools.md +52 -0
- package/dist/templates/claude-config/app/.agents/skills/ai-sdk/references/type-safe-agents.md +200 -0
- package/dist/templates/claude-config/app/.agents/skills/better-auth-best-practices/SKILL.md +166 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/SKILL.md +37 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/accessibility.mdx +819 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/as-child.mdx +324 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/composition.mdx +239 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/data-attributes.mdx +413 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/definitions.mdx +258 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/design-tokens.mdx +57 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/docs.mdx +155 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/marketplaces.mdx +144 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/npm.mdx +166 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/polymorphism.mdx +583 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/principles.mdx +61 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/registry.mdx +169 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/state.mdx +99 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/styling.mdx +286 -0
- package/dist/templates/claude-config/app/.agents/skills/building-components/references/types.mdx +191 -0
- package/dist/templates/claude-config/app/.agents/skills/docker-expert/SKILL.md +409 -0
- package/dist/templates/claude-config/app/.agents/skills/email-and-password-best-practices/SKILL.md +224 -0
- package/dist/templates/claude-config/app/.agents/skills/find-skills/SKILL.md +133 -0
- package/dist/templates/claude-config/app/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/dist/templates/claude-config/app/.agents/skills/frontend-design/SKILL.md +42 -0
- package/dist/templates/claude-config/app/.agents/skills/git-commit/SKILL.md +124 -0
- package/dist/templates/claude-config/app/.agents/skills/gitlab-ci-patterns/SKILL.md +271 -0
- package/dist/templates/claude-config/app/.agents/skills/hono/SKILL.md +90 -0
- package/dist/templates/claude-config/app/.agents/skills/langfuse-observability/SKILL.md +139 -0
- package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/SKILL.md +127 -0
- package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/context.md +157 -0
- package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/pitfalls.md +118 -0
- package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/structure.md +193 -0
- package/dist/templates/claude-config/app/.agents/skills/logging-best-practices/rules/wide-events.md +113 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/SKILL.md +153 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/async-patterns.md +87 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/bundling.md +180 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/data-patterns.md +297 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/debug-tricks.md +105 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/directives.md +73 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/error-handling.md +227 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/file-conventions.md +140 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/font.md +245 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/functions.md +108 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/hydration-error.md +91 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/image.md +173 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/metadata.md +301 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/parallel-routes.md +287 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/route-handlers.md +146 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/runtime-selection.md +39 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/scripts.md +141 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/self-hosting.md +371 -0
- package/dist/templates/claude-config/app/.agents/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/dist/templates/claude-config/app/.agents/skills/next-cache-components/SKILL.md +411 -0
- package/dist/templates/claude-config/app/.agents/skills/next-upgrade/SKILL.md +50 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/SKILL.md +179 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/CHEATSHEET.md +418 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/MIGRATIONS.md +536 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/PERFORMANCE.md +559 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/POSTGRES.md +588 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/QUERIES.md +764 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/RELATIONS.md +624 -0
- package/dist/templates/claude-config/app/.agents/skills/postgres-drizzle/references/SCHEMA.md +554 -0
- package/dist/templates/claude-config/app/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/dist/templates/claude-config/app/.agents/skills/skill-creator/SKILL.md +356 -0
- package/dist/templates/claude-config/app/.agents/skills/skill-creator/references/output-patterns.md +82 -0
- package/dist/templates/claude-config/app/.agents/skills/skill-creator/references/workflows.md +28 -0
- package/dist/templates/claude-config/app/.agents/skills/skill-creator/scripts/init_skill.py +303 -0
- package/dist/templates/claude-config/app/.agents/skills/skill-creator/scripts/package_skill.py +113 -0
- package/dist/templates/claude-config/app/.agents/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/SKILL.md +164 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/basic-streaming.tsx +34 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/custom-security.tsx +38 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/full-featured.tsx +60 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/static-mode.tsx +17 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/assets/examples/with-caret.tsx +39 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/references/api.md +278 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/references/features.md +201 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/references/plugins.md +239 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/references/security.md +192 -0
- package/dist/templates/claude-config/app/.agents/skills/streamdown/references/styling.md +166 -0
- package/dist/templates/claude-config/app/.agents/skills/tdd/SKILL.md +107 -0
- package/dist/templates/claude-config/app/.agents/skills/tdd/deep-modules.md +33 -0
- package/dist/templates/claude-config/app/.agents/skills/tdd/interface-design.md +31 -0
- package/dist/templates/claude-config/app/.agents/skills/tdd/mocking.md +60 -0
- package/dist/templates/claude-config/app/.agents/skills/tdd/refactoring.md +10 -0
- package/dist/templates/claude-config/app/.agents/skills/tdd/tests.md +61 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/SKILL.md +914 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/command/turborepo.md +70 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/RULE.md +241 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/dependencies.md +246 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/packages.md +335 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/best-practices/structure.md +270 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/boundaries/RULE.md +126 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/caching/RULE.md +107 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/caching/gotchas.md +169 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/caching/remote-cache.md +127 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/RULE.md +79 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/github-actions.md +162 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/patterns.md +145 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/ci/vercel.md +103 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/cli/RULE.md +100 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/cli/commands.md +297 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/RULE.md +211 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/global-options.md +191 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/gotchas.md +348 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/configuration/tasks.md +281 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/environment/RULE.md +96 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/environment/gotchas.md +141 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/environment/modes.md +101 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/filtering/RULE.md +148 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/filtering/patterns.md +152 -0
- package/dist/templates/claude-config/app/.agents/skills/turborepo/references/watch/RULE.md +99 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/AGENTS.md +917 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/SKILL.md +88 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +94 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/architecture-compound-components.md +108 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +84 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +94 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +103 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/AGENTS.md +2883 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/SKILL.md +138 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +35 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +48 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +24 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +37 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +48 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +34 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +44 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +78 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +74 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +110 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +68 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +50 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +38 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +32 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +36 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +72 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +26 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +77 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +56 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +36 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/templates/claude-config/app/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/dist/templates/claude-config/app/.agents/skills/web-design-guidelines/SKILL.md +40 -0
- package/dist/templates/claude-config/app/.agents/skills/workflow/SKILL.md +181 -0
- package/dist/templates/claude-config/app/.claude/commands/council.md +7 -0
- package/dist/templates/claude-config/app/.claude/commands/deslop.md +25 -0
- package/dist/templates/claude-config/app/.claude/commands/diagram.md +101 -0
- package/dist/templates/claude-config/app/.claude/commands/fix-merge.md +47 -0
- package/dist/templates/claude-config/app/.claude/commands/you-might-not-need-an-effect.md +10 -0
- package/dist/templates/claude-config/app/.claude/hooks/post-tool-use-tracker.sh +187 -0
- package/dist/templates/claude-config/app/.claude/hooks/skill-activation-prompt.sh +5 -0
- package/dist/templates/claude-config/app/.claude/hooks/skill-activation-prompt.ts +134 -0
- package/dist/templates/claude-config/app/.claude/rules/comments.md +12 -0
- package/dist/templates/claude-config/app/.claude/rules/typescript.md +31 -0
- package/dist/templates/claude-config/app/.claude/settings.json.hbs +74 -0
- package/dist/templates/claude-config/app/.claude/skills/skill-rules.json.hbs +309 -0
- package/dist/templates/claude-config/app/AGENTS.md.hbs +185 -0
- package/dist/templates/claude-config/app/CLAUDE.md.hbs +5 -0
- package/dist/templates/claude-config/kustomize/.agents/skills/git-commit/SKILL.md +124 -0
- package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/SKILL.md +534 -0
- package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/references/deployment-spec.md +780 -0
- package/dist/templates/claude-config/kustomize/.agents/skills/k8s-manifest-generator/references/service-spec.md +748 -0
- package/dist/templates/claude-config/kustomize/.claude/settings.json +42 -0
- package/dist/templates/claude-config/kustomize/.claude/skills/git-commit/SKILL.md +124 -0
- package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/SKILL.md +534 -0
- package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/assets/configmap-template.yaml +296 -0
- package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/assets/deployment-template.yaml +203 -0
- package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/assets/service-template.yaml +171 -0
- package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/references/deployment-spec.md +780 -0
- package/dist/templates/claude-config/kustomize/.claude/skills/k8s-manifest-generator/references/service-spec.md +748 -0
- package/dist/templates/docker/.dockerignore.hbs +8 -0
- package/dist/templates/docker/Dockerfile.hbs +81 -0
- package/dist/templates/docker/docker-compose.yml.hbs +55 -0
- package/dist/templates/kustomize/base/deployments/app.yaml.hbs +44 -0
- package/dist/templates/kustomize/base/ingress/app.yaml.hbs +20 -0
- package/dist/templates/kustomize/base/jobs/app-jobs.yaml.hbs +43 -0
- package/dist/templates/kustomize/base/kustomization.yaml.hbs +13 -0
- package/dist/templates/kustomize/base/secrets/regcred.yaml.hbs +7 -0
- package/dist/templates/kustomize/base/services/app.yaml.hbs +12 -0
- package/dist/templates/kustomize/overlays/{{env}}/configs/app.config.env.hbs +21 -0
- package/dist/templates/kustomize/overlays/{{env}}/configs/paradedb.config.env.hbs +3 -0
- package/dist/templates/kustomize/overlays/{{env}}/deployments/paradedb.yaml.hbs +28 -0
- package/dist/templates/kustomize/overlays/{{env}}/deployments/redis.yaml.hbs +18 -0
- package/dist/templates/kustomize/overlays/{{env}}/kustomization.yaml.hbs +36 -0
- package/dist/templates/kustomize/overlays/{{env}}/patch-operation/ingress-host.yaml.hbs +15 -0
- package/dist/templates/kustomize/overlays/{{env}}/services/paradedb.yaml.hbs +11 -0
- package/dist/templates/kustomize/overlays/{{env}}/services/redis.yaml.hbs +11 -0
- package/dist/templates/kustomize/overlays/{{env}}/storage/paradedb-pvc.yaml.hbs +10 -0
- package/dist/templates/presets/ai-chat-app/apps/web/.env.example +11 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/api/auth/[...all]/route.ts +5 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/input-guardrail.ts +47 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/route.ts +266 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/sessions/[id]/messages/route.ts +38 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/sessions/[id]/route.ts +59 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/api/chat/sessions/route.ts +24 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/api/health/route.ts +21 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/chat/[id]/page.tsx +54 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/chat/layout.tsx +23 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/chat/page.tsx +9 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/error.tsx +20 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/global-error.tsx +42 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/globals.css +187 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/layout.tsx.hbs +30 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/login/login-form.tsx +96 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/login/page.tsx +14 -0
- package/dist/templates/presets/ai-chat-app/apps/web/app/not-found.tsx +15 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/code-block.tsx +518 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/context.tsx +356 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/conversation.tsx +150 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/environment-variables.tsx +303 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/message.tsx +295 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/prompt-input.tsx +1179 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/sources.tsx +54 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ai-elements/tool.tsx +157 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/app-sidebar.tsx +110 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/chat-sessions-provider.tsx +89 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/chat-sidebar-list.tsx +174 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/chat-view.tsx +156 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/accordion.tsx +72 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/alert-dialog.tsx +162 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/alert.tsx +73 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/aspect-ratio.tsx +22 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/avatar.tsx +93 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/badge.tsx +49 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/breadcrumb.tsx +103 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/button-group.tsx +78 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/button.tsx +60 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/calendar.tsx +185 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/card.tsx +92 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/carousel.tsx +231 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/chart.tsx +325 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/checkbox.tsx +28 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/collapsible.tsx +17 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/combobox.tsx +273 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/command.tsx +181 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/context-menu.tsx +245 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/dialog.tsx +135 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/direction.tsx +3 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/drawer.tsx +120 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/dropdown-menu.tsx +258 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/empty.tsx +94 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/field.tsx +224 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/hover-card.tsx +46 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/input-group.tsx +146 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/input-otp.tsx +86 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/input.tsx +20 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/item.tsx +188 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/kbd.tsx +26 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/label.tsx +20 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/menubar.tsx +270 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/native-select.tsx +43 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/navigation-menu.tsx +161 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/pagination.tsx +118 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/popover.tsx +77 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/progress.tsx +66 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/radio-group.tsx +39 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/resizable.tsx +42 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/scroll-area.tsx +51 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/select.tsx +190 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/separator.tsx +21 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/sheet.tsx +125 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/sidebar.tsx +689 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/skeleton.tsx +13 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/slider.tsx +54 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/sonner.tsx +45 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/spinner.tsx +15 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/switch.tsx +32 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/table.tsx +89 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/tabs.tsx +75 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/textarea.tsx +18 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/toggle-group.tsx +87 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/toggle.tsx +44 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components/ui/tooltip.tsx +54 -0
- package/dist/templates/presets/ai-chat-app/apps/web/components.json +20 -0
- package/dist/templates/presets/ai-chat-app/apps/web/drizzle.config.ts +10 -0
- package/dist/templates/presets/ai-chat-app/apps/web/env.ts +30 -0
- package/dist/templates/presets/ai-chat-app/apps/web/hooks/use-mobile.ts +19 -0
- package/dist/templates/presets/ai-chat-app/apps/web/instrumentation.ts +21 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/auth-client.ts +3 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/auth-session.ts +9 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/auth.ts +16 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/db/index.ts +11 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/db/migrate.ts +53 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/db/schema.ts +94 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/db/seed.ts +123 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/group-by-date.ts +34 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/logger.ts +21 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/openrouter.ts +7 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/schemas/auth.ts +8 -0
- package/dist/templates/presets/ai-chat-app/apps/web/lib/utils.ts +4 -0
- package/dist/templates/presets/ai-chat-app/apps/web/next-env.d.ts +6 -0
- package/dist/templates/presets/ai-chat-app/apps/web/next.config.ts +14 -0
- package/dist/templates/presets/ai-chat-app/apps/web/package.json +70 -0
- package/dist/templates/presets/ai-chat-app/apps/web/postcss.config.mjs +7 -0
- package/dist/templates/presets/ai-chat-app/apps/web/proxy.ts +13 -0
- package/dist/templates/presets/ai-chat-app/apps/web/tsconfig.json +14 -0
- package/dist/templates/presets/blank/apps/web/.env.example +1 -0
- package/dist/templates/presets/blank/apps/web/app/api/health/route.ts +11 -0
- package/dist/templates/presets/blank/apps/web/app/globals.css +49 -0
- package/dist/templates/presets/blank/apps/web/app/layout.tsx.hbs +30 -0
- package/dist/templates/presets/blank/apps/web/app/page.tsx.hbs +10 -0
- package/dist/templates/presets/blank/apps/web/env.ts +10 -0
- package/dist/templates/presets/blank/apps/web/next-env.d.ts +2 -0
- package/dist/templates/presets/blank/apps/web/next.config.ts +9 -0
- package/dist/templates/presets/blank/apps/web/package.json.hbs +27 -0
- package/dist/templates/presets/blank/apps/web/postcss.config.mjs +7 -0
- package/dist/templates/presets/blank/apps/web/tsconfig.json +14 -0
- package/dist/templates/tooling/.oxfmtrc.json +6 -0
- package/dist/templates/tooling/.oxlintrc.json +20 -0
- package/dist/templates/tooling/commitlint.config.ts.hbs +3 -0
- package/dist/templates/tooling/lefthook.yml.hbs +25 -0
- package/package.json +47 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Snippet
|
|
2
|
+
|
|
3
|
+
Lightweight inline code display for terminal commands and short code references.
|
|
4
|
+
|
|
5
|
+
The `Snippet` component provides a lightweight way to display terminal commands and short code snippets with copy functionality. Built on top of InputGroup, it's designed for brief code references in text.
|
|
6
|
+
|
|
7
|
+
See `scripts/snippet.tsx` for this example.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx ai-elements@latest add snippet
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
|
|
17
|
+
- Composable architecture with InputGroup
|
|
18
|
+
- Optional prefix text (e.g., `$` for terminal commands)
|
|
19
|
+
- Built-in copy button
|
|
20
|
+
- Compact design for chat/markdown
|
|
21
|
+
|
|
22
|
+
## Examples
|
|
23
|
+
|
|
24
|
+
### Without Prefix
|
|
25
|
+
|
|
26
|
+
See `scripts/snippet-plain.tsx` for this example.
|
|
27
|
+
|
|
28
|
+
## Props
|
|
29
|
+
|
|
30
|
+
### `<Snippet />`
|
|
31
|
+
|
|
32
|
+
| Prop | Type | Default | Description |
|
|
33
|
+
| ---------- | ----------------------------------------- | -------- | ---------------------------------------------------- |
|
|
34
|
+
| `code` | `string` | Required | The code content to display. |
|
|
35
|
+
| `children` | `React.ReactNode` | - | Child elements like SnippetAddon, SnippetInput, etc. |
|
|
36
|
+
| `...props` | `React.ComponentProps<typeof InputGroup>` | - | Spread to the InputGroup component. |
|
|
37
|
+
|
|
38
|
+
### `<SnippetAddon />`
|
|
39
|
+
|
|
40
|
+
| Prop | Type | Default | Description |
|
|
41
|
+
| ---------- | ---------------------------------------------- | ------- | ---------------------------------------- |
|
|
42
|
+
| `...props` | `React.ComponentProps<typeof InputGroupAddon>` | - | Spread to the InputGroupAddon component. |
|
|
43
|
+
|
|
44
|
+
### `<SnippetText />`
|
|
45
|
+
|
|
46
|
+
| Prop | Type | Default | Description |
|
|
47
|
+
| ---------- | --------------------------------------------- | ------- | --------------------------------------- |
|
|
48
|
+
| `...props` | `React.ComponentProps<typeof InputGroupText>` | - | Spread to the InputGroupText component. |
|
|
49
|
+
|
|
50
|
+
### `<SnippetInput />`
|
|
51
|
+
|
|
52
|
+
| Prop | Type | Default | Description |
|
|
53
|
+
| ---------- | ----------------------------------------------------- | ------- | ---------------------------------------------------------------------------------- |
|
|
54
|
+
| `...props` | `Omit<React.ComponentProps<typeof InputGroupInput>, ` | - | Spread to the InputGroupInput component. Value and readOnly are set automatically. |
|
|
55
|
+
|
|
56
|
+
### `<SnippetCopyButton />`
|
|
57
|
+
|
|
58
|
+
| Prop | Type | Default | Description |
|
|
59
|
+
| ---------- | ----------------------------------------------- | ------- | ----------------------------------------- |
|
|
60
|
+
| `onCopy` | `() => void` | - | Callback fired after a successful copy. |
|
|
61
|
+
| `onError` | `(error: Error) => void` | - | Callback fired if copying fails. |
|
|
62
|
+
| `timeout` | `number` | `2000` | How long to show the copied state (ms). |
|
|
63
|
+
| `children` | `React.ReactNode` | - | Custom button content. |
|
|
64
|
+
| `...props` | `React.ComponentProps<typeof InputGroupButton>` | - | Spread to the InputGroupButton component. |
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Sources
|
|
2
|
+
|
|
3
|
+
A component that allows a user to view the sources or citations used to generate a response.
|
|
4
|
+
|
|
5
|
+
The `Sources` component allows a user to view the sources or citations used to generate a response.
|
|
6
|
+
|
|
7
|
+
See `scripts/sources.tsx` for this example.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx ai-elements@latest add sources
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage with AI SDK
|
|
16
|
+
|
|
17
|
+
Build a simple web search agent with Perplexity Sonar.
|
|
18
|
+
|
|
19
|
+
Add the following component to your frontend:
|
|
20
|
+
|
|
21
|
+
```tsx title="app/page.tsx"
|
|
22
|
+
"use client";
|
|
23
|
+
|
|
24
|
+
import { useChat } from "@ai-sdk/react";
|
|
25
|
+
import { Source, Sources, SourcesContent, SourcesTrigger } from "@/components/ai-elements/sources";
|
|
26
|
+
import {
|
|
27
|
+
Input,
|
|
28
|
+
PromptInputTextarea,
|
|
29
|
+
PromptInputSubmit,
|
|
30
|
+
} from "@/components/ai-elements/prompt-input";
|
|
31
|
+
import {
|
|
32
|
+
Conversation,
|
|
33
|
+
ConversationContent,
|
|
34
|
+
ConversationScrollButton,
|
|
35
|
+
} from "@/components/ai-elements/conversation";
|
|
36
|
+
import { Message, MessageContent, MessageResponse } from "@/components/ai-elements/message";
|
|
37
|
+
import { useState } from "react";
|
|
38
|
+
import { DefaultChatTransport } from "ai";
|
|
39
|
+
|
|
40
|
+
const SourceDemo = () => {
|
|
41
|
+
const [input, setInput] = useState("");
|
|
42
|
+
const { messages, sendMessage, status } = useChat({
|
|
43
|
+
transport: new DefaultChatTransport({
|
|
44
|
+
api: "/api/sources",
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const handleSubmit = (e: React.FormEvent) => {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
if (input.trim()) {
|
|
51
|
+
sendMessage({ text: input });
|
|
52
|
+
setInput("");
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<div className="max-w-4xl mx-auto p-6 relative size-full rounded-lg border h-[600px]">
|
|
58
|
+
<div className="flex flex-col h-full">
|
|
59
|
+
<div className="flex-1 overflow-auto mb-4">
|
|
60
|
+
<Conversation>
|
|
61
|
+
<ConversationContent>
|
|
62
|
+
{messages.map((message) => (
|
|
63
|
+
<div key={message.id}>
|
|
64
|
+
{message.role === "assistant" && (
|
|
65
|
+
<Sources>
|
|
66
|
+
<SourcesTrigger
|
|
67
|
+
count={message.parts.filter((part) => part.type === "source-url").length}
|
|
68
|
+
/>
|
|
69
|
+
{message.parts.map((part, i) => {
|
|
70
|
+
switch (part.type) {
|
|
71
|
+
case "source-url":
|
|
72
|
+
return (
|
|
73
|
+
<SourcesContent key={`${message.id}-${i}`}>
|
|
74
|
+
<Source
|
|
75
|
+
key={`${message.id}-${i}`}
|
|
76
|
+
href={part.url}
|
|
77
|
+
title={part.url}
|
|
78
|
+
/>
|
|
79
|
+
</SourcesContent>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
})}
|
|
83
|
+
</Sources>
|
|
84
|
+
)}
|
|
85
|
+
<Message from={message.role} key={message.id}>
|
|
86
|
+
<MessageContent>
|
|
87
|
+
{message.parts.map((part, i) => {
|
|
88
|
+
switch (part.type) {
|
|
89
|
+
case "text":
|
|
90
|
+
return (
|
|
91
|
+
<MessageResponse key={`${message.id}-${i}`}>
|
|
92
|
+
{part.text}
|
|
93
|
+
</MessageResponse>
|
|
94
|
+
);
|
|
95
|
+
default:
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
})}
|
|
99
|
+
</MessageContent>
|
|
100
|
+
</Message>
|
|
101
|
+
</div>
|
|
102
|
+
))}
|
|
103
|
+
</ConversationContent>
|
|
104
|
+
<ConversationScrollButton />
|
|
105
|
+
</Conversation>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<Input onSubmit={handleSubmit} className="mt-4 w-full max-w-2xl mx-auto relative">
|
|
109
|
+
<PromptInputTextarea
|
|
110
|
+
value={input}
|
|
111
|
+
placeholder="Ask a question and search the..."
|
|
112
|
+
onChange={(e) => setInput(e.currentTarget.value)}
|
|
113
|
+
className="pr-12"
|
|
114
|
+
/>
|
|
115
|
+
<PromptInputSubmit
|
|
116
|
+
status={status === "streaming" ? "streaming" : "ready"}
|
|
117
|
+
disabled={!input.trim()}
|
|
118
|
+
className="absolute bottom-1 right-1"
|
|
119
|
+
/>
|
|
120
|
+
</Input>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export default SourceDemo;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Add the following route to your backend:
|
|
130
|
+
|
|
131
|
+
```tsx title="api/chat/route.ts"
|
|
132
|
+
import { convertToModelMessages, streamText, UIMessage } from "ai";
|
|
133
|
+
import { perplexity } from "@ai-sdk/perplexity";
|
|
134
|
+
|
|
135
|
+
// Allow streaming responses up to 30 seconds
|
|
136
|
+
export const maxDuration = 30;
|
|
137
|
+
|
|
138
|
+
export async function POST(req: Request) {
|
|
139
|
+
const { messages }: { messages: UIMessage[] } = await req.json();
|
|
140
|
+
|
|
141
|
+
const result = streamText({
|
|
142
|
+
model: "perplexity/sonar",
|
|
143
|
+
system:
|
|
144
|
+
"You are a helpful assistant. Keep your responses short (< 100 words) unless you are asked for more details. ALWAYS USE SEARCH.",
|
|
145
|
+
messages: await convertToModelMessages(messages),
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
return result.toUIMessageStreamResponse({
|
|
149
|
+
sendSources: true,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Features
|
|
155
|
+
|
|
156
|
+
- Collapsible component that allows a user to view the sources or citations used to generate a response
|
|
157
|
+
- Customizable trigger and content components
|
|
158
|
+
- Support for custom sources or citations
|
|
159
|
+
- Responsive design with mobile-friendly controls
|
|
160
|
+
- Clean, modern styling with customizable themes
|
|
161
|
+
|
|
162
|
+
## Examples
|
|
163
|
+
|
|
164
|
+
### Custom rendering
|
|
165
|
+
|
|
166
|
+
See `scripts/sources-custom.tsx` for this example.
|
|
167
|
+
|
|
168
|
+
## Props
|
|
169
|
+
|
|
170
|
+
### `<Sources />`
|
|
171
|
+
|
|
172
|
+
| Prop | Type | Default | Description |
|
|
173
|
+
| ---------- | -------------------------------------- | ------- | ------------------------------------------- |
|
|
174
|
+
| `...props` | `React.HTMLAttributes<HTMLDivElement>` | - | Any other props are spread to the root div. |
|
|
175
|
+
|
|
176
|
+
### `<SourcesTrigger />`
|
|
177
|
+
|
|
178
|
+
| Prop | Type | Default | Description |
|
|
179
|
+
| ---------- | ------------------------------------------------- | -------- | --------------------------------------------------------------- |
|
|
180
|
+
| `count` | `number` | Required | The number of sources to display in the trigger. |
|
|
181
|
+
| `...props` | `React.ComponentProps<typeof CollapsibleTrigger>` | - | Any other props are spread to the CollapsibleTrigger component. |
|
|
182
|
+
|
|
183
|
+
### `<SourcesContent />`
|
|
184
|
+
|
|
185
|
+
| Prop | Type | Default | Description |
|
|
186
|
+
| ---------- | -------------------------------------- | ------- | ---------------------------------------------------- |
|
|
187
|
+
| `...props` | `React.HTMLAttributes<HTMLDivElement>` | - | Any other props are spread to the content container. |
|
|
188
|
+
|
|
189
|
+
### `<Source />`
|
|
190
|
+
|
|
191
|
+
| Prop | Type | Default | Description |
|
|
192
|
+
| ---------- | ----------------------------------------------- | ------- | ------------------------------------------------- |
|
|
193
|
+
| `...props` | `React.AnchorHTMLAttributes<HTMLAnchorElement>` | - | Any other props are spread to the anchor element. |
|
package/dist/templates/claude-config/app/.agents/skills/ai-elements/references/speech-input.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Speech Input
|
|
2
|
+
|
|
3
|
+
A button component that captures voice input and converts it to text, with cross-browser support.
|
|
4
|
+
|
|
5
|
+
The `SpeechInput` component provides an easy-to-use interface for capturing voice input in your application. It uses the Web Speech API for real-time transcription in supported browsers (Chrome, Edge), and falls back to MediaRecorder with an external transcription service for browsers that don't support Web Speech API (Firefox, Safari).
|
|
6
|
+
|
|
7
|
+
See `scripts/speech-input.tsx` for this example.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx ai-elements@latest add speech-input
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
|
|
17
|
+
- Built on Web Speech API (SpeechRecognition) with MediaRecorder fallback
|
|
18
|
+
- Cross-browser support (Chrome, Edge, Firefox, Safari)
|
|
19
|
+
- Continuous speech recognition with interim results
|
|
20
|
+
- Visual feedback with pulse animation when listening
|
|
21
|
+
- Loading state during transcription processing
|
|
22
|
+
- Automatic browser compatibility detection
|
|
23
|
+
- Final transcript extraction and callbacks
|
|
24
|
+
- Error handling and automatic state management
|
|
25
|
+
- Extends shadcn/ui Button component
|
|
26
|
+
- Full TypeScript support
|
|
27
|
+
|
|
28
|
+
## Props
|
|
29
|
+
|
|
30
|
+
### `<SpeechInput />`
|
|
31
|
+
|
|
32
|
+
The component extends the shadcn/ui Button component, so all Button props are available.
|
|
33
|
+
|
|
34
|
+
| Prop | Type | Default | Description |
|
|
35
|
+
| ----------------------- | -------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
36
|
+
| `onTranscriptionChange` | `(text: string) => void` | - | Callback fired when final transcription text is available. Only fires for completed phrases, not interim results. |
|
|
37
|
+
| `onAudioRecorded` | `(audioBlob: Blob) => Promise<string>` | - | Callback for MediaRecorder fallback. Required for Firefox/Safari support. Receives recorded audio blob and should return transcribed text from an external service (e.g., OpenAI Whisper). |
|
|
38
|
+
| `lang` | `string` | - | Language for speech recognition. |
|
|
39
|
+
| `...props` | `React.ComponentProps<typeof Button>` | - | Any other props are spread to the Button component, including variant, size, disabled, etc. |
|
|
40
|
+
|
|
41
|
+
## Behavior
|
|
42
|
+
|
|
43
|
+
### Speech Recognition Modes
|
|
44
|
+
|
|
45
|
+
The component automatically detects browser capabilities and uses the best available method:
|
|
46
|
+
|
|
47
|
+
| Browser | Mode | Behavior |
|
|
48
|
+
| --------------- | -------------- | ------------------------------------------------------ |
|
|
49
|
+
| Chrome, Edge | Web Speech API | Real-time transcription, no server required |
|
|
50
|
+
| Firefox, Safari | MediaRecorder | Records audio, sends to external transcription service |
|
|
51
|
+
| Unsupported | Disabled | Button is disabled |
|
|
52
|
+
|
|
53
|
+
### Web Speech API Mode (Chrome, Edge)
|
|
54
|
+
|
|
55
|
+
Uses the Web Speech API with the following configuration:
|
|
56
|
+
|
|
57
|
+
- **Continuous**: Set to `true` to keep recognition active until manually stopped
|
|
58
|
+
- **Interim Results**: Set to `true` to receive partial results during speech
|
|
59
|
+
- **Language**: Configurable via `lang` prop, defaults to `"en-US"`
|
|
60
|
+
|
|
61
|
+
### MediaRecorder Mode (Firefox, Safari)
|
|
62
|
+
|
|
63
|
+
When the Web Speech API is unavailable, the component falls back to recording audio:
|
|
64
|
+
|
|
65
|
+
1. Records audio using `MediaRecorder` API
|
|
66
|
+
2. On stop, creates an audio blob (`audio/webm`)
|
|
67
|
+
3. Calls `onAudioRecorded` with the blob
|
|
68
|
+
4. Waits for transcription result
|
|
69
|
+
5. Passes result to `onTranscriptionChange`
|
|
70
|
+
|
|
71
|
+
**Note**: The `onAudioRecorded` prop is required for this mode to work. Without it, the button will be disabled in Firefox/Safari.
|
|
72
|
+
|
|
73
|
+
### Transcription Processing
|
|
74
|
+
|
|
75
|
+
The component only calls `onTranscriptionChange` with **final transcripts**. Interim results (Web Speech API) are ignored to prevent incomplete text from being processed.
|
|
76
|
+
|
|
77
|
+
### Visual States
|
|
78
|
+
|
|
79
|
+
- **Default State**: Standard button appearance with microphone icon
|
|
80
|
+
- **Listening State**: Pulsing animation with accent colors to indicate active listening
|
|
81
|
+
- **Processing State**: Loading spinner while waiting for transcription (MediaRecorder mode)
|
|
82
|
+
- **Disabled State**: Button is disabled when no API is available or required props are missing
|
|
83
|
+
|
|
84
|
+
### Lifecycle
|
|
85
|
+
|
|
86
|
+
1. **Mount**: Detects available APIs and initializes appropriate mode
|
|
87
|
+
2. **Click**: Toggles between listening/recording and stopped states
|
|
88
|
+
3. **Stop (MediaRecorder)**: Processes audio and waits for transcription
|
|
89
|
+
4. **Unmount**: Stops recognition/recording and releases microphone
|
|
90
|
+
|
|
91
|
+
## Browser Support
|
|
92
|
+
|
|
93
|
+
The component provides cross-browser support through a two-tier system:
|
|
94
|
+
|
|
95
|
+
| Browser | API Used | Requirements |
|
|
96
|
+
| ------- | -------------- | ---------------------- |
|
|
97
|
+
| Chrome | Web Speech API | None |
|
|
98
|
+
| Edge | Web Speech API | None |
|
|
99
|
+
| Firefox | MediaRecorder | `onAudioRecorded` prop |
|
|
100
|
+
| Safari | MediaRecorder | `onAudioRecorded` prop |
|
|
101
|
+
|
|
102
|
+
For full cross-browser support, provide the `onAudioRecorded` callback that sends audio to a transcription service like OpenAI Whisper, Google Cloud Speech-to-Text, or AssemblyAI.
|
|
103
|
+
|
|
104
|
+
## Accessibility
|
|
105
|
+
|
|
106
|
+
- Uses semantic button element via shadcn/ui Button
|
|
107
|
+
- Visual feedback for listening state
|
|
108
|
+
- Keyboard accessible (can be triggered with Space/Enter)
|
|
109
|
+
- Screen reader friendly with proper button semantics
|
|
110
|
+
|
|
111
|
+
## Usage with MediaRecorder Fallback
|
|
112
|
+
|
|
113
|
+
To support Firefox and Safari, provide an `onAudioRecorded` callback that sends audio to a transcription service:
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
const handleAudioRecorded = async (audioBlob: Blob): Promise<string> => {
|
|
117
|
+
const formData = new FormData();
|
|
118
|
+
formData.append("file", audioBlob, "audio.webm");
|
|
119
|
+
formData.append("model", "whisper-1");
|
|
120
|
+
|
|
121
|
+
const response = await fetch("https://api.openai.com/v1/audio/transcriptions", {
|
|
122
|
+
method: "POST",
|
|
123
|
+
headers: {
|
|
124
|
+
Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
|
|
125
|
+
},
|
|
126
|
+
body: formData,
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
const data = await response.json();
|
|
130
|
+
return data.text;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
<SpeechInput
|
|
134
|
+
onTranscriptionChange={(text) => console.log(text)}
|
|
135
|
+
onAudioRecorded={handleAudioRecorded}
|
|
136
|
+
/>;
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Notes
|
|
140
|
+
|
|
141
|
+
- Requires a secure context (HTTPS or localhost)
|
|
142
|
+
- Browser may prompt user for microphone permission
|
|
143
|
+
- Only final transcripts trigger the `onTranscriptionChange` callback
|
|
144
|
+
- Language is configurable via the `lang` prop
|
|
145
|
+
- Continuous recognition continues until button is clicked again
|
|
146
|
+
- Errors are logged to console and automatically stop recognition/recording
|
|
147
|
+
- MediaRecorder fallback requires the `onAudioRecorded` prop to be provided
|
|
148
|
+
- Audio is recorded in `audio/webm` format for the MediaRecorder fallback
|
|
149
|
+
|
|
150
|
+
## TypeScript
|
|
151
|
+
|
|
152
|
+
The component includes full TypeScript definitions for the Web Speech API:
|
|
153
|
+
|
|
154
|
+
- `SpeechRecognition`
|
|
155
|
+
- `SpeechRecognitionEvent`
|
|
156
|
+
- `SpeechRecognitionResult`
|
|
157
|
+
- `SpeechRecognitionAlternative`
|
|
158
|
+
- `SpeechRecognitionErrorEvent`
|
|
159
|
+
|
|
160
|
+
These types are properly declared for both standard and webkit-prefixed implementations.
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Stack Trace
|
|
2
|
+
|
|
3
|
+
Displays formatted JavaScript/Node.js error stack traces with syntax highlighting and collapsible frames.
|
|
4
|
+
|
|
5
|
+
The `StackTrace` component displays formatted JavaScript/Node.js error stack traces with clickable file paths, internal frame dimming, and collapsible content.
|
|
6
|
+
|
|
7
|
+
See `scripts/stack-trace.tsx` for this example.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npx ai-elements@latest add stack-trace
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage with AI SDK
|
|
16
|
+
|
|
17
|
+
Build an error display tool that shows stack traces from AI-generated code using the [`useChat`](https://ai-sdk.dev/docs/reference/ai-sdk-ui/use-chat) hook.
|
|
18
|
+
|
|
19
|
+
Add the following component to your frontend:
|
|
20
|
+
|
|
21
|
+
```tsx title="app/page.tsx"
|
|
22
|
+
"use client";
|
|
23
|
+
|
|
24
|
+
import { useChat } from "@ai-sdk/react";
|
|
25
|
+
import {
|
|
26
|
+
StackTrace,
|
|
27
|
+
StackTraceHeader,
|
|
28
|
+
StackTraceError,
|
|
29
|
+
StackTraceErrorType,
|
|
30
|
+
StackTraceErrorMessage,
|
|
31
|
+
StackTraceActions,
|
|
32
|
+
StackTraceCopyButton,
|
|
33
|
+
StackTraceExpandButton,
|
|
34
|
+
StackTraceContent,
|
|
35
|
+
StackTraceFrames,
|
|
36
|
+
} from "@/components/ai-elements/stack-trace";
|
|
37
|
+
|
|
38
|
+
export default function Page() {
|
|
39
|
+
const { messages } = useChat({
|
|
40
|
+
api: "/api/run-code",
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<div className="max-w-4xl mx-auto p-6">
|
|
45
|
+
{messages.map((message) => {
|
|
46
|
+
const toolInvocations = message.parts?.filter((part) => part.type === "tool-invocation");
|
|
47
|
+
|
|
48
|
+
return toolInvocations?.map((tool) => {
|
|
49
|
+
if (tool.toolName === "runCode" && tool.result?.error) {
|
|
50
|
+
return (
|
|
51
|
+
<StackTrace key={tool.toolCallId} trace={tool.result.error} defaultOpen>
|
|
52
|
+
<StackTraceHeader>
|
|
53
|
+
<StackTraceError>
|
|
54
|
+
<StackTraceErrorType />
|
|
55
|
+
<StackTraceErrorMessage />
|
|
56
|
+
</StackTraceError>
|
|
57
|
+
<StackTraceActions>
|
|
58
|
+
<StackTraceCopyButton />
|
|
59
|
+
<StackTraceExpandButton />
|
|
60
|
+
</StackTraceActions>
|
|
61
|
+
</StackTraceHeader>
|
|
62
|
+
<StackTraceContent>
|
|
63
|
+
<StackTraceFrames />
|
|
64
|
+
</StackTraceContent>
|
|
65
|
+
</StackTrace>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
return null;
|
|
69
|
+
});
|
|
70
|
+
})}
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Add the following route to your backend:
|
|
77
|
+
|
|
78
|
+
```tsx title="api/run-code/route.ts"
|
|
79
|
+
import { streamText, tool } from "ai";
|
|
80
|
+
import { z } from "zod";
|
|
81
|
+
|
|
82
|
+
export async function POST(req: Request) {
|
|
83
|
+
const { messages } = await req.json();
|
|
84
|
+
|
|
85
|
+
const result = streamText({
|
|
86
|
+
model: "openai/gpt-4o",
|
|
87
|
+
messages,
|
|
88
|
+
tools: {
|
|
89
|
+
runCode: tool({
|
|
90
|
+
description: "Execute JavaScript code and return any errors",
|
|
91
|
+
parameters: z.object({
|
|
92
|
+
code: z.string(),
|
|
93
|
+
}),
|
|
94
|
+
execute: async ({ code }) => {
|
|
95
|
+
try {
|
|
96
|
+
// Execute code in sandbox
|
|
97
|
+
eval(code);
|
|
98
|
+
return { success: true };
|
|
99
|
+
} catch (error) {
|
|
100
|
+
return { error: (error as Error).stack };
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
}),
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return result.toDataStreamResponse();
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Features
|
|
112
|
+
|
|
113
|
+
- Parses standard JavaScript/Node.js stack trace format
|
|
114
|
+
- Highlights error type in red
|
|
115
|
+
- Dims internal frames (node_modules, node: paths)
|
|
116
|
+
- Collapsible content with smooth animation
|
|
117
|
+
- Copy full stack trace to clipboard
|
|
118
|
+
- Clickable file paths with line/column numbers
|
|
119
|
+
|
|
120
|
+
## Examples
|
|
121
|
+
|
|
122
|
+
### Collapsed by Default
|
|
123
|
+
|
|
124
|
+
See `scripts/stack-trace-collapsed.tsx` for this example.
|
|
125
|
+
|
|
126
|
+
### Hide Internal Frames
|
|
127
|
+
|
|
128
|
+
See `scripts/stack-trace-no-internal.tsx` for this example.
|
|
129
|
+
|
|
130
|
+
## Props
|
|
131
|
+
|
|
132
|
+
### `<StackTrace />`
|
|
133
|
+
|
|
134
|
+
| Prop | Type | Default | Description |
|
|
135
|
+
| ----------------- | -------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------- |
|
|
136
|
+
| `trace` | `string` | - | The raw stack trace string to parse and display. |
|
|
137
|
+
| `open` | `boolean` | - | Controlled open state. |
|
|
138
|
+
| `defaultOpen` | `boolean` | `false` | Whether the content is expanded by default. |
|
|
139
|
+
| `onOpenChange` | `(open: boolean) => void` | - | Callback when open state changes. |
|
|
140
|
+
| `onFilePathClick` | `(path: string, line?: number, column?: number) => void` | - | Callback when a file path is clicked. Receives the file path, line number, and column number. |
|
|
141
|
+
| `children` | `React.ReactNode` | - | Child elements (StackTraceHeader, StackTraceContent, etc.). |
|
|
142
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
143
|
+
| `...props` | `React.HTMLAttributes<HTMLDivElement>` | - | Any other props are spread to the root div. |
|
|
144
|
+
|
|
145
|
+
### `<StackTraceHeader />`
|
|
146
|
+
|
|
147
|
+
| Prop | Type | Default | Description |
|
|
148
|
+
| ----------- | ------------------------------------------------- | ------- | ----------------------------------------------------------------- |
|
|
149
|
+
| `children` | `React.ReactNode` | - | Header content (typically StackTraceError and StackTraceActions). |
|
|
150
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
151
|
+
| `...props` | `React.ComponentProps<typeof CollapsibleTrigger>` | - | Any other props are spread to the CollapsibleTrigger. |
|
|
152
|
+
|
|
153
|
+
### `<StackTraceError />`
|
|
154
|
+
|
|
155
|
+
| Prop | Type | Default | Description |
|
|
156
|
+
| ----------- | -------------------------------------- | ------- | ------------------------------------------------------------------------- |
|
|
157
|
+
| `children` | `React.ReactNode` | - | Error content (typically StackTraceErrorType and StackTraceErrorMessage). |
|
|
158
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
159
|
+
| `...props` | `React.HTMLAttributes<HTMLDivElement>` | - | Any other props are spread to the container div. |
|
|
160
|
+
|
|
161
|
+
### `<StackTraceErrorType />`
|
|
162
|
+
|
|
163
|
+
| Prop | Type | Default | Description |
|
|
164
|
+
| ----------- | --------------------------------------- | ------- | -------------------------------------------------------- |
|
|
165
|
+
| `children` | `React.ReactNode` | - | Custom content. Defaults to the parsed error type (e.g., |
|
|
166
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
167
|
+
| `...props` | `React.HTMLAttributes<HTMLSpanElement>` | - | Any other props are spread to the span element. |
|
|
168
|
+
|
|
169
|
+
### `<StackTraceErrorMessage />`
|
|
170
|
+
|
|
171
|
+
| Prop | Type | Default | Description |
|
|
172
|
+
| ----------- | --------------------------------------- | ------- | ----------------------------------------------------- |
|
|
173
|
+
| `children` | `React.ReactNode` | - | Custom content. Defaults to the parsed error message. |
|
|
174
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
175
|
+
| `...props` | `React.HTMLAttributes<HTMLSpanElement>` | - | Any other props are spread to the span element. |
|
|
176
|
+
|
|
177
|
+
### `<StackTraceActions />`
|
|
178
|
+
|
|
179
|
+
| Prop | Type | Default | Description |
|
|
180
|
+
| ----------- | -------------------------------------- | ------- | --------------------------------------------------------------------------- |
|
|
181
|
+
| `children` | `React.ReactNode` | - | Action buttons (typically StackTraceCopyButton and StackTraceExpandButton). |
|
|
182
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
183
|
+
| `...props` | `React.HTMLAttributes<HTMLDivElement>` | - | Any other props are spread to the container div. |
|
|
184
|
+
|
|
185
|
+
### `<StackTraceCopyButton />`
|
|
186
|
+
|
|
187
|
+
| Prop | Type | Default | Description |
|
|
188
|
+
| ----------- | ------------------------------------- | ------- | ------------------------------------------------------------------------ |
|
|
189
|
+
| `onCopy` | `() => void` | - | Callback fired after a successful copy. |
|
|
190
|
+
| `onError` | `(error: Error) => void` | - | Callback fired if copying fails. |
|
|
191
|
+
| `timeout` | `number` | `2000` | How long to show the copied state (ms). |
|
|
192
|
+
| `children` | `React.ReactNode` | - | Custom content for the button. Defaults to copy/check icons. |
|
|
193
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
194
|
+
| `...props` | `React.ComponentProps<typeof Button>` | - | Any other props are spread to the underlying shadcn/ui Button component. |
|
|
195
|
+
|
|
196
|
+
### `<StackTraceExpandButton />`
|
|
197
|
+
|
|
198
|
+
| Prop | Type | Default | Description |
|
|
199
|
+
| ----------- | -------------------------------------- | ------- | ------------------------------------------------ |
|
|
200
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
201
|
+
| `...props` | `React.HTMLAttributes<HTMLDivElement>` | - | Any other props are spread to the container div. |
|
|
202
|
+
|
|
203
|
+
### `<StackTraceContent />`
|
|
204
|
+
|
|
205
|
+
| Prop | Type | Default | Description |
|
|
206
|
+
| ----------- | ------------------------------------------------- | ------- | --------------------------------------------------------------------------------------- |
|
|
207
|
+
| `maxHeight` | `number` | `400` | Maximum height of the content area. Enables scrolling when content exceeds this height. |
|
|
208
|
+
| `children` | `React.ReactNode` | - | Content to display (typically StackTraceFrames). |
|
|
209
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
210
|
+
| `...props` | `React.ComponentProps<typeof CollapsibleContent>` | - | Any other props are spread to the CollapsibleContent. |
|
|
211
|
+
|
|
212
|
+
### `<StackTraceFrames />`
|
|
213
|
+
|
|
214
|
+
| Prop | Type | Default | Description |
|
|
215
|
+
| -------------------- | -------------------------------------- | ------- | ------------------------------------------------------------ |
|
|
216
|
+
| `showInternalFrames` | `boolean` | `true` | Whether to show internal frames (node_modules, node: paths). |
|
|
217
|
+
| `className` | `string` | - | Additional CSS classes. |
|
|
218
|
+
| `...props` | `React.HTMLAttributes<HTMLDivElement>` | - | Any other props are spread to the container div. |
|