@goldencomm/create-baseline 0.0.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.
Files changed (377) hide show
  1. package/README.md +88 -0
  2. package/index.mjs +296 -0
  3. package/package.json +44 -0
  4. package/templates/next/.claude/skills/ai-elements/SKILL.md +160 -0
  5. package/templates/next/.claude/skills/ai-elements/references/agent.md +134 -0
  6. package/templates/next/.claude/skills/ai-elements/references/artifact.md +84 -0
  7. package/templates/next/.claude/skills/ai-elements/references/attachments.md +190 -0
  8. package/templates/next/.claude/skills/ai-elements/references/audio-player.md +134 -0
  9. package/templates/next/.claude/skills/ai-elements/references/canvas.md +34 -0
  10. package/templates/next/.claude/skills/ai-elements/references/chain-of-thought.md +81 -0
  11. package/templates/next/.claude/skills/ai-elements/references/checkpoint.md +183 -0
  12. package/templates/next/.claude/skills/ai-elements/references/code-block.md +170 -0
  13. package/templates/next/.claude/skills/ai-elements/references/commit.md +177 -0
  14. package/templates/next/.claude/skills/ai-elements/references/confirmation.md +262 -0
  15. package/templates/next/.claude/skills/ai-elements/references/connection.md +34 -0
  16. package/templates/next/.claude/skills/ai-elements/references/context.md +126 -0
  17. package/templates/next/.claude/skills/ai-elements/references/controls.md +32 -0
  18. package/templates/next/.claude/skills/ai-elements/references/conversation.md +224 -0
  19. package/templates/next/.claude/skills/ai-elements/references/edge.md +52 -0
  20. package/templates/next/.claude/skills/ai-elements/references/environment-variables.md +102 -0
  21. package/templates/next/.claude/skills/ai-elements/references/file-tree.md +72 -0
  22. package/templates/next/.claude/skills/ai-elements/references/image.md +146 -0
  23. package/templates/next/.claude/skills/ai-elements/references/inline-citation.md +299 -0
  24. package/templates/next/.claude/skills/ai-elements/references/jsx-preview.md +104 -0
  25. package/templates/next/.claude/skills/ai-elements/references/message.md +237 -0
  26. package/templates/next/.claude/skills/ai-elements/references/mic-selector.md +189 -0
  27. package/templates/next/.claude/skills/ai-elements/references/model-selector.md +112 -0
  28. package/templates/next/.claude/skills/ai-elements/references/node.md +73 -0
  29. package/templates/next/.claude/skills/ai-elements/references/open-in-chat.md +67 -0
  30. package/templates/next/.claude/skills/ai-elements/references/package-info.md +95 -0
  31. package/templates/next/.claude/skills/ai-elements/references/panel.md +33 -0
  32. package/templates/next/.claude/skills/ai-elements/references/persona.md +166 -0
  33. package/templates/next/.claude/skills/ai-elements/references/plan.md +79 -0
  34. package/templates/next/.claude/skills/ai-elements/references/prompt-input.md +579 -0
  35. package/templates/next/.claude/skills/ai-elements/references/queue.md +172 -0
  36. package/templates/next/.claude/skills/ai-elements/references/reasoning.md +238 -0
  37. package/templates/next/.claude/skills/ai-elements/references/sandbox.md +129 -0
  38. package/templates/next/.claude/skills/ai-elements/references/schema-display.md +102 -0
  39. package/templates/next/.claude/skills/ai-elements/references/shimmer.md +48 -0
  40. package/templates/next/.claude/skills/ai-elements/references/snippet.md +64 -0
  41. package/templates/next/.claude/skills/ai-elements/references/sources.md +209 -0
  42. package/templates/next/.claude/skills/ai-elements/references/speech-input.md +163 -0
  43. package/templates/next/.claude/skills/ai-elements/references/stack-trace.md +224 -0
  44. package/templates/next/.claude/skills/ai-elements/references/suggestion.md +124 -0
  45. package/templates/next/.claude/skills/ai-elements/references/task.md +222 -0
  46. package/templates/next/.claude/skills/ai-elements/references/terminal.md +103 -0
  47. package/templates/next/.claude/skills/ai-elements/references/test-results.md +157 -0
  48. package/templates/next/.claude/skills/ai-elements/references/tool.md +285 -0
  49. package/templates/next/.claude/skills/ai-elements/references/toolbar.md +32 -0
  50. package/templates/next/.claude/skills/ai-elements/references/transcription.md +120 -0
  51. package/templates/next/.claude/skills/ai-elements/references/voice-selector.md +241 -0
  52. package/templates/next/.claude/skills/ai-elements/references/web-preview.md +200 -0
  53. package/templates/next/.claude/skills/ai-elements/scripts/agent.tsx +61 -0
  54. package/templates/next/.claude/skills/ai-elements/scripts/artifact.tsx +127 -0
  55. package/templates/next/.claude/skills/ai-elements/scripts/attachments-inline.tsx +128 -0
  56. package/templates/next/.claude/skills/ai-elements/scripts/attachments-list.tsx +95 -0
  57. package/templates/next/.claude/skills/ai-elements/scripts/attachments.tsx +85 -0
  58. package/templates/next/.claude/skills/ai-elements/scripts/audio-player-remote.tsx +35 -0
  59. package/templates/next/.claude/skills/ai-elements/scripts/audio-player.tsx +68 -0
  60. package/templates/next/.claude/skills/ai-elements/scripts/chain-of-thought.tsx +82 -0
  61. package/templates/next/.claude/skills/ai-elements/scripts/checkpoint.tsx +110 -0
  62. package/templates/next/.claude/skills/ai-elements/scripts/code-block-dark.tsx +46 -0
  63. package/templates/next/.claude/skills/ai-elements/scripts/code-block.tsx +120 -0
  64. package/templates/next/.claude/skills/ai-elements/scripts/commit.tsx +94 -0
  65. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-accepted.tsx +40 -0
  66. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-rejected.tsx +40 -0
  67. package/templates/next/.claude/skills/ai-elements/scripts/confirmation-request.tsx +54 -0
  68. package/templates/next/.claude/skills/ai-elements/scripts/confirmation.tsx +55 -0
  69. package/templates/next/.claude/skills/ai-elements/scripts/context.tsx +45 -0
  70. package/templates/next/.claude/skills/ai-elements/scripts/conversation.tsx +177 -0
  71. package/templates/next/.claude/skills/ai-elements/scripts/environment-variables.tsx +62 -0
  72. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-basic.tsx +18 -0
  73. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-expanded.tsx +21 -0
  74. package/templates/next/.claude/skills/ai-elements/scripts/file-tree-selection.tsx +24 -0
  75. package/templates/next/.claude/skills/ai-elements/scripts/file-tree.tsx +42 -0
  76. package/templates/next/.claude/skills/ai-elements/scripts/image.tsx +20 -0
  77. package/templates/next/.claude/skills/ai-elements/scripts/inline-citation.tsx +97 -0
  78. package/templates/next/.claude/skills/ai-elements/scripts/jsx-preview.tsx +104 -0
  79. package/templates/next/.claude/skills/ai-elements/scripts/message.tsx +365 -0
  80. package/templates/next/.claude/skills/ai-elements/scripts/mic-selector.tsx +49 -0
  81. package/templates/next/.claude/skills/ai-elements/scripts/model-selector.tsx +365 -0
  82. package/templates/next/.claude/skills/ai-elements/scripts/open-in-chat.tsx +33 -0
  83. package/templates/next/.claude/skills/ai-elements/scripts/package-info.tsx +51 -0
  84. package/templates/next/.claude/skills/ai-elements/scripts/persona-command.tsx +110 -0
  85. package/templates/next/.claude/skills/ai-elements/scripts/persona-glint.tsx +110 -0
  86. package/templates/next/.claude/skills/ai-elements/scripts/persona-halo.tsx +110 -0
  87. package/templates/next/.claude/skills/ai-elements/scripts/persona-mana.tsx +110 -0
  88. package/templates/next/.claude/skills/ai-elements/scripts/persona-obsidian.tsx +110 -0
  89. package/templates/next/.claude/skills/ai-elements/scripts/persona-opal.tsx +110 -0
  90. package/templates/next/.claude/skills/ai-elements/scripts/plan.tsx +65 -0
  91. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-cursor.tsx +502 -0
  92. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input-tooltip.tsx +44 -0
  93. package/templates/next/.claude/skills/ai-elements/scripts/prompt-input.tsx +267 -0
  94. package/templates/next/.claude/skills/ai-elements/scripts/queue-prompt-input.tsx +394 -0
  95. package/templates/next/.claude/skills/ai-elements/scripts/queue.tsx +295 -0
  96. package/templates/next/.claude/skills/ai-elements/scripts/reasoning.tsx +71 -0
  97. package/templates/next/.claude/skills/ai-elements/scripts/sandbox.tsx +178 -0
  98. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-basic.tsx +9 -0
  99. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-body.tsx +20 -0
  100. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-nested.tsx +23 -0
  101. package/templates/next/.claude/skills/ai-elements/scripts/schema-display-params.tsx +16 -0
  102. package/templates/next/.claude/skills/ai-elements/scripts/schema-display.tsx +110 -0
  103. package/templates/next/.claude/skills/ai-elements/scripts/shimmer-duration.tsx +31 -0
  104. package/templates/next/.claude/skills/ai-elements/scripts/shimmer-elements.tsx +43 -0
  105. package/templates/next/.claude/skills/ai-elements/scripts/shimmer.tsx +17 -0
  106. package/templates/next/.claude/skills/ai-elements/scripts/snippet-plain.tsx +19 -0
  107. package/templates/next/.claude/skills/ai-elements/scripts/snippet.tsx +25 -0
  108. package/templates/next/.claude/skills/ai-elements/scripts/sources-custom.tsx +39 -0
  109. package/templates/next/.claude/skills/ai-elements/scripts/sources.tsx +32 -0
  110. package/templates/next/.claude/skills/ai-elements/scripts/speech-input.tsx +84 -0
  111. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-collapsed.tsx +39 -0
  112. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace-no-internal.tsx +41 -0
  113. package/templates/next/.claude/skills/ai-elements/scripts/stack-trace.tsx +58 -0
  114. package/templates/next/.claude/skills/ai-elements/scripts/suggestion-input.tsx +144 -0
  115. package/templates/next/.claude/skills/ai-elements/scripts/suggestion.tsx +32 -0
  116. package/templates/next/.claude/skills/ai-elements/scripts/task.tsx +59 -0
  117. package/templates/next/.claude/skills/ai-elements/scripts/terminal-basic.tsx +7 -0
  118. package/templates/next/.claude/skills/ai-elements/scripts/terminal-clear.tsx +19 -0
  119. package/templates/next/.claude/skills/ai-elements/scripts/terminal-streaming.tsx +38 -0
  120. package/templates/next/.claude/skills/ai-elements/scripts/terminal.tsx +82 -0
  121. package/templates/next/.claude/skills/ai-elements/scripts/test-results-basic.tsx +27 -0
  122. package/templates/next/.claude/skills/ai-elements/scripts/test-results-errors.tsx +51 -0
  123. package/templates/next/.claude/skills/ai-elements/scripts/test-results-suites.tsx +40 -0
  124. package/templates/next/.claude/skills/ai-elements/scripts/test-results.tsx +102 -0
  125. package/templates/next/.claude/skills/ai-elements/scripts/tool-input-available.tsx +31 -0
  126. package/templates/next/.claude/skills/ai-elements/scripts/tool-input-streaming.tsx +30 -0
  127. package/templates/next/.claude/skills/ai-elements/scripts/tool-output-available.tsx +80 -0
  128. package/templates/next/.claude/skills/ai-elements/scripts/tool-output-error.tsx +44 -0
  129. package/templates/next/.claude/skills/ai-elements/scripts/tool.tsx +222 -0
  130. package/templates/next/.claude/skills/ai-elements/scripts/transcription.tsx +290 -0
  131. package/templates/next/.claude/skills/ai-elements/scripts/voice-selector.tsx +245 -0
  132. package/templates/next/.claude/skills/ai-elements/scripts/web-preview.tsx +115 -0
  133. package/templates/next/.claude/skills/ai-sdk/SKILL.md +78 -0
  134. package/templates/next/.claude/skills/frontend-design/LICENSE.txt +177 -0
  135. package/templates/next/.claude/skills/frontend-design/SKILL.md +55 -0
  136. package/templates/next/.claude/skills/gc-implement-figma-page/SKILL.md +93 -0
  137. package/templates/next/.claude/skills/migrate-ai-sdk-v6-to-v7/SKILL.md +108 -0
  138. package/templates/next/.claude/skills/vercel-composition-patterns/AGENTS.md +946 -0
  139. package/templates/next/.claude/skills/vercel-composition-patterns/README.md +60 -0
  140. package/templates/next/.claude/skills/vercel-composition-patterns/SKILL.md +89 -0
  141. package/templates/next/.claude/skills/vercel-composition-patterns/metadata.json +11 -0
  142. package/templates/next/.claude/skills/vercel-composition-patterns/rules/_sections.md +29 -0
  143. package/templates/next/.claude/skills/vercel-composition-patterns/rules/_template.md +24 -0
  144. package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  145. package/templates/next/.claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  146. package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  147. package/templates/next/.claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  148. package/templates/next/.claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  149. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  150. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  151. package/templates/next/.claude/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  152. package/templates/next/.claude/skills/vercel-react-best-practices/AGENTS.md +3810 -0
  153. package/templates/next/.claude/skills/vercel-react-best-practices/README.md +123 -0
  154. package/templates/next/.claude/skills/vercel-react-best-practices/SKILL.md +149 -0
  155. package/templates/next/.claude/skills/vercel-react-best-practices/metadata.json +15 -0
  156. package/templates/next/.claude/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  157. package/templates/next/.claude/skills/vercel-react-best-practices/rules/_template.md +28 -0
  158. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  159. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  160. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  161. package/templates/next/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  162. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  163. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  164. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  165. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  166. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  167. package/templates/next/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  168. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  169. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  170. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  171. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  172. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  173. package/templates/next/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  174. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  175. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  176. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  177. package/templates/next/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  178. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  179. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  180. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  181. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  182. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  183. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  184. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  185. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  186. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  187. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  188. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  189. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  190. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  191. package/templates/next/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  192. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  193. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  194. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  195. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  196. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  197. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  198. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  199. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  200. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  201. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  202. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  203. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  204. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  205. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  206. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  207. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  208. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  209. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  210. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  211. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  212. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  213. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  214. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  215. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  216. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  217. package/templates/next/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  218. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  219. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  220. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  221. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  222. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  223. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  224. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  225. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  226. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  227. package/templates/next/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  228. package/templates/next/.claude/skills/web-design-guidelines/SKILL.md +39 -0
  229. package/templates/next/CLAUDE.md +42 -0
  230. package/templates/next/README.md +30 -0
  231. package/templates/next/_gitignore +4 -0
  232. package/templates/next/app/globals.css +13 -0
  233. package/templates/next/app/layout.tsx +44 -0
  234. package/templates/next/app/page.tsx +30 -0
  235. package/templates/next/globals.d.ts +8 -0
  236. package/templates/next/next.config.mjs +6 -0
  237. package/templates/next/package.json +38 -0
  238. package/templates/next/postcss.config.mjs +5 -0
  239. package/templates/next/skills-lock.json +47 -0
  240. package/templates/next/tsconfig.json +36 -0
  241. package/templates/shopify-theme/.claude/skills/gc-shopify-block/SKILL.md +44 -0
  242. package/templates/shopify-theme/.claude/skills/shopify-dev/SKILL.md +51 -0
  243. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/log_skill_use.mjs +205 -0
  244. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/search_docs.mjs +272 -0
  245. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.ps1 +361 -0
  246. package/templates/shopify-theme/.claude/skills/shopify-dev/scripts/track-telemetry.sh +527 -0
  247. package/templates/shopify-theme/.claude/skills/shopify-liquid/SKILL.md +343 -0
  248. package/templates/shopify-theme/.claude/skills/shopify-liquid/blocks/hero-slide.liquid +342 -0
  249. package/templates/shopify-theme/.claude/skills/shopify-liquid/config/settings_schema.json +1 -0
  250. package/templates/shopify-theme/.claude/skills/shopify-liquid/featured-collection.liquid +457 -0
  251. package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.json +10 -0
  252. package/templates/shopify-theme/.claude/skills/shopify-liquid/locales/en.default.schema.json +103 -0
  253. package/templates/shopify-theme/.claude/skills/shopify-liquid/package.json +10 -0
  254. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/search_docs.mjs +759 -0
  255. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.ps1 +361 -0
  256. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/track-telemetry.sh +527 -0
  257. package/templates/shopify-theme/.claude/skills/shopify-liquid/scripts/validate.mjs +654 -0
  258. package/templates/shopify-theme/.claude/skills/shopify-liquid/sections/hero-banner.liquid +329 -0
  259. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/SKILL.md +165 -0
  260. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/log_skill_use.mjs +205 -0
  261. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.ps1 +361 -0
  262. package/templates/shopify-theme/.claude/skills/shopify-use-shopify-cli/scripts/track-telemetry.sh +527 -0
  263. package/templates/shopify-theme/.shopifyignore +9 -0
  264. package/templates/shopify-theme/CLAUDE.md +51 -0
  265. package/templates/shopify-theme/README.md +92 -0
  266. package/templates/shopify-theme/assets/baseline.css +8390 -0
  267. package/templates/shopify-theme/assets/swiper-element-bundle.min.js +14 -0
  268. package/templates/shopify-theme/blocks/_accordion.liquid +59 -0
  269. package/templates/shopify-theme/blocks/_carousel-slide.liquid +24 -0
  270. package/templates/shopify-theme/blocks/_modal-body.liquid +18 -0
  271. package/templates/shopify-theme/blocks/_modal-footer.liquid +36 -0
  272. package/templates/shopify-theme/blocks/_modal-header.liquid +19 -0
  273. package/templates/shopify-theme/blocks/_modal-media.liquid +37 -0
  274. package/templates/shopify-theme/blocks/accordion-group.liquid +53 -0
  275. package/templates/shopify-theme/blocks/alert.liquid +92 -0
  276. package/templates/shopify-theme/blocks/avatar-group.liquid +51 -0
  277. package/templates/shopify-theme/blocks/avatar.liquid +56 -0
  278. package/templates/shopify-theme/blocks/badge.liquid +33 -0
  279. package/templates/shopify-theme/blocks/breadcrumb.liquid +45 -0
  280. package/templates/shopify-theme/blocks/button.liquid +51 -0
  281. package/templates/shopify-theme/blocks/buttons.liquid +41 -0
  282. package/templates/shopify-theme/blocks/card.liquid +67 -0
  283. package/templates/shopify-theme/blocks/carousel.liquid +55 -0
  284. package/templates/shopify-theme/blocks/column.liquid +33 -0
  285. package/templates/shopify-theme/blocks/image.liquid +37 -0
  286. package/templates/shopify-theme/blocks/modal.liquid +52 -0
  287. package/templates/shopify-theme/blocks/popover.liquid +24 -0
  288. package/templates/shopify-theme/blocks/skeleton.liquid +22 -0
  289. package/templates/shopify-theme/blocks/spinner.liquid +22 -0
  290. package/templates/shopify-theme/blocks/split.liquid +39 -0
  291. package/templates/shopify-theme/blocks/tab.liquid +19 -0
  292. package/templates/shopify-theme/blocks/tabs.liquid +78 -0
  293. package/templates/shopify-theme/blocks/tags.liquid +55 -0
  294. package/templates/shopify-theme/blocks/text.liquid +55 -0
  295. package/templates/shopify-theme/blocks/tooltip.liquid +50 -0
  296. package/templates/shopify-theme/blocks/typography.liquid +90 -0
  297. package/templates/shopify-theme/config/settings_data.json +4 -0
  298. package/templates/shopify-theme/config/settings_schema.json +10 -0
  299. package/templates/shopify-theme/layout/theme.liquid +21 -0
  300. package/templates/shopify-theme/locales/en.default.json +5 -0
  301. package/templates/shopify-theme/locales/en.default.schema.json +131 -0
  302. package/templates/shopify-theme/package.json +21 -0
  303. package/templates/shopify-theme/scripts/sync-tokens.mjs +32 -0
  304. package/templates/shopify-theme/sections/baseline-components.liquid +81 -0
  305. package/templates/shopify-theme/skills-lock.json +23 -0
  306. package/templates/shopify-theme/snippets/lucide.liquid +34 -0
  307. package/templates/shopify-theme/snippets/pagination.liquid +44 -0
  308. package/templates/shopify-theme/templates/collection.json +13 -0
  309. package/templates/shopify-theme/templates/gift_card.liquid +5 -0
  310. package/templates/shopify-theme/templates/index.json +135 -0
  311. package/templates/shopify-theme/templates/list-collections.json +13 -0
  312. package/templates/shopify-theme/templates/product.json +13 -0
  313. package/templates/wordpress/.claude/CLAUDE.md +37 -0
  314. package/templates/wordpress/.claude/skills/wp-block-development/SKILL.md +174 -0
  315. package/templates/wordpress/.claude/skills/wp-block-development/references/attributes-and-serialization.md +22 -0
  316. package/templates/wordpress/.claude/skills/wp-block-development/references/block-json.md +49 -0
  317. package/templates/wordpress/.claude/skills/wp-block-development/references/creating-new-blocks.md +46 -0
  318. package/templates/wordpress/.claude/skills/wp-block-development/references/debugging.md +36 -0
  319. package/templates/wordpress/.claude/skills/wp-block-development/references/deprecations.md +24 -0
  320. package/templates/wordpress/.claude/skills/wp-block-development/references/dynamic-rendering.md +23 -0
  321. package/templates/wordpress/.claude/skills/wp-block-development/references/inner-blocks.md +25 -0
  322. package/templates/wordpress/.claude/skills/wp-block-development/references/registration.md +30 -0
  323. package/templates/wordpress/.claude/skills/wp-block-development/references/supports-and-wrappers.md +18 -0
  324. package/templates/wordpress/.claude/skills/wp-block-development/references/tooling-and-testing.md +21 -0
  325. package/templates/wordpress/.claude/skills/wp-block-development/scripts/list_blocks.mjs +121 -0
  326. package/templates/wordpress/.claude/skills/wp-block-themes/SKILL.md +116 -0
  327. package/templates/wordpress/.claude/skills/wp-block-themes/references/creating-new-block-theme.md +37 -0
  328. package/templates/wordpress/.claude/skills/wp-block-themes/references/debugging.md +24 -0
  329. package/templates/wordpress/.claude/skills/wp-block-themes/references/patterns.md +18 -0
  330. package/templates/wordpress/.claude/skills/wp-block-themes/references/style-variations.md +14 -0
  331. package/templates/wordpress/.claude/skills/wp-block-themes/references/templates-and-parts.md +16 -0
  332. package/templates/wordpress/.claude/skills/wp-block-themes/references/theme-json.md +59 -0
  333. package/templates/wordpress/.claude/skills/wp-block-themes/scripts/detect_block_themes.mjs +117 -0
  334. package/templates/wordpress/.claude/skills/wp-performance/SKILL.md +146 -0
  335. package/templates/wordpress/.claude/skills/wp-performance/references/autoload-options.md +24 -0
  336. package/templates/wordpress/.claude/skills/wp-performance/references/cron.md +20 -0
  337. package/templates/wordpress/.claude/skills/wp-performance/references/database.md +20 -0
  338. package/templates/wordpress/.claude/skills/wp-performance/references/http-api.md +15 -0
  339. package/templates/wordpress/.claude/skills/wp-performance/references/measurement.md +21 -0
  340. package/templates/wordpress/.claude/skills/wp-performance/references/object-cache.md +24 -0
  341. package/templates/wordpress/.claude/skills/wp-performance/references/query-monitor-headless.md +38 -0
  342. package/templates/wordpress/.claude/skills/wp-performance/references/server-timing.md +22 -0
  343. package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-doctor.md +24 -0
  344. package/templates/wordpress/.claude/skills/wp-performance/references/wp-cli-profile.md +32 -0
  345. package/templates/wordpress/.claude/skills/wp-performance/scripts/perf_inspect.mjs +128 -0
  346. package/templates/wordpress/.claude/skills/wp-plugin-development/SKILL.md +112 -0
  347. package/templates/wordpress/.claude/skills/wp-plugin-development/references/data-and-cron.md +19 -0
  348. package/templates/wordpress/.claude/skills/wp-plugin-development/references/debugging.md +19 -0
  349. package/templates/wordpress/.claude/skills/wp-plugin-development/references/lifecycle.md +33 -0
  350. package/templates/wordpress/.claude/skills/wp-plugin-development/references/security.md +29 -0
  351. package/templates/wordpress/.claude/skills/wp-plugin-development/references/settings-api.md +22 -0
  352. package/templates/wordpress/.claude/skills/wp-plugin-development/references/structure.md +16 -0
  353. package/templates/wordpress/.claude/skills/wp-plugin-development/scripts/detect_plugins.mjs +122 -0
  354. package/templates/wordpress/.claude/skills/wp-rest-api/SKILL.md +114 -0
  355. package/templates/wordpress/.claude/skills/wp-rest-api/references/authentication.md +18 -0
  356. package/templates/wordpress/.claude/skills/wp-rest-api/references/custom-content-types.md +20 -0
  357. package/templates/wordpress/.claude/skills/wp-rest-api/references/discovery-and-params.md +20 -0
  358. package/templates/wordpress/.claude/skills/wp-rest-api/references/responses-and-fields.md +30 -0
  359. package/templates/wordpress/.claude/skills/wp-rest-api/references/routes-and-endpoints.md +36 -0
  360. package/templates/wordpress/.claude/skills/wp-rest-api/references/schema.md +22 -0
  361. package/templates/wordpress/.ddev/commands/web/seed +7 -0
  362. package/templates/wordpress/.ddev/config.yaml +18 -0
  363. package/templates/wordpress/.ddev/docker-compose.packages.yaml +14 -0
  364. package/templates/wordpress/.ddev/docker-compose.redis.yaml +11 -0
  365. package/templates/wordpress/.env.example +33 -0
  366. package/templates/wordpress/CLAUDE.md +34 -0
  367. package/templates/wordpress/README.md +45 -0
  368. package/templates/wordpress/_gitignore +33 -0
  369. package/templates/wordpress/auth.json.example +18 -0
  370. package/templates/wordpress/composer.json +91 -0
  371. package/templates/wordpress/composer.lock +1594 -0
  372. package/templates/wordpress/package.json +13 -0
  373. package/templates/wordpress/scripts/seed.sh +64 -0
  374. package/templates/wordpress/skills-lock.json +35 -0
  375. package/templates/wordpress/wp-config.php +89 -0
  376. package/templates/wordpress/wp-content/index.php +2 -0
  377. package/templates/wordpress/wp-content/mu-plugins/baseline-bootstrap.php +26 -0
@@ -0,0 +1,262 @@
1
+ # Confirmation
2
+
3
+ An alert-based component for managing tool execution approval workflows with request, accept, and reject states.
4
+
5
+ The `Confirmation` component provides a flexible system for displaying tool approval requests and their outcomes. Perfect for showing users when AI tools require approval before execution, and displaying the approval status afterward.
6
+
7
+ See `scripts/confirmation.tsx` for this example.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npx ai-elements@latest add confirmation
13
+ ```
14
+
15
+ ## Usage with AI SDK
16
+
17
+ Build a chat UI with tool approval workflow where dangerous tools require user confirmation before execution.
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 { DefaultChatTransport, type ToolUIPart } from "ai";
26
+ import { useState } from "react";
27
+ import { CheckIcon, XIcon } from "lucide-react";
28
+ import { Button } from "@/components/ui/button";
29
+ import {
30
+ Confirmation,
31
+ ConfirmationTitle,
32
+ ConfirmationRequest,
33
+ ConfirmationAccepted,
34
+ ConfirmationRejected,
35
+ ConfirmationActions,
36
+ ConfirmationAction,
37
+ } from "@/components/ai-elements/confirmation";
38
+ import { MessageResponse } from "@/components/ai-elements/message";
39
+
40
+ type DeleteFileInput = {
41
+ filePath: string;
42
+ confirm: boolean;
43
+ };
44
+
45
+ type DeleteFileToolUIPart = ToolUIPart<{
46
+ delete_file: {
47
+ input: DeleteFileInput;
48
+ output: { success: boolean; message: string };
49
+ };
50
+ }>;
51
+
52
+ const Example = () => {
53
+ const { messages, sendMessage, status, addToolApprovalResponse } = useChat({
54
+ transport: new DefaultChatTransport({
55
+ api: "/api/chat",
56
+ }),
57
+ });
58
+
59
+ const handleDeleteFile = () => {
60
+ sendMessage({ text: "Delete the file at /tmp/example.txt" });
61
+ };
62
+
63
+ const latestMessage = messages[messages.length - 1];
64
+ const deleteTool = latestMessage?.parts?.find(
65
+ (part) => part.type === "tool-delete_file"
66
+ ) as DeleteFileToolUIPart | undefined;
67
+
68
+ return (
69
+ <div className="max-w-4xl mx-auto p-6 relative size-full rounded-lg border h-[600px]">
70
+ <div className="flex flex-col h-full space-y-4">
71
+ <Button onClick={handleDeleteFile} disabled={status !== "ready"}>
72
+ Delete Example File
73
+ </Button>
74
+
75
+ {deleteTool?.approval && (
76
+ <Confirmation approval={deleteTool.approval} state={deleteTool.state}>
77
+ <ConfirmationRequest>
78
+ This tool wants to delete:{" "}
79
+ <code>{deleteTool.input?.filePath}</code>
80
+ <br />
81
+ Do you approve this action?
82
+ </ConfirmationRequest>
83
+ <ConfirmationAccepted>
84
+ <CheckIcon className="size-4" />
85
+ <span>You approved this tool execution</span>
86
+ </ConfirmationAccepted>
87
+ <ConfirmationRejected>
88
+ <XIcon className="size-4" />
89
+ <span>You rejected this tool execution</span>
90
+ </ConfirmationRejected>
91
+ <ConfirmationActions>
92
+ <ConfirmationAction
93
+ variant="outline"
94
+ onClick={() =>
95
+ addToolApprovalResponse({
96
+ id: deleteTool.approval!.id,
97
+ approved: false,
98
+ })
99
+ }
100
+ >
101
+ Reject
102
+ </ConfirmationAction>
103
+ <ConfirmationAction
104
+ variant="default"
105
+ onClick={() =>
106
+ addToolApprovalResponse({
107
+ id: deleteTool.approval!.id,
108
+ approved: true,
109
+ })
110
+ }
111
+ >
112
+ Approve
113
+ </ConfirmationAction>
114
+ </ConfirmationActions>
115
+ </Confirmation>
116
+ )}
117
+
118
+ {deleteTool?.output && (
119
+ <MessageResponse>
120
+ {deleteTool.output.success
121
+ ? deleteTool.output.message
122
+ : `Error: ${deleteTool.output.message}`}
123
+ </MessageResponse>
124
+ )}
125
+ </div>
126
+ </div>
127
+ );
128
+ };
129
+
130
+ export default Example;
131
+ ```
132
+
133
+ Add the following route to your backend:
134
+
135
+ ```ts title="app/api/chat/route.tsx"
136
+ import { streamText, UIMessage, convertToModelMessages } from "ai";
137
+ import { z } from "zod";
138
+
139
+ // Allow streaming responses up to 30 seconds
140
+ export const maxDuration = 30;
141
+
142
+ export async function POST(req: Request) {
143
+ const { messages }: { messages: UIMessage[] } = await req.json();
144
+
145
+ const result = streamText({
146
+ model: "openai/gpt-4o",
147
+ messages: await convertToModelMessages(messages),
148
+ tools: {
149
+ delete_file: {
150
+ description: "Delete a file from the file system",
151
+ parameters: z.object({
152
+ filePath: z.string().describe("The path to the file to delete"),
153
+ confirm: z
154
+ .boolean()
155
+ .default(false)
156
+ .describe("Confirmation that the user wants to delete the file"),
157
+ }),
158
+ requireApproval: true, // Enable approval workflow
159
+ execute: async ({ filePath, confirm }) => {
160
+ if (!confirm) {
161
+ return {
162
+ success: false,
163
+ message: "Deletion not confirmed",
164
+ };
165
+ }
166
+
167
+ // Simulate file deletion
168
+ await new Promise((resolve) => setTimeout(resolve, 500));
169
+
170
+ return {
171
+ success: true,
172
+ message: `Successfully deleted ${filePath}`,
173
+ };
174
+ },
175
+ },
176
+ },
177
+ });
178
+
179
+ return result.toUIMessageStreamResponse();
180
+ }
181
+ ```
182
+
183
+ ## Features
184
+
185
+ - Context-based state management for approval workflow
186
+ - Conditional rendering based on approval state
187
+ - Support for approval-requested, approval-responded, output-denied, and output-available states
188
+ - Built on shadcn/ui Alert and Button components
189
+ - TypeScript support with comprehensive type definitions
190
+ - Customizable styling with Tailwind CSS
191
+ - Keyboard navigation and accessibility support
192
+ - Theme-aware with automatic dark mode support
193
+
194
+ ## Examples
195
+
196
+ ### Approval Request State
197
+
198
+ Shows the approval request with action buttons when state is `approval-requested`.
199
+
200
+ See `scripts/confirmation-request.tsx` for this example.
201
+
202
+ ### Approved State
203
+
204
+ Shows the accepted status when user approves and state is `approval-responded` or `output-available`.
205
+
206
+ See `scripts/confirmation-accepted.tsx` for this example.
207
+
208
+ ### Rejected State
209
+
210
+ Shows the rejected status when user rejects and state is `output-denied`.
211
+
212
+ See `scripts/confirmation-rejected.tsx` for this example.
213
+
214
+ ## Props
215
+
216
+ ### `<Confirmation />`
217
+
218
+ | Prop | Type | Default | Description |
219
+ |------|------|---------|-------------|
220
+ | `approval` | `ToolUIPart[` | - | The approval object containing the approval ID and status. If not provided or undefined, the component will not render. |
221
+ | `state` | `ToolUIPart[` | - | The current state of the tool (input-streaming, input-available, approval-requested, approval-responded, output-denied, or output-available). Will not render for input-streaming or input-available states. |
222
+ | `className` | `string` | - | Additional CSS classes to apply to the Alert component. |
223
+ | `...props` | `React.ComponentProps<typeof Alert>` | - | Any other props are spread to the Alert component. |
224
+
225
+ ### `<ConfirmationTitle />`
226
+
227
+ A styled description element for displaying a title or label within the confirmation alert.
228
+
229
+ | Prop | Type | Default | Description |
230
+ |------|------|---------|-------------|
231
+ | `...props` | `React.ComponentProps<typeof AlertDescription>` | - | Any other props are spread to the underlying AlertDescription component. |
232
+
233
+ ### `<ConfirmationRequest />`
234
+
235
+ | Prop | Type | Default | Description |
236
+ |------|------|---------|-------------|
237
+ | `children` | `React.ReactNode` | - | The content to display when approval is requested. Only renders when state is |
238
+
239
+ ### `<ConfirmationAccepted />`
240
+
241
+ | Prop | Type | Default | Description |
242
+ |------|------|---------|-------------|
243
+ | `children` | `React.ReactNode` | - | The content to display when approval is accepted. Only renders when approval.approved is true and state is |
244
+
245
+ ### `<ConfirmationRejected />`
246
+
247
+ | Prop | Type | Default | Description |
248
+ |------|------|---------|-------------|
249
+ | `children` | `React.ReactNode` | - | The content to display when approval is rejected. Only renders when approval.approved is false and state is |
250
+
251
+ ### `<ConfirmationActions />`
252
+
253
+ | Prop | Type | Default | Description |
254
+ |------|------|---------|-------------|
255
+ | `className` | `string` | - | Additional CSS classes to apply to the actions container. |
256
+ | `...props` | `React.ComponentProps<` | - | Any other props are spread to the div element. Only renders when state is |
257
+
258
+ ### `<ConfirmationAction />`
259
+
260
+ | Prop | Type | Default | Description |
261
+ |------|------|---------|-------------|
262
+ | `...props` | `React.ComponentProps<typeof Button>` | - | Any other props are spread to the Button component. Styled with h-8 px-3 text-sm classes by default. |
@@ -0,0 +1,34 @@
1
+ # Connection
2
+
3
+ A custom connection line component for React Flow-based canvases with animated bezier curve styling.
4
+
5
+ The `Connection` component provides a styled connection line for React Flow canvases. It renders an animated bezier curve with a circle indicator at the target end, using consistent theming through CSS variables.
6
+
7
+
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npx ai-elements@latest add connection
13
+ ```
14
+
15
+ ## Features
16
+
17
+ - Smooth bezier curve animation for connection lines
18
+ - Visual indicator circle at the target position
19
+ - Theme-aware styling using CSS variables
20
+ - Cubic bezier curve calculation for natural flow
21
+ - Lightweight implementation with minimal props
22
+ - Full TypeScript support with React Flow types
23
+ - Compatible with React Flow's connection system
24
+
25
+ ## Props
26
+
27
+ ### `<Connection />`
28
+
29
+ | Prop | Type | Default | Description |
30
+ |------|------|---------|-------------|
31
+ | `fromX` | `number` | - | The x-coordinate of the connection start point. |
32
+ | `fromY` | `number` | - | The y-coordinate of the connection start point. |
33
+ | `toX` | `number` | - | The x-coordinate of the connection end point. |
34
+ | `toY` | `number` | - | The y-coordinate of the connection end point. |
@@ -0,0 +1,126 @@
1
+ # Context
2
+
3
+ A compound component system for displaying AI model context window usage, token consumption, and cost estimation.
4
+
5
+ The `Context` component provides a comprehensive view of AI model usage through a compound component system. It displays context window utilization, token consumption breakdown (input, output, reasoning, cache), and cost estimation in an interactive hover card interface.
6
+
7
+ See `scripts/context.tsx` for this example.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npx ai-elements@latest add context
13
+ ```
14
+
15
+ ## Features
16
+
17
+ - **Compound Component Architecture**: Flexible composition of context display elements
18
+ - **Visual Progress Indicator**: Circular SVG progress ring showing context usage percentage
19
+ - **Token Breakdown**: Detailed view of input, output, reasoning, and cached tokens
20
+ - **Cost Estimation**: Real-time cost calculation using the `tokenlens` library
21
+ - **Intelligent Formatting**: Automatic token count formatting (K, M, B suffixes)
22
+ - **Interactive Hover Card**: Detailed information revealed on hover
23
+ - **Context Provider Pattern**: Clean data flow through React Context API
24
+ - **TypeScript Support**: Full type definitions for all components
25
+ - **Accessible Design**: Proper ARIA labels and semantic HTML
26
+ - **Theme Integration**: Uses currentColor for automatic theme adaptation
27
+
28
+ ## Props
29
+
30
+ ### `<Context />`
31
+
32
+ | Prop | Type | Default | Description |
33
+ |------|------|---------|-------------|
34
+ | `maxTokens` | `number` | - | The total context window size in tokens. |
35
+ | `usedTokens` | `number` | - | The number of tokens currently used. |
36
+ | `usage` | `LanguageModelUsage` | - | Detailed token usage breakdown from the AI SDK (input, output, reasoning, cached tokens). |
37
+ | `modelId` | `ModelId` | - | Model identifier for cost calculation (e.g., |
38
+ | `...props` | `ComponentProps<HoverCard>` | - | Any other props are spread to the HoverCard component. |
39
+
40
+ ### `<ContextTrigger />`
41
+
42
+ | Prop | Type | Default | Description |
43
+ |------|------|---------|-------------|
44
+ | `children` | `React.ReactNode` | - | Custom trigger element. If not provided, renders a default button with percentage and icon. |
45
+ | `...props` | `ComponentProps<Button>` | - | Props spread to the default button element. |
46
+
47
+ ### `<ContextContent />`
48
+
49
+ | Prop | Type | Default | Description |
50
+ |------|------|---------|-------------|
51
+ | `className` | `string` | - | Additional CSS classes for the hover card content. |
52
+ | `...props` | `ComponentProps<HoverCardContent>` | - | Props spread to the HoverCardContent component. |
53
+
54
+ ### `<ContextContentHeader />`
55
+
56
+ | Prop | Type | Default | Description |
57
+ |------|------|---------|-------------|
58
+ | `children` | `React.ReactNode` | - | Custom header content. If not provided, renders percentage and token count with progress bar. |
59
+ | `...props` | `ComponentProps<div>` | - | Props spread to the header div element. |
60
+
61
+ ### `<ContextContentBody />`
62
+
63
+ | Prop | Type | Default | Description |
64
+ |------|------|---------|-------------|
65
+ | `children` | `React.ReactNode` | - | Body content, typically containing usage breakdown components. |
66
+ | `...props` | `ComponentProps<div>` | - | Props spread to the body div element. |
67
+
68
+ ### `<ContextContentFooter />`
69
+
70
+ | Prop | Type | Default | Description |
71
+ |------|------|---------|-------------|
72
+ | `children` | `React.ReactNode` | - | Custom footer content. If not provided, renders total cost when modelId is provided. |
73
+ | `...props` | `ComponentProps<div>` | - | Props spread to the footer div element. |
74
+
75
+ ### Usage Components
76
+
77
+ All usage components (`ContextInputUsage`, `ContextOutputUsage`, `ContextReasoningUsage`, `ContextCacheUsage`) share the same props:
78
+
79
+ | Prop | Type | Default | Description |
80
+ |------|------|---------|-------------|
81
+ | `children` | `React.ReactNode` | - | Custom content. If not provided, renders token count and cost for the respective usage type. |
82
+ | `className` | `string` | - | Additional CSS classes. |
83
+ | `...props` | `ComponentProps<div>` | - | Props spread to the div element. |
84
+
85
+ ## Component Architecture
86
+
87
+ The Context component uses a compound component pattern with React Context for data sharing:
88
+
89
+ 1. **`<Context>`** - Root provider component that holds all context data
90
+ 2. **`<ContextTrigger>`** - Interactive trigger element (default: button with percentage)
91
+ 3. **`<ContextContent>`** - Hover card content container
92
+ 4. **`<ContextContentHeader>`** - Header section with progress visualization
93
+ 5. **`<ContextContentBody>`** - Body section for usage breakdowns
94
+ 6. **`<ContextContentFooter>`** - Footer section for total cost
95
+ 7. **Usage Components** - Individual token usage displays (Input, Output, Reasoning, Cache)
96
+
97
+ ## Token Formatting
98
+
99
+ The component uses `Intl.NumberFormat` with compact notation for automatic formatting:
100
+
101
+ - Under 1,000: Shows exact count (e.g., "842")
102
+ - 1,000+: Shows with K suffix (e.g., "32K")
103
+ - 1,000,000+: Shows with M suffix (e.g., "1.5M")
104
+ - 1,000,000,000+: Shows with B suffix (e.g., "2.1B")
105
+
106
+ ## Cost Calculation
107
+
108
+ When a `modelId` is provided, the component automatically calculates costs using the `tokenlens` library:
109
+
110
+ - **Input tokens**: Cost based on model's input pricing
111
+ - **Output tokens**: Cost based on model's output pricing
112
+ - **Reasoning tokens**: Special pricing for reasoning-capable models
113
+ - **Cached tokens**: Reduced pricing for cached input tokens
114
+ - **Total cost**: Sum of all token type costs
115
+
116
+ Costs are formatted using `Intl.NumberFormat` with USD currency.
117
+
118
+ ## Styling
119
+
120
+ The component uses Tailwind CSS classes and follows your design system:
121
+
122
+ - Progress indicator uses `currentColor` for theme adaptation
123
+ - Hover card has customizable width and padding
124
+ - Footer has a secondary background for visual separation
125
+ - All text sizes use the `text-xs` class for consistency
126
+ - Muted foreground colors for secondary information
@@ -0,0 +1,32 @@
1
+ # Controls
2
+
3
+ A styled controls component for React Flow-based canvases with zoom and fit view functionality.
4
+
5
+ The `Controls` component provides interactive zoom and fit view controls for React Flow canvases. It includes a modern, themed design with backdrop blur and card styling.
6
+
7
+
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npx ai-elements@latest add controls
13
+ ```
14
+
15
+ ## Features
16
+
17
+ - Zoom in/out controls
18
+ - Fit view button to center and scale content
19
+ - Rounded pill design with backdrop blur
20
+ - Theme-aware card background
21
+ - Subtle drop shadow for depth
22
+ - Full TypeScript support
23
+ - Compatible with all React Flow control features
24
+
25
+ ## Props
26
+
27
+ ### `<Controls />`
28
+
29
+ | Prop | Type | Default | Description |
30
+ |------|------|---------|-------------|
31
+ | `className` | `string` | - | Additional CSS classes to apply to the controls. |
32
+ | `...props` | `ComponentProps<typeof Controls>` | - | Any other props from @xyflow/react Controls component (showZoom, showFitView, showInteractive, position, etc.). |
@@ -0,0 +1,224 @@
1
+ # Conversation
2
+
3
+ Wraps messages and automatically scrolls to the bottom. Also includes a scroll button that appears when not at the bottom.
4
+
5
+ The `Conversation` component wraps messages and automatically scrolls to the bottom. Also includes a scroll button that appears when not at the bottom.
6
+
7
+ <Preview path="conversation" className="p-0" />
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npx ai-elements@latest add conversation
13
+ ```
14
+
15
+ ## Usage with AI SDK
16
+
17
+ Build a simple conversational UI with `Conversation` and [`PromptInput`](/components/prompt-input):
18
+
19
+ Add the following component to your frontend:
20
+
21
+ ```tsx title="app/page.tsx"
22
+ "use client";
23
+
24
+ import {
25
+ Conversation,
26
+ ConversationContent,
27
+ ConversationDownload,
28
+ ConversationEmptyState,
29
+ ConversationScrollButton,
30
+ } from "@/components/ai-elements/conversation";
31
+ import {
32
+ Message,
33
+ MessageContent,
34
+ MessageResponse,
35
+ } from "@/components/ai-elements/message";
36
+ import {
37
+ PromptInput,
38
+ type PromptInputMessage,
39
+ PromptInputTextarea,
40
+ PromptInputSubmit,
41
+ } from "@/components/ai-elements/prompt-input";
42
+ import { MessageSquare } from "lucide-react";
43
+ import { useState } from "react";
44
+ import { useChat } from "@ai-sdk/react";
45
+
46
+ const ConversationDemo = () => {
47
+ const [input, setInput] = useState("");
48
+ const { messages, sendMessage, status } = useChat();
49
+
50
+ const handleSubmit = (message: PromptInputMessage) => {
51
+ if (message.text.trim()) {
52
+ sendMessage({ text: message.text });
53
+ setInput("");
54
+ }
55
+ };
56
+
57
+ return (
58
+ <div className="max-w-4xl mx-auto p-6 relative size-full rounded-lg border h-[600px]">
59
+ <div className="flex flex-col h-full">
60
+ <Conversation>
61
+ <ConversationContent>
62
+ {messages.length === 0 ? (
63
+ <ConversationEmptyState
64
+ icon={<MessageSquare className="size-12" />}
65
+ title="Start a conversation"
66
+ description="Type a message below to begin chatting"
67
+ />
68
+ ) : (
69
+ messages.map((message) => (
70
+ <Message from={message.role} key={message.id}>
71
+ <MessageContent>
72
+ {message.parts.map((part, i) => {
73
+ switch (part.type) {
74
+ case "text": // we don't use any reasoning or tool calls in this example
75
+ return (
76
+ <MessageResponse key={`${message.id}-${i}`}>
77
+ {part.text}
78
+ </MessageResponse>
79
+ );
80
+ default:
81
+ return null;
82
+ }
83
+ })}
84
+ </MessageContent>
85
+ </Message>
86
+ ))
87
+ )}
88
+ </ConversationContent>
89
+ <ConversationDownload messages={messages} />
90
+ <ConversationScrollButton />
91
+ </Conversation>
92
+
93
+ <PromptInput
94
+ onSubmit={handleSubmit}
95
+ className="mt-4 w-full max-w-2xl mx-auto relative"
96
+ >
97
+ <PromptInputTextarea
98
+ value={input}
99
+ placeholder="Say something..."
100
+ onChange={(e) => setInput(e.currentTarget.value)}
101
+ className="pr-12"
102
+ />
103
+ <PromptInputSubmit
104
+ status={status === "streaming" ? "streaming" : "ready"}
105
+ disabled={!input.trim()}
106
+ className="absolute bottom-1 right-1"
107
+ />
108
+ </PromptInput>
109
+ </div>
110
+ </div>
111
+ );
112
+ };
113
+
114
+ export default ConversationDemo;
115
+ ```
116
+
117
+ Add the following route to your backend:
118
+
119
+ ```tsx title="api/chat/route.ts"
120
+ import { streamText, UIMessage, convertToModelMessages } from "ai";
121
+
122
+ // Allow streaming responses up to 30 seconds
123
+ export const maxDuration = 30;
124
+
125
+ export async function POST(req: Request) {
126
+ const { messages }: { messages: UIMessage[] } = await req.json();
127
+
128
+ const result = streamText({
129
+ model: "openai/gpt-4o",
130
+ messages: await convertToModelMessages(messages),
131
+ });
132
+
133
+ return result.toUIMessageStreamResponse();
134
+ }
135
+ ```
136
+
137
+ ## Features
138
+
139
+ - Automatic scrolling to the bottom when new messages are added
140
+ - Smooth scrolling behavior with configurable animation
141
+ - Scroll button that appears when not at the bottom
142
+ - Download conversation as Markdown
143
+ - Responsive design with customizable padding and spacing
144
+ - Flexible content layout with consistent message spacing
145
+ - Accessible with proper ARIA roles for screen readers
146
+ - Customizable styling through className prop
147
+ - Support for any number of child message components
148
+
149
+ ## Props
150
+
151
+ ### `<Conversation />`
152
+
153
+ | Prop | Type | Default | Description |
154
+ |------|------|---------|-------------|
155
+ | `contextRef` | `React.Ref<StickToBottomContext>` | - | Optional ref to access the StickToBottom context object. |
156
+ | `instance` | `StickToBottomInstance` | - | Optional instance for controlling the StickToBottom component. |
157
+ | `children` | `((context: StickToBottomContext) => ReactNode) | ReactNode` | - | Render prop or ReactNode for custom rendering with context. |
158
+ | `...props` | `Omit<React.HTMLAttributes<HTMLDivElement>, ` | - | Any other props are spread to the root div. |
159
+
160
+ ### `<ConversationContent />`
161
+
162
+ | Prop | Type | Default | Description |
163
+ |------|------|---------|-------------|
164
+ | `children` | `((context: StickToBottomContext) => ReactNode) | ReactNode` | - | Render prop or ReactNode for custom rendering with context. |
165
+ | `...props` | `Omit<React.HTMLAttributes<HTMLDivElement>, ` | - | Any other props are spread to the root div. |
166
+
167
+ ### `<ConversationEmptyState />`
168
+
169
+ | Prop | Type | Default | Description |
170
+ |------|------|---------|-------------|
171
+ | `title` | `string` | - | The title text to display. |
172
+ | `description` | `string` | - | The description text to display. |
173
+ | `icon` | `React.ReactNode` | - | Optional icon to display above the text. |
174
+ | `children` | `React.ReactNode` | - | Optional additional content to render below the text. |
175
+ | `...props` | `ComponentProps<` | - | Any other props are spread to the root div. |
176
+
177
+ ### `<ConversationScrollButton />`
178
+
179
+ | Prop | Type | Default | Description |
180
+ |------|------|---------|-------------|
181
+ | `...props` | `ComponentProps<typeof Button>` | - | Any other props are spread to the underlying shadcn/ui Button component. |
182
+
183
+ ### `<ConversationDownload />`
184
+
185
+ A button that downloads the conversation as a Markdown file.
186
+
187
+ ```tsx
188
+ import { ConversationDownload } from "@/components/ai-elements/conversation";
189
+
190
+ <Conversation>
191
+ <ConversationContent>
192
+ {messages.map(...)}
193
+ </ConversationContent>
194
+ <ConversationDownload messages={messages} />
195
+ <ConversationScrollButton />
196
+ </Conversation>
197
+ ```
198
+
199
+ | Prop | Type | Default | Description |
200
+ |------|------|---------|-------------|
201
+ | `messages` | `UIMessage[]` | Required | Array of messages to include in the download. |
202
+ | `filename` | `string` | - | The filename for the downloaded file. |
203
+ | `formatMessage` | `(message: UIMessage, index: number) => string` | - | Custom function to format each message in the output. |
204
+ | `...props` | `Omit<ComponentProps<typeof Button>, ` | - | Any other props are spread to the underlying shadcn/ui Button component. |
205
+
206
+ ### `messagesToMarkdown`
207
+
208
+ A utility function to convert messages to Markdown format. Useful for custom download implementations.
209
+
210
+ ```tsx
211
+ import { messagesToMarkdown } from "@/components/ai-elements/conversation";
212
+
213
+ const markdown = messagesToMarkdown(messages);
214
+
215
+ // With custom formatter
216
+ const customMarkdown = messagesToMarkdown(
217
+ messages,
218
+ (msg, i) =>
219
+ `[${msg.role}]: ${msg.parts
220
+ .filter((p) => p.type === "text")
221
+ .map((p) => p.text)
222
+ .join("")}`
223
+ );
224
+ ```